@jetbrains/ring-ui 4.1.0-beta.9 → 4.1.4

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 (438) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +22 -16
  3. package/babel.config.js +3 -2
  4. package/components/alert/alert.js +9 -3
  5. package/components/alert/container.css +1 -1
  6. package/components/alert-service/alert-service.examples.css +18 -0
  7. package/components/alert-service/alert-service.examples.js +21 -0
  8. package/components/alert-service/alert-service.js +10 -3
  9. package/components/analytics/analytics__fus-plugin.js +1 -1
  10. package/components/auth/auth.test.js +14 -7
  11. package/components/auth/auth__core.js +64 -33
  12. package/components/auth-dialog/auth-dialog.js +1 -0
  13. package/components/avatar/avatar.css +4 -1
  14. package/components/avatar/avatar.examples.js +3 -2
  15. package/components/avatar/avatar.js +31 -6
  16. package/components/avatar/fallback-avatar.js +136 -0
  17. package/components/avatar-editor-ng/avatar-editor-ng.css +2 -2
  18. package/components/avatar-editor-ng/avatar-editor-ng.js +2 -1
  19. package/components/avatar-editor-ng/{avatar-editor-ng.html → avatar-editor-ng__template.js} +2 -2
  20. package/components/button/button.css +2 -2
  21. package/components/button/button.js +4 -1
  22. package/components/button-group/button-group.js +1 -1
  23. package/components/button-group/caption.js +1 -1
  24. package/components/button-ng/button-ng.js +1 -1
  25. package/components/button-set-ng/button-set-ng.js +3 -1
  26. package/components/checkbox/checkbox.css +1 -1
  27. package/components/code/code.js +1 -1
  28. package/components/confirm/confirm.js +1 -0
  29. package/components/confirm-service/confirm-service.js +5 -5
  30. package/components/content-layout/content-layout.css +1 -1
  31. package/components/data-list/data-list.css +1 -1
  32. package/components/date-picker/date-input.js +5 -4
  33. package/components/date-picker/date-picker.css +34 -22
  34. package/components/date-picker/date-picker.examples.js +1 -1
  35. package/components/date-picker/date-picker.js +16 -14
  36. package/components/date-picker/date-popup.js +22 -7
  37. package/components/date-picker/month-names.js +8 -5
  38. package/components/date-picker/month.js +6 -2
  39. package/components/date-picker/weekdays.js +10 -2
  40. package/components/dialog/dialog.examples.js +3 -1
  41. package/components/dialog/dialog.js +5 -2
  42. package/components/dialog/dialog.test.js +1 -1
  43. package/components/dialog/dialog__body-scroll-preventer.js +2 -2
  44. package/components/dialog-ng/dialog-ng.js +7 -8
  45. package/components/dialog-ng/{dialog-ng.html → dialog-ng__template.js} +2 -2
  46. package/components/dropdown/anchor.js +1 -0
  47. package/components/dropdown/dropdown.examples.js +36 -1
  48. package/components/dropdown-menu/dropdown-menu.examples.js +47 -0
  49. package/components/dropdown-menu/dropdown-menu.js +117 -0
  50. package/components/dropdown-menu/dropdown-menu.test.js +76 -0
  51. package/components/error-bubble/error-bubble-legacy.css +1 -1
  52. package/components/error-bubble/error-bubble.css +1 -1
  53. package/components/error-bubble/error-bubble.examples.js +1 -1
  54. package/components/error-page/error-page.css +2 -2
  55. package/components/footer-ng/footer-ng.js +13 -3
  56. package/components/form/form.css +2 -2
  57. package/components/form-ng/form-ng.js +3 -1
  58. package/components/global/global.css +1 -1
  59. package/components/global/theme.js +1 -1
  60. package/components/global/variables.css +8 -1
  61. package/components/grid/grid.css +10 -9
  62. package/components/header/header.css +1 -1
  63. package/components/header/header.examples.js +7 -8
  64. package/components/header/profile.js +10 -11
  65. package/components/http/http.js +1 -1
  66. package/components/icon/icon.css +5 -4
  67. package/components/island/island.css +4 -3
  68. package/components/island-legacy/island-legacy.css +3 -1
  69. package/components/list/list.js +6 -1
  70. package/components/list/list__custom.js +9 -3
  71. package/components/list/list__item.js +8 -2
  72. package/components/list/list__link.js +2 -1
  73. package/components/loader-inline/loader-inline.css +1 -1
  74. package/components/loader-screen/loader-screen.css +1 -1
  75. package/components/message/message.css +1 -1
  76. package/components/message/message.examples.js +8 -5
  77. package/components/pager/pager.js +5 -3
  78. package/components/permissions/permissions.js +1 -1
  79. package/components/progress-bar/progress-bar.css +1 -1
  80. package/components/progress-bar/progress-bar.examples.js +3 -3
  81. package/components/progress-bar/progress-bar.js +5 -2
  82. package/components/progress-bar/progress-bar.test.js +12 -13
  83. package/components/progress-bar-ng/progress-bar-ng.examples.js +3 -3
  84. package/components/query-assist/query-assist.css +13 -3
  85. package/components/query-assist/query-assist.examples.js +3 -1
  86. package/components/query-assist/query-assist.js +56 -12
  87. package/components/query-assist/query-assist.test.js +37 -5
  88. package/components/save-field-ng/save-field-ng.css +0 -3
  89. package/components/save-field-ng/save-field-ng.js +3 -1
  90. package/components/save-field-ng/{save-field-ng.html → save-field-ng__template.js} +2 -2
  91. package/components/select/select.css +12 -7
  92. package/components/select/select.examples.js +13 -0
  93. package/components/select/select.js +30 -43
  94. package/components/select/select.test.js +4 -5
  95. package/components/shortcuts-hint-ng/shortcuts-hint-ng.css +1 -1
  96. package/components/shortcuts-hint-ng/shortcuts-hint-ng.js +1 -1
  97. package/components/shortcuts-hint-ng/{shortcuts-hint-ng.html → shortcuts-hint-ng__template.js} +2 -2
  98. package/components/sidebar/sidebar.css +1 -0
  99. package/components/sidebar-ng/sidebar-ng.js +6 -2
  100. package/components/sidebar-ng/{sidebar-ng__button.html → sidebar-ng__button-template.js} +2 -2
  101. package/components/sidebar-ng/{sidebar-ng.html → sidebar-ng__template.js} +2 -2
  102. package/components/table/row.js +2 -1
  103. package/components/table/table.css +2 -1
  104. package/components/table-legacy/table-legacy.css +2 -2
  105. package/components/table-legacy/table-legacy__toolbar.css +2 -2
  106. package/components/table-legacy-ng/table-legacy-ng.js +38 -5
  107. package/components/table-legacy-ng/table-legacy-ng__pager.js +7 -1
  108. package/components/tabs/collapsible-tab.js +2 -2
  109. package/components/tabs/collapsible-tabs.js +4 -8
  110. package/components/tabs/dumb-tabs.js +1 -0
  111. package/components/tabs/tab-link.js +4 -2
  112. package/components/tabs/tabs.css +27 -0
  113. package/components/tabs-ng/tabs-ng.js +4 -2
  114. package/components/tabs-ng/{tabs-ng.html → tabs-ng__template.js} +6 -2
  115. package/components/tag/tag.css +5 -2
  116. package/components/tag/tag.examples.js +3 -0
  117. package/components/tag/tag.js +19 -16
  118. package/components/tags-input/tag-input.examples.js +1 -1
  119. package/components/tags-input/tags-input.js +5 -2
  120. package/components/template-ng/template-ng.js +1 -1
  121. package/components/tooltip/tooltip.js +7 -2
  122. package/components/user-agreement/user-agreement.css +1 -1
  123. package/components/user-agreement/user-agreement.examples.js +7 -4
  124. package/components/user-agreement/user-agreement.js +1 -0
  125. package/dist/_helpers/_rollupPluginBabelHelpers.js +1 -94
  126. package/dist/_helpers/anchor.js +6 -6
  127. package/dist/_helpers/badge.js +1 -1
  128. package/dist/_helpers/button-group.js +3 -0
  129. package/dist/_helpers/button-set.js +3 -0
  130. package/dist/_helpers/button-toolbar.js +3 -0
  131. package/dist/_helpers/button__classes.js +1 -1
  132. package/dist/_helpers/card.js +6 -8
  133. package/dist/_helpers/checkbox.js +3 -0
  134. package/dist/_helpers/date-picker.js +1 -1
  135. package/dist/_helpers/dialog__body-scroll-preventer.js +3 -2
  136. package/dist/_helpers/error-message.js +3 -0
  137. package/dist/_helpers/footer.js +121 -0
  138. package/dist/_helpers/grid.js +1 -1
  139. package/dist/_helpers/group.js +3 -0
  140. package/dist/_helpers/header.js +1 -1
  141. package/dist/_helpers/icon.js +3 -0
  142. package/dist/_helpers/inject-styles.js +1 -1
  143. package/dist/_helpers/input.js +3 -0
  144. package/dist/_helpers/island.js +1 -1
  145. package/dist/_helpers/link.js +3 -0
  146. package/dist/_helpers/list.js +1 -1
  147. package/dist/_helpers/loader-screen.js +3 -0
  148. package/dist/_helpers/panel.js +3 -0
  149. package/dist/_helpers/query-assist__suggestions.js +1 -1
  150. package/dist/_helpers/radio.js +3 -0
  151. package/dist/_helpers/select__filter.js +6 -8
  152. package/dist/_helpers/services-link.js +6 -8
  153. package/dist/_helpers/sidebar.js +6 -8
  154. package/dist/_helpers/table.js +1 -1
  155. package/dist/_helpers/tabs.js +1 -1
  156. package/dist/_helpers/title.js +1 -1
  157. package/dist/alert/alert.js +15 -9
  158. package/dist/alert/container.js +7 -9
  159. package/dist/alert-service/alert-service.js +24 -13
  160. package/dist/analytics/analytics.js +2 -2
  161. package/dist/analytics/analytics__custom-plugin.js +1 -1
  162. package/dist/analytics/analytics__fus-plugin.js +2 -2
  163. package/dist/analytics/analytics__ga-plugin.js +1 -1
  164. package/dist/analytics/analytics__plugin-utils.js +1 -1
  165. package/dist/analytics-ng/analytics-ng.js +94 -0
  166. package/dist/auth/auth.js +7 -4
  167. package/dist/auth/auth__core.js +86 -48
  168. package/dist/auth/background-flow.js +1 -2
  169. package/dist/auth/down-notification.js +6 -3
  170. package/dist/auth/iframe-flow.js +5 -2
  171. package/dist/auth/landing-entry.js +1 -1
  172. package/dist/auth/landing.js +5 -2
  173. package/dist/auth/request-builder.js +1 -1
  174. package/dist/auth/response-parser.js +1 -1
  175. package/dist/auth/storage.js +3 -2
  176. package/dist/auth/token-validator.js +1 -1
  177. package/dist/auth/window-flow.js +1 -1
  178. package/dist/auth-dialog/auth-dialog.js +5 -3
  179. package/dist/auth-dialog-service/auth-dialog-service.js +6 -5
  180. package/dist/auth-ng/auth-ng.js +203 -0
  181. package/dist/auth-ng/auth-ng.mock.js +33 -0
  182. package/dist/autofocus-ng/autofocus-ng.js +50 -0
  183. package/dist/avatar/avatar.js +36 -30
  184. package/dist/avatar/fallback-avatar.js +141 -0
  185. package/dist/avatar-editor-ng/avatar-editor-ng.js +164 -0
  186. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +30 -0
  187. package/dist/avatar-ng/avatar-ng.js +18 -0
  188. package/dist/badge/badge.js +6 -8
  189. package/dist/badge-ng/badge-ng.js +16 -0
  190. package/dist/breadcrumb-ng/breadcrumb-ng.js +61 -0
  191. package/dist/button/button.js +16 -10
  192. package/dist/button-group/button-group.js +4 -4
  193. package/dist/button-group/caption.js +24 -5
  194. package/dist/button-group-ng/button-group-ng.js +38 -0
  195. package/dist/button-ng/button-ng.js +223 -0
  196. package/dist/button-set/button-set.js +3 -4
  197. package/dist/button-set-ng/button-set-ng.js +19 -0
  198. package/dist/button-toolbar/button-toolbar.js +3 -4
  199. package/dist/button-toolbar-ng/button-toolbar-ng.js +23 -0
  200. package/dist/caret/caret.js +1 -1
  201. package/dist/checkbox/checkbox.js +9 -11
  202. package/dist/checkbox-ng/checkbox-ng.js +55 -0
  203. package/dist/code/code.js +136 -0
  204. package/dist/compiler-ng/compiler-ng.js +53 -0
  205. package/dist/confirm/confirm.js +6 -3
  206. package/dist/confirm-ng/confirm-ng.js +66 -0
  207. package/dist/confirm-service/confirm-service.js +12 -10
  208. package/dist/content-layout/content-layout.js +6 -8
  209. package/dist/contenteditable/contenteditable.js +13 -16
  210. package/dist/data-list/data-list.js +10 -7
  211. package/dist/data-list/data-list.mock.js +2 -2
  212. package/dist/data-list/item.js +5 -3
  213. package/dist/data-list/selection.js +1 -1
  214. package/dist/data-list/title.js +3 -1
  215. package/dist/data-list-ng/data-list-ng.js +59 -0
  216. package/dist/date-picker/consts.js +1 -2
  217. package/dist/date-picker/date-input.js +10 -6
  218. package/dist/date-picker/date-picker.js +38 -29
  219. package/dist/date-picker/date-popup.js +51 -28
  220. package/dist/date-picker/day.js +2 -2
  221. package/dist/date-picker/formats.js +1 -1
  222. package/dist/date-picker/month-names.js +16 -9
  223. package/dist/date-picker/month-slider.js +2 -2
  224. package/dist/date-picker/month.js +13 -7
  225. package/dist/date-picker/months.js +3 -3
  226. package/dist/date-picker/weekdays.js +12 -4
  227. package/dist/date-picker/years.js +2 -2
  228. package/dist/dialog/dialog.js +13 -10
  229. package/dist/dialog/dialog__body-scroll-preventer.js +1 -1
  230. package/dist/dialog-ng/dialog-ng.js +601 -0
  231. package/dist/dialog-ng/dialog-ng__template.js +71 -0
  232. package/dist/docked-panel-ng/docked-panel-ng.js +170 -0
  233. package/dist/dropdown/anchor.js +2 -1
  234. package/dist/dropdown/dropdown.js +8 -10
  235. package/dist/dropdown-menu/dropdown-menu.js +175 -0
  236. package/dist/error-bubble/error-bubble.js +7 -9
  237. package/dist/error-message/error-message.js +4 -4
  238. package/dist/error-message-ng/error-message-ng.js +53 -0
  239. package/dist/footer/footer.js +6 -122
  240. package/dist/footer-ng/footer-ng.js +75 -0
  241. package/dist/form-ng/form-ng.js +169 -0
  242. package/dist/global/angular-component-factory.js +1 -2
  243. package/dist/global/compose.js +1 -1
  244. package/dist/global/composeRefs.js +1 -1
  245. package/dist/global/conic-gradient.js +3 -5
  246. package/dist/global/create-stateful-context.js +1 -1
  247. package/dist/global/data-tests.js +1 -1
  248. package/dist/global/focus-sensor-hoc.js +9 -11
  249. package/dist/global/fuzzy-highlight.js +1 -1
  250. package/dist/global/get-event-key.js +1 -1
  251. package/dist/global/get-uid.js +1 -1
  252. package/dist/global/linear-function.js +1 -2
  253. package/dist/global/listeners.js +1 -1
  254. package/dist/global/memoize.js +1 -1
  255. package/dist/global/normalize-indent.js +1 -1
  256. package/dist/global/promise-with-timeout.js +1 -1
  257. package/dist/global/radial-gradient-mask.js +1 -1
  258. package/dist/global/react-dom-renderer.js +1 -1
  259. package/dist/global/rerender-hoc.js +3 -5
  260. package/dist/global/ring-angular-component.js +1 -1
  261. package/dist/global/schedule-raf.js +1 -1
  262. package/dist/global/sniffer.js +1 -1
  263. package/dist/global/supports-css.js +1 -1
  264. package/dist/global/theme.js +6 -8
  265. package/dist/global/trivial-template-tag.js +1 -1
  266. package/dist/global/variables_dark.js +1 -1
  267. package/dist/grid/col.js +6 -8
  268. package/dist/grid/grid.js +5 -7
  269. package/dist/grid/row.js +6 -8
  270. package/dist/group/group.js +7 -10
  271. package/dist/group-ng/group-ng.js +11 -0
  272. package/dist/header/header.js +29 -26
  273. package/dist/header/logo.js +8 -9
  274. package/dist/header/profile.js +37 -32
  275. package/dist/header/services-link.js +1 -0
  276. package/dist/header/services.js +10 -9
  277. package/dist/header/smart-profile.js +27 -24
  278. package/dist/header/smart-services.js +10 -9
  279. package/dist/header/tray-icon.js +12 -12
  280. package/dist/header/tray.js +6 -8
  281. package/dist/heading/heading.js +9 -12
  282. package/dist/http/http.js +37 -37
  283. package/dist/http/http.mock.js +4 -4
  284. package/dist/hub-source/hub-source.js +1 -1
  285. package/dist/hub-source/hub-source__users-groups.js +1 -1
  286. package/dist/icon/icon.js +8 -8
  287. package/dist/icon/icon__svg.js +81 -6
  288. package/dist/icon/index.js +2 -1
  289. package/dist/icon-ng/icon-ng.js +89 -0
  290. package/dist/input/input.js +9 -12
  291. package/dist/input-ng/input-ng.js +166 -0
  292. package/dist/island/adaptive-island-hoc.js +1 -2
  293. package/dist/island/content.js +6 -8
  294. package/dist/island/header.js +6 -8
  295. package/dist/island/island.js +6 -9
  296. package/dist/island-legacy/content-legacy.js +6 -8
  297. package/dist/island-legacy/header-legacy.js +6 -8
  298. package/dist/island-legacy/island-legacy.js +6 -8
  299. package/dist/island-ng/island-content-ng.js +56 -0
  300. package/dist/island-ng/island-header-ng.js +32 -0
  301. package/dist/island-ng/island-ng-class-fixer.js +9 -0
  302. package/dist/island-ng/island-ng.js +31 -0
  303. package/dist/link/clickableLink.js +6 -8
  304. package/dist/link/link.js +7 -11
  305. package/dist/link-ng/link-ng.js +25 -0
  306. package/dist/list/list.js +25 -13
  307. package/dist/list/list__custom.js +13 -10
  308. package/dist/list/list__hint.js +1 -1
  309. package/dist/list/list__item.js +20 -13
  310. package/dist/list/list__link.js +11 -12
  311. package/dist/list/list__separator.js +1 -1
  312. package/dist/list/list__title.js +1 -1
  313. package/dist/list/list__users-groups-source.js +11 -7
  314. package/dist/loader/loader.js +6 -8
  315. package/dist/loader/loader__core.js +2 -2
  316. package/dist/loader-inline/inject-styles.js +1 -1
  317. package/dist/loader-inline/loader-inline.js +6 -8
  318. package/dist/loader-inline-ng/loader-inline-ng.js +42 -0
  319. package/dist/loader-ng/loader-ng.js +43 -0
  320. package/dist/loader-screen/loader-screen.js +7 -10
  321. package/dist/loader-screen-ng/loader-screen-ng.js +99 -0
  322. package/dist/login-dialog/login-dialog.js +5 -3
  323. package/dist/login-dialog/service.js +7 -5
  324. package/dist/markdown/code.js +30 -0
  325. package/dist/markdown/heading.js +23 -0
  326. package/dist/markdown/link.js +30 -0
  327. package/dist/markdown/markdown.js +73 -0
  328. package/dist/message/message.js +5 -4
  329. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  330. package/dist/old-browsers-message/old-browsers-message.js +0 -1
  331. package/dist/old-browsers-message/old-browsers-message__stop.js +0 -1
  332. package/dist/old-browsers-message/white-list.js +4 -5
  333. package/dist/pager/pager.js +18 -9
  334. package/dist/pager-ng/pager-ng.js +96 -0
  335. package/dist/panel/panel.js +7 -10
  336. package/dist/panel-ng/panel-ng.js +16 -0
  337. package/dist/permissions/permissions.js +1 -1
  338. package/dist/permissions/permissions__cache.js +1 -1
  339. package/dist/permissions-ng/permissions-ng.js +274 -0
  340. package/dist/place-under-ng/place-under-ng.js +157 -0
  341. package/dist/popup/popup.js +8 -8
  342. package/dist/popup/popup.target.js +4 -5
  343. package/dist/popup/position.js +1 -2
  344. package/dist/popup-menu/popup-menu.js +21 -14
  345. package/dist/progress-bar/progress-bar.js +12 -10
  346. package/dist/progress-bar-ng/progress-bar-ng.js +15 -0
  347. package/dist/promised-click-ng/promised-click-ng.js +126 -0
  348. package/dist/proxy-attrs/proxy-attrs.js +1 -1
  349. package/dist/query-assist/query-assist.js +97 -28
  350. package/dist/query-assist/query-assist__suggestions.js +5 -1
  351. package/dist/query-assist-ng/query-assist-ng.js +82 -0
  352. package/dist/radio/radio.js +7 -5
  353. package/dist/radio/radio__item.js +10 -15
  354. package/dist/radio-ng/radio-ng.js +63 -0
  355. package/dist/save-field-ng/save-field-ng.js +335 -0
  356. package/dist/save-field-ng/save-field-ng__template.js +34 -0
  357. package/dist/select/select.js +50 -49
  358. package/dist/select/select__filter.js +6 -1
  359. package/dist/select/select__popup.js +8 -3
  360. package/dist/select-ng/select-ng.js +621 -0
  361. package/dist/select-ng/select-ng__lazy.js +150 -0
  362. package/dist/select-ng/select-ng__options.js +145 -0
  363. package/dist/shortcuts/core.js +2 -2
  364. package/dist/shortcuts/shortcuts-hoc.js +6 -8
  365. package/dist/shortcuts/shortcuts.js +6 -6
  366. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +120 -0
  367. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +50 -0
  368. package/dist/shortcuts-ng/shortcuts-ng.js +261 -0
  369. package/dist/sidebar-ng/sidebar-ng.js +111 -0
  370. package/dist/sidebar-ng/sidebar-ng__button-template.js +20 -0
  371. package/dist/sidebar-ng/sidebar-ng__template.js +12 -0
  372. package/dist/storage/storage.js +3 -2
  373. package/dist/storage/storage__fallback.js +1 -1
  374. package/dist/storage/storage__local.js +3 -2
  375. package/dist/style.css +1 -1
  376. package/dist/tab-trap/tab-trap.js +7 -9
  377. package/dist/table/cell.js +2 -2
  378. package/dist/table/disable-hover-hoc.js +2 -2
  379. package/dist/table/header-cell.js +8 -9
  380. package/dist/table/header.js +5 -3
  381. package/dist/table/multitable.js +1 -1
  382. package/dist/table/row-with-focus-sensor.js +5 -3
  383. package/dist/table/row.js +11 -10
  384. package/dist/table/selection-adapter.js +1 -1
  385. package/dist/table/selection-shortcuts-hoc.js +8 -6
  386. package/dist/table/selection.js +1 -1
  387. package/dist/table/smart-table.js +14 -8
  388. package/dist/table/table.js +10 -11
  389. package/dist/table-legacy-ng/table-legacy-ng.js +501 -0
  390. package/dist/table-legacy-ng/table-legacy-ng__pager.js +122 -0
  391. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  392. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  393. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +56 -0
  394. package/dist/table-ng/smart-table-ng.js +65 -0
  395. package/dist/table-ng/table-ng.js +64 -0
  396. package/dist/tabs/collapsible-more.js +9 -6
  397. package/dist/tabs/collapsible-tab.js +7 -7
  398. package/dist/tabs/collapsible-tabs.js +18 -19
  399. package/dist/tabs/dumb-tabs.js +12 -9
  400. package/dist/tabs/smart-tabs.js +11 -9
  401. package/dist/tabs/tab-link.js +13 -7
  402. package/dist/tabs/tab.js +1 -1
  403. package/dist/tabs/tabs.js +5 -1
  404. package/dist/tabs-ng/tabs-ng.js +193 -0
  405. package/dist/tabs-ng/tabs-ng__template.js +40 -0
  406. package/dist/tag/tag.js +20 -14
  407. package/dist/tags-input/tags-input.js +14 -10
  408. package/dist/tags-input-ng/tags-input-ng.js +89 -0
  409. package/dist/tags-list/tags-list.js +8 -9
  410. package/dist/template-ng/template-ng.js +70 -0
  411. package/dist/text/text.js +7 -9
  412. package/dist/theme-ng/theme-ng.js +44 -0
  413. package/dist/title-ng/title-ng.js +114 -0
  414. package/dist/toggle/toggle.js +8 -11
  415. package/dist/toggle-ng/toggle-ng.js +16 -0
  416. package/dist/tooltip/tooltip.js +14 -12
  417. package/dist/tooltip-ng/tooltip-ng.js +98 -0
  418. package/dist/user-agreement/service.js +409 -0
  419. package/dist/user-agreement/toolbox.eula.js +162 -0
  420. package/dist/user-agreement/user-agreement.js +167 -0
  421. package/dist/user-card/card.js +3 -0
  422. package/dist/user-card/smart-user-card-tooltip.js +14 -14
  423. package/dist/user-card/tooltip.js +9 -7
  424. package/dist/user-card/user-card.js +5 -2
  425. package/dist/user-card-ng/user-card-ng.js +59 -0
  426. package/package.json +81 -79
  427. package/webpack.config.js +14 -10
  428. package/components/button-set-ng/button-set-ng.html +0 -1
  429. package/components/footer-ng/footer-ng.html +0 -13
  430. package/components/form-ng/form-ng__error-bubble.html +0 -3
  431. package/components/table-legacy-ng/table-legacy-ng.html +0 -4
  432. package/components/table-legacy-ng/table-legacy-ng__column.html +0 -12
  433. package/components/table-legacy-ng/table-legacy-ng__header.html +0 -4
  434. package/components/table-legacy-ng/table-legacy-ng__pager.html +0 -7
  435. package/components/table-legacy-ng/table-legacy-ng__row.html +0 -12
  436. package/components/table-legacy-ng/table-legacy-ng__title.html +0 -9
  437. package/dist/_helpers/caption.js +0 -25
  438. package/dist/_helpers/icon__svg.js +0 -83
