@gravity-ui/querieskit 1.2.0 → 1.3.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 (676) hide show
  1. package/.agents/skills/code-review-checklist/SKILL.md +62 -103
  2. package/AGENTS.md +12 -0
  3. package/CHANGELOG.md +17 -0
  4. package/CODEOWNERS +2 -1
  5. package/build/cjs/components/AttachmentList/AttachmentList.css +22 -0
  6. package/build/cjs/components/AttachmentList/AttachmentList.css.map +1 -0
  7. package/build/cjs/components/AttachmentList/AttachmentList.d.ts +17 -0
  8. package/build/cjs/components/AttachmentList/AttachmentList.js +75 -0
  9. package/build/cjs/components/AttachmentList/AttachmentList.js.map +1 -0
  10. package/build/cjs/components/AttachmentList/AttachmentList.stories.d.ts +93 -0
  11. package/build/cjs/components/AttachmentList/AttachmentList.stories.js +323 -0
  12. package/build/cjs/components/AttachmentList/AttachmentList.stories.js.map +1 -0
  13. package/build/cjs/components/AttachmentList/helpers/getIconByAttachmentName.d.ts +2 -0
  14. package/build/cjs/components/AttachmentList/helpers/getIconByAttachmentName.js +36 -0
  15. package/build/cjs/components/AttachmentList/helpers/getIconByAttachmentName.js.map +1 -0
  16. package/build/cjs/components/AttachmentList/helpers/objectLinkValidator.d.ts +11 -0
  17. package/build/cjs/components/AttachmentList/helpers/objectLinkValidator.js +30 -0
  18. package/build/cjs/components/AttachmentList/helpers/objectLinkValidator.js.map +1 -0
  19. package/build/cjs/components/AttachmentList/helpers/stringRequiredValidator.d.ts +2 -0
  20. package/build/cjs/components/AttachmentList/helpers/stringRequiredValidator.js +26 -0
  21. package/build/cjs/components/AttachmentList/helpers/stringRequiredValidator.js.map +1 -0
  22. package/build/cjs/components/AttachmentList/hooks/useKeyDownFormControl.d.ts +4 -0
  23. package/build/cjs/components/AttachmentList/hooks/useKeyDownFormControl.js +27 -0
  24. package/build/cjs/components/AttachmentList/hooks/useKeyDownFormControl.js.map +1 -0
  25. package/build/cjs/components/AttachmentList/hooks/useLabelRef.d.ts +4 -0
  26. package/build/cjs/components/AttachmentList/hooks/useLabelRef.js +35 -0
  27. package/build/cjs/components/AttachmentList/hooks/useLabelRef.js.map +1 -0
  28. package/build/cjs/components/AttachmentList/i18n/dicts.d.ts +23 -0
  29. package/build/cjs/components/AttachmentList/i18n/dicts.js +14 -0
  30. package/build/cjs/components/AttachmentList/i18n/dicts.js.map +1 -0
  31. package/build/cjs/components/AttachmentList/i18n/en.json +10 -0
  32. package/build/cjs/components/AttachmentList/i18n/index.d.ts +6 -0
  33. package/build/cjs/components/AttachmentList/i18n/index.js +11 -0
  34. package/build/cjs/components/AttachmentList/i18n/index.js.map +1 -0
  35. package/build/cjs/components/AttachmentList/i18n/ru.json +10 -0
  36. package/build/cjs/components/AttachmentList/index.d.ts +4 -0
  37. package/build/cjs/components/AttachmentList/index.js +40 -0
  38. package/build/cjs/components/AttachmentList/index.js.map +1 -0
  39. package/build/cjs/components/AttachmentList/internal/AttachmentItem/AttachmentItem.css +18 -0
  40. package/build/cjs/components/AttachmentList/internal/AttachmentItem/AttachmentItem.css.map +1 -0
  41. package/build/cjs/components/AttachmentList/internal/AttachmentItem/AttachmentItem.d.ts +16 -0
  42. package/build/cjs/components/AttachmentList/internal/AttachmentItem/AttachmentItem.js +106 -0
  43. package/build/cjs/components/AttachmentList/internal/AttachmentItem/AttachmentItem.js.map +1 -0
  44. package/build/cjs/components/AttachmentList/internal/AttachmentItem/index.d.ts +2 -0
  45. package/build/cjs/components/AttachmentList/internal/AttachmentItem/index.js +13 -0
  46. package/build/cjs/components/AttachmentList/internal/AttachmentItem/index.js.map +1 -0
  47. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.d.ts +9 -0
  48. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.js +22 -0
  49. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.js.map +1 -0
  50. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.css +17 -0
  51. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.css.map +1 -0
  52. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.d.ts +24 -0
  53. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.js +175 -0
  54. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.js.map +1 -0
  55. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/FileEdit.d.ts +12 -0
  56. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/FileEdit.js +91 -0
  57. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/FileEdit.js.map +1 -0
  58. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/index.d.ts +4 -0
  59. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/index.js +13 -0
  60. package/build/cjs/components/AttachmentList/internal/EditAttachmentItem/index.js.map +1 -0
  61. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.css +4 -0
  62. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.css.map +1 -0
  63. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.d.ts +13 -0
  64. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.js +75 -0
  65. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.js.map +1 -0
  66. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.d.ts +29 -0
  67. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.js +36 -0
  68. package/build/cjs/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.js.map +1 -0
  69. package/build/cjs/components/AttachmentListPlaceholder/i18n/dicts.d.ts +17 -0
  70. package/build/cjs/components/AttachmentListPlaceholder/i18n/dicts.js +14 -0
  71. package/build/cjs/components/AttachmentListPlaceholder/i18n/dicts.js.map +1 -0
  72. package/build/cjs/components/AttachmentListPlaceholder/i18n/en.json +7 -0
  73. package/build/cjs/components/AttachmentListPlaceholder/i18n/index.d.ts +6 -0
  74. package/build/cjs/components/AttachmentListPlaceholder/i18n/index.js +11 -0
  75. package/build/cjs/components/AttachmentListPlaceholder/i18n/index.js.map +1 -0
  76. package/build/cjs/components/AttachmentListPlaceholder/i18n/ru.json +7 -0
  77. package/build/cjs/components/AttachmentListPlaceholder/index.d.ts +2 -0
  78. package/build/cjs/components/AttachmentListPlaceholder/index.js +13 -0
  79. package/build/cjs/components/AttachmentListPlaceholder/index.js.map +1 -0
  80. package/build/cjs/components/DataTable/DataTable.css +0 -7
  81. package/build/cjs/components/DataTable/DataTable.css.map +1 -1
  82. package/build/cjs/components/DataTable/DataTable.js +12 -5
  83. package/build/cjs/components/DataTable/DataTable.js.map +1 -1
  84. package/build/cjs/components/ErrorTree/ErrorTree.d.ts +3 -0
  85. package/build/cjs/components/ErrorTree/ErrorTree.js +35 -0
  86. package/build/cjs/components/ErrorTree/ErrorTree.js.map +1 -0
  87. package/build/cjs/components/ErrorTree/ErrorTree.stories.d.ts +8 -0
  88. package/build/cjs/components/ErrorTree/ErrorTree.stories.js +101 -0
  89. package/build/cjs/components/ErrorTree/ErrorTree.stories.js.map +1 -0
  90. package/build/cjs/components/ErrorTree/helpers/formatAttributes.d.ts +2 -0
  91. package/build/cjs/components/ErrorTree/helpers/formatAttributes.js +16 -0
  92. package/build/cjs/components/ErrorTree/helpers/formatAttributes.js.map +1 -0
  93. package/build/cjs/components/ErrorTree/helpers/getIntermediateChain.d.ts +6 -0
  94. package/build/cjs/components/ErrorTree/helpers/getIntermediateChain.js +22 -0
  95. package/build/cjs/components/ErrorTree/helpers/getIntermediateChain.js.map +1 -0
  96. package/build/cjs/components/ErrorTree/i18n/dicts.d.ts +27 -0
  97. package/build/cjs/components/ErrorTree/i18n/dicts.js +14 -0
  98. package/build/cjs/components/ErrorTree/i18n/dicts.js.map +1 -0
  99. package/build/cjs/components/ErrorTree/i18n/en.json +11 -0
  100. package/build/cjs/components/ErrorTree/i18n/index.d.ts +6 -0
  101. package/build/cjs/components/ErrorTree/i18n/index.js +11 -0
  102. package/build/cjs/components/ErrorTree/i18n/index.js.map +1 -0
  103. package/build/cjs/components/ErrorTree/i18n/ru.json +13 -0
  104. package/build/cjs/components/ErrorTree/index.d.ts +1 -0
  105. package/build/cjs/components/ErrorTree/index.js +13 -0
  106. package/build/cjs/components/ErrorTree/index.js.map +1 -0
  107. package/build/cjs/components/ErrorTree/internal/ErrorTreeChildren.css +4 -0
  108. package/build/cjs/components/ErrorTree/internal/ErrorTreeChildren.css.map +1 -0
  109. package/build/cjs/components/ErrorTree/internal/ErrorTreeChildren.d.ts +10 -0
  110. package/build/cjs/components/ErrorTree/internal/ErrorTreeChildren.js +32 -0
  111. package/build/cjs/components/ErrorTree/internal/ErrorTreeChildren.js.map +1 -0
  112. package/build/cjs/components/ErrorTree/internal/ErrorTreeNode.css +80 -0
  113. package/build/cjs/components/ErrorTree/internal/ErrorTreeNode.css.map +1 -0
  114. package/build/cjs/components/ErrorTree/internal/ErrorTreeNode.d.ts +13 -0
  115. package/build/cjs/components/ErrorTree/internal/ErrorTreeNode.js +274 -0
  116. package/build/cjs/components/ErrorTree/internal/ErrorTreeNode.js.map +1 -0
  117. package/build/cjs/components/ErrorTree/internal/IntermediateMessages.css +10 -0
  118. package/build/cjs/components/ErrorTree/internal/IntermediateMessages.css.map +1 -0
  119. package/build/cjs/components/ErrorTree/internal/IntermediateMessages.d.ts +9 -0
  120. package/build/cjs/components/ErrorTree/internal/IntermediateMessages.js +118 -0
  121. package/build/cjs/components/ErrorTree/internal/IntermediateMessages.js.map +1 -0
  122. package/build/cjs/components/Icons/LogoCPlusPlus.d.ts +2 -0
  123. package/build/cjs/components/Icons/LogoCPlusPlus.js +35 -0
  124. package/build/cjs/components/Icons/LogoCPlusPlus.js.map +1 -0
  125. package/build/cjs/components/Icons/index.d.ts +1 -0
  126. package/build/cjs/components/Icons/index.js +13 -0
  127. package/build/cjs/components/Icons/index.js.map +1 -0
  128. package/build/cjs/components/QueryResultsTable/QueryResultsTable.css +53 -0
  129. package/build/cjs/components/QueryResultsTable/QueryResultsTable.css.map +1 -0
  130. package/build/cjs/components/QueryResultsTable/QueryResultsTable.d.ts +24 -0
  131. package/build/cjs/components/QueryResultsTable/QueryResultsTable.js +104 -0
  132. package/build/cjs/components/QueryResultsTable/QueryResultsTable.js.map +1 -0
  133. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultType.d.ts +3 -0
  134. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultType.js +90 -0
  135. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultType.js.map +1 -0
  136. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultValue.d.ts +11 -0
  137. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultValue.js +40 -0
  138. package/build/cjs/components/QueryResultsTable/helpers/formatQueryResultValue.js.map +1 -0
  139. package/build/cjs/components/QueryResultsTable/i18n/dicts.d.ts +13 -0
  140. package/build/cjs/components/QueryResultsTable/i18n/dicts.js +14 -0
  141. package/build/cjs/components/QueryResultsTable/i18n/dicts.js.map +1 -0
  142. package/build/cjs/components/QueryResultsTable/i18n/en.json +5 -0
  143. package/build/cjs/components/QueryResultsTable/i18n/index.d.ts +6 -0
  144. package/build/cjs/components/QueryResultsTable/i18n/index.js +11 -0
  145. package/build/cjs/components/QueryResultsTable/i18n/index.js.map +1 -0
  146. package/build/cjs/components/QueryResultsTable/i18n/ru.json +5 -0
  147. package/build/cjs/components/QueryResultsTable/index.d.ts +3 -0
  148. package/build/cjs/components/QueryResultsTable/index.js +20 -0
  149. package/build/cjs/components/QueryResultsTable/index.js.map +1 -0
  150. package/build/cjs/components/QueryResultsTable/internal/QueryResultCell.d.ts +11 -0
  151. package/build/cjs/components/QueryResultsTable/internal/QueryResultCell.js +79 -0
  152. package/build/cjs/components/QueryResultsTable/internal/QueryResultCell.js.map +1 -0
  153. package/build/cjs/components/index.d.ts +5 -0
  154. package/build/cjs/components/index.js +48 -1
  155. package/build/cjs/components/index.js.map +1 -1
  156. package/build/cjs/helpers/createUuid.d.ts +1 -0
  157. package/build/cjs/helpers/createUuid.js +12 -0
  158. package/build/cjs/helpers/createUuid.js.map +1 -0
  159. package/build/cjs/helpers/isObjectEqual.d.ts +1 -0
  160. package/build/cjs/helpers/isObjectEqual.js +30 -0
  161. package/build/cjs/helpers/isObjectEqual.js.map +1 -0
  162. package/build/cjs/helpers/useDebouncedValue.d.ts +2 -0
  163. package/build/cjs/helpers/useDebouncedValue.js +27 -0
  164. package/build/cjs/helpers/useDebouncedValue.js.map +1 -0
  165. package/build/cjs/index.d.ts +3 -0
  166. package/build/cjs/index.js +33 -0
  167. package/build/cjs/index.js.map +1 -1
  168. package/build/cjs/modules/Attachments/Attachments.css +8 -0
  169. package/build/cjs/modules/Attachments/Attachments.css.map +1 -0
  170. package/build/cjs/modules/Attachments/Attachments.d.ts +22 -0
  171. package/build/cjs/modules/Attachments/Attachments.js +381 -0
  172. package/build/cjs/modules/Attachments/Attachments.js.map +1 -0
  173. package/build/cjs/modules/Attachments/Attachments.stories.d.ts +41 -0
  174. package/build/cjs/modules/Attachments/Attachments.stories.js +123 -0
  175. package/build/cjs/modules/Attachments/Attachments.stories.js.map +1 -0
  176. package/build/cjs/modules/Attachments/i18n/dicts.d.ts +13 -0
  177. package/build/cjs/modules/Attachments/i18n/dicts.js +14 -0
  178. package/build/cjs/modules/Attachments/i18n/dicts.js.map +1 -0
  179. package/build/cjs/modules/Attachments/i18n/en.json +5 -0
  180. package/build/cjs/modules/Attachments/i18n/index.d.ts +6 -0
  181. package/build/cjs/modules/Attachments/i18n/index.js +11 -0
  182. package/build/cjs/modules/Attachments/i18n/index.js.map +1 -0
  183. package/build/cjs/modules/Attachments/i18n/ru.json +5 -0
  184. package/build/cjs/modules/Attachments/index.d.ts +2 -0
  185. package/build/cjs/modules/Attachments/index.js +13 -0
  186. package/build/cjs/modules/Attachments/index.js.map +1 -0
  187. package/build/cjs/modules/NavigationPreview/NavigationPreview.css +7 -1
  188. package/build/cjs/modules/NavigationPreview/NavigationPreview.css.map +1 -1
  189. package/build/cjs/modules/NavigationPreview/NavigationPreview.d.ts +2 -2
  190. package/build/cjs/modules/NavigationPreview/NavigationPreview.js +37 -7
  191. package/build/cjs/modules/NavigationPreview/NavigationPreview.js.map +1 -1
  192. package/build/cjs/modules/NavigationPreview/story/NavigationPreview.stories.d.ts +1 -0
  193. package/build/cjs/modules/NavigationPreview/story/NavigationPreview.stories.js +25 -1
  194. package/build/cjs/modules/NavigationPreview/story/NavigationPreview.stories.js.map +1 -1
  195. package/build/cjs/modules/NavigationPreview/story/mockData.d.ts +2 -2
  196. package/build/cjs/modules/NavigationPreview/story/mockData.js +16 -4
  197. package/build/cjs/modules/NavigationPreview/story/mockData.js.map +1 -1
  198. package/build/cjs/modules/QueryStatistics/QueryStatistics.css +4 -0
  199. package/build/cjs/modules/QueryStatistics/QueryStatistics.css.map +1 -0
  200. package/build/cjs/modules/QueryStatistics/QueryStatistics.d.ts +4 -0
  201. package/build/cjs/modules/QueryStatistics/QueryStatistics.js +151 -0
  202. package/build/cjs/modules/QueryStatistics/QueryStatistics.js.map +1 -0
  203. package/build/cjs/modules/QueryStatistics/helpers.d.ts +15 -0
  204. package/build/cjs/modules/QueryStatistics/helpers.js +118 -0
  205. package/build/cjs/modules/QueryStatistics/helpers.js.map +1 -0
  206. package/build/cjs/modules/QueryStatistics/i18n/dicts.d.ts +35 -0
  207. package/build/cjs/modules/QueryStatistics/i18n/dicts.js +14 -0
  208. package/build/cjs/modules/QueryStatistics/i18n/dicts.js.map +1 -0
  209. package/build/cjs/modules/QueryStatistics/i18n/en.json +16 -0
  210. package/build/cjs/modules/QueryStatistics/i18n/index.d.ts +6 -0
  211. package/build/cjs/modules/QueryStatistics/i18n/index.js +11 -0
  212. package/build/cjs/modules/QueryStatistics/i18n/index.js.map +1 -0
  213. package/build/cjs/modules/QueryStatistics/i18n/ru.json +16 -0
  214. package/build/cjs/modules/QueryStatistics/index.d.ts +2 -0
  215. package/build/cjs/modules/QueryStatistics/index.js +13 -0
  216. package/build/cjs/modules/QueryStatistics/index.js.map +1 -0
  217. package/build/cjs/modules/QueryStatistics/internal/MetricCell.css +36 -0
  218. package/build/cjs/modules/QueryStatistics/internal/MetricCell.css.map +1 -0
  219. package/build/cjs/modules/QueryStatistics/internal/MetricCell.d.ts +9 -0
  220. package/build/cjs/modules/QueryStatistics/internal/MetricCell.js +121 -0
  221. package/build/cjs/modules/QueryStatistics/internal/MetricCell.js.map +1 -0
  222. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsTable.css +21 -0
  223. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsTable.css.map +1 -0
  224. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsTable.d.ts +20 -0
  225. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsTable.js +140 -0
  226. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsTable.js.map +1 -0
  227. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsToolbar.css +5 -0
  228. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsToolbar.css.map +1 -0
  229. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsToolbar.d.ts +10 -0
  230. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsToolbar.js +55 -0
  231. package/build/cjs/modules/QueryStatistics/internal/QueryStatisticsToolbar.js.map +1 -0
  232. package/build/cjs/modules/QueryStatistics/story/QueryStatistics.stories.d.ts +8 -0
  233. package/build/cjs/modules/QueryStatistics/story/QueryStatistics.stories.js +112 -0
  234. package/build/cjs/modules/QueryStatistics/story/QueryStatistics.stories.js.map +1 -0
  235. package/build/cjs/modules/index.d.ts +3 -0
  236. package/build/cjs/modules/index.js +20 -0
  237. package/build/cjs/modules/index.js.map +1 -1
  238. package/build/cjs/types/declarations.d.ts +10 -0
  239. package/build/cjs/types/errorTree.d.ts +23 -0
  240. package/build/cjs/types/errorTree.js +6 -0
  241. package/build/cjs/types/errorTree.js.map +1 -0
  242. package/build/cjs/types/navigation.d.ts +8 -1
  243. package/build/cjs/types/navigation.js.map +1 -1
  244. package/build/cjs/types/queryResults.d.ts +34 -0
  245. package/build/cjs/types/queryResults.js +6 -0
  246. package/build/cjs/types/queryResults.js.map +1 -0
  247. package/build/cjs/types/queryStatistics.d.ts +54 -0
  248. package/build/cjs/types/queryStatistics.js +6 -0
  249. package/build/cjs/types/queryStatistics.js.map +1 -0
  250. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.stories.js +40 -35
  251. package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.stories.js.map +1 -1
  252. package/build/cjs/widgets/QueriesNavigation/i18n/index.d.ts +2 -2
  253. package/build/cjs/widgets/QueryResults/QueryResults.css +19 -0
  254. package/build/cjs/widgets/QueryResults/QueryResults.css.map +1 -0
  255. package/build/cjs/widgets/QueryResults/QueryResults.d.ts +23 -0
  256. package/build/cjs/widgets/QueryResults/QueryResults.js +119 -0
  257. package/build/cjs/widgets/QueryResults/QueryResults.js.map +1 -0
  258. package/build/cjs/widgets/QueryResults/QueryResults.stories.d.ts +19 -0
  259. package/build/cjs/widgets/QueryResults/QueryResults.stories.js +199 -0
  260. package/build/cjs/widgets/QueryResults/QueryResults.stories.js.map +1 -0
  261. package/build/cjs/widgets/QueryResults/i18n/dicts.d.ts +25 -0
  262. package/build/cjs/widgets/QueryResults/i18n/dicts.js +14 -0
  263. package/build/cjs/widgets/QueryResults/i18n/dicts.js.map +1 -0
  264. package/build/cjs/widgets/QueryResults/i18n/en.json +10 -0
  265. package/build/cjs/widgets/QueryResults/i18n/index.d.ts +6 -0
  266. package/build/cjs/widgets/QueryResults/i18n/index.js +11 -0
  267. package/build/cjs/widgets/QueryResults/i18n/index.js.map +1 -0
  268. package/build/cjs/widgets/QueryResults/i18n/ru.json +12 -0
  269. package/build/cjs/widgets/QueryResults/index.d.ts +2 -0
  270. package/build/cjs/widgets/QueryResults/index.js +13 -0
  271. package/build/cjs/widgets/QueryResults/index.js.map +1 -0
  272. package/build/cjs/widgets/QueryResults/internal/QueryResultsSchema.d.ts +7 -0
  273. package/build/cjs/widgets/QueryResults/internal/QueryResultsSchema.js +49 -0
  274. package/build/cjs/widgets/QueryResults/internal/QueryResultsSchema.js.map +1 -0
  275. package/build/cjs/widgets/index.d.ts +2 -0
  276. package/build/cjs/widgets/index.js +7 -0
  277. package/build/cjs/widgets/index.js.map +1 -1
  278. package/build/esm/components/AttachmentList/AttachmentList.css +22 -0
  279. package/build/esm/components/AttachmentList/AttachmentList.css.map +1 -0
  280. package/build/esm/components/AttachmentList/AttachmentList.d.ts +17 -0
  281. package/build/esm/components/AttachmentList/AttachmentList.js +67 -0
  282. package/build/esm/components/AttachmentList/AttachmentList.js.map +1 -0
  283. package/build/esm/components/AttachmentList/AttachmentList.scss +25 -0
  284. package/build/esm/components/AttachmentList/AttachmentList.stories.d.ts +93 -0
  285. package/build/esm/components/AttachmentList/AttachmentList.stories.js +315 -0
  286. package/build/esm/components/AttachmentList/AttachmentList.stories.js.map +1 -0
  287. package/build/esm/components/AttachmentList/helpers/getIconByAttachmentName.d.ts +2 -0
  288. package/build/esm/components/AttachmentList/helpers/getIconByAttachmentName.js +30 -0
  289. package/build/esm/components/AttachmentList/helpers/getIconByAttachmentName.js.map +1 -0
  290. package/build/esm/components/AttachmentList/helpers/objectLinkValidator.d.ts +11 -0
  291. package/build/esm/components/AttachmentList/helpers/objectLinkValidator.js +24 -0
  292. package/build/esm/components/AttachmentList/helpers/objectLinkValidator.js.map +1 -0
  293. package/build/esm/components/AttachmentList/helpers/stringRequiredValidator.d.ts +2 -0
  294. package/build/esm/components/AttachmentList/helpers/stringRequiredValidator.js +19 -0
  295. package/build/esm/components/AttachmentList/helpers/stringRequiredValidator.js.map +1 -0
  296. package/build/esm/components/AttachmentList/hooks/useKeyDownFormControl.d.ts +4 -0
  297. package/build/esm/components/AttachmentList/hooks/useKeyDownFormControl.js +21 -0
  298. package/build/esm/components/AttachmentList/hooks/useKeyDownFormControl.js.map +1 -0
  299. package/build/esm/components/AttachmentList/hooks/useLabelRef.d.ts +4 -0
  300. package/build/esm/components/AttachmentList/hooks/useLabelRef.js +28 -0
  301. package/build/esm/components/AttachmentList/hooks/useLabelRef.js.map +1 -0
  302. package/build/esm/components/AttachmentList/i18n/dicts.d.ts +23 -0
  303. package/build/esm/components/AttachmentList/i18n/dicts.js +7 -0
  304. package/build/esm/components/AttachmentList/i18n/dicts.js.map +1 -0
  305. package/build/esm/components/AttachmentList/i18n/en.json +10 -0
  306. package/build/esm/components/AttachmentList/i18n/index.d.ts +6 -0
  307. package/build/esm/components/AttachmentList/i18n/index.js +4 -0
  308. package/build/esm/components/AttachmentList/i18n/index.js.map +1 -0
  309. package/build/esm/components/AttachmentList/i18n/ru.json +10 -0
  310. package/build/esm/components/AttachmentList/index.d.ts +4 -0
  311. package/build/esm/components/AttachmentList/index.js +4 -0
  312. package/build/esm/components/AttachmentList/index.js.map +1 -0
  313. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.css +18 -0
  314. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.css.map +1 -0
  315. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.d.ts +16 -0
  316. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.js +98 -0
  317. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.js.map +1 -0
  318. package/build/esm/components/AttachmentList/internal/AttachmentItem/AttachmentItem.scss +23 -0
  319. package/build/esm/components/AttachmentList/internal/AttachmentItem/index.d.ts +2 -0
  320. package/build/esm/components/AttachmentList/internal/AttachmentItem/index.js +2 -0
  321. package/build/esm/components/AttachmentList/internal/AttachmentItem/index.js.map +1 -0
  322. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.d.ts +9 -0
  323. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.js +15 -0
  324. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.js.map +1 -0
  325. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.css +17 -0
  326. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.css.map +1 -0
  327. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.d.ts +24 -0
  328. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.js +167 -0
  329. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.js.map +1 -0
  330. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.scss +21 -0
  331. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/FileEdit.d.ts +12 -0
  332. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/FileEdit.js +83 -0
  333. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/FileEdit.js.map +1 -0
  334. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/index.d.ts +4 -0
  335. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/index.js +2 -0
  336. package/build/esm/components/AttachmentList/internal/EditAttachmentItem/index.js.map +1 -0
  337. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.css +4 -0
  338. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.css.map +1 -0
  339. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.d.ts +13 -0
  340. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.js +68 -0
  341. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.js.map +1 -0
  342. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.scss +5 -0
  343. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.d.ts +29 -0
  344. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.js +29 -0
  345. package/build/esm/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.js.map +1 -0
  346. package/build/esm/components/AttachmentListPlaceholder/i18n/dicts.d.ts +17 -0
  347. package/build/esm/components/AttachmentListPlaceholder/i18n/dicts.js +7 -0
  348. package/build/esm/components/AttachmentListPlaceholder/i18n/dicts.js.map +1 -0
  349. package/build/esm/components/AttachmentListPlaceholder/i18n/en.json +7 -0
  350. package/build/esm/components/AttachmentListPlaceholder/i18n/index.d.ts +6 -0
  351. package/build/esm/components/AttachmentListPlaceholder/i18n/index.js +4 -0
  352. package/build/esm/components/AttachmentListPlaceholder/i18n/index.js.map +1 -0
  353. package/build/esm/components/AttachmentListPlaceholder/i18n/ru.json +7 -0
  354. package/build/esm/components/AttachmentListPlaceholder/index.d.ts +2 -0
  355. package/build/esm/components/AttachmentListPlaceholder/index.js +2 -0
  356. package/build/esm/components/AttachmentListPlaceholder/index.js.map +1 -0
  357. package/build/esm/components/DataTable/DataTable.css +0 -7
  358. package/build/esm/components/DataTable/DataTable.css.map +1 -1
  359. package/build/esm/components/DataTable/DataTable.js +12 -5
  360. package/build/esm/components/DataTable/DataTable.js.map +1 -1
  361. package/build/esm/components/DataTable/DataTable.scss +18 -26
  362. package/build/esm/components/ErrorTree/ErrorTree.d.ts +3 -0
  363. package/build/esm/components/ErrorTree/ErrorTree.js +28 -0
  364. package/build/esm/components/ErrorTree/ErrorTree.js.map +1 -0
  365. package/build/esm/components/ErrorTree/ErrorTree.stories.d.ts +8 -0
  366. package/build/esm/components/ErrorTree/ErrorTree.stories.js +94 -0
  367. package/build/esm/components/ErrorTree/ErrorTree.stories.js.map +1 -0
  368. package/build/esm/components/ErrorTree/helpers/formatAttributes.d.ts +2 -0
  369. package/build/esm/components/ErrorTree/helpers/formatAttributes.js +10 -0
  370. package/build/esm/components/ErrorTree/helpers/formatAttributes.js.map +1 -0
  371. package/build/esm/components/ErrorTree/helpers/getIntermediateChain.d.ts +6 -0
  372. package/build/esm/components/ErrorTree/helpers/getIntermediateChain.js +16 -0
  373. package/build/esm/components/ErrorTree/helpers/getIntermediateChain.js.map +1 -0
  374. package/build/esm/components/ErrorTree/i18n/dicts.d.ts +27 -0
  375. package/build/esm/components/ErrorTree/i18n/dicts.js +7 -0
  376. package/build/esm/components/ErrorTree/i18n/dicts.js.map +1 -0
  377. package/build/esm/components/ErrorTree/i18n/en.json +11 -0
  378. package/build/esm/components/ErrorTree/i18n/index.d.ts +6 -0
  379. package/build/esm/components/ErrorTree/i18n/index.js +4 -0
  380. package/build/esm/components/ErrorTree/i18n/index.js.map +1 -0
  381. package/build/esm/components/ErrorTree/i18n/ru.json +13 -0
  382. package/build/esm/components/ErrorTree/index.d.ts +1 -0
  383. package/build/esm/components/ErrorTree/index.js +2 -0
  384. package/build/esm/components/ErrorTree/index.js.map +1 -0
  385. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.css +4 -0
  386. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.css.map +1 -0
  387. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.d.ts +10 -0
  388. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.js +25 -0
  389. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.js.map +1 -0
  390. package/build/esm/components/ErrorTree/internal/ErrorTreeChildren.scss +5 -0
  391. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.css +80 -0
  392. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.css.map +1 -0
  393. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.d.ts +13 -0
  394. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.js +266 -0
  395. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.js.map +1 -0
  396. package/build/esm/components/ErrorTree/internal/ErrorTreeNode.scss +95 -0
  397. package/build/esm/components/ErrorTree/internal/IntermediateMessages.css +10 -0
  398. package/build/esm/components/ErrorTree/internal/IntermediateMessages.css.map +1 -0
  399. package/build/esm/components/ErrorTree/internal/IntermediateMessages.d.ts +9 -0
  400. package/build/esm/components/ErrorTree/internal/IntermediateMessages.js +110 -0
  401. package/build/esm/components/ErrorTree/internal/IntermediateMessages.js.map +1 -0
  402. package/build/esm/components/ErrorTree/internal/IntermediateMessages.scss +13 -0
  403. package/build/esm/components/Icons/LogoCPlusPlus.d.ts +2 -0
  404. package/build/esm/components/Icons/LogoCPlusPlus.js +28 -0
  405. package/build/esm/components/Icons/LogoCPlusPlus.js.map +1 -0
  406. package/build/esm/components/Icons/index.d.ts +1 -0
  407. package/build/esm/components/Icons/index.js +2 -0
  408. package/build/esm/components/Icons/index.js.map +1 -0
  409. package/build/esm/components/QueryResultsTable/QueryResultsTable.css +53 -0
  410. package/build/esm/components/QueryResultsTable/QueryResultsTable.css.map +1 -0
  411. package/build/esm/components/QueryResultsTable/QueryResultsTable.d.ts +24 -0
  412. package/build/esm/components/QueryResultsTable/QueryResultsTable.js +96 -0
  413. package/build/esm/components/QueryResultsTable/QueryResultsTable.js.map +1 -0
  414. package/build/esm/components/QueryResultsTable/QueryResultsTable.scss +65 -0
  415. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultType.d.ts +3 -0
  416. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultType.js +82 -0
  417. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultType.js.map +1 -0
  418. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultValue.d.ts +11 -0
  419. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultValue.js +33 -0
  420. package/build/esm/components/QueryResultsTable/helpers/formatQueryResultValue.js.map +1 -0
  421. package/build/esm/components/QueryResultsTable/i18n/dicts.d.ts +13 -0
  422. package/build/esm/components/QueryResultsTable/i18n/dicts.js +7 -0
  423. package/build/esm/components/QueryResultsTable/i18n/dicts.js.map +1 -0
  424. package/build/esm/components/QueryResultsTable/i18n/en.json +5 -0
  425. package/build/esm/components/QueryResultsTable/i18n/index.d.ts +6 -0
  426. package/build/esm/components/QueryResultsTable/i18n/index.js +4 -0
  427. package/build/esm/components/QueryResultsTable/i18n/index.js.map +1 -0
  428. package/build/esm/components/QueryResultsTable/i18n/ru.json +5 -0
  429. package/build/esm/components/QueryResultsTable/index.d.ts +3 -0
  430. package/build/esm/components/QueryResultsTable/index.js +3 -0
  431. package/build/esm/components/QueryResultsTable/index.js.map +1 -0
  432. package/build/esm/components/QueryResultsTable/internal/QueryResultCell.d.ts +11 -0
  433. package/build/esm/components/QueryResultsTable/internal/QueryResultCell.js +71 -0
  434. package/build/esm/components/QueryResultsTable/internal/QueryResultCell.js.map +1 -0
  435. package/build/esm/components/index.d.ts +5 -0
  436. package/build/esm/components/index.js +4 -0
  437. package/build/esm/components/index.js.map +1 -1
  438. package/build/esm/helpers/createUuid.d.ts +1 -0
  439. package/build/esm/helpers/createUuid.js +6 -0
  440. package/build/esm/helpers/createUuid.js.map +1 -0
  441. package/build/esm/helpers/isObjectEqual.d.ts +1 -0
  442. package/build/esm/helpers/isObjectEqual.js +23 -0
  443. package/build/esm/helpers/isObjectEqual.js.map +1 -0
  444. package/build/esm/helpers/useDebouncedValue.d.ts +2 -0
  445. package/build/esm/helpers/useDebouncedValue.js +21 -0
  446. package/build/esm/helpers/useDebouncedValue.js.map +1 -0
  447. package/build/esm/index.d.ts +3 -0
  448. package/build/esm/index.js +3 -0
  449. package/build/esm/index.js.map +1 -1
  450. package/build/esm/modules/Attachments/Attachments.css +8 -0
  451. package/build/esm/modules/Attachments/Attachments.css.map +1 -0
  452. package/build/esm/modules/Attachments/Attachments.d.ts +22 -0
  453. package/build/esm/modules/Attachments/Attachments.js +373 -0
  454. package/build/esm/modules/Attachments/Attachments.js.map +1 -0
  455. package/build/esm/modules/Attachments/Attachments.scss +10 -0
  456. package/build/esm/modules/Attachments/Attachments.stories.d.ts +41 -0
  457. package/build/esm/modules/Attachments/Attachments.stories.js +115 -0
  458. package/build/esm/modules/Attachments/Attachments.stories.js.map +1 -0
  459. package/build/esm/modules/Attachments/i18n/dicts.d.ts +13 -0
  460. package/build/esm/modules/Attachments/i18n/dicts.js +7 -0
  461. package/build/esm/modules/Attachments/i18n/dicts.js.map +1 -0
  462. package/build/esm/modules/Attachments/i18n/en.json +5 -0
  463. package/build/esm/modules/Attachments/i18n/index.d.ts +6 -0
  464. package/build/esm/modules/Attachments/i18n/index.js +4 -0
  465. package/build/esm/modules/Attachments/i18n/index.js.map +1 -0
  466. package/build/esm/modules/Attachments/i18n/ru.json +5 -0
  467. package/build/esm/modules/Attachments/index.d.ts +2 -0
  468. package/build/esm/modules/Attachments/index.js +2 -0
  469. package/build/esm/modules/Attachments/index.js.map +1 -0
  470. package/build/esm/modules/NavigationPreview/NavigationPreview.css +7 -1
  471. package/build/esm/modules/NavigationPreview/NavigationPreview.css.map +1 -1
  472. package/build/esm/modules/NavigationPreview/NavigationPreview.d.ts +2 -2
  473. package/build/esm/modules/NavigationPreview/NavigationPreview.js +38 -8
  474. package/build/esm/modules/NavigationPreview/NavigationPreview.js.map +1 -1
  475. package/build/esm/modules/NavigationPreview/NavigationPreview.scss +25 -17
  476. package/build/esm/modules/NavigationPreview/story/NavigationPreview.stories.d.ts +1 -0
  477. package/build/esm/modules/NavigationPreview/story/NavigationPreview.stories.js +24 -0
  478. package/build/esm/modules/NavigationPreview/story/NavigationPreview.stories.js.map +1 -1
  479. package/build/esm/modules/NavigationPreview/story/mockData.d.ts +2 -2
  480. package/build/esm/modules/NavigationPreview/story/mockData.js +16 -4
  481. package/build/esm/modules/NavigationPreview/story/mockData.js.map +1 -1
  482. package/build/esm/modules/QueryStatistics/QueryStatistics.css +4 -0
  483. package/build/esm/modules/QueryStatistics/QueryStatistics.css.map +1 -0
  484. package/build/esm/modules/QueryStatistics/QueryStatistics.d.ts +4 -0
  485. package/build/esm/modules/QueryStatistics/QueryStatistics.js +143 -0
  486. package/build/esm/modules/QueryStatistics/QueryStatistics.js.map +1 -0
  487. package/build/esm/modules/QueryStatistics/QueryStatistics.scss +3 -0
  488. package/build/esm/modules/QueryStatistics/helpers.d.ts +15 -0
  489. package/build/esm/modules/QueryStatistics/helpers.js +106 -0
  490. package/build/esm/modules/QueryStatistics/helpers.js.map +1 -0
  491. package/build/esm/modules/QueryStatistics/i18n/dicts.d.ts +35 -0
  492. package/build/esm/modules/QueryStatistics/i18n/dicts.js +7 -0
  493. package/build/esm/modules/QueryStatistics/i18n/dicts.js.map +1 -0
  494. package/build/esm/modules/QueryStatistics/i18n/en.json +16 -0
  495. package/build/esm/modules/QueryStatistics/i18n/index.d.ts +6 -0
  496. package/build/esm/modules/QueryStatistics/i18n/index.js +4 -0
  497. package/build/esm/modules/QueryStatistics/i18n/index.js.map +1 -0
  498. package/build/esm/modules/QueryStatistics/i18n/ru.json +16 -0
  499. package/build/esm/modules/QueryStatistics/index.d.ts +2 -0
  500. package/build/esm/modules/QueryStatistics/index.js +2 -0
  501. package/build/esm/modules/QueryStatistics/index.js.map +1 -0
  502. package/build/esm/modules/QueryStatistics/internal/MetricCell.css +36 -0
  503. package/build/esm/modules/QueryStatistics/internal/MetricCell.css.map +1 -0
  504. package/build/esm/modules/QueryStatistics/internal/MetricCell.d.ts +9 -0
  505. package/build/esm/modules/QueryStatistics/internal/MetricCell.js +114 -0
  506. package/build/esm/modules/QueryStatistics/internal/MetricCell.js.map +1 -0
  507. package/build/esm/modules/QueryStatistics/internal/MetricCell.scss +12 -0
  508. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.css +21 -0
  509. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.css.map +1 -0
  510. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.d.ts +20 -0
  511. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.js +132 -0
  512. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.js.map +1 -0
  513. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsTable.scss +8 -0
  514. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.css +5 -0
  515. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.css.map +1 -0
  516. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.d.ts +10 -0
  517. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.js +48 -0
  518. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.js.map +1 -0
  519. package/build/esm/modules/QueryStatistics/internal/QueryStatisticsToolbar.scss +1 -0
  520. package/build/esm/modules/QueryStatistics/story/QueryStatistics.stories.d.ts +8 -0
  521. package/build/esm/modules/QueryStatistics/story/QueryStatistics.stories.js +105 -0
  522. package/build/esm/modules/QueryStatistics/story/QueryStatistics.stories.js.map +1 -0
  523. package/build/esm/modules/index.d.ts +3 -0
  524. package/build/esm/modules/index.js +2 -0
  525. package/build/esm/modules/index.js.map +1 -1
  526. package/build/esm/types/declarations.d.ts +10 -0
  527. package/build/esm/types/errorTree.d.ts +23 -0
  528. package/build/esm/types/errorTree.js +2 -0
  529. package/build/esm/types/errorTree.js.map +1 -0
  530. package/build/esm/types/navigation.d.ts +8 -1
  531. package/build/esm/types/navigation.js.map +1 -1
  532. package/build/esm/types/queryResults.d.ts +34 -0
  533. package/build/esm/types/queryResults.js +2 -0
  534. package/build/esm/types/queryResults.js.map +1 -0
  535. package/build/esm/types/queryStatistics.d.ts +54 -0
  536. package/build/esm/types/queryStatistics.js +2 -0
  537. package/build/esm/types/queryStatistics.js.map +1 -0
  538. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.stories.js +40 -35
  539. package/build/esm/widgets/QueriesNavigation/QueriesNavigation.stories.js.map +1 -1
  540. package/build/esm/widgets/QueriesNavigation/i18n/index.d.ts +2 -2
  541. package/build/esm/widgets/QueryResults/QueryResults.css +19 -0
  542. package/build/esm/widgets/QueryResults/QueryResults.css.map +1 -0
  543. package/build/esm/widgets/QueryResults/QueryResults.d.ts +23 -0
  544. package/build/esm/widgets/QueryResults/QueryResults.js +111 -0
  545. package/build/esm/widgets/QueryResults/QueryResults.js.map +1 -0
  546. package/build/esm/widgets/QueryResults/QueryResults.scss +25 -0
  547. package/build/esm/widgets/QueryResults/QueryResults.stories.d.ts +19 -0
  548. package/build/esm/widgets/QueryResults/QueryResults.stories.js +191 -0
  549. package/build/esm/widgets/QueryResults/QueryResults.stories.js.map +1 -0
  550. package/build/esm/widgets/QueryResults/i18n/dicts.d.ts +25 -0
  551. package/build/esm/widgets/QueryResults/i18n/dicts.js +7 -0
  552. package/build/esm/widgets/QueryResults/i18n/dicts.js.map +1 -0
  553. package/build/esm/widgets/QueryResults/i18n/en.json +10 -0
  554. package/build/esm/widgets/QueryResults/i18n/index.d.ts +6 -0
  555. package/build/esm/widgets/QueryResults/i18n/index.js +4 -0
  556. package/build/esm/widgets/QueryResults/i18n/index.js.map +1 -0
  557. package/build/esm/widgets/QueryResults/i18n/ru.json +12 -0
  558. package/build/esm/widgets/QueryResults/index.d.ts +2 -0
  559. package/build/esm/widgets/QueryResults/index.js +2 -0
  560. package/build/esm/widgets/QueryResults/index.js.map +1 -0
  561. package/build/esm/widgets/QueryResults/internal/QueryResultsSchema.d.ts +7 -0
  562. package/build/esm/widgets/QueryResults/internal/QueryResultsSchema.js +41 -0
  563. package/build/esm/widgets/QueryResults/internal/QueryResultsSchema.js.map +1 -0
  564. package/build/esm/widgets/index.d.ts +2 -0
  565. package/build/esm/widgets/index.js +1 -0
  566. package/build/esm/widgets/index.js.map +1 -1
  567. package/package.json +1 -1
  568. package/plans/styles-rules.md +137 -0
  569. package/src/components/AttachmentList/AttachmentList.scss +25 -0
  570. package/src/components/AttachmentList/AttachmentList.stories.tsx +243 -0
  571. package/src/components/AttachmentList/AttachmentList.tsx +67 -0
  572. package/src/components/AttachmentList/helpers/getIconByAttachmentName.ts +36 -0
  573. package/src/components/AttachmentList/helpers/objectLinkValidator.ts +40 -0
  574. package/src/components/AttachmentList/helpers/stringRequiredValidator.ts +24 -0
  575. package/src/components/AttachmentList/hooks/useKeyDownFormControl.ts +22 -0
  576. package/src/components/AttachmentList/hooks/useLabelRef.ts +25 -0
  577. package/src/components/AttachmentList/i18n/dicts.ts +4 -0
  578. package/src/components/AttachmentList/i18n/en.json +10 -0
  579. package/src/components/AttachmentList/i18n/index.ts +5 -0
  580. package/src/components/AttachmentList/i18n/ru.json +10 -0
  581. package/src/components/AttachmentList/index.ts +4 -0
  582. package/src/components/AttachmentList/internal/AttachmentItem/AttachmentItem.scss +23 -0
  583. package/src/components/AttachmentList/internal/AttachmentItem/AttachmentItem.tsx +75 -0
  584. package/src/components/AttachmentList/internal/AttachmentItem/index.ts +2 -0
  585. package/src/components/AttachmentList/internal/EditAttachmentItem/EditAttachmentItem.tsx +21 -0
  586. package/src/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.scss +21 -0
  587. package/src/components/AttachmentList/internal/EditAttachmentItem/EditLinkItem.tsx +194 -0
  588. package/src/components/AttachmentList/internal/EditAttachmentItem/FileEdit.tsx +92 -0
  589. package/src/components/AttachmentList/internal/EditAttachmentItem/index.ts +4 -0
  590. package/src/components/AttachmentListPlaceholder/AttachmentListPlaceholder.scss +5 -0
  591. package/src/components/AttachmentListPlaceholder/AttachmentListPlaceholder.stories.tsx +30 -0
  592. package/src/components/AttachmentListPlaceholder/AttachmentListPlaceholder.tsx +72 -0
  593. package/src/components/AttachmentListPlaceholder/assets/empty-attachments.svg +14 -0
  594. package/src/components/AttachmentListPlaceholder/i18n/dicts.ts +4 -0
  595. package/src/components/AttachmentListPlaceholder/i18n/en.json +7 -0
  596. package/src/components/AttachmentListPlaceholder/i18n/index.ts +5 -0
  597. package/src/components/AttachmentListPlaceholder/i18n/ru.json +7 -0
  598. package/src/components/AttachmentListPlaceholder/index.ts +2 -0
  599. package/src/components/DataTable/DataTable.scss +18 -26
  600. package/src/components/DataTable/DataTable.tsx +23 -4
  601. package/src/components/ErrorTree/ErrorTree.stories.tsx +94 -0
  602. package/src/components/ErrorTree/ErrorTree.tsx +30 -0
  603. package/src/components/ErrorTree/helpers/formatAttributes.ts +9 -0
  604. package/src/components/ErrorTree/helpers/getIntermediateChain.ts +21 -0
  605. package/src/components/ErrorTree/i18n/dicts.ts +4 -0
  606. package/src/components/ErrorTree/i18n/en.json +11 -0
  607. package/src/components/ErrorTree/i18n/index.ts +5 -0
  608. package/src/components/ErrorTree/i18n/ru.json +13 -0
  609. package/src/components/ErrorTree/index.ts +1 -0
  610. package/src/components/ErrorTree/internal/ErrorTreeChildren.scss +5 -0
  611. package/src/components/ErrorTree/internal/ErrorTreeChildren.tsx +25 -0
  612. package/src/components/ErrorTree/internal/ErrorTreeNode.scss +95 -0
  613. package/src/components/ErrorTree/internal/ErrorTreeNode.tsx +178 -0
  614. package/src/components/ErrorTree/internal/IntermediateMessages.scss +13 -0
  615. package/src/components/ErrorTree/internal/IntermediateMessages.tsx +127 -0
  616. package/src/components/Icons/LogoCPlusPlus.tsx +34 -0
  617. package/src/components/Icons/index.ts +1 -0
  618. package/src/components/QueryResultsTable/QueryResultsTable.scss +65 -0
  619. package/src/components/QueryResultsTable/QueryResultsTable.tsx +112 -0
  620. package/src/components/QueryResultsTable/helpers/formatQueryResultType.ts +76 -0
  621. package/src/components/QueryResultsTable/helpers/formatQueryResultValue.ts +38 -0
  622. package/src/components/QueryResultsTable/i18n/dicts.ts +4 -0
  623. package/src/components/QueryResultsTable/i18n/en.json +5 -0
  624. package/src/components/QueryResultsTable/i18n/index.ts +4 -0
  625. package/src/components/QueryResultsTable/i18n/ru.json +5 -0
  626. package/src/components/QueryResultsTable/index.ts +3 -0
  627. package/src/components/QueryResultsTable/internal/QueryResultCell.tsx +63 -0
  628. package/src/components/index.ts +5 -0
  629. package/src/helpers/createUuid.ts +3 -0
  630. package/src/helpers/isObjectEqual.ts +15 -0
  631. package/src/helpers/useDebouncedValue.ts +14 -0
  632. package/src/index.ts +3 -0
  633. package/src/modules/Attachments/Attachments.scss +10 -0
  634. package/src/modules/Attachments/Attachments.stories.tsx +112 -0
  635. package/src/modules/Attachments/Attachments.tsx +336 -0
  636. package/src/modules/Attachments/i18n/dicts.ts +4 -0
  637. package/src/modules/Attachments/i18n/en.json +5 -0
  638. package/src/modules/Attachments/i18n/index.ts +5 -0
  639. package/src/modules/Attachments/i18n/ru.json +5 -0
  640. package/src/modules/Attachments/index.ts +2 -0
  641. package/src/modules/NavigationPreview/NavigationPreview.scss +25 -17
  642. package/src/modules/NavigationPreview/NavigationPreview.tsx +62 -17
  643. package/src/modules/NavigationPreview/story/NavigationPreview.stories.tsx +26 -1
  644. package/src/modules/NavigationPreview/story/mockData.ts +10 -5
  645. package/src/modules/QueryStatistics/QueryStatistics.scss +3 -0
  646. package/src/modules/QueryStatistics/QueryStatistics.tsx +125 -0
  647. package/src/modules/QueryStatistics/helpers.ts +96 -0
  648. package/src/modules/QueryStatistics/i18n/dicts.ts +4 -0
  649. package/src/modules/QueryStatistics/i18n/en.json +16 -0
  650. package/src/modules/QueryStatistics/i18n/index.ts +4 -0
  651. package/src/modules/QueryStatistics/i18n/ru.json +16 -0
  652. package/src/modules/QueryStatistics/index.ts +13 -0
  653. package/src/modules/QueryStatistics/internal/MetricCell.scss +12 -0
  654. package/src/modules/QueryStatistics/internal/MetricCell.tsx +99 -0
  655. package/src/modules/QueryStatistics/internal/QueryStatisticsTable.scss +8 -0
  656. package/src/modules/QueryStatistics/internal/QueryStatisticsTable.tsx +135 -0
  657. package/src/modules/QueryStatistics/internal/QueryStatisticsToolbar.scss +1 -0
  658. package/src/modules/QueryStatistics/internal/QueryStatisticsToolbar.tsx +61 -0
  659. package/src/modules/QueryStatistics/story/QueryStatistics.stories.tsx +71 -0
  660. package/src/modules/index.ts +14 -0
  661. package/src/types/declarations.d.ts +10 -0
  662. package/src/types/errorTree.ts +30 -0
  663. package/src/types/navigation.ts +11 -1
  664. package/src/types/queryResults.ts +48 -0
  665. package/src/types/queryStatistics.ts +67 -0
  666. package/src/widgets/QueriesNavigation/QueriesNavigation.stories.tsx +42 -33
  667. package/src/widgets/QueryResults/QueryResults.scss +25 -0
  668. package/src/widgets/QueryResults/QueryResults.stories.tsx +155 -0
  669. package/src/widgets/QueryResults/QueryResults.tsx +121 -0
  670. package/src/widgets/QueryResults/i18n/dicts.ts +4 -0
  671. package/src/widgets/QueryResults/i18n/en.json +10 -0
  672. package/src/widgets/QueryResults/i18n/index.ts +4 -0
  673. package/src/widgets/QueryResults/i18n/ru.json +12 -0
  674. package/src/widgets/QueryResults/index.ts +2 -0
  675. package/src/widgets/QueryResults/internal/QueryResultsSchema.tsx +41 -0
  676. package/src/widgets/index.ts +2 -0
