@feugene/granularity 0.18.0 → 0.20.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 (1070) hide show
  1. package/README.md +8 -0
  2. package/dist/chunks/chevron-left-D8AUBAM7.js +23 -0
  3. package/dist/chunks/chevron-left-D8AUBAM7.js.map +1 -0
  4. package/dist/chunks/chevron-right-C6Z01h0X.js +23 -0
  5. package/dist/chunks/chevron-right-C6Z01h0X.js.map +1 -0
  6. package/dist/chunks/config-9PYRZlKE.js +84 -0
  7. package/dist/chunks/config-9PYRZlKE.js.map +1 -0
  8. package/dist/chunks/config-B4w5gBD0.js +89 -0
  9. package/dist/chunks/config-B4w5gBD0.js.map +1 -0
  10. package/dist/chunks/config-BE6n20np.js.map +1 -0
  11. package/dist/chunks/config-BEVBsvni.js +197 -0
  12. package/dist/chunks/config-BEVBsvni.js.map +1 -0
  13. package/dist/chunks/config-BJ7Bv_G2.js +148 -0
  14. package/dist/chunks/config-BJ7Bv_G2.js.map +1 -0
  15. package/dist/chunks/config-BTCOJO5z.js +37 -0
  16. package/dist/chunks/config-BTCOJO5z.js.map +1 -0
  17. package/dist/chunks/config-Be9k9bOf.js +97 -0
  18. package/dist/chunks/config-Be9k9bOf.js.map +1 -0
  19. package/dist/chunks/config-BfsBepkH2.js +83 -0
  20. package/dist/chunks/config-BfsBepkH2.js.map +1 -0
  21. package/dist/chunks/config-Bsh948nP.js +85 -0
  22. package/dist/chunks/config-Bsh948nP.js.map +1 -0
  23. package/dist/chunks/config-CDat1wXf.js +11 -0
  24. package/dist/chunks/config-CDat1wXf.js.map +1 -0
  25. package/dist/chunks/config-COpuWGr_2.js.map +1 -0
  26. package/dist/chunks/config-DAX8Deh12.js +68 -0
  27. package/dist/chunks/config-DAX8Deh12.js.map +1 -0
  28. package/dist/chunks/config-DCFvmHEv.js.map +1 -0
  29. package/dist/chunks/config-DKdlqXiY.js.map +1 -1
  30. package/dist/chunks/config-DWN4x6_e.js +159 -0
  31. package/dist/chunks/config-DWN4x6_e.js.map +1 -0
  32. package/dist/chunks/config-Dgj1Q6JY.js +26 -0
  33. package/dist/chunks/config-Dgj1Q6JY.js.map +1 -0
  34. package/dist/chunks/config-Dguto_6o.js +108 -0
  35. package/dist/chunks/config-Dguto_6o.js.map +1 -0
  36. package/dist/chunks/config-WTNhdh6T.js.map +1 -0
  37. package/dist/chunks/config-eXB87DOi2.js.map +1 -0
  38. package/dist/chunks/config-vSji8w90.js +85 -0
  39. package/dist/chunks/config-vSji8w90.js.map +1 -0
  40. package/dist/chunks/context-CTbuwcYs.js +133 -0
  41. package/dist/chunks/context-CTbuwcYs.js.map +1 -0
  42. package/dist/chunks/generated-BRkbhyxk.js +3270 -0
  43. package/dist/chunks/generated-BRkbhyxk.js.map +1 -0
  44. package/dist/chunks/grRadioStyles-BTjGNhtU.js +96 -0
  45. package/dist/chunks/grRadioStyles-BTjGNhtU.js.map +1 -0
  46. package/dist/chunks/granular-provider-CZYm70Pm.js +195 -0
  47. package/dist/chunks/granular-provider-CZYm70Pm.js.map +1 -0
  48. package/dist/chunks/grip-vertical-lRha2S7q.js +16 -0
  49. package/dist/chunks/grip-vertical-lRha2S7q.js.map +1 -0
  50. package/dist/chunks/icon-Dag2tIMs.js +21 -0
  51. package/dist/chunks/icon-Dag2tIMs.js.map +1 -0
  52. package/dist/chunks/portalRoot-CVhCgdG6.js +44 -0
  53. package/dist/chunks/portalRoot-CVhCgdG6.js.map +1 -0
  54. package/dist/chunks/useModalOverlay-Cv5hF63W.js +212 -0
  55. package/dist/chunks/useModalOverlay-Cv5hF63W.js.map +1 -0
  56. package/dist/chunks/usePortalTarget-C0p-mhaM.js +77 -0
  57. package/dist/chunks/usePortalTarget-C0p-mhaM.js.map +1 -0
  58. package/dist/chunks/validation-DauXRIkL.js +178 -0
  59. package/dist/chunks/validation-DauXRIkL.js.map +1 -0
  60. package/dist/components/GrAlert/chunks/GrAlert-B21QGele.js +258 -0
  61. package/dist/components/GrAlert/chunks/GrAlert-B21QGele.js.map +1 -0
  62. package/dist/components/GrAlert/index.js +2 -2
  63. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-DsevPtiS.js +860 -0
  64. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-DsevPtiS.js.map +1 -0
  65. package/dist/components/GrAutocomplete/index.js +1 -1
  66. package/dist/components/GrAutocomplete/styles.css +1 -1
  67. package/dist/components/GrAvatar/chunks/GrAvatar-BbdKRX8i.js +222 -0
  68. package/dist/components/GrAvatar/chunks/GrAvatar-BbdKRX8i.js.map +1 -0
  69. package/dist/components/GrAvatar/index.js +3 -3
  70. package/dist/components/GrBadge/chunks/GrBadge-u2ZdS7CN.js +40 -0
  71. package/dist/components/GrBadge/chunks/GrBadge-u2ZdS7CN.js.map +1 -0
  72. package/dist/components/GrBadge/index.js +1 -1
  73. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DDoFQscR.js +97 -0
  74. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DDoFQscR.js.map +1 -0
  75. package/dist/components/GrBadgeWrap/index.js +3 -3
  76. package/dist/components/GrBottomNav/chunks/GrBottomNav-JUu4ylYv.js +117 -0
  77. package/dist/components/GrBottomNav/chunks/GrBottomNav-JUu4ylYv.js.map +1 -0
  78. package/dist/components/GrBottomNav/index.js +3 -3
  79. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-CQ44iU2o.js +267 -0
  80. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-CQ44iU2o.js.map +1 -0
  81. package/dist/components/GrBreadcrumbs/index.js +1 -1
  82. package/dist/components/GrButton/chunks/GrButton-Bw2AH4uX.js +153 -0
  83. package/dist/components/GrButton/chunks/GrButton-Bw2AH4uX.js.map +1 -0
  84. package/dist/components/GrButton/index.js +2 -3
  85. package/dist/components/GrCard/chunks/GrCard-DfIZOP5N.js +89 -0
  86. package/dist/components/GrCard/chunks/GrCard-DfIZOP5N.js.map +1 -0
  87. package/dist/components/GrCard/index.js +1 -1
  88. package/dist/components/GrCheckbox/chunks/GrCheckbox-CEcHIsXM.js +262 -0
  89. package/dist/components/GrCheckbox/chunks/GrCheckbox-CEcHIsXM.js.map +1 -0
  90. package/dist/components/GrCheckbox/index.js +2 -2
  91. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-BOwrVcFr.js +140 -0
  92. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-BOwrVcFr.js.map +1 -0
  93. package/dist/components/GrCheckboxGroup/index.js +1 -1
  94. package/dist/components/GrCollapse/chunks/GrCollapse-KFcrji1L.js +294 -0
  95. package/dist/components/GrCollapse/chunks/GrCollapse-KFcrji1L.js.map +1 -0
  96. package/dist/components/GrCollapse/index.js +2 -2
  97. package/dist/components/GrColorPicker/chunks/GrColorPicker-qQdoEPHF.js +584 -0
  98. package/dist/components/GrColorPicker/chunks/GrColorPicker-qQdoEPHF.js.map +1 -0
  99. package/dist/components/GrColorPicker/index.js +2 -2
  100. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-BFcMf4Pn.js +591 -0
  101. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-BFcMf4Pn.js.map +1 -0
  102. package/dist/components/GrCommandPalette/index.js +3 -3
  103. package/dist/components/GrCommandPalette/styles.css +1 -1
  104. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-UP-EaoAf.js +144 -0
  105. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-UP-EaoAf.js.map +1 -0
  106. package/dist/components/GrConfigProvider/index.js +3 -3
  107. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-rRtMScJX.js +200 -0
  108. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-rRtMScJX.js.map +1 -0
  109. package/dist/components/GrConfirmDialog/index.js +1 -1
  110. package/dist/components/GrDataTable/chunks/GrDataTable-CNvZg2HZ.js +1055 -0
  111. package/dist/components/GrDataTable/chunks/GrDataTable-CNvZg2HZ.js.map +1 -0
  112. package/dist/components/GrDataTable/index.js +3 -3
  113. package/dist/components/GrDialog/chunks/GrDialog-D0U5iRqV.js +255 -0
  114. package/dist/components/GrDialog/chunks/GrDialog-D0U5iRqV.js.map +1 -0
  115. package/dist/components/GrDialog/index.js +2 -3
  116. package/dist/components/GrDialogService/chunks/GrDialogService-CrwA4aJq.js +656 -0
  117. package/dist/components/GrDialogService/chunks/GrDialogService-CrwA4aJq.js.map +1 -0
  118. package/dist/components/GrDialogService/index.js +2 -2
  119. package/dist/components/GrDivider/chunks/GrDivider-CAhm9jbE.js +109 -0
  120. package/dist/components/GrDivider/chunks/GrDivider-CAhm9jbE.js.map +1 -0
  121. package/dist/components/GrDivider/index.js +1 -1
  122. package/dist/components/GrDrawer/chunks/GrDrawer-C3zAg2tG.js +251 -0
  123. package/dist/components/GrDrawer/chunks/GrDrawer-C3zAg2tG.js.map +1 -0
  124. package/dist/components/GrDrawer/index.js +1 -1
  125. package/dist/components/GrDropdown/chunks/GrDropdown-BSfFOcDx.js +300 -0
  126. package/dist/components/GrDropdown/chunks/GrDropdown-BSfFOcDx.js.map +1 -0
  127. package/dist/components/GrDropdown/index.js +1 -1
  128. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-LOaFSCyd.js +421 -0
  129. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-LOaFSCyd.js.map +1 -0
  130. package/dist/components/GrDropdownMenu/index.js +2 -2
  131. package/dist/components/GrEmptyState/chunks/GrEmptyState-CS9do8eM.js +86 -0
  132. package/dist/components/GrEmptyState/chunks/GrEmptyState-CS9do8eM.js.map +1 -0
  133. package/dist/components/GrEmptyState/index.js +3 -3
  134. package/dist/components/GrFileUpload/chunks/GrFileUpload-D3-vC-ap.js +1080 -0
  135. package/dist/components/GrFileUpload/chunks/GrFileUpload-D3-vC-ap.js.map +1 -0
  136. package/dist/components/GrFileUpload/index.js +3 -3
  137. package/dist/components/GrForm/chunks/GrForm-DdJw23Pz.js +326 -0
  138. package/dist/components/GrForm/chunks/GrForm-DdJw23Pz.js.map +1 -0
  139. package/dist/components/GrForm/index.js +4 -4
  140. package/dist/components/GrFormField/chunks/GrFormField-kqfVY30N.js +190 -0
  141. package/dist/components/GrFormField/chunks/GrFormField-kqfVY30N.js.map +1 -0
  142. package/dist/components/GrFormField/index.js +3 -3
  143. package/dist/components/GrFormFile/chunks/GrFormFile-D722xHn8.js +452 -0
  144. package/dist/components/GrFormFile/chunks/GrFormFile-D722xHn8.js.map +1 -0
  145. package/dist/components/GrFormFile/index.js +1 -1
  146. package/dist/components/GrFormSection/chunks/GrFormSection-CdGWvzXO.js +63 -0
  147. package/dist/components/GrFormSection/chunks/GrFormSection-CdGWvzXO.js.map +1 -0
  148. package/dist/components/GrFormSection/index.js +3 -3
  149. package/dist/components/GrIcon/chunks/GrIcon-bQwtZtYT.js +57 -0
  150. package/dist/components/GrIcon/chunks/GrIcon-bQwtZtYT.js.map +1 -0
  151. package/dist/components/GrIcon/index.js +1 -1
  152. package/dist/components/GrImageViewer/chunks/GrImageViewer-CMO10TS7.js +1128 -0
  153. package/dist/components/GrImageViewer/chunks/GrImageViewer-CMO10TS7.js.map +1 -0
  154. package/dist/components/GrImageViewer/index.js +1 -1
  155. package/dist/components/GrInput/chunks/GrInput-Bb_pxqpT.js +348 -0
  156. package/dist/components/GrInput/chunks/GrInput-Bb_pxqpT.js.map +1 -0
  157. package/dist/components/GrInput/index.js +1 -1
  158. package/dist/components/GrInputTag/chunks/GrInputTag-Dghhg03-.js +512 -0
  159. package/dist/components/GrInputTag/chunks/GrInputTag-Dghhg03-.js.map +1 -0
  160. package/dist/components/GrInputTag/index.js +1 -1
  161. package/dist/components/GrKbd/chunks/GrKbd-BXbhsH0M.js +358 -0
  162. package/dist/components/GrKbd/chunks/GrKbd-BXbhsH0M.js.map +1 -0
  163. package/dist/components/GrKbd/index.js +1 -1
  164. package/dist/components/GrLink/chunks/GrLink-BQb7U4so.js +163 -0
  165. package/dist/components/GrLink/chunks/GrLink-BQb7U4so.js.map +1 -0
  166. package/dist/components/GrLink/index.js +1 -1
  167. package/dist/components/GrList/chunks/GrList-CHibO0xA.js +277 -0
  168. package/dist/components/GrList/chunks/GrList-CHibO0xA.js.map +1 -0
  169. package/dist/components/GrList/index.js +1 -1
  170. package/dist/components/GrLoading/chunks/GrLoading-C3DZSSuh.js +101 -0
  171. package/dist/components/GrLoading/chunks/GrLoading-C3DZSSuh.js.map +1 -0
  172. package/dist/components/GrLoading/index.js +1 -1
  173. package/dist/components/GrModal/chunks/GrModal-CPz7SWD_.js +313 -0
  174. package/dist/components/GrModal/chunks/GrModal-CPz7SWD_.js.map +1 -0
  175. package/dist/components/GrModal/index.js +1 -1
  176. package/dist/components/GrNavbar/chunks/GrNavbar-DWaaoV7n.js +104 -0
  177. package/dist/components/GrNavbar/chunks/GrNavbar-DWaaoV7n.js.map +1 -0
  178. package/dist/components/GrNavbar/index.js +1 -1
  179. package/dist/components/GrNumberInput/chunks/GrNumberInput-BotnzW77.js +659 -0
  180. package/dist/components/GrNumberInput/chunks/GrNumberInput-BotnzW77.js.map +1 -0
  181. package/dist/components/GrNumberInput/index.js +1 -1
  182. package/dist/components/GrPagination/chunks/GrPagination-GtGtSMJG.js +283 -0
  183. package/dist/components/GrPagination/chunks/GrPagination-GtGtSMJG.js.map +1 -0
  184. package/dist/components/GrPagination/index.js +1 -1
  185. package/dist/components/GrPopover/chunks/GrPopover-b70bIlQ9.js +216 -0
  186. package/dist/components/GrPopover/chunks/GrPopover-b70bIlQ9.js.map +1 -0
  187. package/dist/components/GrPopover/index.js +1 -1
  188. package/dist/components/GrProgressBar/chunks/GrProgressBar-hszUOC8f.js +90 -0
  189. package/dist/components/GrProgressBar/chunks/GrProgressBar-hszUOC8f.js.map +1 -0
  190. package/dist/components/GrProgressBar/index.js +1 -1
  191. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-BeUx1g1f.js +202 -0
  192. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-BeUx1g1f.js.map +1 -0
  193. package/dist/components/GrProgressCircle/index.js +2 -2
  194. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-CEI8bf-t.js +348 -0
  195. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-CEI8bf-t.js.map +1 -0
  196. package/dist/components/GrPromptDialog/index.js +1 -1
  197. package/dist/components/GrRadio/chunks/GrRadio-BdhknbO8.js +253 -0
  198. package/dist/components/GrRadio/chunks/GrRadio-BdhknbO8.js.map +1 -0
  199. package/dist/components/GrRadio/index.js +3 -3
  200. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BVmjKXcv.js +196 -0
  201. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BVmjKXcv.js.map +1 -0
  202. package/dist/components/GrRadioGroup/index.js +1 -1
  203. package/dist/components/GrRating/chunks/GrRating-BSEtaibx.js +316 -0
  204. package/dist/components/GrRating/chunks/GrRating-BSEtaibx.js.map +1 -0
  205. package/dist/components/GrRating/index.js +1 -1
  206. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CZONq8uT.js +777 -0
  207. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CZONq8uT.js.map +1 -0
  208. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CgfAwlg3.js +224 -0
  209. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CgfAwlg3.js.map +1 -0
  210. package/dist/components/GrResponseErrorBanner/index.js +3 -3
  211. package/dist/components/GrSegmented/chunks/GrSegmented-DP9WMAbm.js +388 -0
  212. package/dist/components/GrSegmented/chunks/GrSegmented-DP9WMAbm.js.map +1 -0
  213. package/dist/components/GrSegmented/index.js +3 -3
  214. package/dist/components/GrSelect/chunks/GrSelect-CaGuyvtb.js +1384 -0
  215. package/dist/components/GrSelect/chunks/GrSelect-CaGuyvtb.js.map +1 -0
  216. package/dist/components/GrSelect/index.js +1 -1
  217. package/dist/components/GrSelect/styles.css +1 -1
  218. package/dist/components/GrSidebar/chunks/GrSidebar-DG_t4aPE.js +258 -0
  219. package/dist/components/GrSidebar/chunks/GrSidebar-DG_t4aPE.js.map +1 -0
  220. package/dist/components/GrSidebar/index.js +3 -3
  221. package/dist/components/GrSkeleton/chunks/GrSkeleton-CgfXxPQ2.js +78 -0
  222. package/dist/components/GrSkeleton/chunks/GrSkeleton-CgfXxPQ2.js.map +1 -0
  223. package/dist/components/GrSkeleton/index.js +2 -2
  224. package/dist/components/GrSlider/chunks/GrSlider-s99yAyz6.js +379 -0
  225. package/dist/components/GrSlider/chunks/GrSlider-s99yAyz6.js.map +1 -0
  226. package/dist/components/GrSlider/index.js +1 -1
  227. package/dist/components/GrSortableList/chunks/GrSortableList-DJFPdUVv.js +277 -0
  228. package/dist/components/GrSortableList/chunks/GrSortableList-DJFPdUVv.js.map +1 -0
  229. package/dist/components/GrSortableList/index.js +2 -2
  230. package/dist/components/GrSplitter/chunks/GrSplitter-B9_JrT7q.js +259 -0
  231. package/dist/components/GrSplitter/chunks/GrSplitter-B9_JrT7q.js.map +1 -0
  232. package/dist/components/GrSplitter/index.js +3 -3
  233. package/dist/components/GrStatistic/chunks/GrStatistic-C3VpykHo.js +366 -0
  234. package/dist/components/GrStatistic/chunks/GrStatistic-C3VpykHo.js.map +1 -0
  235. package/dist/components/GrStatistic/index.js +2 -2
  236. package/dist/components/GrSwitch/chunks/GrSwitch-x_vQQ6ao.js +183 -0
  237. package/dist/components/GrSwitch/chunks/GrSwitch-x_vQQ6ao.js.map +1 -0
  238. package/dist/components/GrSwitch/index.js +1 -1
  239. package/dist/components/GrTabPanels/chunks/GrTabPanels-AJt1w1XC.js +81 -0
  240. package/dist/components/GrTabPanels/chunks/GrTabPanels-AJt1w1XC.js.map +1 -0
  241. package/dist/components/GrTabPanels/index.js +3 -3
  242. package/dist/components/GrTable/chunks/GrTable-f3qCWa99.js +169 -0
  243. package/dist/components/GrTable/chunks/GrTable-f3qCWa99.js.map +1 -0
  244. package/dist/components/GrTable/index.js +2 -2
  245. package/dist/components/GrTabs/chunks/GrTabs-CBHZkOFY.js +262 -0
  246. package/dist/components/GrTabs/chunks/GrTabs-CBHZkOFY.js.map +1 -0
  247. package/dist/components/GrTabs/index.js +3 -3
  248. package/dist/components/GrTextarea/chunks/GrTextarea-CNnkcIG1.js +241 -0
  249. package/dist/components/GrTextarea/chunks/GrTextarea-CNnkcIG1.js.map +1 -0
  250. package/dist/components/GrTextarea/index.js +1 -1
  251. package/dist/components/GrTimeline/chunks/GrTimeline-DlTraRn5.js +274 -0
  252. package/dist/components/GrTimeline/chunks/GrTimeline-DlTraRn5.js.map +1 -0
  253. package/dist/components/GrTimeline/index.js +3 -3
  254. package/dist/components/GrToaster/chunks/GrToaster-Db2NgrXu.js +373 -0
  255. package/dist/components/GrToaster/chunks/GrToaster-Db2NgrXu.js.map +1 -0
  256. package/dist/components/GrToaster/index.js +1 -1
  257. package/dist/components/GrTooltip/chunks/GrTooltip-B6AwE_UX.js +185 -0
  258. package/dist/components/GrTooltip/chunks/GrTooltip-B6AwE_UX.js.map +1 -0
  259. package/dist/components/GrTooltip/index.js +1 -1
  260. package/dist/components/GrTree/chunks/GrTree-BvOeQ3xJ.js +1376 -0
  261. package/dist/components/GrTree/chunks/GrTree-BvOeQ3xJ.js.map +1 -0
  262. package/dist/components/GrTree/index.js +2 -2
  263. package/dist/components/GrTree/styles.css +1 -1
  264. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-_LjTRR7X.js +633 -0
  265. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-_LjTRR7X.js.map +1 -0
  266. package/dist/components/GrTreeSelect/index.js +2 -2
  267. package/dist/composables/useAnnouncer.js +1 -1
  268. package/dist/composables/useGrComponentConfig.js +1 -1
  269. package/dist/composables/usePortalTarget.js +1 -1
  270. package/dist/directives/loading.js +2 -2
  271. package/dist/granular-provider-node.js +1 -1
  272. package/dist/granular-provider.js +1 -1
  273. package/dist/index.js +95 -96
  274. package/dist/styles/themes/dark.css +6 -1
  275. package/dist/testing.js +230 -0
  276. package/dist/testing.js.map +1 -0
  277. package/dist/theme-apply.js +33 -0
  278. package/dist/theme-apply.js.map +1 -0
  279. package/dist/theme.js +501 -0
  280. package/dist/theme.js.map +1 -0
  281. package/dist/tokens.js +1 -3215
  282. package/dist/types/components/GrAlert/index.d.ts +7 -0
  283. package/dist/types/components/GrAvatar/index.d.ts +9 -0
  284. package/dist/types/components/GrBadgeWrap/index.d.ts +7 -0
  285. package/dist/types/components/GrBottomNav/index.d.ts +8 -0
  286. package/dist/types/components/GrBreadcrumbs/grBreadcrumbsStyles.d.ts +89 -0
  287. package/dist/types/components/GrButton/index.d.ts +10 -0
  288. package/dist/types/components/GrCheckbox/index.d.ts +12 -0
  289. package/dist/types/components/GrCollapse/index.d.ts +8 -0
  290. package/dist/types/components/GrColorPicker/index.d.ts +11 -0
  291. package/dist/types/components/GrCommandPalette/GrCommandPalette.vue.d.ts +163 -0
  292. package/dist/types/components/GrCommandPalette/filtering.d.ts +63 -0
  293. package/dist/types/components/GrCommandPalette/index.d.ts +9 -0
  294. package/dist/types/components/GrConfigProvider/index.d.ts +6 -0
  295. package/dist/types/components/GrDataTable/grDataTableStyles.d.ts +67 -0
  296. package/dist/types/components/GrDataTable/index.d.ts +12 -0
  297. package/dist/types/components/GrDialog/index.d.ts +12 -0
  298. package/dist/types/components/GrDialogService/index.d.ts +6 -0
  299. package/dist/types/components/GrDropdownMenu/index.d.ts +21 -0
  300. package/dist/types/components/GrEmptyState/index.d.ts +7 -0
  301. package/dist/types/components/GrFileUpload/index.d.ts +17 -0
  302. package/dist/types/components/GrForm/index.d.ts +10 -0
  303. package/dist/types/components/GrFormField/index.d.ts +8 -0
  304. package/dist/types/components/GrFormSection/index.d.ts +7 -0
  305. package/dist/types/components/GrProgressCircle/index.d.ts +10 -0
  306. package/dist/types/components/GrRadio/index.d.ts +8 -0
  307. package/dist/types/components/GrRating/GrRating.vue.d.ts +178 -0
  308. package/dist/types/components/GrResponseErrorBanner/index.d.ts +15 -0
  309. package/dist/types/components/GrSegmented/index.d.ts +11 -0
  310. package/dist/types/components/GrSelect/GrSelect.vue.d.ts +199 -0
  311. package/dist/types/components/GrSidebar/index.d.ts +9 -0
  312. package/dist/types/components/GrSkeleton/index.d.ts +4 -0
  313. package/dist/types/components/GrSortableList/grSortableListStyles.d.ts +37 -0
  314. package/dist/types/components/GrSplitter/index.d.ts +11 -0
  315. package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +168 -0
  316. package/dist/types/components/GrStatistic/grStatisticStyles.d.ts +36 -0
  317. package/dist/types/components/GrTabPanels/index.d.ts +7 -0
  318. package/dist/types/components/GrTabs/GrTabs.vue.d.ts +121 -0
  319. package/dist/types/components/GrTabs/index.d.ts +8 -0
  320. package/dist/types/components/GrTimeline/index.d.ts +10 -0
  321. package/dist/types/components/GrTree/grTreeProps.d.ts +119 -0
  322. package/dist/types/components/GrTree/safelist.d.ts +1 -0
  323. package/dist/types/components/GrTreeSelect/GrTreeSelect.vue.d.ts +63 -0
  324. package/dist/types/components/shared/icon.d.ts +13 -0
  325. package/dist/types/testing/announcer.d.ts +10 -0
  326. package/dist/types/testing/context.d.ts +36 -0
  327. package/dist/types/testing/env.d.ts +25 -0
  328. package/dist/types/testing/geometry.d.ts +23 -0
  329. package/dist/types/testing/index.d.ts +13 -0
  330. package/dist/types/testing/keyboard.d.ts +32 -0
  331. package/dist/types/testing/pointer.d.ts +31 -0
  332. package/dist/types/theme/apply.d.ts +27 -0
  333. package/dist/types/theme/color.d.ts +35 -0
  334. package/dist/types/theme/extendTheme.d.ts +63 -0
  335. package/dist/types/theme/index.d.ts +22 -0
  336. package/dist/types/theme/roles.d.ts +16 -0
  337. package/dist/types/theme/tone.d.ts +32 -0
  338. package/dist/types/theme/validate.d.ts +16 -0
  339. package/dist/types/tokens/types.d.ts +62 -0
  340. package/dist/web-types.json +14 -19
  341. package/package.json +122 -104
  342. package/tokens/themes/dark.json +2 -1
  343. package/dist/chunks/chevron-right-BfqMVpbB.js +0 -44
  344. package/dist/chunks/chevron-right-BfqMVpbB.js.map +0 -1
  345. package/dist/chunks/config-06SQjBx0.js +0 -96
  346. package/dist/chunks/config-06SQjBx0.js.map +0 -1
  347. package/dist/chunks/config-B-iNaGdw.js +0 -199
  348. package/dist/chunks/config-B-iNaGdw.js.map +0 -1
  349. package/dist/chunks/config-BE6n20np2.js.map +0 -1
  350. package/dist/chunks/config-BqFjr3tN.js +0 -131
  351. package/dist/chunks/config-BqFjr3tN.js.map +0 -1
  352. package/dist/chunks/config-COpuWGr_.js.map +0 -1
  353. package/dist/chunks/config-D2aNP7Es.js +0 -70
  354. package/dist/chunks/config-D2aNP7Es.js.map +0 -1
  355. package/dist/chunks/config-D3_g2KIn.js +0 -120
  356. package/dist/chunks/config-D3_g2KIn.js.map +0 -1
  357. package/dist/chunks/config-DCFvmHEv2.js.map +0 -1
  358. package/dist/chunks/config-DEvsMTQE.js +0 -150
  359. package/dist/chunks/config-DEvsMTQE.js.map +0 -1
  360. package/dist/chunks/config-DP7eseR1.js +0 -92
  361. package/dist/chunks/config-DP7eseR1.js.map +0 -1
  362. package/dist/chunks/config-DhHbU3zO.js +0 -37
  363. package/dist/chunks/config-DhHbU3zO.js.map +0 -1
  364. package/dist/chunks/config-DpqOnJiz2.js +0 -11
  365. package/dist/chunks/config-DpqOnJiz2.js.map +0 -1
  366. package/dist/chunks/config-DvQIb4kb.js +0 -98
  367. package/dist/chunks/config-DvQIb4kb.js.map +0 -1
  368. package/dist/chunks/config-K0C2tcLB.js +0 -84
  369. package/dist/chunks/config-K0C2tcLB.js.map +0 -1
  370. package/dist/chunks/config-Rw9OyW70.js +0 -87
  371. package/dist/chunks/config-Rw9OyW70.js.map +0 -1
  372. package/dist/chunks/config-WTNhdh6T2.js.map +0 -1
  373. package/dist/chunks/config-_qPUfb6-2.js +0 -165
  374. package/dist/chunks/config-_qPUfb6-2.js.map +0 -1
  375. package/dist/chunks/config-eXB87DOi.js.map +0 -1
  376. package/dist/chunks/config-gvq_hWNM.js +0 -103
  377. package/dist/chunks/config-gvq_hWNM.js.map +0 -1
  378. package/dist/chunks/context-BSYR7RZs.js +0 -152
  379. package/dist/chunks/context-BSYR7RZs.js.map +0 -1
  380. package/dist/chunks/granular-provider-B9nXQCMu.js +0 -195
  381. package/dist/chunks/granular-provider-B9nXQCMu.js.map +0 -1
  382. package/dist/chunks/portalRoot-CWD4zHBm.js +0 -35
  383. package/dist/chunks/portalRoot-CWD4zHBm.js.map +0 -1
  384. package/dist/chunks/useModalOverlay-BTq-0ImG.js +0 -212
  385. package/dist/chunks/useModalOverlay-BTq-0ImG.js.map +0 -1
  386. package/dist/chunks/usePortalTarget-RyzEgNTb.js +0 -77
  387. package/dist/chunks/usePortalTarget-RyzEgNTb.js.map +0 -1
  388. package/dist/chunks/validation-5HhpanPP.js +0 -178
  389. package/dist/chunks/validation-5HhpanPP.js.map +0 -1
  390. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js +0 -272
  391. package/dist/components/GrAlert/chunks/GrAlert-BC1lplbY.js.map +0 -1
  392. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js +0 -852
  393. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js.map +0 -1
  394. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js +0 -222
  395. package/dist/components/GrAvatar/chunks/GrAvatar-CVUujLmn.js.map +0 -1
  396. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js +0 -40
  397. package/dist/components/GrBadge/chunks/GrBadge-B1tgqfGQ.js.map +0 -1
  398. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js +0 -97
  399. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C-E9betg.js.map +0 -1
  400. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js +0 -117
  401. package/dist/components/GrBottomNav/chunks/GrBottomNav-9GH7Dd9E.js.map +0 -1
  402. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js +0 -266
  403. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-BCNGDS6k.js.map +0 -1
  404. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js +0 -153
  405. package/dist/components/GrButton/chunks/GrButton-D0m_z0XW.js.map +0 -1
  406. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js +0 -89
  407. package/dist/components/GrCard/chunks/GrCard-DOrGHf2x.js.map +0 -1
  408. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js +0 -262
  409. package/dist/components/GrCheckbox/chunks/GrCheckbox-BLOp8452.js.map +0 -1
  410. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js +0 -140
  411. package/dist/components/GrCheckboxGroup/chunks/GrCheckboxGroup-CXTx2Z5H.js.map +0 -1
  412. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js +0 -308
  413. package/dist/components/GrCollapse/chunks/GrCollapse-B2Fc6A9r.js.map +0 -1
  414. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js +0 -584
  415. package/dist/components/GrColorPicker/chunks/GrColorPicker-DAdQ-Gc3.js.map +0 -1
  416. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js +0 -565
  417. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js.map +0 -1
  418. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js +0 -144
  419. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BA6JO7V6.js.map +0 -1
  420. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js +0 -200
  421. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-hUTi-GdJ.js.map +0 -1
  422. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js +0 -1053
  423. package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js.map +0 -1
  424. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js +0 -255
  425. package/dist/components/GrDialog/chunks/GrDialog-MD9Fzy9C.js.map +0 -1
  426. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js +0 -656
  427. package/dist/components/GrDialogService/chunks/GrDialogService-DtgUijMj.js.map +0 -1
  428. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js +0 -109
  429. package/dist/components/GrDivider/chunks/GrDivider-B2Xwc_QO.js.map +0 -1
  430. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js +0 -251
  431. package/dist/components/GrDrawer/chunks/GrDrawer-DWHdZZzW.js.map +0 -1
  432. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js +0 -300
  433. package/dist/components/GrDropdown/chunks/GrDropdown-0tJK01Kq.js.map +0 -1
  434. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js +0 -421
  435. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-VPPrpCoA.js.map +0 -1
  436. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js +0 -86
  437. package/dist/components/GrEmptyState/chunks/GrEmptyState-W7Irx3vc.js.map +0 -1
  438. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js +0 -1080
  439. package/dist/components/GrFileUpload/chunks/GrFileUpload-DuDzC43S.js.map +0 -1
  440. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js +0 -326
  441. package/dist/components/GrForm/chunks/GrForm-BCHCfIMv.js.map +0 -1
  442. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js +0 -190
  443. package/dist/components/GrFormField/chunks/GrFormField-CL5rcgj6.js.map +0 -1
  444. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js +0 -452
  445. package/dist/components/GrFormFile/chunks/GrFormFile-BikSD7bg.js.map +0 -1
  446. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js +0 -63
  447. package/dist/components/GrFormSection/chunks/GrFormSection-BEh5n4jF.js.map +0 -1
  448. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js +0 -57
  449. package/dist/components/GrIcon/chunks/GrIcon-BvA2ZGXP.js.map +0 -1
  450. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js +0 -1127
  451. package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js.map +0 -1
  452. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js +0 -348
  453. package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js.map +0 -1
  454. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js +0 -512
  455. package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js.map +0 -1
  456. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js +0 -358
  457. package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js.map +0 -1
  458. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js +0 -163
  459. package/dist/components/GrLink/chunks/GrLink-D-cgUMXW.js.map +0 -1
  460. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js +0 -277
  461. package/dist/components/GrList/chunks/GrList-4YU1NZtM.js.map +0 -1
  462. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js +0 -101
  463. package/dist/components/GrLoading/chunks/GrLoading-CH95CFzS.js.map +0 -1
  464. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js +0 -313
  465. package/dist/components/GrModal/chunks/GrModal-BbhcsDQ8.js.map +0 -1
  466. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js +0 -104
  467. package/dist/components/GrNavbar/chunks/GrNavbar-CF0KbM_6.js.map +0 -1
  468. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js +0 -658
  469. package/dist/components/GrNumberInput/chunks/GrNumberInput-CZOyPz4J.js.map +0 -1
  470. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js +0 -283
  471. package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js.map +0 -1
  472. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js +0 -216
  473. package/dist/components/GrPopover/chunks/GrPopover-DuqeoFaI.js.map +0 -1
  474. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js +0 -90
  475. package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js.map +0 -1
  476. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js +0 -210
  477. package/dist/components/GrProgressCircle/chunks/GrProgressCircle-B8olXRo5.js.map +0 -1
  478. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js +0 -348
  479. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-JVVqBsPY.js.map +0 -1
  480. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js +0 -253
  481. package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js.map +0 -1
  482. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js +0 -196
  483. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js.map +0 -1
  484. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js +0 -315
  485. package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js.map +0 -1
  486. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js +0 -777
  487. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-C7W9mgYN.js.map +0 -1
  488. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js +0 -224
  489. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DhX4jjay.js.map +0 -1
  490. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js +0 -388
  491. package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js.map +0 -1
  492. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js +0 -1373
  493. package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js.map +0 -1
  494. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js +0 -257
  495. package/dist/components/GrSidebar/chunks/GrSidebar-DRGnnViw.js.map +0 -1
  496. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js +0 -84
  497. package/dist/components/GrSkeleton/chunks/GrSkeleton-DEvNE3bC.js.map +0 -1
  498. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js +0 -379
  499. package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js.map +0 -1
  500. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js +0 -276
  501. package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js.map +0 -1
  502. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js +0 -268
  503. package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js.map +0 -1
  504. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js +0 -319
  505. package/dist/components/GrStatistic/chunks/GrStatistic-J4qLs3TH.js.map +0 -1
  506. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js +0 -183
  507. package/dist/components/GrSwitch/chunks/GrSwitch-DpyvVrZG.js.map +0 -1
  508. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js +0 -81
  509. package/dist/components/GrTabPanels/chunks/GrTabPanels-BVe1CZdJ.js.map +0 -1
  510. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js +0 -169
  511. package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js.map +0 -1
  512. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js +0 -261
  513. package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js.map +0 -1
  514. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js +0 -241
  515. package/dist/components/GrTextarea/chunks/GrTextarea-DSvd1nSy.js.map +0 -1
  516. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js +0 -285
  517. package/dist/components/GrTimeline/chunks/GrTimeline-B-h2Yanw.js.map +0 -1
  518. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js +0 -373
  519. package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js.map +0 -1
  520. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js +0 -185
  521. package/dist/components/GrTooltip/chunks/GrTooltip-xAcqs0bP.js.map +0 -1
  522. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js +0 -1371
  523. package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js.map +0 -1
  524. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js +0 -623
  525. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DZp7CqqW.js.map +0 -1
  526. package/dist/tokens.js.map +0 -1
  527. package/dist/types/src/components/GrAlert/index.d.ts +0 -8
  528. package/dist/types/src/components/GrAvatar/index.d.ts +0 -10
  529. package/dist/types/src/components/GrBadgeWrap/index.d.ts +0 -7
  530. package/dist/types/src/components/GrBottomNav/index.d.ts +0 -9
  531. package/dist/types/src/components/GrBreadcrumbs/grBreadcrumbsStyles.d.ts +0 -86
  532. package/dist/types/src/components/GrButton/index.d.ts +0 -11
  533. package/dist/types/src/components/GrCheckbox/index.d.ts +0 -13
  534. package/dist/types/src/components/GrCollapse/index.d.ts +0 -9
  535. package/dist/types/src/components/GrColorPicker/index.d.ts +0 -11
  536. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +0 -163
  537. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +0 -59
  538. package/dist/types/src/components/GrCommandPalette/index.d.ts +0 -10
  539. package/dist/types/src/components/GrConfigProvider/index.d.ts +0 -6
  540. package/dist/types/src/components/GrDataTable/grDataTableStyles.d.ts +0 -68
  541. package/dist/types/src/components/GrDataTable/index.d.ts +0 -13
  542. package/dist/types/src/components/GrDialog/index.d.ts +0 -12
  543. package/dist/types/src/components/GrDialogService/index.d.ts +0 -6
  544. package/dist/types/src/components/GrDropdownMenu/index.d.ts +0 -22
  545. package/dist/types/src/components/GrEmptyState/index.d.ts +0 -8
  546. package/dist/types/src/components/GrFileUpload/index.d.ts +0 -18
  547. package/dist/types/src/components/GrForm/index.d.ts +0 -10
  548. package/dist/types/src/components/GrFormField/index.d.ts +0 -8
  549. package/dist/types/src/components/GrFormSection/index.d.ts +0 -8
  550. package/dist/types/src/components/GrProgressCircle/index.d.ts +0 -11
  551. package/dist/types/src/components/GrRadio/index.d.ts +0 -9
  552. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +0 -173
  553. package/dist/types/src/components/GrResponseErrorBanner/index.d.ts +0 -16
  554. package/dist/types/src/components/GrSegmented/index.d.ts +0 -11
  555. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +0 -205
  556. package/dist/types/src/components/GrSidebar/index.d.ts +0 -10
  557. package/dist/types/src/components/GrSkeleton/index.d.ts +0 -4
  558. package/dist/types/src/components/GrSortableList/grSortableListStyles.d.ts +0 -38
  559. package/dist/types/src/components/GrSplitter/index.d.ts +0 -11
  560. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +0 -165
  561. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +0 -37
  562. package/dist/types/src/components/GrTabPanels/index.d.ts +0 -8
  563. package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +0 -117
  564. package/dist/types/src/components/GrTabs/index.d.ts +0 -9
  565. package/dist/types/src/components/GrTimeline/index.d.ts +0 -12
  566. package/dist/types/src/components/GrTree/grTreeProps.d.ts +0 -112
  567. package/dist/types/src/components/GrTree/safelist.d.ts +0 -1
  568. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +0 -69
  569. package/dist/types/src/tokens/types.d.ts +0 -54
  570. /package/dist/chunks/{config-BE6n20np2.js → config-BE6n20np.js} +0 -0
  571. /package/dist/chunks/{config-COpuWGr_.js → config-COpuWGr_2.js} +0 -0
  572. /package/dist/chunks/{config-DCFvmHEv2.js → config-DCFvmHEv.js} +0 -0
  573. /package/dist/chunks/{config-WTNhdh6T2.js → config-WTNhdh6T.js} +0 -0
  574. /package/dist/chunks/{config-eXB87DOi.js → config-eXB87DOi2.js} +0 -0
  575. /package/dist/types/{src/components → components}/GrAlert/GrAlert.vue.d.ts +0 -0
  576. /package/dist/types/{src/components → components}/GrAlert/config.d.ts +0 -0
  577. /package/dist/types/{src/components → components}/GrAlert/defaults.d.ts +0 -0
  578. /package/dist/types/{src/components → components}/GrAlert/grAlertStyles.d.ts +0 -0
  579. /package/dist/types/{src/components → components}/GrAutocomplete/GrAutocomplete.vue.d.ts +0 -0
  580. /package/dist/types/{src/components → components}/GrAutocomplete/config.d.ts +0 -0
  581. /package/dist/types/{src/components → components}/GrAutocomplete/defaults.d.ts +0 -0
  582. /package/dist/types/{src/components → components}/GrAutocomplete/grAutocompleteStyles.d.ts +0 -0
  583. /package/dist/types/{src/components → components}/GrAutocomplete/index.d.ts +0 -0
  584. /package/dist/types/{src/components → components}/GrAutocomplete/safelist.d.ts +0 -0
  585. /package/dist/types/{src/components → components}/GrAvatar/GrAvatar.vue.d.ts +0 -0
  586. /package/dist/types/{src/components → components}/GrAvatar/GrAvatarGroup.vue.d.ts +0 -0
  587. /package/dist/types/{src/components → components}/GrAvatar/avatarContext.d.ts +0 -0
  588. /package/dist/types/{src/components → components}/GrAvatar/config.d.ts +0 -0
  589. /package/dist/types/{src/components → components}/GrAvatar/defaults.d.ts +0 -0
  590. /package/dist/types/{src/components → components}/GrAvatar/grAvatarStyles.d.ts +0 -0
  591. /package/dist/types/{src/components → components}/GrAvatar/safelist.d.ts +0 -0
  592. /package/dist/types/{src/components → components}/GrBadge/GrBadge.vue.d.ts +0 -0
  593. /package/dist/types/{src/components → components}/GrBadge/config.d.ts +0 -0
  594. /package/dist/types/{src/components → components}/GrBadge/defaults.d.ts +0 -0
  595. /package/dist/types/{src/components → components}/GrBadge/grBadgeStyles.d.ts +0 -0
  596. /package/dist/types/{src/components → components}/GrBadge/index.d.ts +0 -0
  597. /package/dist/types/{src/components → components}/GrBadge/safelist.d.ts +0 -0
  598. /package/dist/types/{src/components → components}/GrBadgeWrap/GrBadgeWrap.vue.d.ts +0 -0
  599. /package/dist/types/{src/components → components}/GrBadgeWrap/config.d.ts +0 -0
  600. /package/dist/types/{src/components → components}/GrBadgeWrap/grBadgeWrapStyles.d.ts +0 -0
  601. /package/dist/types/{src/components → components}/GrBadgeWrap/safelist.d.ts +0 -0
  602. /package/dist/types/{src/components → components}/GrBottomNav/GrBottomNav.vue.d.ts +0 -0
  603. /package/dist/types/{src/components → components}/GrBottomNav/config.d.ts +0 -0
  604. /package/dist/types/{src/components → components}/GrBottomNav/defaults.d.ts +0 -0
  605. /package/dist/types/{src/components → components}/GrBottomNav/grBottomNavStyles.d.ts +0 -0
  606. /package/dist/types/{src/components → components}/GrBottomNav/safelist.d.ts +0 -0
  607. /package/dist/types/{src/components → components}/GrBreadcrumbs/GrBreadcrumbs.vue.d.ts +0 -0
  608. /package/dist/types/{src/components → components}/GrBreadcrumbs/config.d.ts +0 -0
  609. /package/dist/types/{src/components → components}/GrBreadcrumbs/defaults.d.ts +0 -0
  610. /package/dist/types/{src/components → components}/GrBreadcrumbs/index.d.ts +0 -0
  611. /package/dist/types/{src/components → components}/GrBreadcrumbs/safelist.d.ts +0 -0
  612. /package/dist/types/{src/components → components}/GrButton/GrButton.vue.d.ts +0 -0
  613. /package/dist/types/{src/components → components}/GrButton/config.d.ts +0 -0
  614. /package/dist/types/{src/components → components}/GrButton/defaults.d.ts +0 -0
  615. /package/dist/types/{src/components → components}/GrButton/grButtonStyles.d.ts +0 -0
  616. /package/dist/types/{src/components → components}/GrButton/safelist.d.ts +0 -0
  617. /package/dist/types/{src/components → components}/GrButtonGroup/GrButtonGroup.vue.d.ts +0 -0
  618. /package/dist/types/{src/components → components}/GrButtonGroup/config.d.ts +0 -0
  619. /package/dist/types/{src/components → components}/GrButtonGroup/context.d.ts +0 -0
  620. /package/dist/types/{src/components → components}/GrButtonGroup/index.d.ts +0 -0
  621. /package/dist/types/{src/components → components}/GrCard/GrCard.vue.d.ts +0 -0
  622. /package/dist/types/{src/components → components}/GrCard/config.d.ts +0 -0
  623. /package/dist/types/{src/components → components}/GrCard/defaults.d.ts +0 -0
  624. /package/dist/types/{src/components → components}/GrCard/grCardStyles.d.ts +0 -0
  625. /package/dist/types/{src/components → components}/GrCard/index.d.ts +0 -0
  626. /package/dist/types/{src/components → components}/GrCard/safelist.d.ts +0 -0
  627. /package/dist/types/{src/components → components}/GrCheckbox/GrCheckbox.vue.d.ts +0 -0
  628. /package/dist/types/{src/components → components}/GrCheckbox/config.d.ts +0 -0
  629. /package/dist/types/{src/components → components}/GrCheckbox/defaults.d.ts +0 -0
  630. /package/dist/types/{src/components → components}/GrCheckbox/grCheckboxGroupContext.d.ts +0 -0
  631. /package/dist/types/{src/components → components}/GrCheckbox/grCheckboxStyles.d.ts +0 -0
  632. /package/dist/types/{src/components → components}/GrCheckbox/safelist.d.ts +0 -0
  633. /package/dist/types/{src/components → components}/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +0 -0
  634. /package/dist/types/{src/components → components}/GrCheckboxGroup/config.d.ts +0 -0
  635. /package/dist/types/{src/components → components}/GrCheckboxGroup/defaults.d.ts +0 -0
  636. /package/dist/types/{src/components → components}/GrCheckboxGroup/index.d.ts +0 -0
  637. /package/dist/types/{src/components → components}/GrCollapse/GrCollapse.vue.d.ts +0 -0
  638. /package/dist/types/{src/components → components}/GrCollapse/GrCollapseItem.vue.d.ts +0 -0
  639. /package/dist/types/{src/components → components}/GrCollapse/config.d.ts +0 -0
  640. /package/dist/types/{src/components → components}/GrCollapse/defaults.d.ts +0 -0
  641. /package/dist/types/{src/components → components}/GrCollapse/grCollapseContext.d.ts +0 -0
  642. /package/dist/types/{src/components → components}/GrCollapse/grCollapseStyles.d.ts +0 -0
  643. /package/dist/types/{src/components → components}/GrCollapse/safelist.d.ts +0 -0
  644. /package/dist/types/{src/components → components}/GrColorPicker/GrColorPicker.vue.d.ts +0 -0
  645. /package/dist/types/{src/components → components}/GrColorPicker/color.d.ts +0 -0
  646. /package/dist/types/{src/components → components}/GrColorPicker/config.d.ts +0 -0
  647. /package/dist/types/{src/components → components}/GrColorPicker/defaults.d.ts +0 -0
  648. /package/dist/types/{src/components → components}/GrColorPicker/grColorPickerStyles.d.ts +0 -0
  649. /package/dist/types/{src/components → components}/GrColorPicker/safelist.d.ts +0 -0
  650. /package/dist/types/{src/components → components}/GrCommandPalette/config.d.ts +0 -0
  651. /package/dist/types/{src/components → components}/GrCommandPalette/defaults.d.ts +0 -0
  652. /package/dist/types/{src/components → components}/GrCommandPalette/grCommandPaletteStyles.d.ts +0 -0
  653. /package/dist/types/{src/components → components}/GrCommandPalette/safelist.d.ts +0 -0
  654. /package/dist/types/{src/components → components}/GrConfigProvider/GrConfigProvider.vue.d.ts +0 -0
  655. /package/dist/types/{src/components → components}/GrConfigProvider/config.d.ts +0 -0
  656. /package/dist/types/{src/components → components}/GrConfigProvider/context.d.ts +0 -0
  657. /package/dist/types/{src/components → components}/GrConfigProvider/zIndexScale.d.ts +0 -0
  658. /package/dist/types/{src/components → components}/GrConfirmDialog/GrConfirmDialog.vue.d.ts +0 -0
  659. /package/dist/types/{src/components → components}/GrConfirmDialog/config.d.ts +0 -0
  660. /package/dist/types/{src/components → components}/GrConfirmDialog/defaults.d.ts +0 -0
  661. /package/dist/types/{src/components → components}/GrConfirmDialog/index.d.ts +0 -0
  662. /package/dist/types/{src/components → components}/GrDataTable/GrDataTable.vue.d.ts +0 -0
  663. /package/dist/types/{src/components → components}/GrDataTable/config.d.ts +0 -0
  664. /package/dist/types/{src/components → components}/GrDataTable/defaults.d.ts +0 -0
  665. /package/dist/types/{src/components → components}/GrDataTable/grDataTableSort.d.ts +0 -0
  666. /package/dist/types/{src/components → components}/GrDataTable/safelist.d.ts +0 -0
  667. /package/dist/types/{src/components → components}/GrDialog/GrDialog.vue.d.ts +0 -0
  668. /package/dist/types/{src/components → components}/GrDialog/GrDialogCloseButton.vue.d.ts +0 -0
  669. /package/dist/types/{src/components → components}/GrDialog/GrDialogFooter.vue.d.ts +0 -0
  670. /package/dist/types/{src/components → components}/GrDialog/GrDialogHeader.vue.d.ts +0 -0
  671. /package/dist/types/{src/components → components}/GrDialog/config.d.ts +0 -0
  672. /package/dist/types/{src/components → components}/GrDialog/defaults.d.ts +0 -0
  673. /package/dist/types/{src/components → components}/GrDialog/dialogShared.d.ts +0 -0
  674. /package/dist/types/{src/components → components}/GrDialog/safelist.d.ts +0 -0
  675. /package/dist/types/{src/components → components}/GrDialogService/GrDialogServiceHost.vue.d.ts +0 -0
  676. /package/dist/types/{src/components → components}/GrDialogService/GrDialogServiceItem.vue.d.ts +0 -0
  677. /package/dist/types/{src/components → components}/GrDialogService/config.d.ts +0 -0
  678. /package/dist/types/{src/components → components}/GrDialogService/store.d.ts +0 -0
  679. /package/dist/types/{src/components → components}/GrDialogService/types.d.ts +0 -0
  680. /package/dist/types/{src/components → components}/GrDialogService/useDialogService.d.ts +0 -0
  681. /package/dist/types/{src/components → components}/GrDivider/GrDivider.vue.d.ts +0 -0
  682. /package/dist/types/{src/components → components}/GrDivider/config.d.ts +0 -0
  683. /package/dist/types/{src/components → components}/GrDivider/defaults.d.ts +0 -0
  684. /package/dist/types/{src/components → components}/GrDivider/grDividerStyles.d.ts +0 -0
  685. /package/dist/types/{src/components → components}/GrDivider/index.d.ts +0 -0
  686. /package/dist/types/{src/components → components}/GrDivider/safelist.d.ts +0 -0
  687. /package/dist/types/{src/components → components}/GrDrawer/GrDrawer.vue.d.ts +0 -0
  688. /package/dist/types/{src/components → components}/GrDrawer/config.d.ts +0 -0
  689. /package/dist/types/{src/components → components}/GrDrawer/defaults.d.ts +0 -0
  690. /package/dist/types/{src/components → components}/GrDrawer/grDrawerStyles.d.ts +0 -0
  691. /package/dist/types/{src/components → components}/GrDrawer/index.d.ts +0 -0
  692. /package/dist/types/{src/components → components}/GrDrawer/safelist.d.ts +0 -0
  693. /package/dist/types/{src/components → components}/GrDropdown/GrDropdown.vue.d.ts +0 -0
  694. /package/dist/types/{src/components → components}/GrDropdown/config.d.ts +0 -0
  695. /package/dist/types/{src/components → components}/GrDropdown/grDropdownStyles.d.ts +0 -0
  696. /package/dist/types/{src/components → components}/GrDropdown/index.d.ts +0 -0
  697. /package/dist/types/{src/components → components}/GrDropdown/safelist.d.ts +0 -0
  698. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenu.vue.d.ts +0 -0
  699. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuColumn.vue.d.ts +0 -0
  700. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuColumns.vue.d.ts +0 -0
  701. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuDivider.vue.d.ts +0 -0
  702. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuGroup.vue.d.ts +0 -0
  703. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuHeader.vue.d.ts +0 -0
  704. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +0 -0
  705. /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuList.vue.d.ts +0 -0
  706. /package/dist/types/{src/components → components}/GrDropdownMenu/config.d.ts +0 -0
  707. /package/dist/types/{src/components → components}/GrDropdownMenu/grDropdownMenuStyles.d.ts +0 -0
  708. /package/dist/types/{src/components → components}/GrDropdownMenu/menuModel.d.ts +0 -0
  709. /package/dist/types/{src/components → components}/GrDropdownMenu/safelist.d.ts +0 -0
  710. /package/dist/types/{src/components → components}/GrEmptyState/GrEmptyState.vue.d.ts +0 -0
  711. /package/dist/types/{src/components → components}/GrEmptyState/config.d.ts +0 -0
  712. /package/dist/types/{src/components → components}/GrEmptyState/defaults.d.ts +0 -0
  713. /package/dist/types/{src/components → components}/GrEmptyState/grEmptyStateStyles.d.ts +0 -0
  714. /package/dist/types/{src/components → components}/GrEmptyState/safelist.d.ts +0 -0
  715. /package/dist/types/{src/components → components}/GrFileUpload/FileValidationError.d.ts +0 -0
  716. /package/dist/types/{src/components → components}/GrFileUpload/GrFileUpload.vue.d.ts +0 -0
  717. /package/dist/types/{src/components → components}/GrFileUpload/acceptValidator.d.ts +0 -0
  718. /package/dist/types/{src/components → components}/GrFileUpload/config.d.ts +0 -0
  719. /package/dist/types/{src/components → components}/GrFileUpload/defaults.d.ts +0 -0
  720. /package/dist/types/{src/components → components}/GrFileUpload/fileEntry.d.ts +0 -0
  721. /package/dist/types/{src/components → components}/GrFileUpload/grFileUploadStyles.d.ts +0 -0
  722. /package/dist/types/{src/components → components}/GrFileUpload/matchAccept.d.ts +0 -0
  723. /package/dist/types/{src/components → components}/GrFileUpload/maxFileSize.d.ts +0 -0
  724. /package/dist/types/{src/components → components}/GrFileUpload/runFileValidators.d.ts +0 -0
  725. /package/dist/types/{src/components → components}/GrFileUpload/safelist.d.ts +0 -0
  726. /package/dist/types/{src/components → components}/GrFileUpload/types.d.ts +0 -0
  727. /package/dist/types/{src/components → components}/GrFileUpload/uploadState.d.ts +0 -0
  728. /package/dist/types/{src/components → components}/GrFileUpload/uploadViaXhr.d.ts +0 -0
  729. /package/dist/types/{src/components → components}/GrFileUpload/useDropZone.d.ts +0 -0
  730. /package/dist/types/{src/components → components}/GrFileUpload/usePerFileUpload.d.ts +0 -0
  731. /package/dist/types/{src/components → components}/GrFileUpload/useUploadState.d.ts +0 -0
  732. /package/dist/types/{src/components → components}/GrForm/GrForm.vue.d.ts +0 -0
  733. /package/dist/types/{src/components → components}/GrForm/config.d.ts +0 -0
  734. /package/dist/types/{src/components → components}/GrForm/context.d.ts +0 -0
  735. /package/dist/types/{src/components → components}/GrForm/fileRule.d.ts +0 -0
  736. /package/dist/types/{src/components → components}/GrForm/modelSnapshot.d.ts +0 -0
  737. /package/dist/types/{src/components → components}/GrForm/validation.d.ts +0 -0
  738. /package/dist/types/{src/components → components}/GrFormField/GrFormField.vue.d.ts +0 -0
  739. /package/dist/types/{src/components → components}/GrFormField/config.d.ts +0 -0
  740. /package/dist/types/{src/components → components}/GrFormField/context.d.ts +0 -0
  741. /package/dist/types/{src/components → components}/GrFormField/defaults.d.ts +0 -0
  742. /package/dist/types/{src/components → components}/GrFormField/grFormFieldStyles.d.ts +0 -0
  743. /package/dist/types/{src/components → components}/GrFormField/safelist.d.ts +0 -0
  744. /package/dist/types/{src/components → components}/GrFormFile/GrFormFile.vue.d.ts +0 -0
  745. /package/dist/types/{src/components → components}/GrFormFile/config.d.ts +0 -0
  746. /package/dist/types/{src/components → components}/GrFormFile/defaults.d.ts +0 -0
  747. /package/dist/types/{src/components → components}/GrFormFile/grFormFileStyles.d.ts +0 -0
  748. /package/dist/types/{src/components → components}/GrFormFile/index.d.ts +0 -0
  749. /package/dist/types/{src/components → components}/GrFormFile/safelist.d.ts +0 -0
  750. /package/dist/types/{src/components → components}/GrFormSection/GrFormSection.vue.d.ts +0 -0
  751. /package/dist/types/{src/components → components}/GrFormSection/config.d.ts +0 -0
  752. /package/dist/types/{src/components → components}/GrFormSection/defaults.d.ts +0 -0
  753. /package/dist/types/{src/components → components}/GrFormSection/grFormSectionStyles.d.ts +0 -0
  754. /package/dist/types/{src/components → components}/GrFormSection/safelist.d.ts +0 -0
  755. /package/dist/types/{src/components → components}/GrIcon/GrIcon.vue.d.ts +0 -0
  756. /package/dist/types/{src/components → components}/GrIcon/config.d.ts +0 -0
  757. /package/dist/types/{src/components → components}/GrIcon/defaults.d.ts +0 -0
  758. /package/dist/types/{src/components → components}/GrIcon/grIconStyles.d.ts +0 -0
  759. /package/dist/types/{src/components → components}/GrIcon/index.d.ts +0 -0
  760. /package/dist/types/{src/components → components}/GrIcon/safelist.d.ts +0 -0
  761. /package/dist/types/{src/components → components}/GrImageViewer/GrImageViewer.vue.d.ts +0 -0
  762. /package/dist/types/{src/components → components}/GrImageViewer/composables/usePointerGestures.d.ts +0 -0
  763. /package/dist/types/{src/components → components}/GrImageViewer/composables/useViewerKeyboard.d.ts +0 -0
  764. /package/dist/types/{src/components → components}/GrImageViewer/composables/useWheelGesture.d.ts +0 -0
  765. /package/dist/types/{src/components → components}/GrImageViewer/composables/useZoomPan.d.ts +0 -0
  766. /package/dist/types/{src/components → components}/GrImageViewer/config.d.ts +0 -0
  767. /package/dist/types/{src/components → components}/GrImageViewer/grImageViewerStyles.d.ts +0 -0
  768. /package/dist/types/{src/components → components}/GrImageViewer/index.d.ts +0 -0
  769. /package/dist/types/{src/components → components}/GrImageViewer/safelist.d.ts +0 -0
  770. /package/dist/types/{src/components → components}/GrInput/GrInput.vue.d.ts +0 -0
  771. /package/dist/types/{src/components → components}/GrInput/config.d.ts +0 -0
  772. /package/dist/types/{src/components → components}/GrInput/defaults.d.ts +0 -0
  773. /package/dist/types/{src/components → components}/GrInput/grInputStyles.d.ts +0 -0
  774. /package/dist/types/{src/components → components}/GrInput/index.d.ts +0 -0
  775. /package/dist/types/{src/components → components}/GrInput/safelist.d.ts +0 -0
  776. /package/dist/types/{src/components → components}/GrInputTag/GrInputTag.vue.d.ts +0 -0
  777. /package/dist/types/{src/components → components}/GrInputTag/config.d.ts +0 -0
  778. /package/dist/types/{src/components → components}/GrInputTag/defaults.d.ts +0 -0
  779. /package/dist/types/{src/components → components}/GrInputTag/grInputTagStyles.d.ts +0 -0
  780. /package/dist/types/{src/components → components}/GrInputTag/index.d.ts +0 -0
  781. /package/dist/types/{src/components → components}/GrInputTag/safelist.d.ts +0 -0
  782. /package/dist/types/{src/components → components}/GrKbd/GrKbd.vue.d.ts +0 -0
  783. /package/dist/types/{src/components → components}/GrKbd/config.d.ts +0 -0
  784. /package/dist/types/{src/components → components}/GrKbd/defaults.d.ts +0 -0
  785. /package/dist/types/{src/components → components}/GrKbd/grKbdStyles.d.ts +0 -0
  786. /package/dist/types/{src/components → components}/GrKbd/index.d.ts +0 -0
  787. /package/dist/types/{src/components → components}/GrKbd/safelist.d.ts +0 -0
  788. /package/dist/types/{src/components → components}/GrLink/GrLink.vue.d.ts +0 -0
  789. /package/dist/types/{src/components → components}/GrLink/config.d.ts +0 -0
  790. /package/dist/types/{src/components → components}/GrLink/defaults.d.ts +0 -0
  791. /package/dist/types/{src/components → components}/GrLink/grLinkStyles.d.ts +0 -0
  792. /package/dist/types/{src/components → components}/GrLink/index.d.ts +0 -0
  793. /package/dist/types/{src/components → components}/GrLink/safelist.d.ts +0 -0
  794. /package/dist/types/{src/components → components}/GrList/GrList.vue.d.ts +0 -0
  795. /package/dist/types/{src/components → components}/GrList/GrListItem.vue.d.ts +0 -0
  796. /package/dist/types/{src/components → components}/GrList/config.d.ts +0 -0
  797. /package/dist/types/{src/components → components}/GrList/grListStyles.d.ts +0 -0
  798. /package/dist/types/{src/components → components}/GrList/index.d.ts +0 -0
  799. /package/dist/types/{src/components → components}/GrList/safelist.d.ts +0 -0
  800. /package/dist/types/{src/components → components}/GrLoading/GrLoading.vue.d.ts +0 -0
  801. /package/dist/types/{src/components → components}/GrLoading/config.d.ts +0 -0
  802. /package/dist/types/{src/components → components}/GrLoading/grLoadingStyles.d.ts +0 -0
  803. /package/dist/types/{src/components → components}/GrLoading/index.d.ts +0 -0
  804. /package/dist/types/{src/components → components}/GrLoading/safelist.d.ts +0 -0
  805. /package/dist/types/{src/components → components}/GrModal/GrModal.vue.d.ts +0 -0
  806. /package/dist/types/{src/components → components}/GrModal/config.d.ts +0 -0
  807. /package/dist/types/{src/components → components}/GrModal/context.d.ts +0 -0
  808. /package/dist/types/{src/components → components}/GrModal/defaults.d.ts +0 -0
  809. /package/dist/types/{src/components → components}/GrModal/grModalStyles.d.ts +0 -0
  810. /package/dist/types/{src/components → components}/GrModal/index.d.ts +0 -0
  811. /package/dist/types/{src/components → components}/GrModal/safelist.d.ts +0 -0
  812. /package/dist/types/{src/components → components}/GrNavbar/GrNavbar.vue.d.ts +0 -0
  813. /package/dist/types/{src/components → components}/GrNavbar/config.d.ts +0 -0
  814. /package/dist/types/{src/components → components}/GrNavbar/grNavbarStyles.d.ts +0 -0
  815. /package/dist/types/{src/components → components}/GrNavbar/index.d.ts +0 -0
  816. /package/dist/types/{src/components → components}/GrNavbar/safelist.d.ts +0 -0
  817. /package/dist/types/{src/components → components}/GrNumberInput/GrNumberInput.vue.d.ts +0 -0
  818. /package/dist/types/{src/components → components}/GrNumberInput/config.d.ts +0 -0
  819. /package/dist/types/{src/components → components}/GrNumberInput/defaults.d.ts +0 -0
  820. /package/dist/types/{src/components → components}/GrNumberInput/grNumberInputStyles.d.ts +0 -0
  821. /package/dist/types/{src/components → components}/GrNumberInput/index.d.ts +0 -0
  822. /package/dist/types/{src/components → components}/GrNumberInput/numberInputMath.d.ts +0 -0
  823. /package/dist/types/{src/components → components}/GrNumberInput/safelist.d.ts +0 -0
  824. /package/dist/types/{src/components → components}/GrPagination/GrPagination.vue.d.ts +0 -0
  825. /package/dist/types/{src/components → components}/GrPagination/config.d.ts +0 -0
  826. /package/dist/types/{src/components → components}/GrPagination/defaults.d.ts +0 -0
  827. /package/dist/types/{src/components → components}/GrPagination/grPaginationStyles.d.ts +0 -0
  828. /package/dist/types/{src/components → components}/GrPagination/index.d.ts +0 -0
  829. /package/dist/types/{src/components → components}/GrPagination/safelist.d.ts +0 -0
  830. /package/dist/types/{src/components → components}/GrPopover/GrPopover.vue.d.ts +0 -0
  831. /package/dist/types/{src/components → components}/GrPopover/config.d.ts +0 -0
  832. /package/dist/types/{src/components → components}/GrPopover/defaults.d.ts +0 -0
  833. /package/dist/types/{src/components → components}/GrPopover/grPopoverStyles.d.ts +0 -0
  834. /package/dist/types/{src/components → components}/GrPopover/index.d.ts +0 -0
  835. /package/dist/types/{src/components → components}/GrPopover/safelist.d.ts +0 -0
  836. /package/dist/types/{src/components → components}/GrProgressBar/GrProgressBar.vue.d.ts +0 -0
  837. /package/dist/types/{src/components → components}/GrProgressBar/config.d.ts +0 -0
  838. /package/dist/types/{src/components → components}/GrProgressBar/defaults.d.ts +0 -0
  839. /package/dist/types/{src/components → components}/GrProgressBar/grStyle.d.ts +0 -0
  840. /package/dist/types/{src/components → components}/GrProgressBar/index.d.ts +0 -0
  841. /package/dist/types/{src/components → components}/GrProgressBar/safelist.d.ts +0 -0
  842. /package/dist/types/{src/components → components}/GrProgressCircle/GrProgressCircle.vue.d.ts +0 -0
  843. /package/dist/types/{src/components → components}/GrProgressCircle/config.d.ts +0 -0
  844. /package/dist/types/{src/components → components}/GrProgressCircle/defaults.d.ts +0 -0
  845. /package/dist/types/{src/components → components}/GrProgressCircle/geometry.d.ts +0 -0
  846. /package/dist/types/{src/components → components}/GrProgressCircle/grProgressCircleStyles.d.ts +0 -0
  847. /package/dist/types/{src/components → components}/GrProgressCircle/safelist.d.ts +0 -0
  848. /package/dist/types/{src/components → components}/GrPromptDialog/GrPromptDialog.vue.d.ts +0 -0
  849. /package/dist/types/{src/components → components}/GrPromptDialog/config.d.ts +0 -0
  850. /package/dist/types/{src/components → components}/GrPromptDialog/defaults.d.ts +0 -0
  851. /package/dist/types/{src/components → components}/GrPromptDialog/index.d.ts +0 -0
  852. /package/dist/types/{src/components → components}/GrRadio/GrRadio.vue.d.ts +0 -0
  853. /package/dist/types/{src/components → components}/GrRadio/config.d.ts +0 -0
  854. /package/dist/types/{src/components → components}/GrRadio/defaults.d.ts +0 -0
  855. /package/dist/types/{src/components → components}/GrRadio/grRadioGroupContext.d.ts +0 -0
  856. /package/dist/types/{src/components → components}/GrRadio/grRadioStyles.d.ts +0 -0
  857. /package/dist/types/{src/components → components}/GrRadio/safelist.d.ts +0 -0
  858. /package/dist/types/{src/components → components}/GrRadioGroup/GrRadioGroup.vue.d.ts +0 -0
  859. /package/dist/types/{src/components → components}/GrRadioGroup/config.d.ts +0 -0
  860. /package/dist/types/{src/components → components}/GrRadioGroup/defaults.d.ts +0 -0
  861. /package/dist/types/{src/components → components}/GrRadioGroup/index.d.ts +0 -0
  862. /package/dist/types/{src/components → components}/GrRating/config.d.ts +0 -0
  863. /package/dist/types/{src/components → components}/GrRating/defaults.d.ts +0 -0
  864. /package/dist/types/{src/components → components}/GrRating/grRatingStyles.d.ts +0 -0
  865. /package/dist/types/{src/components → components}/GrRating/index.d.ts +0 -0
  866. /package/dist/types/{src/components → components}/GrRating/safelist.d.ts +0 -0
  867. /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrFormErrorBanner.vue.d.ts +0 -0
  868. /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrResponseErrorBanner.vue.d.ts +0 -0
  869. /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +0 -0
  870. /package/dist/types/{src/components → components}/GrResponseErrorBanner/config.d.ts +0 -0
  871. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/abortErrorParser.d.ts +0 -0
  872. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/createResponseErrorClassifier.d.ts +0 -0
  873. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/fileValidationParser.d.ts +0 -0
  874. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/httpStatusParser.d.ts +0 -0
  875. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/index.d.ts +0 -0
  876. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/jsonApiErrorParser.d.ts +0 -0
  877. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/laravelValidationParser.d.ts +0 -0
  878. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/networkErrorParser.d.ts +0 -0
  879. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/normalizeError.d.ts +0 -0
  880. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/plainMessageParser.d.ts +0 -0
  881. /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/problemDetailsParser.d.ts +0 -0
  882. /package/dist/types/{src/components → components}/GrResponseErrorBanner/responseError.defaults.d.ts +0 -0
  883. /package/dist/types/{src/components → components}/GrResponseErrorBanner/responseError.types.d.ts +0 -0
  884. /package/dist/types/{src/components → components}/GrResponseErrorBanner/useResponseError.d.ts +0 -0
  885. /package/dist/types/{src/components → components}/GrSegmented/GrSegmented.vue.d.ts +0 -0
  886. /package/dist/types/{src/components → components}/GrSegmented/config.d.ts +0 -0
  887. /package/dist/types/{src/components → components}/GrSegmented/defaults.d.ts +0 -0
  888. /package/dist/types/{src/components → components}/GrSegmented/grSegmentedStyles.d.ts +0 -0
  889. /package/dist/types/{src/components → components}/GrSegmented/safelist.d.ts +0 -0
  890. /package/dist/types/{src/components → components}/GrSelect/composables/useSelectNavigation.d.ts +0 -0
  891. /package/dist/types/{src/components → components}/GrSelect/composables/useSelectPanelItems.d.ts +0 -0
  892. /package/dist/types/{src/components → components}/GrSelect/composables/useSelectValues.d.ts +0 -0
  893. /package/dist/types/{src/components → components}/GrSelect/composables/useSelectVirtualization.d.ts +0 -0
  894. /package/dist/types/{src/components → components}/GrSelect/config.d.ts +0 -0
  895. /package/dist/types/{src/components → components}/GrSelect/defaults.d.ts +0 -0
  896. /package/dist/types/{src/components → components}/GrSelect/grSelectStyles.d.ts +0 -0
  897. /package/dist/types/{src/components → components}/GrSelect/index.d.ts +0 -0
  898. /package/dist/types/{src/components → components}/GrSelect/safelist.d.ts +0 -0
  899. /package/dist/types/{src/components → components}/GrSelect/selectValue.d.ts +0 -0
  900. /package/dist/types/{src/components → components}/GrSidebar/GrSidebar.vue.d.ts +0 -0
  901. /package/dist/types/{src/components → components}/GrSidebar/GrSidebarGroup.vue.d.ts +0 -0
  902. /package/dist/types/{src/components → components}/GrSidebar/GrSidebarItem.vue.d.ts +0 -0
  903. /package/dist/types/{src/components → components}/GrSidebar/config.d.ts +0 -0
  904. /package/dist/types/{src/components → components}/GrSidebar/grSidebarStyles.d.ts +0 -0
  905. /package/dist/types/{src/components → components}/GrSidebar/safelist.d.ts +0 -0
  906. /package/dist/types/{src/components → components}/GrSidebar/sidebarContext.d.ts +0 -0
  907. /package/dist/types/{src/components → components}/GrSkeleton/GrSkeleton.vue.d.ts +0 -0
  908. /package/dist/types/{src/components → components}/GrSkeleton/config.d.ts +0 -0
  909. /package/dist/types/{src/components → components}/GrSkeleton/grSkeletonStyles.d.ts +0 -0
  910. /package/dist/types/{src/components → components}/GrSlider/GrSlider.vue.d.ts +0 -0
  911. /package/dist/types/{src/components → components}/GrSlider/config.d.ts +0 -0
  912. /package/dist/types/{src/components → components}/GrSlider/defaults.d.ts +0 -0
  913. /package/dist/types/{src/components → components}/GrSlider/grSliderStyles.d.ts +0 -0
  914. /package/dist/types/{src/components → components}/GrSlider/index.d.ts +0 -0
  915. /package/dist/types/{src/components → components}/GrSlider/safelist.d.ts +0 -0
  916. /package/dist/types/{src/components → components}/GrSortableList/GrSortableList.vue.d.ts +0 -0
  917. /package/dist/types/{src/components → components}/GrSortableList/config.d.ts +0 -0
  918. /package/dist/types/{src/components → components}/GrSortableList/index.d.ts +0 -0
  919. /package/dist/types/{src/components → components}/GrSortableList/safelist.d.ts +0 -0
  920. /package/dist/types/{src/components → components}/GrSplitter/GrSplitter.vue.d.ts +0 -0
  921. /package/dist/types/{src/components → components}/GrSplitter/config.d.ts +0 -0
  922. /package/dist/types/{src/components → components}/GrSplitter/defaults.d.ts +0 -0
  923. /package/dist/types/{src/components → components}/GrSplitter/grSplitterStyles.d.ts +0 -0
  924. /package/dist/types/{src/components → components}/GrSplitter/safelist.d.ts +0 -0
  925. /package/dist/types/{src/components → components}/GrSplitter/splitterGeometry.d.ts +0 -0
  926. /package/dist/types/{src/components → components}/GrStatistic/config.d.ts +0 -0
  927. /package/dist/types/{src/components → components}/GrStatistic/countUp.d.ts +0 -0
  928. /package/dist/types/{src/components → components}/GrStatistic/defaults.d.ts +0 -0
  929. /package/dist/types/{src/components → components}/GrStatistic/formatStatisticValue.d.ts +0 -0
  930. /package/dist/types/{src/components → components}/GrStatistic/index.d.ts +0 -0
  931. /package/dist/types/{src/components → components}/GrStatistic/safelist.d.ts +0 -0
  932. /package/dist/types/{src/components → components}/GrSwitch/GrSwitch.vue.d.ts +0 -0
  933. /package/dist/types/{src/components → components}/GrSwitch/config.d.ts +0 -0
  934. /package/dist/types/{src/components → components}/GrSwitch/defaults.d.ts +0 -0
  935. /package/dist/types/{src/components → components}/GrSwitch/grSwitchStyles.d.ts +0 -0
  936. /package/dist/types/{src/components → components}/GrSwitch/index.d.ts +0 -0
  937. /package/dist/types/{src/components → components}/GrSwitch/safelist.d.ts +0 -0
  938. /package/dist/types/{src/components → components}/GrTabPanels/GrTabPanel.vue.d.ts +0 -0
  939. /package/dist/types/{src/components → components}/GrTabPanels/GrTabPanels.vue.d.ts +0 -0
  940. /package/dist/types/{src/components → components}/GrTabPanels/config.d.ts +0 -0
  941. /package/dist/types/{src/components → components}/GrTabPanels/context.d.ts +0 -0
  942. /package/dist/types/{src/components → components}/GrTable/GrTable.vue.d.ts +0 -0
  943. /package/dist/types/{src/components → components}/GrTable/config.d.ts +0 -0
  944. /package/dist/types/{src/components → components}/GrTable/defaults.d.ts +0 -0
  945. /package/dist/types/{src/components → components}/GrTable/grTableStyles.d.ts +0 -0
  946. /package/dist/types/{src/components → components}/GrTable/index.d.ts +0 -0
  947. /package/dist/types/{src/components → components}/GrTable/safelist.d.ts +0 -0
  948. /package/dist/types/{src/components → components}/GrTabs/config.d.ts +0 -0
  949. /package/dist/types/{src/components → components}/GrTabs/defaults.d.ts +0 -0
  950. /package/dist/types/{src/components → components}/GrTabs/grTabsStyles.d.ts +0 -0
  951. /package/dist/types/{src/components → components}/GrTabs/safelist.d.ts +0 -0
  952. /package/dist/types/{src/components → components}/GrTextarea/GrTextarea.vue.d.ts +0 -0
  953. /package/dist/types/{src/components → components}/GrTextarea/config.d.ts +0 -0
  954. /package/dist/types/{src/components → components}/GrTextarea/defaults.d.ts +0 -0
  955. /package/dist/types/{src/components → components}/GrTextarea/grTextareaStyles.d.ts +0 -0
  956. /package/dist/types/{src/components → components}/GrTextarea/index.d.ts +0 -0
  957. /package/dist/types/{src/components → components}/GrTextarea/safelist.d.ts +0 -0
  958. /package/dist/types/{src/components → components}/GrTimeline/GrTimeline.vue.d.ts +0 -0
  959. /package/dist/types/{src/components → components}/GrTimeline/GrTimelineItem.vue.d.ts +0 -0
  960. /package/dist/types/{src/components → components}/GrTimeline/config.d.ts +0 -0
  961. /package/dist/types/{src/components → components}/GrTimeline/defaults.d.ts +0 -0
  962. /package/dist/types/{src/components → components}/GrTimeline/grTimelineContext.d.ts +0 -0
  963. /package/dist/types/{src/components → components}/GrTimeline/grTimelineStyles.d.ts +0 -0
  964. /package/dist/types/{src/components → components}/GrTimeline/safelist.d.ts +0 -0
  965. /package/dist/types/{src/components → components}/GrTimeline/timelineGroups.d.ts +0 -0
  966. /package/dist/types/{src/components → components}/GrToaster/GrToaster.vue.d.ts +0 -0
  967. /package/dist/types/{src/components → components}/GrToaster/config.d.ts +0 -0
  968. /package/dist/types/{src/components → components}/GrToaster/grToasterStyles.d.ts +0 -0
  969. /package/dist/types/{src/components → components}/GrToaster/index.d.ts +0 -0
  970. /package/dist/types/{src/components → components}/GrToaster/safelist.d.ts +0 -0
  971. /package/dist/types/{src/components → components}/GrTooltip/GrTooltip.vue.d.ts +0 -0
  972. /package/dist/types/{src/components → components}/GrTooltip/config.d.ts +0 -0
  973. /package/dist/types/{src/components → components}/GrTooltip/defaults.d.ts +0 -0
  974. /package/dist/types/{src/components → components}/GrTooltip/grTooltipStyles.d.ts +0 -0
  975. /package/dist/types/{src/components → components}/GrTooltip/index.d.ts +0 -0
  976. /package/dist/types/{src/components → components}/GrTooltip/safelist.d.ts +0 -0
  977. /package/dist/types/{src/components → components}/GrTree/GrTree.vue.d.ts +0 -0
  978. /package/dist/types/{src/components → components}/GrTree/config.d.ts +0 -0
  979. /package/dist/types/{src/components → components}/GrTree/defaults.d.ts +0 -0
  980. /package/dist/types/{src/components → components}/GrTree/grTreeChecking.d.ts +0 -0
  981. /package/dist/types/{src/components → components}/GrTree/grTreeDataAdapter.d.ts +0 -0
  982. /package/dist/types/{src/components → components}/GrTree/grTreeInteractionContext.d.ts +0 -0
  983. /package/dist/types/{src/components → components}/GrTree/grTreeStore.d.ts +0 -0
  984. /package/dist/types/{src/components → components}/GrTree/grTreeStyles.d.ts +0 -0
  985. /package/dist/types/{src/components → components}/GrTree/grTreeTypes.d.ts +0 -0
  986. /package/dist/types/{src/components → components}/GrTree/index.d.ts +0 -0
  987. /package/dist/types/{src/components → components}/GrTreeSelect/config.d.ts +0 -0
  988. /package/dist/types/{src/components → components}/GrTreeSelect/defaults.d.ts +0 -0
  989. /package/dist/types/{src/components → components}/GrTreeSelect/grTreeSelectStyles.d.ts +0 -0
  990. /package/dist/types/{src/components → components}/GrTreeSelect/grTreeSelectTypes.d.ts +0 -0
  991. /package/dist/types/{src/components → components}/GrTreeSelect/index.d.ts +0 -0
  992. /package/dist/types/{src/components → components}/GrTreeSelect/safelist.d.ts +0 -0
  993. /package/dist/types/{src/components → components}/shared/classTokens.d.ts +0 -0
  994. /package/dist/types/{src/components → components}/shared/hotkey.d.ts +0 -0
  995. /package/dist/types/{src/components → components}/shared/hotkeyTokens.d.ts +0 -0
  996. /package/dist/types/{src/components → components}/shared/instance.d.ts +0 -0
  997. /package/dist/types/{src/components → components}/shared/optionFilter.d.ts +0 -0
  998. /package/dist/types/{src/components → components}/shared/sizes.d.ts +0 -0
  999. /package/dist/types/{src/components → components}/shared/slotNodes.d.ts +0 -0
  1000. /package/dist/types/{src/components → components}/shared/tones.d.ts +0 -0
  1001. /package/dist/types/{src/composables → composables}/internal/dragSortGeometry.d.ts +0 -0
  1002. /package/dist/types/{src/composables → composables}/internal/focusables.d.ts +0 -0
  1003. /package/dist/types/{src/composables → composables}/internal/inert.d.ts +0 -0
  1004. /package/dist/types/{src/composables → composables}/internal/overlayStack.d.ts +0 -0
  1005. /package/dist/types/{src/composables → composables}/internal/portalRoot.d.ts +0 -0
  1006. /package/dist/types/{src/composables → composables}/internal/useAddonMeasurement.d.ts +0 -0
  1007. /package/dist/types/{src/composables → composables}/internal/useControlAddons.d.ts +0 -0
  1008. /package/dist/types/{src/composables → composables}/internal/useControlledOpen.d.ts +0 -0
  1009. /package/dist/types/{src/composables → composables}/internal/useFilePreviews.d.ts +0 -0
  1010. /package/dist/types/{src/composables → composables}/internal/useFocusWithin.d.ts +0 -0
  1011. /package/dist/types/{src/composables → composables}/internal/useInertOthers.d.ts +0 -0
  1012. /package/dist/types/{src/composables → composables}/internal/useModalOverlay.d.ts +0 -0
  1013. /package/dist/types/{src/composables → composables}/internal/useOverlayPresence.d.ts +0 -0
  1014. /package/dist/types/{src/composables → composables}/internal/useScrollLock.d.ts +0 -0
  1015. /package/dist/types/{src/composables → composables}/internal/useTeleportEnabled.d.ts +0 -0
  1016. /package/dist/types/{src/composables → composables}/useAnnouncer.d.ts +0 -0
  1017. /package/dist/types/{src/composables → composables}/useComboboxNavigation.d.ts +0 -0
  1018. /package/dist/types/{src/composables → composables}/useDismissible.d.ts +0 -0
  1019. /package/dist/types/{src/composables → composables}/useDragGesture.d.ts +0 -0
  1020. /package/dist/types/{src/composables → composables}/useDragSort.d.ts +0 -0
  1021. /package/dist/types/{src/composables → composables}/useFloating.d.ts +0 -0
  1022. /package/dist/types/{src/composables → composables}/useFocusTrap.d.ts +0 -0
  1023. /package/dist/types/{src/composables → composables}/useGrComponentConfig.d.ts +0 -0
  1024. /package/dist/types/{src/composables → composables}/useGrFormControl.d.ts +0 -0
  1025. /package/dist/types/{src/composables → composables}/useGranularityTranslations.d.ts +0 -0
  1026. /package/dist/types/{src/composables → composables}/useOverlayLayer.d.ts +0 -0
  1027. /package/dist/types/{src/composables → composables}/usePortalTarget.d.ts +0 -0
  1028. /package/dist/types/{src/composables → composables}/useRovingFocus.d.ts +0 -0
  1029. /package/dist/types/{src/composables → composables}/useTheme.d.ts +0 -0
  1030. /package/dist/types/{src/composables → composables}/useToast.d.ts +0 -0
  1031. /package/dist/types/{src/composables → composables}/useVirtualList.d.ts +0 -0
  1032. /package/dist/types/{src/directives → directives}/autofocus.d.ts +0 -0
  1033. /package/dist/types/{src/directives → directives}/autosize.d.ts +0 -0
  1034. /package/dist/types/{src/directives → directives}/clickOutside.d.ts +0 -0
  1035. /package/dist/types/{src/directives → directives}/dropzone.d.ts +0 -0
  1036. /package/dist/types/{src/directives → directives}/globalDirectives.d.ts +0 -0
  1037. /package/dist/types/{src/directives → directives}/hotkey.d.ts +0 -0
  1038. /package/dist/types/{src/directives → directives}/index.d.ts +0 -0
  1039. /package/dist/types/{src/directives → directives}/loading.d.ts +0 -0
  1040. /package/dist/types/{src/fileValidation → fileValidation}/FileValidationError.d.ts +0 -0
  1041. /package/dist/types/{src/fileValidation → fileValidation}/acceptValidator.d.ts +0 -0
  1042. /package/dist/types/{src/fileValidation → fileValidation}/allowedExtensionsValidator.d.ts +0 -0
  1043. /package/dist/types/{src/fileValidation → fileValidation}/allowedMimeTypesValidator.d.ts +0 -0
  1044. /package/dist/types/{src/fileValidation → fileValidation}/i18n.d.ts +0 -0
  1045. /package/dist/types/{src/fileValidation → fileValidation}/index.d.ts +0 -0
  1046. /package/dist/types/{src/fileValidation → fileValidation}/matchAccept.d.ts +0 -0
  1047. /package/dist/types/{src/fileValidation → fileValidation}/maxCountValidator.d.ts +0 -0
  1048. /package/dist/types/{src/fileValidation → fileValidation}/maxFileSize.d.ts +0 -0
  1049. /package/dist/types/{src/fileValidation → fileValidation}/maxTotalSizeBytesValidator.d.ts +0 -0
  1050. /package/dist/types/{src/fileValidation → fileValidation}/runFileValidators.d.ts +0 -0
  1051. /package/dist/types/{src/fileValidation → fileValidation}/types.d.ts +0 -0
  1052. /package/dist/types/{src/granular-provider → granular-provider}/index.d.ts +0 -0
  1053. /package/dist/types/{src/granular-provider → granular-provider}/node.d.ts +0 -0
  1054. /package/dist/types/{src/granular-provider → granular-provider}/shared.d.ts +0 -0
  1055. /package/dist/types/{src/i18n → i18n}/adapter.d.ts +0 -0
  1056. /package/dist/types/{src/i18n → i18n}/all.d.ts +0 -0
  1057. /package/dist/types/{src/i18n → i18n}/index.d.ts +0 -0
  1058. /package/dist/types/{src/i18n → i18n}/messages/const.d.ts +0 -0
  1059. /package/dist/types/{src/i18n → i18n}/messages/en.d.ts +0 -0
  1060. /package/dist/types/{src/i18n → i18n}/messages/es.d.ts +0 -0
  1061. /package/dist/types/{src/i18n → i18n}/messages/index.d.ts +0 -0
  1062. /package/dist/types/{src/i18n → i18n}/messages/ru.d.ts +0 -0
  1063. /package/dist/types/{src/index.d.ts → index.d.ts} +0 -0
  1064. /package/dist/types/{src/internal → internal}/granularityFormat.d.ts +0 -0
  1065. /package/dist/types/{src/internal → internal}/granularityI18n.d.ts +0 -0
  1066. /package/dist/types/{src/internal → internal}/keyboard.d.ts +0 -0
  1067. /package/dist/types/{src/tokens → tokens}/generated.d.ts +0 -0
  1068. /package/dist/types/{src/tokens → tokens}/index.d.ts +0 -0
  1069. /package/dist/types/{src/vue → vue}/index.d.ts +0 -0
  1070. /package/dist/types/{src/vue → vue}/plugin.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDataTable-CNvZg2HZ.js","names":["$slots"],"sources":["../../../../src/components/GrDataTable/grDataTableSort.ts","../../../../src/components/GrDataTable/GrDataTable.vue","../../../../src/components/GrDataTable/GrDataTable.vue"],"sourcesContent":["/**\n * Сравнение значений ячеек для сортировки `GrDataTable`.\n *\n * Логика вынесена из SFC: у неё есть крайние случаи, которые дешевле проверить\n * прямым вызовом, чем через монтирование таблицы.\n *\n * Прежняя реализация приводила значение к числу через `Number(value)`, а он\n * считает нулём и `null`, и пустую строку: пустые ячейки оседали в середине\n * числового ряда, между отрицательными и положительными. Здесь пустое значение —\n * отдельная категория, и она всегда в конце, независимо от направления.\n */\n\nexport type GrDataTableSortDir = 'asc' | 'desc'\n\n/** Пустое значение ячейки: нечего сравнивать, место таким — в конце списка. */\nexport function isEmptyCell(value: unknown): boolean {\n if (value === null || value === undefined)\n return true\n\n return typeof value === 'string' && value.trim() === ''\n}\n\n/**\n * Число, с которым имеет смысл сравнивать: сам `number`, числовая строка, `Date`\n * (по таймстампу), `boolean` (`false` < `true`). Иначе — `null`, и сравнение\n * уходит в строковую ветку.\n */\nfunction toComparableNumber(value: unknown): number | null {\n if (typeof value === 'number')\n return Number.isFinite(value) ? value : null\n\n if (typeof value === 'boolean')\n return value ? 1 : 0\n\n if (typeof value === 'bigint')\n return Number(value)\n\n if (value instanceof Date) {\n const time = value.getTime()\n return Number.isNaN(time) ? null : time\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed === '')\n return null\n\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n }\n\n return null\n}\n\n/**\n * Сравнивает два значения ячейки. Возвращает готовую разницу с учётом `dir` —\n * кроме пустых значений: они всегда в конце, иначе «пустые» в `desc` уезжали бы\n * наверх и таблица выглядела бы сломанной.\n */\nexport function compareCells(\n a: unknown,\n b: unknown,\n dir: GrDataTableSortDir,\n locale?: string,\n): number {\n const aEmpty = isEmptyCell(a)\n const bEmpty = isEmptyCell(b)\n if (aEmpty || bEmpty)\n return aEmpty && bEmpty ? 0 : (aEmpty ? 1 : -1)\n\n const aNum = toComparableNumber(a)\n const bNum = toComparableNumber(b)\n\n const result = aNum !== null && bNum !== null\n ? aNum - bNum\n : String(a).localeCompare(String(b), locale, { sensitivity: 'base', numeric: true })\n\n return dir === 'asc' ? result : -result\n}\n\n/**\n * Новый отсортированный массив. Исходный не мутируется: `rows` приходят пропом,\n * сортировка на месте меняла бы данные потребителя.\n */\nexport function sortRows<TRow extends Record<string, unknown>>(\n rows: readonly TRow[],\n key: string,\n dir: GrDataTableSortDir,\n locale?: string,\n): TRow[] {\n return [...rows].sort((a, b) => compareCells(a[key], b[key], dir, locale))\n}\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, useId, watch } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useAnnouncer } from '../../composables/useAnnouncer'\nimport { useDragGesture } from '../../composables/useDragGesture'\nimport { useDragSort } from '../../composables/useDragSort'\nimport { useRovingFocus } from '../../composables/useRovingFocus'\nimport { useVirtualList } from '../../composables/useVirtualList'\nimport { insertionIndex, moveItem } from '../../composables/internal/dragSortGeometry'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { sortRows, type GrDataTableSortDir } from './grDataTableSort'\nimport {\n type GrDataTableSize,\n cellPaddings,\n columnDraggingClass,\n columnDropAfterClass,\n columnDropBeforeClass,\n columnHandleActiveClass,\n columnHandleClass,\n columnPinnedClass,\n columnPinnedLeftEdgeClass,\n columnPinnedRightEdgeClass,\n columnResizerClass,\n columnResizerHoverClass,\n columnResizerLineActiveClass,\n columnResizerLineClass,\n headerGaps,\n headerTextSizes,\n placeholderPaddings,\n rowHeightEstimates,\n rowSelectedClass,\n selectCheckboxSizes,\n selectColumnWidths,\n sortIconSizes,\n spinnerSizes,\n} from './grDataTableStyles'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconGripVertical from '~icons/lucide/grip-vertical'\nimport IconLoaderCircle from '~icons/lucide/loader-circle'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\n/**\n * Ключ колонки. Собственные поля строки подсказываются автодополнением, но\n * произвольная строка тоже допустима: колонка может быть вычисляемой и жить\n * только в слоте `#cell-<key>`.\n */\nexport type GrDataColumnKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | Extract<keyof TRow, string>\n | (string & {})\n\nexport type GrDataColumn<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n key: GrDataColumnKey<TRow>\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n /**\n * Ширина колонки: число — пиксели, строка — как есть (`'40%'`, `'12rem'`).\n *\n * Уезжает в заголовочную ячейку: при фиксированной раскладке ширины колонок\n * задаёт первая строка таблицы, а это и есть `<thead>`.\n */\n width?: string | number\n /**\n * Колонка липнет к краю при горизонтальной прокрутке.\n *\n * Закреплённые колонки всегда стоят своей группой у своего края — перенос\n * колонки из группы в группу запрещён, иначе «закреплена слева» перестало бы\n * означать «слева».\n */\n pinned?: 'left' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\n/** Порядок обхода состояний сортировки по клику на заголовок. */\nexport type GrDataTableSortCycle = 'asc-desc' | 'asc-desc-none'\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn<TRow>[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: GrDataTableSortDir\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: GrDataTableSortDir\n /** Клик по заголовку: `asc → desc` или `asc → desc → без сортировки`. */\n sortCycle?: GrDataTableSortCycle\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sortChange`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /** Предикат «строку можно выбрать». Невыбираемые строки не попадают и в «выбрать все». */\n selectableRow?: (row: TRow) => boolean\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n /** Текст пустого состояния. i18n: fallback `gr.dataTable.empty`; слот `#empty` сильнее. */\n emptyText?: string\n /** Класс строки: общий для всех либо вычисляемый по строке. */\n rowClass?: string | ((row: TRow, index: number) => string | undefined)\n /** Произвольные атрибуты строки (`data-*`, `title`, …). */\n rowProps?: (row: TRow, index: number) => Record<string, unknown> | undefined\n /**\n * Размер таблицы: кегль, паддинги ячеек, стрелки сортировки и чекбоксы.\n * Прокидывается в `GrTable`.\n */\n size?: GrDataTableSize\n // Прокси к GrTable:\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /**\n * Виртуализация строк: в DOM живёт только окно вокруг вьюпорта. Высоту окна\n * задаёт `maxHeight`, без него окна прокрутки не существует.\n *\n * Включает фиксированную раскладку таблицы: ширина колонки считается по\n * содержимому всех строк, а в DOM их только окно — без фиксации колонки\n * прыгали бы на каждой прокрутке. Ширины стоит задать через `width` у\n * колонок, иначе фиксированная раскладка делит место поровну.\n */\n virtual?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n /**\n * Пользовательский порядок колонок: в шапке появляется ручка переноса.\n * Колонка тянется указателем и двигается `Shift`+`←`/`→` с клавиатуры.\n */\n reorderableColumns?: boolean\n /**\n * Контролируемый порядок колонок — ключи в нужном порядке (`v-model:columnOrder`).\n * Не задан — порядок компонент помнит сам, начиная с порядка `columns`.\n */\n columnOrder?: string[]\n /**\n * Пользовательская ширина колонок: у правого края заголовка появляется ручка.\n * Тянется указателем, с клавиатуры — стрелками (паттерн window splitter).\n *\n * Включает фиксированную раскладку таблицы: без неё браузер пересчитывает\n * ширины по содержимому и заданная пользователем пропадает.\n */\n resizableColumns?: boolean\n /**\n * Контролируемые ширины в пикселях по ключу колонки (`v-model:columnWidths`).\n * Не заданы — ширины компонент помнит сам.\n */\n columnWidths?: Record<string, number>\n}\n\nexport interface GrDataTableEmits<TRow extends Record<string, unknown> = Record<string, unknown>> {\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: GrDataTableSortDir): void\n (e: 'sortChange', value: { key: string, dir: GrDataTableSortDir }): void\n (e: 'update:selected', value: Array<string | number>): void\n (e: 'rowClick', payload: { row: TRow, index: number, event: MouseEvent }): void\n (e: 'update:columnOrder', value: string[]): void\n (e: 'columnReorder', payload: { key: string, from: number, to: number }): void\n (e: 'update:columnWidths', value: Record<string, number>): void\n (e: 'columnResize', payload: { key: string, width: number }): void\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#header-<key>`,\n * `#caption`, `#footer`, `#empty`, `#loading`.\n *\n * Сортировка, включая крайние случаи с пустыми и смешанными значениями, живёт\n * в `grDataTableSort.ts` — см. `docs/components/GrDataTable.md`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as GrDataTableRowKey<TRow>,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n sortCycle: 'asc-desc',\n externalSort: false,\n selectable: false,\n selected: undefined,\n selectableRow: undefined,\n loading: false,\n loadingText: undefined,\n emptyText: undefined,\n rowClass: undefined,\n rowProps: undefined,\n size: undefined,\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n virtual: false,\n reorderableColumns: false,\n columnOrder: undefined,\n resizableColumns: false,\n columnWidths: undefined,\n})\n\nconst emit = defineEmits<GrDataTableEmits<TRow>>()\n\nconst { t, locale } = useGranularityTranslations()\nconst { announce } = useAnnouncer()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.dataTable.empty', 'No data'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<GrDataTableSortDir>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<GrDataTableSortDir>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: GrDataTableSortDir): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sortChange', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return [...props.rows]\n\n const key = currentSortKey.value\n if (!key)\n return [...props.rows]\n\n return sortRows(props.rows, key, currentSortDir.value, locale.value)\n})\n\nfunction toggleSort(col: GrDataColumn<TRow>): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n if (currentSortDir.value === 'asc') {\n applySort(col.key, 'desc')\n return\n }\n\n // Третье состояние: сортировка снимается, порядок возвращается к исходному.\n if (props.sortCycle === 'asc-desc-none') {\n applySort('', 'asc')\n return\n }\n\n applySort(col.key, 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn<TRow>): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\n/**\n * Синтетические ключи для строк, у которых поле `rowKey` пустое.\n *\n * Без них строка получила бы `String(undefined ?? '')` — **один и тот же** ключ\n * на всю таблицу: Vue переиспользовал бы DOM не по назначению, а выбор одной\n * строки помечал бы выбранными все. Ключ привязан к идентичности объекта,\n * поэтому переживает сортировку и не зависит от индекса.\n */\nconst syntheticKeys = new WeakMap<object, string>()\nlet syntheticKeyCounter = 0\nconst missingKeyWarned = ref(false)\n\nfunction syntheticRowKey(row: TRow): string {\n const existing = syntheticKeys.get(row)\n if (existing !== undefined)\n return existing\n\n syntheticKeyCounter += 1\n const generated = `gr-row-${syntheticKeyCounter}`\n syntheticKeys.set(row, generated)\n\n if (!missingKeyWarned.value && process.env.NODE_ENV !== 'production') {\n missingKeyWarned.value = true\n console.warn(\n `[GrDataTable] У строки нет значения по ключу \"${String(props.rowKey)}\". `\n + 'Задайте `rowKey` (поле или функцию) — иначе выбор строк и переиспользование '\n + 'DOM работают по синтетическому ключу, который не переживёт перезагрузку данных.',\n )\n }\n\n return generated\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n\n const value = (row as Record<string, unknown>)[rk as string]\n if (typeof value === 'string' && value !== '')\n return value\n if (typeof value === 'number')\n return value\n\n return syntheticRowKey(row)\n}\n\nfunction ariaSortFor(col: GrDataColumn<TRow>): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\n/**\n * Подсказка «что сделает нажатие» — visually hidden текстом **после** подписи\n * колонки, а не `aria-label`'ом на кнопке. `aria-label` подменял бы собой имя\n * `<th>`, и AT при переходе по ячейкам вместо «Название» читала бы\n * «Отсортировано по Название по возрастанию, нажмите…». Текущее состояние\n * сортировки при этом объявляет `aria-sort` на самом `<th>`.\n */\nfunction sortHint(col: GrDataColumn<TRow>): string {\n if (currentSortKey.value !== col.key)\n return t('gr.dataTable.sortAsc', 'Activate to sort ascending')\n\n if (currentSortDir.value === 'asc')\n return t('gr.dataTable.sortDesc', 'Activate to sort descending')\n\n return props.sortCycle === 'asc-desc-none'\n ? t('gr.dataTable.sortNone', 'Activate to remove sorting')\n : t('gr.dataTable.sortAsc', 'Activate to sort ascending')\n}\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrDataTable' })\n\nconst cellClass = computed(() => cellPaddings[resolvedSize.value])\nconst placeholderClass = computed(() => placeholderPaddings[resolvedSize.value])\nconst headerTextClass = computed(() => headerTextSizes[resolvedSize.value])\nconst headerGapClass = computed(() => headerGaps[resolvedSize.value])\nconst selectColumnClass = computed(() => selectColumnWidths[resolvedSize.value])\nconst spinnerClass = computed(() => spinnerSizes[resolvedSize.value])\nconst sortIconSize = computed(() => sortIconSizes[resolvedSize.value])\nconst checkboxSize = computed(() => selectCheckboxSizes[resolvedSize.value])\n\n/**\n * Номер строки и полное их число объявляем только при виртуализации: иначе\n * диктор считает строки по разметке, а там всего окно. Заголовок — строка\n * первая, поэтому строки набора начинаются со второй.\n */\nconst ariaRowCount = computed(() => (props.virtual ? sortedRows.value.length + 1 : undefined))\n\nfunction ariaRowIndex(index: number): number | undefined {\n return props.virtual ? index + 2 : undefined\n}\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\n// ————— Порядок колонок.\n\n/** Uncontrolled-состояние; в controlled-режиме перекрывается пропом `columnOrder`. */\nconst internalColumnOrder = ref<string[]>(props.columns.map(col => String(col.key)))\n\n/**\n * Колонки в пользовательском порядке.\n *\n * Состав задаёт `columns`, порядок — только порядок: ключ, которого в наборе\n * нет, игнорируется, а колонка, которой нет в порядке (её только что добавили),\n * встаёт в конец. Иначе правка `columns` теряла бы колонки молча.\n */\nconst orderedColumns = computed<GrDataColumn<TRow>[]>(() => {\n const order = props.columnOrder ?? internalColumnOrder.value\n const remaining = new Map(props.columns.map(col => [String(col.key), col]))\n const ordered: GrDataColumn<TRow>[] = []\n\n for (const key of order) {\n const col = remaining.get(key)\n if (!col) continue\n\n remaining.delete(key)\n ordered.push(col)\n }\n\n for (const col of props.columns) {\n if (remaining.has(String(col.key))) ordered.push(col)\n }\n\n // Закреплённые колонки стоят своими группами у своих краёв — иначе\n // «закреплена слева» не означало бы «слева». Сортировка устойчивая, поэтому\n // внутри группы порядок остаётся пользовательским.\n return ordered.sort((a, b) => pinGroupOf(a) - pinGroupOf(b))\n})\n\n/** Группа закрепления: 0 — слева, 1 — обычная колонка, 2 — справа. */\nfunction pinGroupOf(col: GrDataColumn<TRow>): number {\n if (col.pinned === 'left') return 0\n if (col.pinned === 'right') return 2\n\n return 1\n}\n\n/**\n * Сумма заданных ширин — минимальная ширина таблицы.\n *\n * Без неё фиксированная раскладка вписывает таблицу в контейнер и делит место\n * пропорционально: колонка, которую пользователь растянул, ужимается обратно, а\n * горизонтальной прокрутки — той самой, ради которой закрепляют колонки, — не\n * возникает. Считается, только когда ширина известна у **всех** колонок: с\n * одной неизвестной сумма врала бы.\n */\nconst tableMinWidth = computed<number | undefined>(() => {\n const cols = orderedColumns.value\n if (cols.length === 0) return undefined\n\n let total = 0\n for (const col of cols) {\n const width = widthOf(col)\n if (typeof width !== 'number') return undefined\n\n total += width\n }\n\n return total\n})\n\nconst columnKeys = computed(() => orderedColumns.value.map(col => String(col.key)))\n\nconst tableProps = computed(() => ({\n size: resolvedSize.value,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n rowCount: ariaRowCount.value,\n // Пользовательская ширина требует фиксированной раскладки: на авторазметке\n // браузер пересчитывает колонки по содержимому, и заданная ширина пропадает.\n fixedLayout: props.virtual || props.resizableColumns,\n tableMinWidth: tableMinWidth.value,\n}))\n\nfunction indexOfColumn(key: string): number {\n return columnKeys.value.indexOf(key)\n}\n\nconst headerCellEls = new Map<string, HTMLElement>()\nconst columnHandleEls = new Map<string, HTMLElement>()\n\nfunction registerEl(store: Map<string, HTMLElement>, key: string, el: unknown): void {\n if (el instanceof HTMLElement) {\n store.set(key, el)\n return\n }\n\n // Перестановка размонтирует старую ячейку уже после того, как встала новая:\n // снимаем запись, только если она протухла.\n const previous = store.get(key)\n if (previous && !previous.isConnected) store.delete(key)\n}\n\nfunction applyColumnMove(from: number, to: number): void {\n const keys = columnKeys.value\n if (from < 0 || to < 0 || to >= keys.length || from === to) return\n if (!sameGroup(from, to)) return\n\n const key = keys[from]\n // Подпись берётся до перестановки: `orderedColumns` — computed, и после\n // записи порядка по индексу `from` стоит уже другая колонка.\n const label = orderedColumns.value[from]?.label ?? key\n const next = moveItem(keys, from, to)\n\n internalColumnOrder.value = next\n emit('update:columnOrder', next)\n emit('columnReorder', { key, from, to })\n\n announce(t('gr.dataTable.columnMoved', 'Column {label} moved to position {position} of {count}', {\n label,\n position: to + 1,\n count: keys.length,\n }))\n}\n\nconst columnSort = useDragSort<string, number>({\n items: () => columnKeys.value,\n elementFor: key => headerCellEls.get(key) ?? null,\n orientation: () => 'horizontal',\n disabled: () => !props.reorderableColumns || props.loading,\n resolveTarget: (hit, source) => {\n const to = insertionIndex(hit, indexOfColumn(source), columnKeys.value.length)\n\n // Через границу закрепления не переносим: группы у краёв постоянны.\n return sameGroup(indexOfColumn(source), to) ? to : null\n },\n onDrop: (source, to) => applyColumnMove(indexOfColumn(source), to),\n})\n\nfunction sameGroup(from: number, to: number): boolean {\n const cols = orderedColumns.value\n if (!cols[from] || !cols[to]) return false\n\n return pinGroupOf(cols[from]) === pinGroupOf(cols[to])\n}\n\n/**\n * Кольцо роверного фокуса по ручкам: одна остановка `Tab` на всю шапку.\n * Иначе таблица из десяти колонок добавляла бы десять таб-стопов подряд.\n */\nconst columnRoving = useRovingFocus<string>({\n items: () => (props.reorderableColumns ? columnKeys.value : []),\n elementFor: key => columnHandleEls.get(key) ?? null,\n orientation: () => 'horizontal',\n wrap: () => false,\n})\n\nasync function onColumnHandleKeydown(event: KeyboardEvent, key: string): Promise<void> {\n if (!props.reorderableColumns) return\n\n // `Shift` со стрелкой двигает колонку, голая стрелка — фокус между ручками.\n // Раскладка та же, что у переноса узла в `GrTree`.\n if (event.shiftKey && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n event.preventDefault()\n\n const from = indexOfColumn(key)\n applyColumnMove(from, event.key === 'ArrowLeft' ? from - 1 : from + 1)\n\n // Шапка перерисовывается: без возврата фокуса следующий `Shift` было бы\n // некуда адресовать.\n await nextTick()\n await columnRoving.focusKey(key)\n return\n }\n\n columnRoving.handleNavigationKeys(event)\n}\n\nconst draggingColumnKey = computed(() => (columnSort.mode.value === null ? null : columnSort.source.value))\n\n/** Полоса места вставки — на колонке-соседе, со стороны движения. */\nfunction columnDropClass(index: number): string {\n const target = columnSort.target.value\n if (!columnSort.isActive.value || target === null || target !== index) return ''\n\n const active = columnSort.source.value === null ? -1 : indexOfColumn(columnSort.source.value)\n if (index === active) return ''\n\n return target < active ? columnDropBeforeClass : columnDropAfterClass\n}\n\nconst columnHandleLabel = (col: GrDataColumn<TRow>): string =>\n t('gr.dataTable.moveColumn', 'Move column {label}', { label: col.label })\n\n// ————— Ширина колонок.\n\n/** Уже колонки не бывает: в неё перестаёт помещаться даже стрелка сортировки. */\nconst MIN_COLUMN_WIDTH = 48\n/** Шаг клавиатуры и крупный шаг — как у `GrSplitter`. */\nconst RESIZE_STEP = 16\nconst RESIZE_BIG_STEP = 48\n\nconst internalColumnWidths = ref<Record<string, number>>({})\nconst columnWidths = computed(() => props.columnWidths ?? internalColumnWidths.value)\n\n/** Фактические ширины шапки: заполняются замером, см. `measureLayout`. */\nconst measuredColumnWidths = ref<Record<string, number>>({})\n\n/** Ширина колонки: заданная пользователем сильнее объявленной в `columns`. */\nfunction widthOf(col: GrDataColumn<TRow>): string | number | undefined {\n return columnWidths.value[String(col.key)] ?? col.width\n}\n\nconst resizingKey = ref<string | null>(null)\nlet pendingResizeKey: string | null = null\nlet resizeStartX = 0\nlet resizeStartWidth = 0\nlet widthBeforeResize: number | undefined\n\nfunction setColumnWidth(key: string, width: number): void {\n const next = { ...columnWidths.value, [key]: Math.max(MIN_COLUMN_WIDTH, Math.round(width)) }\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n}\n\nfunction announceWidth(key: string): void {\n const col = orderedColumns.value.find(item => String(item.key) === key)\n if (!col) return\n\n announce(t('gr.dataTable.columnResized', 'Column {label} is {width} pixels wide', {\n label: col.label,\n width: columnWidths.value[key] ?? 0,\n }))\n}\n\nconst resizeGesture = useDragGesture({\n disabled: () => !props.resizableColumns || props.loading,\n onStart: (event) => {\n const key = pendingResizeKey\n const el = key === null ? null : headerCellEls.get(key)\n if (key === null || !el) return false\n\n resizeStartX = event.clientX\n // Стартовая ширина — измеренная, а не объявленная: колонка могла жить на\n // авторазметке, и тянуть её надо от того, что видно.\n resizeStartWidth = el.getBoundingClientRect().width\n widthBeforeResize = columnWidths.value[key]\n resizingKey.value = key\n },\n onMove: (event) => {\n if (resizingKey.value === null) return\n\n // Против выделения текста заголовка во время протяжки.\n event.preventDefault()\n setColumnWidth(resizingKey.value, resizeStartWidth + (event.clientX - resizeStartX))\n },\n onEnd: () => {\n const key = resizingKey.value\n resizingKey.value = null\n if (key === null) return\n\n emit('columnResize', { key, width: columnWidths.value[key] ?? Math.round(resizeStartWidth) })\n announceWidth(key)\n },\n onCancel: () => {\n const key = resizingKey.value\n resizingKey.value = null\n if (key === null) return\n\n // Оборванный жест возвращает ширину, которая была до нажатия.\n const next = { ...columnWidths.value }\n if (widthBeforeResize === undefined) delete next[key]\n else next[key] = widthBeforeResize\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n },\n})\n\nfunction onResizerPointerDown(event: PointerEvent, key: string): void {\n pendingResizeKey = key\n resizeGesture.start(event)\n}\n\n/** Сброс к авторазметке: колонка снова считается по содержимому. */\nfunction resetColumnWidth(key: string): void {\n if (columnWidths.value[key] === undefined) return\n\n const next = { ...columnWidths.value }\n delete next[key]\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n emit('columnResize', { key, width: 0 })\n}\n\nfunction resizeByKeyboard(key: string, delta: number): void {\n const measured = headerCellEls.get(key)?.getBoundingClientRect().width ?? MIN_COLUMN_WIDTH\n const current = columnWidths.value[key] ?? measured\n\n setColumnWidth(key, current + delta)\n emit('columnResize', { key, width: columnWidths.value[key] ?? current })\n announceWidth(key)\n}\n\nfunction onResizerKeydown(event: KeyboardEvent, key: string): void {\n if (!props.resizableColumns || props.loading) return\n\n const step = event.shiftKey ? RESIZE_BIG_STEP : RESIZE_STEP\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault()\n resizeByKeyboard(key, event.key === 'ArrowLeft' ? -step : step)\n return\n }\n\n // Отдельной клавиши «авто» в паттерне нет, поэтому её роль берёт `Enter` —\n // тот же смысл, что двойной клик по ручке.\n if (event.key === 'Enter') {\n event.preventDefault()\n resetColumnWidth(key)\n }\n}\n\nfunction resizerLabel(col: GrDataColumn<TRow>): string {\n return t('gr.dataTable.resizeColumn', 'Width of column {label}', { label: col.label })\n}\n\n/**\n * Ручка ресайза — фокусируемый `separator`, а значит обязана называть текущее\n * значение с первого рендера, до всякого перетаскивания. Заданной ширины у\n * колонки может не быть вовсе (авторазметка), поэтому за значением идём к\n * измеренной; до замера остаётся объявленная в `columns`, а её тоже может не\n * быть — тогда минимум.\n */\nfunction resizerValue(col: GrDataColumn<TRow>): number {\n const key = String(col.key)\n const declared = typeof col.width === 'number' ? col.width : undefined\n\n return columnWidths.value[key] ?? measuredColumnWidths.value[key] ?? declared ?? MIN_COLUMN_WIDTH\n}\n\n// ————— Закреплённые колонки.\n\n/** Служебная колонка выбора в реестре ячеек: своего ключа у неё нет. */\nconst SELECT_COLUMN_KEY = '__select__'\n\nconst hasPinnedLeft = computed(() => orderedColumns.value.some(col => col.pinned === 'left'))\nconst pinnedOffsets = ref<Record<string, number>>({})\n\n/**\n * Смещения липких колонок считаются по **измеренным** ширинам соседей: колонка\n * может жить на авторазметке, и тогда взять смещение больше неоткуда. Отсюда же\n * порядок: замер после отрисовки, а не в вычислении.\n */\nfunction measurePinnedOffsets(): void {\n const next: Record<string, number> = {}\n const cols = orderedColumns.value\n\n let left = props.selectable && hasPinnedLeft.value\n ? headerCellEls.get(SELECT_COLUMN_KEY)?.getBoundingClientRect().width ?? 0\n : 0\n\n for (const col of cols) {\n if (col.pinned !== 'left') continue\n\n next[String(col.key)] = left\n left += headerCellEls.get(String(col.key))?.getBoundingClientRect().width ?? 0\n }\n\n let right = 0\n for (let index = cols.length - 1; index >= 0; index -= 1) {\n const col = cols[index]\n if (col.pinned !== 'right') continue\n\n next[String(col.key)] = right\n right += headerCellEls.get(String(col.key))?.getBoundingClientRect().width ?? 0\n }\n\n pinnedOffsets.value = next\n}\n\nfunction measureColumnWidths(): void {\n if (!props.resizableColumns) return\n\n const next: Record<string, number> = {}\n\n for (const col of orderedColumns.value) {\n const key = String(col.key)\n const width = headerCellEls.get(key)?.getBoundingClientRect().width\n\n if (width) next[key] = Math.round(width)\n }\n\n measuredColumnWidths.value = next\n}\n\nfunction measureLayout(): void {\n measurePinnedOffsets()\n measureColumnWidths()\n}\n\nfunction pinnedStyleOf(col: GrDataColumn<TRow>): Record<string, string> | undefined {\n if (!col.pinned) return undefined\n\n const offset = pinnedOffsets.value[String(col.key)] ?? 0\n\n return col.pinned === 'left' ? { left: `${offset}px` } : { right: `${offset}px` }\n}\n\n/** Тень рисует только крайняя колонка группы — иначе полос было бы столько же, сколько колонок. */\nfunction pinnedEdgeClass(col: GrDataColumn<TRow>, index: number): string {\n if (col.pinned === 'left') return orderedColumns.value[index + 1]?.pinned === 'left' ? '' : columnPinnedLeftEdgeClass\n if (col.pinned === 'right') return orderedColumns.value[index - 1]?.pinned === 'right' ? '' : columnPinnedRightEdgeClass\n\n return ''\n}\n\nfunction pinnedCellClass(col: GrDataColumn<TRow>, index: number): string[] {\n if (!col.pinned) return []\n\n return [columnPinnedClass, pinnedEdgeClass(col, index)]\n}\n\n/**\n * Ширину колонки меняет не только правка пропов: окно, шрифт и содержимое\n * ячейки двигают её сами. `ResizeObserver` — единственный способ узнать об этом;\n * в jsdom и на сервере его нет, там хватает пересчёта по изменению данных.\n */\nlet layoutObserver: ResizeObserver | null = null\n\nonMounted(() => {\n measureLayout()\n\n if (typeof ResizeObserver === 'undefined') return\n\n layoutObserver = new ResizeObserver(() => measureLayout())\n const el = headerCellEls.get(SELECT_COLUMN_KEY) ?? headerCellEls.get(columnKeys.value[0])\n if (el?.parentElement) layoutObserver.observe(el.parentElement)\n})\n\nonUnmounted(() => {\n layoutObserver?.disconnect()\n layoutObserver = null\n})\n\nwatch(\n () => [orderedColumns.value, columnWidths.value, props.loading, props.rows.length] as const,\n () => void nextTick(measureLayout),\n)\n\n/**\n * Живой регион существует с первого рендера и пуст, пока объявлять нечего.\n * Регион, который появляется уже с текстом, часть AT не объявляет вовсе —\n * а именно так вело себя `role=\"status\"` внутри строки загрузки.\n */\nconst liveMessage = computed(() => {\n if (props.loading)\n return resolvedLoadingText.value\n if (isEmpty.value)\n return resolvedEmptyText.value\n return ''\n})\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\nfunction rowClassName(row: TRow, index: number): string | undefined {\n const source = props.rowClass\n return typeof source === 'function' ? source(row, index) : source\n}\n\nfunction onRowClick(row: TRow, index: number, event: MouseEvent): void {\n emit('rowClick', { row, index, event })\n}\n\n// ————— Выбор строк.\n// Uncontrolled-режим, как у сортировки выше: без `v-model:selected` чекбоксы\n// рисовались, кликались и никогда не отмечались — состояние выбора целиком\n// выводилось из пропа, а внутреннего не было вовсе.\nconst internalSelected = ref<Array<string | number>>([])\nconst isSelectedControlled = computed(() => props.selected !== undefined)\n\nconst selectedKeys = computed<Set<string | number>>(\n () => new Set(props.selected ?? internalSelected.value),\n)\n\nfunction isRowSelectable(row: TRow): boolean {\n return props.selectableRow ? props.selectableRow(row) : true\n}\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\n/** «Выбрать все» работает по видимым и выбираемым строкам — они же считают состояние шапки. */\nconst selectableRows = computed(() => sortedRows.value.filter(isRowSelectable))\n\nconst allSelected = computed(() =>\n selectableRows.value.length > 0 && selectableRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n selectableRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n if (!isSelectedControlled.value)\n internalSelected.value = [...next]\n\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n if (!isRowSelectable(row))\n return\n\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n const next = new Set(selectedKeys.value)\n\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n for (const row of selectableRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n\n for (const row of selectableRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n\n// ————— Императивный API.\nconst tableRef = ref<InstanceType<typeof GrTable> | null>(null)\nconst rootId = useId()\n\nfunction rootEl(): HTMLElement | null {\n return (tableRef.value?.$el as HTMLElement | undefined) ?? null\n}\n\n/** Скролл-контейнер таблицы — он же элемент с `maxHeight`. */\nfunction scrollEl(): HTMLElement | null {\n const root = rootEl()\n return root?.matches('[data-gr-table-scroll]') ? root : root?.querySelector('[data-gr-table-scroll]') ?? null\n}\n\n/**\n * Виртуализация строк.\n *\n * Распорки здесь не псевдоэлементы, как у списочных компонентов: `<tbody>`\n * игнорирует `padding`, а псевдоэлемент внутри группы строк не образует строку\n * с управляемой высотой. Поэтому срезанное держат две служебные `<tr>` — той же\n * формы, что строки загрузки и пустоты у `GrTable`.\n */\nconst scrollContainer = ref<HTMLElement | null>(null)\n\nonMounted(() => {\n scrollContainer.value = scrollEl()\n})\n\nconst virtualizer = useVirtualList({\n container: scrollContainer,\n count: () => (props.virtual ? sortedRows.value.length : 0),\n // Сортировка и замена rows раздают индексы заново — замеры сбрасываются.\n source: () => sortedRows.value,\n itemSize: () => rowHeightEstimates[resolvedSize.value],\n // Скролл-контейнер живёт в `GrTable` и до монтирования недоступен: окно\n // первого рендера считается от объявленной высоты.\n viewportSize: () => (typeof props.maxHeight === 'number' ? props.maxHeight : undefined),\n})\n\n/** Строки к отрисовке вместе с их абсолютной позицией в наборе. */\nconst renderedRows = computed(() => {\n const rows = sortedRows.value\n if (!props.virtual) return rows.map((row, index) => ({ row, index }))\n\n const { start, end } = virtualizer.range.value\n return rows.slice(start, end).map((row, offset) => ({ row, index: start + offset }))\n})\n\nconst spacerBefore = computed(() => (props.virtual ? virtualizer.offset.value : 0))\nconst spacerAfter = computed(() => (props.virtual ? virtualizer.offsetEnd.value : 0))\n\n/** Ширина колонки: число трактуем как пиксели. */\nfunction columnWidthStyle(width: string | number | undefined): Record<string, string> | undefined {\n if (width === undefined) return undefined\n return { width: typeof width === 'number' ? `${width}px` : width }\n}\n\nfunction scrollToRow(key: string | number, options?: ScrollIntoViewOptions): boolean {\n // Ключ строки — произвольная строка от потребителя, в селектор её не подставить:\n // сравниваем через `dataset`, а не собираем `[data-row-key=\"…\"]` конкатенацией.\n const target = String(key)\n\n // Строки вне окна в DOM нет: без прокрутки виртуального списка поиск по\n // `dataset` вернул бы `undefined`, и метод молча отвечал бы «не нашёл».\n if (props.virtual) {\n const index = sortedRows.value.findIndex(row => String(rowKeyValue(row)) === target)\n if (index < 0) return false\n\n virtualizer.scrollToIndex(index)\n void nextTick(() => {\n // Вызов опциональный: отложенный `scrollIntoView` некому поймать, а в\n // среде без него (jsdom) это дало бы необработанный отказ промиса.\n findRowEl(target)?.scrollIntoView?.(options ?? { block: 'nearest' })\n })\n return true\n }\n\n const row = findRowEl(target)\n if (!row)\n return false\n\n row.scrollIntoView(options ?? { block: 'nearest' })\n return true\n}\n\nfunction findRowEl(rowKey: string): HTMLElement | undefined {\n // Ключ строки — произвольная строка от потребителя, в селектор её не\n // подставить: сравниваем через `dataset`, а не собираем селектор конкатенацией.\n const rows = rootEl()?.querySelectorAll<HTMLElement>('[data-gr-datatable-row]') ?? []\n return Array.prototype.find.call(rows, (el: HTMLElement) => el.dataset.rowKey === rowKey) as HTMLElement | undefined\n}\n\nconst scrollTo = (options: ScrollToOptions): void => {\n scrollEl()?.scrollTo(options)\n}\n\nfunction clearSort(): void {\n applySort('', 'asc')\n}\n\ndefineExpose({\n /** Прокрутить к строке по её ключу. `false` — строки нет в DOM. */\n scrollToRow,\n /** Прокрутить скролл-контейнер таблицы. */\n scrollTo,\n /** Снять сортировку (эквивалент третьего состояния). */\n clearSort,\n /** Отметить/снять все выбираемые строки. */\n toggleAll,\n})\n</script>\n\n<template>\n <GrTable\n v-bind=\"tableProps\"\n ref=\"tableRef\"\n data-gr-datatable\n >\n <!-- Caption рендерится всегда (у `GrTable` он `sr-only`): в нём живёт\n постоянный live-регион, иначе объявлять загрузку было бы нечему. -->\n <template #caption>\n <slot name=\"caption\">\n {{ caption }}\n </slot>\n <span\n :id=\"`${rootId}-live`\"\n data-gr-datatable-live\n role=\"status\"\n aria-live=\"polite\"\n >{{ liveMessage }}</span>\n </template>\n\n <template #header>\n <tr data-gr-datatable-header :aria-rowindex=\"virtual ? 1 : undefined\">\n <th\n v-if=\"selectable\"\n :ref=\"el => registerEl(headerCellEls, SELECT_COLUMN_KEY, el)\"\n class=\"text-left\"\n :class=\"[\n selectColumnClass,\n cellClass,\n hasPinnedLeft ? columnPinnedClass : '',\n ]\"\n :style=\"hasPinnedLeft ? { left: '0px' } : undefined\"\n scope=\"col\"\n >\n <GrCheckbox\n data-gr-datatable-select-all\n :model-value=\"allSelected\"\n :indeterminate=\"someSelected\"\n :size=\"checkboxSize\"\n :disabled=\"loading || selectableRows.length === 0\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n @update:model-value=\"toggleAll\"\n />\n </th>\n <th\n v-for=\"(col, colIndex) in orderedColumns\"\n :key=\"col.key\"\n :ref=\"el => registerEl(headerCellEls, String(col.key), el)\"\n class=\"font-700\"\n :data-column-key=\"col.key\"\n :class=\"[\n headerTextClass,\n cellClass,\n cellAlign(col),\n reorderableColumns || resizableColumns ? 'group relative' : '',\n draggingColumnKey === String(col.key) ? columnDraggingClass : '',\n columnDropClass(colIndex),\n ...pinnedCellClass(col, colIndex),\n ]\"\n :style=\"{ ...columnWidthStyle(widthOf(col)), ...pinnedStyleOf(col) }\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center\" :class=\"headerGapClass\">\n <button\n v-if=\"reorderableColumns\"\n :ref=\"el => registerEl(columnHandleEls, String(col.key), el)\"\n type=\"button\"\n data-gr-datatable-column-handle\n :class=\"[columnHandleClass, columnSort.isActive.value ? columnHandleActiveClass : '']\"\n :tabindex=\"columnRoving.tabindexFor(String(col.key))\"\n :aria-label=\"columnHandleLabel(col)\"\n :disabled=\"loading\"\n @pointerdown=\"columnSort.startFrom(String(col.key))($event)\"\n @keydown=\"onColumnHandleKeydown($event, String(col.key))\"\n @focus=\"columnRoving.setActive(String(col.key))\"\n @click.stop\n >\n <IconGripVertical class=\"block\" aria-hidden=\"true\" />\n </button>\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n data-gr-datatable-sort\n class=\"inline-flex items-center text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded-[var(--gr-radius-sm)]\"\n :class=\"headerGapClass\"\n @click=\"toggleSort(col)\"\n >\n <span>\n <slot :name=\"`header-${col.key}`\" :column=\"col\">\n {{ col.label }}\n </slot>\n </span>\n <span class=\"sr-only\">{{ sortHint(col) }}</span>\n <span class=\"inline-flex\" aria-hidden=\"true\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" :size=\"sortIconSize\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" :size=\"sortIconSize\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">\n <slot :name=\"`header-${col.key}`\" :column=\"col\">\n {{ col.label }}\n </slot>\n </span>\n </div>\n\n <span\n v-if=\"resizableColumns\"\n data-gr-datatable-column-resizer\n role=\"separator\"\n tabindex=\"0\"\n aria-orientation=\"vertical\"\n :class=\"columnResizerClass\"\n :aria-label=\"resizerLabel(col)\"\n :aria-valuenow=\"resizerValue(col)\"\n :aria-valuemin=\"MIN_COLUMN_WIDTH\"\n :aria-valuetext=\"`${resizerValue(col)}px`\"\n @pointerdown=\"onResizerPointerDown($event, String(col.key))\"\n @keydown=\"onResizerKeydown($event, String(col.key))\"\n @dblclick=\"resetColumnWidth(String(col.key))\"\n @click.stop\n >\n <span\n :class=\"[\n columnResizerLineClass,\n columnResizerHoverClass,\n resizingKey === String(col.key) ? columnResizerLineActiveClass : '',\n ]\"\n aria-hidden=\"true\"\n />\n </span>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"text-center text-[var(--gr-muted-fg)]\" :class=\"placeholderClass\">\n <slot name=\"loading\">\n <span class=\"inline-flex items-center gap-2\">\n <IconLoaderCircle class=\"block animate-spin\" :class=\"spinnerClass\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </slot>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"text-center text-[var(--gr-muted-fg)]\" :class=\"placeholderClass\">\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </td>\n </tr>\n </template>\n <template v-else>\n <!--\n Распорки виртуального списка. У таблицы они строки, а не псевдоэлементы:\n `<tbody>` игнорирует `padding`, а псевдоэлемент внутри группы строк не\n образует строку с управляемой высотой. Форма та же, что у служебных\n строк загрузки и пустоты.\n -->\n <tr\n v-if=\"virtual && spacerBefore > 0\"\n aria-hidden=\"true\"\n data-gr-datatable-spacer=\"before\"\n :style=\"{ pointerEvents: 'none' }\"\n >\n <td :colspan=\"totalColumns\" :style=\"{ height: `${spacerBefore}px`, padding: '0', border: '0' }\" />\n </tr>\n\n <tr\n v-for=\"{ row, index } in renderedRows\"\n :key=\"rowKeyValue(row)\"\n :ref=\"(el) => virtual && virtualizer.measure(index, el as Element | null)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"[\n isRowSelected(row) ? rowSelectedClass : '',\n rowClassName(row, index),\n ]\"\n data-gr-datatable-row\n :data-row-key=\"rowKeyValue(row)\"\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n :aria-rowindex=\"ariaRowIndex(index)\"\n v-bind=\"rowProps?.(row, index)\"\n @click=\"onRowClick(row, index, $event)\"\n >\n <td\n v-if=\"selectable\"\n class=\"text-left\"\n :class=\"[\n selectColumnClass,\n cellClass,\n hasPinnedLeft ? columnPinnedClass : '',\n hasPinnedLeft && isRowSelected(row) ? rowSelectedClass : '',\n ]\"\n :style=\"hasPinnedLeft ? { left: '0px' } : undefined\"\n >\n <!-- `.stop` на самом чекбоксе, а не на ячейке: гасить навигационный\n клик есть смысл только там, где стоит контрол выбора. Иначе\n служебная ячейка невыбираемой строки становится мёртвой зоной. -->\n <GrCheckbox\n v-if=\"isRowSelectable(row)\"\n data-gr-datatable-select-row\n :model-value=\"isRowSelected(row)\"\n :size=\"checkboxSize\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @click.stop\n @update:model-value=\"toggleRow(row)\"\n />\n </td>\n <td\n v-for=\"(col, colIndex) in orderedColumns\"\n :key=\"col.key\"\n :class=\"[\n cellClass,\n cellAlign(col),\n ...pinnedCellClass(col, colIndex),\n col.pinned && isRowSelected(row) ? rowSelectedClass : '',\n ]\"\n :style=\"{ ...columnWidthStyle(widthOf(col)), ...pinnedStyleOf(col) }\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\" :index=\"index\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <tr\n v-if=\"virtual && spacerAfter > 0\"\n aria-hidden=\"true\"\n data-gr-datatable-spacer=\"after\"\n :style=\"{ pointerEvents: 'none' }\"\n >\n <td :colspan=\"totalColumns\" :style=\"{ height: `${spacerAfter}px`, padding: '0', border: '0' }\" />\n </tr>\n </template>\n\n <template v-if=\"$slots.footer\" #footer>\n <slot name=\"footer\" />\n </template>\n </GrTable>\n</template>\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, useId, watch } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useAnnouncer } from '../../composables/useAnnouncer'\nimport { useDragGesture } from '../../composables/useDragGesture'\nimport { useDragSort } from '../../composables/useDragSort'\nimport { useRovingFocus } from '../../composables/useRovingFocus'\nimport { useVirtualList } from '../../composables/useVirtualList'\nimport { insertionIndex, moveItem } from '../../composables/internal/dragSortGeometry'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { sortRows, type GrDataTableSortDir } from './grDataTableSort'\nimport {\n type GrDataTableSize,\n cellPaddings,\n columnDraggingClass,\n columnDropAfterClass,\n columnDropBeforeClass,\n columnHandleActiveClass,\n columnHandleClass,\n columnPinnedClass,\n columnPinnedLeftEdgeClass,\n columnPinnedRightEdgeClass,\n columnResizerClass,\n columnResizerHoverClass,\n columnResizerLineActiveClass,\n columnResizerLineClass,\n headerGaps,\n headerTextSizes,\n placeholderPaddings,\n rowHeightEstimates,\n rowSelectedClass,\n selectCheckboxSizes,\n selectColumnWidths,\n sortIconSizes,\n spinnerSizes,\n} from './grDataTableStyles'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconGripVertical from '~icons/lucide/grip-vertical'\nimport IconLoaderCircle from '~icons/lucide/loader-circle'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\n/**\n * Ключ колонки. Собственные поля строки подсказываются автодополнением, но\n * произвольная строка тоже допустима: колонка может быть вычисляемой и жить\n * только в слоте `#cell-<key>`.\n */\nexport type GrDataColumnKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | Extract<keyof TRow, string>\n | (string & {})\n\nexport type GrDataColumn<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n key: GrDataColumnKey<TRow>\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n /**\n * Ширина колонки: число — пиксели, строка — как есть (`'40%'`, `'12rem'`).\n *\n * Уезжает в заголовочную ячейку: при фиксированной раскладке ширины колонок\n * задаёт первая строка таблицы, а это и есть `<thead>`.\n */\n width?: string | number\n /**\n * Колонка липнет к краю при горизонтальной прокрутке.\n *\n * Закреплённые колонки всегда стоят своей группой у своего края — перенос\n * колонки из группы в группу запрещён, иначе «закреплена слева» перестало бы\n * означать «слева».\n */\n pinned?: 'left' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\n/** Порядок обхода состояний сортировки по клику на заголовок. */\nexport type GrDataTableSortCycle = 'asc-desc' | 'asc-desc-none'\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn<TRow>[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: GrDataTableSortDir\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: GrDataTableSortDir\n /** Клик по заголовку: `asc → desc` или `asc → desc → без сортировки`. */\n sortCycle?: GrDataTableSortCycle\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sortChange`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /** Предикат «строку можно выбрать». Невыбираемые строки не попадают и в «выбрать все». */\n selectableRow?: (row: TRow) => boolean\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n /** Текст пустого состояния. i18n: fallback `gr.dataTable.empty`; слот `#empty` сильнее. */\n emptyText?: string\n /** Класс строки: общий для всех либо вычисляемый по строке. */\n rowClass?: string | ((row: TRow, index: number) => string | undefined)\n /** Произвольные атрибуты строки (`data-*`, `title`, …). */\n rowProps?: (row: TRow, index: number) => Record<string, unknown> | undefined\n /**\n * Размер таблицы: кегль, паддинги ячеек, стрелки сортировки и чекбоксы.\n * Прокидывается в `GrTable`.\n */\n size?: GrDataTableSize\n // Прокси к GrTable:\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /**\n * Виртуализация строк: в DOM живёт только окно вокруг вьюпорта. Высоту окна\n * задаёт `maxHeight`, без него окна прокрутки не существует.\n *\n * Включает фиксированную раскладку таблицы: ширина колонки считается по\n * содержимому всех строк, а в DOM их только окно — без фиксации колонки\n * прыгали бы на каждой прокрутке. Ширины стоит задать через `width` у\n * колонок, иначе фиксированная раскладка делит место поровну.\n */\n virtual?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n /**\n * Пользовательский порядок колонок: в шапке появляется ручка переноса.\n * Колонка тянется указателем и двигается `Shift`+`←`/`→` с клавиатуры.\n */\n reorderableColumns?: boolean\n /**\n * Контролируемый порядок колонок — ключи в нужном порядке (`v-model:columnOrder`).\n * Не задан — порядок компонент помнит сам, начиная с порядка `columns`.\n */\n columnOrder?: string[]\n /**\n * Пользовательская ширина колонок: у правого края заголовка появляется ручка.\n * Тянется указателем, с клавиатуры — стрелками (паттерн window splitter).\n *\n * Включает фиксированную раскладку таблицы: без неё браузер пересчитывает\n * ширины по содержимому и заданная пользователем пропадает.\n */\n resizableColumns?: boolean\n /**\n * Контролируемые ширины в пикселях по ключу колонки (`v-model:columnWidths`).\n * Не заданы — ширины компонент помнит сам.\n */\n columnWidths?: Record<string, number>\n}\n\nexport interface GrDataTableEmits<TRow extends Record<string, unknown> = Record<string, unknown>> {\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: GrDataTableSortDir): void\n (e: 'sortChange', value: { key: string, dir: GrDataTableSortDir }): void\n (e: 'update:selected', value: Array<string | number>): void\n (e: 'rowClick', payload: { row: TRow, index: number, event: MouseEvent }): void\n (e: 'update:columnOrder', value: string[]): void\n (e: 'columnReorder', payload: { key: string, from: number, to: number }): void\n (e: 'update:columnWidths', value: Record<string, number>): void\n (e: 'columnResize', payload: { key: string, width: number }): void\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#header-<key>`,\n * `#caption`, `#footer`, `#empty`, `#loading`.\n *\n * Сортировка, включая крайние случаи с пустыми и смешанными значениями, живёт\n * в `grDataTableSort.ts` — см. `docs/components/GrDataTable.md`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as GrDataTableRowKey<TRow>,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n sortCycle: 'asc-desc',\n externalSort: false,\n selectable: false,\n selected: undefined,\n selectableRow: undefined,\n loading: false,\n loadingText: undefined,\n emptyText: undefined,\n rowClass: undefined,\n rowProps: undefined,\n size: undefined,\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n virtual: false,\n reorderableColumns: false,\n columnOrder: undefined,\n resizableColumns: false,\n columnWidths: undefined,\n})\n\nconst emit = defineEmits<GrDataTableEmits<TRow>>()\n\nconst { t, locale } = useGranularityTranslations()\nconst { announce } = useAnnouncer()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.dataTable.empty', 'No data'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<GrDataTableSortDir>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<GrDataTableSortDir>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: GrDataTableSortDir): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sortChange', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return [...props.rows]\n\n const key = currentSortKey.value\n if (!key)\n return [...props.rows]\n\n return sortRows(props.rows, key, currentSortDir.value, locale.value)\n})\n\nfunction toggleSort(col: GrDataColumn<TRow>): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n if (currentSortDir.value === 'asc') {\n applySort(col.key, 'desc')\n return\n }\n\n // Третье состояние: сортировка снимается, порядок возвращается к исходному.\n if (props.sortCycle === 'asc-desc-none') {\n applySort('', 'asc')\n return\n }\n\n applySort(col.key, 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn<TRow>): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\n/**\n * Синтетические ключи для строк, у которых поле `rowKey` пустое.\n *\n * Без них строка получила бы `String(undefined ?? '')` — **один и тот же** ключ\n * на всю таблицу: Vue переиспользовал бы DOM не по назначению, а выбор одной\n * строки помечал бы выбранными все. Ключ привязан к идентичности объекта,\n * поэтому переживает сортировку и не зависит от индекса.\n */\nconst syntheticKeys = new WeakMap<object, string>()\nlet syntheticKeyCounter = 0\nconst missingKeyWarned = ref(false)\n\nfunction syntheticRowKey(row: TRow): string {\n const existing = syntheticKeys.get(row)\n if (existing !== undefined)\n return existing\n\n syntheticKeyCounter += 1\n const generated = `gr-row-${syntheticKeyCounter}`\n syntheticKeys.set(row, generated)\n\n if (!missingKeyWarned.value && process.env.NODE_ENV !== 'production') {\n missingKeyWarned.value = true\n console.warn(\n `[GrDataTable] У строки нет значения по ключу \"${String(props.rowKey)}\". `\n + 'Задайте `rowKey` (поле или функцию) — иначе выбор строк и переиспользование '\n + 'DOM работают по синтетическому ключу, который не переживёт перезагрузку данных.',\n )\n }\n\n return generated\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n\n const value = (row as Record<string, unknown>)[rk as string]\n if (typeof value === 'string' && value !== '')\n return value\n if (typeof value === 'number')\n return value\n\n return syntheticRowKey(row)\n}\n\nfunction ariaSortFor(col: GrDataColumn<TRow>): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\n/**\n * Подсказка «что сделает нажатие» — visually hidden текстом **после** подписи\n * колонки, а не `aria-label`'ом на кнопке. `aria-label` подменял бы собой имя\n * `<th>`, и AT при переходе по ячейкам вместо «Название» читала бы\n * «Отсортировано по Название по возрастанию, нажмите…». Текущее состояние\n * сортировки при этом объявляет `aria-sort` на самом `<th>`.\n */\nfunction sortHint(col: GrDataColumn<TRow>): string {\n if (currentSortKey.value !== col.key)\n return t('gr.dataTable.sortAsc', 'Activate to sort ascending')\n\n if (currentSortDir.value === 'asc')\n return t('gr.dataTable.sortDesc', 'Activate to sort descending')\n\n return props.sortCycle === 'asc-desc-none'\n ? t('gr.dataTable.sortNone', 'Activate to remove sorting')\n : t('gr.dataTable.sortAsc', 'Activate to sort ascending')\n}\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrDataTable' })\n\nconst cellClass = computed(() => cellPaddings[resolvedSize.value])\nconst placeholderClass = computed(() => placeholderPaddings[resolvedSize.value])\nconst headerTextClass = computed(() => headerTextSizes[resolvedSize.value])\nconst headerGapClass = computed(() => headerGaps[resolvedSize.value])\nconst selectColumnClass = computed(() => selectColumnWidths[resolvedSize.value])\nconst spinnerClass = computed(() => spinnerSizes[resolvedSize.value])\nconst sortIconSize = computed(() => sortIconSizes[resolvedSize.value])\nconst checkboxSize = computed(() => selectCheckboxSizes[resolvedSize.value])\n\n/**\n * Номер строки и полное их число объявляем только при виртуализации: иначе\n * диктор считает строки по разметке, а там всего окно. Заголовок — строка\n * первая, поэтому строки набора начинаются со второй.\n */\nconst ariaRowCount = computed(() => (props.virtual ? sortedRows.value.length + 1 : undefined))\n\nfunction ariaRowIndex(index: number): number | undefined {\n return props.virtual ? index + 2 : undefined\n}\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\n// ————— Порядок колонок.\n\n/** Uncontrolled-состояние; в controlled-режиме перекрывается пропом `columnOrder`. */\nconst internalColumnOrder = ref<string[]>(props.columns.map(col => String(col.key)))\n\n/**\n * Колонки в пользовательском порядке.\n *\n * Состав задаёт `columns`, порядок — только порядок: ключ, которого в наборе\n * нет, игнорируется, а колонка, которой нет в порядке (её только что добавили),\n * встаёт в конец. Иначе правка `columns` теряла бы колонки молча.\n */\nconst orderedColumns = computed<GrDataColumn<TRow>[]>(() => {\n const order = props.columnOrder ?? internalColumnOrder.value\n const remaining = new Map(props.columns.map(col => [String(col.key), col]))\n const ordered: GrDataColumn<TRow>[] = []\n\n for (const key of order) {\n const col = remaining.get(key)\n if (!col) continue\n\n remaining.delete(key)\n ordered.push(col)\n }\n\n for (const col of props.columns) {\n if (remaining.has(String(col.key))) ordered.push(col)\n }\n\n // Закреплённые колонки стоят своими группами у своих краёв — иначе\n // «закреплена слева» не означало бы «слева». Сортировка устойчивая, поэтому\n // внутри группы порядок остаётся пользовательским.\n return ordered.sort((a, b) => pinGroupOf(a) - pinGroupOf(b))\n})\n\n/** Группа закрепления: 0 — слева, 1 — обычная колонка, 2 — справа. */\nfunction pinGroupOf(col: GrDataColumn<TRow>): number {\n if (col.pinned === 'left') return 0\n if (col.pinned === 'right') return 2\n\n return 1\n}\n\n/**\n * Сумма заданных ширин — минимальная ширина таблицы.\n *\n * Без неё фиксированная раскладка вписывает таблицу в контейнер и делит место\n * пропорционально: колонка, которую пользователь растянул, ужимается обратно, а\n * горизонтальной прокрутки — той самой, ради которой закрепляют колонки, — не\n * возникает. Считается, только когда ширина известна у **всех** колонок: с\n * одной неизвестной сумма врала бы.\n */\nconst tableMinWidth = computed<number | undefined>(() => {\n const cols = orderedColumns.value\n if (cols.length === 0) return undefined\n\n let total = 0\n for (const col of cols) {\n const width = widthOf(col)\n if (typeof width !== 'number') return undefined\n\n total += width\n }\n\n return total\n})\n\nconst columnKeys = computed(() => orderedColumns.value.map(col => String(col.key)))\n\nconst tableProps = computed(() => ({\n size: resolvedSize.value,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n rowCount: ariaRowCount.value,\n // Пользовательская ширина требует фиксированной раскладки: на авторазметке\n // браузер пересчитывает колонки по содержимому, и заданная ширина пропадает.\n fixedLayout: props.virtual || props.resizableColumns,\n tableMinWidth: tableMinWidth.value,\n}))\n\nfunction indexOfColumn(key: string): number {\n return columnKeys.value.indexOf(key)\n}\n\nconst headerCellEls = new Map<string, HTMLElement>()\nconst columnHandleEls = new Map<string, HTMLElement>()\n\nfunction registerEl(store: Map<string, HTMLElement>, key: string, el: unknown): void {\n if (el instanceof HTMLElement) {\n store.set(key, el)\n return\n }\n\n // Перестановка размонтирует старую ячейку уже после того, как встала новая:\n // снимаем запись, только если она протухла.\n const previous = store.get(key)\n if (previous && !previous.isConnected) store.delete(key)\n}\n\nfunction applyColumnMove(from: number, to: number): void {\n const keys = columnKeys.value\n if (from < 0 || to < 0 || to >= keys.length || from === to) return\n if (!sameGroup(from, to)) return\n\n const key = keys[from]\n // Подпись берётся до перестановки: `orderedColumns` — computed, и после\n // записи порядка по индексу `from` стоит уже другая колонка.\n const label = orderedColumns.value[from]?.label ?? key\n const next = moveItem(keys, from, to)\n\n internalColumnOrder.value = next\n emit('update:columnOrder', next)\n emit('columnReorder', { key, from, to })\n\n announce(t('gr.dataTable.columnMoved', 'Column {label} moved to position {position} of {count}', {\n label,\n position: to + 1,\n count: keys.length,\n }))\n}\n\nconst columnSort = useDragSort<string, number>({\n items: () => columnKeys.value,\n elementFor: key => headerCellEls.get(key) ?? null,\n orientation: () => 'horizontal',\n disabled: () => !props.reorderableColumns || props.loading,\n resolveTarget: (hit, source) => {\n const to = insertionIndex(hit, indexOfColumn(source), columnKeys.value.length)\n\n // Через границу закрепления не переносим: группы у краёв постоянны.\n return sameGroup(indexOfColumn(source), to) ? to : null\n },\n onDrop: (source, to) => applyColumnMove(indexOfColumn(source), to),\n})\n\nfunction sameGroup(from: number, to: number): boolean {\n const cols = orderedColumns.value\n if (!cols[from] || !cols[to]) return false\n\n return pinGroupOf(cols[from]) === pinGroupOf(cols[to])\n}\n\n/**\n * Кольцо роверного фокуса по ручкам: одна остановка `Tab` на всю шапку.\n * Иначе таблица из десяти колонок добавляла бы десять таб-стопов подряд.\n */\nconst columnRoving = useRovingFocus<string>({\n items: () => (props.reorderableColumns ? columnKeys.value : []),\n elementFor: key => columnHandleEls.get(key) ?? null,\n orientation: () => 'horizontal',\n wrap: () => false,\n})\n\nasync function onColumnHandleKeydown(event: KeyboardEvent, key: string): Promise<void> {\n if (!props.reorderableColumns) return\n\n // `Shift` со стрелкой двигает колонку, голая стрелка — фокус между ручками.\n // Раскладка та же, что у переноса узла в `GrTree`.\n if (event.shiftKey && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n event.preventDefault()\n\n const from = indexOfColumn(key)\n applyColumnMove(from, event.key === 'ArrowLeft' ? from - 1 : from + 1)\n\n // Шапка перерисовывается: без возврата фокуса следующий `Shift` было бы\n // некуда адресовать.\n await nextTick()\n await columnRoving.focusKey(key)\n return\n }\n\n columnRoving.handleNavigationKeys(event)\n}\n\nconst draggingColumnKey = computed(() => (columnSort.mode.value === null ? null : columnSort.source.value))\n\n/** Полоса места вставки — на колонке-соседе, со стороны движения. */\nfunction columnDropClass(index: number): string {\n const target = columnSort.target.value\n if (!columnSort.isActive.value || target === null || target !== index) return ''\n\n const active = columnSort.source.value === null ? -1 : indexOfColumn(columnSort.source.value)\n if (index === active) return ''\n\n return target < active ? columnDropBeforeClass : columnDropAfterClass\n}\n\nconst columnHandleLabel = (col: GrDataColumn<TRow>): string =>\n t('gr.dataTable.moveColumn', 'Move column {label}', { label: col.label })\n\n// ————— Ширина колонок.\n\n/** Уже колонки не бывает: в неё перестаёт помещаться даже стрелка сортировки. */\nconst MIN_COLUMN_WIDTH = 48\n/** Шаг клавиатуры и крупный шаг — как у `GrSplitter`. */\nconst RESIZE_STEP = 16\nconst RESIZE_BIG_STEP = 48\n\nconst internalColumnWidths = ref<Record<string, number>>({})\nconst columnWidths = computed(() => props.columnWidths ?? internalColumnWidths.value)\n\n/** Фактические ширины шапки: заполняются замером, см. `measureLayout`. */\nconst measuredColumnWidths = ref<Record<string, number>>({})\n\n/** Ширина колонки: заданная пользователем сильнее объявленной в `columns`. */\nfunction widthOf(col: GrDataColumn<TRow>): string | number | undefined {\n return columnWidths.value[String(col.key)] ?? col.width\n}\n\nconst resizingKey = ref<string | null>(null)\nlet pendingResizeKey: string | null = null\nlet resizeStartX = 0\nlet resizeStartWidth = 0\nlet widthBeforeResize: number | undefined\n\nfunction setColumnWidth(key: string, width: number): void {\n const next = { ...columnWidths.value, [key]: Math.max(MIN_COLUMN_WIDTH, Math.round(width)) }\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n}\n\nfunction announceWidth(key: string): void {\n const col = orderedColumns.value.find(item => String(item.key) === key)\n if (!col) return\n\n announce(t('gr.dataTable.columnResized', 'Column {label} is {width} pixels wide', {\n label: col.label,\n width: columnWidths.value[key] ?? 0,\n }))\n}\n\nconst resizeGesture = useDragGesture({\n disabled: () => !props.resizableColumns || props.loading,\n onStart: (event) => {\n const key = pendingResizeKey\n const el = key === null ? null : headerCellEls.get(key)\n if (key === null || !el) return false\n\n resizeStartX = event.clientX\n // Стартовая ширина — измеренная, а не объявленная: колонка могла жить на\n // авторазметке, и тянуть её надо от того, что видно.\n resizeStartWidth = el.getBoundingClientRect().width\n widthBeforeResize = columnWidths.value[key]\n resizingKey.value = key\n },\n onMove: (event) => {\n if (resizingKey.value === null) return\n\n // Против выделения текста заголовка во время протяжки.\n event.preventDefault()\n setColumnWidth(resizingKey.value, resizeStartWidth + (event.clientX - resizeStartX))\n },\n onEnd: () => {\n const key = resizingKey.value\n resizingKey.value = null\n if (key === null) return\n\n emit('columnResize', { key, width: columnWidths.value[key] ?? Math.round(resizeStartWidth) })\n announceWidth(key)\n },\n onCancel: () => {\n const key = resizingKey.value\n resizingKey.value = null\n if (key === null) return\n\n // Оборванный жест возвращает ширину, которая была до нажатия.\n const next = { ...columnWidths.value }\n if (widthBeforeResize === undefined) delete next[key]\n else next[key] = widthBeforeResize\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n },\n})\n\nfunction onResizerPointerDown(event: PointerEvent, key: string): void {\n pendingResizeKey = key\n resizeGesture.start(event)\n}\n\n/** Сброс к авторазметке: колонка снова считается по содержимому. */\nfunction resetColumnWidth(key: string): void {\n if (columnWidths.value[key] === undefined) return\n\n const next = { ...columnWidths.value }\n delete next[key]\n\n internalColumnWidths.value = next\n emit('update:columnWidths', next)\n emit('columnResize', { key, width: 0 })\n}\n\nfunction resizeByKeyboard(key: string, delta: number): void {\n const measured = headerCellEls.get(key)?.getBoundingClientRect().width ?? MIN_COLUMN_WIDTH\n const current = columnWidths.value[key] ?? measured\n\n setColumnWidth(key, current + delta)\n emit('columnResize', { key, width: columnWidths.value[key] ?? current })\n announceWidth(key)\n}\n\nfunction onResizerKeydown(event: KeyboardEvent, key: string): void {\n if (!props.resizableColumns || props.loading) return\n\n const step = event.shiftKey ? RESIZE_BIG_STEP : RESIZE_STEP\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault()\n resizeByKeyboard(key, event.key === 'ArrowLeft' ? -step : step)\n return\n }\n\n // Отдельной клавиши «авто» в паттерне нет, поэтому её роль берёт `Enter` —\n // тот же смысл, что двойной клик по ручке.\n if (event.key === 'Enter') {\n event.preventDefault()\n resetColumnWidth(key)\n }\n}\n\nfunction resizerLabel(col: GrDataColumn<TRow>): string {\n return t('gr.dataTable.resizeColumn', 'Width of column {label}', { label: col.label })\n}\n\n/**\n * Ручка ресайза — фокусируемый `separator`, а значит обязана называть текущее\n * значение с первого рендера, до всякого перетаскивания. Заданной ширины у\n * колонки может не быть вовсе (авторазметка), поэтому за значением идём к\n * измеренной; до замера остаётся объявленная в `columns`, а её тоже может не\n * быть — тогда минимум.\n */\nfunction resizerValue(col: GrDataColumn<TRow>): number {\n const key = String(col.key)\n const declared = typeof col.width === 'number' ? col.width : undefined\n\n return columnWidths.value[key] ?? measuredColumnWidths.value[key] ?? declared ?? MIN_COLUMN_WIDTH\n}\n\n// ————— Закреплённые колонки.\n\n/** Служебная колонка выбора в реестре ячеек: своего ключа у неё нет. */\nconst SELECT_COLUMN_KEY = '__select__'\n\nconst hasPinnedLeft = computed(() => orderedColumns.value.some(col => col.pinned === 'left'))\nconst pinnedOffsets = ref<Record<string, number>>({})\n\n/**\n * Смещения липких колонок считаются по **измеренным** ширинам соседей: колонка\n * может жить на авторазметке, и тогда взять смещение больше неоткуда. Отсюда же\n * порядок: замер после отрисовки, а не в вычислении.\n */\nfunction measurePinnedOffsets(): void {\n const next: Record<string, number> = {}\n const cols = orderedColumns.value\n\n let left = props.selectable && hasPinnedLeft.value\n ? headerCellEls.get(SELECT_COLUMN_KEY)?.getBoundingClientRect().width ?? 0\n : 0\n\n for (const col of cols) {\n if (col.pinned !== 'left') continue\n\n next[String(col.key)] = left\n left += headerCellEls.get(String(col.key))?.getBoundingClientRect().width ?? 0\n }\n\n let right = 0\n for (let index = cols.length - 1; index >= 0; index -= 1) {\n const col = cols[index]\n if (col.pinned !== 'right') continue\n\n next[String(col.key)] = right\n right += headerCellEls.get(String(col.key))?.getBoundingClientRect().width ?? 0\n }\n\n pinnedOffsets.value = next\n}\n\nfunction measureColumnWidths(): void {\n if (!props.resizableColumns) return\n\n const next: Record<string, number> = {}\n\n for (const col of orderedColumns.value) {\n const key = String(col.key)\n const width = headerCellEls.get(key)?.getBoundingClientRect().width\n\n if (width) next[key] = Math.round(width)\n }\n\n measuredColumnWidths.value = next\n}\n\nfunction measureLayout(): void {\n measurePinnedOffsets()\n measureColumnWidths()\n}\n\nfunction pinnedStyleOf(col: GrDataColumn<TRow>): Record<string, string> | undefined {\n if (!col.pinned) return undefined\n\n const offset = pinnedOffsets.value[String(col.key)] ?? 0\n\n return col.pinned === 'left' ? { left: `${offset}px` } : { right: `${offset}px` }\n}\n\n/** Тень рисует только крайняя колонка группы — иначе полос было бы столько же, сколько колонок. */\nfunction pinnedEdgeClass(col: GrDataColumn<TRow>, index: number): string {\n if (col.pinned === 'left') return orderedColumns.value[index + 1]?.pinned === 'left' ? '' : columnPinnedLeftEdgeClass\n if (col.pinned === 'right') return orderedColumns.value[index - 1]?.pinned === 'right' ? '' : columnPinnedRightEdgeClass\n\n return ''\n}\n\nfunction pinnedCellClass(col: GrDataColumn<TRow>, index: number): string[] {\n if (!col.pinned) return []\n\n return [columnPinnedClass, pinnedEdgeClass(col, index)]\n}\n\n/**\n * Ширину колонки меняет не только правка пропов: окно, шрифт и содержимое\n * ячейки двигают её сами. `ResizeObserver` — единственный способ узнать об этом;\n * в jsdom и на сервере его нет, там хватает пересчёта по изменению данных.\n */\nlet layoutObserver: ResizeObserver | null = null\n\nonMounted(() => {\n measureLayout()\n\n if (typeof ResizeObserver === 'undefined') return\n\n layoutObserver = new ResizeObserver(() => measureLayout())\n const el = headerCellEls.get(SELECT_COLUMN_KEY) ?? headerCellEls.get(columnKeys.value[0])\n if (el?.parentElement) layoutObserver.observe(el.parentElement)\n})\n\nonUnmounted(() => {\n layoutObserver?.disconnect()\n layoutObserver = null\n})\n\nwatch(\n () => [orderedColumns.value, columnWidths.value, props.loading, props.rows.length] as const,\n () => void nextTick(measureLayout),\n)\n\n/**\n * Живой регион существует с первого рендера и пуст, пока объявлять нечего.\n * Регион, который появляется уже с текстом, часть AT не объявляет вовсе —\n * а именно так вело себя `role=\"status\"` внутри строки загрузки.\n */\nconst liveMessage = computed(() => {\n if (props.loading)\n return resolvedLoadingText.value\n if (isEmpty.value)\n return resolvedEmptyText.value\n return ''\n})\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\nfunction rowClassName(row: TRow, index: number): string | undefined {\n const source = props.rowClass\n return typeof source === 'function' ? source(row, index) : source\n}\n\nfunction onRowClick(row: TRow, index: number, event: MouseEvent): void {\n emit('rowClick', { row, index, event })\n}\n\n// ————— Выбор строк.\n// Uncontrolled-режим, как у сортировки выше: без `v-model:selected` чекбоксы\n// рисовались, кликались и никогда не отмечались — состояние выбора целиком\n// выводилось из пропа, а внутреннего не было вовсе.\nconst internalSelected = ref<Array<string | number>>([])\nconst isSelectedControlled = computed(() => props.selected !== undefined)\n\nconst selectedKeys = computed<Set<string | number>>(\n () => new Set(props.selected ?? internalSelected.value),\n)\n\nfunction isRowSelectable(row: TRow): boolean {\n return props.selectableRow ? props.selectableRow(row) : true\n}\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\n/** «Выбрать все» работает по видимым и выбираемым строкам — они же считают состояние шапки. */\nconst selectableRows = computed(() => sortedRows.value.filter(isRowSelectable))\n\nconst allSelected = computed(() =>\n selectableRows.value.length > 0 && selectableRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n selectableRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n if (!isSelectedControlled.value)\n internalSelected.value = [...next]\n\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n if (!isRowSelectable(row))\n return\n\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n const next = new Set(selectedKeys.value)\n\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n for (const row of selectableRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n\n for (const row of selectableRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n\n// ————— Императивный API.\nconst tableRef = ref<InstanceType<typeof GrTable> | null>(null)\nconst rootId = useId()\n\nfunction rootEl(): HTMLElement | null {\n return (tableRef.value?.$el as HTMLElement | undefined) ?? null\n}\n\n/** Скролл-контейнер таблицы — он же элемент с `maxHeight`. */\nfunction scrollEl(): HTMLElement | null {\n const root = rootEl()\n return root?.matches('[data-gr-table-scroll]') ? root : root?.querySelector('[data-gr-table-scroll]') ?? null\n}\n\n/**\n * Виртуализация строк.\n *\n * Распорки здесь не псевдоэлементы, как у списочных компонентов: `<tbody>`\n * игнорирует `padding`, а псевдоэлемент внутри группы строк не образует строку\n * с управляемой высотой. Поэтому срезанное держат две служебные `<tr>` — той же\n * формы, что строки загрузки и пустоты у `GrTable`.\n */\nconst scrollContainer = ref<HTMLElement | null>(null)\n\nonMounted(() => {\n scrollContainer.value = scrollEl()\n})\n\nconst virtualizer = useVirtualList({\n container: scrollContainer,\n count: () => (props.virtual ? sortedRows.value.length : 0),\n // Сортировка и замена rows раздают индексы заново — замеры сбрасываются.\n source: () => sortedRows.value,\n itemSize: () => rowHeightEstimates[resolvedSize.value],\n // Скролл-контейнер живёт в `GrTable` и до монтирования недоступен: окно\n // первого рендера считается от объявленной высоты.\n viewportSize: () => (typeof props.maxHeight === 'number' ? props.maxHeight : undefined),\n})\n\n/** Строки к отрисовке вместе с их абсолютной позицией в наборе. */\nconst renderedRows = computed(() => {\n const rows = sortedRows.value\n if (!props.virtual) return rows.map((row, index) => ({ row, index }))\n\n const { start, end } = virtualizer.range.value\n return rows.slice(start, end).map((row, offset) => ({ row, index: start + offset }))\n})\n\nconst spacerBefore = computed(() => (props.virtual ? virtualizer.offset.value : 0))\nconst spacerAfter = computed(() => (props.virtual ? virtualizer.offsetEnd.value : 0))\n\n/** Ширина колонки: число трактуем как пиксели. */\nfunction columnWidthStyle(width: string | number | undefined): Record<string, string> | undefined {\n if (width === undefined) return undefined\n return { width: typeof width === 'number' ? `${width}px` : width }\n}\n\nfunction scrollToRow(key: string | number, options?: ScrollIntoViewOptions): boolean {\n // Ключ строки — произвольная строка от потребителя, в селектор её не подставить:\n // сравниваем через `dataset`, а не собираем `[data-row-key=\"…\"]` конкатенацией.\n const target = String(key)\n\n // Строки вне окна в DOM нет: без прокрутки виртуального списка поиск по\n // `dataset` вернул бы `undefined`, и метод молча отвечал бы «не нашёл».\n if (props.virtual) {\n const index = sortedRows.value.findIndex(row => String(rowKeyValue(row)) === target)\n if (index < 0) return false\n\n virtualizer.scrollToIndex(index)\n void nextTick(() => {\n // Вызов опциональный: отложенный `scrollIntoView` некому поймать, а в\n // среде без него (jsdom) это дало бы необработанный отказ промиса.\n findRowEl(target)?.scrollIntoView?.(options ?? { block: 'nearest' })\n })\n return true\n }\n\n const row = findRowEl(target)\n if (!row)\n return false\n\n row.scrollIntoView(options ?? { block: 'nearest' })\n return true\n}\n\nfunction findRowEl(rowKey: string): HTMLElement | undefined {\n // Ключ строки — произвольная строка от потребителя, в селектор её не\n // подставить: сравниваем через `dataset`, а не собираем селектор конкатенацией.\n const rows = rootEl()?.querySelectorAll<HTMLElement>('[data-gr-datatable-row]') ?? []\n return Array.prototype.find.call(rows, (el: HTMLElement) => el.dataset.rowKey === rowKey) as HTMLElement | undefined\n}\n\nconst scrollTo = (options: ScrollToOptions): void => {\n scrollEl()?.scrollTo(options)\n}\n\nfunction clearSort(): void {\n applySort('', 'asc')\n}\n\ndefineExpose({\n /** Прокрутить к строке по её ключу. `false` — строки нет в DOM. */\n scrollToRow,\n /** Прокрутить скролл-контейнер таблицы. */\n scrollTo,\n /** Снять сортировку (эквивалент третьего состояния). */\n clearSort,\n /** Отметить/снять все выбираемые строки. */\n toggleAll,\n})\n</script>\n\n<template>\n <GrTable\n v-bind=\"tableProps\"\n ref=\"tableRef\"\n data-gr-datatable\n >\n <!-- Caption рендерится всегда (у `GrTable` он `sr-only`): в нём живёт\n постоянный live-регион, иначе объявлять загрузку было бы нечему. -->\n <template #caption>\n <slot name=\"caption\">\n {{ caption }}\n </slot>\n <span\n :id=\"`${rootId}-live`\"\n data-gr-datatable-live\n role=\"status\"\n aria-live=\"polite\"\n >{{ liveMessage }}</span>\n </template>\n\n <template #header>\n <tr data-gr-datatable-header :aria-rowindex=\"virtual ? 1 : undefined\">\n <th\n v-if=\"selectable\"\n :ref=\"el => registerEl(headerCellEls, SELECT_COLUMN_KEY, el)\"\n class=\"text-left\"\n :class=\"[\n selectColumnClass,\n cellClass,\n hasPinnedLeft ? columnPinnedClass : '',\n ]\"\n :style=\"hasPinnedLeft ? { left: '0px' } : undefined\"\n scope=\"col\"\n >\n <GrCheckbox\n data-gr-datatable-select-all\n :model-value=\"allSelected\"\n :indeterminate=\"someSelected\"\n :size=\"checkboxSize\"\n :disabled=\"loading || selectableRows.length === 0\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n @update:model-value=\"toggleAll\"\n />\n </th>\n <th\n v-for=\"(col, colIndex) in orderedColumns\"\n :key=\"col.key\"\n :ref=\"el => registerEl(headerCellEls, String(col.key), el)\"\n class=\"font-700\"\n :data-column-key=\"col.key\"\n :class=\"[\n headerTextClass,\n cellClass,\n cellAlign(col),\n reorderableColumns || resizableColumns ? 'group relative' : '',\n draggingColumnKey === String(col.key) ? columnDraggingClass : '',\n columnDropClass(colIndex),\n ...pinnedCellClass(col, colIndex),\n ]\"\n :style=\"{ ...columnWidthStyle(widthOf(col)), ...pinnedStyleOf(col) }\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center\" :class=\"headerGapClass\">\n <button\n v-if=\"reorderableColumns\"\n :ref=\"el => registerEl(columnHandleEls, String(col.key), el)\"\n type=\"button\"\n data-gr-datatable-column-handle\n :class=\"[columnHandleClass, columnSort.isActive.value ? columnHandleActiveClass : '']\"\n :tabindex=\"columnRoving.tabindexFor(String(col.key))\"\n :aria-label=\"columnHandleLabel(col)\"\n :disabled=\"loading\"\n @pointerdown=\"columnSort.startFrom(String(col.key))($event)\"\n @keydown=\"onColumnHandleKeydown($event, String(col.key))\"\n @focus=\"columnRoving.setActive(String(col.key))\"\n @click.stop\n >\n <IconGripVertical class=\"block\" aria-hidden=\"true\" />\n </button>\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n data-gr-datatable-sort\n class=\"inline-flex items-center text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded-[var(--gr-radius-sm)]\"\n :class=\"headerGapClass\"\n @click=\"toggleSort(col)\"\n >\n <span>\n <slot :name=\"`header-${col.key}`\" :column=\"col\">\n {{ col.label }}\n </slot>\n </span>\n <span class=\"sr-only\">{{ sortHint(col) }}</span>\n <span class=\"inline-flex\" aria-hidden=\"true\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" :size=\"sortIconSize\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" :size=\"sortIconSize\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">\n <slot :name=\"`header-${col.key}`\" :column=\"col\">\n {{ col.label }}\n </slot>\n </span>\n </div>\n\n <span\n v-if=\"resizableColumns\"\n data-gr-datatable-column-resizer\n role=\"separator\"\n tabindex=\"0\"\n aria-orientation=\"vertical\"\n :class=\"columnResizerClass\"\n :aria-label=\"resizerLabel(col)\"\n :aria-valuenow=\"resizerValue(col)\"\n :aria-valuemin=\"MIN_COLUMN_WIDTH\"\n :aria-valuetext=\"`${resizerValue(col)}px`\"\n @pointerdown=\"onResizerPointerDown($event, String(col.key))\"\n @keydown=\"onResizerKeydown($event, String(col.key))\"\n @dblclick=\"resetColumnWidth(String(col.key))\"\n @click.stop\n >\n <span\n :class=\"[\n columnResizerLineClass,\n columnResizerHoverClass,\n resizingKey === String(col.key) ? columnResizerLineActiveClass : '',\n ]\"\n aria-hidden=\"true\"\n />\n </span>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"text-center text-[var(--gr-muted-fg)]\" :class=\"placeholderClass\">\n <slot name=\"loading\">\n <span class=\"inline-flex items-center gap-2\">\n <IconLoaderCircle class=\"block animate-spin\" :class=\"spinnerClass\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </slot>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"text-center text-[var(--gr-muted-fg)]\" :class=\"placeholderClass\">\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </td>\n </tr>\n </template>\n <template v-else>\n <!--\n Распорки виртуального списка. У таблицы они строки, а не псевдоэлементы:\n `<tbody>` игнорирует `padding`, а псевдоэлемент внутри группы строк не\n образует строку с управляемой высотой. Форма та же, что у служебных\n строк загрузки и пустоты.\n -->\n <tr\n v-if=\"virtual && spacerBefore > 0\"\n aria-hidden=\"true\"\n data-gr-datatable-spacer=\"before\"\n :style=\"{ pointerEvents: 'none' }\"\n >\n <td :colspan=\"totalColumns\" :style=\"{ height: `${spacerBefore}px`, padding: '0', border: '0' }\" />\n </tr>\n\n <tr\n v-for=\"{ row, index } in renderedRows\"\n :key=\"rowKeyValue(row)\"\n :ref=\"(el) => virtual && virtualizer.measure(index, el as Element | null)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"[\n isRowSelected(row) ? rowSelectedClass : '',\n rowClassName(row, index),\n ]\"\n data-gr-datatable-row\n :data-row-key=\"rowKeyValue(row)\"\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n :aria-rowindex=\"ariaRowIndex(index)\"\n v-bind=\"rowProps?.(row, index)\"\n @click=\"onRowClick(row, index, $event)\"\n >\n <td\n v-if=\"selectable\"\n class=\"text-left\"\n :class=\"[\n selectColumnClass,\n cellClass,\n hasPinnedLeft ? columnPinnedClass : '',\n hasPinnedLeft && isRowSelected(row) ? rowSelectedClass : '',\n ]\"\n :style=\"hasPinnedLeft ? { left: '0px' } : undefined\"\n >\n <!-- `.stop` на самом чекбоксе, а не на ячейке: гасить навигационный\n клик есть смысл только там, где стоит контрол выбора. Иначе\n служебная ячейка невыбираемой строки становится мёртвой зоной. -->\n <GrCheckbox\n v-if=\"isRowSelectable(row)\"\n data-gr-datatable-select-row\n :model-value=\"isRowSelected(row)\"\n :size=\"checkboxSize\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @click.stop\n @update:model-value=\"toggleRow(row)\"\n />\n </td>\n <td\n v-for=\"(col, colIndex) in orderedColumns\"\n :key=\"col.key\"\n :class=\"[\n cellClass,\n cellAlign(col),\n ...pinnedCellClass(col, colIndex),\n col.pinned && isRowSelected(row) ? rowSelectedClass : '',\n ]\"\n :style=\"{ ...columnWidthStyle(widthOf(col)), ...pinnedStyleOf(col) }\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\" :index=\"index\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <tr\n v-if=\"virtual && spacerAfter > 0\"\n aria-hidden=\"true\"\n data-gr-datatable-spacer=\"after\"\n :style=\"{ pointerEvents: 'none' }\"\n >\n <td :colspan=\"totalColumns\" :style=\"{ height: `${spacerAfter}px`, padding: '0', border: '0' }\" />\n </tr>\n </template>\n\n <template v-if=\"$slots.footer\" #footer>\n <slot name=\"footer\" />\n </template>\n </GrTable>\n</template>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { i as sortRows, n as compareCells, r as isEmptyCell, t as GrDataTable_default } from "./chunks/GrDataTable-DzaGLG3A.js";
2
- import { n as grDataTableSafelist, t as grDataTableConfig } from "../../chunks/config-DEvsMTQE.js";
3
- export { GrDataTable_default as GrDataTable, GrDataTable_default as default, compareCells, grDataTableConfig, grDataTableSafelist, isEmptyCell, sortRows };
1
+ import { t as GrDataTable_default } from "./chunks/GrDataTable-CNvZg2HZ.js";
2
+ import { n as grDataTableSafelist, t as grDataTableConfig } from "../../chunks/config-BJ7Bv_G2.js";
3
+ export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig, grDataTableSafelist };
@@ -0,0 +1,255 @@
1
+ import { t as x_default } from "../../../chunks/x-2KXnqxiD.js";
2
+ import { i as useGrComponentProp } from "../../../chunks/context-CTbuwcYs.js";
3
+ import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-BC5zsj_d.js";
4
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-Bw2AH4uX.js";
5
+ import { n as useGrModalTitle, t as GrModal_default } from "../../GrModal/chunks/GrModal-CPz7SWD_.js";
6
+ import { a as resolveGrDialogTitle, i as resolveGrDialogSectionConfig, n as DEFAULT_GR_DIALOG_FOOTER_CONFIG, r as DEFAULT_GR_DIALOG_HEADER_CONFIG, t as DEFAULT_GR_DIALOG_BODY_CONFIG } from "../../../chunks/dialogShared-CxW62PQE.js";
7
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, toDisplayString, unref, useAttrs, useSlots, withCtx } from "vue";
8
+ //#endregion
9
+ //#region src/components/GrDialog/GrDialogFooter.vue
10
+ var GrDialogFooter_default = /* @__PURE__ */ defineComponent({
11
+ __name: "GrDialogFooter",
12
+ props: { config: { default: void 0 } },
13
+ setup(__props) {
14
+ const props = __props;
15
+ const resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_FOOTER_CONFIG));
16
+ const rootClass = computed(() => [
17
+ resolvedConfig.value.paddingX,
18
+ resolvedConfig.value.paddingY,
19
+ resolvedConfig.value.bordered ? "border-t border-[var(--gr-brd)]" : ""
20
+ ]);
21
+ return (_ctx, _cache) => {
22
+ return openBlock(), createElementBlock("div", {
23
+ "data-gr-dialog-footer": "",
24
+ class: normalizeClass(rootClass.value)
25
+ }, [renderSlot(_ctx.$slots, "default")], 2);
26
+ };
27
+ }
28
+ });
29
+ //#endregion
30
+ //#region src/components/GrDialog/GrDialogCloseButton.vue
31
+ var GrDialogCloseButton_default = /* @__PURE__ */ defineComponent({
32
+ inheritAttrs: false,
33
+ __name: "GrDialogCloseButton",
34
+ emits: ["click"],
35
+ setup(__props) {
36
+ const { t } = useGranularityTranslations();
37
+ const attrs = useAttrs();
38
+ const ariaLabel = computed(() => attrs["aria-label"] ?? t("gr.common.close", "Close"));
39
+ return (_ctx, _cache) => {
40
+ return openBlock(), createBlock(GrButton_default, mergeProps(unref(attrs), {
41
+ "data-gr-dialog-close": "",
42
+ variant: "ghost",
43
+ size: "sm",
44
+ square: "",
45
+ "aria-label": ariaLabel.value,
46
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click"))
47
+ }), {
48
+ default: withCtx(() => [createVNode(unref(x_default), {
49
+ class: "h-4 w-4",
50
+ "aria-hidden": "true"
51
+ })]),
52
+ _: 1
53
+ }, 16, ["aria-label"]);
54
+ };
55
+ }
56
+ });
57
+ //#endregion
58
+ //#region src/components/GrDialog/GrDialogHeader.vue?vue&type=script&setup=true&lang.ts
59
+ var _hoisted_1$1 = {
60
+ key: 0,
61
+ class: "flex-1 min-w-0 flex items-center"
62
+ };
63
+ var _hoisted_2 = ["id"];
64
+ var _hoisted_3 = {
65
+ key: 2,
66
+ class: "flex-1 min-w-0"
67
+ };
68
+ //#endregion
69
+ //#region src/components/GrDialog/GrDialogHeader.vue
70
+ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
71
+ __name: "GrDialogHeader",
72
+ props: {
73
+ title: { default: void 0 },
74
+ showCloseButton: {
75
+ type: Boolean,
76
+ default: true
77
+ },
78
+ config: { default: void 0 },
79
+ closeLabel: { default: void 0 }
80
+ },
81
+ emits: ["close"],
82
+ setup(__props) {
83
+ const props = __props;
84
+ const slots = useSlots();
85
+ const resolvedTitle = computed(() => resolveGrDialogTitle(props.title));
86
+ const resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_HEADER_CONFIG));
87
+ const rootClass = computed(() => [
88
+ resolvedConfig.value.paddingX,
89
+ resolvedConfig.value.paddingY,
90
+ resolvedConfig.value.bordered ? "border-b border-[var(--gr-brd)]" : "",
91
+ "flex items-center justify-between gap-4"
92
+ ]);
93
+ const showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value);
94
+ const { titleId } = useGrModalTitle(() => showVisibleTitle.value);
95
+ return (_ctx, _cache) => {
96
+ return openBlock(), createElementBlock("div", {
97
+ "data-gr-dialog-header": "",
98
+ class: normalizeClass(rootClass.value)
99
+ }, [slots.default ? (openBlock(), createElementBlock("div", _hoisted_1$1, [renderSlot(_ctx.$slots, "default", { title: resolvedTitle.value })])) : showVisibleTitle.value ? (openBlock(), createElementBlock("div", {
100
+ key: 1,
101
+ id: unref(titleId),
102
+ "data-gr-dialog-title": "",
103
+ class: "flex-1 min-w-0 text-[length:var(--gr-control-text-md)] font-700"
104
+ }, toDisplayString(resolvedTitle.value), 9, _hoisted_2)) : (openBlock(), createElementBlock("div", _hoisted_3)), __props.showCloseButton ? (openBlock(), createBlock(GrDialogCloseButton_default, {
105
+ key: 3,
106
+ "aria-label": __props.closeLabel,
107
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close"))
108
+ }, null, 8, ["aria-label"])) : createCommentVNode("", true)], 2);
109
+ };
110
+ }
111
+ });
112
+ //#endregion
113
+ //#region src/components/GrDialog/GrDialog.vue?vue&type=script&setup=true&lang.ts
114
+ var _hoisted_1 = { class: "sr-only" };
115
+ //#endregion
116
+ //#region src/components/GrDialog/GrDialog.vue
117
+ var GrDialog_default = /* @__PURE__ */ defineComponent({
118
+ __name: "GrDialog",
119
+ props: {
120
+ modelValue: { type: Boolean },
121
+ title: { default: void 0 },
122
+ closeOnBackdrop: {
123
+ type: Boolean,
124
+ default: true
125
+ },
126
+ closeOnEsc: {
127
+ type: Boolean,
128
+ default: true
129
+ },
130
+ showHeader: {
131
+ type: Boolean,
132
+ default: true
133
+ },
134
+ showCloseButton: {
135
+ type: Boolean,
136
+ default: true
137
+ },
138
+ size: { default: void 0 },
139
+ headerConfig: { default: void 0 },
140
+ footerConfig: { default: void 0 },
141
+ bodyConfig: { default: void 0 },
142
+ closeLabel: { default: void 0 },
143
+ ariaLabel: { default: void 0 },
144
+ scrollBehavior: { default: "outside" },
145
+ initialFocus: { default: null }
146
+ },
147
+ emits: [
148
+ "update:modelValue",
149
+ "opened",
150
+ "closed"
151
+ ],
152
+ setup(__props, { expose: __expose, emit: __emit }) {
153
+ /**
154
+ * GrDialog — GR-примитив диалога поверх `GrModal`.
155
+ *
156
+ * Архитектурно:
157
+ * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;
158
+ * - заголовок/подвал/кнопка закрытия/паддинги секций — ответственность `GrDialog`.
159
+ *
160
+ * A11y: ровно один `DialogTitle` на открытое окно.
161
+ * - Если хедер отображается без слота `#header` — видимый `DialogTitle` рендерит
162
+ * `GrDialogHeader`.
163
+ * - В остальных случаях (`!showHeader`, либо `showHeader` со слотом `#header`)
164
+ * `GrDialog` отдаёт sr-only title в слот `#title` у `GrModal`, чтобы
165
+ * `GrModal` корректно проставил `aria-labelledby` на корень окна.
166
+ * - `aria-label` вниз уходит всегда: `GrModal` иначе не отличил бы «заголовок
167
+ * рисует `GrDialogHeader`» от «имени нет вовсе» и подставил бы обобщённое.
168
+ */
169
+ const props = __props;
170
+ const emit = __emit;
171
+ const slots = useSlots();
172
+ const resolvedSize = useGrComponentProp("GrDialog", "size", () => props.size, "md");
173
+ const resolvedTitle = computed(() => resolveGrDialogTitle(props.title));
174
+ const bodyClass = computed(() => {
175
+ const cfg = resolveGrDialogSectionConfig(props.bodyConfig, DEFAULT_GR_DIALOG_BODY_CONFIG);
176
+ return [cfg.paddingX, cfg.paddingY];
177
+ });
178
+ const useModalSrOnlyTitle = computed(() => !!resolvedTitle.value && (!props.showHeader || !!slots.header));
179
+ function open() {
180
+ emit("update:modelValue", true);
181
+ }
182
+ function close() {
183
+ emit("update:modelValue", false);
184
+ }
185
+ function toggle() {
186
+ emit("update:modelValue", !props.modelValue);
187
+ }
188
+ __expose({
189
+ open,
190
+ close,
191
+ toggle
192
+ });
193
+ return (_ctx, _cache) => {
194
+ return openBlock(), createBlock(GrModal_default, {
195
+ "model-value": __props.modelValue,
196
+ size: unref(resolvedSize),
197
+ "scroll-behavior": __props.scrollBehavior,
198
+ "initial-focus": __props.initialFocus,
199
+ "close-on-backdrop": __props.closeOnBackdrop,
200
+ "close-on-esc": __props.closeOnEsc,
201
+ "aria-label": __props.ariaLabel ?? resolvedTitle.value,
202
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event)),
203
+ onOpened: _cache[1] || (_cache[1] = ($event) => emit("opened")),
204
+ onClosed: _cache[2] || (_cache[2] = ($event) => emit("closed"))
205
+ }, createSlots({
206
+ default: withCtx(() => [createElementVNode("div", { class: normalizeClass(bodyClass.value) }, [renderSlot(_ctx.$slots, "default")], 2)]),
207
+ _: 2
208
+ }, [
209
+ useModalSrOnlyTitle.value ? {
210
+ name: "title",
211
+ fn: withCtx(() => [createElementVNode("span", _hoisted_1, toDisplayString(resolvedTitle.value), 1)]),
212
+ key: "0"
213
+ } : void 0,
214
+ __props.showHeader ? {
215
+ name: "header",
216
+ fn: withCtx(() => [createVNode(GrDialogHeader_default, {
217
+ title: resolvedTitle.value,
218
+ "show-close-button": __props.showCloseButton,
219
+ config: __props.headerConfig,
220
+ "close-label": __props.closeLabel,
221
+ onClose: close
222
+ }, createSlots({ _: 2 }, [slots.header ? {
223
+ name: "default",
224
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "header", normalizeProps(guardReactiveProps(slotProps)))]),
225
+ key: "0"
226
+ } : void 0]), 1032, [
227
+ "title",
228
+ "show-close-button",
229
+ "config",
230
+ "close-label"
231
+ ])]),
232
+ key: "1"
233
+ } : void 0,
234
+ slots.footer ? {
235
+ name: "footer",
236
+ fn: withCtx(() => [createVNode(GrDialogFooter_default, { config: __props.footerConfig }, {
237
+ default: withCtx(() => [renderSlot(_ctx.$slots, "footer")]),
238
+ _: 3
239
+ }, 8, ["config"])]),
240
+ key: "2"
241
+ } : void 0
242
+ ]), 1032, [
243
+ "model-value",
244
+ "size",
245
+ "scroll-behavior",
246
+ "initial-focus",
247
+ "close-on-backdrop",
248
+ "close-on-esc",
249
+ "aria-label"
250
+ ]);
251
+ };
252
+ }
253
+ });
254
+ //#endregion
255
+ export { GrDialogFooter_default as i, GrDialogHeader_default as n, GrDialogCloseButton_default as r, GrDialog_default as t };