@@ -1,4 +1,4 @@
1
- import { _ as _defineProperty, a as _objectWithoutProperties, b as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
1
+ import { _ as _defineProperty, a as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
2
2
  import React, { PureComponent } from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import PropTypes from 'prop-types';
@@ -29,7 +29,8 @@ import '@jetbrains/icons/chevron-10px';
29
29
  import '../icon/icon.js';
30
30
  import 'util-deprecate';
31
31
  import '../icon/icon__constants.js';
32
- import '../_helpers/icon__svg.js';
32
+ import '../_helpers/icon.js';
33
+ import '../icon/icon__svg.js';
33
34
  import '../global/memoize.js';
34
35
  import '../global/theme.js';
35
36
  import '../link/clickableLink.js';
@@ -105,8 +106,7 @@ class Dialog extends PureComponent {
105
106
  }
106
107
 
107
108
  render() {
108
- const _this$props = this.props,
109
- {
109
+ const {
110
110
  show,
111
111
  showCloseButton,
112
112
  onOverlayClick,
@@ -119,10 +119,10 @@ class Dialog extends PureComponent {
119
119
  trapFocus,
120
120
  'data-test': dataTest,
121
121
  closeButtonInside,
122
- portalTarget
123
- } = _this$props,
124
- restProps = _objectWithoutProperties(_this$props, ["show", "showCloseButton", "onOverlayClick", "onCloseAttempt", "onEscPress", "onCloseClick", "children", "className", "contentClassName", "trapFocus", "data-test", "closeButtonInside", "portalTarget"]);
125
-
122
+ portalTarget,
123
+ label,
124
+ ...restProps
125
+ } = this.props;
126
126
  const classes = classNames(modules_5e9b8c03.container, className);
127
127
  const shortcutsMap = this.getShortcutsMap();
128
128
  return show && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(PopupTarget, {
@@ -147,7 +147,8 @@ class Dialog extends PureComponent {
147
147
  }, /*#__PURE__*/React.createElement(AdaptiveIsland, {
148
148
  className: classNames(modules_5e9b8c03.content, contentClassName),
149
149
  "data-test": "ring-dialog",
150
- role: "dialog"
150
+ role: "dialog",
151
+ "aria-label": label
151
152
  }, children, showCloseButton && /*#__PURE__*/React.createElement(Button, {
152
153
  icon: closeIcon,
153
154
  "data-test": "ring-dialog-close-button",
@@ -164,6 +165,7 @@ class Dialog extends PureComponent {
164
165
  }
165
166
 
166
167
  _defineProperty(Dialog, "propTypes", {
168
+ label: PropTypes.string,
167
169
  className: PropTypes.string,
168
170
  contentClassName: PropTypes.string,
169
171
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
@@ -184,6 +186,7 @@ _defineProperty(Dialog, "propTypes", {
184
186
  });
185
187
 
186
188
  _defineProperty(Dialog, "defaultProps", {
189
+ label: 'Dialog',
187
190
  onOverlayClick: noop,
188
191
  onEscPress: noop,
189
192
  onCloseClick: noop,
@@ -194,4 +197,4 @@ _defineProperty(Dialog, "defaultProps", {
194
197
  autoFocusFirst: true
195
198
  });
196
199
 
197
- export default Dialog;
200
+ export { Dialog as default };
@@ -1,2 +1,2 @@
1
1
  import 'scrollbar-width';
2
- export { p as default } from '../_helpers/dialog__body-scroll-preventer.js';
2
+ export { d as default, p as preventerFactory } from '../_helpers/dialog__body-scroll-preventer.js';
@@ -0,0 +1,601 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import angular from 'angular';
3
+ import { createFocusTrap } from 'focus-trap';
4
+ import { getStyles, getRect } from '../global/dom.js';
5
+ import RingAngularComponent from '../global/ring-angular-component.js';
6
+ import shortcutsInstance from '../shortcuts/core.js';
7
+ import ButtonNG from '../button-ng/button-ng.js';
8
+ import PromisedClick from '../promised-click-ng/promised-click-ng.js';
9
+ import rgCompilerModuleName from '../compiler-ng/compiler-ng.js';
10
+ import { m as modules_5e9b8c03, p as preventerFactory } from '../_helpers/dialog__body-scroll-preventer.js';
11
+ import { m as modules_e6a056e1 } from '../_helpers/island.js';
12
+ import dialogTemplate from './dialog-ng__template.js';
13
+ import 'combokeys';
14
+ import '../global/sniffer.js';
15
+ import 'sniffr';
16
+ import 'classnames';
17
+ import '../icon-ng/icon-ng.js';
18
+ import '../icon/icon__constants.js';
19
+ import '../template-ng/template-ng.js';
20
+ import '../_helpers/icon.js';
21
+ import '../global/theme.js';
22
+ import 'react';
23
+ import '../_helpers/button__classes.js';
24
+ import 'scrollbar-width';
25
+
26
+ var modules_b378ce5a = {"unit":"8px","dialogContainer":"dialogContainer_rui_1466","wide":"wide_rui_1466","autoWidth":"autoWidth_rui_1466","header":"header_rui_1466","inSidebar":"inSidebar_rui_1466","scrollableWrapper":"scrollableWrapper_rui_1466","content":"content_rui_1466","error":"error_rui_1466","footer":"footer_rui_1466","footerDescription":"footerDescription_rui_1466","footerItems":"footerItems_rui_1466","footerItem":"footerItem_rui_1466"};
27
+
28
+ rgDialogContentDirective.$inject = ["$compile", "$q"];
29
+ rgDialogDirective.$inject = ["$timeout"];
30
+ /**
31
+ * @name Dialog Ng
32
+ */
33
+
34
+ const angularModule = angular.module('Ring.dialog', [ButtonNG, PromisedClick, rgCompilerModuleName]);
35
+
36
+ class DialogController extends RingAngularComponent {
37
+ constructor() {
38
+ super(...arguments);
39
+
40
+ _defineProperty(this, "hide", () => {
41
+ if (!this.inSidebar) {
42
+ this.scrollPreventer.reset();
43
+ }
44
+
45
+ this.active = false;
46
+ this.content = '';
47
+ this.focusTrap.deactivate();
48
+ Reflect.deleteProperty(this, 'DIALOG_NAMESPACE');
49
+
50
+ if (shortcutsInstance.indexOfScope(this.dialogService.DIALOG_NAMESPACE) > -1) {
51
+ shortcutsInstance.setScope(this.currentShortcutsScope);
52
+ }
53
+
54
+ this._resetFormState();
55
+
56
+ this.$inject.$scope.$broadcast('dialog.hide');
57
+ });
58
+
59
+ _defineProperty(this, "serverErrorFields", []);
60
+
61
+ this.styles = modules_b378ce5a;
62
+ this.dialogStyles = modules_5e9b8c03;
63
+ this.islandStyles = modules_e6a056e1;
64
+ this.scrollPreventer = preventerFactory();
65
+ this.$inject.$q((resolve, reject) => {
66
+ this.resolve = resolve;
67
+ this.reject = reject;
68
+ });
69
+ }
70
+
71
+ $onInit() {
72
+ const {
73
+ dialog,
74
+ dialogInSidebar,
75
+ $scope
76
+ } = this.$inject;
77
+ const dialogService = this.inSidebar ? dialogInSidebar : dialog;
78
+ this.focusTrap = createFocusTrap(this.$inject.$element[0], {
79
+ fallbackFocus: '[data-anchor="focus-trap-fallback"]',
80
+ escapeDeactivates: false
81
+ });
82
+ this.dialogService = dialogService;
83
+ this.previousBodyWidth = null;
84
+ $scope.$on('$routeChangeSuccess', this.hide);
85
+ $scope.$on('$routeUpdate', this.hide);
86
+ $scope.$on('$destroy', dialogService.unregister);
87
+ $scope.$watch(() => this.active, () => {
88
+ if (this.active) {
89
+ shortcutsInstance.bindMap(this.getShortcuts(), {
90
+ scope: this.DIALOG_NAMESPACE
91
+ });
92
+ } else {
93
+ this.reset();
94
+ }
95
+ });
96
+ dialogService.register(this);
97
+ }
98
+
99
+ getShortcuts() {
100
+ const defaultEscHandler = function escHandler() {
101
+ this.active = false;
102
+ this.focusTrap.deactivate();
103
+ this.$inject.$scope.$apply();
104
+ }.bind(this);
105
+
106
+ const dialogShortcuts = {
107
+ esc: defaultEscHandler,
108
+ enter: this.applyDefaultHandler(false),
109
+ 'mod+enter': this.applyDefaultHandler(true)
110
+ };
111
+ angular.extend(dialogShortcuts, this.shortcuts);
112
+
113
+ if (this.shortcuts && this.shortcuts.esc) {
114
+ /**
115
+ * Merge ESC handler
116
+ * @type {Function} {dialogShortcuts.esc}
117
+ */
118
+ const customHandler = dialogShortcuts.esc;
119
+
120
+ dialogShortcuts.esc = () => {
121
+ const result = customHandler();
122
+ defaultEscHandler();
123
+ return result;
124
+ };
125
+ }
126
+
127
+ return dialogShortcuts;
128
+ }
129
+
130
+ handleClick(event) {
131
+ const isOverlayClicked = event.target === event.currentTarget;
132
+
133
+ if (this.inSidebar || !this.closeOnClick || !isOverlayClicked) {
134
+ return;
135
+ }
136
+
137
+ this.hide();
138
+ }
139
+
140
+ setTitle(title) {
141
+ this.title = title;
142
+ }
143
+
144
+ compileTemplate() {
145
+ if (this.config.data) {
146
+ const element = angular.element(this.template);
147
+ return {
148
+ element,
149
+ link: this.$inject.$compile(element)
150
+ };
151
+ }
152
+
153
+ return this.$inject.rgCompiler(this.config).catch(error => {
154
+ this.reject(error);
155
+ return this.$inject.$q.reject(error);
156
+ });
157
+ }
158
+
159
+ show(config) {
160
+ const {
161
+ $q,
162
+ $scope
163
+ } = this.$inject;
164
+
165
+ if (!this.inSidebar) {
166
+ this.scrollPreventer.prevent();
167
+
168
+ if (config && config.trapFocus === true) {
169
+ this.focusTrap.activate();
170
+ }
171
+ }
172
+
173
+ if (this.active) {
174
+ this.reset();
175
+ } // Clear dialog errors
176
+
177
+
178
+ this.error = null;
179
+
180
+ if (this.dialogForm) {
181
+ this.dialogForm.$setPristine();
182
+ }
183
+
184
+ if (config) {
185
+ this.title = config.title;
186
+ this.buttons = config.buttons;
187
+ this.data = config.data || {};
188
+ this.wideDialog = config.wideDialog;
189
+ this.autoWidth = config.autoWidth;
190
+ this.scrollableWrapperClassName = config.scrollableWrapperClassName;
191
+ this.cssClass = config.cssClass || '';
192
+ this.shortcuts = config.shortcuts;
193
+ this.content = config.content;
194
+ this.template = config.template;
195
+ this.config = config;
196
+ this.description = config.description && config.description.split('\n') || [];
197
+ this.closeOnClick = config.closeOnClick; // Backward compatibility with existing templates which use data directly from scope
198
+
199
+ $scope.data = this.data;
200
+ }
201
+
202
+ this.currentShortcutsScope = shortcutsInstance.getScope();
203
+ this.DIALOG_NAMESPACE = this.dialogService.DIALOG_NAMESPACE;
204
+ shortcutsInstance.setScope(this.dialogService.DIALOG_NAMESPACE);
205
+ this.active = true;
206
+ $scope.$broadcast('dialog.show');
207
+ return $q((resolve, reject) => {
208
+ this.resolve = resolve;
209
+ this.reject = reject;
210
+ });
211
+ }
212
+
213
+ update() {
214
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
215
+ Object.assign(this.data, config.data);
216
+ Object.assign(this.buttons, config.buttons);
217
+ }
218
+
219
+ _resetFormState() {
220
+ const dialogForm = this.dialogForm;
221
+
222
+ if (!dialogForm) {
223
+ return;
224
+ }
225
+
226
+ dialogForm.$setPristine();
227
+ dialogForm.$setUntouched();
228
+ dialogForm.$valid = true;
229
+ dialogForm.$invalid = false;
230
+ dialogForm.$error = {};
231
+ }
232
+
233
+ done(result) {
234
+ this.resetPosition();
235
+ this.resolve(result);
236
+ this.hide();
237
+ }
238
+
239
+ reset(result) {
240
+ this.done(result);
241
+ }
242
+
243
+ getErrorMessage(errorResponse) {
244
+ var _errorResponse$data, _errorResponse$data2;
245
+
246
+ if (errorResponse !== null && errorResponse !== void 0 && (_errorResponse$data = errorResponse.data) !== null && _errorResponse$data !== void 0 && _errorResponse$data.error_description) {
247
+ return errorResponse.data.error_description;
248
+ }
249
+
250
+ if (errorResponse !== null && errorResponse !== void 0 && (_errorResponse$data2 = errorResponse.data) !== null && _errorResponse$data2 !== void 0 && _errorResponse$data2.error) {
251
+ return errorResponse.data.error;
252
+ }
253
+
254
+ return errorResponse;
255
+ }
256
+
257
+ getFieldErrorMessage(errorResponse) {
258
+ if (errorResponse && errorResponse.data && errorResponse.data.error) {
259
+ return errorResponse.data.error;
260
+ }
261
+
262
+ return null;
263
+ }
264
+
265
+ action(button) {
266
+ if (button.inProgress) {
267
+ return undefined;
268
+ }
269
+
270
+ const errorReporter = errorResponse => {
271
+ const errorField = errorResponse && errorResponse.data && errorResponse.data.error_field;
272
+
273
+ if (errorField && this.dialogForm[errorField]) {
274
+ this.dialogForm[errorField].$invalid = true;
275
+ this.dialogForm[errorField].$error[errorField] = [{
276
+ message: this.getFieldErrorMessage(errorResponse)
277
+ }];
278
+ this.serverErrorFields.push(errorField);
279
+ } else {
280
+ this.error = this.$inject.$sce.trustAsHtml(this.getErrorMessage(errorResponse));
281
+ }
282
+ };
283
+
284
+ if (button.action) {
285
+ if (!button.keepServerErrors) {
286
+ this.serverErrorFields.forEach(errorField => {
287
+ this.dialogForm[errorField].$invalid = false;
288
+ this.dialogForm[errorField].$error = {};
289
+ });
290
+ this.serverErrorFields = [];
291
+ }
292
+
293
+ const actionResult = button.action(this.data, button, errorReporter, this.dialogForm, this.buttons);
294
+ button.inProgress = true;
295
+ return this.$inject.$q.resolve(actionResult).then(res => {
296
+ const dontClose = res === false;
297
+
298
+ if (!dontClose && button.close !== false) {
299
+ this.done(res);
300
+ }
301
+ }).catch(errorReporter).finally(() => {
302
+ button.inProgress = false;
303
+ });
304
+ } else if (button.close !== false) {
305
+ this.reset(false);
306
+ }
307
+
308
+ return undefined;
309
+ }
310
+
311
+ applyDefaultHandler(isTextAreaShortcut) {
312
+ return event => {
313
+ if (event.target.matches('textarea') !== isTextAreaShortcut || event.target.matches('button')) {
314
+ return;
315
+ }
316
+
317
+ event.stopPropagation();
318
+ event.preventDefault();
319
+
320
+ if (this.dialogForm.$valid && this.buttons) {
321
+ for (const button of this.buttons) {
322
+ if (button.default && !button.hidden && !button.disabled) {
323
+ this.action(button);
324
+ this.$inject.$scope.$apply();
325
+ return;
326
+ }
327
+ }
328
+ }
329
+ };
330
+ }
331
+
332
+ }
333
+
334
+ DialogController.$inject = [];
335
+
336
+ _defineProperty(DialogController, "$inject", ['$scope', '$q', 'dialog', '$element', 'dialogInSidebar', '$compile', '$injector', '$controller', 'rgCompiler', '$sce']);
337
+
338
+ class DialogService extends RingAngularComponent {
339
+ constructor() {
340
+ super(...arguments); // Binding proxy methods to a service instance
341
+
342
+ _defineProperty(this, "DIALOG_NAMESPACE", 'ring-dialog');
343
+
344
+ _defineProperty(this, "fallbackDialog", null);
345
+
346
+ _defineProperty(this, "unregister", () => {
347
+ Reflect.deleteProperty(this, 'ctrl');
348
+ });
349
+
350
+ ['show', 'hide', 'update', 'done', 'reset'].forEach(key => {
351
+ this[key] = function methodWrapper() {
352
+ if (this.ctrl) {
353
+ return this.ctrl[key](...arguments);
354
+ } else if (this.fallbackDialog) {
355
+ return this.fallbackDialog[key](...arguments);
356
+ } else {
357
+ this.$inject.$log.error('No dialog directive is found');
358
+ return undefined;
359
+ }
360
+ }.bind(this);
361
+ });
362
+ }
363
+
364
+ register(ctrl) {
365
+ this.ctrl = ctrl;
366
+ }
367
+
368
+ }
369
+
370
+ DialogService.$inject = [];
371
+
372
+ _defineProperty(DialogService, "$inject", ['$log']);
373
+
374
+ class DialogInSidebarService extends DialogService {
375
+ constructor() {
376
+ super(...arguments);
377
+
378
+ _defineProperty(this, "DIALOG_NAMESPACE", 'ring-dialog-in-sidebar');
379
+
380
+ this.fallbackDialog = this.$inject.dialog;
381
+ }
382
+
383
+ }
384
+
385
+ DialogInSidebarService.$inject = [];
386
+
387
+ _defineProperty(DialogInSidebarService, "$inject", [...DialogService.$inject, 'dialog']);
388
+
389
+ function rgDialogDirective($timeout) {
390
+ function link(scope, iElement, iAttrs, dialogCtrl) {
391
+ const node = iElement[0];
392
+ const dialogContainer = node.querySelector('*[data-anchor=dialog-container]');
393
+ const dialogHeader = node.querySelector('*[data-anchor=dialog-header]');
394
+ const dialogCustomFooter = node.querySelector('*[data-anchor=dialog-custom-footer-container]'); // Left for backward compatibility with existing templates that use data directly from scope
395
+
396
+ scope.dialogForm = dialogCtrl.dialogForm;
397
+
398
+ function setPosition(top, left) {
399
+ Object.assign(dialogContainer.style, {
400
+ top: `${top}px`,
401
+ left: `${left}px`
402
+ });
403
+ } // Focus first input
404
+
405
+
406
+ function focusFirst() {
407
+ const controls = Array.from(node.querySelectorAll('input,select,button,textarea,*[contentEditable=true]')).filter(inputNode => getStyles(inputNode).display !== 'none');
408
+
409
+ if (controls.length) {
410
+ controls[0].focus();
411
+ }
412
+ }
413
+
414
+ function onMousemove(e) {
415
+ e.preventDefault();
416
+ const pageHeight = window.innerHeight;
417
+ const pageWidth = window.innerWidth;
418
+ const clearance = 10;
419
+ const maxTop = pageHeight - clearance;
420
+ const maxLeft = pageWidth - clearance;
421
+ const newTop = getRect(dialogHeader).top + e.movementY;
422
+ const newLeft = getRect(dialogHeader).left + e.movementX;
423
+
424
+ if (newTop > maxTop || newTop < clearance) {
425
+ return;
426
+ }
427
+
428
+ if (newLeft > maxLeft || newLeft < clearance) {
429
+ return;
430
+ }
431
+
432
+ const offsetY = parseFloat(dialogContainer.style.top) || 0;
433
+ const offsetX = parseFloat(dialogContainer.style.left) || 0;
434
+ setPosition(offsetY + e.movementY, offsetX + e.movementX);
435
+ }
436
+
437
+ function onMouseup() {
438
+ document.removeEventListener('mousemove', onMousemove);
439
+ document.removeEventListener('mouseup', onMouseup);
440
+ }
441
+
442
+ function onMousedown() {
443
+ if (!dialogCtrl.inSidebar) {
444
+ // Duct tape for all Ring 1.0 dropdown components inside
445
+ node.dispatchEvent(new CustomEvent('ring.popup-close'));
446
+ document.addEventListener('mousemove', onMousemove);
447
+ document.addEventListener('mouseup', onMouseup);
448
+ }
449
+ }
450
+
451
+ function onFocusin(e) {
452
+ if (!node.contains(e.target) && e.target.classList.contains('ring-popup')) {
453
+ e.preventDefault();
454
+ focusFirst();
455
+ }
456
+ }
457
+
458
+ function setCustomFooter(customFooterElem) {
459
+ const placeholder = angular.element(dialogCustomFooter);
460
+ const footer = angular.element(`<div class="${this.styles.footer}"></div>`).append(customFooterElem);
461
+ placeholder.empty();
462
+ placeholder.append(footer);
463
+ }
464
+
465
+ dialogCtrl.resetPosition = () => dialogContainer.removeAttribute('style');
466
+
467
+ dialogCtrl.setCustomFooter = setCustomFooter;
468
+ dialogHeader.addEventListener('mousedown', onMousedown);
469
+ document.addEventListener('focusin', onFocusin);
470
+ scope.$on('rgDialogContentLoaded', () => $timeout(focusFirst)); // Backward compatibility for youtrack (if they are using "content" property)
471
+ // which is actually ng-include with $includeContentLoaded event in the end
472
+
473
+ scope.$on('$includeContentLoaded', () => $timeout(focusFirst));
474
+ scope.$on('dialog.hide', () => {
475
+ angular.element(dialogCustomFooter).empty();
476
+ });
477
+ scope.$on('$destroy', () => {
478
+ dialogHeader.removeEventListener('mousedown', onMousedown);
479
+ document.removeEventListener('mousemove', onMousemove);
480
+ document.removeEventListener('mouseup', onMouseup);
481
+ document.removeEventListener('focusin', onFocusin);
482
+ window.removeEventListener('resize', setPosition);
483
+ });
484
+ }
485
+
486
+ return {
487
+ scope: {},
488
+ controller: DialogController,
489
+ bindToController: {
490
+ inSidebar: '@?',
491
+ active: '=?'
492
+ },
493
+ replace: true,
494
+ template: dialogTemplate,
495
+ controllerAs: 'dialog',
496
+ link
497
+ };
498
+ }
499
+
500
+ function rgDialogTitleDirective() {
501
+ function link(scope, iElement, iAttrs, dialogCtrl) {
502
+ dialogCtrl.setTitle(scope.title);
503
+ }
504
+
505
+ return {
506
+ scope: {
507
+ title: '@rgDialogTitle'
508
+ },
509
+ require: '^rgDialog',
510
+ link
511
+ };
512
+ }
513
+
514
+ function rgDialogFooterDirective() {
515
+ function link(scope, iElement, iAttrs, dialogCtrl, transclude) {
516
+ scope.$on('rgDialogContentLoaded', () => {
517
+ transclude(scope, clone => {
518
+ dialogCtrl.setCustomFooter(clone);
519
+ });
520
+ });
521
+ }
522
+
523
+ return {
524
+ require: '^rgDialog',
525
+ transclude: true,
526
+ link
527
+ };
528
+ }
529
+
530
+ function rgDialogContentDirective($compile, $q) {
531
+ return {
532
+ link: function link(scope, iElement) {
533
+ const element = iElement[0];
534
+ let contentScope;
535
+
536
+ function createIncludeNode() {
537
+ const node = document.createElement('ng-include');
538
+ node.setAttribute('src', 'dialog.content');
539
+ return node;
540
+ }
541
+
542
+ function isOldDataAPI() {
543
+ return scope.dialog.config.data;
544
+ }
545
+
546
+ function compileContent() {
547
+ contentScope = scope.$new();
548
+
549
+ if (angular.isDefined(scope.dialog.content)) {
550
+ const templateNode = angular.element(createIncludeNode());
551
+ element.appendChild(templateNode[0]);
552
+ return $compile(templateNode)(contentScope)[0];
553
+ }
554
+
555
+ return $q.when(scope.dialog.compileTemplate()).then(compiledData => {
556
+ const templateScope = isOldDataAPI() ? contentScope : scope.dialog.config.scope || contentScope; // XXX(maksimrv): We should put element to directive
557
+ // before link because some directives (shortcuts)
558
+ // depends from global directives (shortcuts-app)
559
+
560
+ angular.element(element).append(compiledData.element);
561
+ compiledData.link(templateScope);
562
+ scope.$broadcast('rgDialogContentLoaded');
563
+ }).catch(angular.noop);
564
+ }
565
+
566
+ function destroy() {
567
+ function cleanupElement(_element) {
568
+ while (_element.childNodes.length) {
569
+ // XXX(maksimrv): We should use jQuery.remove method because
570
+ // AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires $destroy event
571
+ // on all DOM nodes being removed.
572
+ // This can be used to clean up bindings to the DOM
573
+ // element before it is removed.
574
+ angular.element(_element.childNodes[0]).remove();
575
+ }
576
+ }
577
+
578
+ if (contentScope) {
579
+ contentScope.$destroy();
580
+ cleanupElement(element);
581
+ }
582
+ }
583
+
584
+ scope.$on('dialog.hide', destroy);
585
+ scope.$on('dialog.show', () => {
586
+ destroy();
587
+ compileContent();
588
+ });
589
+ }
590
+ };
591
+ }
592
+
593
+ angularModule.directive('rgDialog', rgDialogDirective);
594
+ angularModule.directive('rgDialogTitle', rgDialogTitleDirective);
595
+ angularModule.directive('rgDialogFooter', rgDialogFooterDirective);
596
+ angularModule.directive('rgDialogContent', rgDialogContentDirective);
597
+ angularModule.service('dialog', DialogService);
598
+ angularModule.service('dialogInSidebar', DialogInSidebarService);
599
+ var DialogNg = angularModule.name;
600
+
601
+ export { DialogNg as default };