@feugene/granularity 0.13.0 → 0.18.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 (1266) hide show
  1. package/README.md +14 -1
  2. package/dist/chunks/adapter-CAOxmn2G.js.map +1 -1
  3. package/dist/chunks/check-BZI24Qs4.js +23 -0
  4. package/dist/chunks/check-BZI24Qs4.js.map +1 -0
  5. package/dist/chunks/chevron-down-CQS2OG_s.js +23 -0
  6. package/dist/chunks/chevron-down-CQS2OG_s.js.map +1 -0
  7. package/dist/chunks/chevron-right-BfqMVpbB.js +44 -0
  8. package/dist/chunks/chevron-right-BfqMVpbB.js.map +1 -0
  9. package/dist/chunks/config-06SQjBx0.js +96 -0
  10. package/dist/chunks/config-06SQjBx0.js.map +1 -0
  11. package/dist/chunks/config-A-bBiotF.js +12 -0
  12. package/dist/chunks/config-A-bBiotF.js.map +1 -0
  13. package/dist/chunks/config-B-iNaGdw.js +199 -0
  14. package/dist/chunks/config-B-iNaGdw.js.map +1 -0
  15. package/dist/chunks/config-B84z1aos.js +19 -0
  16. package/dist/chunks/config-B84z1aos.js.map +1 -0
  17. package/dist/chunks/config-BDfTXHo12.js +23 -0
  18. package/dist/chunks/config-BDfTXHo12.js.map +1 -0
  19. package/dist/chunks/config-BE6n20np2.js +27 -0
  20. package/dist/chunks/config-BE6n20np2.js.map +1 -0
  21. package/dist/chunks/config-BKvX0q10.js +89 -0
  22. package/dist/chunks/config-BKvX0q10.js.map +1 -0
  23. package/dist/chunks/config-BN4sXYXn.js +77 -0
  24. package/dist/chunks/config-BN4sXYXn.js.map +1 -0
  25. package/dist/chunks/config-BNu8lFQB.js.map +1 -1
  26. package/dist/chunks/config-BSyiFlbi.js +17 -0
  27. package/dist/chunks/config-BSyiFlbi.js.map +1 -0
  28. package/dist/chunks/config-BViooYNv.js +13 -0
  29. package/dist/chunks/config-BViooYNv.js.map +1 -0
  30. package/dist/chunks/config-Baj7Wvx-.js +72 -0
  31. package/dist/chunks/config-Baj7Wvx-.js.map +1 -0
  32. package/dist/chunks/config-BbY2SKGE.js +90 -0
  33. package/dist/chunks/config-BbY2SKGE.js.map +1 -0
  34. package/dist/chunks/config-BeZRuonp.js +54 -0
  35. package/dist/chunks/config-BeZRuonp.js.map +1 -0
  36. package/dist/chunks/config-BoNR7_PD2.js +140 -0
  37. package/dist/chunks/config-BoNR7_PD2.js.map +1 -0
  38. package/dist/chunks/config-Bpt9Xbxm.js +49 -0
  39. package/dist/chunks/config-Bpt9Xbxm.js.map +1 -0
  40. package/dist/chunks/config-BqFjr3tN.js +131 -0
  41. package/dist/chunks/config-BqFjr3tN.js.map +1 -0
  42. package/dist/chunks/config-BsPDQ0dS.js +97 -0
  43. package/dist/chunks/config-BsPDQ0dS.js.map +1 -0
  44. package/dist/chunks/config-BsuDM3Hb.js +55 -0
  45. package/dist/chunks/config-BsuDM3Hb.js.map +1 -0
  46. package/dist/chunks/config-BtXRpAtq.js +48 -0
  47. package/dist/chunks/config-BtXRpAtq.js.map +1 -0
  48. package/dist/chunks/config-BuGlNPE9.js +8 -0
  49. package/dist/chunks/config-BuGlNPE9.js.map +1 -0
  50. package/dist/chunks/config-C0Ea9ePP.js +15 -0
  51. package/dist/chunks/config-C0Ea9ePP.js.map +1 -0
  52. package/dist/chunks/config-CN2ULSQL.js +36 -0
  53. package/dist/chunks/config-CN2ULSQL.js.map +1 -0
  54. package/dist/chunks/config-CN970ZcJ.js +113 -0
  55. package/dist/chunks/config-CN970ZcJ.js.map +1 -0
  56. package/dist/chunks/config-COpuWGr_.js +72 -0
  57. package/dist/chunks/config-COpuWGr_.js.map +1 -0
  58. package/dist/chunks/config-COvrUfhR.js +83 -0
  59. package/dist/chunks/config-COvrUfhR.js.map +1 -0
  60. package/dist/chunks/config-CQzGyi1C.js +54 -0
  61. package/dist/chunks/config-CQzGyi1C.js.map +1 -0
  62. package/dist/chunks/config-CY0_6cMi.js +51 -0
  63. package/dist/chunks/config-CY0_6cMi.js.map +1 -0
  64. package/dist/chunks/config-CjXjhphs.js +12 -0
  65. package/dist/chunks/config-CjXjhphs.js.map +1 -0
  66. package/dist/chunks/config-CjnbevbD.js +13 -0
  67. package/dist/chunks/config-CjnbevbD.js.map +1 -0
  68. package/dist/chunks/config-Cl4ST6Qd.js +21 -0
  69. package/dist/chunks/config-Cl4ST6Qd.js.map +1 -0
  70. package/dist/chunks/config-Cp0DE0GH.js +12 -0
  71. package/dist/chunks/config-Cp0DE0GH.js.map +1 -0
  72. package/dist/chunks/config-Cwd3yjRw.js +41 -0
  73. package/dist/chunks/config-Cwd3yjRw.js.map +1 -0
  74. package/dist/chunks/config-D2aNP7Es.js +70 -0
  75. package/dist/chunks/config-D2aNP7Es.js.map +1 -0
  76. package/dist/chunks/config-D3_g2KIn.js +120 -0
  77. package/dist/chunks/config-D3_g2KIn.js.map +1 -0
  78. package/dist/chunks/config-D6W1rnlp.js +26 -0
  79. package/dist/chunks/config-D6W1rnlp.js.map +1 -0
  80. package/dist/chunks/config-D94Z9po5.js +126 -0
  81. package/dist/chunks/config-D94Z9po5.js.map +1 -0
  82. package/dist/chunks/config-DA6SnEoy.js +22 -0
  83. package/dist/chunks/config-DA6SnEoy.js.map +1 -0
  84. package/dist/chunks/config-DBmdgoVf.js.map +1 -1
  85. package/dist/chunks/config-DCFvmHEv2.js +76 -0
  86. package/dist/chunks/config-DCFvmHEv2.js.map +1 -0
  87. package/dist/chunks/config-DEvsMTQE.js +150 -0
  88. package/dist/chunks/config-DEvsMTQE.js.map +1 -0
  89. package/dist/chunks/config-DKdlqXiY.js +109 -0
  90. package/dist/chunks/config-DKdlqXiY.js.map +1 -0
  91. package/dist/chunks/config-DP7eseR1.js +92 -0
  92. package/dist/chunks/config-DP7eseR1.js.map +1 -0
  93. package/dist/chunks/config-DSJY6aEl.js +80 -0
  94. package/dist/chunks/config-DSJY6aEl.js.map +1 -0
  95. package/dist/chunks/config-DU2DNSRx2.js +116 -0
  96. package/dist/chunks/config-DU2DNSRx2.js.map +1 -0
  97. package/dist/chunks/config-DhHbU3zO.js +37 -0
  98. package/dist/chunks/config-DhHbU3zO.js.map +1 -0
  99. package/dist/chunks/config-DpeQchsV.js +21 -0
  100. package/dist/chunks/config-DpeQchsV.js.map +1 -0
  101. package/dist/chunks/config-DpqOnJiz2.js.map +1 -0
  102. package/dist/chunks/config-DvQIb4kb.js +98 -0
  103. package/dist/chunks/config-DvQIb4kb.js.map +1 -0
  104. package/dist/chunks/config-K0C2tcLB.js +84 -0
  105. package/dist/chunks/config-K0C2tcLB.js.map +1 -0
  106. package/dist/chunks/config-MRvhUl-O.js +81 -0
  107. package/dist/chunks/config-MRvhUl-O.js.map +1 -0
  108. package/dist/chunks/config-QaIc_gRa.js.map +1 -0
  109. package/dist/chunks/config-Rw9OyW70.js +87 -0
  110. package/dist/chunks/config-Rw9OyW70.js.map +1 -0
  111. package/dist/chunks/config-ScuvHw6k2.js +42 -0
  112. package/dist/chunks/config-ScuvHw6k2.js.map +1 -0
  113. package/dist/chunks/config-T3qdQBgU2.js +40 -0
  114. package/dist/chunks/config-T3qdQBgU2.js.map +1 -0
  115. package/dist/chunks/config-WTNhdh6T2.js +20 -0
  116. package/dist/chunks/config-WTNhdh6T2.js.map +1 -0
  117. package/dist/chunks/config-_qPUfb6-2.js +165 -0
  118. package/dist/chunks/config-_qPUfb6-2.js.map +1 -0
  119. package/dist/chunks/config-esdviAPL.js +41 -0
  120. package/dist/chunks/config-esdviAPL.js.map +1 -0
  121. package/dist/chunks/config-gvq_hWNM.js +103 -0
  122. package/dist/chunks/config-gvq_hWNM.js.map +1 -0
  123. package/dist/chunks/config-gwro_7yn.js +55 -0
  124. package/dist/chunks/config-gwro_7yn.js.map +1 -0
  125. package/dist/chunks/config-qVg3Zz_A.js +30 -0
  126. package/dist/chunks/config-qVg3Zz_A.js.map +1 -0
  127. package/dist/chunks/config-zjeAJ4ho.js +64 -0
  128. package/dist/chunks/config-zjeAJ4ho.js.map +1 -0
  129. package/dist/chunks/context-BSYR7RZs.js +152 -0
  130. package/dist/chunks/context-BSYR7RZs.js.map +1 -0
  131. package/dist/chunks/context-BfIQv7m1.js +18 -0
  132. package/dist/chunks/context-BfIQv7m1.js.map +1 -0
  133. package/dist/chunks/context-Bfrgsluh.js.map +1 -1
  134. package/dist/chunks/context-DdNIxa1w.js.map +1 -1
  135. package/dist/chunks/dialogShared-CxW62PQE.js.map +1 -1
  136. package/dist/chunks/en-COdzxgAX.js +352 -0
  137. package/dist/chunks/en-COdzxgAX.js.map +1 -0
  138. package/dist/chunks/es-ClqJ-4hr.js +354 -0
  139. package/dist/chunks/es-ClqJ-4hr.js.map +1 -0
  140. package/dist/chunks/es-DGMHwknJ.js +20 -0
  141. package/dist/chunks/es-DGMHwknJ.js.map +1 -0
  142. package/dist/chunks/fileValidation-D5TFBhbv.js +296 -0
  143. package/dist/chunks/fileValidation-D5TFBhbv.js.map +1 -0
  144. package/dist/chunks/focusables-BkzK42SQ.js +87 -0
  145. package/dist/chunks/focusables-BkzK42SQ.js.map +1 -0
  146. package/dist/chunks/grBadgeStyles-C2wLlkjF.js +61 -0
  147. package/dist/chunks/grBadgeStyles-C2wLlkjF.js.map +1 -0
  148. package/dist/chunks/grButtonStyles-B_-YRE__.js +221 -0
  149. package/dist/chunks/grButtonStyles-B_-YRE__.js.map +1 -0
  150. package/dist/chunks/grCheckboxStyles-hOAgURZG.js +82 -0
  151. package/dist/chunks/grCheckboxStyles-hOAgURZG.js.map +1 -0
  152. package/dist/chunks/grDropdownStyles-V7TRiCXn.js +24 -0
  153. package/dist/chunks/grDropdownStyles-V7TRiCXn.js.map +1 -0
  154. package/dist/chunks/grFormFieldStyles-BkeZHIw0.js +32 -0
  155. package/dist/chunks/grFormFieldStyles-BkeZHIw0.js.map +1 -0
  156. package/dist/chunks/grIconStyles-BwJrml2L.js +44 -0
  157. package/dist/chunks/grIconStyles-BwJrml2L.js.map +1 -0
  158. package/dist/chunks/grInputStyles-CJeMhUe5.js +66 -0
  159. package/dist/chunks/grInputStyles-CJeMhUe5.js.map +1 -0
  160. package/dist/chunks/grKbdStyles-CeZhGQHr.js +43 -0
  161. package/dist/chunks/grKbdStyles-CeZhGQHr.js.map +1 -0
  162. package/dist/chunks/grLinkStyles-BoL8QYcV.js +84 -0
  163. package/dist/chunks/grLinkStyles-BoL8QYcV.js.map +1 -0
  164. package/dist/chunks/grLoadingStyles-DEmji2wv.js +30 -0
  165. package/dist/chunks/grLoadingStyles-DEmji2wv.js.map +1 -0
  166. package/dist/chunks/grModalStyles-EZfuEiw_.js +77 -0
  167. package/dist/chunks/grModalStyles-EZfuEiw_.js.map +1 -0
  168. package/dist/chunks/grPopoverStyles-Rz_Z5nLW.js +46 -0
  169. package/dist/chunks/grPopoverStyles-Rz_Z5nLW.js.map +1 -0
  170. package/dist/chunks/grSelectStyles-eTz4uPMP.js +147 -0
  171. package/dist/chunks/grSelectStyles-eTz4uPMP.js.map +1 -0
  172. package/dist/chunks/grSliderStyles-B5uNxNJq.js +133 -0
  173. package/dist/chunks/grSliderStyles-B5uNxNJq.js.map +1 -0
  174. package/dist/chunks/grStyle-CrgLQKKf.js +46 -0
  175. package/dist/chunks/grStyle-CrgLQKKf.js.map +1 -0
  176. package/dist/chunks/grTableStyles-C-iaqQUN.js +26 -0
  177. package/dist/chunks/grTableStyles-C-iaqQUN.js.map +1 -0
  178. package/dist/chunks/grTextareaStyles-iOcHuVMM.js +50 -0
  179. package/dist/chunks/grTextareaStyles-iOcHuVMM.js.map +1 -0
  180. package/dist/chunks/granular-provider-B9nXQCMu.js +195 -0
  181. package/dist/chunks/granular-provider-B9nXQCMu.js.map +1 -0
  182. package/dist/chunks/granularityI18n-BC5zsj_d.js +68 -0
  183. package/dist/chunks/granularityI18n-BC5zsj_d.js.map +1 -0
  184. package/dist/chunks/inert-DIHCCn_1.js +78 -0
  185. package/dist/chunks/inert-DIHCCn_1.js.map +1 -0
  186. package/dist/chunks/keyboard-DE2yhz_b.js +70 -0
  187. package/dist/chunks/keyboard-DE2yhz_b.js.map +1 -0
  188. package/dist/chunks/loader-2-B1fdsdWW.js +23 -0
  189. package/dist/chunks/loader-2-B1fdsdWW.js.map +1 -0
  190. package/dist/chunks/minus-oxdbHF33.js +23 -0
  191. package/dist/chunks/minus-oxdbHF33.js.map +1 -0
  192. package/dist/chunks/optionFilter-DYw9XPPx.js +79 -0
  193. package/dist/chunks/optionFilter-DYw9XPPx.js.map +1 -0
  194. package/dist/chunks/overlayStack-C8cfsqXa.js +99 -0
  195. package/dist/chunks/overlayStack-C8cfsqXa.js.map +1 -0
  196. package/dist/chunks/portalRoot-CWD4zHBm.js +35 -0
  197. package/dist/chunks/portalRoot-CWD4zHBm.js.map +1 -0
  198. package/dist/chunks/ru-9z8ix45c.js +356 -0
  199. package/dist/chunks/ru-9z8ix45c.js.map +1 -0
  200. package/dist/chunks/safelist-CudBLyAD.js +26 -0
  201. package/dist/chunks/safelist-CudBLyAD.js.map +1 -0
  202. package/dist/chunks/slotNodes-DxNXpC7v.js +39 -0
  203. package/dist/chunks/slotNodes-DxNXpC7v.js.map +1 -0
  204. package/dist/chunks/useControlAddons-asUr10Pf.js +128 -0
  205. package/dist/chunks/useControlAddons-asUr10Pf.js.map +1 -0
  206. package/dist/chunks/useControlledOpen-DV3SqLTP.js +27 -0
  207. package/dist/chunks/useControlledOpen-DV3SqLTP.js.map +1 -0
  208. package/dist/chunks/useDragSort-0l47h4yb.js +265 -0
  209. package/dist/chunks/useDragSort-0l47h4yb.js.map +1 -0
  210. package/dist/chunks/useFilePreviews-DnwgdyBs.js +53 -0
  211. package/dist/chunks/useFilePreviews-DnwgdyBs.js.map +1 -0
  212. package/dist/chunks/useFocusWithin-BwHE0rzm.js +33 -0
  213. package/dist/chunks/useFocusWithin-BwHE0rzm.js.map +1 -0
  214. package/dist/chunks/useModalOverlay-BTq-0ImG.js +212 -0
  215. package/dist/chunks/useModalOverlay-BTq-0ImG.js.map +1 -0
  216. package/dist/chunks/usePortalTarget-RyzEgNTb.js +77 -0
  217. package/dist/chunks/usePortalTarget-RyzEgNTb.js.map +1 -0
  218. package/dist/chunks/validation-5HhpanPP.js +178 -0
  219. package/dist/chunks/validation-5HhpanPP.js.map +1 -0
  220. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js +272 -0
  221. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js.map +1 -0
  222. package/dist/components/GrAlert/index.js +2 -2
  223. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js +852 -0
  224. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js.map +1 -0
  225. package/dist/components/GrAutocomplete/index.js +2 -2
  226. package/dist/components/GrAutocomplete/styles.css +1 -0
  227. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js +222 -0
  228. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js.map +1 -0
  229. package/dist/components/GrAvatar/index.js +3 -3
  230. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js +40 -0
  231. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js.map +1 -0
  232. package/dist/components/GrBadge/index.js +2 -2
  233. package/dist/components/GrBadge/styles.css +1 -0
  234. package/dist/components/GrBadge/themes/dark.css +19 -0
  235. package/dist/components/GrBadge/themes/light.css +18 -0
  236. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js +97 -0
  237. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js.map +1 -0
  238. package/dist/components/GrBadgeWrap/index.js +3 -3
  239. package/dist/components/GrBadgeWrap/styles.css +1 -0
  240. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js +117 -0
  241. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js.map +1 -0
  242. package/dist/components/GrBottomNav/index.js +3 -3
  243. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js +266 -0
  244. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js.map +1 -0
  245. package/dist/components/GrBreadcrumbs/index.js +3 -0
  246. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js +153 -0
  247. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js.map +1 -0
  248. package/dist/components/GrButton/index.js +5 -5
  249. package/dist/components/GrButton/themes/dark.css +46 -0
  250. package/dist/components/GrButton/themes/light.css +82 -0
  251. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js +44 -0
  252. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js.map +1 -0
  253. package/dist/components/GrButtonGroup/index.js +3 -2
  254. package/dist/components/GrButtonGroup/styles.css +1 -0
  255. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js +89 -0
  256. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js.map +1 -0
  257. package/dist/components/GrCard/index.js +3 -3
  258. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js +262 -0
  259. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js.map +1 -0
  260. package/dist/components/GrCheckbox/index.js +3 -3
  261. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js +140 -0
  262. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js.map +1 -0
  263. package/dist/components/GrCheckboxGroup/index.js +3 -0
  264. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js +308 -0
  265. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js.map +1 -0
  266. package/dist/components/GrCollapse/index.js +3 -3
  267. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js +584 -0
  268. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js.map +1 -0
  269. package/dist/components/GrColorPicker/index.js +3 -0
  270. package/dist/components/GrColorPicker/styles.css +1 -0
  271. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js +565 -0
  272. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js.map +1 -0
  273. package/dist/components/GrCommandPalette/index.js +2 -2
  274. package/dist/components/GrCommandPalette/styles.css +1 -0
  275. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js +144 -0
  276. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js.map +1 -0
  277. package/dist/components/GrConfigProvider/index.js +3 -3
  278. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js +200 -0
  279. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js.map +1 -0
  280. package/dist/components/GrConfirmDialog/index.js +2 -2
  281. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js +1053 -0
  282. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js.map +1 -0
  283. package/dist/components/GrDataTable/index.js +3 -3
  284. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js +255 -0
  285. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js.map +1 -0
  286. package/dist/components/GrDialog/index.js +1 -1
  287. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js +656 -0
  288. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js.map +1 -0
  289. package/dist/components/GrDialogService/index.js +3 -3
  290. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js +109 -0
  291. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js.map +1 -0
  292. package/dist/components/GrDivider/index.js +3 -3
  293. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js +251 -0
  294. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js.map +1 -0
  295. package/dist/components/GrDrawer/index.js +2 -2
  296. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js +300 -0
  297. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js.map +1 -0
  298. package/dist/components/GrDropdown/index.js +2 -2
  299. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js +421 -0
  300. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js.map +1 -0
  301. package/dist/components/GrDropdownMenu/index.js +3 -3
  302. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js +86 -0
  303. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js.map +1 -0
  304. package/dist/components/GrEmptyState/index.js +3 -3
  305. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js +1080 -0
  306. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js.map +1 -0
  307. package/dist/components/GrFileUpload/index.js +4 -4
  308. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js +326 -0
  309. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js.map +1 -0
  310. package/dist/components/GrForm/index.js +3 -2
  311. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js +190 -0
  312. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js.map +1 -0
  313. package/dist/components/GrFormField/index.js +3 -3
  314. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js +452 -0
  315. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js.map +1 -0
  316. package/dist/components/GrFormFile/index.js +3 -3
  317. package/dist/components/GrFormFile/styles.css +1 -0
  318. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js +63 -0
  319. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js.map +1 -0
  320. package/dist/components/GrFormSection/index.js +3 -3
  321. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js +57 -0
  322. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js.map +1 -0
  323. package/dist/components/GrIcon/index.js +3 -3
  324. package/dist/components/GrIcon/styles.css +1 -0
  325. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js +1127 -0
  326. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js.map +1 -0
  327. package/dist/components/GrImageViewer/index.js +3 -3
  328. package/dist/components/GrImageViewer/themes/dark.css +17 -0
  329. package/dist/components/GrImageViewer/themes/light.css +16 -0
  330. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js +348 -0
  331. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js.map +1 -0
  332. package/dist/components/GrInput/index.js +2 -2
  333. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js +512 -0
  334. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js.map +1 -0
  335. package/dist/components/GrInputTag/index.js +2 -2
  336. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js +358 -0
  337. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js.map +1 -0
  338. package/dist/components/GrKbd/index.js +3 -3
  339. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js +163 -0
  340. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js.map +1 -0
  341. package/dist/components/GrLink/index.js +2 -2
  342. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js +277 -0
  343. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js.map +1 -0
  344. package/dist/components/GrList/index.js +3 -3
  345. package/dist/components/GrList/styles.css +1 -0
  346. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js +101 -0
  347. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js.map +1 -0
  348. package/dist/components/GrLoading/index.js +2 -2
  349. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js +313 -0
  350. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js.map +1 -0
  351. package/dist/components/GrModal/index.js +3 -4
  352. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js +104 -0
  353. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js.map +1 -0
  354. package/dist/components/GrNavbar/index.js +3 -3
  355. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js +658 -0
  356. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js.map +1 -0
  357. package/dist/components/GrNumberInput/index.js +2 -2
  358. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js +283 -0
  359. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js.map +1 -0
  360. package/dist/components/GrPagination/index.js +3 -3
  361. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js +216 -0
  362. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js.map +1 -0
  363. package/dist/components/GrPopover/index.js +3 -0
  364. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js +90 -0
  365. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js.map +1 -0
  366. package/dist/components/GrProgressBar/index.js +2 -2
  367. package/dist/components/GrProgressBar/styles.css +1 -0
  368. package/dist/components/GrProgressBar/themes/dark.css +13 -0
  369. package/dist/components/GrProgressBar/themes/light.css +12 -0
  370. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js +210 -0
  371. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js.map +1 -0
  372. package/dist/components/GrProgressCircle/index.js +3 -0
  373. package/dist/components/GrProgressCircle/styles.css +1 -0
  374. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js +348 -0
  375. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js.map +1 -0
  376. package/dist/components/GrPromptDialog/index.js +2 -2
  377. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js +253 -0
  378. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js.map +1 -0
  379. package/dist/components/GrRadio/index.js +2 -2
  380. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js +196 -0
  381. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js.map +1 -0
  382. package/dist/components/GrRadioGroup/index.js +2 -2
  383. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js +315 -0
  384. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js.map +1 -0
  385. package/dist/components/GrRating/index.js +2 -2
  386. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js +777 -0
  387. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js.map +1 -0
  388. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js +224 -0
  389. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js.map +1 -0
  390. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  391. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js +388 -0
  392. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js.map +1 -0
  393. package/dist/components/GrSegmented/index.js +3 -3
  394. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js +1373 -0
  395. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js.map +1 -0
  396. package/dist/components/GrSelect/index.js +2 -2
  397. package/dist/components/GrSelect/styles.css +1 -0
  398. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js +257 -0
  399. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js.map +1 -0
  400. package/dist/components/GrSidebar/index.js +3 -3
  401. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js +84 -0
  402. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js.map +1 -0
  403. package/dist/components/GrSkeleton/index.js +2 -2
  404. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js +379 -0
  405. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js.map +1 -0
  406. package/dist/components/GrSlider/index.js +2 -2
  407. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js +276 -0
  408. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js.map +1 -0
  409. package/dist/components/GrSortableList/index.js +3 -0
  410. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js +268 -0
  411. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js.map +1 -0
  412. package/dist/components/GrSplitter/index.js +3 -0
  413. package/dist/components/GrSplitter/styles.css +1 -0
  414. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js +319 -0
  415. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js.map +1 -0
  416. package/dist/components/GrStatistic/index.js +2 -2
  417. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js +183 -0
  418. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js.map +1 -0
  419. package/dist/components/GrSwitch/index.js +2 -2
  420. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js +81 -0
  421. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js.map +1 -0
  422. package/dist/components/GrTabPanels/index.js +1 -1
  423. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js +169 -0
  424. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js.map +1 -0
  425. package/dist/components/GrTable/index.js +3 -3
  426. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js +261 -0
  427. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js.map +1 -0
  428. package/dist/components/GrTabs/index.js +3 -3
  429. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js +241 -0
  430. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js.map +1 -0
  431. package/dist/components/GrTextarea/index.js +2 -2
  432. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js +285 -0
  433. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js.map +1 -0
  434. package/dist/components/GrTimeline/index.js +3 -0
  435. package/dist/components/GrTimeline/styles.css +1 -0
  436. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js +373 -0
  437. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js.map +1 -0
  438. package/dist/components/GrToaster/index.js +2 -2
  439. package/dist/components/GrToaster/styles.css +1 -0
  440. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js +185 -0
  441. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js.map +1 -0
  442. package/dist/components/GrTooltip/index.js +3 -3
  443. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js +1371 -0
  444. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js.map +1 -0
  445. package/dist/components/GrTree/index.js +2 -2
  446. package/dist/components/GrTree/styles.css +1 -0
  447. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js +623 -0
  448. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js.map +1 -0
  449. package/dist/components/GrTreeSelect/index.js +2 -2
  450. package/dist/composables/useAnnouncer.js +114 -0
  451. package/dist/composables/useAnnouncer.js.map +1 -0
  452. package/dist/composables/useComboboxNavigation.js +71 -0
  453. package/dist/composables/useComboboxNavigation.js.map +1 -0
  454. package/dist/composables/useDismissible.js +31 -0
  455. package/dist/composables/useDismissible.js.map +1 -0
  456. package/dist/composables/useDragGesture.js +55 -0
  457. package/dist/composables/useDragGesture.js.map +1 -0
  458. package/dist/composables/useDragSort.js +2 -0
  459. package/dist/composables/useFloating.js +133 -0
  460. package/dist/composables/useFloating.js.map +1 -0
  461. package/dist/composables/useFocusTrap.js +124 -0
  462. package/dist/composables/useFocusTrap.js.map +1 -0
  463. package/dist/composables/useGrComponentConfig.js +2 -0
  464. package/dist/composables/useGrFormControl.js +24 -0
  465. package/dist/composables/useGrFormControl.js.map +1 -0
  466. package/dist/composables/useGranularityTranslations.js +2 -0
  467. package/dist/composables/useOverlayLayer.js +65 -0
  468. package/dist/composables/useOverlayLayer.js.map +1 -0
  469. package/dist/composables/usePortalTarget.js +2 -0
  470. package/dist/composables/useRovingFocus.js +150 -0
  471. package/dist/composables/useRovingFocus.js.map +1 -0
  472. package/dist/composables/useTheme.js +106 -36
  473. package/dist/composables/useTheme.js.map +1 -1
  474. package/dist/composables/useToast.js +123 -7
  475. package/dist/composables/useToast.js.map +1 -1
  476. package/dist/composables/useVirtualList.js +244 -0
  477. package/dist/composables/useVirtualList.js.map +1 -0
  478. package/dist/directives/dropzone.js +1 -1
  479. package/dist/directives/hotkey.js +18 -18
  480. package/dist/directives/hotkey.js.map +1 -1
  481. package/dist/directives/loading.js +43 -7
  482. package/dist/directives/loading.js.map +1 -1
  483. package/dist/fileValidation/index.js +2 -2
  484. package/dist/granular-provider-node.js +1 -31
  485. package/dist/granular-provider.js +1 -4
  486. package/dist/i18n/all.js +1 -1
  487. package/dist/i18n/index.js +1 -1
  488. package/dist/index.js +157 -140
  489. package/dist/styles/base.css +32 -0
  490. package/dist/styles/preflight.css +33 -0
  491. package/dist/styles/themes/dark.css +81 -26
  492. package/dist/styles/themes/light.css +86 -15
  493. package/dist/styles/tokens.css +63 -4
  494. package/dist/tokens.js +3216 -0
  495. package/dist/tokens.js.map +1 -0
  496. package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +42 -10
  497. package/dist/types/src/components/GrAlert/config.d.ts +1 -1
  498. package/dist/types/src/components/GrAlert/defaults.d.ts +10 -4
  499. package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +0 -7
  500. package/dist/types/src/components/GrAlert/index.d.ts +3 -2
  501. package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +112 -99
  502. package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -1
  503. package/dist/types/src/components/GrAutocomplete/defaults.d.ts +1 -1
  504. package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +43 -7
  505. package/dist/types/src/components/GrAutocomplete/index.d.ts +4 -0
  506. package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +40 -17
  507. package/dist/types/src/components/GrAvatar/GrAvatarGroup.vue.d.ts +70 -0
  508. package/dist/types/src/components/GrAvatar/avatarContext.d.ts +12 -0
  509. package/dist/types/src/components/GrAvatar/config.d.ts +1 -1
  510. package/dist/types/src/components/GrAvatar/defaults.d.ts +16 -0
  511. package/dist/types/src/components/GrAvatar/grAvatarStyles.d.ts +38 -0
  512. package/dist/types/src/components/GrAvatar/index.d.ts +5 -0
  513. package/dist/types/src/components/GrAvatar/safelist.d.ts +4 -0
  514. package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +4 -4
  515. package/dist/types/src/components/GrBadge/config.d.ts +1 -1
  516. package/dist/types/src/components/GrBadge/defaults.d.ts +1 -1
  517. package/dist/types/src/components/GrBadge/grBadgeStyles.d.ts +13 -1
  518. package/dist/types/src/components/GrBadge/index.d.ts +1 -0
  519. package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +42 -5
  520. package/dist/types/src/components/GrBadgeWrap/config.d.ts +1 -1
  521. package/dist/types/src/components/GrBadgeWrap/grBadgeWrapStyles.d.ts +46 -0
  522. package/dist/types/src/components/GrBadgeWrap/index.d.ts +4 -0
  523. package/dist/types/src/components/GrBadgeWrap/safelist.d.ts +1 -0
  524. package/dist/types/src/components/GrBottomNav/GrBottomNav.vue.d.ts +91 -4
  525. package/dist/types/src/components/GrBottomNav/config.d.ts +1 -1
  526. package/dist/types/src/components/GrBottomNav/defaults.d.ts +16 -0
  527. package/dist/types/src/components/GrBottomNav/grBottomNavStyles.d.ts +56 -0
  528. package/dist/types/src/components/GrBottomNav/index.d.ts +6 -1
  529. package/dist/types/src/components/GrBottomNav/safelist.d.ts +1 -0
  530. package/dist/types/src/components/GrBreadcrumbs/GrBreadcrumbs.vue.d.ts +117 -0
  531. package/dist/types/src/components/GrBreadcrumbs/config.d.ts +1 -0
  532. package/dist/types/src/components/GrBreadcrumbs/defaults.d.ts +15 -0
  533. package/dist/types/src/components/GrBreadcrumbs/grBreadcrumbsStyles.d.ts +86 -0
  534. package/dist/types/src/components/GrBreadcrumbs/index.d.ts +8 -0
  535. package/dist/types/src/components/GrBreadcrumbs/safelist.d.ts +1 -0
  536. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +31 -7
  537. package/dist/types/src/components/GrButton/config.d.ts +1 -1
  538. package/dist/types/src/components/GrButton/defaults.d.ts +1 -1
  539. package/dist/types/src/components/GrButton/grButtonStyles.d.ts +27 -3
  540. package/dist/types/src/components/GrButton/index.d.ts +5 -1
  541. package/dist/types/src/components/GrButton/safelist.d.ts +1 -0
  542. package/dist/types/src/components/GrButtonGroup/GrButtonGroup.vue.d.ts +32 -4
  543. package/dist/types/src/components/GrButtonGroup/config.d.ts +1 -1
  544. package/dist/types/src/components/GrButtonGroup/context.d.ts +20 -0
  545. package/dist/types/src/components/GrButtonGroup/index.d.ts +3 -0
  546. package/dist/types/src/components/GrCard/GrCard.vue.d.ts +80 -3
  547. package/dist/types/src/components/GrCard/config.d.ts +1 -1
  548. package/dist/types/src/components/GrCard/defaults.d.ts +15 -0
  549. package/dist/types/src/components/GrCard/grCardStyles.d.ts +24 -0
  550. package/dist/types/src/components/GrCard/index.d.ts +5 -0
  551. package/dist/types/src/components/GrCard/safelist.d.ts +1 -0
  552. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +56 -10
  553. package/dist/types/src/components/GrCheckbox/config.d.ts +1 -1
  554. package/dist/types/src/components/GrCheckbox/defaults.d.ts +14 -0
  555. package/dist/types/src/components/GrCheckbox/grCheckboxGroupContext.d.ts +19 -0
  556. package/dist/types/src/components/GrCheckbox/grCheckboxStyles.d.ts +44 -0
  557. package/dist/types/src/components/GrCheckbox/index.d.ts +9 -0
  558. package/dist/types/src/components/GrCheckbox/safelist.d.ts +13 -0
  559. package/dist/types/src/components/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +105 -0
  560. package/dist/types/src/components/GrCheckboxGroup/config.d.ts +1 -0
  561. package/dist/types/src/components/GrCheckboxGroup/defaults.d.ts +14 -0
  562. package/dist/types/src/components/GrCheckboxGroup/index.d.ts +9 -0
  563. package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +55 -7
  564. package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +13 -3
  565. package/dist/types/src/components/GrCollapse/config.d.ts +1 -1
  566. package/dist/types/src/components/GrCollapse/defaults.d.ts +19 -0
  567. package/dist/types/src/components/GrCollapse/grCollapseContext.d.ts +20 -0
  568. package/dist/types/src/components/GrCollapse/grCollapseStyles.d.ts +42 -0
  569. package/dist/types/src/components/GrCollapse/index.d.ts +3 -0
  570. package/dist/types/src/components/GrCollapse/safelist.d.ts +15 -0
  571. package/dist/types/src/components/GrColorPicker/GrColorPicker.vue.d.ts +104 -0
  572. package/dist/types/src/components/GrColorPicker/color.d.ts +38 -0
  573. package/dist/types/src/components/GrColorPicker/config.d.ts +1 -0
  574. package/dist/types/src/components/GrColorPicker/defaults.d.ts +15 -0
  575. package/dist/types/src/components/GrColorPicker/grColorPickerStyles.d.ts +39 -0
  576. package/dist/types/src/components/GrColorPicker/index.d.ts +11 -0
  577. package/dist/types/src/components/GrColorPicker/safelist.d.ts +1 -0
  578. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +45 -10
  579. package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -1
  580. package/dist/types/src/components/GrCommandPalette/defaults.d.ts +14 -0
  581. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +24 -0
  582. package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +33 -8
  583. package/dist/types/src/components/GrCommandPalette/index.d.ts +4 -0
  584. package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +38 -4
  585. package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -1
  586. package/dist/types/src/components/GrConfigProvider/context.d.ts +33 -22
  587. package/dist/types/src/components/GrConfigProvider/index.d.ts +2 -1
  588. package/dist/types/src/components/GrConfigProvider/zIndexScale.d.ts +23 -0
  589. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +33 -4
  590. package/dist/types/src/components/GrConfirmDialog/config.d.ts +1 -1
  591. package/dist/types/src/components/GrConfirmDialog/defaults.d.ts +14 -0
  592. package/dist/types/src/components/GrConfirmDialog/index.d.ts +2 -1
  593. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +145 -27
  594. package/dist/types/src/components/GrDataTable/config.d.ts +1 -1
  595. package/dist/types/src/components/GrDataTable/defaults.d.ts +10 -0
  596. package/dist/types/src/components/GrDataTable/grDataTableSort.d.ts +25 -0
  597. package/dist/types/src/components/GrDataTable/grDataTableStyles.d.ts +68 -0
  598. package/dist/types/src/components/GrDataTable/index.d.ts +10 -1
  599. package/dist/types/src/components/GrDataTable/safelist.d.ts +1 -0
  600. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +51 -4
  601. package/dist/types/src/components/GrDialog/GrDialogCloseButton.vue.d.ts +3 -0
  602. package/dist/types/src/components/GrDialog/GrDialogHeader.vue.d.ts +3 -0
  603. package/dist/types/src/components/GrDialog/config.d.ts +1 -1
  604. package/dist/types/src/components/GrDialog/defaults.d.ts +14 -0
  605. package/dist/types/src/components/GrDialog/dialogShared.d.ts +2 -1
  606. package/dist/types/src/components/GrDialog/index.d.ts +5 -0
  607. package/dist/types/src/components/GrDialogService/GrDialogServiceHost.vue.d.ts +18 -1
  608. package/dist/types/src/components/GrDialogService/GrDialogServiceItem.vue.d.ts +15 -0
  609. package/dist/types/src/components/GrDialogService/config.d.ts +1 -1
  610. package/dist/types/src/components/GrDialogService/index.d.ts +3 -1
  611. package/dist/types/src/components/GrDialogService/store.d.ts +78 -7
  612. package/dist/types/src/components/GrDialogService/types.d.ts +22 -1
  613. package/dist/types/src/components/GrDialogService/useDialogService.d.ts +31 -1
  614. package/dist/types/src/components/GrDivider/GrDivider.vue.d.ts +44 -9
  615. package/dist/types/src/components/GrDivider/config.d.ts +1 -1
  616. package/dist/types/src/components/GrDivider/defaults.d.ts +15 -0
  617. package/dist/types/src/components/GrDivider/grDividerStyles.d.ts +19 -0
  618. package/dist/types/src/components/GrDivider/index.d.ts +4 -1
  619. package/dist/types/src/components/GrDivider/safelist.d.ts +1 -0
  620. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +93 -17
  621. package/dist/types/src/components/GrDrawer/config.d.ts +1 -1
  622. package/dist/types/src/components/GrDrawer/defaults.d.ts +19 -0
  623. package/dist/types/src/components/GrDrawer/grDrawerStyles.d.ts +48 -2
  624. package/dist/types/src/components/GrDrawer/index.d.ts +6 -1
  625. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +66 -13
  626. package/dist/types/src/components/GrDropdown/config.d.ts +1 -1
  627. package/dist/types/src/components/GrDropdown/grDropdownStyles.d.ts +4 -5
  628. package/dist/types/src/components/GrDropdown/index.d.ts +5 -2
  629. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +79 -16
  630. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuColumn.vue.d.ts +2 -1
  631. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuColumns.vue.d.ts +3 -2
  632. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuGroup.vue.d.ts +2 -2
  633. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuHeader.vue.d.ts +3 -2
  634. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +51 -5
  635. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuList.vue.d.ts +5 -0
  636. package/dist/types/src/components/GrDropdownMenu/config.d.ts +1 -1
  637. package/dist/types/src/components/GrDropdownMenu/grDropdownMenuStyles.d.ts +33 -0
  638. package/dist/types/src/components/GrDropdownMenu/index.d.ts +6 -2
  639. package/dist/types/src/components/GrDropdownMenu/menuModel.d.ts +42 -0
  640. package/dist/types/src/components/GrDropdownMenu/safelist.d.ts +7 -0
  641. package/dist/types/src/components/GrEmptyState/GrEmptyState.vue.d.ts +33 -10
  642. package/dist/types/src/components/GrEmptyState/config.d.ts +1 -1
  643. package/dist/types/src/components/GrEmptyState/defaults.d.ts +16 -0
  644. package/dist/types/src/components/GrEmptyState/grEmptyStateStyles.d.ts +32 -0
  645. package/dist/types/src/components/GrEmptyState/index.d.ts +4 -0
  646. package/dist/types/src/components/GrEmptyState/safelist.d.ts +1 -0
  647. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +158 -148
  648. package/dist/types/src/components/GrFileUpload/config.d.ts +1 -1
  649. package/dist/types/src/components/GrFileUpload/defaults.d.ts +10 -0
  650. package/dist/types/src/components/GrFileUpload/fileEntry.d.ts +26 -0
  651. package/dist/types/src/components/GrFileUpload/grFileUploadStyles.d.ts +45 -0
  652. package/dist/types/src/components/GrFileUpload/index.d.ts +10 -1
  653. package/dist/types/src/components/GrFileUpload/maxFileSize.d.ts +2 -0
  654. package/dist/types/src/components/GrFileUpload/safelist.d.ts +1 -0
  655. package/dist/types/src/components/GrFileUpload/useDropZone.d.ts +24 -0
  656. package/dist/types/src/components/GrFileUpload/usePerFileUpload.d.ts +38 -0
  657. package/dist/types/src/components/GrFileUpload/useUploadState.d.ts +30 -0
  658. package/dist/types/src/components/GrForm/GrForm.vue.d.ts +38 -2
  659. package/dist/types/src/components/GrForm/config.d.ts +1 -1
  660. package/dist/types/src/components/GrForm/context.d.ts +22 -3
  661. package/dist/types/src/components/GrForm/fileRule.d.ts +43 -0
  662. package/dist/types/src/components/GrForm/index.d.ts +6 -2
  663. package/dist/types/src/components/GrForm/modelSnapshot.d.ts +17 -0
  664. package/dist/types/src/components/GrForm/validation.d.ts +16 -1
  665. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +56 -10
  666. package/dist/types/src/components/GrFormField/config.d.ts +1 -1
  667. package/dist/types/src/components/GrFormField/context.d.ts +19 -0
  668. package/dist/types/src/components/GrFormField/defaults.d.ts +15 -0
  669. package/dist/types/src/components/GrFormField/grFormFieldStyles.d.ts +19 -0
  670. package/dist/types/src/components/GrFormField/index.d.ts +5 -1
  671. package/dist/types/src/components/GrFormField/safelist.d.ts +1 -0
  672. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +70 -16
  673. package/dist/types/src/components/GrFormFile/config.d.ts +1 -1
  674. package/dist/types/src/components/GrFormFile/defaults.d.ts +10 -0
  675. package/dist/types/src/components/GrFormFile/grFormFileStyles.d.ts +22 -0
  676. package/dist/types/src/components/GrFormFile/index.d.ts +7 -0
  677. package/dist/types/src/components/GrFormFile/safelist.d.ts +1 -0
  678. package/dist/types/src/components/GrFormSection/GrFormSection.vue.d.ts +34 -7
  679. package/dist/types/src/components/GrFormSection/config.d.ts +1 -1
  680. package/dist/types/src/components/GrFormSection/defaults.d.ts +14 -0
  681. package/dist/types/src/components/GrFormSection/grFormSectionStyles.d.ts +12 -0
  682. package/dist/types/src/components/GrFormSection/index.d.ts +4 -0
  683. package/dist/types/src/components/GrFormSection/safelist.d.ts +1 -0
  684. package/dist/types/src/components/GrIcon/GrIcon.vue.d.ts +40 -4
  685. package/dist/types/src/components/GrIcon/config.d.ts +1 -1
  686. package/dist/types/src/components/GrIcon/defaults.d.ts +14 -0
  687. package/dist/types/src/components/GrIcon/grIconStyles.d.ts +25 -0
  688. package/dist/types/src/components/GrIcon/index.d.ts +4 -0
  689. package/dist/types/src/components/GrIcon/safelist.d.ts +1 -0
  690. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +87 -16
  691. package/dist/types/src/components/GrImageViewer/composables/usePointerGestures.d.ts +37 -0
  692. package/dist/types/src/components/GrImageViewer/composables/useViewerKeyboard.d.ts +7 -4
  693. package/dist/types/src/components/GrImageViewer/composables/useWheelGesture.d.ts +3 -2
  694. package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +18 -5
  695. package/dist/types/src/components/GrImageViewer/config.d.ts +1 -1
  696. package/dist/types/src/components/GrImageViewer/grImageViewerStyles.d.ts +21 -0
  697. package/dist/types/src/components/GrImageViewer/index.d.ts +7 -0
  698. package/dist/types/src/components/GrImageViewer/safelist.d.ts +1 -0
  699. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +66 -21
  700. package/dist/types/src/components/GrInput/config.d.ts +1 -1
  701. package/dist/types/src/components/GrInput/defaults.d.ts +1 -1
  702. package/dist/types/src/components/GrInput/grInputStyles.d.ts +53 -7
  703. package/dist/types/src/components/GrInput/index.d.ts +5 -0
  704. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +97 -14
  705. package/dist/types/src/components/GrInputTag/config.d.ts +1 -1
  706. package/dist/types/src/components/GrInputTag/defaults.d.ts +17 -0
  707. package/dist/types/src/components/GrInputTag/grInputTagStyles.d.ts +24 -1
  708. package/dist/types/src/components/GrInputTag/index.d.ts +5 -0
  709. package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +46 -10
  710. package/dist/types/src/components/GrKbd/config.d.ts +1 -1
  711. package/dist/types/src/components/GrKbd/defaults.d.ts +14 -0
  712. package/dist/types/src/components/GrKbd/grKbdStyles.d.ts +32 -0
  713. package/dist/types/src/components/GrKbd/index.d.ts +10 -1
  714. package/dist/types/src/components/GrKbd/safelist.d.ts +1 -0
  715. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +23 -10
  716. package/dist/types/src/components/GrLink/config.d.ts +1 -1
  717. package/dist/types/src/components/GrLink/defaults.d.ts +14 -0
  718. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +11 -13
  719. package/dist/types/src/components/GrLink/index.d.ts +2 -0
  720. package/dist/types/src/components/GrList/GrList.vue.d.ts +57 -32
  721. package/dist/types/src/components/GrList/GrListItem.vue.d.ts +42 -9
  722. package/dist/types/src/components/GrList/config.d.ts +1 -1
  723. package/dist/types/src/components/GrList/grListStyles.d.ts +25 -0
  724. package/dist/types/src/components/GrList/index.d.ts +5 -0
  725. package/dist/types/src/components/GrList/safelist.d.ts +1 -0
  726. package/dist/types/src/components/GrLoading/GrLoading.vue.d.ts +59 -19
  727. package/dist/types/src/components/GrLoading/config.d.ts +1 -1
  728. package/dist/types/src/components/GrLoading/grLoadingStyles.d.ts +10 -2
  729. package/dist/types/src/components/GrLoading/index.d.ts +1 -0
  730. package/dist/types/src/components/GrModal/GrModal.vue.d.ts +58 -12
  731. package/dist/types/src/components/GrModal/config.d.ts +1 -1
  732. package/dist/types/src/components/GrModal/context.d.ts +37 -0
  733. package/dist/types/src/components/GrModal/defaults.d.ts +14 -0
  734. package/dist/types/src/components/GrModal/grModalStyles.d.ts +25 -10
  735. package/dist/types/src/components/GrModal/index.d.ts +6 -3
  736. package/dist/types/src/components/GrNavbar/GrNavbar.vue.d.ts +28 -9
  737. package/dist/types/src/components/GrNavbar/config.d.ts +1 -1
  738. package/dist/types/src/components/GrNavbar/grNavbarStyles.d.ts +23 -0
  739. package/dist/types/src/components/GrNavbar/index.d.ts +2 -0
  740. package/dist/types/src/components/GrNavbar/safelist.d.ts +1 -0
  741. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +64 -17
  742. package/dist/types/src/components/GrNumberInput/config.d.ts +1 -1
  743. package/dist/types/src/components/GrNumberInput/defaults.d.ts +2 -1
  744. package/dist/types/src/components/GrNumberInput/grNumberInputStyles.d.ts +20 -4
  745. package/dist/types/src/components/GrNumberInput/index.d.ts +4 -0
  746. package/dist/types/src/components/GrNumberInput/numberInputMath.d.ts +17 -0
  747. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +47 -1
  748. package/dist/types/src/components/GrPagination/config.d.ts +1 -1
  749. package/dist/types/src/components/GrPagination/defaults.d.ts +10 -0
  750. package/dist/types/src/components/GrPagination/grPaginationStyles.d.ts +19 -0
  751. package/dist/types/src/components/GrPagination/index.d.ts +4 -0
  752. package/dist/types/src/components/GrPagination/safelist.d.ts +1 -0
  753. package/dist/types/src/components/GrPopover/GrPopover.vue.d.ts +161 -0
  754. package/dist/types/src/components/GrPopover/config.d.ts +1 -0
  755. package/dist/types/src/components/GrPopover/defaults.d.ts +15 -0
  756. package/dist/types/src/components/GrPopover/grPopoverStyles.d.ts +28 -0
  757. package/dist/types/src/components/GrPopover/index.d.ts +11 -0
  758. package/dist/types/src/components/GrPopover/safelist.d.ts +1 -0
  759. package/dist/types/src/components/GrProgressBar/GrProgressBar.vue.d.ts +37 -5
  760. package/dist/types/src/components/GrProgressBar/config.d.ts +1 -1
  761. package/dist/types/src/components/GrProgressBar/defaults.d.ts +11 -0
  762. package/dist/types/src/components/GrProgressBar/grStyle.d.ts +14 -0
  763. package/dist/types/src/components/GrProgressBar/index.d.ts +2 -1
  764. package/dist/types/src/components/GrProgressBar/safelist.d.ts +4 -0
  765. package/dist/types/src/components/GrProgressCircle/GrProgressCircle.vue.d.ts +103 -0
  766. package/dist/types/src/components/GrProgressCircle/config.d.ts +1 -0
  767. package/dist/types/src/components/GrProgressCircle/defaults.d.ts +18 -0
  768. package/dist/types/src/components/GrProgressCircle/geometry.d.ts +29 -0
  769. package/dist/types/src/components/GrProgressCircle/grProgressCircleStyles.d.ts +34 -0
  770. package/dist/types/src/components/GrProgressCircle/index.d.ts +11 -0
  771. package/dist/types/src/components/GrProgressCircle/safelist.d.ts +1 -0
  772. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +78 -10
  773. package/dist/types/src/components/GrPromptDialog/config.d.ts +1 -1
  774. package/dist/types/src/components/GrPromptDialog/defaults.d.ts +14 -0
  775. package/dist/types/src/components/GrPromptDialog/index.d.ts +1 -0
  776. package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +28 -9
  777. package/dist/types/src/components/GrRadio/config.d.ts +1 -1
  778. package/dist/types/src/components/GrRadio/defaults.d.ts +1 -1
  779. package/dist/types/src/components/GrRadio/grRadioGroupContext.d.ts +45 -2
  780. package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +49 -6
  781. package/dist/types/src/components/GrRadio/index.d.ts +1 -0
  782. package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +54 -10
  783. package/dist/types/src/components/GrRadioGroup/config.d.ts +1 -1
  784. package/dist/types/src/components/GrRadioGroup/defaults.d.ts +1 -1
  785. package/dist/types/src/components/GrRadioGroup/index.d.ts +4 -0
  786. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +66 -17
  787. package/dist/types/src/components/GrRating/config.d.ts +1 -1
  788. package/dist/types/src/components/GrRating/defaults.d.ts +1 -1
  789. package/dist/types/src/components/GrRating/grRatingStyles.d.ts +4 -1
  790. package/dist/types/src/components/GrRating/index.d.ts +4 -0
  791. package/dist/types/src/components/GrResponseErrorBanner/GrFormErrorBanner.vue.d.ts +8 -4
  792. package/dist/types/src/components/GrResponseErrorBanner/GrResponseErrorBanner.vue.d.ts +8 -4
  793. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +11 -4
  794. package/dist/types/src/components/GrResponseErrorBanner/config.d.ts +1 -1
  795. package/dist/types/src/components/GrResponseErrorBanner/index.d.ts +6 -0
  796. package/dist/types/src/components/GrResponseErrorBanner/parsers/httpStatusParser.d.ts +3 -1
  797. package/dist/types/src/components/GrResponseErrorBanner/parsers/plainMessageParser.d.ts +4 -1
  798. package/dist/types/src/components/GrResponseErrorBanner/responseError.types.d.ts +12 -2
  799. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +48 -9
  800. package/dist/types/src/components/GrSegmented/config.d.ts +1 -1
  801. package/dist/types/src/components/GrSegmented/defaults.d.ts +1 -1
  802. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +31 -5
  803. package/dist/types/src/components/GrSegmented/index.d.ts +5 -1
  804. package/dist/types/src/components/GrSegmented/safelist.d.ts +3 -1
  805. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +138 -114
  806. package/dist/types/src/components/GrSelect/composables/useSelectNavigation.d.ts +52 -0
  807. package/dist/types/src/components/GrSelect/composables/useSelectPanelItems.d.ts +67 -0
  808. package/dist/types/src/components/GrSelect/composables/useSelectValues.d.ts +37 -0
  809. package/dist/types/src/components/GrSelect/composables/useSelectVirtualization.d.ts +27 -0
  810. package/dist/types/src/components/GrSelect/config.d.ts +1 -1
  811. package/dist/types/src/components/GrSelect/defaults.d.ts +1 -1
  812. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +64 -9
  813. package/dist/types/src/components/GrSelect/index.d.ts +5 -1
  814. package/dist/types/src/components/GrSelect/selectValue.d.ts +20 -0
  815. package/dist/types/src/components/GrSidebar/GrSidebar.vue.d.ts +30 -5
  816. package/dist/types/src/components/GrSidebar/GrSidebarGroup.vue.d.ts +43 -0
  817. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +4 -4
  818. package/dist/types/src/components/GrSidebar/config.d.ts +1 -1
  819. package/dist/types/src/components/GrSidebar/grSidebarStyles.d.ts +48 -0
  820. package/dist/types/src/components/GrSidebar/index.d.ts +6 -0
  821. package/dist/types/src/components/GrSidebar/safelist.d.ts +1 -0
  822. package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +22 -6
  823. package/dist/types/src/components/GrSkeleton/config.d.ts +1 -1
  824. package/dist/types/src/components/GrSkeleton/grSkeletonStyles.d.ts +9 -0
  825. package/dist/types/src/components/GrSkeleton/index.d.ts +1 -0
  826. package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +54 -4
  827. package/dist/types/src/components/GrSlider/config.d.ts +1 -1
  828. package/dist/types/src/components/GrSlider/defaults.d.ts +1 -1
  829. package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +47 -8
  830. package/dist/types/src/components/GrSlider/index.d.ts +4 -0
  831. package/dist/types/src/components/GrSortableList/GrSortableList.vue.d.ts +68 -0
  832. package/dist/types/src/components/GrSortableList/config.d.ts +1 -0
  833. package/dist/types/src/components/GrSortableList/grSortableListStyles.d.ts +38 -0
  834. package/dist/types/src/components/GrSortableList/index.d.ts +9 -0
  835. package/dist/types/src/components/GrSortableList/safelist.d.ts +1 -0
  836. package/dist/types/src/components/GrSplitter/GrSplitter.vue.d.ts +121 -0
  837. package/dist/types/src/components/GrSplitter/config.d.ts +1 -0
  838. package/dist/types/src/components/GrSplitter/defaults.d.ts +16 -0
  839. package/dist/types/src/components/GrSplitter/grSplitterStyles.d.ts +9 -0
  840. package/dist/types/src/components/GrSplitter/index.d.ts +11 -0
  841. package/dist/types/src/components/GrSplitter/safelist.d.ts +1 -0
  842. package/dist/types/src/components/GrSplitter/splitterGeometry.d.ts +39 -0
  843. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +65 -16
  844. package/dist/types/src/components/GrStatistic/config.d.ts +1 -1
  845. package/dist/types/src/components/GrStatistic/countUp.d.ts +17 -0
  846. package/dist/types/src/components/GrStatistic/defaults.d.ts +14 -0
  847. package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +6 -2
  848. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +14 -1
  849. package/dist/types/src/components/GrStatistic/index.d.ts +2 -1
  850. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +68 -6
  851. package/dist/types/src/components/GrSwitch/config.d.ts +1 -1
  852. package/dist/types/src/components/GrSwitch/defaults.d.ts +1 -1
  853. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +45 -4
  854. package/dist/types/src/components/GrSwitch/index.d.ts +5 -1
  855. package/dist/types/src/components/GrSwitch/safelist.d.ts +4 -1
  856. package/dist/types/src/components/GrTabPanels/GrTabPanel.vue.d.ts +12 -9
  857. package/dist/types/src/components/GrTabPanels/GrTabPanels.vue.d.ts +4 -14
  858. package/dist/types/src/components/GrTabPanels/config.d.ts +1 -1
  859. package/dist/types/src/components/GrTabPanels/context.d.ts +1 -1
  860. package/dist/types/src/components/GrTabPanels/index.d.ts +2 -0
  861. package/dist/types/src/components/GrTable/GrTable.vue.d.ts +98 -15
  862. package/dist/types/src/components/GrTable/config.d.ts +1 -1
  863. package/dist/types/src/components/GrTable/defaults.d.ts +10 -0
  864. package/dist/types/src/components/GrTable/grTableStyles.d.ts +20 -0
  865. package/dist/types/src/components/GrTable/index.d.ts +7 -1
  866. package/dist/types/src/components/GrTable/safelist.d.ts +1 -0
  867. package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +92 -6
  868. package/dist/types/src/components/GrTabs/config.d.ts +1 -1
  869. package/dist/types/src/components/GrTabs/defaults.d.ts +12 -0
  870. package/dist/types/src/components/GrTabs/grTabsStyles.d.ts +71 -0
  871. package/dist/types/src/components/GrTabs/index.d.ts +5 -0
  872. package/dist/types/src/components/GrTabs/safelist.d.ts +1 -0
  873. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +89 -24
  874. package/dist/types/src/components/GrTextarea/config.d.ts +1 -1
  875. package/dist/types/src/components/GrTextarea/defaults.d.ts +18 -0
  876. package/dist/types/src/components/GrTextarea/grTextareaStyles.d.ts +33 -1
  877. package/dist/types/src/components/GrTextarea/index.d.ts +6 -1
  878. package/dist/types/src/components/GrTimeline/GrTimeline.vue.d.ts +70 -0
  879. package/dist/types/src/components/GrTimeline/GrTimelineItem.vue.d.ts +84 -0
  880. package/dist/types/src/components/GrTimeline/config.d.ts +1 -0
  881. package/dist/types/src/components/GrTimeline/defaults.d.ts +19 -0
  882. package/dist/types/src/components/GrTimeline/grTimelineContext.d.ts +18 -0
  883. package/dist/types/src/components/GrTimeline/grTimelineStyles.d.ts +37 -0
  884. package/dist/types/src/components/GrTimeline/index.d.ts +12 -0
  885. package/dist/types/src/components/GrTimeline/safelist.d.ts +1 -0
  886. package/dist/types/src/components/GrTimeline/timelineGroups.d.ts +23 -0
  887. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +33 -1
  888. package/dist/types/src/components/GrToaster/config.d.ts +1 -1
  889. package/dist/types/src/components/GrToaster/grToasterStyles.d.ts +27 -0
  890. package/dist/types/src/components/GrToaster/index.d.ts +3 -0
  891. package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +57 -6
  892. package/dist/types/src/components/GrTooltip/config.d.ts +1 -1
  893. package/dist/types/src/components/GrTooltip/defaults.d.ts +10 -0
  894. package/dist/types/src/components/GrTooltip/grTooltipStyles.d.ts +8 -0
  895. package/dist/types/src/components/GrTooltip/index.d.ts +5 -1
  896. package/dist/types/src/components/GrTooltip/safelist.d.ts +1 -0
  897. package/dist/types/src/components/GrTree/GrTree.vue.d.ts +20 -7
  898. package/dist/types/src/components/GrTree/config.d.ts +1 -1
  899. package/dist/types/src/components/GrTree/defaults.d.ts +10 -0
  900. package/dist/types/src/components/GrTree/grTreeChecking.d.ts +31 -0
  901. package/dist/types/src/components/GrTree/grTreeDataAdapter.d.ts +2 -0
  902. package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +9 -1
  903. package/dist/types/src/components/GrTree/grTreeProps.d.ts +60 -11
  904. package/dist/types/src/components/GrTree/grTreeStore.d.ts +27 -1
  905. package/dist/types/src/components/GrTree/grTreeStyles.d.ts +22 -0
  906. package/dist/types/src/components/GrTree/grTreeTypes.d.ts +15 -0
  907. package/dist/types/src/components/GrTree/index.d.ts +5 -1
  908. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +30 -9
  909. package/dist/types/src/components/GrTreeSelect/config.d.ts +1 -1
  910. package/dist/types/src/components/GrTreeSelect/defaults.d.ts +10 -0
  911. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +29 -1
  912. package/dist/types/src/components/GrTreeSelect/grTreeSelectTypes.d.ts +43 -0
  913. package/dist/types/src/components/GrTreeSelect/index.d.ts +5 -0
  914. package/dist/types/src/components/shared/hotkey.d.ts +38 -0
  915. package/dist/types/src/components/shared/hotkeyTokens.d.ts +37 -0
  916. package/dist/types/src/components/shared/instance.d.ts +15 -0
  917. package/dist/types/src/components/shared/optionFilter.d.ts +61 -0
  918. package/dist/types/src/components/shared/sizes.d.ts +30 -0
  919. package/dist/types/src/components/shared/slotNodes.d.ts +19 -0
  920. package/dist/types/src/composables/internal/dragSortGeometry.d.ts +59 -0
  921. package/dist/types/src/composables/internal/focusables.d.ts +30 -0
  922. package/dist/types/src/composables/internal/inert.d.ts +35 -0
  923. package/dist/types/src/composables/internal/overlayStack.d.ts +71 -0
  924. package/dist/types/src/composables/internal/portalRoot.d.ts +27 -0
  925. package/dist/types/src/composables/internal/useAddonMeasurement.d.ts +1 -1
  926. package/dist/types/src/composables/internal/useControlAddons.d.ts +61 -0
  927. package/dist/types/src/composables/internal/useControlledOpen.d.ts +14 -0
  928. package/dist/types/src/composables/internal/useFilePreviews.d.ts +26 -0
  929. package/dist/types/src/composables/internal/useFocusWithin.d.ts +32 -0
  930. package/dist/types/src/composables/internal/useInertOthers.d.ts +9 -0
  931. package/dist/types/src/composables/internal/useModalOverlay.d.ts +95 -0
  932. package/dist/types/src/composables/internal/useOverlayPresence.d.ts +24 -0
  933. package/dist/types/src/composables/internal/useScrollLock.d.ts +10 -5
  934. package/dist/types/src/composables/internal/useTeleportEnabled.d.ts +35 -0
  935. package/dist/types/src/composables/useAnnouncer.d.ts +44 -0
  936. package/dist/types/src/composables/useComboboxNavigation.d.ts +51 -0
  937. package/dist/types/src/composables/useDismissible.d.ts +32 -0
  938. package/dist/types/src/composables/useDragGesture.d.ts +63 -0
  939. package/dist/types/src/composables/useDragSort.d.ts +80 -0
  940. package/dist/types/src/composables/useFloating.d.ts +57 -0
  941. package/dist/types/src/composables/useFocusTrap.d.ts +50 -0
  942. package/dist/types/src/composables/useGrComponentConfig.d.ts +41 -0
  943. package/dist/types/src/composables/useGrFormControl.d.ts +52 -0
  944. package/dist/types/src/composables/useGranularityTranslations.d.ts +13 -0
  945. package/dist/types/src/composables/useOverlayLayer.d.ts +67 -0
  946. package/dist/types/src/composables/usePortalTarget.d.ts +28 -0
  947. package/dist/types/src/composables/useRovingFocus.d.ts +108 -0
  948. package/dist/types/src/composables/useTheme.d.ts +48 -2
  949. package/dist/types/src/composables/useToast.d.ts +20 -11
  950. package/dist/types/src/composables/useVirtualList.d.ts +119 -0
  951. package/dist/types/src/directives/loading.d.ts +7 -1
  952. package/dist/types/src/fileValidation/i18n.d.ts +24 -0
  953. package/dist/types/src/fileValidation/index.d.ts +4 -2
  954. package/dist/types/src/fileValidation/maxCountValidator.d.ts +9 -0
  955. package/dist/types/src/fileValidation/maxFileSize.d.ts +16 -0
  956. package/dist/types/src/fileValidation/types.d.ts +8 -2
  957. package/dist/types/src/granular-provider/index.d.ts +1 -1
  958. package/dist/types/src/granular-provider/node.d.ts +2 -3
  959. package/dist/types/src/granular-provider/shared.d.ts +14 -18
  960. package/dist/types/src/i18n/adapter.d.ts +24 -0
  961. package/dist/types/src/i18n/messages/en.d.ts +334 -2
  962. package/dist/types/src/i18n/messages/es.d.ts +338 -2
  963. package/dist/types/src/i18n/messages/ru.d.ts +342 -2
  964. package/dist/types/src/index.d.ts +38 -3
  965. package/dist/types/src/internal/granularityFormat.d.ts +19 -0
  966. package/dist/types/src/internal/granularityI18n.d.ts +6 -0
  967. package/dist/types/src/internal/keyboard.d.ts +52 -0
  968. package/dist/types/src/tokens/generated.d.ts +6 -0
  969. package/dist/types/src/tokens/index.d.ts +13 -0
  970. package/dist/types/src/tokens/types.d.ts +54 -0
  971. package/dist/vue/index.js.map +1 -1
  972. package/dist/web-types.json +6503 -2020
  973. package/package.json +118 -17
  974. package/tokens/derived.json +142 -0
  975. package/tokens/foundation.json +558 -0
  976. package/tokens/themes/dark.json +499 -0
  977. package/tokens/themes/light.json +499 -0
  978. package/dist/GrBadge.css +0 -1
  979. package/dist/GrButtonGroup.css +0 -1
  980. package/dist/GrFormFile.css +0 -1
  981. package/dist/GrIcon.css +0 -1
  982. package/dist/GrLoading.css +0 -1
  983. package/dist/GrToaster.css +0 -1
  984. package/dist/GrTree.css +0 -1
  985. package/dist/chunks/config-23WtUiAL.js +0 -53
  986. package/dist/chunks/config-23WtUiAL.js.map +0 -1
  987. package/dist/chunks/config-B0i5r8kH.js +0 -23
  988. package/dist/chunks/config-B0i5r8kH.js.map +0 -1
  989. package/dist/chunks/config-B0qIpo8m.js +0 -5
  990. package/dist/chunks/config-B0qIpo8m.js.map +0 -1
  991. package/dist/chunks/config-B5Rknzkd.js +0 -100
  992. package/dist/chunks/config-B5Rknzkd.js.map +0 -1
  993. package/dist/chunks/config-BDSHekVC.js +0 -84
  994. package/dist/chunks/config-BDSHekVC.js.map +0 -1
  995. package/dist/chunks/config-BEegFP74.js +0 -5
  996. package/dist/chunks/config-BEegFP74.js.map +0 -1
  997. package/dist/chunks/config-BLHqZhy-.js +0 -5
  998. package/dist/chunks/config-BLHqZhy-.js.map +0 -1
  999. package/dist/chunks/config-BMKNHFMD2.js +0 -171
  1000. package/dist/chunks/config-BMKNHFMD2.js.map +0 -1
  1001. package/dist/chunks/config-BUHuGBik2.js +0 -13
  1002. package/dist/chunks/config-BUHuGBik2.js.map +0 -1
  1003. package/dist/chunks/config-BWGGp7uV.js +0 -8
  1004. package/dist/chunks/config-BWGGp7uV.js.map +0 -1
  1005. package/dist/chunks/config-BWiPnygb.js +0 -5
  1006. package/dist/chunks/config-BWiPnygb.js.map +0 -1
  1007. package/dist/chunks/config-BX1JTrkV.js +0 -14
  1008. package/dist/chunks/config-BX1JTrkV.js.map +0 -1
  1009. package/dist/chunks/config-BXtAmU3s.js +0 -8
  1010. package/dist/chunks/config-BXtAmU3s.js.map +0 -1
  1011. package/dist/chunks/config-BZFUM3Ky.js +0 -75
  1012. package/dist/chunks/config-BZFUM3Ky.js.map +0 -1
  1013. package/dist/chunks/config-Bah4oHwL.js +0 -8
  1014. package/dist/chunks/config-Bah4oHwL.js.map +0 -1
  1015. package/dist/chunks/config-BmNT0Fmx.js +0 -45
  1016. package/dist/chunks/config-BmNT0Fmx.js.map +0 -1
  1017. package/dist/chunks/config-BvVq2gbd.js +0 -13
  1018. package/dist/chunks/config-BvVq2gbd.js.map +0 -1
  1019. package/dist/chunks/config-C4hJxXDa.js +0 -58
  1020. package/dist/chunks/config-C4hJxXDa.js.map +0 -1
  1021. package/dist/chunks/config-C86UzUYf.js +0 -13
  1022. package/dist/chunks/config-C86UzUYf.js.map +0 -1
  1023. package/dist/chunks/config-C9AcVDkv.js +0 -5
  1024. package/dist/chunks/config-C9AcVDkv.js.map +0 -1
  1025. package/dist/chunks/config-CB4RVt9M.js +0 -66
  1026. package/dist/chunks/config-CB4RVt9M.js.map +0 -1
  1027. package/dist/chunks/config-CGHLoBlH2.js +0 -5
  1028. package/dist/chunks/config-CGHLoBlH2.js.map +0 -1
  1029. package/dist/chunks/config-COE_vZ-l.js +0 -52
  1030. package/dist/chunks/config-COE_vZ-l.js.map +0 -1
  1031. package/dist/chunks/config-CPdmr7tC.js +0 -39
  1032. package/dist/chunks/config-CPdmr7tC.js.map +0 -1
  1033. package/dist/chunks/config-CThzliFi.js +0 -5
  1034. package/dist/chunks/config-CThzliFi.js.map +0 -1
  1035. package/dist/chunks/config-Cb2PAlSD.js +0 -8
  1036. package/dist/chunks/config-Cb2PAlSD.js.map +0 -1
  1037. package/dist/chunks/config-D7GZO-Dx.js +0 -8
  1038. package/dist/chunks/config-D7GZO-Dx.js.map +0 -1
  1039. package/dist/chunks/config-DICOd-2X.js +0 -5
  1040. package/dist/chunks/config-DICOd-2X.js.map +0 -1
  1041. package/dist/chunks/config-DPDFYzIa.js +0 -40
  1042. package/dist/chunks/config-DPDFYzIa.js.map +0 -1
  1043. package/dist/chunks/config-DRKXJ9PW2.js +0 -22
  1044. package/dist/chunks/config-DRKXJ9PW2.js.map +0 -1
  1045. package/dist/chunks/config-DToHb81g.js +0 -45
  1046. package/dist/chunks/config-DToHb81g.js.map +0 -1
  1047. package/dist/chunks/config-D_myOZbA.js +0 -20
  1048. package/dist/chunks/config-D_myOZbA.js.map +0 -1
  1049. package/dist/chunks/config-Dg_6FTvJ.js +0 -35
  1050. package/dist/chunks/config-Dg_6FTvJ.js.map +0 -1
  1051. package/dist/chunks/config-Dlm49Jp5.js +0 -5
  1052. package/dist/chunks/config-Dlm49Jp5.js.map +0 -1
  1053. package/dist/chunks/config-DpqOnJiz.js.map +0 -1
  1054. package/dist/chunks/config-Dqy0rPPO2.js +0 -17
  1055. package/dist/chunks/config-Dqy0rPPO2.js.map +0 -1
  1056. package/dist/chunks/config-Dxuwwepq.js +0 -5
  1057. package/dist/chunks/config-Dxuwwepq.js.map +0 -1
  1058. package/dist/chunks/config-HZto2PVy.js +0 -5
  1059. package/dist/chunks/config-HZto2PVy.js.map +0 -1
  1060. package/dist/chunks/config-JOtB4mzs.js +0 -8
  1061. package/dist/chunks/config-JOtB4mzs.js.map +0 -1
  1062. package/dist/chunks/config-JpHA4Xx0.js +0 -8
  1063. package/dist/chunks/config-JpHA4Xx0.js.map +0 -1
  1064. package/dist/chunks/config-KXuionN3.js +0 -9
  1065. package/dist/chunks/config-KXuionN3.js.map +0 -1
  1066. package/dist/chunks/config-LGrZIdaZ.js +0 -21
  1067. package/dist/chunks/config-LGrZIdaZ.js.map +0 -1
  1068. package/dist/chunks/config-LqDC_rvp.js +0 -78
  1069. package/dist/chunks/config-LqDC_rvp.js.map +0 -1
  1070. package/dist/chunks/config-PFg39mYo.js +0 -5
  1071. package/dist/chunks/config-PFg39mYo.js.map +0 -1
  1072. package/dist/chunks/config-QYGvEBu5.js +0 -22
  1073. package/dist/chunks/config-QYGvEBu5.js.map +0 -1
  1074. package/dist/chunks/config-QaIc_gRa2.js.map +0 -1
  1075. package/dist/chunks/config-U4m9PSql2.js +0 -8
  1076. package/dist/chunks/config-U4m9PSql2.js.map +0 -1
  1077. package/dist/chunks/config-XmTv4pnI.js +0 -26
  1078. package/dist/chunks/config-XmTv4pnI.js.map +0 -1
  1079. package/dist/chunks/config-ZiXWIRBX.js +0 -8
  1080. package/dist/chunks/config-ZiXWIRBX.js.map +0 -1
  1081. package/dist/chunks/config-gZWR75Bh2.js +0 -44
  1082. package/dist/chunks/config-gZWR75Bh2.js.map +0 -1
  1083. package/dist/chunks/config-ipvU0lzP.js +0 -5
  1084. package/dist/chunks/config-ipvU0lzP.js.map +0 -1
  1085. package/dist/chunks/config-xR4XVmcy2.js +0 -8
  1086. package/dist/chunks/config-xR4XVmcy2.js.map +0 -1
  1087. package/dist/chunks/context-DfWYCBB-.js +0 -129
  1088. package/dist/chunks/context-DfWYCBB-.js.map +0 -1
  1089. package/dist/chunks/en-Cr6EkG8c.js +0 -186
  1090. package/dist/chunks/en-Cr6EkG8c.js.map +0 -1
  1091. package/dist/chunks/es-DuYb1Qju.js +0 -20
  1092. package/dist/chunks/es-DuYb1Qju.js.map +0 -1
  1093. package/dist/chunks/es-i08e9Sdo.js +0 -186
  1094. package/dist/chunks/es-i08e9Sdo.js.map +0 -1
  1095. package/dist/chunks/fileValidation-C3WFaWU2.js +0 -220
  1096. package/dist/chunks/fileValidation-C3WFaWU2.js.map +0 -1
  1097. package/dist/chunks/grBadgeStyles-D3dFjr_N.js +0 -50
  1098. package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +0 -1
  1099. package/dist/chunks/grButtonStyles-DRBgDmOp.js +0 -191
  1100. package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +0 -1
  1101. package/dist/chunks/grDropdownStyles-HBPkghVr.js +0 -35
  1102. package/dist/chunks/grDropdownStyles-HBPkghVr.js.map +0 -1
  1103. package/dist/chunks/grLoadingStyles-R5sreH__.js +0 -17
  1104. package/dist/chunks/grLoadingStyles-R5sreH__.js.map +0 -1
  1105. package/dist/chunks/grModalEscStack-BXk-9mv7.js +0 -43
  1106. package/dist/chunks/grModalEscStack-BXk-9mv7.js.map +0 -1
  1107. package/dist/chunks/grModalStyles-D8-shx9A.js +0 -47
  1108. package/dist/chunks/grModalStyles-D8-shx9A.js.map +0 -1
  1109. package/dist/chunks/grSelectStyles-CwMUQrBZ.js +0 -97
  1110. package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +0 -1
  1111. package/dist/chunks/grStyle-CdvxTXPH.js +0 -19
  1112. package/dist/chunks/grStyle-CdvxTXPH.js.map +0 -1
  1113. package/dist/chunks/granularityI18n-SH0I--GW.js +0 -61
  1114. package/dist/chunks/granularityI18n-SH0I--GW.js.map +0 -1
  1115. package/dist/chunks/ru-B5XOOYZt.js +0 -186
  1116. package/dist/chunks/ru-B5XOOYZt.js.map +0 -1
  1117. package/dist/chunks/safelist-BvO8HPnE.js +0 -24
  1118. package/dist/chunks/safelist-BvO8HPnE.js.map +0 -1
  1119. package/dist/chunks/shared-D-v9lit0.js +0 -188
  1120. package/dist/chunks/shared-D-v9lit0.js.map +0 -1
  1121. package/dist/chunks/useAddonMeasurement-DM0akF4C.js +0 -65
  1122. package/dist/chunks/useAddonMeasurement-DM0akF4C.js.map +0 -1
  1123. package/dist/chunks/useEscapeToClose-C2t_S1gh.js +0 -27
  1124. package/dist/chunks/useEscapeToClose-C2t_S1gh.js.map +0 -1
  1125. package/dist/chunks/useFloating-DtM6TyE4.js +0 -1249
  1126. package/dist/chunks/useFloating-DtM6TyE4.js.map +0 -1
  1127. package/dist/chunks/useScrollLock-K7kaP2Ud.js +0 -1757
  1128. package/dist/chunks/useScrollLock-K7kaP2Ud.js.map +0 -1
  1129. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +0 -251
  1130. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +0 -1
  1131. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +0 -499
  1132. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +0 -1
  1133. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js +0 -41
  1134. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +0 -1
  1135. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js +0 -40
  1136. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +0 -1
  1137. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js +0 -33
  1138. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +0 -1
  1139. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js +0 -31
  1140. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +0 -1
  1141. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js +0 -128
  1142. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +0 -1
  1143. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js +0 -21
  1144. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js.map +0 -1
  1145. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js +0 -11
  1146. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +0 -1
  1147. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js +0 -182
  1148. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +0 -1
  1149. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js +0 -205
  1150. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +0 -1
  1151. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +0 -410
  1152. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +0 -1
  1153. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +0 -57
  1154. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +0 -1
  1155. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js +0 -160
  1156. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +0 -1
  1157. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js +0 -307
  1158. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +0 -1
  1159. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js +0 -223
  1160. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +0 -1
  1161. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js +0 -450
  1162. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +0 -1
  1163. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js +0 -54
  1164. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +0 -1
  1165. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js +0 -184
  1166. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +0 -1
  1167. package/dist/components/GrDropdown/chunks/GrDropdown-BKoy8hm-.js +0 -181
  1168. package/dist/components/GrDropdown/chunks/GrDropdown-BKoy8hm-.js.map +0 -1
  1169. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js +0 -309
  1170. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +0 -1
  1171. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js +0 -62
  1172. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +0 -1
  1173. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js +0 -592
  1174. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +0 -1
  1175. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +0 -234
  1176. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +0 -1
  1177. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js +0 -100
  1178. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +0 -1
  1179. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js +0 -320
  1180. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +0 -1
  1181. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js +0 -35
  1182. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +0 -1
  1183. package/dist/components/GrIcon/chunks/GrIcon-D9AWQLk2.js +0 -32
  1184. package/dist/components/GrIcon/chunks/GrIcon-D9AWQLk2.js.map +0 -1
  1185. package/dist/components/GrImageViewer/chunks/GrImageViewer-DDLJkvIU.js +0 -650
  1186. package/dist/components/GrImageViewer/chunks/GrImageViewer-DDLJkvIU.js.map +0 -1
  1187. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js +0 -337
  1188. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +0 -1
  1189. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js +0 -260
  1190. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +0 -1
  1191. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js +0 -22
  1192. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +0 -1
  1193. package/dist/components/GrLink/chunks/GrLink-BP0YrnL9.js +0 -100
  1194. package/dist/components/GrLink/chunks/GrLink-BP0YrnL9.js.map +0 -1
  1195. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js +0 -77
  1196. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +0 -1
  1197. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js +0 -69
  1198. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +0 -1
  1199. package/dist/components/GrModal/chunks/GrModal-BTu1-5eY.js +0 -233
  1200. package/dist/components/GrModal/chunks/GrModal-BTu1-5eY.js.map +0 -1
  1201. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js +0 -75
  1202. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +0 -1
  1203. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js +0 -471
  1204. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +0 -1
  1205. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js +0 -208
  1206. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +0 -1
  1207. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js +0 -39
  1208. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +0 -1
  1209. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js +0 -224
  1210. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +0 -1
  1211. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js +0 -182
  1212. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +0 -1
  1213. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js +0 -82
  1214. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +0 -1
  1215. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +0 -241
  1216. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +0 -1
  1217. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-2CvM7Z08.js +0 -224
  1218. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-2CvM7Z08.js.map +0 -1
  1219. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js +0 -782
  1220. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js.map +0 -1
  1221. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js +0 -326
  1222. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +0 -1
  1223. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js +0 -730
  1224. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +0 -1
  1225. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js +0 -238
  1226. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +0 -1
  1227. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js +0 -33
  1228. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +0 -1
  1229. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +0 -286
  1230. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +0 -1
  1231. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +0 -128
  1232. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +0 -1
  1233. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js +0 -88
  1234. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +0 -1
  1235. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js +0 -68
  1236. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js.map +0 -1
  1237. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js +0 -70
  1238. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +0 -1
  1239. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js +0 -123
  1240. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +0 -1
  1241. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js +0 -81
  1242. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +0 -1
  1243. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js +0 -230
  1244. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +0 -1
  1245. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js +0 -109
  1246. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +0 -1
  1247. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js +0 -838
  1248. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +0 -1
  1249. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js +0 -426
  1250. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +0 -1
  1251. package/dist/granular-provider-node.js.map +0 -1
  1252. package/dist/granular-provider.js.map +0 -1
  1253. package/dist/index.js.map +0 -1
  1254. package/dist/types/src/components/GrButton/config.node.d.ts +0 -1
  1255. package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +0 -23
  1256. package/dist/types/src/components/GrFileUpload/maxSizeMbValidator.d.ts +0 -1
  1257. package/dist/types/src/components/GrModal/grModalEscStack.d.ts +0 -30
  1258. package/dist/types/src/components/GrModal/grModalTopStack.d.ts +0 -31
  1259. package/dist/types/src/components/GrProgressBar/config.node.d.ts +0 -1
  1260. package/dist/types/src/composables/internal/useEscapeToClose.d.ts +0 -11
  1261. package/dist/types/src/composables/internal/useFloating.d.ts +0 -53
  1262. package/dist/types/src/fileValidation/maxFileSizeBytesValidator.d.ts +0 -2
  1263. package/dist/types/src/fileValidation/maxSizeMbValidator.d.ts +0 -2
  1264. /package/dist/chunks/{config-DpqOnJiz.js → config-DpqOnJiz2.js} +0 -0
  1265. /package/dist/chunks/{config-QaIc_gRa2.js → config-QaIc_gRa.js} +0 -0
  1266. /package/dist/{GrSkeleton.css → components/GrSkeleton/styles.css} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"GrSelect-Dn3FgJ3Z.js","names":[],"sources":["../../../../src/components/GrSelect/GrSelect.vue","../../../../src/components/GrSelect/GrSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, ref, useId, watch } from 'vue'\n\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\n\nimport GrInput from '../GrInput/GrInput.vue'\nimport { vClickOutside } from '../../directives'\nimport { useFloating } from '../../composables/internal/useFloating'\nimport { useEscapeToClose } from '../../composables/internal/useEscapeToClose'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { useGrFormFieldContext } from '../GrFormField/context'\n\nimport {\n defaultBaseClass,\n grSelectLinkNativeLabelClass,\n grSelectLinkNativeOverlayClass,\n grSelectNativeClass,\n grSelectPanelClasses,\n grSelectTriggerClass,\n linkBaseClass,\n type GrSelectModelValue,\n type GrSelectOption,\n type GrSelectOptionGroup,\n type GrSelectOptionOrGroup,\n type GrSelectOptionsView,\n type GrSelectSize,\n type GrSelectUnderline,\n type GrSelectVariant,\n type GrSelectView,\n} from './grSelectStyles'\n\nexport type {\n GrSelectModelValue,\n GrSelectOption,\n GrSelectOptionGroup,\n GrSelectOptionOrGroup,\n GrSelectOptionsView,\n GrSelectSize,\n GrSelectUnderline,\n GrSelectVariant,\n GrSelectView,\n} from './grSelectStyles'\n\n/**\n * Пропсы публичного GR-примитива «Select».\n */\nexport interface GrSelectProps {\n modelValue: GrSelectModelValue\n /** Список опций. Поддерживает плоский массив опций и группы опций (`{ label, options }`). */\n options?: GrSelectOptionOrGroup[]\n disabled?: boolean\n ariaLabel?: string\n view?: GrSelectView\n size?: GrSelectSize\n /** Placeholder (показывается, когда значение не выбрано). */\n placeholder?: string\n /** Multiple selection. */\n multiple?: boolean\n /** Как отображать список опций: нативный `<select>` или кастомная панель. */\n optionsView?: GrSelectOptionsView\n /** Разрешает ввод/выбор значения, которого нет в `options`. */\n allowCustomValue?: boolean\n /**\n * Поиск/фильтрация опций по вводу (независимо от `allowCustomValue`). Показывает\n * поле поиска над списком и фильтрует опции. Работает только в `optionsView=\"panel\"`\n * (при `native` панель форсится автоматически).\n */\n filterable?: boolean\n /** Placeholder поля поиска (`filterable`). i18n: fallback `gr.select.searchPlaceholder`. */\n filterPlaceholder?: string\n /**\n * Состояние загрузки: вместо списка опций панель показывает индикатор загрузки.\n * Полезно для удалённой подгрузки опций. Форсит `optionsView=\"panel\"`.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.select.loading`. */\n loadingText?: string\n /** Текст пустого результата фильтрации. i18n: fallback `gr.select.noResults`. */\n noResultsText?: string\n /**\n * Режим тегов для `multiple`: выбранные значения показываются как удаляемые\n * chips в триггере (вместо строки «a, b, c»). Форсит `optionsView=\"panel\"`.\n */\n tags?: boolean\n /** Placeholder для инпута кастомного значения (только в `optionsView=\"panel\"`). i18n-friendly: если не задан — берётся из адаптера перевода (`gr.select.customValuePlaceholder`), иначе — встроенный fallback. */\n customValuePlaceholder?: string\n /** Максимальная высота панели (только в `optionsView=\"panel\"`). */\n dropdownMaxHeight?: number\n /** Закрывать панель после выбора (только в `optionsView=\"panel\"`). */\n closeOnSelect?: boolean\n /** Разрешает очистку выбранного значения. */\n clearable?: boolean\n /** i18n-label для кнопки очистки (`aria-label`). */\n clearLabel?: string\n /**\n * Цвет/вариант ссылки для `view=\"link\"` (аналогично `GrLink`).\n * В `view=\"default\"` не используется.\n */\n variant?: GrSelectVariant\n /**\n * Подчёркивание для `view=\"link\"` (аналогично `GrLink`).\n * В `view=\"default\"` не используется.\n */\n underline?: GrSelectUnderline\n}\n\nconst props = withDefaults(\n defineProps<GrSelectProps>(),\n {\n options: undefined,\n disabled: false,\n ariaLabel: undefined,\n view: 'default',\n size: undefined,\n\n placeholder: undefined,\n multiple: false,\n\n optionsView: 'native',\n allowCustomValue: false,\n filterable: false,\n filterPlaceholder: undefined,\n loading: false,\n loadingText: undefined,\n noResultsText: undefined,\n tags: false,\n customValuePlaceholder: undefined,\n dropdownMaxHeight: 280,\n closeOnSelect: true,\n clearable: undefined,\n clearLabel: undefined,\n variant: undefined,\n underline: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrSelect' })\nconst resolvedVariant = useGrComponentProp('GrSelect', 'variant', () => props.variant, 'primary')\nconst resolvedUnderline = useGrComponentProp('GrSelect', 'underline', () => props.underline, 'auto')\nconst resolvedClearable = useGrComponentProp('GrSelect', 'clearable', () => props.clearable, false)\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedCustomValuePlaceholder = computed(() => {\n return props.customValuePlaceholder ?? t('gr.select.customValuePlaceholder', 'Add value…')\n})\n\nconst resolvedClearLabel = computed(() => props.clearLabel ?? t('gr.common.clear', 'Clear'))\nconst resolvedFilterPlaceholder = computed(() => props.filterPlaceholder ?? t('gr.select.searchPlaceholder', 'Search…'))\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.select.loading', 'Loading…'))\nconst resolvedNoResultsText = computed(() => props.noResultsText ?? t('gr.select.noResults', 'No results'))\n// В search-инпуте: при allowCustomValue — «Add value…», иначе (чистый filterable) — «Search…».\nconst resolvedSearchPlaceholder = computed(() =>\n props.allowCustomValue ? resolvedCustomValuePlaceholder.value : resolvedFilterPlaceholder.value,\n)\n\nconst baseClassName = computed(() => props.view === 'link' ? linkBaseClass : defaultBaseClass)\n\nconst rootClass = computed(() => props.view === 'link' ? 'relative inline-block align-baseline' : 'relative w-full')\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrSelectModelValue): void\n}>()\n\n// Fallback из контекста `GrFormField` (id/aria-describedby/invalid/required)\n// для связки с лейблом и сообщением об ошибке.\nconst field = useGrFormFieldContext()\nconst resolvedId = computed(() => field?.id.value)\nconst isInvalid = computed(() => Boolean(field?.invalid.value))\nconst describedBy = computed(() => field?.describedById.value)\nconst isRequired = computed(() => Boolean(field?.required.value))\n\nconst optionsResolved = computed<GrSelectOptionOrGroup[]>(() => props.options ?? [])\n\nfunction isOptionGroup(item: GrSelectOptionOrGroup): item is GrSelectOptionGroup {\n return Array.isArray((item as GrSelectOptionGroup).options)\n}\n\n/** Плоский список всех опций (группы «развёрнуты»). Используется для всех вычислений по значениям. */\nconst flatOptions = computed<GrSelectOption[]>(() => {\n const result: GrSelectOption[] = []\n for (const item of optionsResolved.value) {\n if (isOptionGroup(item)) result.push(...item.options)\n else result.push(item)\n }\n return result\n})\n\nfunction modelToArray(value: GrSelectModelValue): string[] {\n if (Array.isArray(value)) return value\n if (!value) return []\n return [value]\n}\n\nconst modelSingle = computed(() => {\n return Array.isArray(props.modelValue) ? (props.modelValue[0] ?? '') : props.modelValue\n})\n\nconst modelMultiple = computed(() => modelToArray(props.modelValue))\n\nconst selectedValues = computed(() => {\n return props.multiple ? modelMultiple.value : (modelSingle.value ? [modelSingle.value] : [])\n})\n\nconst hasSelection = computed(() => selectedValues.value.length > 0)\n\nconst selectedOptions = computed<GrSelectOption[]>(() => {\n const byValue = new Map(flatOptions.value.map(o => [o.value, o]))\n return selectedValues.value.map((v) => byValue.get(v) ?? { value: v, label: v })\n})\n\nconst hasModelInOptions = computed(() => {\n if (props.multiple) return false\n return flatOptions.value.some((o) => o.value === modelSingle.value)\n})\n\nconst displayLabel = computed(() => {\n if (props.multiple) {\n if (!selectedValues.value.length) return ''\n return selectedValues.value\n .map((v) => flatOptions.value.find((o) => o.value === v)?.label ?? v)\n .join(', ')\n }\n\n return flatOptions.value.find((o) => o.value === modelSingle.value)?.label ?? modelSingle.value\n})\n\nconst displayText = computed(() => {\n if (hasSelection.value) return displayLabel.value\n return props.placeholder ?? ''\n})\n\n// Нативный `<select multiple>` — это многострочный listbox, а не поповер. В режиме\n// `view=\"link\"` он рендерится невидимым overlay'ем, из-за чего multiple-вариант «не\n// открывается» (клик по невидимому listbox'у ничего не показывает). Для этой\n// неподдерживаемой комбинации форсим кастомную панель, которая корректно открывается.\nconst effectiveOptionsView = computed<GrSelectOptionsView>(() => {\n if (props.view === 'link' && props.multiple && props.optionsView === 'native')\n return 'panel'\n // Поиск/загрузка/теги невозможны в нативном `<select>` — форсим кастомную панель.\n if ((props.filterable || props.loading || props.tags) && props.optionsView === 'native')\n return 'panel'\n return props.optionsView\n})\n\n// Поле поиска в панели: показываем при `filterable` ИЛИ `allowCustomValue`.\nconst showSearchInput = computed(() =>\n (props.filterable || props.allowCustomValue) && effectiveOptionsView.value === 'panel',\n)\n\n// Показывать chips вместо строки «a, b, c» (только multiple + tags).\nconst showTags = computed(() => props.multiple && props.tags && effectiveOptionsView.value === 'panel')\n\nconst nativeCustomOptionVisible = computed(() => {\n if (!props.allowCustomValue) return false\n if (effectiveOptionsView.value !== 'native') return false\n if (props.multiple) return false\n if (!props.options) return false\n if (modelSingle.value === '') return false\n return !hasModelInOptions.value\n})\n\nconst customValue = ref('')\nconst open = ref(false)\nconst rootEl = ref<HTMLElement | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\nconst customInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst clickOutsideExclude = [() => panelEl.value]\n\n// Для `view='link'` ширина триггера = ширине выбранной опции (`inline-block w-auto`),\n// поэтому панель растёт по контенту (`matchWidth: 'min'` → `width: max-content` +\n// `min-width` от триггера), а не сжимается до неё. Для `view='default'` панель точно\n// повторяет ширину триггера (`matchWidth: true`).\nconst { floatingStyle, update: updateFloatingPosition } = useFloating(rootEl, panelEl, open, {\n placement: 'bottom-start',\n matchWidth: () => (props.view === 'link' ? 'min' : true),\n zIndexVar: '--gr-z-dropdown',\n})\n\nfunction closeDropdown(): void {\n open.value = false\n}\n\nfunction toggleDropdown(): void {\n if (props.disabled) return\n open.value = !open.value\n}\n\nuseEscapeToClose(open, closeDropdown)\n\n// `view` определяет режим `matchWidth` (см. выше) — пересчитываем позицию/ширину\n// панели, если он меняется, пока панель открыта.\nwatch(\n () => props.view,\n () => {\n if (open.value) updateFloatingPosition()\n },\n)\n\nconst panelClasses = computed(() => {\n return grSelectPanelClasses\n})\n\nfunction matchesQuery(option: GrSelectOption, query: string): boolean {\n if (!query) return true\n return option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)\n}\n\n/**\n * Элемент рендера панели: либо заголовок группы, либо опция.\n * Группировка сохраняется, фильтрация по `customValue` скрывает пустые группы.\n */\ntype GrSelectPanelItem =\n | { kind: 'group', label: string, key: string }\n | { kind: 'option', option: GrSelectOption, key: string }\n\nconst panelItems = computed<GrSelectPanelItem[]>(() => {\n const q = (props.allowCustomValue || props.filterable) ? customValue.value.trim().toLowerCase() : ''\n const items: GrSelectPanelItem[] = []\n\n // Опция для кастомного значения, которого нет в options (single).\n if (props.allowCustomValue && !props.multiple && modelSingle.value !== '' && !hasModelInOptions.value) {\n const custom: GrSelectOption = { value: modelSingle.value, label: modelSingle.value }\n if (matchesQuery(custom, q)) {\n items.push({ kind: 'option', option: custom, key: `__custom__${custom.value}` })\n }\n }\n\n optionsResolved.value.forEach((item, index) => {\n if (isOptionGroup(item)) {\n const matched = item.options.filter((o) => matchesQuery(o, q))\n if (!matched.length) return\n items.push({ kind: 'group', label: item.label, key: `__group__${index}` })\n for (const option of matched) {\n // Ключ с индексом группы — одинаковое `value` в разных группах больше не даёт дубликат.\n items.push({ kind: 'option', option, key: `${index}:${option.value}` })\n }\n return\n }\n\n if (matchesQuery(item, q)) {\n items.push({ kind: 'option', option: item, key: `${index}:${item.value}` })\n }\n })\n\n return items\n})\n\nconst canAddCustom = computed(() => {\n if (!props.allowCustomValue) return false\n if (effectiveOptionsView.value !== 'panel') return false\n const v = customValue.value.trim()\n if (!v) return false\n\n if (props.multiple) {\n if (selectedValues.value.includes(v)) return false\n return !flatOptions.value.some((o) => o.value === v)\n }\n\n if (v === modelSingle.value) return false\n return !flatOptions.value.some((o) => o.value === v)\n})\n\nfunction emitValue(value: GrSelectModelValue): void {\n emit('update:modelValue', value)\n}\n\nfunction isSelected(value: string): boolean {\n return selectedValues.value.includes(value)\n}\n\nfunction isOptionDisabled(value: string): boolean {\n return flatOptions.value.find(o => o.value === value)?.disabled === true\n}\n\nfunction selectValue(value: string): void {\n emitValue(value)\n if (props.closeOnSelect) {\n closeDropdown()\n }\n}\n\nfunction toggleValue(value: string): void {\n if (isOptionDisabled(value)) return\n\n if (!props.multiple) {\n selectValue(value)\n return\n }\n\n const next = selectedValues.value.slice()\n const idx = next.indexOf(value)\n if (idx >= 0) {\n next.splice(idx, 1)\n }\n else {\n next.push(value)\n }\n\n emitValue(next)\n if (props.closeOnSelect) {\n closeDropdown()\n }\n}\n\nfunction addCustom(): void {\n const v = customValue.value.trim()\n if (!v) return\n toggleValue(v)\n}\n\n// Удаление одного значения из multiple-выбора (клик по «×» на chip).\nfunction removeValue(value: string): void {\n if (props.disabled) return\n if (!props.multiple) return\n emitValue(selectedValues.value.filter(v => v !== value))\n}\n\nfunction tagRemoveLabel(option: GrSelectOption): string {\n return t('gr.select.removeTag', 'Remove {label}', { label: option.label })\n}\n\n// ————— Клавиатурная навигация комбобокса (WAI-ARIA, aria-activedescendant).\nconst listboxId = useId()\nconst activeIndex = ref(-1)\n\nfunction optionDomId(value: string): string {\n return `${listboxId}-opt-${value}`\n}\n\n// Навигируемые (видимые, не-disabled) опции панели в порядке рендера.\nconst navigableValues = computed<string[]>(() =>\n panelItems.value\n .filter((item): item is Extract<GrSelectPanelItem, { kind: 'option' }> => item.kind === 'option' && !item.option.disabled)\n .map(item => item.option.value),\n)\n\nconst activeValue = computed(() => (activeIndex.value >= 0 ? navigableValues.value[activeIndex.value] : undefined))\nconst activeDescendantId = computed(() =>\n open.value && activeValue.value !== undefined ? optionDomId(activeValue.value) : undefined,\n)\n\nfunction clampActive(index: number): number {\n const len = navigableValues.value.length\n if (len === 0) return -1\n return ((index % len) + len) % len\n}\n\nasync function scrollActiveIntoView(): Promise<void> {\n await nextTick()\n const value = activeValue.value\n if (value === undefined) return\n const el = document.getElementById(optionDomId(value))\n el?.scrollIntoView?.({ block: 'nearest' })\n}\n\nfunction setActive(index: number): void {\n activeIndex.value = clampActive(index)\n void scrollActiveIntoView()\n}\n\nfunction initActiveIndex(): void {\n const selectedIdx = navigableValues.value.findIndex(v => isSelected(v))\n activeIndex.value = selectedIdx >= 0 ? selectedIdx : (navigableValues.value.length ? 0 : -1)\n}\n\nfunction openDropdown(): void {\n if (props.disabled || open.value) return\n open.value = true\n}\n\nlet typeaheadBuffer = ''\nlet typeaheadTimer: ReturnType<typeof setTimeout> | null = null\nfunction typeahead(char: string): void {\n typeaheadBuffer += char.toLowerCase()\n if (typeaheadTimer) clearTimeout(typeaheadTimer)\n typeaheadTimer = setTimeout(() => { typeaheadBuffer = '' }, 600)\n\n const idx = navigableValues.value.findIndex((v) => {\n const opt = flatOptions.value.find(o => o.value === v)\n return opt?.label.toLowerCase().startsWith(typeaheadBuffer)\n })\n if (idx >= 0) setActive(idx)\n}\n\nfunction onComboKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n\n if (!open.value) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault()\n openDropdown()\n }\n return\n }\n\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(navigableValues.value.length - 1)\n break\n case 'Enter':\n event.preventDefault()\n if (props.allowCustomValue && canAddCustom.value)\n addCustom()\n else if (activeValue.value !== undefined)\n toggleValue(activeValue.value)\n break\n case 'Tab':\n closeDropdown()\n break\n default:\n // typeahead — только когда нет поля ввода (иначе мешает вводу в search/custom-инпут).\n if (!showSearchInput.value && event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey)\n typeahead(event.key)\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (!isOpen) {\n customValue.value = ''\n activeIndex.value = -1\n return\n }\n\n initActiveIndex()\n\n if (showSearchInput.value) {\n await nextTick()\n customInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nconst showNativeChevron = computed(() => {\n return effectiveOptionsView.value === 'native' && props.view !== 'link' && !props.multiple\n})\n\nconst nativeClearOptionVisible = computed(() => {\n if (!resolvedClearable.value) return false\n if (effectiveOptionsView.value !== 'native') return false\n if (props.multiple) return false\n if (!props.options) return true\n return !flatOptions.value.some(o => o.value === '')\n})\n\nconst panelClearVisible = computed(() => {\n if (!resolvedClearable.value) return false\n if (effectiveOptionsView.value !== 'panel') return false\n if (props.view === 'link') return false\n return hasSelection.value\n})\n\nconst nativeClassName = computed(() => {\n return grSelectNativeClass({\n view: props.view,\n size: resolvedSize.value,\n disabled: props.disabled,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n showNativeChevron: showNativeChevron.value,\n })\n})\n\n/**\n * `view=\"link\"` в native-режиме: ширина обёртки должна определяться выбранной опцией,\n * а не самой длинной (как делает браузер по умолчанию). Поэтому рендерим прозрачный\n * `<select>`-overlay поверх видимого `<span>` с меткой — overlay принимает клики/клавиатуру,\n * span задаёт ширину компонента в закрытом состоянии.\n */\nconst isLinkNative = computed(() => props.view === 'link' && effectiveOptionsView.value === 'native')\n\nconst linkNativeLabelClassName = computed(() => grSelectLinkNativeLabelClass({\n size: resolvedSize.value,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n disabled: props.disabled,\n}))\n\nconst linkNativeDisplayText = computed(() => {\n return displayText.value || props.placeholder || '\\u00A0'\n})\n\nconst triggerClassName = computed(() => {\n return grSelectTriggerClass({\n view: props.view,\n optionsView: effectiveOptionsView.value,\n size: resolvedSize.value,\n disabled: props.disabled,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n })\n})\n\nfunction onChange(e: Event): void {\n const el = e.target as HTMLSelectElement\n\n if (props.multiple) {\n const values = Array.from(el.selectedOptions, o => o.value)\n emit('update:modelValue', values)\n return\n }\n\n emit('update:modelValue', el.value)\n}\n\nfunction clearSelection(): void {\n if (props.disabled) return\n emitValue(props.multiple ? [] : '')\n}\n</script>\n\n<template>\n <div\n v-if=\"effectiveOptionsView === 'native'\"\n data-gr-select\n :class=\"rootClass\"\n >\n <!--\n Выбор задаём per-option через `:selected` (а не `:value` на `<select>`):\n для `<select multiple>` биндинг `:value` массивом не работает — DOM не\n отражает программное изменение модели. `onChange` читает выбор из DOM.\n -->\n <select\n :id=\"resolvedId\"\n data-gr-select-native\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"isRequired ? 'true' : undefined\"\n :class=\"isLinkNative ? grSelectLinkNativeOverlayClass : [baseClassName, nativeClassName]\"\n @change=\"onChange\"\n >\n <option v-if=\"nativeClearOptionVisible\" value=\"\" :selected=\"!multiple && modelSingle === ''\">\n {{ placeholder || t('gr.select.clearOption', 'None') }}\n </option>\n\n <slot>\n <option v-if=\"nativeCustomOptionVisible\" :value=\"modelSingle\" :selected=\"!multiple\">\n {{ modelSingle }}\n </option>\n <template v-for=\"(item, index) in optionsResolved\" :key=\"index\">\n <optgroup v-if=\"isOptionGroup(item)\" :label=\"item.label\">\n <option\n v-for=\"opt in item.options\"\n :key=\"`${index}:${opt.value}`\"\n :value=\"opt.value\"\n :selected=\"multiple ? modelMultiple.includes(opt.value) : modelSingle === opt.value\"\n :disabled=\"opt.disabled\"\n >\n {{ opt.label }}\n </option>\n </optgroup>\n <option\n v-else\n :value=\"item.value\"\n :selected=\"multiple ? modelMultiple.includes(item.value) : modelSingle === item.value\"\n :disabled=\"item.disabled\"\n >\n {{ item.label }}\n </option>\n </template>\n </slot>\n </select>\n\n <span\n v-if=\"isLinkNative\"\n data-gr-select-link-label\n aria-hidden=\"true\"\n :class=\"linkNativeLabelClassName\"\n >{{ linkNativeDisplayText }}</span>\n\n <span\n v-if=\"showNativeChevron\"\n data-testid=\"gr-select-chevron\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 flex items-center text-[var(--gr-muted-fg)] pointer-events-none\"\n >\n <span class=\"i-lucide-chevron-down block h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </div>\n\n <div\n v-else\n ref=\"rootEl\"\n v-click-outside=\"{ handler: closeDropdown, enabled: open, exclude: clickOutsideExclude }\"\n data-gr-select\n :class=\"rootClass\"\n >\n <button\n :id=\"resolvedId\"\n data-testid=\"gr-select-trigger\"\n data-gr-select-trigger\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"isRequired ? 'true' : undefined\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-controls=\"open ? listboxId : undefined\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :class=\"[baseClassName, triggerClassName, showTags && hasSelection ? '!h-auto min-h-10 !py-1.5' : '']\"\n @click=\"toggleDropdown\"\n @keydown=\"onComboKeydown\"\n >\n <span class=\"min-w-0 flex-1\">\n <slot\n name=\"value\"\n :selected-options=\"selectedOptions\"\n :selected-values=\"selectedValues\"\n :display-label=\"displayLabel\"\n :placeholder=\"placeholder\"\n :has-selection=\"hasSelection\"\n >\n <!-- Теги-режим: удаляемые chips вместо строки «a, b, c». -->\n <span\n v-if=\"showTags && hasSelection\"\n data-gr-select-tags\n class=\"flex flex-wrap gap-1 py-0.5\"\n >\n <span\n v-for=\"opt in selectedOptions\"\n :key=\"opt.value\"\n data-gr-select-tag\n class=\"inline-flex items-center gap-1 rounded-[6px] bg-[var(--gr-muted)] pl-2 pr-1 py-0.5 text-[12px] text-[var(--gr-fg)] max-w-full\"\n >\n <span class=\"truncate\">{{ opt.label }}</span>\n <span\n v-if=\"!disabled\"\n data-gr-select-tag-remove\n role=\"button\"\n tabindex=\"-1\"\n :aria-label=\"tagRemoveLabel(opt)\"\n class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-fg)_12%,transparent)]\"\n @click.stop=\"removeValue(opt.value)\"\n >\n <span class=\"i-lucide-x block h-3 w-3\" aria-hidden=\"true\" />\n </span>\n </span>\n </span>\n\n <span\n v-else\n class=\"block truncate\"\n :class=\"!hasSelection ? 'text-[var(--gr-muted-fg)]' : ''\"\n >\n {{ displayText }}\n </span>\n </slot>\n </span>\n\n <span\n v-if=\"panelClearVisible\"\n class=\"shrink-0 h-4 w-4\"\n aria-hidden=\"true\"\n />\n\n <span\n v-else\n data-testid=\"gr-select-chevron\"\n class=\"shrink-0 flex items-center text-[var(--gr-muted-fg)] pointer-events-none\"\n >\n <span class=\"i-lucide-chevron-down block h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <button\n v-if=\"panelClearVisible\"\n data-testid=\"gr-select-clear\"\n data-gr-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"resolvedClearLabel\"\n @click.stop=\"clearSelection\"\n >\n <span class=\"i-lucide-x inline-block h-4 w-4\" aria-hidden=\"true\" />\n </button>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"gr-select-panel\"\n data-gr-select-panel\n :style=\"floatingStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"showSearchInput\" class=\"p-2 border-b border-[var(--gr-brd)]\">\n <GrInput\n ref=\"customInputRef\"\n v-model=\"customValue\"\n data-testid=\"gr-select-custom-input\"\n data-gr-select-search\n type=\"text\"\n :placeholder=\"resolvedSearchPlaceholder\"\n size=\"sm\"\n @keydown=\"onComboKeydown\"\n />\n </div>\n\n <!-- Состояние загрузки: вместо списка — индикатор. -->\n <div\n v-if=\"loading\"\n data-gr-select-loading\n class=\"flex items-center justify-center gap-2 px-3 py-4 text-[13px] text-[var(--gr-muted-fg)]\"\n role=\"status\"\n >\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </div>\n\n <div\n v-else\n :id=\"listboxId\"\n data-gr-select-listbox\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n role=\"listbox\"\n :aria-multiselectable=\"multiple ? 'true' : undefined\"\n >\n <button\n v-if=\"canAddCustom\"\n data-testid=\"gr-select-add-option\"\n data-gr-select-add-option\n type=\"button\"\n class=\"rounded-[10px] px-3 py-2 text-left text-[13px] hover:bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : 'w-full',\n ]\"\n @click=\"addCustom\"\n >\n {{ t('gr.select.addOption', 'Add \"{value}\"', { value: customValue.trim() }) }}\n </button>\n\n <template v-for=\"item in panelItems\" :key=\"item.key\">\n <div\n v-if=\"item.kind === 'group'\"\n data-gr-select-group-label\n role=\"presentation\"\n class=\"px-3 pt-2 pb-1 text-[11px] font-semibold uppercase tracking-wide text-[var(--gr-muted-fg)]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : '',\n ]\"\n >\n {{ item.label }}\n </div>\n\n <button\n v-else\n :id=\"optionDomId(item.option.value)\"\n data-gr-select-option\n type=\"button\"\n role=\"option\"\n :disabled=\"item.option.disabled\"\n :aria-selected=\"isSelected(item.option.value) ? 'true' : 'false'\"\n :aria-disabled=\"item.option.disabled ? 'true' : undefined\"\n class=\"rounded-[10px] px-3 py-2 text-left text-[13px]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : 'w-full',\n item.option.disabled ? 'cursor-not-allowed opacity-50' : 'hover:bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]',\n activeValue === item.option.value && !item.option.disabled ? 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]' : '',\n ]\"\n @click=\"toggleValue(item.option.value)\"\n @mousemove=\"activeIndex = navigableValues.indexOf(item.option.value)\"\n >\n <slot name=\"option\" :option=\"item.option\" :selected=\"isSelected(item.option.value)\">\n <span class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"inline-block h-4 w-4 shrink-0\"\n :class=\"isSelected(item.option.value) ? 'i-lucide-check text-[var(--gr-primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ item.option.label }}</span>\n </span>\n </slot>\n </button>\n </template>\n\n <!-- Пустой результат фильтрации (без add-custom-варианта). -->\n <div\n v-if=\"!panelItems.length && !canAddCustom\"\n data-gr-select-empty\n class=\"px-3 py-4 text-center text-[13px] text-[var(--gr-muted-fg)]\"\n >\n {{ resolvedNoResultsText }}\n </div>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref, useId, watch } from 'vue'\n\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\n\nimport GrInput from '../GrInput/GrInput.vue'\nimport { vClickOutside } from '../../directives'\nimport { useFloating } from '../../composables/internal/useFloating'\nimport { useEscapeToClose } from '../../composables/internal/useEscapeToClose'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { useGrFormFieldContext } from '../GrFormField/context'\n\nimport {\n defaultBaseClass,\n grSelectLinkNativeLabelClass,\n grSelectLinkNativeOverlayClass,\n grSelectNativeClass,\n grSelectPanelClasses,\n grSelectTriggerClass,\n linkBaseClass,\n type GrSelectModelValue,\n type GrSelectOption,\n type GrSelectOptionGroup,\n type GrSelectOptionOrGroup,\n type GrSelectOptionsView,\n type GrSelectSize,\n type GrSelectUnderline,\n type GrSelectVariant,\n type GrSelectView,\n} from './grSelectStyles'\n\nexport type {\n GrSelectModelValue,\n GrSelectOption,\n GrSelectOptionGroup,\n GrSelectOptionOrGroup,\n GrSelectOptionsView,\n GrSelectSize,\n GrSelectUnderline,\n GrSelectVariant,\n GrSelectView,\n} from './grSelectStyles'\n\n/**\n * Пропсы публичного GR-примитива «Select».\n */\nexport interface GrSelectProps {\n modelValue: GrSelectModelValue\n /** Список опций. Поддерживает плоский массив опций и группы опций (`{ label, options }`). */\n options?: GrSelectOptionOrGroup[]\n disabled?: boolean\n ariaLabel?: string\n view?: GrSelectView\n size?: GrSelectSize\n /** Placeholder (показывается, когда значение не выбрано). */\n placeholder?: string\n /** Multiple selection. */\n multiple?: boolean\n /** Как отображать список опций: нативный `<select>` или кастомная панель. */\n optionsView?: GrSelectOptionsView\n /** Разрешает ввод/выбор значения, которого нет в `options`. */\n allowCustomValue?: boolean\n /**\n * Поиск/фильтрация опций по вводу (независимо от `allowCustomValue`). Показывает\n * поле поиска над списком и фильтрует опции. Работает только в `optionsView=\"panel\"`\n * (при `native` панель форсится автоматически).\n */\n filterable?: boolean\n /** Placeholder поля поиска (`filterable`). i18n: fallback `gr.select.searchPlaceholder`. */\n filterPlaceholder?: string\n /**\n * Состояние загрузки: вместо списка опций панель показывает индикатор загрузки.\n * Полезно для удалённой подгрузки опций. Форсит `optionsView=\"panel\"`.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.select.loading`. */\n loadingText?: string\n /** Текст пустого результата фильтрации. i18n: fallback `gr.select.noResults`. */\n noResultsText?: string\n /**\n * Режим тегов для `multiple`: выбранные значения показываются как удаляемые\n * chips в триггере (вместо строки «a, b, c»). Форсит `optionsView=\"panel\"`.\n */\n tags?: boolean\n /** Placeholder для инпута кастомного значения (только в `optionsView=\"panel\"`). i18n-friendly: если не задан — берётся из адаптера перевода (`gr.select.customValuePlaceholder`), иначе — встроенный fallback. */\n customValuePlaceholder?: string\n /** Максимальная высота панели (только в `optionsView=\"panel\"`). */\n dropdownMaxHeight?: number\n /** Закрывать панель после выбора (только в `optionsView=\"panel\"`). */\n closeOnSelect?: boolean\n /** Разрешает очистку выбранного значения. */\n clearable?: boolean\n /** i18n-label для кнопки очистки (`aria-label`). */\n clearLabel?: string\n /**\n * Цвет/вариант ссылки для `view=\"link\"` (аналогично `GrLink`).\n * В `view=\"default\"` не используется.\n */\n variant?: GrSelectVariant\n /**\n * Подчёркивание для `view=\"link\"` (аналогично `GrLink`).\n * В `view=\"default\"` не используется.\n */\n underline?: GrSelectUnderline\n}\n\nconst props = withDefaults(\n defineProps<GrSelectProps>(),\n {\n options: undefined,\n disabled: false,\n ariaLabel: undefined,\n view: 'default',\n size: undefined,\n\n placeholder: undefined,\n multiple: false,\n\n optionsView: 'native',\n allowCustomValue: false,\n filterable: false,\n filterPlaceholder: undefined,\n loading: false,\n loadingText: undefined,\n noResultsText: undefined,\n tags: false,\n customValuePlaceholder: undefined,\n dropdownMaxHeight: 280,\n closeOnSelect: true,\n clearable: undefined,\n clearLabel: undefined,\n variant: undefined,\n underline: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrSelect' })\nconst resolvedVariant = useGrComponentProp('GrSelect', 'variant', () => props.variant, 'primary')\nconst resolvedUnderline = useGrComponentProp('GrSelect', 'underline', () => props.underline, 'auto')\nconst resolvedClearable = useGrComponentProp('GrSelect', 'clearable', () => props.clearable, false)\n\nconst { t } = useGranularityTranslations()\n\nconst resolvedCustomValuePlaceholder = computed(() => {\n return props.customValuePlaceholder ?? t('gr.select.customValuePlaceholder', 'Add value…')\n})\n\nconst resolvedClearLabel = computed(() => props.clearLabel ?? t('gr.common.clear', 'Clear'))\nconst resolvedFilterPlaceholder = computed(() => props.filterPlaceholder ?? t('gr.select.searchPlaceholder', 'Search…'))\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.select.loading', 'Loading…'))\nconst resolvedNoResultsText = computed(() => props.noResultsText ?? t('gr.select.noResults', 'No results'))\n// В search-инпуте: при allowCustomValue — «Add value…», иначе (чистый filterable) — «Search…».\nconst resolvedSearchPlaceholder = computed(() =>\n props.allowCustomValue ? resolvedCustomValuePlaceholder.value : resolvedFilterPlaceholder.value,\n)\n\nconst baseClassName = computed(() => props.view === 'link' ? linkBaseClass : defaultBaseClass)\n\nconst rootClass = computed(() => props.view === 'link' ? 'relative inline-block align-baseline' : 'relative w-full')\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrSelectModelValue): void\n}>()\n\n// Fallback из контекста `GrFormField` (id/aria-describedby/invalid/required)\n// для связки с лейблом и сообщением об ошибке.\nconst field = useGrFormFieldContext()\nconst resolvedId = computed(() => field?.id.value)\nconst isInvalid = computed(() => Boolean(field?.invalid.value))\nconst describedBy = computed(() => field?.describedById.value)\nconst isRequired = computed(() => Boolean(field?.required.value))\n\nconst optionsResolved = computed<GrSelectOptionOrGroup[]>(() => props.options ?? [])\n\nfunction isOptionGroup(item: GrSelectOptionOrGroup): item is GrSelectOptionGroup {\n return Array.isArray((item as GrSelectOptionGroup).options)\n}\n\n/** Плоский список всех опций (группы «развёрнуты»). Используется для всех вычислений по значениям. */\nconst flatOptions = computed<GrSelectOption[]>(() => {\n const result: GrSelectOption[] = []\n for (const item of optionsResolved.value) {\n if (isOptionGroup(item)) result.push(...item.options)\n else result.push(item)\n }\n return result\n})\n\nfunction modelToArray(value: GrSelectModelValue): string[] {\n if (Array.isArray(value)) return value\n if (!value) return []\n return [value]\n}\n\nconst modelSingle = computed(() => {\n return Array.isArray(props.modelValue) ? (props.modelValue[0] ?? '') : props.modelValue\n})\n\nconst modelMultiple = computed(() => modelToArray(props.modelValue))\n\nconst selectedValues = computed(() => {\n return props.multiple ? modelMultiple.value : (modelSingle.value ? [modelSingle.value] : [])\n})\n\nconst hasSelection = computed(() => selectedValues.value.length > 0)\n\nconst selectedOptions = computed<GrSelectOption[]>(() => {\n const byValue = new Map(flatOptions.value.map(o => [o.value, o]))\n return selectedValues.value.map((v) => byValue.get(v) ?? { value: v, label: v })\n})\n\nconst hasModelInOptions = computed(() => {\n if (props.multiple) return false\n return flatOptions.value.some((o) => o.value === modelSingle.value)\n})\n\nconst displayLabel = computed(() => {\n if (props.multiple) {\n if (!selectedValues.value.length) return ''\n return selectedValues.value\n .map((v) => flatOptions.value.find((o) => o.value === v)?.label ?? v)\n .join(', ')\n }\n\n return flatOptions.value.find((o) => o.value === modelSingle.value)?.label ?? modelSingle.value\n})\n\nconst displayText = computed(() => {\n if (hasSelection.value) return displayLabel.value\n return props.placeholder ?? ''\n})\n\n// Нативный `<select multiple>` — это многострочный listbox, а не поповер. В режиме\n// `view=\"link\"` он рендерится невидимым overlay'ем, из-за чего multiple-вариант «не\n// открывается» (клик по невидимому listbox'у ничего не показывает). Для этой\n// неподдерживаемой комбинации форсим кастомную панель, которая корректно открывается.\nconst effectiveOptionsView = computed<GrSelectOptionsView>(() => {\n if (props.view === 'link' && props.multiple && props.optionsView === 'native')\n return 'panel'\n // Поиск/загрузка/теги невозможны в нативном `<select>` — форсим кастомную панель.\n if ((props.filterable || props.loading || props.tags) && props.optionsView === 'native')\n return 'panel'\n return props.optionsView\n})\n\n// Поле поиска в панели: показываем при `filterable` ИЛИ `allowCustomValue`.\nconst showSearchInput = computed(() =>\n (props.filterable || props.allowCustomValue) && effectiveOptionsView.value === 'panel',\n)\n\n// Показывать chips вместо строки «a, b, c» (только multiple + tags).\nconst showTags = computed(() => props.multiple && props.tags && effectiveOptionsView.value === 'panel')\n\nconst nativeCustomOptionVisible = computed(() => {\n if (!props.allowCustomValue) return false\n if (effectiveOptionsView.value !== 'native') return false\n if (props.multiple) return false\n if (!props.options) return false\n if (modelSingle.value === '') return false\n return !hasModelInOptions.value\n})\n\nconst customValue = ref('')\nconst open = ref(false)\nconst rootEl = ref<HTMLElement | null>(null)\nconst panelEl = ref<HTMLElement | null>(null)\nconst customInputRef = ref<InstanceType<typeof GrInput> | null>(null)\nconst clickOutsideExclude = [() => panelEl.value]\n\n// Для `view='link'` ширина триггера = ширине выбранной опции (`inline-block w-auto`),\n// поэтому панель растёт по контенту (`matchWidth: 'min'` → `width: max-content` +\n// `min-width` от триггера), а не сжимается до неё. Для `view='default'` панель точно\n// повторяет ширину триггера (`matchWidth: true`).\nconst { floatingStyle, update: updateFloatingPosition } = useFloating(rootEl, panelEl, open, {\n placement: 'bottom-start',\n matchWidth: () => (props.view === 'link' ? 'min' : true),\n zIndexVar: '--gr-z-dropdown',\n})\n\nfunction closeDropdown(): void {\n open.value = false\n}\n\nfunction toggleDropdown(): void {\n if (props.disabled) return\n open.value = !open.value\n}\n\nuseEscapeToClose(open, closeDropdown)\n\n// `view` определяет режим `matchWidth` (см. выше) — пересчитываем позицию/ширину\n// панели, если он меняется, пока панель открыта.\nwatch(\n () => props.view,\n () => {\n if (open.value) updateFloatingPosition()\n },\n)\n\nconst panelClasses = computed(() => {\n return grSelectPanelClasses\n})\n\nfunction matchesQuery(option: GrSelectOption, query: string): boolean {\n if (!query) return true\n return option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)\n}\n\n/**\n * Элемент рендера панели: либо заголовок группы, либо опция.\n * Группировка сохраняется, фильтрация по `customValue` скрывает пустые группы.\n */\ntype GrSelectPanelItem =\n | { kind: 'group', label: string, key: string }\n | { kind: 'option', option: GrSelectOption, key: string }\n\nconst panelItems = computed<GrSelectPanelItem[]>(() => {\n const q = (props.allowCustomValue || props.filterable) ? customValue.value.trim().toLowerCase() : ''\n const items: GrSelectPanelItem[] = []\n\n // Опция для кастомного значения, которого нет в options (single).\n if (props.allowCustomValue && !props.multiple && modelSingle.value !== '' && !hasModelInOptions.value) {\n const custom: GrSelectOption = { value: modelSingle.value, label: modelSingle.value }\n if (matchesQuery(custom, q)) {\n items.push({ kind: 'option', option: custom, key: `__custom__${custom.value}` })\n }\n }\n\n optionsResolved.value.forEach((item, index) => {\n if (isOptionGroup(item)) {\n const matched = item.options.filter((o) => matchesQuery(o, q))\n if (!matched.length) return\n items.push({ kind: 'group', label: item.label, key: `__group__${index}` })\n for (const option of matched) {\n // Ключ с индексом группы — одинаковое `value` в разных группах больше не даёт дубликат.\n items.push({ kind: 'option', option, key: `${index}:${option.value}` })\n }\n return\n }\n\n if (matchesQuery(item, q)) {\n items.push({ kind: 'option', option: item, key: `${index}:${item.value}` })\n }\n })\n\n return items\n})\n\nconst canAddCustom = computed(() => {\n if (!props.allowCustomValue) return false\n if (effectiveOptionsView.value !== 'panel') return false\n const v = customValue.value.trim()\n if (!v) return false\n\n if (props.multiple) {\n if (selectedValues.value.includes(v)) return false\n return !flatOptions.value.some((o) => o.value === v)\n }\n\n if (v === modelSingle.value) return false\n return !flatOptions.value.some((o) => o.value === v)\n})\n\nfunction emitValue(value: GrSelectModelValue): void {\n emit('update:modelValue', value)\n}\n\nfunction isSelected(value: string): boolean {\n return selectedValues.value.includes(value)\n}\n\nfunction isOptionDisabled(value: string): boolean {\n return flatOptions.value.find(o => o.value === value)?.disabled === true\n}\n\nfunction selectValue(value: string): void {\n emitValue(value)\n if (props.closeOnSelect) {\n closeDropdown()\n }\n}\n\nfunction toggleValue(value: string): void {\n if (isOptionDisabled(value)) return\n\n if (!props.multiple) {\n selectValue(value)\n return\n }\n\n const next = selectedValues.value.slice()\n const idx = next.indexOf(value)\n if (idx >= 0) {\n next.splice(idx, 1)\n }\n else {\n next.push(value)\n }\n\n emitValue(next)\n if (props.closeOnSelect) {\n closeDropdown()\n }\n}\n\nfunction addCustom(): void {\n const v = customValue.value.trim()\n if (!v) return\n toggleValue(v)\n}\n\n// Удаление одного значения из multiple-выбора (клик по «×» на chip).\nfunction removeValue(value: string): void {\n if (props.disabled) return\n if (!props.multiple) return\n emitValue(selectedValues.value.filter(v => v !== value))\n}\n\nfunction tagRemoveLabel(option: GrSelectOption): string {\n return t('gr.select.removeTag', 'Remove {label}', { label: option.label })\n}\n\n// ————— Клавиатурная навигация комбобокса (WAI-ARIA, aria-activedescendant).\nconst listboxId = useId()\nconst activeIndex = ref(-1)\n\nfunction optionDomId(value: string): string {\n return `${listboxId}-opt-${value}`\n}\n\n// Навигируемые (видимые, не-disabled) опции панели в порядке рендера.\nconst navigableValues = computed<string[]>(() =>\n panelItems.value\n .filter((item): item is Extract<GrSelectPanelItem, { kind: 'option' }> => item.kind === 'option' && !item.option.disabled)\n .map(item => item.option.value),\n)\n\nconst activeValue = computed(() => (activeIndex.value >= 0 ? navigableValues.value[activeIndex.value] : undefined))\nconst activeDescendantId = computed(() =>\n open.value && activeValue.value !== undefined ? optionDomId(activeValue.value) : undefined,\n)\n\nfunction clampActive(index: number): number {\n const len = navigableValues.value.length\n if (len === 0) return -1\n return ((index % len) + len) % len\n}\n\nasync function scrollActiveIntoView(): Promise<void> {\n await nextTick()\n const value = activeValue.value\n if (value === undefined) return\n const el = document.getElementById(optionDomId(value))\n el?.scrollIntoView?.({ block: 'nearest' })\n}\n\nfunction setActive(index: number): void {\n activeIndex.value = clampActive(index)\n void scrollActiveIntoView()\n}\n\nfunction initActiveIndex(): void {\n const selectedIdx = navigableValues.value.findIndex(v => isSelected(v))\n activeIndex.value = selectedIdx >= 0 ? selectedIdx : (navigableValues.value.length ? 0 : -1)\n}\n\nfunction openDropdown(): void {\n if (props.disabled || open.value) return\n open.value = true\n}\n\nlet typeaheadBuffer = ''\nlet typeaheadTimer: ReturnType<typeof setTimeout> | null = null\nfunction typeahead(char: string): void {\n typeaheadBuffer += char.toLowerCase()\n if (typeaheadTimer) clearTimeout(typeaheadTimer)\n typeaheadTimer = setTimeout(() => { typeaheadBuffer = '' }, 600)\n\n const idx = navigableValues.value.findIndex((v) => {\n const opt = flatOptions.value.find(o => o.value === v)\n return opt?.label.toLowerCase().startsWith(typeaheadBuffer)\n })\n if (idx >= 0) setActive(idx)\n}\n\nfunction onComboKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n\n if (!open.value) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault()\n openDropdown()\n }\n return\n }\n\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(navigableValues.value.length - 1)\n break\n case 'Enter':\n event.preventDefault()\n if (props.allowCustomValue && canAddCustom.value)\n addCustom()\n else if (activeValue.value !== undefined)\n toggleValue(activeValue.value)\n break\n case 'Tab':\n closeDropdown()\n break\n default:\n // typeahead — только когда нет поля ввода (иначе мешает вводу в search/custom-инпут).\n if (!showSearchInput.value && event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey)\n typeahead(event.key)\n }\n}\n\nwatch(\n open,\n async (isOpen) => {\n if (!isOpen) {\n customValue.value = ''\n activeIndex.value = -1\n return\n }\n\n initActiveIndex()\n\n if (showSearchInput.value) {\n await nextTick()\n customInputRef.value?.focus()\n }\n },\n { immediate: true },\n)\n\nconst showNativeChevron = computed(() => {\n return effectiveOptionsView.value === 'native' && props.view !== 'link' && !props.multiple\n})\n\nconst nativeClearOptionVisible = computed(() => {\n if (!resolvedClearable.value) return false\n if (effectiveOptionsView.value !== 'native') return false\n if (props.multiple) return false\n if (!props.options) return true\n return !flatOptions.value.some(o => o.value === '')\n})\n\nconst panelClearVisible = computed(() => {\n if (!resolvedClearable.value) return false\n if (effectiveOptionsView.value !== 'panel') return false\n if (props.view === 'link') return false\n return hasSelection.value\n})\n\nconst nativeClassName = computed(() => {\n return grSelectNativeClass({\n view: props.view,\n size: resolvedSize.value,\n disabled: props.disabled,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n showNativeChevron: showNativeChevron.value,\n })\n})\n\n/**\n * `view=\"link\"` в native-режиме: ширина обёртки должна определяться выбранной опцией,\n * а не самой длинной (как делает браузер по умолчанию). Поэтому рендерим прозрачный\n * `<select>`-overlay поверх видимого `<span>` с меткой — overlay принимает клики/клавиатуру,\n * span задаёт ширину компонента в закрытом состоянии.\n */\nconst isLinkNative = computed(() => props.view === 'link' && effectiveOptionsView.value === 'native')\n\nconst linkNativeLabelClassName = computed(() => grSelectLinkNativeLabelClass({\n size: resolvedSize.value,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n disabled: props.disabled,\n}))\n\nconst linkNativeDisplayText = computed(() => {\n return displayText.value || props.placeholder || '\\u00A0'\n})\n\nconst triggerClassName = computed(() => {\n return grSelectTriggerClass({\n view: props.view,\n optionsView: effectiveOptionsView.value,\n size: resolvedSize.value,\n disabled: props.disabled,\n variant: resolvedVariant.value,\n underline: resolvedUnderline.value,\n })\n})\n\nfunction onChange(e: Event): void {\n const el = e.target as HTMLSelectElement\n\n if (props.multiple) {\n const values = Array.from(el.selectedOptions, o => o.value)\n emit('update:modelValue', values)\n return\n }\n\n emit('update:modelValue', el.value)\n}\n\nfunction clearSelection(): void {\n if (props.disabled) return\n emitValue(props.multiple ? [] : '')\n}\n</script>\n\n<template>\n <div\n v-if=\"effectiveOptionsView === 'native'\"\n data-gr-select\n :class=\"rootClass\"\n >\n <!--\n Выбор задаём per-option через `:selected` (а не `:value` на `<select>`):\n для `<select multiple>` биндинг `:value` массивом не работает — DOM не\n отражает программное изменение модели. `onChange` читает выбор из DOM.\n -->\n <select\n :id=\"resolvedId\"\n data-gr-select-native\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"isRequired ? 'true' : undefined\"\n :class=\"isLinkNative ? grSelectLinkNativeOverlayClass : [baseClassName, nativeClassName]\"\n @change=\"onChange\"\n >\n <option v-if=\"nativeClearOptionVisible\" value=\"\" :selected=\"!multiple && modelSingle === ''\">\n {{ placeholder || t('gr.select.clearOption', 'None') }}\n </option>\n\n <slot>\n <option v-if=\"nativeCustomOptionVisible\" :value=\"modelSingle\" :selected=\"!multiple\">\n {{ modelSingle }}\n </option>\n <template v-for=\"(item, index) in optionsResolved\" :key=\"index\">\n <optgroup v-if=\"isOptionGroup(item)\" :label=\"item.label\">\n <option\n v-for=\"opt in item.options\"\n :key=\"`${index}:${opt.value}`\"\n :value=\"opt.value\"\n :selected=\"multiple ? modelMultiple.includes(opt.value) : modelSingle === opt.value\"\n :disabled=\"opt.disabled\"\n >\n {{ opt.label }}\n </option>\n </optgroup>\n <option\n v-else\n :value=\"item.value\"\n :selected=\"multiple ? modelMultiple.includes(item.value) : modelSingle === item.value\"\n :disabled=\"item.disabled\"\n >\n {{ item.label }}\n </option>\n </template>\n </slot>\n </select>\n\n <span\n v-if=\"isLinkNative\"\n data-gr-select-link-label\n aria-hidden=\"true\"\n :class=\"linkNativeLabelClassName\"\n >{{ linkNativeDisplayText }}</span>\n\n <span\n v-if=\"showNativeChevron\"\n data-testid=\"gr-select-chevron\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 flex items-center text-[var(--gr-muted-fg)] pointer-events-none\"\n >\n <span class=\"i-lucide-chevron-down block h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </div>\n\n <div\n v-else\n ref=\"rootEl\"\n v-click-outside=\"{ handler: closeDropdown, enabled: open, exclude: clickOutsideExclude }\"\n data-gr-select\n :class=\"rootClass\"\n >\n <button\n :id=\"resolvedId\"\n data-testid=\"gr-select-trigger\"\n data-gr-select-trigger\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"isRequired ? 'true' : undefined\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n :aria-controls=\"open ? listboxId : undefined\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-expanded=\"open ? 'true' : 'false'\"\n :class=\"[baseClassName, triggerClassName, showTags && hasSelection ? '!h-auto min-h-10 !py-1.5' : '']\"\n @click=\"toggleDropdown\"\n @keydown=\"onComboKeydown\"\n >\n <span class=\"min-w-0 flex-1\">\n <slot\n name=\"value\"\n :selected-options=\"selectedOptions\"\n :selected-values=\"selectedValues\"\n :display-label=\"displayLabel\"\n :placeholder=\"placeholder\"\n :has-selection=\"hasSelection\"\n >\n <!-- Теги-режим: удаляемые chips вместо строки «a, b, c». -->\n <span\n v-if=\"showTags && hasSelection\"\n data-gr-select-tags\n class=\"flex flex-wrap gap-1 py-0.5\"\n >\n <span\n v-for=\"opt in selectedOptions\"\n :key=\"opt.value\"\n data-gr-select-tag\n class=\"inline-flex items-center gap-1 rounded-[6px] bg-[var(--gr-muted)] pl-2 pr-1 py-0.5 text-[12px] text-[var(--gr-fg)] max-w-full\"\n >\n <span class=\"truncate\">{{ opt.label }}</span>\n <span\n v-if=\"!disabled\"\n data-gr-select-tag-remove\n role=\"button\"\n tabindex=\"-1\"\n :aria-label=\"tagRemoveLabel(opt)\"\n class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-fg)_12%,transparent)]\"\n @click.stop=\"removeValue(opt.value)\"\n >\n <span class=\"i-lucide-x block h-3 w-3\" aria-hidden=\"true\" />\n </span>\n </span>\n </span>\n\n <span\n v-else\n class=\"block truncate\"\n :class=\"!hasSelection ? 'text-[var(--gr-muted-fg)]' : ''\"\n >\n {{ displayText }}\n </span>\n </slot>\n </span>\n\n <span\n v-if=\"panelClearVisible\"\n class=\"shrink-0 h-4 w-4\"\n aria-hidden=\"true\"\n />\n\n <span\n v-else\n data-testid=\"gr-select-chevron\"\n class=\"shrink-0 flex items-center text-[var(--gr-muted-fg)] pointer-events-none\"\n >\n <span class=\"i-lucide-chevron-down block h-4 w-4\" aria-hidden=\"true\" />\n </span>\n </button>\n\n <button\n v-if=\"panelClearVisible\"\n data-testid=\"gr-select-clear\"\n data-gr-select-clear\n type=\"button\"\n class=\"absolute top-1/2 -translate-y-1/2 right-3 h-6 w-6 inline-flex items-center justify-center rounded-md text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-muted)_25%,transparent)] disabled:opacity-50\"\n :disabled=\"disabled\"\n :aria-label=\"resolvedClearLabel\"\n @click.stop=\"clearSelection\"\n >\n <span class=\"i-lucide-x inline-block h-4 w-4\" aria-hidden=\"true\" />\n </button>\n\n <teleport to=\"body\">\n <transition\n enter-active-class=\"transition ease-out duration-150\"\n enter-from-class=\"transform opacity-0 scale-95\"\n enter-to-class=\"transform opacity-100 scale-100\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"transform opacity-100 scale-100\"\n leave-to-class=\"transform opacity-0 scale-95\"\n >\n <div\n v-show=\"open\"\n ref=\"panelEl\"\n data-testid=\"gr-select-panel\"\n data-gr-select-panel\n :style=\"floatingStyle\"\n >\n <div :class=\"panelClasses\">\n <div v-if=\"showSearchInput\" class=\"p-2 border-b border-[var(--gr-brd)]\">\n <GrInput\n ref=\"customInputRef\"\n v-model=\"customValue\"\n data-testid=\"gr-select-custom-input\"\n data-gr-select-search\n type=\"text\"\n :placeholder=\"resolvedSearchPlaceholder\"\n size=\"sm\"\n @keydown=\"onComboKeydown\"\n />\n </div>\n\n <!-- Состояние загрузки: вместо списка — индикатор. -->\n <div\n v-if=\"loading\"\n data-gr-select-loading\n class=\"flex items-center justify-center gap-2 px-3 py-4 text-[13px] text-[var(--gr-muted-fg)]\"\n role=\"status\"\n >\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </div>\n\n <div\n v-else\n :id=\"listboxId\"\n data-gr-select-listbox\n class=\"p-1 overflow-auto\"\n :style=\"{ maxHeight: `${dropdownMaxHeight}px` }\"\n role=\"listbox\"\n :aria-multiselectable=\"multiple ? 'true' : undefined\"\n >\n <button\n v-if=\"canAddCustom\"\n data-testid=\"gr-select-add-option\"\n data-gr-select-add-option\n type=\"button\"\n class=\"rounded-[10px] px-3 py-2 text-left text-[13px] hover:bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : 'w-full',\n ]\"\n @click=\"addCustom\"\n >\n {{ t('gr.select.addOption', 'Add \"{value}\"', { value: customValue.trim() }) }}\n </button>\n\n <template v-for=\"item in panelItems\" :key=\"item.key\">\n <div\n v-if=\"item.kind === 'group'\"\n data-gr-select-group-label\n role=\"presentation\"\n class=\"px-3 pt-2 pb-1 text-[11px] font-semibold uppercase tracking-wide text-[var(--gr-muted-fg)]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : '',\n ]\"\n >\n {{ item.label }}\n </div>\n\n <button\n v-else\n :id=\"optionDomId(item.option.value)\"\n data-gr-select-option\n type=\"button\"\n role=\"option\"\n :disabled=\"item.option.disabled\"\n :aria-selected=\"isSelected(item.option.value) ? 'true' : 'false'\"\n :aria-disabled=\"item.option.disabled ? 'true' : undefined\"\n class=\"rounded-[10px] px-3 py-2 text-left text-[13px]\" :class=\"[\n view === 'link' ? 'block min-w-full w-max whitespace-nowrap' : 'w-full',\n item.option.disabled ? 'cursor-not-allowed opacity-50' : 'hover:bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]',\n activeValue === item.option.value && !item.option.disabled ? 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]' : '',\n ]\"\n @click=\"toggleValue(item.option.value)\"\n @mousemove=\"activeIndex = navigableValues.indexOf(item.option.value)\"\n >\n <slot name=\"option\" :option=\"item.option\" :selected=\"isSelected(item.option.value)\">\n <span class=\"flex items-center gap-2 min-w-0\">\n <span\n class=\"inline-block h-4 w-4 shrink-0\"\n :class=\"isSelected(item.option.value) ? 'i-lucide-check text-[var(--gr-primary)]' : ''\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate\">{{ item.option.label }}</span>\n </span>\n </slot>\n </button>\n </template>\n\n <!-- Пустой результат фильтрации (без add-custom-варианта). -->\n <div\n v-if=\"!panelItems.length && !canAddCustom\"\n data-gr-select-empty\n class=\"px-3 py-4 text-center text-[13px] text-[var(--gr-muted-fg)]\"\n >\n {{ resolvedNoResultsText }}\n </div>\n </div>\n </div>\n </div>\n </transition>\n </teleport>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,238 +0,0 @@
1
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
2
- import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
3
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, markRaw, normalizeClass, normalizeStyle, openBlock, provide, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, watch, withCtx } from "vue";
4
- //#region ~icons/lucide/chevron-left
5
- var _hoisted_1$3 = {
6
- viewBox: "0 0 24 24",
7
- width: "1.2em",
8
- height: "1.2em"
9
- };
10
- function render$2(_ctx, _cache) {
11
- return openBlock(), createElementBlock("svg", _hoisted_1$3, [..._cache[0] || (_cache[0] = [createElementVNode("path", {
12
- fill: "none",
13
- stroke: "currentColor",
14
- "stroke-linecap": "round",
15
- "stroke-linejoin": "round",
16
- "stroke-width": "2",
17
- d: "m15 18l-6-6l6-6"
18
- }, null, -1)])]);
19
- }
20
- var chevron_left_default = markRaw({
21
- name: "lucide-chevron-left",
22
- render: render$2
23
- });
24
- //#endregion
25
- //#region ~icons/lucide/chevron-right
26
- var _hoisted_1$2 = {
27
- viewBox: "0 0 24 24",
28
- width: "1.2em",
29
- height: "1.2em"
30
- };
31
- function render$1(_ctx, _cache) {
32
- return openBlock(), createElementBlock("svg", _hoisted_1$2, [..._cache[0] || (_cache[0] = [createElementVNode("path", {
33
- fill: "none",
34
- stroke: "currentColor",
35
- "stroke-linecap": "round",
36
- "stroke-linejoin": "round",
37
- "stroke-width": "2",
38
- d: "m9 18l6-6l-6-6"
39
- }, null, -1)])]);
40
- }
41
- var chevron_right_default = markRaw({
42
- name: "lucide-chevron-right",
43
- render: render$1
44
- });
45
- //#endregion
46
- //#region src/components/GrSidebar/sidebarContext.ts
47
- var GR_SIDEBAR_KEY = Symbol.for("@feugene/granularity/sidebar");
48
- //#endregion
49
- //#region src/components/GrSidebar/GrSidebar.vue?vue&type=script&setup=true&lang.ts
50
- var _hoisted_1$1 = ["data-collapsed"];
51
- var _hoisted_2$1 = {
52
- key: 0,
53
- class: "min-w-0"
54
- };
55
- var _hoisted_3$1 = {
56
- key: 0,
57
- "data-gr-sidebar-subtitle": "",
58
- class: "truncate text-[14px] text-[var(--gr-muted-fg)]"
59
- };
60
- var _hoisted_4$1 = {
61
- key: 1,
62
- "data-gr-sidebar-title": "",
63
- class: "truncate text-[18px] font-700"
64
- };
65
- //#endregion
66
- //#region src/components/GrSidebar/GrSidebar.vue
67
- var GrSidebar_default = /* @__PURE__ */ defineComponent({
68
- __name: "GrSidebar",
69
- props: {
70
- title: { default: void 0 },
71
- subtitle: { default: void 0 },
72
- collapsed: {
73
- type: Boolean,
74
- default: false
75
- },
76
- showToggleButton: {
77
- type: Boolean,
78
- default: false
79
- },
80
- width: { default: "240px" },
81
- collapsedWidth: { default: "64px" },
82
- toggleLabel: { default: void 0 }
83
- },
84
- emits: ["update:collapsed"],
85
- setup(__props, { emit: __emit }) {
86
- /**
87
- * GrSidebar — боковая панель приложения с опциональным заголовком, кнопкой
88
- * сворачивания и слотом контента (обычно — список `GrSidebarItem`).
89
- *
90
- * - Свёрнутое состояние (`collapsed`, поддерживает `v-model:collapsed`) сужает
91
- * панель до иконочной ширины; `GrSidebarItem`'ы через inject показывают только
92
- * иконку (или первую букву метки).
93
- * - Кнопка тогла (`show-toggle-button`) переключает состояние.
94
- * - Хедер рендерится только если есть `title`/`subtitle` (или кнопка тогла) —
95
- * иначе панель начинается сразу с контента.
96
- * - Слоты `#title` / `#subtitle` имеют приоритет над одноимёнными пропами.
97
- */
98
- const props = __props;
99
- const emit = __emit;
100
- const collapsedState = ref(props.collapsed);
101
- watch(() => props.collapsed, (value) => collapsedState.value = value);
102
- function toggle() {
103
- collapsedState.value = !collapsedState.value;
104
- emit("update:collapsed", collapsedState.value);
105
- }
106
- provide(GR_SIDEBAR_KEY, { collapsed: collapsedState });
107
- const hasTitle = computed(() => Boolean(props.title));
108
- const hasSubtitle = computed(() => Boolean(props.subtitle));
109
- const showHeader = computed(() => Boolean(hasTitle.value || hasSubtitle.value || props.showToggleButton));
110
- const asideStyle = computed(() => ({ width: collapsedState.value ? props.collapsedWidth : props.width }));
111
- const resolvedToggleLabel = computed(() => props.toggleLabel ?? (collapsedState.value ? "Expand sidebar" : "Collapse sidebar"));
112
- return (_ctx, _cache) => {
113
- return openBlock(), createElementBlock("aside", {
114
- "data-gr-sidebar": "",
115
- "data-collapsed": collapsedState.value ? "true" : void 0,
116
- class: "flex flex-col border-r border-[var(--gr-sidebar-brd)] bg-[var(--gr-sidebar)] text-[var(--gr-sidebar-fg)] transition-[width] duration-200 ease-out",
117
- style: normalizeStyle(asideStyle.value)
118
- }, [showHeader.value ? (openBlock(), createElementBlock("div", {
119
- key: 0,
120
- "data-gr-sidebar-header": "",
121
- class: normalizeClass(["flex items-center gap-2 border-b border-[var(--gr-sidebar-brd)] px-3 py-4", collapsedState.value ? "justify-center" : "justify-between"])
122
- }, [!collapsedState.value && (hasTitle.value || hasSubtitle.value || _ctx.$slots.title || _ctx.$slots.subtitle) ? (openBlock(), createElementBlock("div", _hoisted_2$1, [_ctx.$slots.subtitle || hasSubtitle.value ? (openBlock(), createElementBlock("div", _hoisted_3$1, [renderSlot(_ctx.$slots, "subtitle", {}, () => [createTextVNode(toDisplayString(__props.subtitle), 1)])])) : createCommentVNode("", true), _ctx.$slots.title || hasTitle.value ? (openBlock(), createElementBlock("div", _hoisted_4$1, [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])])) : createCommentVNode("", true)])) : createCommentVNode("", true), __props.showToggleButton ? (openBlock(), createBlock(GrButton_default, {
123
- key: 1,
124
- "data-gr-sidebar-toggle": "",
125
- variant: "ghost",
126
- size: "sm",
127
- square: "",
128
- "aria-label": resolvedToggleLabel.value,
129
- "aria-expanded": collapsedState.value ? "false" : "true",
130
- onClick: toggle
131
- }, {
132
- default: withCtx(() => [createVNode(GrIcon_default, {
133
- size: 16,
134
- "aria-hidden": "true"
135
- }, {
136
- default: withCtx(() => [collapsedState.value ? (openBlock(), createBlock(unref(chevron_right_default), { key: 0 })) : (openBlock(), createBlock(unref(chevron_left_default), { key: 1 }))]),
137
- _: 1
138
- })]),
139
- _: 1
140
- }, 8, ["aria-label", "aria-expanded"])) : createCommentVNode("", true)], 2)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(["flex-1 overflow-y-auto", collapsedState.value ? "p-2" : "p-3"]) }, [renderSlot(_ctx.$slots, "default")], 2)], 12, _hoisted_1$1);
141
- };
142
- }
143
- });
144
- //#endregion
145
- //#region src/components/GrSidebar/GrSidebarItem.vue?vue&type=script&setup=true&lang.ts
146
- var _hoisted_1 = { class: "flex h-5 w-5 shrink-0 items-center justify-center" };
147
- var _hoisted_2 = {
148
- key: 2,
149
- class: "text-[13px] font-700 leading-none",
150
- "aria-hidden": "true"
151
- };
152
- var _hoisted_3 = { class: "min-w-0 flex-1 truncate text-left" };
153
- var _hoisted_4 = {
154
- key: 0,
155
- class: "shrink-0 rounded-full bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_12%,transparent)] px-1.5 py-0.5 text-[11px] font-600"
156
- };
157
- //#endregion
158
- //#region src/components/GrSidebar/GrSidebarItem.vue
159
- var GrSidebarItem_default = /* @__PURE__ */ defineComponent({
160
- __name: "GrSidebarItem",
161
- props: {
162
- label: {},
163
- icon: { default: void 0 },
164
- href: { default: void 0 },
165
- as: { default: void 0 },
166
- active: {
167
- type: Boolean,
168
- default: false
169
- },
170
- disabled: {
171
- type: Boolean,
172
- default: false
173
- },
174
- badge: { default: void 0 }
175
- },
176
- setup(__props) {
177
- /**
178
- * GrSidebarItem — пункт навигации боковой панели `GrSidebar`.
179
- *
180
- * Контракт:
181
- * - развёрнутая панель — `[иконка] метка [бейдж]`;
182
- * - свёрнутая панель — только иконка; если иконки нет, показывается ПЕРВАЯ БУКВА
183
- * метки (uppercase). В свёрнутом виде метка уходит в `title`/`aria-label` для
184
- * доступности и tooltip.
185
- *
186
- * Корневой тег: `as` → `<a href>` → `<button>` (в этом порядке).
187
- */
188
- const props = __props;
189
- const sidebar = inject(GR_SIDEBAR_KEY, null);
190
- const collapsed = computed(() => sidebar?.collapsed.value ?? false);
191
- const isStringIcon = computed(() => typeof props.icon === "string");
192
- const iconComponent = computed(() => props.icon && typeof props.icon !== "string" ? markRaw(props.icon) : null);
193
- const firstLetter = computed(() => props.label.trim().charAt(0).toUpperCase() || "•");
194
- const rootTag = computed(() => {
195
- if (props.disabled) return "span";
196
- if (props.as) return typeof props.as === "string" ? props.as : markRaw(props.as);
197
- return props.href ? "a" : "button";
198
- });
199
- const rootClass = computed(() => [
200
- "group relative flex w-full items-center rounded-lg text-sm transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]",
201
- collapsed.value ? "justify-center px-0 py-2" : "gap-3 px-3 py-2",
202
- props.disabled ? "cursor-not-allowed opacity-50" : props.active ? "bg-[var(--gr-muted)] font-600 text-[var(--gr-fg)]" : "text-[var(--gr-sidebar-fg)] hover:bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_8%,transparent)]"
203
- ]);
204
- return (_ctx, _cache) => {
205
- return openBlock(), createBlock(resolveDynamicComponent(rootTag.value), {
206
- "data-gr-sidebar-item": "",
207
- type: rootTag.value === "button" ? "button" : void 0,
208
- href: rootTag.value === "a" ? __props.href : void 0,
209
- "aria-current": __props.active ? "page" : void 0,
210
- "aria-disabled": __props.disabled ? "true" : void 0,
211
- title: collapsed.value ? __props.label : void 0,
212
- "aria-label": collapsed.value ? __props.label : void 0,
213
- class: normalizeClass(rootClass.value)
214
- }, {
215
- default: withCtx(() => [createElementVNode("span", _hoisted_1, [iconComponent.value ? (openBlock(), createBlock(resolveDynamicComponent(iconComponent.value), {
216
- key: 0,
217
- class: "h-5 w-5",
218
- "aria-hidden": "true"
219
- })) : isStringIcon.value ? (openBlock(), createElementBlock("span", {
220
- key: 1,
221
- class: normalizeClass([__props.icon, "block h-5 w-5"]),
222
- "aria-hidden": "true"
223
- }, null, 2)) : collapsed.value ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(firstLetter.value), 1)) : createCommentVNode("", true)]), !collapsed.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("span", _hoisted_3, toDisplayString(__props.label), 1), __props.badge != null ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.badge), 1)) : createCommentVNode("", true)], 64)) : createCommentVNode("", true)]),
224
- _: 1
225
- }, 8, [
226
- "type",
227
- "href",
228
- "aria-current",
229
- "aria-disabled",
230
- "title",
231
- "aria-label",
232
- "class"
233
- ]);
234
- };
235
- }
236
- });
237
- //#endregion
238
- export { GrSidebar_default as n, GrSidebarItem_default as t };
@@ -1 +0,0 @@
1
- {"version":3,"file":"GrSidebar-cvnzBfj3.js","names":["$slots"],"sources":["../../../../src/components/GrSidebar/sidebarContext.ts","../../../../src/components/GrSidebar/GrSidebar.vue","../../../../src/components/GrSidebar/GrSidebar.vue","../../../../src/components/GrSidebar/GrSidebarItem.vue","../../../../src/components/GrSidebar/GrSidebarItem.vue"],"sourcesContent":["import type { InjectionKey, Ref } from 'vue'\n\n/**\n * Контекст `GrSidebar`, который потребляют `GrSidebarItem`'ы: свёрнута ли панель.\n * В свёрнутом состоянии пункты показывают только иконку (или первую букву метки).\n */\nexport interface GrSidebarContext {\n collapsed: Ref<boolean>\n}\n\nexport const GR_SIDEBAR_KEY: InjectionKey<GrSidebarContext> = Symbol.for('@feugene/granularity/sidebar')\n","<script setup lang=\"ts\">\n/**\n * GrSidebar — боковая панель приложения с опциональным заголовком, кнопкой\n * сворачивания и слотом контента (обычно — список `GrSidebarItem`).\n *\n * - Свёрнутое состояние (`collapsed`, поддерживает `v-model:collapsed`) сужает\n * панель до иконочной ширины; `GrSidebarItem`'ы через inject показывают только\n * иконку (или первую букву метки).\n * - Кнопка тогла (`show-toggle-button`) переключает состояние.\n * - Хедер рендерится только если есть `title`/`subtitle` (или кнопка тогла) —\n * иначе панель начинается сразу с контента.\n * - Слоты `#title` / `#subtitle` имеют приоритет над одноимёнными пропами.\n */\nimport { computed, provide, ref, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport IconChevronLeft from '~icons/lucide/chevron-left'\nimport IconChevronRight from '~icons/lucide/chevron-right'\n\nimport { GR_SIDEBAR_KEY } from './sidebarContext'\n\nexport interface GrSidebarProps {\n title?: string\n subtitle?: string\n /** Свёрнутое состояние. Поддерживает `v-model:collapsed`. */\n collapsed?: boolean\n /** Показать кнопку сворачивания/разворачивания в хедере. */\n showToggleButton?: boolean\n /** Ширина в развёрнутом состоянии. */\n width?: string\n /** Ширина в свёрнутом состоянии. */\n collapsedWidth?: string\n /** A11y-лейбл кнопки тогла. */\n toggleLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrSidebarProps>(), {\n title: undefined,\n subtitle: undefined,\n collapsed: false,\n showToggleButton: false,\n width: '240px',\n collapsedWidth: '64px',\n toggleLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:collapsed', value: boolean): void\n}>()\n\n// Локальное состояние с синхронизацией из пропа — поддерживает и controlled\n// (`v-model:collapsed`), и uncontrolled (панель сама помнит состояние).\nconst collapsedState = ref(props.collapsed)\nwatch(() => props.collapsed, value => (collapsedState.value = value))\n\nfunction toggle(): void {\n collapsedState.value = !collapsedState.value\n emit('update:collapsed', collapsedState.value)\n}\n\n// Даём `GrSidebarItem`'ам знать про свёрнутость.\nprovide(GR_SIDEBAR_KEY, { collapsed: collapsedState })\n\nconst hasTitle = computed(() => Boolean(props.title))\nconst hasSubtitle = computed(() => Boolean(props.subtitle))\nconst showHeader = computed(() => Boolean(hasTitle.value || hasSubtitle.value || props.showToggleButton))\n\nconst asideStyle = computed(() => ({\n width: collapsedState.value ? props.collapsedWidth : props.width,\n}))\n\nconst resolvedToggleLabel = computed(() =>\n props.toggleLabel ?? (collapsedState.value ? 'Expand sidebar' : 'Collapse sidebar'),\n)\n</script>\n\n<template>\n <aside\n data-gr-sidebar\n :data-collapsed=\"collapsedState ? 'true' : undefined\"\n class=\"flex flex-col border-r border-[var(--gr-sidebar-brd)] bg-[var(--gr-sidebar)] text-[var(--gr-sidebar-fg)] transition-[width] duration-200 ease-out\"\n :style=\"asideStyle\"\n >\n <div\n v-if=\"showHeader\"\n data-gr-sidebar-header\n class=\"flex items-center gap-2 border-b border-[var(--gr-sidebar-brd)] px-3 py-4\"\n :class=\"collapsedState ? 'justify-center' : 'justify-between'\"\n >\n <div\n v-if=\"!collapsedState && (hasTitle || hasSubtitle || $slots.title || $slots.subtitle)\"\n class=\"min-w-0\"\n >\n <div\n v-if=\"$slots.subtitle || hasSubtitle\"\n data-gr-sidebar-subtitle\n class=\"truncate text-[14px] text-[var(--gr-muted-fg)]\"\n >\n <slot name=\"subtitle\">\n {{ subtitle }}\n </slot>\n </div>\n <div\n v-if=\"$slots.title || hasTitle\"\n data-gr-sidebar-title\n class=\"truncate text-[18px] font-700\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n </div>\n\n <GrButton\n v-if=\"showToggleButton\"\n data-gr-sidebar-toggle\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"resolvedToggleLabel\"\n :aria-expanded=\"collapsedState ? 'false' : 'true'\"\n @click=\"toggle\"\n >\n <GrIcon :size=\"16\" aria-hidden=\"true\">\n <IconChevronRight v-if=\"collapsedState\" />\n <IconChevronLeft v-else />\n </GrIcon>\n </GrButton>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\" :class=\"collapsedState ? 'p-2' : 'p-3'\">\n <slot />\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrSidebar — боковая панель приложения с опциональным заголовком, кнопкой\n * сворачивания и слотом контента (обычно — список `GrSidebarItem`).\n *\n * - Свёрнутое состояние (`collapsed`, поддерживает `v-model:collapsed`) сужает\n * панель до иконочной ширины; `GrSidebarItem`'ы через inject показывают только\n * иконку (или первую букву метки).\n * - Кнопка тогла (`show-toggle-button`) переключает состояние.\n * - Хедер рендерится только если есть `title`/`subtitle` (или кнопка тогла) —\n * иначе панель начинается сразу с контента.\n * - Слоты `#title` / `#subtitle` имеют приоритет над одноимёнными пропами.\n */\nimport { computed, provide, ref, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport IconChevronLeft from '~icons/lucide/chevron-left'\nimport IconChevronRight from '~icons/lucide/chevron-right'\n\nimport { GR_SIDEBAR_KEY } from './sidebarContext'\n\nexport interface GrSidebarProps {\n title?: string\n subtitle?: string\n /** Свёрнутое состояние. Поддерживает `v-model:collapsed`. */\n collapsed?: boolean\n /** Показать кнопку сворачивания/разворачивания в хедере. */\n showToggleButton?: boolean\n /** Ширина в развёрнутом состоянии. */\n width?: string\n /** Ширина в свёрнутом состоянии. */\n collapsedWidth?: string\n /** A11y-лейбл кнопки тогла. */\n toggleLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrSidebarProps>(), {\n title: undefined,\n subtitle: undefined,\n collapsed: false,\n showToggleButton: false,\n width: '240px',\n collapsedWidth: '64px',\n toggleLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:collapsed', value: boolean): void\n}>()\n\n// Локальное состояние с синхронизацией из пропа — поддерживает и controlled\n// (`v-model:collapsed`), и uncontrolled (панель сама помнит состояние).\nconst collapsedState = ref(props.collapsed)\nwatch(() => props.collapsed, value => (collapsedState.value = value))\n\nfunction toggle(): void {\n collapsedState.value = !collapsedState.value\n emit('update:collapsed', collapsedState.value)\n}\n\n// Даём `GrSidebarItem`'ам знать про свёрнутость.\nprovide(GR_SIDEBAR_KEY, { collapsed: collapsedState })\n\nconst hasTitle = computed(() => Boolean(props.title))\nconst hasSubtitle = computed(() => Boolean(props.subtitle))\nconst showHeader = computed(() => Boolean(hasTitle.value || hasSubtitle.value || props.showToggleButton))\n\nconst asideStyle = computed(() => ({\n width: collapsedState.value ? props.collapsedWidth : props.width,\n}))\n\nconst resolvedToggleLabel = computed(() =>\n props.toggleLabel ?? (collapsedState.value ? 'Expand sidebar' : 'Collapse sidebar'),\n)\n</script>\n\n<template>\n <aside\n data-gr-sidebar\n :data-collapsed=\"collapsedState ? 'true' : undefined\"\n class=\"flex flex-col border-r border-[var(--gr-sidebar-brd)] bg-[var(--gr-sidebar)] text-[var(--gr-sidebar-fg)] transition-[width] duration-200 ease-out\"\n :style=\"asideStyle\"\n >\n <div\n v-if=\"showHeader\"\n data-gr-sidebar-header\n class=\"flex items-center gap-2 border-b border-[var(--gr-sidebar-brd)] px-3 py-4\"\n :class=\"collapsedState ? 'justify-center' : 'justify-between'\"\n >\n <div\n v-if=\"!collapsedState && (hasTitle || hasSubtitle || $slots.title || $slots.subtitle)\"\n class=\"min-w-0\"\n >\n <div\n v-if=\"$slots.subtitle || hasSubtitle\"\n data-gr-sidebar-subtitle\n class=\"truncate text-[14px] text-[var(--gr-muted-fg)]\"\n >\n <slot name=\"subtitle\">\n {{ subtitle }}\n </slot>\n </div>\n <div\n v-if=\"$slots.title || hasTitle\"\n data-gr-sidebar-title\n class=\"truncate text-[18px] font-700\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n </div>\n\n <GrButton\n v-if=\"showToggleButton\"\n data-gr-sidebar-toggle\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"resolvedToggleLabel\"\n :aria-expanded=\"collapsedState ? 'false' : 'true'\"\n @click=\"toggle\"\n >\n <GrIcon :size=\"16\" aria-hidden=\"true\">\n <IconChevronRight v-if=\"collapsedState\" />\n <IconChevronLeft v-else />\n </GrIcon>\n </GrButton>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\" :class=\"collapsedState ? 'p-2' : 'p-3'\">\n <slot />\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrSidebarItem — пункт навигации боковой панели `GrSidebar`.\n *\n * Контракт:\n * - развёрнутая панель — `[иконка] метка [бейдж]`;\n * - свёрнутая панель — только иконка; если иконки нет, показывается ПЕРВАЯ БУКВА\n * метки (uppercase). В свёрнутом виде метка уходит в `title`/`aria-label` для\n * доступности и tooltip.\n *\n * Корневой тег: `as` → `<a href>` → `<button>` (в этом порядке).\n */\nimport { computed, inject, markRaw, type Component } from 'vue'\n\nimport { GR_SIDEBAR_KEY } from './sidebarContext'\n\nconst props = withDefaults(defineProps<{\n label: string\n /** Иконка: класс UnoCSS-иконки (`'i-lucide-home'`) или Vue-компонент. */\n icon?: string | Component\n href?: string\n as?: string | Component\n active?: boolean\n disabled?: boolean\n badge?: string | number\n}>(), {\n icon: undefined,\n href: undefined,\n as: undefined,\n active: false,\n disabled: false,\n badge: undefined,\n})\n\nconst sidebar = inject(GR_SIDEBAR_KEY, null)\nconst collapsed = computed(() => sidebar?.collapsed.value ?? false)\n\nconst isStringIcon = computed(() => typeof props.icon === 'string')\nconst iconComponent = computed(() => (props.icon && typeof props.icon !== 'string' ? markRaw(props.icon as Component) : null))\nconst firstLetter = computed(() => props.label.trim().charAt(0).toUpperCase() || '•')\n\nconst rootTag = computed<string | Component>(() => {\n if (props.disabled) return 'span'\n if (props.as) return typeof props.as === 'string' ? props.as : markRaw(props.as)\n return props.href ? 'a' : 'button'\n})\n\nconst rootClass = computed(() => [\n 'group relative flex w-full items-center rounded-lg text-sm transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]',\n collapsed.value ? 'justify-center px-0 py-2' : 'gap-3 px-3 py-2',\n props.disabled\n ? 'cursor-not-allowed opacity-50'\n : props.active\n ? 'bg-[var(--gr-muted)] font-600 text-[var(--gr-fg)]'\n : 'text-[var(--gr-sidebar-fg)] hover:bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_8%,transparent)]',\n])\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n data-gr-sidebar-item\n :type=\"rootTag === 'button' ? 'button' : undefined\"\n :href=\"rootTag === 'a' ? href : undefined\"\n :aria-current=\"active ? 'page' : undefined\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :title=\"collapsed ? label : undefined\"\n :aria-label=\"collapsed ? label : undefined\"\n :class=\"rootClass\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n <component :is=\"iconComponent\" v-if=\"iconComponent\" class=\"h-5 w-5\" aria-hidden=\"true\" />\n <span v-else-if=\"isStringIcon\" :class=\"icon\" class=\"block h-5 w-5\" aria-hidden=\"true\" />\n <span v-else-if=\"collapsed\" class=\"text-[13px] font-700 leading-none\" aria-hidden=\"true\">{{ firstLetter }}</span>\n </span>\n\n <template v-if=\"!collapsed\">\n <span class=\"min-w-0 flex-1 truncate text-left\">{{ label }}</span>\n <span\n v-if=\"badge != null\"\n class=\"shrink-0 rounded-full bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_12%,transparent)] px-1.5 py-0.5 text-[11px] font-600\"\n >{{ badge }}</span>\n </template>\n </component>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrSidebarItem — пункт навигации боковой панели `GrSidebar`.\n *\n * Контракт:\n * - развёрнутая панель — `[иконка] метка [бейдж]`;\n * - свёрнутая панель — только иконка; если иконки нет, показывается ПЕРВАЯ БУКВА\n * метки (uppercase). В свёрнутом виде метка уходит в `title`/`aria-label` для\n * доступности и tooltip.\n *\n * Корневой тег: `as` → `<a href>` → `<button>` (в этом порядке).\n */\nimport { computed, inject, markRaw, type Component } from 'vue'\n\nimport { GR_SIDEBAR_KEY } from './sidebarContext'\n\nconst props = withDefaults(defineProps<{\n label: string\n /** Иконка: класс UnoCSS-иконки (`'i-lucide-home'`) или Vue-компонент. */\n icon?: string | Component\n href?: string\n as?: string | Component\n active?: boolean\n disabled?: boolean\n badge?: string | number\n}>(), {\n icon: undefined,\n href: undefined,\n as: undefined,\n active: false,\n disabled: false,\n badge: undefined,\n})\n\nconst sidebar = inject(GR_SIDEBAR_KEY, null)\nconst collapsed = computed(() => sidebar?.collapsed.value ?? false)\n\nconst isStringIcon = computed(() => typeof props.icon === 'string')\nconst iconComponent = computed(() => (props.icon && typeof props.icon !== 'string' ? markRaw(props.icon as Component) : null))\nconst firstLetter = computed(() => props.label.trim().charAt(0).toUpperCase() || '•')\n\nconst rootTag = computed<string | Component>(() => {\n if (props.disabled) return 'span'\n if (props.as) return typeof props.as === 'string' ? props.as : markRaw(props.as)\n return props.href ? 'a' : 'button'\n})\n\nconst rootClass = computed(() => [\n 'group relative flex w-full items-center rounded-lg text-sm transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]',\n collapsed.value ? 'justify-center px-0 py-2' : 'gap-3 px-3 py-2',\n props.disabled\n ? 'cursor-not-allowed opacity-50'\n : props.active\n ? 'bg-[var(--gr-muted)] font-600 text-[var(--gr-fg)]'\n : 'text-[var(--gr-sidebar-fg)] hover:bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_8%,transparent)]',\n])\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n data-gr-sidebar-item\n :type=\"rootTag === 'button' ? 'button' : undefined\"\n :href=\"rootTag === 'a' ? href : undefined\"\n :aria-current=\"active ? 'page' : undefined\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :title=\"collapsed ? label : undefined\"\n :aria-label=\"collapsed ? label : undefined\"\n :class=\"rootClass\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n <component :is=\"iconComponent\" v-if=\"iconComponent\" class=\"h-5 w-5\" aria-hidden=\"true\" />\n <span v-else-if=\"isStringIcon\" :class=\"icon\" class=\"block h-5 w-5\" aria-hidden=\"true\" />\n <span v-else-if=\"collapsed\" class=\"text-[13px] font-700 leading-none\" aria-hidden=\"true\">{{ firstLetter }}</span>\n </span>\n\n <template v-if=\"!collapsed\">\n <span class=\"min-w-0 flex-1 truncate text-left\">{{ label }}</span>\n <span\n v-if=\"badge != null\"\n class=\"shrink-0 rounded-full bg-[color-mix(in_srgb,var(--gr-sidebar-fg)_12%,transparent)] px-1.5 py-0.5 text-[11px] font-600\"\n >{{ badge }}</span>\n </template>\n </component>\n</template>\n"],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { createElementBlock, defineComponent, normalizeStyle, openBlock } from "vue";
2
- import '../../../GrSkeleton.css';//#endregion
3
- //#region src/components/GrSkeleton/GrSkeleton.vue
4
- var GrSkeleton_default = /* @__PURE__ */ defineComponent({
5
- __name: "GrSkeleton",
6
- props: {
7
- height: { default: "12px" },
8
- width: { default: "100%" },
9
- rounded: { default: "9999px" }
10
- },
11
- setup(__props) {
12
- /**
13
- * GrSkeleton — заглушка-плейсхолдер для загружающегося контента.
14
- *
15
- * Помечен `aria-hidden="true"`, чтобы скринридер не озвучивал «пустой» узел;
16
- * внешний контейнер обычно имеет `aria-busy="true"` + `aria-live`.
17
- */
18
- return (_ctx, _cache) => {
19
- return openBlock(), createElementBlock("div", {
20
- "data-gr-skeleton": "",
21
- "aria-hidden": "true",
22
- class: "bg-[var(--gr-muted)] border border-[var(--gr-brd)]",
23
- style: normalizeStyle({
24
- height: __props.height,
25
- width: __props.width,
26
- borderRadius: __props.rounded
27
- })
28
- }, null, 4);
29
- };
30
- }
31
- });
32
- //#endregion
33
- export { GrSkeleton_default as t };
@@ -1 +0,0 @@
1
- {"version":3,"file":"GrSkeleton-BucA5F4J.js","names":[],"sources":["../../../../src/components/GrSkeleton/GrSkeleton.vue","../../../../src/components/GrSkeleton/GrSkeleton.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrSkeleton — заглушка-плейсхолдер для загружающегося контента.\n *\n * Помечен `aria-hidden=\"true\"`, чтобы скринридер не озвучивал «пустой» узел;\n * внешний контейнер обычно имеет `aria-busy=\"true\"` + `aria-live`.\n */\nexport interface GrSkeletonProps {\n height?: string\n width?: string\n rounded?: string\n}\n\nwithDefaults(defineProps<GrSkeletonProps>(), {\n height: '12px',\n width: '100%',\n rounded: '9999px',\n})\n</script>\n\n<template>\n <div\n data-gr-skeleton\n aria-hidden=\"true\"\n class=\"bg-[var(--gr-muted)] border border-[var(--gr-brd)]\"\n :style=\"{ height, width, borderRadius: rounded }\"\n />\n</template>\n\n<style>\n@keyframes gr-skeleton-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n[data-gr-skeleton] {\n animation: gr-skeleton-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n [data-gr-skeleton] {\n animation: none;\n }\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * GrSkeleton — заглушка-плейсхолдер для загружающегося контента.\n *\n * Помечен `aria-hidden=\"true\"`, чтобы скринридер не озвучивал «пустой» узел;\n * внешний контейнер обычно имеет `aria-busy=\"true\"` + `aria-live`.\n */\nexport interface GrSkeletonProps {\n height?: string\n width?: string\n rounded?: string\n}\n\nwithDefaults(defineProps<GrSkeletonProps>(), {\n height: '12px',\n width: '100%',\n rounded: '9999px',\n})\n</script>\n\n<template>\n <div\n data-gr-skeleton\n aria-hidden=\"true\"\n class=\"bg-[var(--gr-muted)] border border-[var(--gr-brd)]\"\n :style=\"{ height, width, borderRadius: rounded }\"\n />\n</template>\n\n<style>\n@keyframes gr-skeleton-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n[data-gr-skeleton] {\n animation: gr-skeleton-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n [data-gr-skeleton] {\n animation: none;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;uBAqBE,mBAKE,OAAA;IAJE,oBAAA;IACA,eAAY;IACZ,OAAM;IACL,OAAK,eAAA;KAAA,QAAI,QAAA;KAAM,OAAE,QAAA;KAAK,cAAgB,QAAA;IAAO,CAAA"}