@jetbrains/ring-ui 5.0.0-beta.9 → 5.0.1

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 (409) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/components/alert/alert.css +1 -1
  3. package/components/alert-service/alert-service.js +1 -1
  4. package/components/analytics/analytics__ga-plugin.d.ts +1 -1
  5. package/components/analytics/analytics__ga-plugin.js +12 -3
  6. package/components/auth/auth__core.js +5 -1
  7. package/components/auth-dialog-service/auth-dialog-service.js +1 -1
  8. package/components/avatar/avatar.d.ts +1 -0
  9. package/components/avatar/fallback-avatar.js +2 -2
  10. package/components/button/button.css +2 -2
  11. package/components/button/button.d.ts +2 -1
  12. package/components/button-group/button-group.css +4 -2
  13. package/components/checkbox/checkbox.css +8 -12
  14. package/components/checkbox/checkbox.js +1 -1
  15. package/components/checkbox-ng/checkbox-ng.js +1 -1
  16. package/components/confirm-service/confirm-service.js +1 -1
  17. package/components/data-list/data-list.d.ts +4 -8
  18. package/components/date-picker/date-picker.css +1 -0
  19. package/components/date-picker/date-popup.js +0 -1
  20. package/components/dialog/dialog.d.ts +1 -1
  21. package/components/dropdown/dropdown.d.ts +2 -2
  22. package/components/global/angular-component-factory.js +1 -1
  23. package/components/global/promise-with-timeout.d.ts +2 -1
  24. package/components/global/promise-with-timeout.js +5 -2
  25. package/components/global/react-render-adapter.d.ts +29 -0
  26. package/components/global/react-render-adapter.js +36 -0
  27. package/components/global/rerender-hoc.d.ts +5 -9
  28. package/components/global/rerender-hoc.js +4 -2
  29. package/components/global/theme.js +11 -4
  30. package/components/global/variables.css +0 -1
  31. package/components/global/variables.d.ts +0 -1
  32. package/components/global/variables_dark.css +0 -1
  33. package/components/header/profile.d.ts +3 -3
  34. package/components/input/input.css +1 -1
  35. package/components/input/input.d.ts +3 -1
  36. package/components/input/input.js +1 -1
  37. package/components/island/adaptive-island-hoc.d.ts +4 -8
  38. package/components/island/content.d.ts +33 -2
  39. package/components/island/content.js +5 -4
  40. package/components/island/island.d.ts +4 -8
  41. package/components/link/clickableLink.d.ts +1 -1
  42. package/components/link/link.d.ts +14 -22
  43. package/components/link/link.js +2 -2
  44. package/components/list/consts.d.ts +3 -1
  45. package/components/list/list.css +1 -0
  46. package/components/list/list.d.ts +2 -0
  47. package/components/list/list.js +12 -13
  48. package/components/list/list__link.js +2 -2
  49. package/components/login-dialog/service.js +1 -1
  50. package/components/message/message.css +12 -26
  51. package/components/message/message.js +27 -14
  52. package/components/popup/popup.d.ts +7 -1
  53. package/components/popup/popup.js +4 -3
  54. package/components/popup/popup.target.d.ts +1 -1
  55. package/components/popup/position.d.ts +1 -1
  56. package/components/popup/position.js +2 -2
  57. package/components/popup-menu/popup-menu.d.ts +1 -0
  58. package/components/query-assist/query-assist.d.ts +5 -9
  59. package/components/query-assist/query-assist.js +2 -2
  60. package/components/radio/radio.d.ts +1 -1
  61. package/components/select/select.css +4 -1
  62. package/components/select/select.d.ts +12 -14
  63. package/components/select/select.js +20 -17
  64. package/components/select/select__popup.d.ts +4 -1
  65. package/components/select/select__popup.js +4 -3
  66. package/components/select-ng/select-ng.js +16 -5
  67. package/components/select-ng/select-ng__lazy.js +19 -8
  68. package/components/select-ng/select-ng__lazy.test.js +3 -1
  69. package/components/shortcuts/shortcuts-hoc.d.ts +4 -8
  70. package/components/shortcuts/shortcuts.d.ts +1 -1
  71. package/components/tab-trap/tab-trap.d.ts +1 -1
  72. package/components/table/disable-hover-hoc.d.ts +4 -8
  73. package/components/table/header.d.ts +8 -1
  74. package/components/table/row-with-focus-sensor.d.ts +4 -4
  75. package/components/table/row-with-focus-sensor.js +4 -4
  76. package/components/table/row.d.ts +1 -0
  77. package/components/table/smart-table.d.ts +1 -0
  78. package/components/table/smart-table.js +7 -3
  79. package/components/table/table.d.ts +4 -8
  80. package/components/tabs/collapsible-more.js +2 -2
  81. package/components/tabs/collapsible-tabs.d.ts +2 -2
  82. package/components/tabs/collapsible-tabs.js +1 -1
  83. package/components/tabs/custom-item.d.ts +1 -1
  84. package/components/tabs/dumb-tabs.d.ts +2 -2
  85. package/components/tabs/smart-tabs.d.ts +4 -4
  86. package/components/tabs/smart-tabs.js +9 -3
  87. package/components/tabs/tab-link.d.ts +1 -1
  88. package/components/tabs/tab.d.ts +1 -1
  89. package/components/tabs/tabs.css +10 -1
  90. package/components/tag/tag.css +1 -1
  91. package/components/tag/tag.js +1 -2
  92. package/components/tags-input/tags-input.d.ts +4 -8
  93. package/components/tags-list/tags-list.d.ts +1 -1
  94. package/components/tooltip-ng/tooltip-ng.js +13 -10
  95. package/components/user-agreement/service.d.ts +14 -62
  96. package/components/user-agreement/service.js +1 -1
  97. package/dist/_helpers/anchor.js +1 -1
  98. package/dist/_helpers/badge.js +1 -1
  99. package/dist/_helpers/button-group.js +1 -1
  100. package/dist/_helpers/button-set.js +1 -1
  101. package/dist/_helpers/button-toolbar.js +1 -1
  102. package/dist/_helpers/button__classes.js +2 -2
  103. package/dist/_helpers/card.js +1 -1
  104. package/dist/_helpers/checkbox.js +1 -1
  105. package/dist/_helpers/date-picker.js +1 -1
  106. package/dist/_helpers/dialog__body-scroll-preventer.js +3 -2
  107. package/dist/_helpers/error-message.js +1 -1
  108. package/dist/_helpers/footer.js +1 -1
  109. package/dist/_helpers/grid.js +1 -1
  110. package/dist/_helpers/group.js +1 -1
  111. package/dist/_helpers/header.js +1 -1
  112. package/dist/_helpers/icon.js +1 -1
  113. package/dist/_helpers/input.js +1 -1
  114. package/dist/_helpers/island.js +1 -1
  115. package/dist/_helpers/link.js +1 -1
  116. package/dist/_helpers/list.js +1 -1
  117. package/dist/_helpers/loader-inline.js +1 -1
  118. package/dist/_helpers/loader-screen.js +1 -1
  119. package/dist/_helpers/panel.js +1 -1
  120. package/dist/_helpers/query-assist__suggestions.js +1 -1
  121. package/dist/_helpers/radio.js +1 -1
  122. package/dist/_helpers/select__filter.js +2 -1
  123. package/dist/_helpers/services-link.js +2 -2
  124. package/dist/_helpers/sidebar.js +3 -2
  125. package/dist/_helpers/table.js +1 -1
  126. package/dist/_helpers/tabs.js +1 -1
  127. package/dist/_helpers/theme.js +12 -7
  128. package/dist/_helpers/title.js +2 -1
  129. package/dist/alert/alert.js +15 -3
  130. package/dist/alert/container.js +1 -1
  131. package/dist/alert-service/alert-service.js +14 -1
  132. package/dist/analytics/analytics.js +4 -3
  133. package/dist/analytics/analytics__custom-plugin.js +2 -1
  134. package/dist/analytics/analytics__fus-plugin.js +1 -0
  135. package/dist/analytics/analytics__ga-plugin.d.ts +1 -1
  136. package/dist/analytics/analytics__ga-plugin.js +16 -7
  137. package/dist/analytics/analytics__plugin-utils.js +4 -3
  138. package/dist/analytics-ng/analytics-ng.js +3 -2
  139. package/dist/auth/auth.js +13 -0
  140. package/dist/auth/auth__core.js +29 -12
  141. package/dist/auth/background-flow.js +2 -1
  142. package/dist/auth/down-notification.js +14 -1
  143. package/dist/auth/iframe-flow.js +3 -0
  144. package/dist/auth/landing.js +17 -4
  145. package/dist/auth/request-builder.js +1 -0
  146. package/dist/auth/response-parser.js +1 -0
  147. package/dist/auth/storage.js +13 -0
  148. package/dist/auth/token-validator.js +2 -0
  149. package/dist/auth/window-flow.js +2 -1
  150. package/dist/auth-dialog/auth-dialog.js +4 -2
  151. package/dist/auth-dialog-service/auth-dialog-service.js +4 -1
  152. package/dist/auth-ng/auth-ng.js +14 -1
  153. package/dist/autofocus-ng/autofocus-ng.js +1 -0
  154. package/dist/avatar/avatar-example-datauri.js +1 -23
  155. package/dist/avatar/avatar.d.ts +1 -0
  156. package/dist/avatar/avatar.js +5 -3
  157. package/dist/avatar/fallback-avatar.js +6 -5
  158. package/dist/avatar-editor-ng/avatar-editor-ng.js +13 -0
  159. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +1 -28
  160. package/dist/avatar-ng/avatar-ng.js +3 -0
  161. package/dist/badge/badge.js +1 -0
  162. package/dist/badge-ng/badge-ng.js +2 -0
  163. package/dist/breadcrumb-ng/breadcrumb-ng.js +4 -28
  164. package/dist/button/button.d.ts +2 -1
  165. package/dist/button/button.js +2 -0
  166. package/dist/button-group-ng/button-group-ng.js +2 -1
  167. package/dist/button-ng/button-ng.js +5 -11
  168. package/dist/button-set-ng/button-set-ng.js +1 -1
  169. package/dist/button-toolbar-ng/button-toolbar-ng.js +1 -0
  170. package/dist/caret/caret.js +2 -0
  171. package/dist/checkbox/checkbox.js +3 -1
  172. package/dist/checkbox-ng/checkbox-ng.js +4 -21
  173. package/dist/code/code.js +4 -3
  174. package/dist/confirm/confirm.js +3 -1
  175. package/dist/confirm-ng/confirm-ng.js +3 -0
  176. package/dist/confirm-service/confirm-service.js +4 -1
  177. package/dist/content-layout/content-layout.js +1 -0
  178. package/dist/content-layout/sidebar.js +1 -0
  179. package/dist/data-list/data-list.d.ts +4 -8
  180. package/dist/data-list/data-list.js +3 -1
  181. package/dist/data-list/data-list.mock.js +1 -0
  182. package/dist/data-list/item.js +3 -1
  183. package/dist/data-list/selection.js +1 -0
  184. package/dist/data-list/title.js +3 -1
  185. package/dist/data-list-ng/data-list-ng.js +4 -1
  186. package/dist/date-picker/consts.js +1 -1
  187. package/dist/date-picker/date-input.js +4 -2
  188. package/dist/date-picker/date-picker.js +10 -8
  189. package/dist/date-picker/date-popup.js +4 -3
  190. package/dist/date-picker/day.js +1 -0
  191. package/dist/date-picker/month-names.js +1 -0
  192. package/dist/date-picker/month-slider.js +1 -0
  193. package/dist/date-picker/month.js +1 -0
  194. package/dist/date-picker/months.js +1 -0
  195. package/dist/date-picker/years.js +1 -0
  196. package/dist/dialog/dialog.d.ts +1 -1
  197. package/dist/dialog/dialog.js +2 -0
  198. package/dist/dialog/dialog__body-scroll-preventer.js +1 -0
  199. package/dist/dialog-ng/dialog-ng.js +7 -4
  200. package/dist/dialog-ng/dialog-ng__template.js +1 -70
  201. package/dist/docked-panel-ng/docked-panel-ng.js +2 -1
  202. package/dist/dropdown/anchor.js +2 -0
  203. package/dist/dropdown/dropdown.d.ts +2 -2
  204. package/dist/dropdown/dropdown.js +2 -0
  205. package/dist/dropdown-menu/dropdown-menu.js +4 -2
  206. package/dist/error-bubble/error-bubble.js +3 -1
  207. package/dist/error-message/error-message.js +3 -1
  208. package/dist/error-message-ng/error-message-ng.js +3 -21
  209. package/dist/footer/footer.js +1 -0
  210. package/dist/footer-ng/footer-ng.js +3 -14
  211. package/dist/form-ng/form-ng.js +2 -4
  212. package/dist/global/angular-component-factory.js +8 -6
  213. package/dist/global/create-stateful-context.js +3 -2
  214. package/dist/global/data-tests.js +2 -0
  215. package/dist/global/dom.js +1 -0
  216. package/dist/global/focus-sensor-hoc.js +1 -0
  217. package/dist/global/fuzzy-highlight.js +1 -1
  218. package/dist/global/inject-styles.js +5 -7
  219. package/dist/global/listeners.js +1 -0
  220. package/dist/global/memoize.js +2 -0
  221. package/dist/global/normalize-indent.js +2 -0
  222. package/dist/global/promise-with-timeout.d.ts +2 -1
  223. package/dist/global/promise-with-timeout.js +6 -2
  224. package/dist/global/react-dom-renderer.js +1 -0
  225. package/dist/global/react-render-adapter.d.ts +29 -0
  226. package/dist/global/react-render-adapter.js +41 -0
  227. package/dist/global/rerender-hoc.d.ts +5 -9
  228. package/dist/global/rerender-hoc.js +7 -3
  229. package/dist/global/theme.js +15 -0
  230. package/dist/global/trivial-template-tag.js +2 -0
  231. package/dist/global/url.js +3 -1
  232. package/dist/global/variables.d.ts +0 -1
  233. package/dist/grid/col.js +2 -1
  234. package/dist/grid/grid.js +1 -0
  235. package/dist/grid/row.js +1 -1
  236. package/dist/group-ng/group-ng.js +1 -1
  237. package/dist/header/header.js +18 -14
  238. package/dist/header/logo.js +2 -0
  239. package/dist/header/profile.d.ts +3 -3
  240. package/dist/header/profile.js +3 -1
  241. package/dist/header/services-link.js +1 -0
  242. package/dist/header/services.js +2 -0
  243. package/dist/header/smart-profile.js +17 -13
  244. package/dist/header/smart-services.js +14 -11
  245. package/dist/header/tray-icon.js +2 -0
  246. package/dist/heading/heading.js +3 -3
  247. package/dist/http/http.js +4 -2
  248. package/dist/http/http.mock.js +2 -0
  249. package/dist/hub-source/hub-source.js +1 -1
  250. package/dist/hub-source/hub-source__user.js +4 -2
  251. package/dist/hub-source/hub-source__users-groups.js +3 -2
  252. package/dist/icon/icon.js +3 -3
  253. package/dist/icon/icon__svg.js +2 -0
  254. package/dist/icon/index.js +2 -0
  255. package/dist/icon-ng/icon-ng.js +7 -5
  256. package/dist/input/input.d.ts +3 -1
  257. package/dist/input/input.js +5 -3
  258. package/dist/input-ng/input-ng.js +6 -59
  259. package/dist/island/adaptive-island-hoc.d.ts +4 -8
  260. package/dist/island/adaptive-island-hoc.js +4 -3
  261. package/dist/island/content.d.ts +33 -2
  262. package/dist/island/content.js +8 -4
  263. package/dist/island/header.js +3 -2
  264. package/dist/island/island.d.ts +4 -8
  265. package/dist/island/island.js +1 -0
  266. package/dist/island-ng/island-content-ng.js +2 -16
  267. package/dist/island-ng/island-header-ng.js +2 -8
  268. package/dist/island-ng/island-ng-class-fixer.js +2 -0
  269. package/dist/island-ng/island-ng.js +2 -8
  270. package/dist/link/clickableLink.d.ts +1 -1
  271. package/dist/link/clickableLink.js +1 -0
  272. package/dist/link/link.d.ts +14 -22
  273. package/dist/link/link.js +5 -4
  274. package/dist/link-ng/link-ng.js +1 -4
  275. package/dist/list/consts.d.ts +3 -1
  276. package/dist/list/list.d.ts +2 -0
  277. package/dist/list/list.js +30 -23
  278. package/dist/list/list__custom.js +1 -0
  279. package/dist/list/list__item.js +6 -4
  280. package/dist/list/list__link.js +3 -1
  281. package/dist/list/list__users-groups-source.js +4 -2
  282. package/dist/loader/loader.js +1 -0
  283. package/dist/loader/loader__core.js +5 -4
  284. package/dist/loader-inline/loader-inline.js +1 -0
  285. package/dist/loader-inline-ng/loader-inline-ng.js +1 -1
  286. package/dist/loader-ng/loader-ng.js +1 -0
  287. package/dist/loader-screen/loader-screen.js +1 -0
  288. package/dist/loader-screen-ng/loader-screen-ng.js +2 -6
  289. package/dist/login-dialog/login-dialog.js +3 -1
  290. package/dist/login-dialog/service.js +4 -1
  291. package/dist/markdown/code.js +1 -0
  292. package/dist/markdown/link.js +1 -0
  293. package/dist/markdown/markdown.js +2 -1
  294. package/dist/message/message.js +39 -33
  295. package/dist/old-browsers-message/old-browsers-message.js +2 -1
  296. package/dist/old-browsers-message/old-browsers-message__stop.js +1 -0
  297. package/dist/old-browsers-message/white-list.js +1 -0
  298. package/dist/pager/pager.js +7 -4
  299. package/dist/pager-ng/pager-ng.js +5 -2
  300. package/dist/panel-ng/panel-ng.js +1 -0
  301. package/dist/permissions/permissions.js +1 -1
  302. package/dist/permissions-ng/permissions-ng.js +14 -1
  303. package/dist/place-under-ng/place-under-ng.js +3 -2
  304. package/dist/popup/popup.d.ts +7 -1
  305. package/dist/popup/popup.js +11 -7
  306. package/dist/popup/popup.target.d.ts +1 -1
  307. package/dist/popup/position.d.ts +1 -1
  308. package/dist/popup/position.js +3 -2
  309. package/dist/popup-menu/popup-menu.d.ts +1 -0
  310. package/dist/popup-menu/popup-menu.js +3 -1
  311. package/dist/progress-bar/progress-bar.js +3 -2
  312. package/dist/progress-bar-ng/progress-bar-ng.js +2 -0
  313. package/dist/promised-click-ng/promised-click-ng.js +2 -0
  314. package/dist/proxy-attrs/proxy-attrs.js +5 -3
  315. package/dist/query-assist/query-assist.d.ts +5 -9
  316. package/dist/query-assist/query-assist.js +9 -5
  317. package/dist/query-assist/query-assist__suggestions.js +3 -1
  318. package/dist/query-assist-ng/query-assist-ng.js +7 -3
  319. package/dist/radio/radio.d.ts +1 -1
  320. package/dist/radio/radio.js +1 -0
  321. package/dist/radio/radio__item.js +1 -0
  322. package/dist/radio-ng/radio-ng.js +2 -18
  323. package/dist/save-field-ng/save-field-ng.js +3 -1
  324. package/dist/save-field-ng/save-field-ng__template.js +1 -32
  325. package/dist/select/select.d.ts +12 -14
  326. package/dist/select/select.js +33 -22
  327. package/dist/select/select__filter.js +4 -2
  328. package/dist/select/select__popup.d.ts +4 -1
  329. package/dist/select/select__popup.js +9 -4
  330. package/dist/select-ng/select-ng.js +23 -8
  331. package/dist/select-ng/select-ng__lazy.js +30 -12
  332. package/dist/select-ng/select-ng__options.js +2 -2
  333. package/dist/shortcuts/shortcuts-hoc.d.ts +4 -8
  334. package/dist/shortcuts/shortcuts-hoc.js +4 -3
  335. package/dist/shortcuts/shortcuts.d.ts +1 -1
  336. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +3 -0
  337. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +1 -48
  338. package/dist/shortcuts-ng/shortcuts-ng.js +4 -3
  339. package/dist/sidebar-ng/sidebar-ng.js +2 -0
  340. package/dist/sidebar-ng/sidebar-ng__button-template.js +1 -18
  341. package/dist/sidebar-ng/sidebar-ng__template.js +1 -10
  342. package/dist/storage/storage.js +13 -0
  343. package/dist/storage/storage__fallback.js +4 -3
  344. package/dist/storage/storage__local.js +13 -0
  345. package/dist/style.css +1 -1
  346. package/dist/tab-trap/tab-trap.d.ts +1 -1
  347. package/dist/tab-trap/tab-trap.js +2 -1
  348. package/dist/table/cell.js +1 -0
  349. package/dist/table/disable-hover-hoc.d.ts +4 -8
  350. package/dist/table/disable-hover-hoc.js +4 -3
  351. package/dist/table/header-cell.js +2 -0
  352. package/dist/table/header.d.ts +8 -1
  353. package/dist/table/header.js +3 -1
  354. package/dist/table/multitable.js +1 -0
  355. package/dist/table/row-with-focus-sensor.d.ts +4 -4
  356. package/dist/table/row-with-focus-sensor.js +15 -5
  357. package/dist/table/row.d.ts +1 -0
  358. package/dist/table/row.js +4 -2
  359. package/dist/table/selection-adapter.js +2 -0
  360. package/dist/table/selection-shortcuts-hoc.js +1 -0
  361. package/dist/table/selection.js +1 -0
  362. package/dist/table/smart-table.d.ts +1 -0
  363. package/dist/table/smart-table.js +13 -7
  364. package/dist/table/table.d.ts +4 -8
  365. package/dist/table/table.js +3 -1
  366. package/dist/table-legacy-ng/table-legacy-ng.js +13 -47
  367. package/dist/table-legacy-ng/table-legacy-ng__pager.js +6 -9
  368. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +2 -1
  369. package/dist/table-ng/smart-table-ng.js +4 -1
  370. package/dist/table-ng/table-ng.js +4 -1
  371. package/dist/tabs/collapsible-more.js +4 -2
  372. package/dist/tabs/collapsible-tab.js +1 -0
  373. package/dist/tabs/collapsible-tabs.d.ts +2 -2
  374. package/dist/tabs/collapsible-tabs.js +3 -1
  375. package/dist/tabs/custom-item.d.ts +1 -1
  376. package/dist/tabs/dumb-tabs.d.ts +2 -2
  377. package/dist/tabs/dumb-tabs.js +3 -1
  378. package/dist/tabs/smart-tabs.d.ts +4 -4
  379. package/dist/tabs/smart-tabs.js +10 -6
  380. package/dist/tabs/tab-link.d.ts +1 -1
  381. package/dist/tabs/tab-link.js +1 -0
  382. package/dist/tabs/tab.d.ts +1 -1
  383. package/dist/tabs/tab.js +1 -0
  384. package/dist/tabs/tabs.js +3 -1
  385. package/dist/tabs-ng/tabs-ng.js +1 -0
  386. package/dist/tabs-ng/tabs-ng__template.js +1 -38
  387. package/dist/tag/tag.js +4 -3
  388. package/dist/tags-input/tags-input.d.ts +4 -8
  389. package/dist/tags-input/tags-input.js +6 -3
  390. package/dist/tags-input-ng/tags-input-ng.js +5 -2
  391. package/dist/tags-list/tags-list.d.ts +1 -1
  392. package/dist/tags-list/tags-list.js +3 -1
  393. package/dist/template-ng/template-ng.js +1 -0
  394. package/dist/text/text.js +1 -1
  395. package/dist/theme-ng/theme-ng.js +1 -0
  396. package/dist/toggle/toggle.js +2 -1
  397. package/dist/toggle-ng/toggle-ng.js +2 -0
  398. package/dist/tooltip/tooltip.js +3 -1
  399. package/dist/tooltip-ng/tooltip-ng.js +12 -6
  400. package/dist/user-agreement/service.d.ts +14 -62
  401. package/dist/user-agreement/service.js +14 -8
  402. package/dist/user-agreement/toolbox.eula.js +1 -160
  403. package/dist/user-agreement/user-agreement.js +3 -1
  404. package/dist/user-card/card.js +2 -0
  405. package/dist/user-card/smart-user-card-tooltip.js +2 -0
  406. package/dist/user-card/tooltip.js +2 -0
  407. package/dist/user-card/user-card.js +2 -0
  408. package/dist/user-card-ng/user-card-ng.js +3 -0
  409. package/package.json +74 -66
