@igo2/common 1.8.1 → 1.9.3

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 (344) hide show
  1. package/bundles/igo2-common.umd.js +10700 -10473
  2. package/bundles/igo2-common.umd.js.map +1 -1
  3. package/esm2015/igo2-common.js +5 -5
  4. package/esm2015/lib/action/action.module.js +29 -28
  5. package/esm2015/lib/action/actionbar/actionbar-item.component.js +257 -257
  6. package/esm2015/lib/action/actionbar/actionbar.component.js +385 -387
  7. package/esm2015/lib/action/actionbar/actionbar.module.js +59 -58
  8. package/esm2015/lib/action/index.js +3 -3
  9. package/esm2015/lib/action/shared/action.enums.js +7 -7
  10. package/esm2015/lib/action/shared/action.interfaces.js +2 -1
  11. package/esm2015/lib/action/shared/index.js +4 -4
  12. package/esm2015/lib/action/shared/store.js +8 -8
  13. package/esm2015/lib/backdrop/backdrop.component.js +30 -30
  14. package/esm2015/lib/backdrop/backdrop.module.js +25 -24
  15. package/esm2015/lib/backdrop/index.js +2 -2
  16. package/esm2015/lib/badge-icon/badge-icon.directive.js +125 -121
  17. package/esm2015/lib/badge-icon/badge-icon.module.js +26 -25
  18. package/esm2015/lib/badge-icon/index.js +2 -2
  19. package/esm2015/lib/clickout/clickout.directive.js +32 -32
  20. package/esm2015/lib/clickout/clickout.module.js +24 -23
  21. package/esm2015/lib/clickout/index.js +2 -2
  22. package/esm2015/lib/clone/clone.module.js +24 -23
  23. package/esm2015/lib/clone/clone.pipe.js +24 -24
  24. package/esm2015/lib/clone/index.js +2 -2
  25. package/esm2015/lib/collapsible/collapse.directive.js +55 -55
  26. package/esm2015/lib/collapsible/collapsible.component.js +63 -63
  27. package/esm2015/lib/collapsible/collapsible.module.js +27 -26
  28. package/esm2015/lib/collapsible/index.js +3 -3
  29. package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +50 -51
  30. package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +29 -28
  31. package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +22 -23
  32. package/esm2015/lib/confirm-dialog/index.js +3 -3
  33. package/esm2015/lib/context-menu/context-menu.directive.js +135 -89
  34. package/esm2015/lib/context-menu/context-menu.module.js +24 -23
  35. package/esm2015/lib/context-menu/index.js +2 -2
  36. package/esm2015/lib/custom-html/custom-html.component.js +32 -32
  37. package/esm2015/lib/custom-html/custom-html.module.js +49 -48
  38. package/esm2015/lib/custom-html/custom-html.pipe.js +18 -19
  39. package/esm2015/lib/custom-html/index.js +3 -3
  40. package/esm2015/lib/drag-drop/drag-drop.directive.js +88 -88
  41. package/esm2015/lib/drag-drop/drag-drop.module.js +24 -23
  42. package/esm2015/lib/drag-drop/index.js +2 -2
  43. package/esm2015/lib/dynamic-component/dynamic-component.module.js +33 -32
  44. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +124 -125
  45. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +30 -29
  46. package/esm2015/lib/dynamic-component/index.js +3 -3
  47. package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +2 -1
  48. package/esm2015/lib/dynamic-component/shared/dynamic-component.js +174 -174
  49. package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +29 -29
  50. package/esm2015/lib/dynamic-component/shared/index.js +4 -4
  51. package/esm2015/lib/entity/entity-selector/entity-selector.component.js +201 -202
  52. package/esm2015/lib/entity/entity-selector/entity-selector.module.js +34 -33
  53. package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +137 -137
  54. package/esm2015/lib/entity/entity-table/entity-table.component.js +912 -916
  55. package/esm2015/lib/entity/entity-table/entity-table.module.js +77 -76
  56. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +138 -140
  57. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +2 -1
  58. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +30 -29
  59. package/esm2015/lib/entity/entity.module.js +33 -32
  60. package/esm2015/lib/entity/index.js +6 -6
  61. package/esm2015/lib/entity/shared/entity.enums.js +27 -27
  62. package/esm2015/lib/entity/shared/entity.interfaces.js +2 -1
  63. package/esm2015/lib/entity/shared/entity.utils.js +67 -67
  64. package/esm2015/lib/entity/shared/index.js +10 -10
  65. package/esm2015/lib/entity/shared/state.js +191 -191
  66. package/esm2015/lib/entity/shared/store.js +288 -288
  67. package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +79 -79
  68. package/esm2015/lib/entity/shared/strategies/filter-selection.js +84 -84
  69. package/esm2015/lib/entity/shared/strategies/index.js +4 -4
  70. package/esm2015/lib/entity/shared/strategies/strategy.js +75 -75
  71. package/esm2015/lib/entity/shared/transaction.js +316 -316
  72. package/esm2015/lib/entity/shared/view.js +315 -315
  73. package/esm2015/lib/entity/shared/watcher.js +120 -120
  74. package/esm2015/lib/flexible/flexible.component.js +158 -159
  75. package/esm2015/lib/flexible/flexible.module.js +24 -23
  76. package/esm2015/lib/flexible/flexible.type.js +2 -1
  77. package/esm2015/lib/flexible/index.js +3 -3
  78. package/esm2015/lib/form/form/form.component.js +125 -125
  79. package/esm2015/lib/form/form/form.module.js +42 -41
  80. package/esm2015/lib/form/form-field/form-field-select.component.js +132 -132
  81. package/esm2015/lib/form/form-field/form-field-text.component.js +108 -108
  82. package/esm2015/lib/form/form-field/form-field-textarea.component.js +110 -110
  83. package/esm2015/lib/form/form-field/form-field.component.js +77 -78
  84. package/esm2015/lib/form/form-field/form-field.module.js +76 -75
  85. package/esm2015/lib/form/form-field/index.js +5 -5
  86. package/esm2015/lib/form/form-group/form-group.component.js +110 -110
  87. package/esm2015/lib/form/form-group/form-group.module.js +42 -41
  88. package/esm2015/lib/form/form.module.js +51 -50
  89. package/esm2015/lib/form/index.js +5 -5
  90. package/esm2015/lib/form/shared/form-field-component.js +7 -7
  91. package/esm2015/lib/form/shared/form-field.service.js +29 -29
  92. package/esm2015/lib/form/shared/form.interfaces.js +2 -1
  93. package/esm2015/lib/form/shared/form.service.js +77 -77
  94. package/esm2015/lib/form/shared/form.utils.js +40 -40
  95. package/esm2015/lib/form/shared/index.js +6 -6
  96. package/esm2015/lib/home-button/home-button.component.js +35 -0
  97. package/esm2015/lib/home-button/home-button.module.js +43 -0
  98. package/esm2015/lib/home-button/index.js +2 -0
  99. package/esm2015/lib/image/image.module.js +24 -23
  100. package/esm2015/lib/image/index.js +2 -2
  101. package/esm2015/lib/image/secure-image.pipe.js +48 -51
  102. package/esm2015/lib/interactive-tour/index.js +5 -5
  103. package/esm2015/lib/interactive-tour/interactive-tour.component.js +140 -142
  104. package/esm2015/lib/interactive-tour/interactive-tour.interface.js +2 -1
  105. package/esm2015/lib/interactive-tour/interactive-tour.loader.js +44 -46
  106. package/esm2015/lib/interactive-tour/interactive-tour.module.js +42 -41
  107. package/esm2015/lib/interactive-tour/interactive-tour.service.js +285 -288
  108. package/esm2015/lib/json-dialog/index.js +3 -3
  109. package/esm2015/lib/json-dialog/json-dialog.component.js +116 -117
  110. package/esm2015/lib/json-dialog/json-dialog.module.js +29 -28
  111. package/esm2015/lib/json-dialog/json-dialog.service.js +24 -25
  112. package/esm2015/lib/keyvalue/index.js +2 -2
  113. package/esm2015/lib/keyvalue/keyvalue.module.js +24 -23
  114. package/esm2015/lib/keyvalue/keyvalue.pipe.js +18 -18
  115. package/esm2015/lib/list/index.js +3 -3
  116. package/esm2015/lib/list/list-item.directive.js +165 -165
  117. package/esm2015/lib/list/list.component.js +266 -266
  118. package/esm2015/lib/list/list.module.js +29 -28
  119. package/esm2015/lib/panel/index.js +2 -2
  120. package/esm2015/lib/panel/panel.component.js +67 -67
  121. package/esm2015/lib/panel/panel.module.js +19 -18
  122. package/esm2015/lib/sidenav/index.js +2 -2
  123. package/esm2015/lib/sidenav/sidenav-shim.directive.js +55 -56
  124. package/esm2015/lib/sidenav/sidenav.module.js +24 -23
  125. package/esm2015/lib/spinner/index.js +3 -3
  126. package/esm2015/lib/spinner/spinner-activity.directive.js +47 -49
  127. package/esm2015/lib/spinner/spinner.component.js +40 -40
  128. package/esm2015/lib/spinner/spinner.module.js +21 -20
  129. package/esm2015/lib/stop-propagation/index.js +3 -3
  130. package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +22 -22
  131. package/esm2015/lib/stop-propagation/stop-propagation.directive.js +21 -21
  132. package/esm2015/lib/stop-propagation/stop-propagation.module.js +25 -24
  133. package/esm2015/lib/table/index.js +6 -6
  134. package/esm2015/lib/table/table-action-color.enum.js +7 -7
  135. package/esm2015/lib/table/table-database.js +28 -28
  136. package/esm2015/lib/table/table-datasource.js +61 -61
  137. package/esm2015/lib/table/table-model.interface.js +2 -1
  138. package/esm2015/lib/table/table.component.js +310 -311
  139. package/esm2015/lib/table/table.module.js +69 -68
  140. package/esm2015/lib/tool/index.js +3 -3
  141. package/esm2015/lib/tool/shared/index.js +6 -6
  142. package/esm2015/lib/tool/shared/tool-component.js +9 -9
  143. package/esm2015/lib/tool/shared/tool.interface.js +2 -1
  144. package/esm2015/lib/tool/shared/tool.service.js +43 -43
  145. package/esm2015/lib/tool/shared/toolbox.enums.js +7 -7
  146. package/esm2015/lib/tool/shared/toolbox.js +179 -179
  147. package/esm2015/lib/tool/tool.module.js +34 -33
  148. package/esm2015/lib/tool/toolbox/toolbox.animation.js +10 -10
  149. package/esm2015/lib/tool/toolbox/toolbox.component.js +261 -262
  150. package/esm2015/lib/tool/toolbox/toolbox.module.js +38 -37
  151. package/esm2015/lib/widget/index.js +3 -3
  152. package/esm2015/lib/widget/shared/index.js +4 -4
  153. package/esm2015/lib/widget/shared/widget.interfaces.js +2 -1
  154. package/esm2015/lib/widget/shared/widget.js +4 -4
  155. package/esm2015/lib/widget/shared/widget.service.js +20 -21
  156. package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +121 -122
  157. package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +34 -33
  158. package/esm2015/lib/widget/widget.module.js +34 -33
  159. package/esm2015/lib/workspace/index.js +4 -4
  160. package/esm2015/lib/workspace/shared/index.js +4 -4
  161. package/esm2015/lib/workspace/shared/store.js +40 -40
  162. package/esm2015/lib/workspace/shared/workspace.interfaces.js +2 -1
  163. package/esm2015/lib/workspace/shared/workspace.js +117 -117
  164. package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +54 -55
  165. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +34 -33
  166. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +93 -94
  167. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +34 -33
  168. package/esm2015/lib/workspace/workspace.module.js +29 -28
  169. package/esm2015/public_api.js +72 -70
  170. package/fesm2015/igo2-common.js +9015 -8846
  171. package/fesm2015/igo2-common.js.map +1 -1
  172. package/igo2-common.d.ts +5 -5
  173. package/lib/action/action.module.d.ts +8 -7
  174. package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
  175. package/lib/action/actionbar/actionbar.component.d.ts +146 -146
  176. package/lib/action/actionbar/actionbar.module.d.ts +20 -19
  177. package/lib/action/index.d.ts +2 -2
  178. package/lib/action/shared/action.enums.d.ts +5 -5
  179. package/lib/action/shared/action.interfaces.d.ts +17 -17
  180. package/lib/action/shared/index.d.ts +3 -3
  181. package/lib/action/shared/store.d.ts +8 -8
  182. package/lib/backdrop/backdrop.component.d.ts +9 -9
  183. package/lib/backdrop/backdrop.module.d.ts +10 -9
  184. package/lib/backdrop/index.d.ts +1 -1
  185. package/lib/badge-icon/badge-icon.directive.d.ts +32 -27
  186. package/lib/badge-icon/badge-icon.module.d.ts +11 -10
  187. package/lib/badge-icon/index.d.ts +1 -1
  188. package/lib/clickout/clickout.directive.d.ts +10 -10
  189. package/lib/clickout/clickout.module.d.ts +9 -8
  190. package/lib/clickout/index.d.ts +1 -1
  191. package/lib/clone/clone.module.d.ts +9 -8
  192. package/lib/clone/clone.pipe.d.ts +7 -7
  193. package/lib/clone/index.d.ts +1 -1
  194. package/lib/collapsible/collapse.directive.d.ts +19 -19
  195. package/lib/collapsible/collapsible.component.d.ts +13 -13
  196. package/lib/collapsible/collapsible.module.d.ts +12 -11
  197. package/lib/collapsible/index.d.ts +2 -2
  198. package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
  199. package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -11
  200. package/lib/confirm-dialog/confirm-dialog.service.d.ts +10 -10
  201. package/lib/confirm-dialog/index.d.ts +2 -2
  202. package/lib/context-menu/context-menu.directive.d.ts +27 -21
  203. package/lib/context-menu/context-menu.module.d.ts +9 -8
  204. package/lib/context-menu/index.d.ts +1 -1
  205. package/lib/custom-html/custom-html.component.d.ts +9 -9
  206. package/lib/custom-html/custom-html.module.d.ts +16 -15
  207. package/lib/custom-html/custom-html.pipe.d.ts +10 -10
  208. package/lib/custom-html/index.d.ts +2 -2
  209. package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
  210. package/lib/drag-drop/drag-drop.module.d.ts +9 -8
  211. package/lib/drag-drop/index.d.ts +1 -1
  212. package/lib/dynamic-component/dynamic-component.module.d.ts +8 -7
  213. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
  214. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -10
  215. package/lib/dynamic-component/index.d.ts +2 -2
  216. package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
  217. package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
  218. package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
  219. package/lib/dynamic-component/shared/index.d.ts +3 -3
  220. package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
  221. package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -12
  222. package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
  223. package/lib/entity/entity-table/entity-table.component.d.ts +275 -275
  224. package/lib/entity/entity-table/entity-table.module.d.ts +23 -22
  225. package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
  226. package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
  227. package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -10
  228. package/lib/entity/entity.module.d.ts +10 -9
  229. package/lib/entity/index.d.ts +5 -5
  230. package/lib/entity/shared/entity.enums.d.ts +22 -22
  231. package/lib/entity/shared/entity.interfaces.d.ts +88 -88
  232. package/lib/entity/shared/entity.utils.d.ts +49 -49
  233. package/lib/entity/shared/index.d.ts +9 -9
  234. package/lib/entity/shared/state.d.ts +103 -103
  235. package/lib/entity/shared/store.d.ts +176 -176
  236. package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
  237. package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
  238. package/lib/entity/shared/strategies/index.d.ts +3 -3
  239. package/lib/entity/shared/strategies/strategy.d.ts +56 -56
  240. package/lib/entity/shared/transaction.d.ts +168 -168
  241. package/lib/entity/shared/view.d.ts +193 -193
  242. package/lib/entity/shared/watcher.d.ts +72 -72
  243. package/lib/flexible/flexible.component.d.ts +41 -41
  244. package/lib/flexible/flexible.module.d.ts +9 -8
  245. package/lib/flexible/flexible.type.d.ts +2 -2
  246. package/lib/flexible/index.d.ts +2 -2
  247. package/lib/form/form/form.component.d.ts +53 -53
  248. package/lib/form/form/form.module.d.ts +12 -11
  249. package/lib/form/form-field/form-field-select.component.d.ts +48 -48
  250. package/lib/form/form-field/form-field-text.component.d.ts +41 -41
  251. package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
  252. package/lib/form/form-field/form-field.component.d.ts +34 -34
  253. package/lib/form/form-field/form-field.module.d.ts +21 -20
  254. package/lib/form/form-field/index.d.ts +4 -4
  255. package/lib/form/form-group/form-group.component.d.ts +49 -49
  256. package/lib/form/form-group/form-group.module.d.ts +14 -13
  257. package/lib/form/form.module.d.ts +13 -12
  258. package/lib/form/index.d.ts +4 -4
  259. package/lib/form/shared/form-field-component.d.ts +1 -1
  260. package/lib/form/shared/form-field.service.d.ts +19 -19
  261. package/lib/form/shared/form.interfaces.d.ts +57 -57
  262. package/lib/form/shared/form.service.d.ts +15 -15
  263. package/lib/form/shared/form.utils.d.ts +11 -11
  264. package/lib/form/shared/index.d.ts +5 -5
  265. package/lib/home-button/home-button.component.d.ts +9 -0
  266. package/lib/home-button/home-button.module.d.ts +15 -0
  267. package/lib/home-button/index.d.ts +1 -0
  268. package/lib/image/image.module.d.ts +9 -8
  269. package/lib/image/index.d.ts +1 -1
  270. package/lib/image/secure-image.pipe.d.ts +11 -11
  271. package/lib/interactive-tour/index.d.ts +4 -4
  272. package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
  273. package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
  274. package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
  275. package/lib/interactive-tour/interactive-tour.module.d.ts +12 -11
  276. package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
  277. package/lib/json-dialog/index.d.ts +2 -2
  278. package/lib/json-dialog/json-dialog.component.d.ts +13 -13
  279. package/lib/json-dialog/json-dialog.module.d.ts +13 -12
  280. package/lib/json-dialog/json-dialog.service.d.ts +10 -10
  281. package/lib/keyvalue/index.d.ts +1 -1
  282. package/lib/keyvalue/keyvalue.module.d.ts +9 -8
  283. package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
  284. package/lib/list/index.d.ts +2 -2
  285. package/lib/list/list-item.directive.d.ts +43 -43
  286. package/lib/list/list.component.d.ts +51 -51
  287. package/lib/list/list.module.d.ts +14 -13
  288. package/lib/panel/index.d.ts +1 -1
  289. package/lib/panel/panel.component.d.ts +11 -11
  290. package/lib/panel/panel.module.d.ts +8 -7
  291. package/lib/sidenav/index.d.ts +1 -1
  292. package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
  293. package/lib/sidenav/sidenav.module.d.ts +9 -8
  294. package/lib/spinner/index.d.ts +2 -2
  295. package/lib/spinner/spinner-activity.directive.d.ts +32 -32
  296. package/lib/spinner/spinner.component.d.ts +12 -12
  297. package/lib/spinner/spinner.module.d.ts +10 -9
  298. package/lib/stop-propagation/index.d.ts +2 -2
  299. package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
  300. package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
  301. package/lib/stop-propagation/stop-propagation.module.d.ts +10 -9
  302. package/lib/table/index.d.ts +5 -5
  303. package/lib/table/table-action-color.enum.d.ts +5 -5
  304. package/lib/table/table-database.d.ts +10 -10
  305. package/lib/table/table-datasource.d.ts +17 -17
  306. package/lib/table/table-model.interface.d.ts +28 -28
  307. package/lib/table/table.component.d.ts +40 -40
  308. package/lib/table/table.module.d.ts +20 -19
  309. package/lib/tool/index.d.ts +2 -2
  310. package/lib/tool/shared/index.d.ts +5 -5
  311. package/lib/tool/shared/tool-component.d.ts +2 -2
  312. package/lib/tool/shared/tool.interface.d.ts +18 -18
  313. package/lib/tool/shared/tool.service.d.ts +30 -30
  314. package/lib/tool/shared/toolbox.d.ts +95 -95
  315. package/lib/tool/shared/toolbox.enums.d.ts +5 -5
  316. package/lib/tool/tool.module.d.ts +10 -9
  317. package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
  318. package/lib/tool/toolbox/toolbox.component.d.ts +127 -127
  319. package/lib/tool/toolbox/toolbox.module.d.ts +13 -12
  320. package/lib/widget/index.d.ts +2 -2
  321. package/lib/widget/shared/index.d.ts +3 -3
  322. package/lib/widget/shared/widget.d.ts +4 -4
  323. package/lib/widget/shared/widget.interfaces.d.ts +12 -12
  324. package/lib/widget/shared/widget.service.d.ts +10 -10
  325. package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
  326. package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -11
  327. package/lib/widget/widget.module.d.ts +8 -7
  328. package/lib/workspace/index.d.ts +3 -3
  329. package/lib/workspace/shared/index.d.ts +3 -3
  330. package/lib/workspace/shared/store.d.ts +20 -20
  331. package/lib/workspace/shared/workspace.d.ts +108 -108
  332. package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
  333. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +35 -35
  334. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -11
  335. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
  336. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -11
  337. package/lib/workspace/workspace.module.d.ts +9 -8
  338. package/package.json +8 -7
  339. package/public_api.d.ts +68 -66
  340. package/style/common.theming.scss +12 -236
  341. package/style/partial/action.scss +18 -18
  342. package/style/partial/common.variables.scss +8 -8
  343. package/bundles/igo2-common.umd.min.js +0 -17
  344. package/bundles/igo2-common.umd.min.js.map +0 -1
