@feugene/granularity 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/dist/GrBadge.css +1 -1
  2. package/dist/GrFormFile.css +1 -1
  3. package/dist/GrToaster.css +1 -1
  4. package/dist/GrTree.css +1 -1
  5. package/dist/chunks/{config-ClhKPJvg.js → config-23WtUiAL.js} +1 -1
  6. package/dist/chunks/config-23WtUiAL.js.map +1 -0
  7. package/dist/chunks/config-8Pcutu1j.js.map +1 -0
  8. package/dist/chunks/{config-1uSYl98Y2.js → config-B0i5r8kH.js} +1 -1
  9. package/dist/chunks/config-B0i5r8kH.js.map +1 -0
  10. package/dist/chunks/{config-BOlr7qw7.js → config-B5Rknzkd.js} +33 -39
  11. package/dist/chunks/config-B5Rknzkd.js.map +1 -0
  12. package/dist/chunks/config-B7W9VlZ7.js +5 -0
  13. package/dist/chunks/config-B7W9VlZ7.js.map +1 -0
  14. package/dist/chunks/config-BDSHekVC.js +84 -0
  15. package/dist/chunks/config-BDSHekVC.js.map +1 -0
  16. package/dist/chunks/config-BLHqZhy-.js.map +1 -0
  17. package/dist/chunks/{config-eYLZYOUS2.js → config-BMKNHFMD2.js} +15 -15
  18. package/dist/chunks/config-BMKNHFMD2.js.map +1 -0
  19. package/dist/chunks/config-BUHuGBik2.js.map +1 -0
  20. package/dist/chunks/config-BX1JTrkV.js.map +1 -0
  21. package/dist/chunks/config-BXtAmU3s.js.map +1 -0
  22. package/dist/chunks/config-BZFUM3Ky.js +75 -0
  23. package/dist/chunks/config-BZFUM3Ky.js.map +1 -0
  24. package/dist/chunks/{config-DUcu1D682.js → config-BmNT0Fmx.js} +2 -2
  25. package/dist/chunks/config-BmNT0Fmx.js.map +1 -0
  26. package/dist/chunks/{config-C49QUoJL.js → config-BvVq2gbd.js} +1 -1
  27. package/dist/chunks/{config-C49QUoJL.js.map → config-BvVq2gbd.js.map} +1 -1
  28. package/dist/chunks/{config-CrG1XiE72.js → config-C4hJxXDa.js} +5 -5
  29. package/dist/chunks/config-C4hJxXDa.js.map +1 -0
  30. package/dist/chunks/config-CB4RVt9M.js +66 -0
  31. package/dist/chunks/config-CB4RVt9M.js.map +1 -0
  32. package/dist/chunks/config-CGHLoBlH2.js.map +1 -0
  33. package/dist/chunks/config-COE_vZ-l.js +52 -0
  34. package/dist/chunks/config-COE_vZ-l.js.map +1 -0
  35. package/dist/chunks/{config-CziwTDDL.js → config-CPdmr7tC.js} +1 -1
  36. package/dist/chunks/{config-CziwTDDL.js.map → config-CPdmr7tC.js.map} +1 -1
  37. package/dist/chunks/{config-BIRO0vDJ.js → config-DPDFYzIa.js} +2 -2
  38. package/dist/chunks/config-DPDFYzIa.js.map +1 -0
  39. package/dist/chunks/{config-DnvPqu4g2.js → config-DRKXJ9PW2.js} +1 -1
  40. package/dist/chunks/{config-DnvPqu4g2.js.map → config-DRKXJ9PW2.js.map} +1 -1
  41. package/dist/chunks/config-DToHb81g.js +45 -0
  42. package/dist/chunks/config-DToHb81g.js.map +1 -0
  43. package/dist/chunks/{config-jBp9wVv-.js → config-D_myOZbA.js} +1 -1
  44. package/dist/chunks/{config-jBp9wVv-.js.map → config-D_myOZbA.js.map} +1 -1
  45. package/dist/chunks/{config-D_R56_gT.js → config-Dg_6FTvJ.js} +1 -1
  46. package/dist/chunks/config-Dg_6FTvJ.js.map +1 -0
  47. package/dist/chunks/config-Dqy0rPPO2.js.map +1 -0
  48. package/dist/chunks/config-Droqn55j.js +8 -0
  49. package/dist/chunks/config-Droqn55j.js.map +1 -0
  50. package/dist/chunks/config-JpHA4Xx0.js.map +1 -0
  51. package/dist/chunks/{config-C4snOIXg.js → config-KXuionN3.js} +1 -1
  52. package/dist/chunks/{config-C4snOIXg.js.map → config-KXuionN3.js.map} +1 -1
  53. package/dist/chunks/{config-DezDih8_.js → config-LqDC_rvp.js} +2 -2
  54. package/dist/chunks/config-LqDC_rvp.js.map +1 -0
  55. package/dist/chunks/config-QaIc_gRa2.js.map +1 -0
  56. package/dist/chunks/config-U4m9PSql2.js.map +1 -0
  57. package/dist/chunks/{config-B7IIWGt_2.js → config-XmTv4pnI.js} +2 -2
  58. package/dist/chunks/config-XmTv4pnI.js.map +1 -0
  59. package/dist/chunks/config-eXB87DOi.js.map +1 -0
  60. package/dist/chunks/{config-C7NpDrfO.js → config-gZWR75Bh2.js} +1 -1
  61. package/dist/chunks/config-gZWR75Bh2.js.map +1 -0
  62. package/dist/chunks/config-ipvU0lzP.js.map +1 -0
  63. package/dist/chunks/config-xR4XVmcy2.js.map +1 -0
  64. package/dist/chunks/context-Bfrgsluh.js +9 -0
  65. package/dist/chunks/context-Bfrgsluh.js.map +1 -0
  66. package/dist/chunks/context-DfWYCBB-.js +129 -0
  67. package/dist/chunks/context-DfWYCBB-.js.map +1 -0
  68. package/dist/chunks/{en-CfkDa4GX.js → en-Cr6EkG8c.js} +46 -4
  69. package/dist/chunks/en-Cr6EkG8c.js.map +1 -0
  70. package/dist/chunks/{es-CgaLnFYx.js → es-DuYb1Qju.js} +3 -3
  71. package/dist/chunks/{es-CgaLnFYx.js.map → es-DuYb1Qju.js.map} +1 -1
  72. package/dist/chunks/{es-FkgECuCm.js → es-i08e9Sdo.js} +46 -4
  73. package/dist/chunks/es-i08e9Sdo.js.map +1 -0
  74. package/dist/chunks/{grBadgeStyles-DrycBuKT.js → grBadgeStyles-D3dFjr_N.js} +12 -12
  75. package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +1 -0
  76. package/dist/chunks/{grButtonStyles-C7Yga_Q1.js → grButtonStyles-DRBgDmOp.js} +28 -28
  77. package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +1 -0
  78. package/dist/chunks/{grDropdownStyles-B_-DKytw.js → grDropdownStyles-HBPkghVr.js} +2 -2
  79. package/dist/chunks/{grDropdownStyles-B_-DKytw.js.map → grDropdownStyles-HBPkghVr.js.map} +1 -1
  80. package/dist/chunks/{grModalStyles-DWd3i05Q.js → grModalStyles-D8-shx9A.js} +1 -1
  81. package/dist/chunks/grModalStyles-D8-shx9A.js.map +1 -0
  82. package/dist/chunks/{grSelectStyles-CLK5hRd3.js → grSelectStyles-CwMUQrBZ.js} +12 -12
  83. package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +1 -0
  84. package/dist/chunks/{grStyle-Blc9otAx.js → grStyle-CdvxTXPH.js} +2 -2
  85. package/dist/chunks/grStyle-CdvxTXPH.js.map +1 -0
  86. package/dist/chunks/{granularityI18n-DoV7Ca2m.js → granularityI18n-SH0I--GW.js} +1 -1
  87. package/dist/chunks/{granularityI18n-DoV7Ca2m.js.map → granularityI18n-SH0I--GW.js.map} +1 -1
  88. package/dist/chunks/{ru-Bl8CxpEa.js → ru-B5XOOYZt.js} +46 -4
  89. package/dist/chunks/ru-B5XOOYZt.js.map +1 -0
  90. package/dist/chunks/{safelist-Do2RtzLB.js → safelist-BvO8HPnE.js} +1 -1
  91. package/dist/chunks/{safelist-Do2RtzLB.js.map → safelist-BvO8HPnE.js.map} +1 -1
  92. package/dist/chunks/shared-D-v9lit0.js +188 -0
  93. package/dist/chunks/shared-D-v9lit0.js.map +1 -0
  94. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +251 -0
  95. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +1 -0
  96. package/dist/components/GrAlert/index.js +2 -2
  97. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +499 -0
  98. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +1 -0
  99. package/dist/components/GrAutocomplete/index.js +3 -0
  100. package/dist/components/GrAvatar/chunks/{GrAvatar-96CpTCq5.js → GrAvatar-CTOUVBF7.js} +1 -1
  101. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +1 -0
  102. package/dist/components/GrAvatar/index.js +1 -1
  103. package/dist/components/GrBadge/chunks/{GrBadge-B77XlaqE.js → GrBadge-D1jefy4S.js} +12 -8
  104. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +1 -0
  105. package/dist/components/GrBadge/index.js +2 -2
  106. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CcktMOdg.js → GrBadgeWrap-DWDxHdiQ.js} +1 -1
  107. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +1 -0
  108. package/dist/components/GrBadgeWrap/index.js +1 -1
  109. package/dist/components/GrBottomNav/chunks/{GrBottomNav-usuMgG8_.js → GrBottomNav-vSE4LXmk.js} +2 -2
  110. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +1 -0
  111. package/dist/components/GrBottomNav/index.js +1 -1
  112. package/dist/components/GrButton/chunks/{GrButton-BlffdeJr.js → GrButton-DCi4CUpo.js} +18 -14
  113. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +1 -0
  114. package/dist/components/GrButton/index.js +4 -4
  115. package/dist/components/GrCard/chunks/{GrCard-DUNMkuHW.js → GrCard-CxCjyHMb.js} +1 -1
  116. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +1 -0
  117. package/dist/components/GrCard/index.js +1 -1
  118. package/dist/components/GrCheckbox/chunks/{GrCheckbox-DJhzZZdO.js → GrCheckbox-BbIDRXtl.js} +5 -5
  119. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +1 -0
  120. package/dist/components/GrCheckbox/index.js +1 -1
  121. package/dist/components/GrCollapse/chunks/{GrCollapse-CPPLh_xU.js → GrCollapse-DApXztn8.js} +6 -6
  122. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +1 -0
  123. package/dist/components/GrCollapse/index.js +2 -2
  124. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +410 -0
  125. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +1 -0
  126. package/dist/components/GrCommandPalette/index.js +3 -0
  127. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +57 -0
  128. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +1 -0
  129. package/dist/components/GrConfigProvider/index.js +4 -0
  130. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-D8CkOtqv.js → GrConfirmDialog-e4120mWw.js} +5 -5
  131. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +1 -0
  132. package/dist/components/GrConfirmDialog/index.js +2 -2
  133. package/dist/components/GrDataTable/chunks/{GrDataTable-Ds5OeGat.js → GrDataTable-C1CzxV0p.js} +127 -25
  134. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +1 -0
  135. package/dist/components/GrDataTable/index.js +2 -2
  136. package/dist/components/GrDialog/chunks/{GrDialog-Ctucxju9.js → GrDialog-BPMvDHOz.js} +5 -5
  137. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +1 -0
  138. package/dist/components/GrDialog/index.js +1 -1
  139. package/dist/components/GrDialogService/chunks/{GrDialogService-CU1Fbonc.js → GrDialogService-CYXCTGm3.js} +36 -11
  140. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +1 -0
  141. package/dist/components/GrDialogService/index.js +2 -2
  142. package/dist/components/GrDivider/chunks/{GrDivider-5bcE-BB4.js → GrDivider-BdENZ1w0.js} +5 -5
  143. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +1 -0
  144. package/dist/components/GrDivider/index.js +1 -1
  145. package/dist/components/GrDrawer/chunks/{GrDrawer-SLGKCY2A.js → GrDrawer-KevdZ5BB.js} +5 -5
  146. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +1 -0
  147. package/dist/components/GrDrawer/index.js +2 -2
  148. package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js → GrDropdown-BKoy8hm-.js} +1 -1
  149. package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js.map → GrDropdown-BKoy8hm-.js.map} +1 -1
  150. package/dist/components/GrDropdown/index.js +2 -2
  151. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu--g9Vofcq.js → GrDropdownMenu-zCatXzmt.js} +11 -11
  152. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +1 -0
  153. package/dist/components/GrDropdownMenu/index.js +1 -1
  154. package/dist/components/GrEmptyState/chunks/{GrEmptyState-CA3BiTV7.js → GrEmptyState-CNb0BzjG.js} +3 -3
  155. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +1 -0
  156. package/dist/components/GrEmptyState/index.js +1 -1
  157. package/dist/components/GrFileUpload/chunks/{GrFileUpload-DvWPpiJS.js → GrFileUpload-CnLgUGDF.js} +12 -12
  158. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +1 -0
  159. package/dist/components/GrFileUpload/index.js +1 -1
  160. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +234 -0
  161. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +1 -0
  162. package/dist/components/GrForm/index.js +4 -0
  163. package/dist/components/GrFormField/chunks/{GrFormField-DnfMHx_U.js → GrFormField-CXCDBd99.js} +41 -14
  164. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +1 -0
  165. package/dist/components/GrFormField/index.js +1 -1
  166. package/dist/components/GrFormFile/chunks/{GrFormFile-CXcqqdvV.js → GrFormFile-CqacSbUl.js} +9 -9
  167. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +1 -0
  168. package/dist/components/GrFormFile/index.js +1 -1
  169. package/dist/components/GrFormSection/chunks/{GrFormSection-Ce21jcgo.js → GrFormSection-C3w9DQJf.js} +1 -1
  170. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +1 -0
  171. package/dist/components/GrFormSection/index.js +1 -1
  172. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js → GrImageViewer-DDLJkvIU.js} +1 -1
  173. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js.map → GrImageViewer-DDLJkvIU.js.map} +1 -1
  174. package/dist/components/GrImageViewer/index.js +1 -1
  175. package/dist/components/GrInput/chunks/{GrInput-B8dd3JaA.js → GrInput-C1VBL0dg.js} +18 -15
  176. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +1 -0
  177. package/dist/components/GrInput/index.js +2 -2
  178. package/dist/components/GrInputTag/chunks/{GrInputTag-zMgFqp2g.js → GrInputTag-BMk9jm42.js} +6 -6
  179. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +1 -0
  180. package/dist/components/GrInputTag/index.js +2 -2
  181. package/dist/components/GrKbd/chunks/{GrKbd-BEoYxWhE.js → GrKbd-DTspwtoN.js} +1 -1
  182. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +1 -0
  183. package/dist/components/GrKbd/index.js +1 -1
  184. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js → GrLink-BP0YrnL9.js} +1 -1
  185. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js.map → GrLink-BP0YrnL9.js.map} +1 -1
  186. package/dist/components/GrLink/index.js +2 -2
  187. package/dist/components/GrList/chunks/{GrList-Dx772Ns4.js → GrList-5RA-tZzE.js} +3 -3
  188. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +1 -0
  189. package/dist/components/GrList/index.js +1 -1
  190. package/dist/components/GrLoading/chunks/{GrLoading--X_7rdbb.js → GrLoading-fRDtVfi7.js} +3 -3
  191. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +1 -0
  192. package/dist/components/GrLoading/index.js +2 -2
  193. package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js → GrModal-BTu1-5eY.js} +1 -1
  194. package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js.map → GrModal-BTu1-5eY.js.map} +1 -1
  195. package/dist/components/GrModal/index.js +3 -3
  196. package/dist/components/GrNavbar/chunks/{GrNavbar-DW3MiIIf.js → GrNavbar-keKT_mIM.js} +3 -3
  197. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +1 -0
  198. package/dist/components/GrNavbar/index.js +1 -1
  199. package/dist/components/GrNumberInput/chunks/{GrNumberInput-DxCEvL7V.js → GrNumberInput-l9ZOHG9D.js} +19 -17
  200. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +1 -0
  201. package/dist/components/GrNumberInput/index.js +2 -2
  202. package/dist/components/GrPagination/chunks/{GrPagination-mlyfLjQY.js → GrPagination-C5Y69CuK.js} +59 -16
  203. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +1 -0
  204. package/dist/components/GrPagination/index.js +2 -2
  205. package/dist/components/GrProgressBar/chunks/{GrProgressBar-CC3z-Zqp.js → GrProgressBar-Dqg4Fj9S.js} +2 -2
  206. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +1 -0
  207. package/dist/components/GrProgressBar/index.js +2 -2
  208. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-C-_BMNuY.js → GrPromptDialog-DNUjRVB9.js} +7 -7
  209. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +1 -0
  210. package/dist/components/GrPromptDialog/index.js +2 -2
  211. package/dist/components/GrRadio/chunks/{GrRadio-Dr-pvs_9.js → GrRadio-DlhxPGqf.js} +5 -7
  212. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +1 -0
  213. package/dist/components/GrRadio/index.js +2 -2
  214. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-nOdvfV_g.js → GrRadioGroup-BXt9iw4q.js} +7 -5
  215. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +1 -0
  216. package/dist/components/GrRadioGroup/index.js +2 -2
  217. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +241 -0
  218. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +1 -0
  219. package/dist/components/GrRating/index.js +3 -0
  220. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js → GrResponseErrorBanner-2CvM7Z08.js} +2 -2
  221. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js.map → GrResponseErrorBanner-2CvM7Z08.js.map} +1 -1
  222. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js → GrResponseErrorBanner-C8NGx8pE.js} +3 -3
  223. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js.map → GrResponseErrorBanner-C8NGx8pE.js.map} +1 -1
  224. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  225. package/dist/components/GrSegmented/chunks/{GrSegmented-C1y0UXpQ.js → GrSegmented-CTd3n4PA.js} +14 -11
  226. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +1 -0
  227. package/dist/components/GrSegmented/index.js +2 -2
  228. package/dist/components/GrSelect/chunks/{GrSelect-BVCmitqa.js → GrSelect-Dn3FgJ3Z.js} +161 -75
  229. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +1 -0
  230. package/dist/components/GrSelect/index.js +2 -2
  231. package/dist/components/GrSidebar/chunks/{GrSidebar-DkWozzwA.js → GrSidebar-cvnzBfj3.js} +7 -7
  232. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +1 -0
  233. package/dist/components/GrSidebar/index.js +2 -2
  234. package/dist/components/GrSkeleton/chunks/{GrSkeleton-DsN-_CDZ.js → GrSkeleton-BucA5F4J.js} +1 -1
  235. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +1 -0
  236. package/dist/components/GrSkeleton/index.js +2 -2
  237. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +286 -0
  238. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +1 -0
  239. package/dist/components/GrSlider/index.js +3 -0
  240. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +128 -0
  241. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +1 -0
  242. package/dist/components/GrStatistic/index.js +3 -0
  243. package/dist/components/GrSwitch/chunks/{GrSwitch-DAioyccZ.js → GrSwitch-CJdRvS0s.js} +16 -7
  244. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +1 -0
  245. package/dist/components/GrSwitch/index.js +2 -2
  246. package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js → GrTabPanels-DeEMgb_y.js} +1 -1
  247. package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js.map → GrTabPanels-DeEMgb_y.js.map} +1 -1
  248. package/dist/components/GrTabPanels/index.js +2 -2
  249. package/dist/components/GrTable/chunks/{GrTable-Db3hRnKA.js → GrTable-sNvsA8wa.js} +24 -11
  250. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +1 -0
  251. package/dist/components/GrTable/index.js +2 -2
  252. package/dist/components/GrTabs/chunks/{GrTabs-DsLwWoRz.js → GrTabs-BqTak0SR.js} +3 -3
  253. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +1 -0
  254. package/dist/components/GrTabs/index.js +2 -2
  255. package/dist/components/GrTextarea/chunks/{GrTextarea-CKukGlNl.js → GrTextarea-DIYBAPpP.js} +2 -2
  256. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +1 -0
  257. package/dist/components/GrTextarea/index.js +2 -2
  258. package/dist/components/GrToaster/chunks/{GrToaster-L2cu6cSR.js → GrToaster-BVHjIHcM.js} +51 -10
  259. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +1 -0
  260. package/dist/components/GrToaster/index.js +1 -1
  261. package/dist/components/GrTooltip/chunks/{GrTooltip-BeyZ8ssR.js → GrTooltip-BMKH2lIx.js} +3 -3
  262. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +1 -0
  263. package/dist/components/GrTooltip/index.js +1 -1
  264. package/dist/components/GrTree/chunks/{GrTree-B2_yW6g1.js → GrTree-_12ChXRQ.js} +3 -3
  265. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +1 -0
  266. package/dist/components/GrTree/index.js +1 -1
  267. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-0aM62xyu.js → GrTreeSelect-CdaLG7Xq.js} +10 -10
  268. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +1 -0
  269. package/dist/components/GrTreeSelect/index.js +2 -2
  270. package/dist/composables/useToast.js +3 -1
  271. package/dist/composables/useToast.js.map +1 -1
  272. package/dist/directives/loading.js +1 -1
  273. package/dist/granular-provider-node.js +6 -6
  274. package/dist/granular-provider-node.js.map +1 -1
  275. package/dist/granular-provider.js +1 -1
  276. package/dist/i18n/all.js +1 -1
  277. package/dist/i18n/index.js +1 -1
  278. package/dist/index.js +111 -93
  279. package/dist/index.js.map +1 -1
  280. package/dist/styles/base.css +2 -2
  281. package/dist/styles/index.css +6 -3
  282. package/dist/styles/preflight.css +3 -3
  283. package/dist/styles/themes/dark.css +52 -40
  284. package/dist/styles/themes/light.css +70 -45
  285. package/dist/styles/tokens.css +20 -20
  286. package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +26 -14
  287. package/dist/types/src/components/GrAlert/defaults.d.ts +17 -0
  288. package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +55 -0
  289. package/dist/types/src/components/GrAlert/index.d.ts +4 -1
  290. package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +153 -0
  291. package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -0
  292. package/dist/types/src/components/GrAutocomplete/defaults.d.ts +15 -0
  293. package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +27 -0
  294. package/dist/types/src/components/GrAutocomplete/index.d.ts +6 -0
  295. package/dist/types/src/components/GrAutocomplete/safelist.d.ts +1 -0
  296. package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +1 -1
  297. package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +7 -7
  298. package/dist/types/src/components/GrBadge/defaults.d.ts +15 -0
  299. package/dist/types/src/components/GrBadge/index.d.ts +1 -0
  300. package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +1 -1
  301. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +12 -12
  302. package/dist/types/src/components/GrButton/defaults.d.ts +25 -0
  303. package/dist/types/src/components/GrButton/grButtonStyles.d.ts +2 -2
  304. package/dist/types/src/components/GrButton/index.d.ts +1 -0
  305. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +4 -4
  306. package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +2 -2
  307. package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
  308. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +128 -0
  309. package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -0
  310. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +35 -0
  311. package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +20 -0
  312. package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +23 -0
  313. package/dist/types/src/components/GrCommandPalette/index.d.ts +6 -0
  314. package/dist/types/src/components/GrCommandPalette/safelist.d.ts +1 -0
  315. package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +59 -0
  316. package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -0
  317. package/dist/types/src/components/GrConfigProvider/context.d.ts +131 -0
  318. package/dist/types/src/components/GrConfigProvider/index.d.ts +5 -0
  319. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +2 -2
  320. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +20 -0
  321. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +1 -1
  322. package/dist/types/src/components/GrDialogService/store.d.ts +18 -0
  323. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
  324. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +1 -1
  325. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +1 -1
  326. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
  327. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +3 -3
  328. package/dist/types/src/components/GrForm/GrForm.vue.d.ts +93 -0
  329. package/dist/types/src/components/GrForm/config.d.ts +1 -0
  330. package/dist/types/src/components/GrForm/context.d.ts +27 -0
  331. package/dist/types/src/components/GrForm/index.d.ts +6 -0
  332. package/dist/types/src/components/GrForm/validation.d.ts +52 -0
  333. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +11 -1
  334. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +4 -4
  335. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +3 -3
  336. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +12 -12
  337. package/dist/types/src/components/GrInput/defaults.d.ts +18 -0
  338. package/dist/types/src/components/GrInput/grInputStyles.d.ts +1 -1
  339. package/dist/types/src/components/GrInput/index.d.ts +1 -0
  340. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
  341. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +3 -3
  342. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +3 -3
  343. package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
  344. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +10 -10
  345. package/dist/types/src/components/GrNumberInput/defaults.d.ts +14 -0
  346. package/dist/types/src/components/GrNumberInput/index.d.ts +1 -0
  347. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +18 -0
  348. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +4 -4
  349. package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +5 -5
  350. package/dist/types/src/components/GrRadio/defaults.d.ts +14 -0
  351. package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +3 -3
  352. package/dist/types/src/components/GrRadio/index.d.ts +1 -0
  353. package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +4 -4
  354. package/dist/types/src/components/GrRadioGroup/defaults.d.ts +14 -0
  355. package/dist/types/src/components/GrRadioGroup/index.d.ts +1 -0
  356. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +124 -0
  357. package/dist/types/src/components/GrRating/config.d.ts +1 -0
  358. package/dist/types/src/components/GrRating/defaults.d.ts +14 -0
  359. package/dist/types/src/components/GrRating/grRatingStyles.d.ts +21 -0
  360. package/dist/types/src/components/GrRating/index.d.ts +6 -0
  361. package/dist/types/src/components/GrRating/safelist.d.ts +1 -0
  362. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +1 -1
  363. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +7 -7
  364. package/dist/types/src/components/GrSegmented/defaults.d.ts +15 -0
  365. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +1 -1
  366. package/dist/types/src/components/GrSegmented/index.d.ts +1 -0
  367. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +57 -17
  368. package/dist/types/src/components/GrSelect/defaults.d.ts +17 -0
  369. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +3 -3
  370. package/dist/types/src/components/GrSelect/index.d.ts +1 -0
  371. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +2 -2
  372. package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
  373. package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +88 -0
  374. package/dist/types/src/components/GrSlider/config.d.ts +1 -0
  375. package/dist/types/src/components/GrSlider/defaults.d.ts +14 -0
  376. package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +36 -0
  377. package/dist/types/src/components/GrSlider/index.d.ts +6 -0
  378. package/dist/types/src/components/GrSlider/safelist.d.ts +1 -0
  379. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +116 -0
  380. package/dist/types/src/components/GrStatistic/config.d.ts +1 -0
  381. package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +16 -0
  382. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +24 -0
  383. package/dist/types/src/components/GrStatistic/index.d.ts +6 -0
  384. package/dist/types/src/components/GrStatistic/safelist.d.ts +1 -0
  385. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +4 -4
  386. package/dist/types/src/components/GrSwitch/defaults.d.ts +14 -0
  387. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
  388. package/dist/types/src/components/GrSwitch/index.d.ts +1 -0
  389. package/dist/types/src/components/GrTable/GrTable.vue.d.ts +16 -0
  390. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +5 -5
  391. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +19 -2
  392. package/dist/types/src/components/GrToaster/index.d.ts +1 -1
  393. package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +1 -1
  394. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +1 -1
  395. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  396. package/dist/types/src/composables/useToast.d.ts +24 -0
  397. package/dist/types/src/granular-provider/shared.d.ts +7 -0
  398. package/dist/types/src/i18n/messages/en.d.ts +74 -0
  399. package/dist/types/src/i18n/messages/es.d.ts +74 -0
  400. package/dist/types/src/i18n/messages/ru.d.ts +74 -0
  401. package/dist/types/src/index.d.ts +7 -0
  402. package/dist/web-types.json +1308 -271
  403. package/package.json +29 -1
  404. package/dist/chunks/config-1uSYl98Y2.js.map +0 -1
  405. package/dist/chunks/config-8Pcutu1j2.js.map +0 -1
  406. package/dist/chunks/config-B7IIWGt_2.js.map +0 -1
  407. package/dist/chunks/config-BIRO0vDJ.js.map +0 -1
  408. package/dist/chunks/config-BLHqZhy-2.js.map +0 -1
  409. package/dist/chunks/config-BOlr7qw7.js.map +0 -1
  410. package/dist/chunks/config-BUHuGBik.js.map +0 -1
  411. package/dist/chunks/config-BX1JTrkV2.js.map +0 -1
  412. package/dist/chunks/config-BXtAmU3s2.js.map +0 -1
  413. package/dist/chunks/config-C7NpDrfO.js.map +0 -1
  414. package/dist/chunks/config-CGHLoBlH.js.map +0 -1
  415. package/dist/chunks/config-ClhKPJvg.js.map +0 -1
  416. package/dist/chunks/config-Cpi9Mh2J.js.map +0 -1
  417. package/dist/chunks/config-CrG1XiE72.js.map +0 -1
  418. package/dist/chunks/config-DUcu1D682.js.map +0 -1
  419. package/dist/chunks/config-D_R56_gT.js.map +0 -1
  420. package/dist/chunks/config-DezDih8_.js.map +0 -1
  421. package/dist/chunks/config-JpHA4Xx02.js.map +0 -1
  422. package/dist/chunks/config-QaIc_gRa.js.map +0 -1
  423. package/dist/chunks/config-U4m9PSql.js.map +0 -1
  424. package/dist/chunks/config-eXB87DOi2.js.map +0 -1
  425. package/dist/chunks/config-eYLZYOUS2.js.map +0 -1
  426. package/dist/chunks/config-ipvU0lzP2.js.map +0 -1
  427. package/dist/chunks/config-xR4XVmcy.js.map +0 -1
  428. package/dist/chunks/en-CfkDa4GX.js.map +0 -1
  429. package/dist/chunks/es-FkgECuCm.js.map +0 -1
  430. package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +0 -1
  431. package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +0 -1
  432. package/dist/chunks/grModalStyles-DWd3i05Q.js.map +0 -1
  433. package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +0 -1
  434. package/dist/chunks/grStyle-Blc9otAx.js.map +0 -1
  435. package/dist/chunks/ru-Bl8CxpEa.js.map +0 -1
  436. package/dist/chunks/shared-B6Ay2081.js +0 -174
  437. package/dist/chunks/shared-B6Ay2081.js.map +0 -1
  438. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js +0 -163
  439. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +0 -1
  440. package/dist/components/GrAvatar/chunks/GrAvatar-96CpTCq5.js.map +0 -1
  441. package/dist/components/GrBadge/chunks/GrBadge-B77XlaqE.js.map +0 -1
  442. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CcktMOdg.js.map +0 -1
  443. package/dist/components/GrBottomNav/chunks/GrBottomNav-usuMgG8_.js.map +0 -1
  444. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +0 -1
  445. package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +0 -1
  446. package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +0 -1
  447. package/dist/components/GrCollapse/chunks/GrCollapse-CPPLh_xU.js.map +0 -1
  448. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js.map +0 -1
  449. package/dist/components/GrDataTable/chunks/GrDataTable-Ds5OeGat.js.map +0 -1
  450. package/dist/components/GrDialog/chunks/GrDialog-Ctucxju9.js.map +0 -1
  451. package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js.map +0 -1
  452. package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js.map +0 -1
  453. package/dist/components/GrDrawer/chunks/GrDrawer-SLGKCY2A.js.map +0 -1
  454. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu--g9Vofcq.js.map +0 -1
  455. package/dist/components/GrEmptyState/chunks/GrEmptyState-CA3BiTV7.js.map +0 -1
  456. package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +0 -1
  457. package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js.map +0 -1
  458. package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +0 -1
  459. package/dist/components/GrFormSection/chunks/GrFormSection-Ce21jcgo.js.map +0 -1
  460. package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js.map +0 -1
  461. package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +0 -1
  462. package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js.map +0 -1
  463. package/dist/components/GrList/chunks/GrList-Dx772Ns4.js.map +0 -1
  464. package/dist/components/GrLoading/chunks/GrLoading--X_7rdbb.js.map +0 -1
  465. package/dist/components/GrNavbar/chunks/GrNavbar-DW3MiIIf.js.map +0 -1
  466. package/dist/components/GrNumberInput/chunks/GrNumberInput-DxCEvL7V.js.map +0 -1
  467. package/dist/components/GrPagination/chunks/GrPagination-mlyfLjQY.js.map +0 -1
  468. package/dist/components/GrProgressBar/chunks/GrProgressBar-CC3z-Zqp.js.map +0 -1
  469. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js.map +0 -1
  470. package/dist/components/GrRadio/chunks/GrRadio-Dr-pvs_9.js.map +0 -1
  471. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-nOdvfV_g.js.map +0 -1
  472. package/dist/components/GrSegmented/chunks/GrSegmented-C1y0UXpQ.js.map +0 -1
  473. package/dist/components/GrSelect/chunks/GrSelect-BVCmitqa.js.map +0 -1
  474. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +0 -1
  475. package/dist/components/GrSkeleton/chunks/GrSkeleton-DsN-_CDZ.js.map +0 -1
  476. package/dist/components/GrSwitch/chunks/GrSwitch-DAioyccZ.js.map +0 -1
  477. package/dist/components/GrTable/chunks/GrTable-Db3hRnKA.js.map +0 -1
  478. package/dist/components/GrTabs/chunks/GrTabs-DsLwWoRz.js.map +0 -1
  479. package/dist/components/GrTextarea/chunks/GrTextarea-CKukGlNl.js.map +0 -1
  480. package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js.map +0 -1
  481. package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js.map +0 -1
  482. package/dist/components/GrTree/chunks/GrTree-B2_yW6g1.js.map +0 -1
  483. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-0aM62xyu.js.map +0 -1
  484. package/dist/chunks/{config-8Pcutu1j2.js → config-8Pcutu1j.js} +0 -0
  485. package/dist/chunks/{config-BLHqZhy-2.js → config-BLHqZhy-.js} +0 -0
  486. package/dist/chunks/{config-BUHuGBik.js → config-BUHuGBik2.js} +0 -0
  487. package/dist/chunks/{config-BX1JTrkV2.js → config-BX1JTrkV.js} +0 -0
  488. package/dist/chunks/{config-BXtAmU3s2.js → config-BXtAmU3s.js} +0 -0
  489. package/dist/chunks/{config-CGHLoBlH.js → config-CGHLoBlH2.js} +0 -0
  490. package/dist/chunks/{config-Cpi9Mh2J.js → config-Dqy0rPPO2.js} +1 -1
  491. /package/dist/chunks/{config-JpHA4Xx02.js → config-JpHA4Xx0.js} +0 -0
  492. /package/dist/chunks/{config-QaIc_gRa.js → config-QaIc_gRa2.js} +0 -0
  493. /package/dist/chunks/{config-U4m9PSql.js → config-U4m9PSql2.js} +0 -0
  494. /package/dist/chunks/{config-eXB87DOi2.js → config-eXB87DOi.js} +0 -0
  495. /package/dist/chunks/{config-ipvU0lzP2.js → config-ipvU0lzP.js} +0 -0
  496. /package/dist/chunks/{config-xR4XVmcy.js → config-xR4XVmcy2.js} +0 -0