@@ -58,7 +58,7 @@ export interface QueryAssistProps {
58
58
  actions?: ReactNode[] | null | undefined;
59
59
  'data-test'?: string | null | undefined;
60
60
  }
61
- interface StyleRange {
61
+ export interface StyleRange {
62
62
  style: string;
63
63
  start: number;
64
64
  length: number;
@@ -294,18 +294,14 @@ export default class QueryAssist extends Component<QueryAssistProps> {
294
294
  export declare type QueryAssistAttrs = JSX.LibraryManagedAttributes<typeof QueryAssist, QueryAssistProps>;
295
295
  export declare const RerenderableQueryAssist: {
296
296
  new (props: QueryAssistProps): {
297
- _propsCache: Readonly<QueryAssistProps> & Readonly<{
298
- children?: React.ReactNode;
299
- }>;
300
- rerender(props?: Partial<QueryAssistProps>, callback?: (() => void) | undefined): void | Element | React.Component<QueryAssistProps, any, any>;
297
+ _propsCache: QueryAssistProps & React.RefAttributes<unknown>;
298
+ rerender(props?: Partial<QueryAssistProps>, callback?: (() => void) | undefined): void;
301
299
  node?: HTMLElement | null | undefined;
302
- context: any;
300
+ context: unknown;
303
301
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<QueryAssistProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
304
302
  forceUpdate(callback?: (() => void) | undefined): void;
305
303
  render(): React.ReactNode;
306
- readonly props: Readonly<QueryAssistProps> & Readonly<{
307
- children?: React.ReactNode;
308
- }>;
304
+ readonly props: Readonly<QueryAssistProps>;
309
305
  state: Readonly<{}>;
310
306
  refs: {
311
307
  [key: string]: React.ReactInstance;
@@ -3,8 +3,8 @@ import PropTypes from 'prop-types';
3
3
  import debounce from 'just-debounce-it';
4
4
  import classNames from 'classnames';
5
5
  import deepEqual from 'deep-equal';
6
- import searchIcon from '@jetbrains/icons/search';
7
- import closeIcon from '@jetbrains/icons/close';
6
+ import searchIcon from '@jetbrains/icons/search-12px';
7
+ import closeIcon from '@jetbrains/icons/close-12px';
8
8
  import getUID from '../global/get-uid';
9
9
  import dataTests from '../global/data-tests';
10
10
  import { getRect, preventDefault } from '../global/dom';
@@ -10,7 +10,7 @@ export default class Radio extends Component<RadioProps> {
10
10
  disabled: PropTypes.Requireable<boolean>;
11
11
  value: PropTypes.Requireable<string | number | boolean>;
12
12
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
13
- children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
13
+ children: PropTypes.Validator<string | number | boolean | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
14
14
  };
15
15
  static Item: React.ForwardRefExoticComponent<import("./radio__item").RadioItemProps & React.RefAttributes<import("./radio__item").Radio>>;
16
16
  uid: string;
@@ -63,6 +63,9 @@
63
63
  .selectedIcon {
64
64
  composes: resetButton from "../global/global.css";
65
65
 
66
+ position: relative;
67
+ top: 3px;
68
+
66
69
  display: inline-block;
67
70
 
68
71
  width: calc(2 * unit);
@@ -78,7 +81,7 @@
78
81
  .clearIcon {
79
82
  padding: 0 3px;
80
83
 
81
- vertical-align: -1px;
84
+ vertical-align: -2px;
82
85
  }
83
86
 
84
87
  .sizeS {
@@ -45,6 +45,7 @@ export interface CustomAnchorProps {
45
45
  buttonProps: ButtonHTMLAttributes<HTMLButtonElement> & DataTestProps;
46
46
  popup: ReactNode;
47
47
  }
48
+ export declare type CustomAnchor = ((props: CustomAnchorProps) => ReactNode);
48
49
  export interface BaseSelectProps<T = unknown> {
49
50
  data: readonly SelectItem<T>[];
50
51
  filter: boolean | Filter<T>;
@@ -60,7 +61,7 @@ export interface BaseSelectProps<T = unknown> {
60
61
  maxHeight: number;
61
62
  hideArrow: boolean;
62
63
  directions: readonly Directions[];
63
- label: string;
64
+ label: string | null;
64
65
  selectedLabel: ReactNode;
65
66
  inputPlaceholder: string;
66
67
  shortcutsEnabled: boolean;
@@ -68,7 +69,7 @@ export interface BaseSelectProps<T = unknown> {
68
69
  onLoadMore: () => void;
69
70
  onOpen: () => void;
70
71
  onFilter: (value: string) => void;
71
- onFocus: () => void;
72
+ onFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
72
73
  onBlur: () => void;
73
74
  onKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;
74
75
  onSelect: (selected: SelectItem<T> | null, event?: Event | SyntheticEvent) => void;
@@ -77,6 +78,7 @@ export interface BaseSelectProps<T = unknown> {
77
78
  onDone: () => void;
78
79
  onReset: () => void;
79
80
  dir: 'ltr' | 'rtl';
81
+ renderBottomToolbar?: () => ReactNode;
80
82
  height?: ControlsHeight | undefined;
81
83
  targetElement?: HTMLElement | null | undefined;
82
84
  className?: string | null | undefined;
@@ -93,7 +95,7 @@ export interface BaseSelectProps<T = unknown> {
93
95
  hint?: ReactNode;
94
96
  add?: Add | null | undefined;
95
97
  compact?: boolean | null | undefined;
96
- customAnchor?: ((props: CustomAnchorProps) => ReactNode) | null | undefined;
98
+ customAnchor?: CustomAnchor | null | undefined;
97
99
  disableMoveOverflow?: boolean | null | undefined;
98
100
  disableScrollToActive?: boolean | null | undefined;
99
101
  'data-test'?: string | null | undefined;
@@ -112,7 +114,7 @@ export interface MultipleSelectProps<T = unknown> extends BaseSelectProps<T> {
112
114
  onChange: (selected: SelectItem<T>[], event?: Event | SyntheticEvent) => void;
113
115
  tags?: Tags | boolean | null | undefined;
114
116
  }
115
- declare type SelectProps<T = unknown> = SingleSelectProps<T> | MultipleSelectProps<T>;
117
+ export declare type SelectProps<T = unknown> = SingleSelectProps<T> | MultipleSelectProps<T>;
116
118
  interface AddButton {
117
119
  prefix: string | null | undefined;
118
120
  label: string;
@@ -161,8 +163,8 @@ export default class Select<T = unknown> extends Component<SelectProps<T>, Selec
161
163
  maxHeight: number;
162
164
  directions: Directions[];
163
165
  selected: null;
164
- label: string;
165
- selectedLabel: string;
166
+ label: null;
167
+ selectedLabel: null;
166
168
  inputPlaceholder: string;
167
169
  hint: null;
168
170
  shortcutsEnabled: boolean;
@@ -256,18 +258,14 @@ export declare type MultipleSelectAttrs<T = unknown> = JSX.LibraryManagedAttribu
256
258
  export declare type SelectAttrs<T = unknown> = JSX.LibraryManagedAttributes<typeof Select, SelectProps<T>>;
257
259
  export declare const RerenderableSelect: {
258
260
  new (props: SelectProps<unknown>): {
259
- _propsCache: Readonly<SelectProps<unknown>> & Readonly<{
260
- children?: React.ReactNode;
261
- }>;
262
- rerender(props?: Partial<SelectProps<unknown>>, callback?: (() => void) | undefined): void | Element | React.Component<SelectProps<unknown>, any, any>;
261
+ _propsCache: SelectProps<unknown> & React.RefAttributes<unknown>;
262
+ rerender(props?: Partial<SelectProps<unknown>>, callback?: (() => void) | undefined): void;
263
263
  node?: HTMLElement | null | undefined;
264
- context: any;
264
+ context: unknown;
265
265
  setState<K extends keyof SelectState<unknown>>(state: SelectState<unknown> | ((prevState: Readonly<SelectState<unknown>>, props: Readonly<SelectProps<unknown>>) => SelectState<unknown> | Pick<SelectState<unknown>, K> | null) | Pick<SelectState<unknown>, K> | null, callback?: (() => void) | undefined): void;
266
266
  forceUpdate(callback?: (() => void) | undefined): void;
267
267
  render(): React.ReactNode;
268
- readonly props: Readonly<SelectProps<unknown>> & Readonly<{
269
- children?: React.ReactNode;
270
- }>;
268
+ readonly props: Readonly<SelectProps<unknown>>;
271
269
  state: Readonly<SelectState<unknown>>;
272
270
  refs: {
273
271
  [key: string]: React.ReactInstance;
@@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import PropTypes from 'prop-types';
4
4
  import chevronDownIcon from '@jetbrains/icons/chevron-down';
5
- import closeIcon from '@jetbrains/icons/close';
5
+ import closeIcon from '@jetbrains/icons/close-12px';
6
6
  import deepEqual from 'deep-equal';
7
7
  import { Anchor } from '../dropdown/dropdown';
8
8
  import Avatar, { Size as AvatarSize } from '../avatar/avatar';
@@ -75,8 +75,8 @@ function buildMultipleMap(selected) {
75
75
  }
76
76
  function getListItems(props, state, rawFilterString, data = props.data) {
77
77
  let filterString = rawFilterString.trim();
78
- if (isInputMode(props.type) && state.selected && !Array.isArray(state.selected) &&
79
- filterString === state.selected.label) {
78
+ if (isInputMode(props.type) && !props.allowAny && state.selected &&
79
+ !Array.isArray(state.selected) && filterString === state.selected.label) {
80
80
  filterString = ''; // ignore multiple if it is exactly the selected item
81
81
  }
82
82
  const lowerCaseString = filterString.toLowerCase();
@@ -197,8 +197,8 @@ export default class Select extends Component {
197
197
  Popup.PopupProps.Directions.TOP_RIGHT
198
198
  ],
199
199
  selected: null,
200
- label: '',
201
- selectedLabel: '',
200
+ label: null,
201
+ selectedLabel: null,
202
202
  inputPlaceholder: '',
203
203
  hint: null,
204
204
  shortcutsEnabled: false,
@@ -253,6 +253,9 @@ export default class Select extends Component {
253
253
  if (prevMultiple !== multiple && !deepEqual(prevMultiple, multiple)) {
254
254
  nextState.selected = multiple ? [] : null;
255
255
  }
256
+ if (multiple && !nextState.selected) {
257
+ nextState.selected = prevState.selected;
258
+ }
256
259
  const { selected } = { ...prevState, ...nextState };
257
260
  if (selected && Array.isArray(selected)) {
258
261
  nextState.multipleMap = buildMultipleMap(selected);
@@ -296,8 +299,8 @@ export default class Select extends Component {
296
299
  id = getUID('select-');
297
300
  shortcutsScope = this.id;
298
301
  listId = `${this.id}:list`;
299
- _focusHandler = () => {
300
- this.props.onFocus();
302
+ _focusHandler = (e) => {
303
+ this.props.onFocus(e);
301
304
  this.setState({
302
305
  shortcutsEnabled: true,
303
306
  focused: true
@@ -441,13 +444,14 @@ export default class Select extends Component {
441
444
  }
442
445
  _hidePopup(tryFocusAnchor) {
443
446
  if (this.node && this.state.showPopup) {
444
- this.setState({
447
+ this.setState(prevState => ({
445
448
  showPopup: false,
446
- filterValue: ''
447
- });
449
+ filterValue: this.props.allowAny ? prevState.filterValue : ''
450
+ }));
448
451
  if (tryFocusAnchor) {
449
- const restoreFocusNode = this.props.targetElement ||
452
+ const focusableSelectExists = this.node &&
450
453
  this.node.querySelector('[data-test~=ring-select__focus]');
454
+ const restoreFocusNode = this.props.targetElement || focusableSelectExists;
451
455
  if (restoreFocusNode) {
452
456
  restoreFocusNode.focus();
453
457
  }
@@ -460,15 +464,16 @@ export default class Select extends Component {
460
464
  this.props.onAdd(value);
461
465
  };
462
466
  getToolbar() {
463
- const { hint } = this.props;
467
+ const { hint, renderBottomToolbar } = this.props;
464
468
  const { prefix, label, delayed } = this.state.addButton || {};
465
- const isToolbarHasElements = this.state.addButton || hint;
469
+ const isToolbarHasElements = this.state.addButton || hint || renderBottomToolbar;
466
470
  if (!isToolbarHasElements) {
467
471
  return null;
468
472
  }
469
473
  return (<div className={classNames({
470
- [styles.toolbar]: !!this.state.addButton
474
+ [styles.toolbar]: Boolean(this.state.addButton || renderBottomToolbar)
471
475
  })} data-test="ring-select-toolbar">
476
+ {renderBottomToolbar && renderBottomToolbar()}
472
477
  {this.state.addButton && (<Button text delayed={delayed} className={classNames(styles.button, styles.buttonSpaced)} onClick={this.addHandler} data-test="ring-select-toolbar-button">
473
478
  {prefix ? `${prefix} ${label}` : label}
474
479
  </Button>)}
@@ -710,9 +715,7 @@ export default class Select extends Component {
710
715
  !this.state.selected;
711
716
  }
712
717
  _getLabel() {
713
- return this.props.label ||
714
- (typeof this.props.selectedLabel === 'string' ? this.props.selectedLabel : null) ||
715
- 'Select an option';
718
+ return this.props.label ?? this.props.selectedLabel ?? 'Select an option';
716
719
  }
717
720
  _getSelectedString() {
718
721
  if (Array.isArray(this.state.selected)) {
@@ -21,6 +21,9 @@ export interface Multiple {
21
21
  label?: string | null | undefined;
22
22
  limit?: number | null | undefined;
23
23
  selectAll?: boolean | null | undefined;
24
+ renderSelectedItemsDescription?: (selectedItems: SelectItem[], total: number) => ReactNode;
25
+ selectAllLabel?: string;
26
+ deselectAllLabel?: string;
24
27
  removeSelectedItems?: boolean | null | undefined;
25
28
  }
26
29
  export interface TagsReset {
@@ -105,7 +108,7 @@ export default class SelectPopup<T = unknown> extends PureComponent<SelectPopupP
105
108
  getFilterWithTags(): JSX.Element | null;
106
109
  getBottomLine(): "" | JSX.Element | null;
107
110
  handleListResize: () => void;
108
- getList(ringPopupTarget: string | undefined): JSX.Element | null;
111
+ getList(ringPopupTarget: string | Element | undefined): JSX.Element | null;
109
112
  handleSelectAll: () => void;
110
113
  getSelectAll: () => false | JSX.Element;
111
114
  private _adjustListMaxHeight;
@@ -245,16 +245,17 @@ export default class SelectPopup extends PureComponent {
245
245
  }
246
246
  };
247
247
  getSelectAll = () => {
248
+ const multiple = this.props.multiple;
248
249
  const activeFilters = this.props.data.filter(item => !item.disabled);
249
250
  return Array.isArray(this.props.selected) && (<div className={styles.selectAll}>
250
251
  {activeFilters.length === 0
251
252
  ? (<span />)
252
253
  : (<Button text inline onClick={this.handleSelectAll}>
253
254
  {activeFilters.length !== this.props.selected.length
254
- ? 'Select all'
255
- : 'Deselect all'}
255
+ ? multiple.selectAllLabel || 'Select all'
256
+ : multiple.deselectAllLabel || 'Deselect all'}
256
257
  </Button>)}
257
- <Text info>{`${this.props.selected.length} selected`}</Text>
258
+ {multiple.renderSelectedItemsDescription?.(this.props.selected, activeFilters.length) || (<Text info>{`${this.props.selected.length} selected`}</Text>)}
258
259
  </div>);
259
260
  };
260
261
  // Cache the value because this method is called
@@ -1,8 +1,8 @@
1
1
  import angular from 'angular';
2
2
 
3
3
  import React from 'react';
4
- import {render, unmountComponentAtNode} from 'react-dom';
5
4
 
5
+ import {render, unmountComponentAtNode} from '../global/react-render-adapter';
6
6
  import getEventKey from '../global/get-event-key';
7
7
  import Select, {RerenderableSelect} from '../select/select';
8
8
  import MessageBundle from '../message-bundle-ng/message-bundle-ng';
@@ -376,9 +376,15 @@ angularModule.directive('rgSelect', function rgSelectDirective() {
376
376
  return sizes[ctrl.size] || sizes.FULL;
377
377
  }
378
378
 
379
+ function selectRef(instance) {
380
+ if (instance != null) {
381
+ ctrl.selectInstance = instance;
382
+ }
383
+ }
384
+
379
385
  function reRenderSelect(props) {
380
- if (ctrl.selectInstance.node) {
381
- ctrl.selectInstance.rerender(props);
386
+ if (ctrl.selectInstance?.node) {
387
+ ctrl.selectInstance.rerender({...props, ref: selectRef});
382
388
  }
383
389
  }
384
390
 
@@ -518,9 +524,14 @@ angularModule.directive('rgSelect', function rgSelectDirective() {
518
524
  ctrl.config = angular.extend({}, ctrl.defaultConfig, ctrl.config || {});
519
525
 
520
526
  if (getType() === 'suggest' || getType() === 'input') {
521
- ctrl.selectInstance = render(<RerenderableSelect {...ctrl.config}/>, container);
527
+ render(
528
+ <RerenderableSelect
529
+ ref={selectRef}
530
+ {...ctrl.config}
531
+ />,
532
+ container);
522
533
  } else {
523
- ctrl.selectInstance = new SelectLazy(container, ctrl.config, ctrl, getType());
534
+ ctrl.selectInstance = new SelectLazy(container, ctrl.config, ctrl, getType(), selectRef);
524
535
  }
525
536
 
526
537
  // Preserve existing contents of the directive
@@ -1,17 +1,22 @@
1
1
  import angular from 'angular';
2
2
 
3
- import {render, hydrate} from 'react-dom';
4
3
  import React from 'react';
5
4
 
5
+ import {render, hydrate} from '../global/react-render-adapter';
6
6
  import {RerenderableSelect} from '../select/select';
7
7
 
8
8
  class SelectLazy {
9
- constructor(container, props, ctrl, type) {
9
+ constructor(container, props, ctrl, type, selectRef) {
10
10
  this.container = container;
11
11
  this.ctrl = ctrl;
12
12
  this.props = props || {};
13
13
  this.type = type;
14
14
  this.node = container;
15
+ this.selectInstance = null;
16
+ this.selectRef = node => {
17
+ this.selectInstance = node;
18
+ selectRef(node);
19
+ };
15
20
  this._popup = {
16
21
  isVisible: angular.noop
17
22
  };
@@ -38,15 +43,20 @@ class SelectLazy {
38
43
  }
39
44
 
40
45
  attachEvents() {
41
- this.container.addEventListener('click', this.onClick);
46
+ this.container.addEventListener('click', this.onClick, {capture: true});
42
47
  }
43
48
 
44
49
  detachEvents() {
45
- this.container.removeEventListener('click', this.onClick);
50
+ this.container.removeEventListener('click', this.onClick, {capture: true});
46
51
  }
47
52
 
48
53
  render(props) {
49
- this.reactSelect = <RerenderableSelect {...Object.assign({}, this.props, props || {})}/>;
54
+ this.reactSelect = (
55
+ <RerenderableSelect
56
+ {...Object.assign({}, this.props, props || {})}
57
+ ref={this.selectRef}
58
+ />
59
+ );
50
60
  this.props = this.reactSelect.props;
51
61
 
52
62
  if (this.type !== 'dropdown') {
@@ -58,11 +68,12 @@ class SelectLazy {
58
68
  _clickHandler() {
59
69
  this.detachEvents();
60
70
  if (this.type === 'dropdown') {
61
- this.ctrl.selectInstance = render(this.reactSelect, this.container);
71
+ render(this.reactSelect, this.container);
72
+ // Hack for React17, where click event is not triggered on just rendered Select node
73
+ this.selectInstance?._openPopupIfClosed?.();
62
74
  } else {
63
- this.ctrl.selectInstance = hydrate(this.reactSelect, this.container);
75
+ hydrate(this.reactSelect, this.container);
64
76
  }
65
- this.ctrl.selectInstance._openPopupIfClosed();
66
77
  }
67
78
  }
68
79
 
@@ -67,7 +67,9 @@ describe('Select Lazy', () => {
67
67
 
68
68
 
69
69
  function renderLazySelect(type = 'button') {
70
- const lazySelect = new SelectLazy(containerNode, {}, ctrl, type);
70
+ const lazySelect = new SelectLazy(containerNode, {}, ctrl, type, instance => {
71
+ ctrl.selectInstance = instance;
72
+ });
71
73
  lazySelect.render();
72
74
  return lazySelect;
73
75
  }
@@ -12,12 +12,10 @@ export default function shortcutsHOC<P>(ComposedComponent: ComponentType<P> | st
12
12
  new (props: (P & ShortcutsHOCProps) | Readonly<P & ShortcutsHOCProps>): {
13
13
  _shortcutsScopeUid: string;
14
14
  render(): JSX.Element;
15
- context: any;
15
+ context: unknown;
16
16
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<P & ShortcutsHOCProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
17
17
  forceUpdate(callback?: (() => void) | undefined): void;
18
- readonly props: Readonly<P & ShortcutsHOCProps> & Readonly<{
19
- children?: React.ReactNode;
20
- }>;
18
+ readonly props: Readonly<P & ShortcutsHOCProps>;
21
19
  state: Readonly<{}>;
22
20
  refs: {
23
21
  [key: string]: React.ReactInstance;
@@ -38,12 +36,10 @@ export default function shortcutsHOC<P>(ComposedComponent: ComponentType<P> | st
38
36
  new (props: P & ShortcutsHOCProps, context: any): {
39
37
  _shortcutsScopeUid: string;
40
38
  render(): JSX.Element;
41
- context: any;
39
+ context: unknown;
42
40
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<P & ShortcutsHOCProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
43
41
  forceUpdate(callback?: (() => void) | undefined): void;
44
- readonly props: Readonly<P & ShortcutsHOCProps> & Readonly<{
45
- children?: React.ReactNode;
46
- }>;
42
+ readonly props: Readonly<P & ShortcutsHOCProps>;
47
43
  state: Readonly<{}>;
48
44
  refs: {
49
45
  [key: string]: React.ReactInstance;
@@ -24,5 +24,5 @@ export default class Shortcuts extends PureComponent<ShortcutsProps> {
24
24
  componentWillUnmount(): void;
25
25
  turnShorcutsOn(): void;
26
26
  turnShorcutsOff(): void;
27
- render(): {} | null;
27
+ render(): true | import("react").ReactChild | import("react").ReactFragment | null;
28
28
  }
@@ -13,7 +13,7 @@ export interface TabTrapProps extends HTMLAttributes<HTMLElement> {
13
13
  */
14
14
  export default class TabTrap extends Component<TabTrapProps> {
15
15
  static propTypes: {
16
- children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
16
+ children: PropTypes.Validator<string | number | boolean | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
17
17
  trapDisabled: PropTypes.Requireable<boolean>;
18
18
  autoFocusFirst: PropTypes.Requireable<boolean>;
19
19
  focusBackOnClose: PropTypes.Requireable<boolean>;
@@ -13,12 +13,10 @@ export default function disableHoverHOC<P extends DisableHoverAddProps>(Composed
13
13
  onMouseMove: () => void;
14
14
  onKeyDown: (e: KeyboardEvent) => void;
15
15
  render(): JSX.Element;
16
- context: any;
16
+ context: unknown;
17
17
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<DisableHoverProps<P>>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
18
18
  forceUpdate(callback?: (() => void) | undefined): void;
19
- readonly props: Readonly<DisableHoverProps<P>> & Readonly<{
20
- children?: React.ReactNode;
21
- }>;
19
+ readonly props: Readonly<DisableHoverProps<P>>;
22
20
  refs: {
23
21
  [key: string]: React.ReactInstance;
24
22
  };
@@ -42,12 +40,10 @@ export default function disableHoverHOC<P extends DisableHoverAddProps>(Composed
42
40
  onMouseMove: () => void;
43
41
  onKeyDown: (e: KeyboardEvent) => void;
44
42
  render(): JSX.Element;
45
- context: any;
43
+ context: unknown;
46
44
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<DisableHoverProps<P>>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
47
45
  forceUpdate(callback?: (() => void) | undefined): void;
48
- readonly props: Readonly<DisableHoverProps<P>> & Readonly<{
49
- children?: React.ReactNode;
50
- }>;
46
+ readonly props: Readonly<DisableHoverProps<P>>;
51
47
  refs: {
52
48
  [key: string]: React.ReactInstance;
53
49
  };
@@ -1,4 +1,4 @@
1
- import { ChangeEventHandler, PureComponent, SyntheticEvent } from 'react';
1
+ import { ChangeEventHandler, PureComponent, ReactNode, SyntheticEvent } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Waypoint } from 'react-waypoint';
4
4
  import { Column, SortParams } from './header-cell';
@@ -16,6 +16,13 @@ export interface HeaderProps {
16
16
  caption?: string | null | undefined;
17
17
  checkboxDisabled?: boolean | undefined;
18
18
  }
19
+ declare module 'react-waypoint' {
20
+ namespace Waypoint {
21
+ interface WaypointProps {
22
+ children?: ReactNode;
23
+ }
24
+ }
25
+ }
19
26
  export default class Header extends PureComponent<HeaderProps> {
20
27
  static propTypes: {
21
28
  caption: PropTypes.Requireable<string>;
@@ -3,10 +3,10 @@ import { FocusSensorProps } from '../global/focus-sensor-hoc';
3
3
  import Row, { RowProps } from './row';
4
4
  import { SelectionItem } from './selection';
5
5
  export interface RowWithFocusSensorCallbacksProps<T extends SelectionItem> extends Omit<FocusSensorProps<RowProps<T>, HTMLTableRowElement, typeof Row>, 'onFocus'> {
6
- onFocus: (item: T) => void;
7
- onSelect: (item: T, selected: boolean) => void;
8
- onCollapse: (item: T) => void;
9
- onExpand: (item: T) => void;
6
+ onFocus?: (item: T) => void;
7
+ onSelect?: (item: T, selected: boolean) => void;
8
+ onCollapse?: (item: T) => void;
9
+ onExpand?: (item: T) => void;
10
10
  }
11
11
  export default class RowWithFocusSensorCallbacks<T extends SelectionItem> extends PureComponent<RowWithFocusSensorCallbacksProps<T>> {
12
12
  RowWithFocusSensor: React.ComponentType<FocusSensorProps<RowProps<T>, HTMLDivElement, typeof Row>>;
@@ -6,16 +6,16 @@ export default class RowWithFocusSensorCallbacks extends PureComponent {
6
6
  // https://stackoverflow.com/a/53882322/6304152
7
7
  RowWithFocusSensor = getContainer();
8
8
  onFocus = () => {
9
- this.props.onFocus(this.props.item);
9
+ this.props.onFocus?.(this.props.item);
10
10
  };
11
11
  onSelect = (item, selected) => {
12
- this.props.onSelect(item, selected);
12
+ this.props.onSelect?.(item, selected);
13
13
  };
14
14
  onCollapse = () => {
15
- this.props.onCollapse(this.props.item);
15
+ this.props.onCollapse?.(this.props.item);
16
16
  };
17
17
  onExpand = () => {
18
- this.props.onExpand(this.props.item);
18
+ this.props.onExpand?.(this.props.item);
19
19
  };
20
20
  render() {
21
21
  return (<this.RowWithFocusSensor {...this.props} onFocus={this.onFocus} onSelect={this.onSelect} onCollapse={this.onCollapse} onExpand={this.onExpand}/>);
@@ -54,3 +54,4 @@ export default class Row<T extends SelectionItem> extends PureComponent<RowProps
54
54
  rowRef: (el: HTMLElement | null) => void;
55
55
  render(): JSX.Element;
56
56
  }
57
+ export declare type RowAttrs<T extends SelectionItem> = JSX.LibraryManagedAttributes<typeof Row, RowProps<T>>;
@@ -4,6 +4,7 @@ import { TableAttrs } from './table';
4
4
  import Selection, { SelectionItem } from './selection';
5
5
  export interface SmartTableProps<T extends SelectionItem> extends Omit<TableAttrs<T>, 'selection' | 'onSelect'> {
6
6
  onSelectionChange: (selection: Selection<T>) => void;
7
+ selection?: Selection<T>;
7
8
  }
8
9
  declare class SmartTable<T extends SelectionItem> extends PureComponent<SmartTableProps<T>> {
9
10
  static propTypes: {
@@ -19,11 +19,15 @@ class SmartTable extends PureComponent {
19
19
  })
20
20
  };
21
21
  UNSAFE_componentWillReceiveProps(nextProps) {
22
- const { data, isItemSelectable } = nextProps;
23
- if (this.props.data !== data || this.props.isItemSelectable !== isItemSelectable) {
24
- const selection = new Selection({ data, isItemSelectable });
22
+ const { data, isItemSelectable, selection } = nextProps;
23
+ if (this.props.remoteSelection && this.props.selection !== selection) {
25
24
  this.setState({ selection });
26
25
  }
26
+ else if (this.props.data !== data || this.props.isItemSelectable !== isItemSelectable) {
27
+ this.setState({
28
+ selection: new Selection({ data, isItemSelectable })
29
+ });
30
+ }
27
31
  }
28
32
  onSelect = (selection) => {
29
33
  this.setState({ selection });
@@ -103,12 +103,10 @@ export default class TableContainer<T extends SelectionItem> extends Component<T
103
103
  onMouseMove: () => void;
104
104
  onKeyDown: (e: KeyboardEvent) => void;
105
105
  render(): JSX.Element;
106
- context: any;
106
+ context: unknown;
107
107
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
108
108
  forceUpdate(callback?: (() => void) | undefined): void;
109
- readonly props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>> & Readonly<{
110
- children?: React.ReactNode;
111
- }>;
109
+ readonly props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>>;
112
110
  refs: {
113
111
  [key: string]: React.ReactInstance;
114
112
  };
@@ -132,12 +130,10 @@ export default class TableContainer<T extends SelectionItem> extends Component<T
132
130
  onMouseMove: () => void;
133
131
  onKeyDown: (e: KeyboardEvent) => void;
134
132
  render(): JSX.Element;
135
- context: any;
133
+ context: unknown;
136
134
  setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
137
135
  forceUpdate(callback?: (() => void) | undefined): void;
138
- readonly props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>> & Readonly<{
139
- children?: React.ReactNode;
140
- }>;
136
+ readonly props: Readonly<DisableHoverProps<SelectionShortcutsProps<T, FocusSensorProps<TableProps<T>, HTMLTableRowElement, typeof Table>>>>;
141
137
  refs: {
142
138
  [key: string]: React.ReactInstance;
143
139
  };
@@ -27,11 +27,11 @@ const morePopupDirections = [
27
27
  Directions.BOTTOM_RIGHT
28
28
  ];
29
29
  export const MoreButton = React.memo(({ items, selected, onSelect, moreClassName, moreActiveClassName, morePopupClassName, morePopupItemClassName, morePopupBeforeEnd }) => {
30
- const onSelectHandler = React.useCallback(listItem => {
30
+ const onSelectHandler = React.useCallback((listItem) => {
31
31
  if (listItem.disabled === true || listItem.custom === true) {
32
32
  return;
33
33
  }
34
- const cb = onSelect(listItem.key);
34
+ const cb = onSelect(String(listItem.key));
35
35
  cb();
36
36
  }, [onSelect]);
37
37
  const hasActiveChild = React.useMemo(() => items.some(item => item.props.alwaysHidden && item.props.id === selected), [items, selected]);