@@ -1,266 +1,266 @@
1
- import { Component, Input, ContentChildren, HostListener, ElementRef } from '@angular/core';
2
- import { ListItemDirective } from './list-item.directive';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/list";
5
- import * as i2 from "../clickout/clickout.directive";
6
- import * as i3 from "@angular/common";
7
- const _c0 = function (a0) { return { "selectable": a0 }; };
8
- const _c1 = ["*"];
9
- export class ListComponent {
10
- constructor(el) {
11
- this.el = el;
12
- this._navigation = true;
13
- this._selection = true;
14
- this.subscriptions = [];
15
- }
16
- get navigation() {
17
- return this._navigation;
18
- }
19
- set navigation(value) {
20
- this._navigation = value;
21
- }
22
- get selection() {
23
- return this._selection;
24
- }
25
- set selection(value) {
26
- this._selection = value;
27
- }
28
- get selectedItem() {
29
- return this._selectedItem;
30
- }
31
- set selectedItem(value) {
32
- this.focusedItem = value;
33
- this._selectedItem = value;
34
- }
35
- get focusedItem() {
36
- return this._focusedItem;
37
- }
38
- set focusedItem(value) {
39
- this._focusedItem = value;
40
- }
41
- handleKeyboardEvent(event) {
42
- // It would be nice to be able to unsubscribe to the event
43
- // completely but until ES7 this won't be possible because
44
- // document events are not observables
45
- if (this.navigationEnabled) {
46
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
47
- event.preventDefault();
48
- this.navigate(event.key);
49
- }
50
- else if (event.key === 'Enter') {
51
- this.select(this.focusedItem);
52
- }
53
- }
54
- }
55
- ngOnInit() {
56
- this.enableNavigation();
57
- }
58
- ngAfterViewInit() {
59
- if (this.listItems.length) {
60
- this.init();
61
- }
62
- this.listItems$$ = this.listItems.changes.subscribe((items) => this.init());
63
- }
64
- ngOnDestroy() {
65
- this.listItems$$.unsubscribe();
66
- }
67
- focus(item) {
68
- if (!this.selection) {
69
- return;
70
- }
71
- this.unfocus();
72
- // We need to make this check because dynamic
73
- // lists such as in the search results list may fail
74
- if (item !== undefined) {
75
- item.focused = true;
76
- }
77
- }
78
- unfocus() {
79
- if (this.focusedItem !== undefined) {
80
- this.focusedItem.focused = false;
81
- }
82
- this.focusedItem = undefined;
83
- }
84
- focusNext() {
85
- const items = this.listItems.toArray();
86
- let item;
87
- const igoList = this.el.nativeElement;
88
- let disabled = true;
89
- let index = this.getFocusedIndex();
90
- if (index === undefined) {
91
- index = -1;
92
- }
93
- while (disabled && index < items.length - 1) {
94
- index += 1;
95
- item = items[index];
96
- disabled = item.disabled;
97
- }
98
- if (item !== undefined) {
99
- this.focus(item);
100
- }
101
- if (!items[index + 1]) {
102
- igoList.scrollTop = igoList.scrollHeight - igoList.clientHeight;
103
- return;
104
- }
105
- if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
106
- igoList.scrollTop =
107
- item.el.nativeElement.offsetTop +
108
- item.el.nativeElement.children[0].offsetHeight -
109
- igoList.clientHeight;
110
- }
111
- }
112
- focusPrevious() {
113
- const items = this.listItems.toArray();
114
- let item;
115
- const igoList = this.el.nativeElement;
116
- let disabled = true;
117
- let index = this.getFocusedIndex();
118
- while (disabled && index > 0) {
119
- index -= 1;
120
- item = items[index];
121
- disabled = item.disabled;
122
- }
123
- if (item !== undefined) {
124
- this.focus(item);
125
- }
126
- if (!items[index - 1]) {
127
- igoList.scrollTop = 0;
128
- return;
129
- }
130
- if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
131
- const padding = 3;
132
- igoList.scrollTop = item.el.nativeElement.offsetTop - padding;
133
- }
134
- }
135
- select(item) {
136
- if (!this.selection) {
137
- return;
138
- }
139
- this.unselect();
140
- if (item !== undefined) {
141
- item.selected = true;
142
- }
143
- }
144
- unselect() {
145
- this.unfocus();
146
- if (this.selectedItem !== undefined) {
147
- this.selectedItem.selected = false;
148
- }
149
- this.selectedItem = undefined;
150
- }
151
- enableNavigation() {
152
- if (this.navigation) {
153
- this.navigationEnabled = true;
154
- }
155
- }
156
- disableNavigation() {
157
- this.navigationEnabled = false;
158
- }
159
- scrollToItem(item) {
160
- this.el.nativeElement.scrollTop = item.getOffsetTop();
161
- }
162
- isScrolledIntoView(elem) {
163
- const docViewTop = this.el.nativeElement.scrollTop + this.el.nativeElement.offsetTop;
164
- const docViewBottom = docViewTop + this.el.nativeElement.clientHeight;
165
- const elemTop = elem.offsetTop;
166
- const elemBottom = elemTop + elem.children[0].offsetHeight;
167
- return elemBottom <= docViewBottom && elemTop >= docViewTop;
168
- }
169
- init() {
170
- this.subscribe();
171
- this.selectedItem = this.findSelectedItem();
172
- this.focusedItem = this.findFocusedItem();
173
- this.enableNavigation();
174
- }
175
- subscribe() {
176
- this.unsubscribe();
177
- this.listItems.toArray().forEach(item => {
178
- this.subscriptions.push(item.beforeSelect.subscribe((item2) => this.handleItemBeforeSelect(item2)));
179
- this.subscriptions.push(item.select.subscribe((item2) => this.handleItemSelect(item2)));
180
- this.subscriptions.push(item.beforeFocus.subscribe((item2) => this.handleItemBeforeFocus(item2)));
181
- this.subscriptions.push(item.focus.subscribe((item2) => this.handleItemFocus(item2)));
182
- }, this);
183
- }
184
- unsubscribe() {
185
- this.subscriptions.forEach((sub) => sub.unsubscribe());
186
- this.subscriptions = [];
187
- }
188
- handleItemBeforeFocus(item) {
189
- if (item !== this.focusedItem) {
190
- this.unfocus();
191
- }
192
- }
193
- handleItemFocus(item) {
194
- this.focusedItem = item;
195
- }
196
- handleItemBeforeSelect(item) {
197
- if (item !== this.focusedItem) {
198
- this.unselect();
199
- }
200
- }
201
- handleItemSelect(item) {
202
- this.selectedItem = item;
203
- }
204
- findSelectedItem() {
205
- return this.listItems.toArray().find(item => item.selected);
206
- }
207
- findFocusedItem() {
208
- return this.listItems.toArray().find(item => item.focused);
209
- }
210
- getFocusedIndex() {
211
- return this.listItems
212
- .toArray()
213
- .findIndex(item => item === this.focusedItem);
214
- }
215
- navigate(key) {
216
- switch (key) {
217
- case 'ArrowUp':
218
- this.focusPrevious();
219
- break;
220
- case 'ArrowDown':
221
- this.focusNext();
222
- break;
223
- default:
224
- break;
225
- }
226
- }
227
- }
228
- ListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
229
- ListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ListComponent, selectors: [["igo-list"]], contentQueries: function ListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
230
- i0.ɵɵcontentQuery(dirIndex, ListItemDirective, true);
231
- } if (rf & 2) {
232
- var _t;
233
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listItems = _t);
234
- } }, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 1) {
235
- i0.ɵɵlistener("keydown", function ListComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument)("enter", function ListComponent_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
236
- } }, inputs: { navigation: "navigation", selection: "selection" }, ngContentSelectors: _c1, decls: 2, vars: 3, consts: [["igoClickout", "", 3, "ngClass", "clickout", "click"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {
237
- i0.ɵɵprojectionDef();
238
- i0.ɵɵelementStart(0, "mat-list", 0);
239
- i0.ɵɵlistener("clickout", function ListComponent_Template_mat_list_clickout_0_listener() { return ctx.disableNavigation(); })("click", function ListComponent_Template_mat_list_click_0_listener() { return ctx.enableNavigation(); });
240
- i0.ɵɵprojection(1);
241
- i0.ɵɵelementEnd();
242
- } if (rf & 2) {
243
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c0, ctx.selection));
244
- } }, directives: [i1.MatList, i2.ClickoutDirective, i3.NgClass], styles: ["[_nghost-%COMP%]{display:block;height:100%;overflow:auto;position:relative}mat-list[_ngcontent-%COMP%]{padding-top:0}[_nghost-%COMP%]{position:static}[_nghost-%COMP%] .mat-list .mat-list-item .mat-list-text>*{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-height:18px;max-height:36px;overflow:hidden;text-overflow:ellipsis;white-space:normal}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar .mat-list-item-content{display:-webkit-flex;height:46px;padding:3px}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar{height:46px}[_nghost-%COMP%] .mat-list igo-collapsible>.mat-list-item>.mat-list-item-content>.mat-list-text>.mat-line{font-weight:700;opacity:.9}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar .mat-list-item-content>mat-icon{padding:8px}[_nghost-%COMP%] [igolistitem] mat-list-item [mat-list-avatar]{height:auto;width:40px}[_nghost-%COMP%] mat-list.selectable[_ngcontent-%COMP%] [igolistitem]:not(.igo-list-item-disabled) mat-list-item:hover{cursor:pointer}[_nghost-%COMP%] [igolistitem]:focus{outline:none}"] });
245
- /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ListComponent, [{
246
- type: Component,
247
- args: [{
248
- selector: 'igo-list',
249
- templateUrl: './list.component.html',
250
- styleUrls: ['./list.component.scss']
251
- }]
252
- }], function () { return [{ type: i0.ElementRef }]; }, { navigation: [{
253
- type: Input
254
- }], selection: [{
255
- type: Input
256
- }], listItems: [{
257
- type: ContentChildren,
258
- args: [ListItemDirective, { descendants: true }]
259
- }], handleKeyboardEvent: [{
260
- type: HostListener,
261
- args: ['document:keydown', ['$event']]
262
- }, {
263
- type: HostListener,
264
- args: ['document:enter', ['$event']]
265
- }] }); })();
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL3Nydi9hcHBzL2lnbzItbGliL3BhY2thZ2VzL2NvbW1vbi9zcmMvIiwic291cmNlcyI6WyJsaWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsImxpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBbkQxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQVNuQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBcUJsQixrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFxQk4sQ0FBQztJQTFEdEMsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FB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QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vbGlzdC1pdGVtLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgZ2V0IG5hdmlnYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XG4gIH1cbiAgc2V0IG5hdmlnYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICB9XG4gIHNldCBzZWxlY3Rpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3Rpb24gPSB0cnVlO1xuXG4gIGdldCBzZWxlY3RlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB2YWx1ZTtcbiAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuXG4gIGdldCBmb2N1c2VkSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9jdXNlZEl0ZW07XG4gIH1cbiAgc2V0IGZvY3VzZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIHRoaXMuX2ZvY3VzZWRJdGVtID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfZm9jdXNlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuXG4gIHByaXZhdGUgbmF2aWdhdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgbGlzdEl0ZW1zJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1EaXJlY3RpdmU+O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDplbnRlcicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmUgdG8gdGhlIGV2ZW50XG4gICAgLy8gY29tcGxldGVseSBidXQgdW50aWwgRVM3IHRoaXMgd29uJ3QgYmUgcG9zc2libGUgYmVjYXVzZVxuICAgIC8vIGRvY3VtZW50IGV2ZW50cyBhcmUgbm90IG9ic2VydmFibGVzXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVuYWJsZWQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubmF2aWdhdGUoZXZlbnQua2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuZm9jdXNlZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0SXRlbXMkJCA9IHRoaXMubGlzdEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW1zOiBMaXN0SXRlbURpcmVjdGl2ZVtdKSA9PiB0aGlzLmluaXQoKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RJdGVtcyQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBmb2N1cyhpdGVtPzogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51bmZvY3VzKCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIG1ha2UgdGhpcyBjaGVjayBiZWNhdXNlIGR5bmFtaWNcbiAgICAvLyBsaXN0cyBzdWNoIGFzIGluIHRoZSBzZWFyY2ggcmVzdWx0cyBsaXN0IG1heSBmYWlsXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlbS5mb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bmZvY3VzKCkge1xuICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEl0ZW0uZm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmb2N1c05leHQoKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XG4gICAgbGV0IGl0ZW07XG4gICAgY29uc3QgaWdvTGlzdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgZGlzYWJsZWQgPSB0cnVlO1xuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluZGV4ID0gLTE7XG4gICAgfVxuXG4gICAgd2hpbGUgKGRpc2FibGVkICYmIGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgaW5kZXggKz0gMTtcbiAgICAgIGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mb2N1cyhpdGVtKTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW1zW2luZGV4ICsgMV0pIHtcbiAgICAgIGlnb0xpc3Quc2Nyb2xsVG9wID0gaWdvTGlzdC5zY3JvbGxIZWlnaHQgLSBpZ29MaXN0LmNsaWVudEhlaWdodDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmlzU2Nyb2xsZWRJbnRvVmlldyhpdGVtLmVsLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9XG4gICAgICAgIGl0ZW0uZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgK1xuICAgICAgICBpdGVtLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0SGVpZ2h0IC1cbiAgICAgICAgaWdvTGlzdC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNQcmV2aW91cygpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKTtcbiAgICBsZXQgaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XG4gICAgY29uc3QgaWdvTGlzdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgZGlzYWJsZWQgPSB0cnVlO1xuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XG5cbiAgICB3aGlsZSAoZGlzYWJsZWQgJiYgaW5kZXggPiAwKSB7XG4gICAgICBpbmRleCAtPSAxO1xuICAgICAgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICAgIGRpc2FibGVkID0gaXRlbS5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvY3VzKGl0ZW0pO1xuICAgIH1cblxuICAgIGlmICghaXRlbXNbaW5kZXggLSAxXSkge1xuICAgICAgaWdvTGlzdC5zY3JvbGxUb3AgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNTY3JvbGxlZEludG9WaWV3KGl0ZW0uZWwubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAzO1xuICAgICAgaWdvTGlzdC5zY3JvbGxUb3AgPSBpdGVtLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wIC0gcGFkZGluZztcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoaXRlbT86IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudW5zZWxlY3QoKTtcblxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMudW5mb2N1cygpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBlbmFibGVOYXZpZ2F0aW9uKCkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb24pIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVOYXZpZ2F0aW9uKCkge1xuICAgIHRoaXMubmF2aWdhdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNjcm9sbFRvSXRlbShpdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBpdGVtLmdldE9mZnNldFRvcCgpO1xuICB9XG5cbiAgaXNTY3JvbGxlZEludG9WaWV3KGVsZW0pIHtcbiAgICBjb25zdCBkb2NWaWV3VG9wID1cbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgIGNvbnN0IGRvY1ZpZXdCb3R0b20gPSBkb2NWaWV3VG9wICsgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgIGNvbnN0IGVsZW1Ub3AgPSBlbGVtLm9mZnNldFRvcDtcbiAgICBjb25zdCBlbGVtQm90dG9tID0gZWxlbVRvcCArIGVsZW0uY2hpbGRyZW5bMF0ub2Zmc2V0SGVpZ2h0O1xuICAgIHJldHVybiBlbGVtQm90dG9tIDw9IGRvY1ZpZXdCb3R0b20gJiYgZWxlbVRvcCA+PSBkb2NWaWV3VG9wO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuZmluZFNlbGVjdGVkSXRlbSgpO1xuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLmZpbmRGb2N1c2VkSXRlbSgpO1xuXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBpdGVtLmJlZm9yZVNlbGVjdC5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1CZWZvcmVTZWxlY3QoaXRlbTIpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBpdGVtLnNlbGVjdC5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1TZWxlY3QoaXRlbTIpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBpdGVtLmJlZm9yZUZvY3VzLnN1YnNjcmliZSgoaXRlbTI6IExpc3RJdGVtRGlyZWN0aXZlKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbUJlZm9yZUZvY3VzKGl0ZW0yKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgaXRlbS5mb2N1cy5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1Gb2N1cyhpdGVtMilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YjogU3Vic2NyaXB0aW9uKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUl0ZW1CZWZvcmVGb2N1cyhpdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIGlmIChpdGVtICE9PSB0aGlzLmZvY3VzZWRJdGVtKSB7XG4gICAgICB0aGlzLnVuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUl0ZW1Gb2N1cyhpdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlU2VsZWN0KGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgaWYgKGl0ZW0gIT09IHRoaXMuZm9jdXNlZEl0ZW0pIHtcbiAgICAgIHRoaXMudW5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUl0ZW1TZWxlY3QoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gIH1cblxuICBwcml2YXRlIGZpbmRTZWxlY3RlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5maW5kKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRGb2N1c2VkSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmZpbmQoaXRlbSA9PiBpdGVtLmZvY3VzZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb2N1c2VkSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zXG4gICAgICAudG9BcnJheSgpXG4gICAgICAuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5mb2N1c2VkSXRlbSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlKGtleTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1saXN0XG4gIGlnb0NsaWNrb3V0XG4gIFtuZ0NsYXNzXT1cInsnc2VsZWN0YWJsZSc6IHNlbGVjdGlvbn1cIlxuICAoY2xpY2tvdXQpPVwiZGlzYWJsZU5hdmlnYXRpb24oKVwiXG4gIChjbGljayk9XCJlbmFibGVOYXZpZ2F0aW9uKClcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9tYXQtbGlzdD5cbiJdfQ==
1
+ import { Component, Input, ContentChildren, HostListener } from '@angular/core';
2
+ import { ListItemDirective } from './list-item.directive';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/list";
5
+ import * as i2 from "../clickout/clickout.directive";
6
+ import * as i3 from "@angular/common";
7
+ const _c0 = function (a0) { return { "selectable": a0 }; };
8
+ const _c1 = ["*"];
9
+ export class ListComponent {
10
+ constructor(el) {
11
+ this.el = el;
12
+ this._navigation = true;
13
+ this._selection = true;
14
+ this.subscriptions = [];
15
+ }
16
+ get navigation() {
17
+ return this._navigation;
18
+ }
19
+ set navigation(value) {
20
+ this._navigation = value;
21
+ }
22
+ get selection() {
23
+ return this._selection;
24
+ }
25
+ set selection(value) {
26
+ this._selection = value;
27
+ }
28
+ get selectedItem() {
29
+ return this._selectedItem;
30
+ }
31
+ set selectedItem(value) {
32
+ this.focusedItem = value;
33
+ this._selectedItem = value;
34
+ }
35
+ get focusedItem() {
36
+ return this._focusedItem;
37
+ }
38
+ set focusedItem(value) {
39
+ this._focusedItem = value;
40
+ }
41
+ handleKeyboardEvent(event) {
42
+ // It would be nice to be able to unsubscribe to the event
43
+ // completely but until ES7 this won't be possible because
44
+ // document events are not observables
45
+ if (this.navigationEnabled) {
46
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
47
+ event.preventDefault();
48
+ this.navigate(event.key);
49
+ }
50
+ else if (event.key === 'Enter') {
51
+ this.select(this.focusedItem);
52
+ }
53
+ }
54
+ }
55
+ ngOnInit() {
56
+ this.enableNavigation();
57
+ }
58
+ ngAfterViewInit() {
59
+ if (this.listItems.length) {
60
+ this.init();
61
+ }
62
+ this.listItems$$ = this.listItems.changes.subscribe((items) => this.init());
63
+ }
64
+ ngOnDestroy() {
65
+ this.listItems$$.unsubscribe();
66
+ }
67
+ focus(item) {
68
+ if (!this.selection) {
69
+ return;
70
+ }
71
+ this.unfocus();
72
+ // We need to make this check because dynamic
73
+ // lists such as in the search results list may fail
74
+ if (item !== undefined) {
75
+ item.focused = true;
76
+ }
77
+ }
78
+ unfocus() {
79
+ if (this.focusedItem !== undefined) {
80
+ this.focusedItem.focused = false;
81
+ }
82
+ this.focusedItem = undefined;
83
+ }
84
+ focusNext() {
85
+ const items = this.listItems.toArray();
86
+ let item;
87
+ const igoList = this.el.nativeElement;
88
+ let disabled = true;
89
+ let index = this.getFocusedIndex();
90
+ if (index === undefined) {
91
+ index = -1;
92
+ }
93
+ while (disabled && index < items.length - 1) {
94
+ index += 1;
95
+ item = items[index];
96
+ disabled = item.disabled;
97
+ }
98
+ if (item !== undefined) {
99
+ this.focus(item);
100
+ }
101
+ if (!items[index + 1]) {
102
+ igoList.scrollTop = igoList.scrollHeight - igoList.clientHeight;
103
+ return;
104
+ }
105
+ if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
106
+ igoList.scrollTop =
107
+ item.el.nativeElement.offsetTop +
108
+ item.el.nativeElement.children[0].offsetHeight -
109
+ igoList.clientHeight;
110
+ }
111
+ }
112
+ focusPrevious() {
113
+ const items = this.listItems.toArray();
114
+ let item;
115
+ const igoList = this.el.nativeElement;
116
+ let disabled = true;
117
+ let index = this.getFocusedIndex();
118
+ while (disabled && index > 0) {
119
+ index -= 1;
120
+ item = items[index];
121
+ disabled = item.disabled;
122
+ }
123
+ if (item !== undefined) {
124
+ this.focus(item);
125
+ }
126
+ if (!items[index - 1]) {
127
+ igoList.scrollTop = 0;
128
+ return;
129
+ }
130
+ if (item !== undefined && !this.isScrolledIntoView(item.el.nativeElement)) {
131
+ const padding = 3;
132
+ igoList.scrollTop = item.el.nativeElement.offsetTop - padding;
133
+ }
134
+ }
135
+ select(item) {
136
+ if (!this.selection) {
137
+ return;
138
+ }
139
+ this.unselect();
140
+ if (item !== undefined) {
141
+ item.selected = true;
142
+ }
143
+ }
144
+ unselect() {
145
+ this.unfocus();
146
+ if (this.selectedItem !== undefined) {
147
+ this.selectedItem.selected = false;
148
+ }
149
+ this.selectedItem = undefined;
150
+ }
151
+ enableNavigation() {
152
+ if (this.navigation) {
153
+ this.navigationEnabled = true;
154
+ }
155
+ }
156
+ disableNavigation() {
157
+ this.navigationEnabled = false;
158
+ }
159
+ scrollToItem(item) {
160
+ this.el.nativeElement.scrollTop = item.getOffsetTop();
161
+ }
162
+ isScrolledIntoView(elem) {
163
+ const docViewTop = this.el.nativeElement.scrollTop + this.el.nativeElement.offsetTop;
164
+ const docViewBottom = docViewTop + this.el.nativeElement.clientHeight;
165
+ const elemTop = elem.offsetTop;
166
+ const elemBottom = elemTop + elem.children[0].offsetHeight;
167
+ return elemBottom <= docViewBottom && elemTop >= docViewTop;
168
+ }
169
+ init() {
170
+ this.subscribe();
171
+ this.selectedItem = this.findSelectedItem();
172
+ this.focusedItem = this.findFocusedItem();
173
+ this.enableNavigation();
174
+ }
175
+ subscribe() {
176
+ this.unsubscribe();
177
+ this.listItems.toArray().forEach(item => {
178
+ this.subscriptions.push(item.beforeSelect.subscribe((item2) => this.handleItemBeforeSelect(item2)));
179
+ this.subscriptions.push(item.select.subscribe((item2) => this.handleItemSelect(item2)));
180
+ this.subscriptions.push(item.beforeFocus.subscribe((item2) => this.handleItemBeforeFocus(item2)));
181
+ this.subscriptions.push(item.focus.subscribe((item2) => this.handleItemFocus(item2)));
182
+ }, this);
183
+ }
184
+ unsubscribe() {
185
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
186
+ this.subscriptions = [];
187
+ }
188
+ handleItemBeforeFocus(item) {
189
+ if (item !== this.focusedItem) {
190
+ this.unfocus();
191
+ }
192
+ }
193
+ handleItemFocus(item) {
194
+ this.focusedItem = item;
195
+ }
196
+ handleItemBeforeSelect(item) {
197
+ if (item !== this.focusedItem) {
198
+ this.unselect();
199
+ }
200
+ }
201
+ handleItemSelect(item) {
202
+ this.selectedItem = item;
203
+ }
204
+ findSelectedItem() {
205
+ return this.listItems.toArray().find(item => item.selected);
206
+ }
207
+ findFocusedItem() {
208
+ return this.listItems.toArray().find(item => item.focused);
209
+ }
210
+ getFocusedIndex() {
211
+ return this.listItems
212
+ .toArray()
213
+ .findIndex(item => item === this.focusedItem);
214
+ }
215
+ navigate(key) {
216
+ switch (key) {
217
+ case 'ArrowUp':
218
+ this.focusPrevious();
219
+ break;
220
+ case 'ArrowDown':
221
+ this.focusNext();
222
+ break;
223
+ default:
224
+ break;
225
+ }
226
+ }
227
+ }
228
+ ListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
229
+ ListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListComponent, selectors: [["igo-list"]], contentQueries: function ListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
230
+ i0.ɵɵcontentQuery(dirIndex, ListItemDirective, 5);
231
+ } if (rf & 2) {
232
+ let _t;
233
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listItems = _t);
234
+ } }, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 1) {
235
+ i0.ɵɵlistener("keydown", function ListComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument)("enter", function ListComponent_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
236
+ } }, inputs: { navigation: "navigation", selection: "selection" }, ngContentSelectors: _c1, decls: 2, vars: 3, consts: [["igoClickout", "", 3, "ngClass", "clickout", "click"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {
237
+ i0.ɵɵprojectionDef();
238
+ i0.ɵɵelementStart(0, "mat-list", 0);
239
+ i0.ɵɵlistener("clickout", function ListComponent_Template_mat_list_clickout_0_listener() { return ctx.disableNavigation(); })("click", function ListComponent_Template_mat_list_click_0_listener() { return ctx.enableNavigation(); });
240
+ i0.ɵɵprojection(1);
241
+ i0.ɵɵelementEnd();
242
+ } if (rf & 2) {
243
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c0, ctx.selection));
244
+ } }, directives: [i1.MatList, i2.ClickoutDirective, i3.NgClass], styles: ["[_nghost-%COMP%]{display:block;height:100%;overflow:auto;position:relative}mat-list[_ngcontent-%COMP%]{padding-top:0}[_nghost-%COMP%]{position:static}[_nghost-%COMP%] .mat-list .mat-list-item .mat-list-text>*{white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;max-height:36px;line-height:18px;-webkit-box-orient:vertical;-webkit-line-clamp:2}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar .mat-list-item-content{display:-webkit-flex;height:46px;padding:3px}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar{height:46px}[_nghost-%COMP%] .mat-list igo-collapsible>.mat-list-item>.mat-list-item-content>.mat-list-text>.mat-line{font-weight:bold;opacity:.9}[_nghost-%COMP%] .mat-list .mat-list-item.mat-list-item-avatar .mat-list-item-content>mat-icon{padding:8px}[_nghost-%COMP%] [igolistitem] mat-list-item [mat-list-avatar]{height:auto;width:40px}[_nghost-%COMP%] mat-list.selectable[_ngcontent-%COMP%] [igolistitem]:not(.igo-list-item-disabled) mat-list-item:hover{cursor:pointer}[_nghost-%COMP%] [igolistitem]:focus{outline:none}"] });
245
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListComponent, [{
246
+ type: Component,
247
+ args: [{
248
+ selector: 'igo-list',
249
+ templateUrl: './list.component.html',
250
+ styleUrls: ['./list.component.scss']
251
+ }]
252
+ }], function () { return [{ type: i0.ElementRef }]; }, { navigation: [{
253
+ type: Input
254
+ }], selection: [{
255
+ type: Input
256
+ }], listItems: [{
257
+ type: ContentChildren,
258
+ args: [ListItemDirective, { descendants: true }]
259
+ }], handleKeyboardEvent: [{
260
+ type: HostListener,
261
+ args: ['document:keydown', ['$event']]
262
+ }, {
263
+ type: HostListener,
264
+ args: ['document:enter', ['$event']]
265
+ }] }); })();
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLGVBQWUsRUFDZixZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLGFBQWE7SUEyRHhCLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBbkQxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQVNuQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBcUJsQixrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFxQk4sQ0FBQztJQTFEdEMsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FB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LFFBQVEsQ0FBQzs7a0JBQzNDLFlBQVk7bUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5wdXQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBFbGVtZW50UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9saXN0LWl0ZW0uZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBnZXQgbmF2aWdhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uO1xyXG4gIH1cclxuICBzZXQgbmF2aWdhdGlvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9uYXZpZ2F0aW9uID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc2VsZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gIGdldCBzZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtO1xyXG4gIH1cclxuICBzZXQgc2VsZWN0ZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XHJcblxyXG4gIGdldCBmb2N1c2VkSXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkSXRlbTtcclxuICB9XHJcbiAgc2V0IGZvY3VzZWRJdGVtKHZhbHVlOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgdGhpcy5fZm9jdXNlZEl0ZW0gPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZm9jdXNlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xyXG5cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmFibGVkOiBib29sZWFuO1xyXG4gIHByaXZhdGUgbGlzdEl0ZW1zJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmVudGVyJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmUgdG8gdGhlIGV2ZW50XHJcbiAgICAvLyBjb21wbGV0ZWx5IGJ1dCB1bnRpbCBFUzcgdGhpcyB3b24ndCBiZSBwb3NzaWJsZSBiZWNhdXNlXHJcbiAgICAvLyBkb2N1bWVudCBldmVudHMgYXJlIG5vdCBvYnNlcnZhYmxlc1xyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGUoZXZlbnQua2V5KTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLmZvY3VzZWRJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmxpc3RJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saXN0SXRlbXMkJCA9IHRoaXMubGlzdEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IExpc3RJdGVtRGlyZWN0aXZlW10pID0+IHRoaXMuaW5pdCgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmxpc3RJdGVtcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cyhpdGVtPzogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5mb2N1cygpO1xyXG5cclxuICAgIC8vIFdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoZWNrIGJlY2F1c2UgZHluYW1pY1xyXG4gICAgLy8gbGlzdHMgc3VjaCBhcyBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgbGlzdCBtYXkgZmFpbFxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpdGVtLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5mb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5mb2N1c2VkSXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGZvY3VzTmV4dCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpO1xyXG4gICAgbGV0IGl0ZW07XHJcbiAgICBjb25zdCBpZ29MaXN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpbmRleCA9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlIChkaXNhYmxlZCAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgaXRlbSA9IGl0ZW1zW2luZGV4XTtcclxuICAgICAgZGlzYWJsZWQgPSBpdGVtLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5mb2N1cyhpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWl0ZW1zW2luZGV4ICsgMV0pIHtcclxuICAgICAgaWdvTGlzdC5zY3JvbGxUb3AgPSBpZ29MaXN0LnNjcm9sbEhlaWdodCAtIGlnb0xpc3QuY2xpZW50SGVpZ2h0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1Njcm9sbGVkSW50b1ZpZXcoaXRlbS5lbC5uYXRpdmVFbGVtZW50KSkge1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9XHJcbiAgICAgICAgaXRlbS5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArXHJcbiAgICAgICAgaXRlbS5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodCAtXHJcbiAgICAgICAgaWdvTGlzdC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1c1ByZXZpb3VzKCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCk7XHJcbiAgICBsZXQgaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XHJcbiAgICBjb25zdCBpZ29MaXN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgbGV0IGRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0Rm9jdXNlZEluZGV4KCk7XHJcblxyXG4gICAgd2hpbGUgKGRpc2FibGVkICYmIGluZGV4ID4gMCkge1xyXG4gICAgICBpbmRleCAtPSAxO1xyXG4gICAgICBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgICBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXRlbXNbaW5kZXggLSAxXSkge1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLmlzU2Nyb2xsZWRJbnRvVmlldyhpdGVtLmVsLm5hdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAzO1xyXG4gICAgICBpZ29MaXN0LnNjcm9sbFRvcCA9IGl0ZW0uZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBwYWRkaW5nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0KGl0ZW0/OiBMaXN0SXRlbURpcmVjdGl2ZSkge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51bnNlbGVjdCgpO1xyXG5cclxuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnNlbGVjdCgpIHtcclxuICAgIHRoaXMudW5mb2N1cygpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbmFibGVOYXZpZ2F0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbikge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVOYXZpZ2F0aW9uKCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9JdGVtKGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gaXRlbS5nZXRPZmZzZXRUb3AoKTtcclxuICB9XHJcblxyXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtKSB7XHJcbiAgICBjb25zdCBkb2NWaWV3VG9wID1cclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgZWxlbVRvcCA9IGVsZW0ub2Zmc2V0VG9wO1xyXG4gICAgY29uc3QgZWxlbUJvdHRvbSA9IGVsZW1Ub3AgKyBlbGVtLmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodDtcclxuICAgIHJldHVybiBlbGVtQm90dG9tIDw9IGRvY1ZpZXdCb3R0b20gJiYgZWxlbVRvcCA+PSBkb2NWaWV3VG9wO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuZmluZFNlbGVjdGVkSXRlbSgpO1xyXG4gICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMuZmluZEZvY3VzZWRJdGVtKCk7XHJcblxyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5iZWZvcmVTZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1CZWZvcmVTZWxlY3QoaXRlbTIpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5zZWxlY3Quc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1TZWxlY3QoaXRlbTIpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgaXRlbS5iZWZvcmVGb2N1cy5zdWJzY3JpYmUoKGl0ZW0yOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT5cclxuICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbUJlZm9yZUZvY3VzKGl0ZW0yKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIGl0ZW0uZm9jdXMuc3Vic2NyaWJlKChpdGVtMjogTGlzdEl0ZW1EaXJlY3RpdmUpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1Gb2N1cyhpdGVtMilcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViOiBTdWJzY3JpcHRpb24pID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIGlmIChpdGVtICE9PSB0aGlzLmZvY3VzZWRJdGVtKSB7XHJcbiAgICAgIHRoaXMudW5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtRm9jdXMoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQmVmb3JlU2VsZWN0KGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XHJcbiAgICBpZiAoaXRlbSAhPT0gdGhpcy5mb2N1c2VkSXRlbSkge1xyXG4gICAgICB0aGlzLnVuc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUl0ZW1TZWxlY3QoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkSXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuZmluZChpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRm9jdXNlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmZpbmQoaXRlbSA9PiBpdGVtLmZvY3VzZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb2N1c2VkSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0SXRlbXNcclxuICAgICAgLnRvQXJyYXkoKVxyXG4gICAgICAuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5mb2N1c2VkSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlKGtleTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LWxpc3RcclxuICBpZ29DbGlja291dFxyXG4gIFtuZ0NsYXNzXT1cInsnc2VsZWN0YWJsZSc6IHNlbGVjdGlvbn1cIlxyXG4gIChjbGlja291dCk9XCJkaXNhYmxlTmF2aWdhdGlvbigpXCJcclxuICAoY2xpY2spPVwiZW5hYmxlTmF2aWdhdGlvbigpXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L21hdC1saXN0PlxyXG4iXX0=