@@ -0,0 +1,125 @@
1
+ import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
2
+ import cn from 'bem-cn-lite';
3
+
4
+ import {useDebouncedValue} from '../../helpers/useDebouncedValue';
5
+ import type {QueryStatisticsColumn, QueryStatisticsProps} from '../../types/queryStatistics';
6
+ import {
7
+ collectQueryStatisticsGroupIds,
8
+ filterQueryStatistics,
9
+ flattenQueryStatistics,
10
+ } from './helpers';
11
+ import {QueryStatisticsTable} from './internal/QueryStatisticsTable';
12
+ import {QueryStatisticsToolbar} from './internal/QueryStatisticsToolbar';
13
+
14
+ import './QueryStatistics.scss';
15
+
16
+ const block = cn('qp-query-statistics');
17
+ const DEFAULT_VISIBLE_COLUMNS: QueryStatisticsColumn[] = ['min', 'max', 'avg', 'sum', 'count'];
18
+ const DEFAULT_SEARCH_DEBOUNCE_MS = 500;
19
+
20
+ function setsEqual(left: Set<string>, right: Set<string>) {
21
+ return left.size === right.size && Array.from(left).every((value) => right.has(value));
22
+ }
23
+
24
+ export function QueryStatistics({
25
+ data,
26
+ visibleColumns = DEFAULT_VISIBLE_COLUMNS,
27
+ columnConfig,
28
+ extraColumns,
29
+ className,
30
+ virtual = false,
31
+ fixedHeader = false,
32
+ formatValue,
33
+ search: controlledSearch,
34
+ defaultSearch = '',
35
+ onSearchUpdate,
36
+ expandedIds: controlledExpandedIds,
37
+ defaultExpandedIds,
38
+ onExpandedIdsChange,
39
+ searchDebounceMs = DEFAULT_SEARCH_DEBOUNCE_MS,
40
+ }: QueryStatisticsProps) {
41
+ const groupIds = useMemo(() => collectQueryStatisticsGroupIds(data), [data]);
42
+ const knownGroupIdsRef = useRef(new Set(groupIds));
43
+ const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = useState(
44
+ () => new Set(defaultExpandedIds ?? groupIds),
45
+ );
46
+ const [uncontrolledSearch, setUncontrolledSearch] = useState(defaultSearch);
47
+ const search = controlledSearch ?? uncontrolledSearch;
48
+ const expandedIds = useMemo(
49
+ () => new Set(controlledExpandedIds ?? uncontrolledExpandedIds),
50
+ [controlledExpandedIds, uncontrolledExpandedIds],
51
+ );
52
+ const debouncedSearch = useDebouncedValue(search, searchDebounceMs);
53
+
54
+ const updateSearch = useCallback(
55
+ (value: string) => {
56
+ if (controlledSearch === undefined) setUncontrolledSearch(value);
57
+ onSearchUpdate?.(value);
58
+ },
59
+ [controlledSearch, onSearchUpdate],
60
+ );
61
+ const updateExpandedIds = useCallback(
62
+ (next: Set<string>) => {
63
+ if (controlledExpandedIds === undefined) setUncontrolledExpandedIds(next);
64
+ onExpandedIdsChange?.(Array.from(next));
65
+ },
66
+ [controlledExpandedIds, onExpandedIdsChange],
67
+ );
68
+
69
+ useEffect(() => {
70
+ const currentGroupIds = new Set(groupIds);
71
+ const previousGroupIds = knownGroupIdsRef.current;
72
+ const next = new Set(Array.from(expandedIds).filter((id) => currentGroupIds.has(id)));
73
+ groupIds.forEach((id) => {
74
+ if (!previousGroupIds.has(id)) next.add(id);
75
+ });
76
+ if (!setsEqual(expandedIds, next)) updateExpandedIds(next);
77
+ knownGroupIdsRef.current = currentGroupIds;
78
+ }, [expandedIds, groupIds, updateExpandedIds]);
79
+
80
+ const filtered = useMemo(
81
+ () => filterQueryStatistics(data, debouncedSearch),
82
+ [data, debouncedSearch],
83
+ );
84
+ const effectiveExpandedIds = useMemo(
85
+ () => new Set([...expandedIds, ...filtered.forcedExpandedIds]),
86
+ [expandedIds, filtered.forcedExpandedIds],
87
+ );
88
+ const rows = useMemo(
89
+ () => flattenQueryStatistics(filtered.data, effectiveExpandedIds),
90
+ [effectiveExpandedIds, filtered.data],
91
+ );
92
+ const toggleGroup = useCallback(
93
+ (id: string) => {
94
+ const next = new Set(expandedIds);
95
+ if (next.has(id)) next.delete(id);
96
+ else next.add(id);
97
+ updateExpandedIds(next);
98
+ },
99
+ [expandedIds, updateExpandedIds],
100
+ );
101
+
102
+ return (
103
+ <div className={block(null, className)}>
104
+ <QueryStatisticsToolbar
105
+ search={search}
106
+ hasGroups={Boolean(groupIds.length)}
107
+ onSearchUpdate={updateSearch}
108
+ onExpandAll={() => updateExpandedIds(new Set(groupIds))}
109
+ onCollapseAll={() => updateExpandedIds(new Set())}
110
+ />
111
+ <QueryStatisticsTable
112
+ rows={rows}
113
+ visibleColumns={visibleColumns}
114
+ columnConfig={columnConfig}
115
+ extraColumns={extraColumns}
116
+ expandedIds={effectiveExpandedIds}
117
+ fixedHeader={fixedHeader}
118
+ virtual={virtual}
119
+ formatValue={formatValue}
120
+ isSearching={Boolean(search)}
121
+ onToggleGroup={toggleGroup}
122
+ />
123
+ </div>
124
+ );
125
+ }
@@ -0,0 +1,96 @@
1
+ import type {
2
+ QueryStatisticsGroup,
3
+ QueryStatisticsItem,
4
+ QueryStatisticsMetric,
5
+ } from '../../types/queryStatistics';
6
+
7
+ export type QueryStatisticsRow = {item: QueryStatisticsItem; level: number};
8
+
9
+ export type FilterQueryStatisticsResult = {
10
+ data: QueryStatisticsItem[];
11
+ forcedExpandedIds: Set<string>;
12
+ };
13
+
14
+ export function isQueryStatisticsGroup(item: QueryStatisticsItem): item is QueryStatisticsGroup {
15
+ return Array.isArray(item.children);
16
+ }
17
+
18
+ export function isQueryStatisticsMetric(item: QueryStatisticsItem): item is QueryStatisticsMetric {
19
+ return !isQueryStatisticsGroup(item);
20
+ }
21
+
22
+ export function getQueryStatisticsValue(
23
+ item: QueryStatisticsMetric,
24
+ column: keyof QueryStatisticsMetric['values'],
25
+ ) {
26
+ if (column !== 'avg' || item.values.avg !== undefined) {
27
+ return item.values[column];
28
+ }
29
+
30
+ const {count, sum} = item.values;
31
+ return count === undefined || count === 0 || sum === undefined ? undefined : sum / count;
32
+ }
33
+
34
+ export function collectQueryStatisticsGroupIds(data: QueryStatisticsItem[]): string[] {
35
+ return data.flatMap((item) =>
36
+ isQueryStatisticsGroup(item) && item.children.length > 0
37
+ ? [item.id, ...collectQueryStatisticsGroupIds(item.children)]
38
+ : [],
39
+ );
40
+ }
41
+
42
+ function addSubtreeGroupIds(item: QueryStatisticsGroup, target: Set<string>) {
43
+ if (item.children.length > 0) {
44
+ target.add(item.id);
45
+ }
46
+ item.children.forEach((child) => {
47
+ if (isQueryStatisticsGroup(child)) {
48
+ addSubtreeGroupIds(child, target);
49
+ }
50
+ });
51
+ }
52
+
53
+ function matchesSearch(item: QueryStatisticsItem, search: string) {
54
+ return [item.name, item.description, item.unit]
55
+ .filter(Boolean)
56
+ .some((value) => value?.toLocaleLowerCase().includes(search));
57
+ }
58
+
59
+ export function filterQueryStatistics(
60
+ data: QueryStatisticsItem[],
61
+ search: string,
62
+ ): FilterQueryStatisticsResult {
63
+ const normalizedSearch = search.trim().toLocaleLowerCase();
64
+ if (!normalizedSearch) return {data, forcedExpandedIds: new Set()};
65
+
66
+ const forcedExpandedIds = new Set<string>();
67
+ const filterItems = (items: QueryStatisticsItem[]): QueryStatisticsItem[] =>
68
+ items.flatMap<QueryStatisticsItem>((item) => {
69
+ if (!isQueryStatisticsGroup(item)) {
70
+ return matchesSearch(item, normalizedSearch) ? [item] : [];
71
+ }
72
+ if (matchesSearch(item, normalizedSearch)) {
73
+ addSubtreeGroupIds(item, forcedExpandedIds);
74
+ return [item];
75
+ }
76
+ const children = filterItems(item.children);
77
+ if (!children.length) return [];
78
+ if (item.children.length > 0) forcedExpandedIds.add(item.id);
79
+ return [{...item, children}];
80
+ });
81
+
82
+ return {data: filterItems(data), forcedExpandedIds};
83
+ }
84
+
85
+ export function flattenQueryStatistics(
86
+ data: QueryStatisticsItem[],
87
+ expandedIds: Set<string>,
88
+ level = 0,
89
+ ): QueryStatisticsRow[] {
90
+ return data.flatMap((item) => [
91
+ {item, level},
92
+ ...(isQueryStatisticsGroup(item) && expandedIds.has(item.id)
93
+ ? flattenQueryStatistics(item.children, expandedIds, level + 1)
94
+ : []),
95
+ ]);
96
+ }
@@ -0,0 +1,4 @@
1
+ import en from './en.json';
2
+ import ru from './ru.json';
3
+
4
+ export default {en, ru};
@@ -0,0 +1,16 @@
1
+ {
2
+ "action_collapse-all": "Collapse all",
3
+ "action_collapse-group": "Collapse group",
4
+ "action_expand-all": "Expand all",
5
+ "action_expand-group": "Expand group",
6
+ "field_avg": "Avg",
7
+ "field_count": "Count",
8
+ "field_description": "Description",
9
+ "field_last": "Last",
10
+ "field_max": "Max",
11
+ "field_metric": "Metric",
12
+ "field_min": "Min",
13
+ "field_search": "Search",
14
+ "field_sum": "Sum",
15
+ "field_unit": "Unit"
16
+ }
@@ -0,0 +1,4 @@
1
+ import {addI18Keysets} from '../../../i18n';
2
+ import dicts from './dicts';
3
+
4
+ export default addI18Keysets('qp:query-statistics', dicts);
@@ -0,0 +1,16 @@
1
+ {
2
+ "action_collapse-all": "Свернуть все",
3
+ "action_collapse-group": "Свернуть группу",
4
+ "action_expand-all": "Развернуть все",
5
+ "action_expand-group": "Развернуть группу",
6
+ "field_avg": "Среднее",
7
+ "field_count": "Количество",
8
+ "field_description": "Описание",
9
+ "field_last": "Последнее",
10
+ "field_max": "Максимум",
11
+ "field_metric": "Метрика",
12
+ "field_min": "Минимум",
13
+ "field_search": "Поиск",
14
+ "field_sum": "Сумма",
15
+ "field_unit": "Единица измерения"
16
+ }
@@ -0,0 +1,13 @@
1
+ export {QueryStatistics} from './QueryStatistics';
2
+ export type {
3
+ QueryStatisticsColumn,
4
+ QueryStatisticsColumnConfig,
5
+ QueryStatisticsExtraColumn,
6
+ QueryStatisticsExtraColumnContext,
7
+ QueryStatisticsFormatValueContext,
8
+ QueryStatisticsGroup,
9
+ QueryStatisticsItem,
10
+ QueryStatisticsMetric,
11
+ QueryStatisticsProps,
12
+ QueryStatisticsValues,
13
+ } from '../../types/queryStatistics';
@@ -0,0 +1,12 @@
1
+ .qp-query-statistics-metric-cell {
2
+ &__indent { display: inline-flex; flex-shrink: 0; }
3
+ &__indent-step { width: var(--g-spacing-10); flex-shrink: 0; }
4
+ &__row-button,
5
+ &__row-icon,
6
+ &__info-icon { flex-shrink: 0; }
7
+ &__name { min-width: 0; white-space: nowrap; }
8
+ &__info-icon { margin-inline-start: var(--g-spacing-1); color: var(--g-color-text-secondary); vertical-align: text-bottom; }
9
+ &__tooltip { display: grid; gap: var(--g-spacing-2); max-width: 24rem; }
10
+ &__tooltip-row { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--g-spacing-2); }
11
+ &__tooltip-label { color: var(--g-color-text-secondary); }
12
+ }
@@ -0,0 +1,99 @@
1
+ import React from 'react';
2
+ import {
3
+ ChartLine,
4
+ ChevronDown,
5
+ ChevronRight,
6
+ CircleQuestion,
7
+ FolderArrowRight,
8
+ } from '@gravity-ui/icons';
9
+ import {Button, Flex, Icon, Tooltip} from '@gravity-ui/uikit';
10
+ import cn from 'bem-cn-lite';
11
+
12
+ import type {QueryStatisticsItem} from '../../../types/queryStatistics';
13
+ import {type QueryStatisticsRow, isQueryStatisticsGroup} from '../helpers';
14
+ import i18n from '../i18n';
15
+
16
+ import './MetricCell.scss';
17
+
18
+ const block = cn('qp-query-statistics-metric-cell');
19
+
20
+ function MetricInfo({item}: {item: QueryStatisticsItem}) {
21
+ const hasInfo = Boolean(item.description || item.unit);
22
+ const content = (
23
+ <span className={block('name')} tabIndex={hasInfo ? 0 : undefined}>
24
+ {item.name}
25
+ {hasInfo && <Icon data={CircleQuestion} size={14} className={block('info-icon')} />}
26
+ </span>
27
+ );
28
+
29
+ if (!hasInfo) return content;
30
+
31
+ return <Tooltip content={<MetricTooltip item={item} />}>{content}</Tooltip>;
32
+ }
33
+
34
+ function MetricTooltip({item}: {item: QueryStatisticsItem}) {
35
+ return (
36
+ <span className={block('tooltip')}>
37
+ {item.description && (
38
+ <span className={block('tooltip-row')}>
39
+ <span className={block('tooltip-label')}>{i18n('field_description')}</span>
40
+ <span>{item.description}</span>
41
+ </span>
42
+ )}
43
+ {item.unit && (
44
+ <span className={block('tooltip-row')}>
45
+ <span className={block('tooltip-label')}>{i18n('field_unit')}</span>
46
+ <span>{item.unit}</span>
47
+ </span>
48
+ )}
49
+ </span>
50
+ );
51
+ }
52
+
53
+ function Indent({level}: {level: number}) {
54
+ if (!level) return null;
55
+ return (
56
+ <span className={block('indent')} aria-hidden="true">
57
+ {Array.from({length: level}, (_, index) => (
58
+ <span className={block('indent-step')} key={index} />
59
+ ))}
60
+ </span>
61
+ );
62
+ }
63
+
64
+ export type MetricCellProps = {
65
+ row: QueryStatisticsRow;
66
+ expanded: boolean;
67
+ onToggle: (id: string) => void;
68
+ };
69
+
70
+ export function MetricCell({row, expanded, onToggle}: MetricCellProps) {
71
+ const {item, level} = row;
72
+ const isGroup = isQueryStatisticsGroup(item);
73
+
74
+ return (
75
+ <Flex alignItems="center" gap={2} className={block()}>
76
+ <Indent level={level} />
77
+ {isGroup ? (
78
+ <React.Fragment>
79
+ <Button
80
+ view="flat"
81
+ size="xs"
82
+ aria-label={
83
+ expanded ? i18n('action_collapse-group') : i18n('action_expand-group')
84
+ }
85
+ aria-expanded={expanded}
86
+ onClick={() => onToggle(item.id)}
87
+ className={block('row-button')}
88
+ >
89
+ <Icon data={expanded ? ChevronDown : ChevronRight} size={16} />
90
+ </Button>
91
+ <Icon data={FolderArrowRight} size={16} className={block('row-icon')} />
92
+ </React.Fragment>
93
+ ) : (
94
+ <Icon data={ChartLine} size={16} className={block('row-icon')} />
95
+ )}
96
+ <MetricInfo item={item} />
97
+ </Flex>
98
+ );
99
+ }
@@ -0,0 +1,8 @@
1
+ .qp-query-statistics-table { max-width: 100%; overflow-x: auto;
2
+ &_fixed { overflow: visible; }
3
+ .qp-data-table { min-width: 55rem; }
4
+ &__metric-column,
5
+ &__value-column { border: 0; border-block-end: 1px solid var(--g-color-line-generic); }
6
+ &__metric-column { min-width: 19rem; }
7
+ &__value-column { min-width: 8rem; }
8
+ }
@@ -0,0 +1,135 @@
1
+ import React, {useMemo} from 'react';
2
+ import BaseDataTable, {type Column} from '@gravity-ui/react-data-table';
3
+ import {DataTable} from '../../../components';
4
+ import type {
5
+ QueryStatisticsColumn,
6
+ QueryStatisticsExtraColumn,
7
+ QueryStatisticsFormatValueContext,
8
+ } from '../../../types/queryStatistics';
9
+ import {
10
+ type QueryStatisticsRow,
11
+ getQueryStatisticsValue,
12
+ isQueryStatisticsGroup,
13
+ isQueryStatisticsMetric,
14
+ } from '../helpers';
15
+ import i18n from '../i18n';
16
+ import {MetricCell} from './MetricCell';
17
+
18
+ import './QueryStatisticsTable.scss';
19
+
20
+ const NO_VALUE = '—';
21
+ const block = 'qp-query-statistics-table';
22
+ const COLUMN_TITLES: Record<QueryStatisticsColumn, () => string> = {
23
+ min: () => i18n('field_min'),
24
+ max: () => i18n('field_max'),
25
+ avg: () => i18n('field_avg'),
26
+ sum: () => i18n('field_sum'),
27
+ count: () => i18n('field_count'),
28
+ last: () => i18n('field_last'),
29
+ };
30
+
31
+ export type QueryStatisticsTableProps = {
32
+ rows: QueryStatisticsRow[];
33
+ visibleColumns: QueryStatisticsColumn[];
34
+ columnConfig?: Partial<
35
+ Record<QueryStatisticsColumn, {title?: React.ReactNode; width?: string}>
36
+ >;
37
+ extraColumns?: QueryStatisticsExtraColumn[];
38
+ expandedIds: Set<string>;
39
+ fixedHeader: boolean;
40
+ virtual: boolean;
41
+ formatValue?: (
42
+ value: number | undefined,
43
+ context: QueryStatisticsFormatValueContext,
44
+ ) => React.ReactNode;
45
+ isSearching: boolean;
46
+ onToggleGroup: (id: string) => void;
47
+ };
48
+
49
+ export function QueryStatisticsTable({
50
+ rows,
51
+ visibleColumns,
52
+ columnConfig,
53
+ extraColumns,
54
+ expandedIds,
55
+ fixedHeader,
56
+ virtual,
57
+ formatValue,
58
+ isSearching,
59
+ onToggleGroup,
60
+ }: QueryStatisticsTableProps) {
61
+ const numberFormatter = useMemo(
62
+ () => new Intl.NumberFormat(undefined, {maximumFractionDigits: 6}),
63
+ [],
64
+ );
65
+ const columns = useMemo<Array<Column<QueryStatisticsRow>>>(() => {
66
+ const metricColumn: Column<QueryStatisticsRow> = {
67
+ name: 'metric',
68
+ header: i18n('field_metric'),
69
+ className: `${block}__metric-column`,
70
+ width: '40%',
71
+ sortable: false,
72
+ render: ({row}) => (
73
+ <MetricCell
74
+ row={row}
75
+ expanded={isQueryStatisticsGroup(row.item) && expandedIds.has(row.item.id)}
76
+ onToggle={onToggleGroup}
77
+ />
78
+ ),
79
+ };
80
+ const valueColumns = visibleColumns.map<Column<QueryStatisticsRow>>((column) => ({
81
+ name: column,
82
+ header: columnConfig?.[column]?.title ?? COLUMN_TITLES[column](),
83
+ className: `${block}__value-column`,
84
+ width: columnConfig?.[column]?.width ?? '12%',
85
+ align: BaseDataTable.RIGHT,
86
+ sortable: false,
87
+ render: ({row}) => {
88
+ if (!isQueryStatisticsMetric(row.item)) return NO_VALUE;
89
+ const value = getQueryStatisticsValue(row.item, column);
90
+ if (formatValue) return formatValue(value, {column, item: row.item});
91
+ return value === undefined || !Number.isFinite(value)
92
+ ? NO_VALUE
93
+ : numberFormatter.format(value);
94
+ },
95
+ }));
96
+ const customColumns = (extraColumns ?? []).map<Column<QueryStatisticsRow>>((column) => ({
97
+ name: column.id,
98
+ header: column.title,
99
+ width: column.width ?? '12%',
100
+ className: `${block}__value-column`,
101
+ sortable: false,
102
+ render: ({row}) => column.render({item: row.item, level: row.level}),
103
+ }));
104
+ return [metricColumn, ...valueColumns, ...customColumns];
105
+ }, [
106
+ columnConfig,
107
+ expandedIds,
108
+ extraColumns,
109
+ formatValue,
110
+ numberFormatter,
111
+ onToggleGroup,
112
+ visibleColumns,
113
+ ]);
114
+
115
+ return (
116
+ <div className={block + (fixedHeader ? ` ${block}_fixed` : '')}>
117
+ <DataTable<QueryStatisticsRow>
118
+ columns={columns}
119
+ data={rows}
120
+ loaded
121
+ emptyVariant={isSearching ? 'nothing-found' : 'no-data'}
122
+ rowKey={(row) => row.item.id}
123
+ settings={{
124
+ displayIndices: false,
125
+ sortable: false,
126
+ stripedRows: false,
127
+ dynamicRender: virtual,
128
+ dynamicRenderType: 'uniform',
129
+ stickyHead: fixedHeader ? BaseDataTable.MOVING : undefined,
130
+ syncHeadOnResize: fixedHeader,
131
+ }}
132
+ />
133
+ </div>
134
+ );
135
+ }
@@ -0,0 +1 @@
1
+ .qp-query-statistics-toolbar { margin-block-end: var(--g-spacing-4); max-width: 34rem; }
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import {ChevronsDown, ChevronsUp} from '@gravity-ui/icons';
3
+ import {Button, Icon} from '@gravity-ui/uikit';
4
+ import cn from 'bem-cn-lite';
5
+
6
+ import {SearchWithButtons} from '../../../components';
7
+ import i18n from '../i18n';
8
+
9
+ import './QueryStatisticsToolbar.scss';
10
+
11
+ const block = cn('qp-query-statistics-toolbar');
12
+
13
+ export type QueryStatisticsToolbarProps = {
14
+ search: string;
15
+ hasGroups: boolean;
16
+ onSearchUpdate: (value: string) => void;
17
+ onExpandAll: () => void;
18
+ onCollapseAll: () => void;
19
+ };
20
+
21
+ export function QueryStatisticsToolbar({
22
+ search,
23
+ hasGroups,
24
+ onSearchUpdate,
25
+ onExpandAll,
26
+ onCollapseAll,
27
+ }: QueryStatisticsToolbarProps) {
28
+ const buttons = [
29
+ <Button
30
+ key="expand"
31
+ size="m"
32
+ aria-label={i18n('action_expand-all')}
33
+ title={i18n('action_expand-all')}
34
+ disabled={!hasGroups}
35
+ onClick={onExpandAll}
36
+ >
37
+ <Icon data={ChevronsDown} size={16} />
38
+ </Button>,
39
+ <Button
40
+ key="collapse"
41
+ size="m"
42
+ aria-label={i18n('action_collapse-all')}
43
+ title={i18n('action_collapse-all')}
44
+ disabled={!hasGroups}
45
+ onClick={onCollapseAll}
46
+ >
47
+ <Icon data={ChevronsUp} size={16} />
48
+ </Button>,
49
+ ];
50
+
51
+ return (
52
+ <SearchWithButtons
53
+ value={search}
54
+ placeholder={i18n('field_search')}
55
+ hasClear
56
+ onUpdate={onSearchUpdate}
57
+ endButtons={buttons}
58
+ className={block()}
59
+ />
60
+ );
61
+ }
@@ -0,0 +1,71 @@
1
+ import React from 'react';
2
+ import type {Meta, StoryObj} from '@storybook/react';
3
+
4
+ import type {QueryStatisticsItem} from '../../../types/queryStatistics';
5
+ import {QueryStatistics} from '../QueryStatistics';
6
+
7
+ const data: QueryStatisticsItem[] = [
8
+ {
9
+ id: 'input',
10
+ name: 'Input',
11
+ children: [
12
+ {
13
+ id: 'input.rows',
14
+ name: 'Rows',
15
+ description: 'Number of rows read from the input',
16
+ values: {min: 0, max: 1600, sum: 4200, count: 4, last: 1400},
17
+ },
18
+ {
19
+ id: 'input.weight',
20
+ name: 'Data weight',
21
+ unit: 'bytes',
22
+ values: {min: 1024, max: 1048576, avg: 120000.25, sum: 2097152, count: 4},
23
+ },
24
+ ],
25
+ },
26
+ ];
27
+
28
+ const largeData: QueryStatisticsItem[] = Array.from({length: 12}, (_group, groupIndex) => ({
29
+ id: `group-${groupIndex}`,
30
+ name: `Group ${groupIndex + 1} with a deliberately long name for horizontal scrolling`,
31
+ children: Array.from({length: 25}, (_metric, metricIndex) => ({
32
+ id: `group-${groupIndex}.metric-${metricIndex}`,
33
+ name: `Metric ${metricIndex + 1}`,
34
+ values: {
35
+ min: metricIndex,
36
+ max: metricIndex * 10,
37
+ sum: metricIndex * 100,
38
+ count: metricIndex + 1,
39
+ last: metricIndex * 5,
40
+ },
41
+ })),
42
+ }));
43
+
44
+ const meta: Meta<typeof QueryStatistics> = {
45
+ title: 'Modules/QueryStatistics',
46
+ component: QueryStatistics,
47
+ tags: ['autodocs'],
48
+ args: {data},
49
+ };
50
+
51
+ export default meta;
52
+ type Story = StoryObj<typeof QueryStatistics>;
53
+
54
+ export const Default: Story = {};
55
+
56
+ export const ConfiguredColumns: Story = {
57
+ args: {
58
+ visibleColumns: ['last', 'avg', 'count'],
59
+ columnConfig: {last: {title: 'Latest value', width: '20%'}},
60
+ extraColumns: [{id: 'unit', title: 'Unit', render: ({item}) => item.unit ?? '—'}],
61
+ },
62
+ };
63
+
64
+ export const VirtualAndFixed: Story = {
65
+ args: {data: largeData, virtual: true, fixedHeader: true},
66
+ render: (args) => (
67
+ <div style={{height: 360, maxWidth: 1100, overflow: 'auto'}}>
68
+ <QueryStatistics {...args} />
69
+ </div>
70
+ ),
71
+ };