@@ -0,0 +1,410 @@
1
+ import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
2
+ import { t as GrKbd_default } from "../../GrKbd/chunks/GrKbd-DTspwtoN.js";
3
+ import { t as GrModal_default } from "../../GrModal/chunks/GrModal-BTu1-5eY.js";
4
+ import { a as commandGroupLabelClass, c as commandSearchInputClass, i as commandFooterClass, l as commandSearchRowClass, o as commandItemClass, r as commandEmptyClass, s as commandPaletteModalSizeBySize } from "../../../chunks/config-COE_vZ-l.js";
5
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useId, watch, withCtx } from "vue";
6
+ //#region src/components/GrCommandPalette/filtering.ts
7
+ /**
8
+ * Матчер по умолчанию: подстрока (без учёта регистра) в метке, описании,
9
+ * названии группы или ключевых словах.
10
+ */
11
+ function matchCommandItem(item, query) {
12
+ const needle = query.trim().toLowerCase();
13
+ if (!needle) return true;
14
+ return [
15
+ item.label,
16
+ item.description,
17
+ item.group,
18
+ ...item.keywords ?? []
19
+ ].some((part) => part?.toLowerCase().includes(needle));
20
+ }
21
+ function filterCommandItems(items, query, filter = matchCommandItem) {
22
+ if (!query.trim()) return items;
23
+ return items.filter((item) => filter(item, query));
24
+ }
25
+ /**
26
+ * Раскладывает плоский список по группам, сохраняя порядок первого появления
27
+ * группы. Команды без `group` собираются в единственную безымянную группу,
28
+ * которая остаётся на своём месте в общем порядке.
29
+ */
30
+ function groupCommandItems(items) {
31
+ const groups = [];
32
+ const byName = /* @__PURE__ */ new Map();
33
+ for (const item of items) {
34
+ const name = item.group || void 0;
35
+ let group = byName.get(name);
36
+ if (!group) {
37
+ group = {
38
+ name,
39
+ items: []
40
+ };
41
+ byName.set(name, group);
42
+ groups.push(group);
43
+ }
44
+ group.items.push(item);
45
+ }
46
+ return groups;
47
+ }
48
+ //#endregion
49
+ //#region src/components/GrCommandPalette/hotkey.ts
50
+ function parseCommandHotkey(combo) {
51
+ const parts = combo.split("+").map((p) => p.trim()).filter(Boolean);
52
+ const keyToken = parts.at(-1);
53
+ if (!keyToken) return null;
54
+ const parsed = {
55
+ key: keyToken.length === 1 ? keyToken.toLowerCase() : keyToken,
56
+ ctrl: false,
57
+ meta: false,
58
+ alt: false,
59
+ shift: false,
60
+ mod: false
61
+ };
62
+ for (const part of parts.slice(0, -1)) {
63
+ const token = part.toLowerCase();
64
+ if (token === "mod") parsed.mod = true;
65
+ else if (token === "ctrl" || token === "control") parsed.ctrl = true;
66
+ else if (token === "meta" || token === "cmd" || token === "command" || token === "⌘") parsed.meta = true;
67
+ else if (token === "alt" || token === "option") parsed.alt = true;
68
+ else if (token === "shift") parsed.shift = true;
69
+ }
70
+ return parsed;
71
+ }
72
+ /** macOS определяем по платформе — от неё зависит, чем является `mod`. */
73
+ function isAppleDevice() {
74
+ if (typeof navigator === "undefined") return false;
75
+ return /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent);
76
+ }
77
+ function matchesCommandHotkey(event, hotkey, apple = isAppleDevice()) {
78
+ const expectMeta = hotkey.meta || hotkey.mod && apple;
79
+ const expectCtrl = hotkey.ctrl || hotkey.mod && !apple;
80
+ if (event.metaKey !== expectMeta) return false;
81
+ if (event.ctrlKey !== expectCtrl) return false;
82
+ if (event.altKey !== hotkey.alt) return false;
83
+ if (event.shiftKey !== hotkey.shift) return false;
84
+ return hotkey.key.length === 1 ? event.key.toLowerCase() === hotkey.key : event.key === hotkey.key;
85
+ }
86
+ /** Человекочитаемые клавиши для подсказки в поле ввода (`⌘` / `Ctrl`). */
87
+ function formatCommandHotkey(hotkey, apple = isAppleDevice()) {
88
+ const keys = [];
89
+ if (hotkey.meta || hotkey.mod && apple) keys.push("⌘");
90
+ if (hotkey.ctrl || hotkey.mod && !apple) keys.push("Ctrl");
91
+ if (hotkey.alt) keys.push(apple ? "⌥" : "Alt");
92
+ if (hotkey.shift) keys.push(apple ? "⇧" : "Shift");
93
+ keys.push(hotkey.key.length === 1 ? hotkey.key.toUpperCase() : hotkey.key);
94
+ return keys;
95
+ }
96
+ //#endregion
97
+ //#region src/components/GrCommandPalette/GrCommandPalette.vue?vue&type=script&setup=true&lang.ts
98
+ var _hoisted_1 = ["aria-label"];
99
+ var _hoisted_2 = [
100
+ "aria-label",
101
+ "aria-controls",
102
+ "aria-activedescendant",
103
+ "value",
104
+ "placeholder"
105
+ ];
106
+ var _hoisted_3 = {
107
+ key: 0,
108
+ class: "shrink-0 text-[var(--gr-muted-fg)]"
109
+ };
110
+ var _hoisted_4 = ["aria-label"];
111
+ var _hoisted_5 = {
112
+ key: 1,
113
+ class: "shrink-0 flex items-center gap-1",
114
+ "aria-hidden": "true"
115
+ };
116
+ var _hoisted_6 = ["id", "aria-label"];
117
+ var _hoisted_7 = ["id"];
118
+ var _hoisted_8 = ["aria-labelledby"];
119
+ var _hoisted_9 = [
120
+ "id",
121
+ "data-testid",
122
+ "aria-selected",
123
+ "aria-disabled",
124
+ "onClick",
125
+ "onMousemove"
126
+ ];
127
+ var _hoisted_10 = { class: "min-w-0 flex-1" };
128
+ var _hoisted_11 = { class: "block truncate" };
129
+ var _hoisted_12 = {
130
+ key: 0,
131
+ class: "block truncate text-[12px] text-[var(--gr-muted-fg)]"
132
+ };
133
+ var _hoisted_13 = {
134
+ key: 1,
135
+ class: "shrink-0 flex items-center gap-1"
136
+ };
137
+ //#endregion
138
+ //#region src/components/GrCommandPalette/GrCommandPalette.vue
139
+ var GrCommandPalette_default = /* @__PURE__ */ defineComponent({
140
+ __name: "GrCommandPalette",
141
+ props: {
142
+ modelValue: { type: Boolean },
143
+ items: { default: void 0 },
144
+ placeholder: { default: void 0 },
145
+ size: { default: "lg" },
146
+ hotkey: { default: "mod+k" },
147
+ filterable: {
148
+ type: Boolean,
149
+ default: true
150
+ },
151
+ filter: {
152
+ type: Function,
153
+ default: void 0
154
+ },
155
+ loading: {
156
+ type: Boolean,
157
+ default: false
158
+ },
159
+ closeOnSelect: {
160
+ type: Boolean,
161
+ default: true
162
+ },
163
+ maxHeight: { default: 360 },
164
+ showHotkeyHint: {
165
+ type: Boolean,
166
+ default: true
167
+ },
168
+ emptyText: { default: void 0 },
169
+ ariaLabel: { default: void 0 }
170
+ },
171
+ emits: [
172
+ "update:modelValue",
173
+ "select",
174
+ "search"
175
+ ],
176
+ setup(__props, { emit: __emit }) {
177
+ const props = __props;
178
+ const emit = __emit;
179
+ const { t } = useGranularityTranslations();
180
+ const resolvedPlaceholder = computed(() => props.placeholder ?? t("gr.commandPalette.placeholder", "Type a command or search…"));
181
+ const resolvedEmptyText = computed(() => props.emptyText ?? t("gr.commandPalette.empty", "Nothing found"));
182
+ const resolvedAriaLabel = computed(() => props.ariaLabel ?? t("gr.commandPalette.label", "Command palette"));
183
+ const loadingText = computed(() => t("gr.commandPalette.loading", "Loading…"));
184
+ const query = ref("");
185
+ const activeIndex = ref(0);
186
+ const inputEl = ref(null);
187
+ const listboxId = useId();
188
+ const itemsResolved = computed(() => props.items ?? []);
189
+ const filteredItems = computed(() => props.filterable ? filterCommandItems(itemsResolved.value, query.value, props.filter ?? matchCommandItem) : itemsResolved.value);
190
+ const groups = computed(() => groupCommandItems(filteredItems.value));
191
+ /** Плоский список того, что реально выбирается — по нему ходят стрелки. */
192
+ const navigableItems = computed(() => filteredItems.value.filter((item) => !item.disabled));
193
+ const activeItem = computed(() => navigableItems.value[activeIndex.value]);
194
+ function itemDomId(id) {
195
+ return `${listboxId}-item-${id}`;
196
+ }
197
+ const activeDescendantId = computed(() => activeItem.value ? itemDomId(activeItem.value.id) : void 0);
198
+ function isActive(item) {
199
+ return activeItem.value?.id === item.id;
200
+ }
201
+ async function scrollActiveIntoView() {
202
+ await nextTick();
203
+ const item = activeItem.value;
204
+ if (!item) return;
205
+ document.getElementById(itemDomId(item.id))?.scrollIntoView?.({ block: "nearest" });
206
+ }
207
+ function setActive(index) {
208
+ const len = navigableItems.value.length;
209
+ activeIndex.value = len === 0 ? 0 : (index % len + len) % len;
210
+ scrollActiveIntoView();
211
+ }
212
+ watch(filteredItems, () => {
213
+ activeIndex.value = 0;
214
+ });
215
+ function close() {
216
+ emit("update:modelValue", false);
217
+ }
218
+ function selectItem(item) {
219
+ if (item.disabled) return;
220
+ emit("select", item);
221
+ if (props.closeOnSelect) close();
222
+ }
223
+ function onItemHover(item) {
224
+ const index = navigableItems.value.indexOf(item);
225
+ if (index >= 0) setActive(index);
226
+ }
227
+ function onInput(event) {
228
+ query.value = event.target.value;
229
+ emit("search", query.value.trim());
230
+ }
231
+ function onKeydown(event) {
232
+ switch (event.key) {
233
+ case "ArrowDown":
234
+ event.preventDefault();
235
+ setActive(activeIndex.value + 1);
236
+ break;
237
+ case "ArrowUp":
238
+ event.preventDefault();
239
+ setActive(activeIndex.value - 1);
240
+ break;
241
+ case "Home":
242
+ event.preventDefault();
243
+ setActive(0);
244
+ break;
245
+ case "End":
246
+ event.preventDefault();
247
+ setActive(navigableItems.value.length - 1);
248
+ break;
249
+ case "Enter":
250
+ if (!activeItem.value) break;
251
+ event.preventDefault();
252
+ selectItem(activeItem.value);
253
+ break;
254
+ }
255
+ }
256
+ let focusTimer = null;
257
+ watch(() => props.modelValue, (open) => {
258
+ if (!open) {
259
+ if (focusTimer) clearTimeout(focusTimer);
260
+ return;
261
+ }
262
+ query.value = "";
263
+ activeIndex.value = 0;
264
+ if (focusTimer) clearTimeout(focusTimer);
265
+ focusTimer = setTimeout(() => {
266
+ inputEl.value?.focus();
267
+ }, 0);
268
+ });
269
+ const parsedHotkey = computed(() => props.hotkey ? parseCommandHotkey(props.hotkey) : null);
270
+ const hotkeyHint = computed(() => props.showHotkeyHint && parsedHotkey.value ? formatCommandHotkey(parsedHotkey.value) : []);
271
+ function onWindowKeydown(event) {
272
+ const hotkey = parsedHotkey.value;
273
+ if (!hotkey || !matchesCommandHotkey(event, hotkey)) return;
274
+ event.preventDefault();
275
+ emit("update:modelValue", !props.modelValue);
276
+ }
277
+ onMounted(() => {
278
+ if (typeof window === "undefined") return;
279
+ window.addEventListener("keydown", onWindowKeydown);
280
+ });
281
+ onBeforeUnmount(() => {
282
+ if (typeof window !== "undefined") window.removeEventListener("keydown", onWindowKeydown);
283
+ if (focusTimer) clearTimeout(focusTimer);
284
+ });
285
+ const modalSize = computed(() => commandPaletteModalSizeBySize[props.size]);
286
+ const listStyle = computed(() => ({ maxHeight: `var(--gr-command-list-max-height, ${props.maxHeight}px)` }));
287
+ return (_ctx, _cache) => {
288
+ return openBlock(), createBlock(GrModal_default, {
289
+ "model-value": __props.modelValue,
290
+ size: modalSize.value,
291
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event))
292
+ }, {
293
+ default: withCtx(() => [createElementVNode("div", {
294
+ "data-gr-command-palette": "",
295
+ "aria-label": resolvedAriaLabel.value
296
+ }, [
297
+ createElementVNode("div", {
298
+ "data-gr-command-palette-search": "",
299
+ class: normalizeClass(unref(commandSearchRowClass))
300
+ }, [
301
+ _cache[1] || (_cache[1] = createElementVNode("span", {
302
+ class: "i-lucide-search block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]",
303
+ "aria-hidden": "true"
304
+ }, null, -1)),
305
+ createElementVNode("input", {
306
+ ref_key: "inputEl",
307
+ ref: inputEl,
308
+ "data-gr-command-palette-input": "",
309
+ "data-testid": "gr-command-palette-input",
310
+ type: "text",
311
+ autocomplete: "off",
312
+ spellcheck: "false",
313
+ role: "combobox",
314
+ "aria-haspopup": "listbox",
315
+ "aria-autocomplete": "list",
316
+ "aria-expanded": "true",
317
+ "aria-label": resolvedAriaLabel.value,
318
+ "aria-controls": unref(listboxId),
319
+ "aria-activedescendant": activeDescendantId.value,
320
+ value: query.value,
321
+ placeholder: resolvedPlaceholder.value,
322
+ class: normalizeClass(unref(commandSearchInputClass)),
323
+ onInput,
324
+ onKeydown
325
+ }, null, 42, _hoisted_2),
326
+ __props.loading ? (openBlock(), createElementBlock("span", _hoisted_3, [createElementVNode("span", {
327
+ class: "i-lucide-loader-2 block h-4 w-4 animate-spin",
328
+ "aria-label": loadingText.value
329
+ }, null, 8, _hoisted_4)])) : hotkeyHint.value.length ? (openBlock(), createElementBlock("span", _hoisted_5, [(openBlock(true), createElementBlock(Fragment, null, renderList(hotkeyHint.value, (key) => {
330
+ return openBlock(), createBlock(GrKbd_default, {
331
+ key,
332
+ size: "sm"
333
+ }, {
334
+ default: withCtx(() => [createTextVNode(toDisplayString(key), 1)]),
335
+ _: 2
336
+ }, 1024);
337
+ }), 128))])) : createCommentVNode("", true)
338
+ ], 2),
339
+ createElementVNode("div", {
340
+ id: unref(listboxId),
341
+ "data-gr-command-palette-list": "",
342
+ "data-testid": "gr-command-palette-list",
343
+ class: "overflow-y-auto p-2",
344
+ style: normalizeStyle(listStyle.value),
345
+ role: "listbox",
346
+ "aria-label": resolvedAriaLabel.value
347
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(groups.value, (group, groupIndex) => {
348
+ return openBlock(), createElementBlock(Fragment, { key: group.name ?? `__ungrouped-${groupIndex}` }, [group.name ? (openBlock(), createElementBlock("div", {
349
+ key: 0,
350
+ id: `${unref(listboxId)}-group-${groupIndex}`,
351
+ "data-gr-command-palette-group": "",
352
+ class: normalizeClass(unref(commandGroupLabelClass))
353
+ }, toDisplayString(group.name), 11, _hoisted_7)) : createCommentVNode("", true), createElementVNode("div", {
354
+ role: "group",
355
+ "aria-labelledby": group.name ? `${unref(listboxId)}-group-${groupIndex}` : void 0
356
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(group.items, (item) => {
357
+ return openBlock(), createElementBlock("div", {
358
+ id: itemDomId(item.id),
359
+ key: item.id,
360
+ "data-gr-command-palette-item": "",
361
+ "data-testid": `gr-command-palette-item-${item.id}`,
362
+ role: "option",
363
+ "aria-selected": isActive(item) ? "true" : "false",
364
+ "aria-disabled": item.disabled ? "true" : void 0,
365
+ class: normalizeClass(unref(commandItemClass)({
366
+ active: isActive(item),
367
+ disabled: Boolean(item.disabled)
368
+ })),
369
+ onClick: ($event) => selectItem(item),
370
+ onMousemove: ($event) => onItemHover(item)
371
+ }, [renderSlot(_ctx.$slots, "item", {
372
+ item,
373
+ active: isActive(item)
374
+ }, () => [
375
+ item.icon ? (openBlock(), createElementBlock("span", {
376
+ key: 0,
377
+ class: normalizeClass(["block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]", item.icon]),
378
+ "aria-hidden": "true"
379
+ }, null, 2)) : createCommentVNode("", true),
380
+ createElementVNode("span", _hoisted_10, [createElementVNode("span", _hoisted_11, toDisplayString(item.label), 1), item.description ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(item.description), 1)) : createCommentVNode("", true)]),
381
+ item.shortcut?.length ? (openBlock(), createElementBlock("span", _hoisted_13, [(openBlock(true), createElementBlock(Fragment, null, renderList(item.shortcut, (key) => {
382
+ return openBlock(), createBlock(GrKbd_default, {
383
+ key,
384
+ size: "sm"
385
+ }, {
386
+ default: withCtx(() => [createTextVNode(toDisplayString(key), 1)]),
387
+ _: 2
388
+ }, 1024);
389
+ }), 128))])) : createCommentVNode("", true)
390
+ ])], 42, _hoisted_9);
391
+ }), 128))], 8, _hoisted_8)], 64);
392
+ }), 128)), !filteredItems.value.length ? (openBlock(), createElementBlock("div", {
393
+ key: 0,
394
+ "data-gr-command-palette-empty": "",
395
+ "data-testid": "gr-command-palette-empty",
396
+ class: normalizeClass(unref(commandEmptyClass))
397
+ }, [renderSlot(_ctx.$slots, "empty", { query: query.value }, () => [createTextVNode(toDisplayString(resolvedEmptyText.value), 1)])], 2)) : createCommentVNode("", true)], 12, _hoisted_6),
398
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", {
399
+ key: 0,
400
+ "data-gr-command-palette-footer": "",
401
+ class: normalizeClass(unref(commandFooterClass))
402
+ }, [renderSlot(_ctx.$slots, "footer")], 2)) : createCommentVNode("", true)
403
+ ], 8, _hoisted_1)]),
404
+ _: 3
405
+ }, 8, ["model-value", "size"]);
406
+ };
407
+ }
408
+ });
409
+ //#endregion
410
+ export { matchCommandItem as i, filterCommandItems as n, groupCommandItems as r, GrCommandPalette_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrCommandPalette-6OyvNbek.js","names":["$emit","$slots"],"sources":["../../../../src/components/GrCommandPalette/filtering.ts","../../../../src/components/GrCommandPalette/hotkey.ts","../../../../src/components/GrCommandPalette/GrCommandPalette.vue","../../../../src/components/GrCommandPalette/GrCommandPalette.vue"],"sourcesContent":["/** Команда палитры. `id` обязателен — он же ключ рендера и цель `aria-activedescendant`. */\nexport type GrCommandItem = {\n id: string\n label: string\n /** Пояснение под меткой. */\n description?: string\n /** UnoCSS-класс иконки (например `i-lucide-file-plus`). */\n icon?: string\n /** Подсказка сочетания клавиш — массив клавиш, каждая рисуется отдельным `GrKbd`. */\n shortcut?: string[]\n /** Заголовок группы, под которой команда показывается в списке. */\n group?: string\n /** Дополнительные слова для поиска (синонимы, транслитерация). */\n keywords?: string[]\n disabled?: boolean\n}\n\n/** Команды, сгруппированные для рендера: порядок групп — порядок первого вхождения. */\nexport type GrCommandGroup = {\n /** `undefined` — команды без группы (рендерятся без заголовка). */\n name: string | undefined\n items: GrCommandItem[]\n}\n\nexport type GrCommandFilter = (item: GrCommandItem, query: string) => boolean\n\n/**\n * Матчер по умолчанию: подстрока (без учёта регистра) в метке, описании,\n * названии группы или ключевых словах.\n */\nexport function matchCommandItem(item: GrCommandItem, query: string): boolean {\n const needle = query.trim().toLowerCase()\n if (!needle) return true\n\n const haystack = [item.label, item.description, item.group, ...(item.keywords ?? [])]\n return haystack.some(part => part?.toLowerCase().includes(needle))\n}\n\nexport function filterCommandItems(\n items: GrCommandItem[],\n query: string,\n filter: GrCommandFilter = matchCommandItem,\n): GrCommandItem[] {\n if (!query.trim()) return items\n return items.filter(item => filter(item, query))\n}\n\n/**\n * Раскладывает плоский список по группам, сохраняя порядок первого появления\n * группы. Команды без `group` собираются в единственную безымянную группу,\n * которая остаётся на своём месте в общем порядке.\n */\nexport function groupCommandItems(items: GrCommandItem[]): GrCommandGroup[] {\n const groups: GrCommandGroup[] = []\n const byName = new Map<string | undefined, GrCommandGroup>()\n\n for (const item of items) {\n const name = item.group || undefined\n let group = byName.get(name)\n if (!group) {\n group = { name, items: [] }\n byName.set(name, group)\n groups.push(group)\n }\n group.items.push(item)\n }\n\n return groups\n}\n","/**\n * Разбор и матчинг сочетания открытия палитры.\n *\n * Директива `v-hotkey` здесь не подходит: ей нужен смонтированный элемент, а\n * палитра в закрытом состоянии не рендерит ничего (весь UI живёт внутри\n * `GrModal`, который скрыт). Поэтому — минимальный собственный матчер на\n * `window`, с тем же синтаксисом комбинаций плюс токен `mod`.\n */\n\nexport type ParsedCommandHotkey = {\n key: string\n ctrl: boolean\n meta: boolean\n alt: boolean\n shift: boolean\n /** `mod` — Cmd на macOS, Ctrl на остальных платформах. */\n mod: boolean\n}\n\nexport function parseCommandHotkey(combo: string): ParsedCommandHotkey | null {\n const parts = combo.split('+').map(p => p.trim()).filter(Boolean)\n const keyToken = parts.at(-1)\n if (!keyToken) return null\n\n const parsed: ParsedCommandHotkey = {\n key: keyToken.length === 1 ? keyToken.toLowerCase() : keyToken,\n ctrl: false,\n meta: false,\n alt: false,\n shift: false,\n mod: false,\n }\n\n for (const part of parts.slice(0, -1)) {\n const token = part.toLowerCase()\n if (token === 'mod') parsed.mod = true\n else if (token === 'ctrl' || token === 'control') parsed.ctrl = true\n else if (token === 'meta' || token === 'cmd' || token === 'command' || token === '⌘') parsed.meta = true\n else if (token === 'alt' || token === 'option') parsed.alt = true\n else if (token === 'shift') parsed.shift = true\n }\n\n return parsed\n}\n\n/** macOS определяем по платформе — от неё зависит, чем является `mod`. */\nexport function isAppleDevice(): boolean {\n if (typeof navigator === 'undefined') return false\n return /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent)\n}\n\nexport function matchesCommandHotkey(\n event: KeyboardEvent,\n hotkey: ParsedCommandHotkey,\n apple = isAppleDevice(),\n): boolean {\n const expectMeta = hotkey.meta || (hotkey.mod && apple)\n const expectCtrl = hotkey.ctrl || (hotkey.mod && !apple)\n\n if (event.metaKey !== expectMeta) return false\n if (event.ctrlKey !== expectCtrl) return false\n if (event.altKey !== hotkey.alt) return false\n if (event.shiftKey !== hotkey.shift) return false\n\n return hotkey.key.length === 1\n ? event.key.toLowerCase() === hotkey.key\n : event.key === hotkey.key\n}\n\n/** Человекочитаемые клавиши для подсказки в поле ввода (`⌘` / `Ctrl`). */\nexport function formatCommandHotkey(hotkey: ParsedCommandHotkey, apple = isAppleDevice()): string[] {\n const keys: string[] = []\n if (hotkey.meta || (hotkey.mod && apple)) keys.push('⌘')\n if (hotkey.ctrl || (hotkey.mod && !apple)) keys.push('Ctrl')\n if (hotkey.alt) keys.push(apple ? '⌥' : 'Alt')\n if (hotkey.shift) keys.push(apple ? '⇧' : 'Shift')\n keys.push(hotkey.key.length === 1 ? hotkey.key.toUpperCase() : hotkey.key)\n return keys\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue'\n\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrKbd from '../GrKbd/GrKbd.vue'\nimport GrModal from '../GrModal/GrModal.vue'\n\nimport {\n filterCommandItems,\n groupCommandItems,\n matchCommandItem,\n type GrCommandFilter,\n type GrCommandItem,\n} from './filtering'\nimport {\n formatCommandHotkey,\n matchesCommandHotkey,\n parseCommandHotkey,\n} from './hotkey'\nimport {\n commandEmptyClass,\n commandFooterClass,\n commandGroupLabelClass,\n commandItemClass,\n commandPaletteModalSizeBySize,\n commandSearchInputClass,\n commandSearchRowClass,\n type GrCommandPaletteSize,\n} from './grCommandPaletteStyles'\n\nexport type { GrCommandFilter, GrCommandGroup, GrCommandItem } from './filtering'\nexport type { GrCommandPaletteSize } from './grCommandPaletteStyles'\n\n/**\n * Публичный GR-примитив «Command palette» (⌘K) — модальный поиск по командам\n * приложения с группировкой, подсказками сочетаний и клавиатурной навигацией.\n *\n * A11y: WAI-ARIA combobox поверх модалки — `role=\"combobox\"` на поле ввода,\n * `role=\"listbox\"` на списке, `aria-activedescendant` на активной команде\n * (фокус остаётся в поле). Esc, фокус-ловушка и блокировка скролла приходят\n * из `GrModal`.\n *\n * Открытие по глобальному сочетанию (`hotkey`, по умолчанию `mod+k` — Cmd на\n * macOS, Ctrl на прочих) компонент берёт на себя; передайте `hotkey: null`,\n * чтобы управлять открытием только через `v-model`.\n */\nexport interface GrCommandPaletteProps {\n /** Открыта ли палитра. */\n modelValue: boolean\n /** Плоский список команд; группировка — по полю `group` самой команды. */\n items?: GrCommandItem[]\n placeholder?: string\n size?: GrCommandPaletteSize\n /** Глобальное сочетание открытия. `null` — не вешать слушатель. */\n hotkey?: string | null\n /** Локальная фильтрация по запросу. `false` — фильтрует владелец по событию `search`. */\n filterable?: boolean\n /** Кастомный матчер локальной фильтрации. */\n filter?: GrCommandFilter\n /** Внешне управляемое состояние загрузки (для remote-поиска). */\n loading?: boolean\n /** Закрывать палитру после выбора команды. */\n closeOnSelect?: boolean\n /** Максимальная высота списка, px. */\n maxHeight?: number\n /** Показывать подсказку сочетания в поле ввода. */\n showHotkeyHint?: boolean\n emptyText?: string\n ariaLabel?: string\n}\n\nconst props = withDefaults(\n defineProps<GrCommandPaletteProps>(),\n {\n items: undefined,\n placeholder: undefined,\n size: 'lg',\n hotkey: 'mod+k',\n filterable: true,\n filter: undefined,\n loading: false,\n closeOnSelect: true,\n maxHeight: 360,\n showHotkeyHint: true,\n emptyText: undefined,\n ariaLabel: undefined,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n /** Команда выбрана (клик или Enter). */\n (e: 'select', item: GrCommandItem): void\n /** Поисковый запрос изменился — точка входа для remote-поиска. */\n (e: 'search', query: string): void\n}>()\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedPlaceholder = computed(() => props.placeholder ?? t('gr.commandPalette.placeholder', 'Type a command or search…'))\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.commandPalette.empty', 'Nothing found'))\nconst resolvedAriaLabel = computed(() => props.ariaLabel ?? t('gr.commandPalette.label', 'Command palette'))\nconst loadingText = computed(() => t('gr.commandPalette.loading', 'Loading…'))\n\nconst query = ref('')\nconst activeIndex = ref(0)\nconst inputEl = ref<HTMLInputElement | null>(null)\nconst listboxId = useId()\n\nconst itemsResolved = computed<GrCommandItem[]>(() => props.items ?? [])\n\nconst filteredItems = computed<GrCommandItem[]>(() =>\n props.filterable\n ? filterCommandItems(itemsResolved.value, query.value, props.filter ?? matchCommandItem)\n : itemsResolved.value,\n)\n\nconst groups = computed(() => groupCommandItems(filteredItems.value))\n\n/** Плоский список того, что реально выбирается — по нему ходят стрелки. */\nconst navigableItems = computed(() => filteredItems.value.filter(item => !item.disabled))\n\nconst activeItem = computed<GrCommandItem | undefined>(() => navigableItems.value[activeIndex.value])\n\nfunction itemDomId(id: string): string {\n return `${listboxId}-item-${id}`\n}\n\nconst activeDescendantId = computed(() =>\n activeItem.value ? itemDomId(activeItem.value.id) : undefined,\n)\n\nfunction isActive(item: GrCommandItem): boolean {\n return activeItem.value?.id === item.id\n}\n\nasync function scrollActiveIntoView(): Promise<void> {\n await nextTick()\n const item = activeItem.value\n if (!item) return\n document.getElementById(itemDomId(item.id))?.scrollIntoView?.({ block: 'nearest' })\n}\n\nfunction setActive(index: number): void {\n const len = navigableItems.value.length\n activeIndex.value = len === 0 ? 0 : ((index % len) + len) % len\n void scrollActiveIntoView()\n}\n\n// Список пересобрался (ввод запроса / remote-загрузка) — активной становится первая команда.\nwatch(filteredItems, () => { activeIndex.value = 0 })\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n\nfunction selectItem(item: GrCommandItem): void {\n if (item.disabled) return\n emit('select', item)\n if (props.closeOnSelect) close()\n}\n\nfunction onItemHover(item: GrCommandItem): void {\n const index = navigableItems.value.indexOf(item)\n if (index >= 0) setActive(index)\n}\n\nfunction onInput(event: Event): void {\n query.value = (event.target as HTMLInputElement).value\n emit('search', query.value.trim())\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setActive(activeIndex.value + 1)\n break\n case 'ArrowUp':\n event.preventDefault()\n setActive(activeIndex.value - 1)\n break\n case 'Home':\n event.preventDefault()\n setActive(0)\n break\n case 'End':\n event.preventDefault()\n setActive(navigableItems.value.length - 1)\n break\n case 'Enter':\n if (!activeItem.value) break\n event.preventDefault()\n selectItem(activeItem.value)\n break\n }\n}\n\n// ————— Открытие/закрытие: сброс запроса и фокус в поле.\nlet focusTimer: ReturnType<typeof setTimeout> | null = null\n\nwatch(\n () => props.modelValue,\n (open) => {\n if (!open) {\n if (focusTimer) clearTimeout(focusTimer)\n return\n }\n\n query.value = ''\n activeIndex.value = 0\n // `GrModal` отдаёт первичный фокус своей панели, поэтому переносим фокус в\n // поле ввода следующим тиком макрозадачи — иначе HeadlessUI перебьёт его.\n if (focusTimer) clearTimeout(focusTimer)\n focusTimer = setTimeout(() => { inputEl.value?.focus() }, 0)\n },\n)\n\n// ————— Глобальное сочетание открытия.\nconst parsedHotkey = computed(() => (props.hotkey ? parseCommandHotkey(props.hotkey) : null))\n\nconst hotkeyHint = computed(() =>\n props.showHotkeyHint && parsedHotkey.value ? formatCommandHotkey(parsedHotkey.value) : [],\n)\n\nfunction onWindowKeydown(event: KeyboardEvent): void {\n const hotkey = parsedHotkey.value\n if (!hotkey || !matchesCommandHotkey(event, hotkey)) return\n event.preventDefault()\n emit('update:modelValue', !props.modelValue)\n}\n\nonMounted(() => {\n if (typeof window === 'undefined') return\n window.addEventListener('keydown', onWindowKeydown)\n})\n\nonBeforeUnmount(() => {\n if (typeof window !== 'undefined') window.removeEventListener('keydown', onWindowKeydown)\n if (focusTimer) clearTimeout(focusTimer)\n})\n\nconst modalSize = computed(() => commandPaletteModalSizeBySize[props.size])\nconst listStyle = computed(() => ({ maxHeight: `var(--gr-command-list-max-height, ${props.maxHeight}px)` }))\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"modalSize\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <div data-gr-command-palette :aria-label=\"resolvedAriaLabel\">\n <div data-gr-command-palette-search :class=\"commandSearchRowClass\">\n <span class=\"i-lucide-search block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]\" aria-hidden=\"true\" />\n\n <input\n ref=\"inputEl\"\n data-gr-command-palette-input\n data-testid=\"gr-command-palette-input\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-expanded=\"true\"\n :aria-label=\"resolvedAriaLabel\"\n :aria-controls=\"listboxId\"\n :aria-activedescendant=\"activeDescendantId\"\n :value=\"query\"\n :placeholder=\"resolvedPlaceholder\"\n :class=\"commandSearchInputClass\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n >\n\n <span v-if=\"loading\" class=\"shrink-0 text-[var(--gr-muted-fg)]\">\n <span class=\"i-lucide-loader-2 block h-4 w-4 animate-spin\" :aria-label=\"loadingText\" />\n </span>\n <span v-else-if=\"hotkeyHint.length\" class=\"shrink-0 flex items-center gap-1\" aria-hidden=\"true\">\n <GrKbd v-for=\"key in hotkeyHint\" :key=\"key\" size=\"sm\">{{ key }}</GrKbd>\n </span>\n </div>\n\n <div\n :id=\"listboxId\"\n data-gr-command-palette-list\n data-testid=\"gr-command-palette-list\"\n class=\"overflow-y-auto p-2\"\n :style=\"listStyle\"\n role=\"listbox\"\n :aria-label=\"resolvedAriaLabel\"\n >\n <template v-for=\"(group, groupIndex) in groups\" :key=\"group.name ?? `__ungrouped-${groupIndex}`\">\n <div\n v-if=\"group.name\"\n :id=\"`${listboxId}-group-${groupIndex}`\"\n data-gr-command-palette-group\n :class=\"commandGroupLabelClass\"\n >\n {{ group.name }}\n </div>\n\n <div role=\"group\" :aria-labelledby=\"group.name ? `${listboxId}-group-${groupIndex}` : undefined\">\n <div\n v-for=\"item in group.items\"\n :id=\"itemDomId(item.id)\"\n :key=\"item.id\"\n data-gr-command-palette-item\n :data-testid=\"`gr-command-palette-item-${item.id}`\"\n role=\"option\"\n :aria-selected=\"isActive(item) ? 'true' : 'false'\"\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\n :class=\"commandItemClass({ active: isActive(item), disabled: Boolean(item.disabled) })\"\n @click=\"selectItem(item)\"\n @mousemove=\"onItemHover(item)\"\n >\n <slot name=\"item\" :item=\"item\" :active=\"isActive(item)\">\n <span\n v-if=\"item.icon\"\n class=\"block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]\"\n :class=\"item.icon\"\n aria-hidden=\"true\"\n />\n <span class=\"min-w-0 flex-1\">\n <span class=\"block truncate\">{{ item.label }}</span>\n <span v-if=\"item.description\" class=\"block truncate text-[12px] text-[var(--gr-muted-fg)]\">\n {{ item.description }}\n </span>\n </span>\n <span v-if=\"item.shortcut?.length\" class=\"shrink-0 flex items-center gap-1\">\n <GrKbd v-for=\"key in item.shortcut\" :key=\"key\" size=\"sm\">{{ key }}</GrKbd>\n </span>\n </slot>\n </div>\n </div>\n </template>\n\n <div\n v-if=\"!filteredItems.length\"\n data-gr-command-palette-empty\n data-testid=\"gr-command-palette-empty\"\n :class=\"commandEmptyClass\"\n >\n <slot name=\"empty\" :query=\"query\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n </div>\n\n <div v-if=\"$slots.footer\" data-gr-command-palette-footer :class=\"commandFooterClass\">\n <slot name=\"footer\" />\n </div>\n </div>\n </GrModal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue'\n\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport GrKbd from '../GrKbd/GrKbd.vue'\nimport GrModal from '../GrModal/GrModal.vue'\n\nimport {\n filterCommandItems,\n groupCommandItems,\n matchCommandItem,\n type GrCommandFilter,\n type GrCommandItem,\n} from './filtering'\nimport {\n formatCommandHotkey,\n matchesCommandHotkey,\n parseCommandHotkey,\n} from './hotkey'\nimport {\n commandEmptyClass,\n commandFooterClass,\n commandGroupLabelClass,\n commandItemClass,\n commandPaletteModalSizeBySize,\n commandSearchInputClass,\n commandSearchRowClass,\n type GrCommandPaletteSize,\n} from './grCommandPaletteStyles'\n\nexport type { GrCommandFilter, GrCommandGroup, GrCommandItem } from './filtering'\nexport type { GrCommandPaletteSize } from './grCommandPaletteStyles'\n\n/**\n * Публичный GR-примитив «Command palette» (⌘K) — модальный поиск по командам\n * приложения с группировкой, подсказками сочетаний и клавиатурной навигацией.\n *\n * A11y: WAI-ARIA combobox поверх модалки — `role=\"combobox\"` на поле ввода,\n * `role=\"listbox\"` на списке, `aria-activedescendant` на активной команде\n * (фокус остаётся в поле). Esc, фокус-ловушка и блокировка скролла приходят\n * из `GrModal`.\n *\n * Открытие по глобальному сочетанию (`hotkey`, по умолчанию `mod+k` — Cmd на\n * macOS, Ctrl на прочих) компонент берёт на себя; передайте `hotkey: null`,\n * чтобы управлять открытием только через `v-model`.\n */\nexport interface GrCommandPaletteProps {\n /** Открыта ли палитра. */\n modelValue: boolean\n /** Плоский список команд; группировка — по полю `group` самой команды. */\n items?: GrCommandItem[]\n placeholder?: string\n size?: GrCommandPaletteSize\n /** Глобальное сочетание открытия. `null` — не вешать слушатель. */\n hotkey?: string | null\n /** Локальная фильтрация по запросу. `false` — фильтрует владелец по событию `search`. */\n filterable?: boolean\n /** Кастомный матчер локальной фильтрации. */\n filter?: GrCommandFilter\n /** Внешне управляемое состояние загрузки (для remote-поиска). */\n loading?: boolean\n /** Закрывать палитру после выбора команды. */\n closeOnSelect?: boolean\n /** Максимальная высота списка, px. */\n maxHeight?: number\n /** Показывать подсказку сочетания в поле ввода. */\n showHotkeyHint?: boolean\n emptyText?: string\n ariaLabel?: string\n}\n\nconst props = withDefaults(\n defineProps<GrCommandPaletteProps>(),\n {\n items: undefined,\n placeholder: undefined,\n size: 'lg',\n hotkey: 'mod+k',\n filterable: true,\n filter: undefined,\n loading: false,\n closeOnSelect: true,\n maxHeight: 360,\n showHotkeyHint: true,\n emptyText: undefined,\n ariaLabel: undefined,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n /** Команда выбрана (клик или Enter). */\n (e: 'select', item: GrCommandItem): void\n /** Поисковый запрос изменился — точка входа для remote-поиска. */\n (e: 'search', query: string): void\n}>()\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedPlaceholder = computed(() => props.placeholder ?? t('gr.commandPalette.placeholder', 'Type a command or search…'))\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.commandPalette.empty', 'Nothing found'))\nconst resolvedAriaLabel = computed(() => props.ariaLabel ?? t('gr.commandPalette.label', 'Command palette'))\nconst loadingText = computed(() => t('gr.commandPalette.loading', 'Loading…'))\n\nconst query = ref('')\nconst activeIndex = ref(0)\nconst inputEl = ref<HTMLInputElement | null>(null)\nconst listboxId = useId()\n\nconst itemsResolved = computed<GrCommandItem[]>(() => props.items ?? [])\n\nconst filteredItems = computed<GrCommandItem[]>(() =>\n props.filterable\n ? filterCommandItems(itemsResolved.value, query.value, props.filter ?? matchCommandItem)\n : itemsResolved.value,\n)\n\nconst groups = computed(() => groupCommandItems(filteredItems.value))\n\n/** Плоский список того, что реально выбирается — по нему ходят стрелки. */\nconst navigableItems = computed(() => filteredItems.value.filter(item => !item.disabled))\n\nconst activeItem = computed<GrCommandItem | undefined>(() => navigableItems.value[activeIndex.value])\n\nfunction itemDomId(id: string): string {\n return `${listboxId}-item-${id}`\n}\n\nconst activeDescendantId = computed(() =>\n activeItem.value ? itemDomId(activeItem.value.id) : undefined,\n)\n\nfunction isActive(item: GrCommandItem): boolean {\n return activeItem.value?.id === item.id\n}\n\nasync function scrollActiveIntoView(): Promise<void> {\n await nextTick()\n const item = activeItem.value\n if (!item) return\n document.getElementById(itemDomId(item.id))?.scrollIntoView?.({ block: 'nearest' })\n}\n\nfunction setActive(index: number): void {\n const len = navigableItems.value.length\n activeIndex.value = len === 0 ? 0 : ((index % len) + len) % len\n void scrollActiveIntoView()\n}\n\n// Список пересобрался (ввод запроса / remote-загрузка) — активной становится первая команда.\nwatch(filteredItems, () => { activeIndex.value = 0 })\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n\nfunction selectItem(item: GrCommandItem): void {\n if (item.disabled) return\n emit('select', item)\n if (props.closeOnSelect) close()\n}\n\nfunction onItemHover(item: GrCommandItem): void {\n const index = navigableItems.value.indexOf(item)\n if (index >= 0) setActive(index)\n}\n\nfunction onInput(event: Event): void {\n query.value = (event.target as HTMLInputElement).value\n emit('search', query.value.trim())\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setActive(activeIndex.value + 1)\n break\n case 'ArrowUp':\n event.preventDefault()\n setActive(activeIndex.value - 1)\n break\n case 'Home':\n event.preventDefault()\n setActive(0)\n break\n case 'End':\n event.preventDefault()\n setActive(navigableItems.value.length - 1)\n break\n case 'Enter':\n if (!activeItem.value) break\n event.preventDefault()\n selectItem(activeItem.value)\n break\n }\n}\n\n// ————— Открытие/закрытие: сброс запроса и фокус в поле.\nlet focusTimer: ReturnType<typeof setTimeout> | null = null\n\nwatch(\n () => props.modelValue,\n (open) => {\n if (!open) {\n if (focusTimer) clearTimeout(focusTimer)\n return\n }\n\n query.value = ''\n activeIndex.value = 0\n // `GrModal` отдаёт первичный фокус своей панели, поэтому переносим фокус в\n // поле ввода следующим тиком макрозадачи — иначе HeadlessUI перебьёт его.\n if (focusTimer) clearTimeout(focusTimer)\n focusTimer = setTimeout(() => { inputEl.value?.focus() }, 0)\n },\n)\n\n// ————— Глобальное сочетание открытия.\nconst parsedHotkey = computed(() => (props.hotkey ? parseCommandHotkey(props.hotkey) : null))\n\nconst hotkeyHint = computed(() =>\n props.showHotkeyHint && parsedHotkey.value ? formatCommandHotkey(parsedHotkey.value) : [],\n)\n\nfunction onWindowKeydown(event: KeyboardEvent): void {\n const hotkey = parsedHotkey.value\n if (!hotkey || !matchesCommandHotkey(event, hotkey)) return\n event.preventDefault()\n emit('update:modelValue', !props.modelValue)\n}\n\nonMounted(() => {\n if (typeof window === 'undefined') return\n window.addEventListener('keydown', onWindowKeydown)\n})\n\nonBeforeUnmount(() => {\n if (typeof window !== 'undefined') window.removeEventListener('keydown', onWindowKeydown)\n if (focusTimer) clearTimeout(focusTimer)\n})\n\nconst modalSize = computed(() => commandPaletteModalSizeBySize[props.size])\nconst listStyle = computed(() => ({ maxHeight: `var(--gr-command-list-max-height, ${props.maxHeight}px)` }))\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"modalSize\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <div data-gr-command-palette :aria-label=\"resolvedAriaLabel\">\n <div data-gr-command-palette-search :class=\"commandSearchRowClass\">\n <span class=\"i-lucide-search block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]\" aria-hidden=\"true\" />\n\n <input\n ref=\"inputEl\"\n data-gr-command-palette-input\n data-testid=\"gr-command-palette-input\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-expanded=\"true\"\n :aria-label=\"resolvedAriaLabel\"\n :aria-controls=\"listboxId\"\n :aria-activedescendant=\"activeDescendantId\"\n :value=\"query\"\n :placeholder=\"resolvedPlaceholder\"\n :class=\"commandSearchInputClass\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n >\n\n <span v-if=\"loading\" class=\"shrink-0 text-[var(--gr-muted-fg)]\">\n <span class=\"i-lucide-loader-2 block h-4 w-4 animate-spin\" :aria-label=\"loadingText\" />\n </span>\n <span v-else-if=\"hotkeyHint.length\" class=\"shrink-0 flex items-center gap-1\" aria-hidden=\"true\">\n <GrKbd v-for=\"key in hotkeyHint\" :key=\"key\" size=\"sm\">{{ key }}</GrKbd>\n </span>\n </div>\n\n <div\n :id=\"listboxId\"\n data-gr-command-palette-list\n data-testid=\"gr-command-palette-list\"\n class=\"overflow-y-auto p-2\"\n :style=\"listStyle\"\n role=\"listbox\"\n :aria-label=\"resolvedAriaLabel\"\n >\n <template v-for=\"(group, groupIndex) in groups\" :key=\"group.name ?? `__ungrouped-${groupIndex}`\">\n <div\n v-if=\"group.name\"\n :id=\"`${listboxId}-group-${groupIndex}`\"\n data-gr-command-palette-group\n :class=\"commandGroupLabelClass\"\n >\n {{ group.name }}\n </div>\n\n <div role=\"group\" :aria-labelledby=\"group.name ? `${listboxId}-group-${groupIndex}` : undefined\">\n <div\n v-for=\"item in group.items\"\n :id=\"itemDomId(item.id)\"\n :key=\"item.id\"\n data-gr-command-palette-item\n :data-testid=\"`gr-command-palette-item-${item.id}`\"\n role=\"option\"\n :aria-selected=\"isActive(item) ? 'true' : 'false'\"\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\n :class=\"commandItemClass({ active: isActive(item), disabled: Boolean(item.disabled) })\"\n @click=\"selectItem(item)\"\n @mousemove=\"onItemHover(item)\"\n >\n <slot name=\"item\" :item=\"item\" :active=\"isActive(item)\">\n <span\n v-if=\"item.icon\"\n class=\"block h-4 w-4 shrink-0 text-[var(--gr-muted-fg)]\"\n :class=\"item.icon\"\n aria-hidden=\"true\"\n />\n <span class=\"min-w-0 flex-1\">\n <span class=\"block truncate\">{{ item.label }}</span>\n <span v-if=\"item.description\" class=\"block truncate text-[12px] text-[var(--gr-muted-fg)]\">\n {{ item.description }}\n </span>\n </span>\n <span v-if=\"item.shortcut?.length\" class=\"shrink-0 flex items-center gap-1\">\n <GrKbd v-for=\"key in item.shortcut\" :key=\"key\" size=\"sm\">{{ key }}</GrKbd>\n </span>\n </slot>\n </div>\n </div>\n </template>\n\n <div\n v-if=\"!filteredItems.length\"\n data-gr-command-palette-empty\n data-testid=\"gr-command-palette-empty\"\n :class=\"commandEmptyClass\"\n >\n <slot name=\"empty\" :query=\"query\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n </div>\n\n <div v-if=\"$slots.footer\" data-gr-command-palette-footer :class=\"commandFooterClass\">\n <slot name=\"footer\" />\n </div>\n </div>\n </GrModal>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { i as matchCommandItem, n as filterCommandItems, r as groupCommandItems, t as GrCommandPalette_default } from "./chunks/GrCommandPalette-6OyvNbek.js";
2
+ import { n as grCommandPaletteSafelist, t as grCommandPaletteConfig } from "../../chunks/config-COE_vZ-l.js";
3
+ export { GrCommandPalette_default as GrCommandPalette, GrCommandPalette_default as default, filterCommandItems, grCommandPaletteConfig, grCommandPaletteSafelist, groupCommandItems, matchCommandItem };
@@ -0,0 +1,57 @@
1
+ import { n as GR_CONFIG_KEY, s as useGrConfig } from "../../../chunks/context-DfWYCBB-.js";
2
+ import { t as GRANULARITY_I18N_KEY } from "../../../chunks/adapter-CAOxmn2G.js";
3
+ import { computed, createBlock, defineComponent, openBlock, provide, renderSlot, resolveDynamicComponent, withCtx } from "vue";
4
+ //#endregion
5
+ //#region src/components/GrConfigProvider/GrConfigProvider.vue
6
+ var GrConfigProvider_default = /* @__PURE__ */ defineComponent({
7
+ __name: "GrConfigProvider",
8
+ props: {
9
+ size: { default: void 0 },
10
+ componentDefaults: { default: void 0 },
11
+ i18n: { default: void 0 },
12
+ tag: { default: "div" }
13
+ },
14
+ setup(__props) {
15
+ /**
16
+ * GrConfigProvider — глобальные дефолты для вложенных GR-компонентов.
17
+ *
18
+ * Даёт единое место для:
19
+ * - `size` — дефолтного размера контролов (не нужно повторять `size` в каждом вызове);
20
+ * - `componentDefaults` — per-component дефолтных пропсов;
21
+ * - `i18n` — адаптера переводов (иначе приложение инжектит его вручную).
22
+ *
23
+ * Провайдеры можно вкладывать: дочерний мержится поверх родительского, поэтому
24
+ * можно задать «глобальную» тему и точечно переопределить её в поддереве.
25
+ *
26
+ * Рендерится прозрачно (`display: contents`), чтобы не влиять на layout.
27
+ */
28
+ const props = __props;
29
+ const parent = useGrConfig();
30
+ provide(GR_CONFIG_KEY, {
31
+ size: computed(() => props.size ?? parent.size.value),
32
+ componentDefaults: computed(() => {
33
+ const inherited = parent.componentDefaults.value;
34
+ const own = props.componentDefaults ?? {};
35
+ const merged = { ...inherited };
36
+ for (const [component, componentProps] of Object.entries(own)) merged[component] = {
37
+ ...inherited[component] ?? {},
38
+ ...componentProps
39
+ };
40
+ return merged;
41
+ })
42
+ });
43
+ if (props.i18n != null) provide(GRANULARITY_I18N_KEY, props.i18n);
44
+ const wrapperStyle = { display: "contents" };
45
+ return (_ctx, _cache) => {
46
+ return openBlock(), createBlock(resolveDynamicComponent(props.tag), {
47
+ "data-gr-config-provider": "",
48
+ style: wrapperStyle
49
+ }, {
50
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
51
+ _: 3
52
+ });
53
+ };
54
+ }
55
+ });
56
+ //#endregion
57
+ export { GrConfigProvider_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrConfigProvider-BtyeBGm8.js","names":[],"sources":["../../../../src/components/GrConfigProvider/GrConfigProvider.vue","../../../../src/components/GrConfigProvider/GrConfigProvider.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrConfigProvider — глобальные дефолты для вложенных GR-компонентов.\n *\n * Даёт единое место для:\n * - `size` — дефолтного размера контролов (не нужно повторять `size` в каждом вызове);\n * - `componentDefaults` — per-component дефолтных пропсов;\n * - `i18n` — адаптера переводов (иначе приложение инжектит его вручную).\n *\n * Провайдеры можно вкладывать: дочерний мержится поверх родительского, поэтому\n * можно задать «глобальную» тему и точечно переопределить её в поддереве.\n *\n * Рендерится прозрачно (`display: contents`), чтобы не влиять на layout.\n */\nimport { computed, provide } from 'vue'\n\nimport { GRANULARITY_I18N_KEY, type GranularityI18nAdapter } from '../../i18n/adapter'\nimport {\n GR_CONFIG_KEY,\n useGrConfig,\n type GrComponentDefaults,\n type GrComponentSize,\n type GrConfigContext,\n} from './context'\n\nexport type { GrComponentDefaults, GrComponentSize } from './context'\n\nconst props = withDefaults(\n defineProps<{\n /** Дефолтный размер контролов для вложенных компонентов. */\n size?: GrComponentSize\n /** Дефолтные пропсы по компонентам: `{ GrButton: { variant: 'secondary' } }`. */\n componentDefaults?: GrComponentDefaults\n /** Адаптер переводов (fint-i18n-совместимый). Прокидывается вложенным компонентам. */\n i18n?: GranularityI18nAdapter | null\n /** Тег обёртки. По умолчанию прозрачный `<div style=\"display:contents\">`. */\n tag?: string\n }>(),\n {\n size: undefined,\n componentDefaults: undefined,\n i18n: undefined,\n tag: 'div',\n },\n)\n\n// Наследуемся от родительского провайдера — вложенные провайдеры мержатся.\nconst parent = useGrConfig()\n\nconst size = computed(() => props.size ?? parent.size.value)\nconst componentDefaults = computed<GrComponentDefaults>(() => {\n const inherited = parent.componentDefaults.value as Record<string, Record<string, unknown>>\n const own = (props.componentDefaults ?? {}) as Record<string, Record<string, unknown>>\n\n // Мержим на уровне пропов, а не компонентов: иначе вложенный провайдер,\n // переопределяющий один `variant`, стирал бы у родителя весь блок `GrButton`.\n const merged: Record<string, Record<string, unknown>> = { ...inherited }\n for (const [component, componentProps] of Object.entries(own))\n merged[component] = { ...(inherited[component] ?? {}), ...componentProps }\n\n return merged\n})\n\nprovide<GrConfigContext>(GR_CONFIG_KEY, { size, componentDefaults })\n\n// i18n-адаптер прокидываем детям только если он задан явно — иначе не затеняем\n// адаптер, установленный приложением выше по дереву (fint-i18n).\nif (props.i18n != null)\n provide(GRANULARITY_I18N_KEY, props.i18n)\n\nconst wrapperStyle = { display: 'contents' } as const\n</script>\n\n<template>\n <component :is=\"props.tag\" data-gr-config-provider :style=\"wrapperStyle\">\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrConfigProvider — глобальные дефолты для вложенных GR-компонентов.\n *\n * Даёт единое место для:\n * - `size` — дефолтного размера контролов (не нужно повторять `size` в каждом вызове);\n * - `componentDefaults` — per-component дефолтных пропсов;\n * - `i18n` — адаптера переводов (иначе приложение инжектит его вручную).\n *\n * Провайдеры можно вкладывать: дочерний мержится поверх родительского, поэтому\n * можно задать «глобальную» тему и точечно переопределить её в поддереве.\n *\n * Рендерится прозрачно (`display: contents`), чтобы не влиять на layout.\n */\nimport { computed, provide } from 'vue'\n\nimport { GRANULARITY_I18N_KEY, type GranularityI18nAdapter } from '../../i18n/adapter'\nimport {\n GR_CONFIG_KEY,\n useGrConfig,\n type GrComponentDefaults,\n type GrComponentSize,\n type GrConfigContext,\n} from './context'\n\nexport type { GrComponentDefaults, GrComponentSize } from './context'\n\nconst props = withDefaults(\n defineProps<{\n /** Дефолтный размер контролов для вложенных компонентов. */\n size?: GrComponentSize\n /** Дефолтные пропсы по компонентам: `{ GrButton: { variant: 'secondary' } }`. */\n componentDefaults?: GrComponentDefaults\n /** Адаптер переводов (fint-i18n-совместимый). Прокидывается вложенным компонентам. */\n i18n?: GranularityI18nAdapter | null\n /** Тег обёртки. По умолчанию прозрачный `<div style=\"display:contents\">`. */\n tag?: string\n }>(),\n {\n size: undefined,\n componentDefaults: undefined,\n i18n: undefined,\n tag: 'div',\n },\n)\n\n// Наследуемся от родительского провайдера — вложенные провайдеры мержатся.\nconst parent = useGrConfig()\n\nconst size = computed(() => props.size ?? parent.size.value)\nconst componentDefaults = computed<GrComponentDefaults>(() => {\n const inherited = parent.componentDefaults.value as Record<string, Record<string, unknown>>\n const own = (props.componentDefaults ?? {}) as Record<string, Record<string, unknown>>\n\n // Мержим на уровне пропов, а не компонентов: иначе вложенный провайдер,\n // переопределяющий один `variant`, стирал бы у родителя весь блок `GrButton`.\n const merged: Record<string, Record<string, unknown>> = { ...inherited }\n for (const [component, componentProps] of Object.entries(own))\n merged[component] = { ...(inherited[component] ?? {}), ...componentProps }\n\n return merged\n})\n\nprovide<GrConfigContext>(GR_CONFIG_KEY, { size, componentDefaults })\n\n// i18n-адаптер прокидываем детям только если он задан явно — иначе не затеняем\n// адаптер, установленный приложением выше по дереву (fint-i18n).\nif (props.i18n != null)\n provide(GRANULARITY_I18N_KEY, props.i18n)\n\nconst wrapperStyle = { display: 'contents' } as const\n</script>\n\n<template>\n <component :is=\"props.tag\" data-gr-config-provider :style=\"wrapperStyle\">\n <slot />\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,QAAQ;EAoBd,MAAM,SAAS,YAAY;EAgB3B,QAAyB,eAAe;GAAE,MAd7B,eAAe,MAAM,QAAQ,OAAO,KAAK,KAcZ;GAAM,mBAbtB,eAAoC;IAC5D,MAAM,YAAY,OAAO,kBAAkB;IAC3C,MAAM,MAAO,MAAM,qBAAqB,CAAC;IAIzC,MAAM,SAAkD,EAAE,GAAG,UAAU;IACvE,KAAK,MAAM,CAAC,WAAW,mBAAmB,OAAO,QAAQ,GAAG,GAC1D,OAAO,aAAa;KAAE,GAAI,UAAU,cAAc,CAAC;KAAI,GAAG;IAAe;IAE3E,OAAO;GACT,CAEgD;EAAkB,CAAC;EAInE,IAAI,MAAM,QAAQ,MAChB,QAAQ,sBAAsB,MAAM,IAAI;EAE1C,MAAM,eAAe,EAAE,SAAS,WAAW;;uBAIzC,YAEY,wBAFI,MAAM,GAAG,GAAA;IAAE,2BAAA;IAAyB,OAAO;;2BACjD,CAAR,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { a as useGrComponentProp, i as useGrComponentDefaults, n as GR_CONFIG_KEY, o as useGrComponentSize, r as resolveGrConfig, s as useGrConfig, t as GR_COMPONENT_SIZES } from "../../chunks/context-DfWYCBB-.js";
2
+ import { t as GrConfigProvider_default } from "./chunks/GrConfigProvider-BtyeBGm8.js";
3
+ import { t as grConfigProviderConfig } from "../../chunks/config-B7W9VlZ7.js";
4
+ export { GR_COMPONENT_SIZES, GR_CONFIG_KEY, GrConfigProvider_default as GrConfigProvider, GrConfigProvider_default as default, grConfigProviderConfig, resolveGrConfig, useGrComponentDefaults, useGrComponentProp, useGrComponentSize, useGrConfig };
@@ -1,13 +1,13 @@
1
- import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
2
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
3
- import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-Ctucxju9.js";
4
- import { t as GrResponseErrorBanner_default } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-Cdu9ekK9.js";
1
+ import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
2
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
3
+ import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-BPMvDHOz.js";
4
+ import { t as GrResponseErrorBanner_default } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js";
5
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderSlot, toDisplayString, withCtx } from "vue";
6
6
  //#region src/components/GrConfirmDialog/GrConfirmDialog.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { class: "grid gap-4" };
8
8
  var _hoisted_2 = {
9
9
  key: 0,
10
- class: "text-[14px] text-[var(--muted-fg)]"
10
+ class: "text-[14px] text-[var(--gr-muted-fg)]"
11
11
  };
12
12
  var _hoisted_3 = { class: "flex items-center justify-end gap-3" };
13
13
  //#endregion