@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,262 +1,261 @@
1
- import { Component, Input, HostBinding, ChangeDetectionStrategy } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { map } from 'rxjs/operators';
4
- import { ActionStore } from '../../action';
5
- import { ToolboxColor } from '../shared/toolbox.enums';
6
- import { Toolbox } from '../shared/toolbox';
7
- import { toolSlideInOut } from './toolbox.animation';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "../../action/actionbar/actionbar.component";
11
- import * as i3 from "../../dynamic-component/dynamic-outlet/dynamic-outlet.component";
12
- function ToolboxComponent_igo_actionbar_0_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "igo-actionbar", 2);
14
- i0.ɵɵpipe(1, "async");
15
- i0.ɵɵpipe(2, "async");
16
- i0.ɵɵpipe(3, "async");
17
- } if (rf & 2) {
18
- const ctx_r0 = i0.ɵɵnextContext();
19
- i0.ɵɵproperty("store", ctx_r0.actionStore)("withIcon", true)("withTitle", i0.ɵɵpipeBind1(1, 6, ctx_r0.toolbarWithTitle$))("withTooltip", !i0.ɵɵpipeBind1(2, 8, ctx_r0.toolbarWithTitle$))("scrollActive", i0.ɵɵpipeBind1(3, 10, ctx_r0.toolbarWithTitle$))("horizontal", false);
20
- } }
21
- const _c0 = function (a0, a1) { return { "igo-tool-container-with-toolbar": a0, "igo-tool-container-with-animation": a1 }; };
22
- function ToolboxComponent_div_2_Template(rf, ctx) { if (rf & 1) {
23
- const _r4 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "div", 3);
25
- i0.ɵɵlistener("@toolSlideInOut.start", function ToolboxComponent_div_2_Template_div_animation_toolSlideInOut_start_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return ctx_r3.onAnimationStart(); })("@toolSlideInOut.done", function ToolboxComponent_div_2_Template_div_animation_toolSlideInOut_done_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.onAnimationComplete(); });
26
- i0.ɵɵpipe(1, "async");
27
- i0.ɵɵelement(2, "igo-dynamic-outlet", 4);
28
- i0.ɵɵelementEnd();
29
- } if (rf & 2) {
30
- const tool_r2 = ctx.ngIf;
31
- const ctx_r1 = i0.ɵɵnextContext();
32
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(6, _c0, !ctx_r1.actionStore.empty, ctx_r1.animate))("@toolSlideInOut", i0.ɵɵpipeBind1(1, 4, ctx_r1.animation$));
33
- i0.ɵɵadvance(2);
34
- i0.ɵɵproperty("component", tool_r2.component)("inputs", ctx_r1.getToolInputs(tool_r2));
35
- } }
36
- export class ToolboxComponent {
37
- constructor() {
38
- /**
39
- * Observable of the active tool
40
- */
41
- this.activeTool$ = new BehaviorSubject(undefined);
42
- /**
43
- * Store of actions that toggle tools
44
- */
45
- this.actionStore = new ActionStore([]);
46
- /**
47
- * Observable of he anmation state
48
- */
49
- this.animation$ = new BehaviorSubject('none');
50
- /**
51
- * Observable of the toolbar
52
- */
53
- this.toolbar$ = new BehaviorSubject([]);
54
- /**
55
- * Whether the Toolbar should display actions' titles
56
- */
57
- this.toolbarWithTitle$ = this.activeTool$.pipe(map((tool) => tool === undefined));
58
- /**
59
- * Observable of the ongoing animation. This is useful when
60
- * multiple animations are triggered at once i.e. when the user clicks
61
- * too fast on different actions
62
- */
63
- this.animating$ = new BehaviorSubject(false);
64
- /**
65
- * Whether the toolbox should animate the first tool entering
66
- */
67
- this.animate = false;
68
- /**
69
- * Color of Toolbox
70
- */
71
- this.color = ToolboxColor.White;
72
- }
73
- /**
74
- * @ignore
75
- */
76
- get classColorGrey() {
77
- return this.color === ToolboxColor.Grey;
78
- }
79
- /**
80
- * @ignore
81
- */
82
- get classColorPrimary() {
83
- return this.color === ToolboxColor.Primary;
84
- }
85
- /**
86
- * Initialize the toolbar and subscribe to the active tool
87
- * @internal
88
- */
89
- ngOnInit() {
90
- this.toolbar$$ = this.toolbox.toolbar$.subscribe((toolbar) => this.onToolbarChange(toolbar));
91
- this.activeTool$$ = this.toolbox.activeTool$.subscribe((tool) => this.onActiveToolChange(tool));
92
- }
93
- /**
94
- * Unsubscribe to the active tool and destroy the action store
95
- * @internal
96
- */
97
- ngOnDestroy() {
98
- this.toolbar$$.unsubscribe();
99
- this.activeTool$$.unsubscribe();
100
- this.actionStore.destroy();
101
- }
102
- /**
103
- * Track the starting animation
104
- * @internal
105
- */
106
- onAnimationStart() {
107
- this.animating$.next(true);
108
- }
109
- /**
110
- * Untrack the completed animation
111
- * @internal
112
- */
113
- onAnimationComplete() {
114
- this.animating$.next(false);
115
- }
116
- /**
117
- * Return a tool's inputs
118
- * @param tool Tool
119
- * @returns Tool inputs
120
- * @internal
121
- */
122
- getToolInputs(tool) {
123
- return tool.options || {};
124
- }
125
- /**
126
- * Initialize an action store
127
- * @param toolbar Toolbar
128
- */
129
- onToolbarChange(toolbar) {
130
- this.setToolbar(toolbar);
131
- }
132
- /**
133
- * Activate a tool and trigger an animation or not
134
- * @param tool Tool to activate
135
- */
136
- onActiveToolChange(tool) {
137
- if (!this.animate) {
138
- this.setActiveTool(tool);
139
- return;
140
- }
141
- this.onAnimate(() => this.setActiveTool(tool));
142
- }
143
- /**
144
- * Set the active tool
145
- * @param tool Tool to activate
146
- */
147
- setActiveTool(tool) {
148
- if (tool === undefined) {
149
- this.actionStore.state.updateAll({ active: false });
150
- }
151
- else {
152
- const action = this.actionStore.get(tool.name);
153
- if (action !== undefined) {
154
- this.actionStore.state.update(action, { active: true }, true);
155
- }
156
- }
157
- this.activeTool$.next(tool);
158
- if (this.animate) {
159
- this.animation$.next('enter');
160
- }
161
- }
162
- /**
163
- * Initialize the toolbar
164
- */
165
- setToolbar(toolbar) {
166
- const actions = toolbar.reduce((acc, toolName) => {
167
- const tool = this.toolbox.getTool(toolName);
168
- if (tool === undefined) {
169
- return acc;
170
- }
171
- acc.push({
172
- id: tool.name,
173
- title: tool.title,
174
- icon: tool.icon,
175
- // iconImage: tool.iconImage,
176
- tooltip: tool.tooltip,
177
- args: [tool, this.toolbox],
178
- handler: (_tool, _toolbox) => {
179
- _toolbox.activateTool(_tool.name);
180
- },
181
- ngClass: (_tool, _toolbox) => {
182
- return this.toolbox.activeTool$.pipe(map((activeTool) => {
183
- let toolActivated = false;
184
- if (activeTool !== undefined && _tool.name === activeTool.name) {
185
- toolActivated = true;
186
- }
187
- let childrenToolActivated = false;
188
- if (activeTool !== undefined &&
189
- _tool.name === activeTool.parent) {
190
- childrenToolActivated = true;
191
- }
192
- return {
193
- 'tool-activated': toolActivated,
194
- 'children-tool-activated': childrenToolActivated
195
- };
196
- }));
197
- }
198
- });
199
- return acc;
200
- }, []);
201
- this.actionStore.load(actions);
202
- this.toolbar$.next(toolbar);
203
- }
204
- /**
205
- * Observe the ongoing animation and ignore any incoming animation
206
- * while one is still ongoing.
207
- * @param callback Callback to execute when the animation completes
208
- */
209
- onAnimate(callback) {
210
- this.unAnimate();
211
- this.animating$$ = this.animating$.subscribe((animation) => {
212
- if (!animation) {
213
- callback.call(this);
214
- this.unAnimate();
215
- }
216
- });
217
- }
218
- /**
219
- * Stop observing an animation when it's complete
220
- */
221
- unAnimate() {
222
- if (this.animating$$) {
223
- this.animating$$.unsubscribe();
224
- }
225
- }
226
- }
227
- ToolboxComponent.ɵfac = function ToolboxComponent_Factory(t) { return new (t || ToolboxComponent)(); };
228
- ToolboxComponent.ɵcmp = i0.ɵɵdefineComponent({ type: ToolboxComponent, selectors: [["igo-toolbox"]], hostVars: 4, hostBindings: function ToolboxComponent_HostBindings(rf, ctx) { if (rf & 2) {
229
- i0.ɵɵclassProp("color-grey", ctx.classColorGrey)("color-primary", ctx.classColorPrimary);
230
- } }, inputs: { toolbox: "toolbox", animate: "animate", color: "color" }, decls: 4, vars: 6, consts: [[3, "store", "withIcon", "withTitle", "withTooltip", "scrollActive", "horizontal", 4, "ngIf"], ["class", "igo-tool-container", 3, "ngClass", 4, "ngIf"], [3, "store", "withIcon", "withTitle", "withTooltip", "scrollActive", "horizontal"], [1, "igo-tool-container", 3, "ngClass"], [3, "component", "inputs"]], template: function ToolboxComponent_Template(rf, ctx) { if (rf & 1) {
231
- i0.ɵɵtemplate(0, ToolboxComponent_igo_actionbar_0_Template, 4, 12, "igo-actionbar", 0);
232
- i0.ɵɵpipe(1, "async");
233
- i0.ɵɵtemplate(2, ToolboxComponent_div_2_Template, 3, 9, "div", 1);
234
- i0.ɵɵpipe(3, "async");
235
- } if (rf & 2) {
236
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(1, 2, ctx.toolbar$).length > 0);
237
- i0.ɵɵadvance(2);
238
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(3, 4, ctx.activeTool$));
239
- } }, directives: [i1.NgIf, i2.ActionbarComponent, i1.NgClass, i3.DynamicOutletComponent], pipes: [i1.AsyncPipe], styles: ["[_nghost-%COMP%]{display:block;height:100%;overflow:hidden;position:relative;width:100%}.igo-tool-container[_ngcontent-%COMP%]{bottom:0;left:0;position:absolute;right:0;top:0}.igo-tool-container-with-animation[_ngcontent-%COMP%]{transform:translate3d(100%,0,0)}.igo-tool-container-with-toolbar[_ngcontent-%COMP%]{left:50px}igo-actionbar[_ngcontent-%COMP%]{height:100%}igo-actionbar.with-title[_ngcontent-%COMP%]{overflow:auto;width:100%}igo-actionbar[_ngcontent-%COMP%]:not(.with-title){-o-box-shadow:2px 0 2px 0 #ddd;box-shadow:2px 0 2px 0 #ddd;overflow:hidden;width:48px}@media only screen and (orientation:landscape) and (max-width:959px),only screen and (orientation:portrait) and (max-width:599px){igo-actionbar[_ngcontent-%COMP%]:not(.with-title){overflow:auto}}igo-dynamic-outlet[_ngcontent-%COMP%]{overflow:auto}"], data: { animation: [toolSlideInOut()] }, changeDetection: 0 });
240
- /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(ToolboxComponent, [{
241
- type: Component,
242
- args: [{
243
- selector: 'igo-toolbox',
244
- templateUrl: 'toolbox.component.html',
245
- styleUrls: ['toolbox.component.scss'],
246
- animations: [toolSlideInOut()],
247
- changeDetection: ChangeDetectionStrategy.OnPush
248
- }]
249
- }], null, { toolbox: [{
250
- type: Input
251
- }], animate: [{
252
- type: Input
253
- }], color: [{
254
- type: Input
255
- }], classColorGrey: [{
256
- type: HostBinding,
257
- args: ['class.color-grey']
258
- }], classColorPrimary: [{
259
- type: HostBinding,
260
- args: ['class.color-primary']
261
- }] }); })();
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL3Nydi9hcHBzL2lnbzItbGliL3BhY2thZ2VzL2NvbW1vbi9zcmMvIiwic291cmNlcyI6WyJsaWIvdG9vbC90b29sYm94L3Rvb2xib3guY29tcG9uZW50LnRzIiwibGliL3Rvb2wvdG9vbGJveC90b29sYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFnQixlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztJQ2hCckQsbUNBUWdCOzs7Ozs7SUFOZCwwQ0FBcUIsa0JBQUEsNkRBQUEsZ0VBQUEsaUVBQUEscUJBQUE7Ozs7O0lBUXZCLDhCQVFFO0lBSEEsZ09BQTRDLG9OQUFBOztJQUc1Qyx3Q0FHcUI7SUFFdkIsaUJBQU07Ozs7SUFWSiwrRkFBaUgsNERBQUE7SUFNL0csZUFBNEI7SUFBNUIsNkNBQTRCLHlDQUFBOztBRE1oQyxNQUFNLE9BQU8sZ0JBQWdCO0lBUDdCO1FBUUU7O1dBRUc7UUFDSCxnQkFBVyxHQUEwQixJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRTs7V0FFRztRQUNILGdCQUFXLEdBQWdCLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRS9DOztXQUVHO1FBQ0gsZUFBVSxHQUE0QixJQUFJ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QUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoQztJQUNILENBQUM7O2dGQWxQVSxnQkFBZ0I7cURBQWhCLGdCQUFnQjs7O1FDekI3QixzRkFRQTs7UUFFQSxpRUFRRTs7O1FBakJBLG9FQUFxQztRQVVyQyxlQUFtQztRQUFuQyw0REFBbUM7MDhCRFd2QixDQUFDLGNBQWMsRUFBRSxDQUFDO2tEQUduQixnQkFBZ0I7Y0FQNUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QixXQUFXLEVBQUUsd0JBQXdCO2dCQUNyQyxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDckMsVUFBVSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO2dCQXNEVSxPQUFPO2tCQUFmLEtBQUs7WUFLRyxPQUFPO2tCQUFmLEtBQUs7WUFLRyxLQUFLO2tCQUFiLEtBQUs7WUFNRixjQUFjO2tCQURqQixXQUFXO21CQUFDLGtCQUFrQjtZQVMzQixpQkFBaUI7a0JBRHBCLFdBQVc7bUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIEhvc3RCaW5kaW5nLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWN0aW9uLCBBY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL2FjdGlvbic7XG5pbXBvcnQgeyBUb29sIH0gZnJvbSAnLi4vc2hhcmVkL3Rvb2wuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRvb2xib3hDb2xvciB9IGZyb20gJy4uL3NoYXJlZC90b29sYm94LmVudW1zJztcbmltcG9ydCB7IFRvb2xib3ggfSBmcm9tICcuLi9zaGFyZWQvdG9vbGJveCc7XG5pbXBvcnQgeyB0b29sU2xpZGVJbk91dCB9IGZyb20gJy4vdG9vbGJveC5hbmltYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tdG9vbGJveCcsXG4gIHRlbXBsYXRlVXJsOiAndG9vbGJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyd0b29sYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFt0b29sU2xpZGVJbk91dCgpXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGFjdGl2ZSB0b29sXG4gICAqL1xuICBhY3RpdmVUb29sJDogQmVoYXZpb3JTdWJqZWN0PFRvb2w+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBvZiBhY3Rpb25zIHRoYXQgdG9nZ2xlIHRvb2xzXG4gICAqL1xuICBhY3Rpb25TdG9yZTogQWN0aW9uU3RvcmUgPSBuZXcgQWN0aW9uU3RvcmUoW10pO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIGhlIGFubWF0aW9uIHN0YXRlXG4gICAqL1xuICBhbmltYXRpb24kOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJ25vbmUnKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgdG9vbGJhclxuICAgKi9cbiAgdG9vbGJhciQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgVG9vbGJhciBzaG91bGQgZGlzcGxheSBhY3Rpb25zJyB0aXRsZXNcbiAgICovXG4gIHRvb2xiYXJXaXRoVGl0bGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5hY3RpdmVUb29sJC5waXBlKFxuICAgIG1hcCgodG9vbDogVG9vbCB8IHVuZGVmaW5lZCkgPT4gdG9vbCA9PT0gdW5kZWZpbmVkKVxuICApO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGFjdGl2ZSB0b29sXG4gICAqL1xuICBwcml2YXRlIGFjdGl2ZVRvb2wkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHRvb2xiYXJcbiAgICovXG4gIHByaXZhdGUgdG9vbGJhciQkOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIG9uZ29pbmcgYW5pbWF0aW9uLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIG11bHRpcGxlIGFuaW1hdGlvbnMgYXJlIHRyaWdnZXJlZCBhdCBvbmNlIGkuZS4gd2hlbiB0aGUgdXNlciBjbGlja3NcbiAgICogdG9vIGZhc3Qgb24gZGlmZmVyZW50IGFjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYW5pbWF0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIG9uZ29pbmcgYW5pbWF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFuaW1hdGluZyQkOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRvb2xib3hcbiAgICovXG4gIEBJbnB1dCgpIHRvb2xib3g6IFRvb2xib3g7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRvb2xib3ggc2hvdWxkIGFuaW1hdGUgdGhlIGZpcnN0IHRvb2wgZW50ZXJpbmdcbiAgICovXG4gIEBJbnB1dCgpIGFuaW1hdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQ29sb3Igb2YgVG9vbGJveFxuICAgKi9cbiAgQElucHV0KCkgY29sb3I6IFRvb2xib3hDb2xvciA9IFRvb2xib3hDb2xvci5XaGl0ZTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2xvci1ncmV5JylcbiAgZ2V0IGNsYXNzQ29sb3JHcmV5KCkge1xuICAgIHJldHVybiB0aGlzLmNvbG9yID09PSBUb29sYm94Q29sb3IuR3JleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbG9yLXByaW1hcnknKVxuICBnZXQgY2xhc3NDb2xvclByaW1hcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sb3IgPT09IFRvb2xib3hDb2xvci5QcmltYXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRvb2xiYXIgYW5kIHN1YnNjcmliZSB0byB0aGUgYWN0aXZlIHRvb2xcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRvb2xiYXIkJCA9IHRoaXMudG9vbGJveC50b29sYmFyJC5zdWJzY3JpYmUoKHRvb2xiYXI6IHN0cmluZ1tdKSA9PlxuICAgICAgdGhpcy5vblRvb2xiYXJDaGFuZ2UodG9vbGJhcilcbiAgICApO1xuICAgIHRoaXMuYWN0aXZlVG9vbCQkID0gdGhpcy50b29sYm94LmFjdGl2ZVRvb2wkLnN1YnNjcmliZSgodG9vbDogVG9vbCkgPT5cbiAgICAgIHRoaXMub25BY3RpdmVUb29sQ2hhbmdlKHRvb2wpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSB0byB0aGUgYWN0aXZlIHRvb2wgYW5kIGRlc3Ryb3kgdGhlIGFjdGlvbiBzdG9yZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudG9vbGJhciQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5hY3RpdmVUb29sJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmFjdGlvblN0b3JlLmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayB0aGUgc3RhcnRpbmcgYW5pbWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25BbmltYXRpb25TdGFydCgpIHtcbiAgICB0aGlzLmFuaW1hdGluZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnRyYWNrIHRoZSBjb21wbGV0ZWQgYW5pbWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25BbmltYXRpb25Db21wbGV0ZSgpIHtcbiAgICB0aGlzLmFuaW1hdGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdG9vbCdzIGlucHV0c1xuICAgKiBAcGFyYW0gdG9vbCBUb29sXG4gICAqIEByZXR1cm5zIFRvb2wgaW5wdXRzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VG9vbElucHV0cyh0b29sOiBUb29sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRvb2wub3B0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGFuIGFjdGlvbiBzdG9yZVxuICAgKiBAcGFyYW0gdG9vbGJhciBUb29sYmFyXG4gICAqL1xuICBwcml2YXRlIG9uVG9vbGJhckNoYW5nZSh0b29sYmFyOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuc2V0VG9vbGJhcih0b29sYmFyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIHRvb2wgYW5kIHRyaWdnZXIgYW4gYW5pbWF0aW9uIG9yIG5vdFxuICAgKiBAcGFyYW0gdG9vbCBUb29sIHRvIGFjdGl2YXRlXG4gICAqL1xuICBwcml2YXRlIG9uQWN0aXZlVG9vbENoYW5nZSh0b29sOiBUb29sKSB7XG4gICAgaWYgKCF0aGlzLmFuaW1hdGUpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlVG9vbCh0b29sKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vbkFuaW1hdGUoKCkgPT4gdGhpcy5zZXRBY3RpdmVUb29sKHRvb2wpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFjdGl2ZSB0b29sXG4gICAqIEBwYXJhbSB0b29sIFRvb2wgdG8gYWN0aXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0QWN0aXZlVG9vbCh0b29sOiBUb29sIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRvb2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hY3Rpb25TdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBhY3RpdmU6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvblN0b3JlLmdldCh0b29sLm5hbWUpO1xuICAgICAgaWYgKGFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uU3RvcmUuc3RhdGUudXBkYXRlKGFjdGlvbiwgeyBhY3RpdmU6IHRydWUgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVUb29sJC5uZXh0KHRvb2wpO1xuICAgIGlmICh0aGlzLmFuaW1hdGUpIHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uJC5uZXh0KCdlbnRlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0b29sYmFyXG4gICAqL1xuICBwcml2YXRlIHNldFRvb2xiYXIodG9vbGJhcjogc3RyaW5nW10pIHtcbiAgICBjb25zdCBhY3Rpb25zID0gdG9vbGJhci5yZWR1Y2UoKGFjYzogQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRvb2wgPSB0aGlzLnRvb2xib3guZ2V0VG9vbCh0b29sTmFtZSk7XG4gICAgICBpZiAodG9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgaWQ6IHRvb2wubmFtZSxcbiAgICAgICAgdGl0bGU6IHRvb2wudGl0bGUsXG4gICAgICAgIGljb246IHRvb2wuaWNvbixcbiAgICAgICAgLy8gaWNvbkltYWdlOiB0b29sLmljb25JbWFnZSxcbiAgICAgICAgdG9vbHRpcDogdG9vbC50b29sdGlwLFxuICAgICAgICBhcmdzOiBbdG9vbCwgdGhpcy50b29sYm94XSxcbiAgICAgICAgaGFuZGxlcjogKF90b29sOiBUb29sLCBfdG9vbGJveDogVG9vbGJveCkgPT4ge1xuICAgICAgICAgIF90b29sYm94LmFjdGl2YXRlVG9vbChfdG9vbC5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmdDbGFzczogKF90b29sOiBUb29sLCBfdG9vbGJveDogVG9vbGJveCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRvb2xib3guYWN0aXZlVG9vbCQucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZlVG9vbDogVG9vbCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdG9vbEFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlVG9vbCAhPT0gdW5kZWZpbmVkICYmIF90b29sLm5hbWUgPT09IGFjdGl2ZVRvb2wubmFtZSkge1xuICAgICAgICAgICAgICAgIHRvb2xBY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuVG9vbEFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYWN0aXZlVG9vbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgX3Rvb2wubmFtZSA9PT0gYWN0aXZlVG9vbC5wYXJlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5Ub29sQWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3Rvb2wtYWN0aXZhdGVkJzogdG9vbEFjdGl2YXRlZCxcbiAgICAgICAgICAgICAgICAnY2hpbGRyZW4tdG9vbC1hY3RpdmF0ZWQnOiBjaGlsZHJlblRvb2xBY3RpdmF0ZWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLmFjdGlvblN0b3JlLmxvYWQoYWN0aW9ucyk7XG4gICAgdGhpcy50b29sYmFyJC5uZXh0KHRvb2xiYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgdGhlIG9uZ29pbmcgYW5pbWF0aW9uIGFuZCBpZ25vcmUgYW55IGluY29taW5nIGFuaW1hdGlvblxuICAgKiB3aGlsZSBvbmUgaXMgc3RpbGwgb25nb2luZy5cbiAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlc1xuICAgKi9cbiAgcHJpdmF0ZSBvbkFuaW1hdGUoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnVuQW5pbWF0ZSgpO1xuICAgIHRoaXMuYW5pbWF0aW5nJCQgPSB0aGlzLmFuaW1hdGluZyQuc3Vic2NyaWJlKChhbmltYXRpb246IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICghYW5pbWF0aW9uKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMudW5BbmltYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgYW4gYW5pbWF0aW9uIHdoZW4gaXQncyBjb21wbGV0ZVxuICAgKi9cbiAgcHJpdmF0ZSB1bkFuaW1hdGUoKSB7XG4gICAgaWYgKHRoaXMuYW5pbWF0aW5nJCQpIHtcbiAgICAgIHRoaXMuYW5pbWF0aW5nJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpZ28tYWN0aW9uYmFyXG4gICpuZ0lmPVwiKHRvb2xiYXIkIHwgYXN5bmMpLmxlbmd0aCA+IDBcIlxuICBbc3RvcmVdPVwiYWN0aW9uU3RvcmVcIlxuICBbd2l0aEljb25dPVwidHJ1ZVwiXG4gIFt3aXRoVGl0bGVdPVwidG9vbGJhcldpdGhUaXRsZSQgfCBhc3luY1wiXG4gIFt3aXRoVG9vbHRpcF09XCIhKHRvb2xiYXJXaXRoVGl0bGUkIHwgYXN5bmMpXCJcbiAgW3Njcm9sbEFjdGl2ZV09XCJ0b29sYmFyV2l0aFRpdGxlJCB8IGFzeW5jXCJcbiAgW2hvcml6b250YWxdPVwiZmFsc2VcIj5cbjwvaWdvLWFjdGlvbmJhcj5cblxuPGRpdlxuICAqbmdJZj1cImFjdGl2ZVRvb2wkIHwgYXN5bmMgYXMgdG9vbFwiXG4gIGNsYXNzPVwiaWdvLXRvb2wtY29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieydpZ28tdG9vbC1jb250YWluZXItd2l0aC10b29sYmFyJzogIWFjdGlvblN0b3JlLmVtcHR5LCAnaWdvLXRvb2wtY29udGFpbmVyLXdpdGgtYW5pbWF0aW9uJzogYW5pbWF0ZX1cIlxuICBbQHRvb2xTbGlkZUluT3V0XT1cImFuaW1hdGlvbiQgfCBhc3luY1wiXG4gIChAdG9vbFNsaWRlSW5PdXQuc3RhcnQpPVwib25BbmltYXRpb25TdGFydCgpXCJcbiAgKEB0b29sU2xpZGVJbk91dC5kb25lKT1cIm9uQW5pbWF0aW9uQ29tcGxldGUoKVwiPlxuXG4gIDxpZ28tZHluYW1pYy1vdXRsZXRcbiAgICBbY29tcG9uZW50XT1cInRvb2wuY29tcG9uZW50XCJcbiAgICBbaW5wdXRzXT1cImdldFRvb2xJbnB1dHModG9vbClcIj5cbiAgPC9pZ28tZHluYW1pYy1vdXRsZXQ+XG5cbjwvZGl2PlxuIl19
1
+ import { Component, Input, HostBinding, ChangeDetectionStrategy } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { ActionStore } from '../../action';
5
+ import { ToolboxColor } from '../shared/toolbox.enums';
6
+ import { toolSlideInOut } from './toolbox.animation';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "../../action/actionbar/actionbar.component";
10
+ import * as i3 from "../../dynamic-component/dynamic-outlet/dynamic-outlet.component";
11
+ function ToolboxComponent_igo_actionbar_0_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelement(0, "igo-actionbar", 2);
13
+ i0.ɵɵpipe(1, "async");
14
+ i0.ɵɵpipe(2, "async");
15
+ i0.ɵɵpipe(3, "async");
16
+ } if (rf & 2) {
17
+ const ctx_r0 = i0.ɵɵnextContext();
18
+ i0.ɵɵproperty("store", ctx_r0.actionStore)("withIcon", true)("withTitle", i0.ɵɵpipeBind1(1, 6, ctx_r0.toolbarWithTitle$))("withTooltip", i0.ɵɵpipeBind1(2, 8, ctx_r0.toolbarWithTitle$) === false)("scrollActive", i0.ɵɵpipeBind1(3, 10, ctx_r0.toolbarWithTitle$))("horizontal", false);
19
+ } }
20
+ const _c0 = function (a0, a1) { return { "igo-tool-container-with-toolbar": a0, "igo-tool-container-with-animation": a1 }; };
21
+ function ToolboxComponent_div_2_Template(rf, ctx) { if (rf & 1) {
22
+ const _r4 = i0.ɵɵgetCurrentView();
23
+ i0.ɵɵelementStart(0, "div", 3);
24
+ i0.ɵɵlistener("@toolSlideInOut.start", function ToolboxComponent_div_2_Template_div_animation_toolSlideInOut_start_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return ctx_r3.onAnimationStart(); })("@toolSlideInOut.done", function ToolboxComponent_div_2_Template_div_animation_toolSlideInOut_done_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.onAnimationComplete(); });
25
+ i0.ɵɵpipe(1, "async");
26
+ i0.ɵɵelement(2, "igo-dynamic-outlet", 4);
27
+ i0.ɵɵelementEnd();
28
+ } if (rf & 2) {
29
+ const tool_r2 = ctx.ngIf;
30
+ const ctx_r1 = i0.ɵɵnextContext();
31
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(6, _c0, !ctx_r1.actionStore.empty, ctx_r1.animate))("@toolSlideInOut", i0.ɵɵpipeBind1(1, 4, ctx_r1.animation$));
32
+ i0.ɵɵadvance(2);
33
+ i0.ɵɵproperty("component", tool_r2.component)("inputs", ctx_r1.getToolInputs(tool_r2));
34
+ } }
35
+ export class ToolboxComponent {
36
+ constructor() {
37
+ /**
38
+ * Observable of the active tool
39
+ */
40
+ this.activeTool$ = new BehaviorSubject(undefined);
41
+ /**
42
+ * Store of actions that toggle tools
43
+ */
44
+ this.actionStore = new ActionStore([]);
45
+ /**
46
+ * Observable of he anmation state
47
+ */
48
+ this.animation$ = new BehaviorSubject('none');
49
+ /**
50
+ * Observable of the toolbar
51
+ */
52
+ this.toolbar$ = new BehaviorSubject([]);
53
+ /**
54
+ * Whether the Toolbar should display actions' titles
55
+ */
56
+ this.toolbarWithTitle$ = this.activeTool$.pipe(map((tool) => tool === undefined));
57
+ /**
58
+ * Observable of the ongoing animation. This is useful when
59
+ * multiple animations are triggered at once i.e. when the user clicks
60
+ * too fast on different actions
61
+ */
62
+ this.animating$ = new BehaviorSubject(false);
63
+ /**
64
+ * Whether the toolbox should animate the first tool entering
65
+ */
66
+ this.animate = false;
67
+ /**
68
+ * Color of Toolbox
69
+ */
70
+ this.color = ToolboxColor.White;
71
+ }
72
+ /**
73
+ * @ignore
74
+ */
75
+ get classColorGrey() {
76
+ return this.color === ToolboxColor.Grey;
77
+ }
78
+ /**
79
+ * @ignore
80
+ */
81
+ get classColorPrimary() {
82
+ return this.color === ToolboxColor.Primary;
83
+ }
84
+ /**
85
+ * Initialize the toolbar and subscribe to the active tool
86
+ * @internal
87
+ */
88
+ ngOnInit() {
89
+ this.toolbar$$ = this.toolbox.toolbar$.subscribe((toolbar) => this.onToolbarChange(toolbar));
90
+ this.activeTool$$ = this.toolbox.activeTool$.subscribe((tool) => this.onActiveToolChange(tool));
91
+ }
92
+ /**
93
+ * Unsubscribe to the active tool and destroy the action store
94
+ * @internal
95
+ */
96
+ ngOnDestroy() {
97
+ this.toolbar$$.unsubscribe();
98
+ this.activeTool$$.unsubscribe();
99
+ this.actionStore.destroy();
100
+ }
101
+ /**
102
+ * Track the starting animation
103
+ * @internal
104
+ */
105
+ onAnimationStart() {
106
+ this.animating$.next(true);
107
+ }
108
+ /**
109
+ * Untrack the completed animation
110
+ * @internal
111
+ */
112
+ onAnimationComplete() {
113
+ this.animating$.next(false);
114
+ }
115
+ /**
116
+ * Return a tool's inputs
117
+ * @param tool Tool
118
+ * @returns Tool inputs
119
+ * @internal
120
+ */
121
+ getToolInputs(tool) {
122
+ return tool.options || {};
123
+ }
124
+ /**
125
+ * Initialize an action store
126
+ * @param toolbar Toolbar
127
+ */
128
+ onToolbarChange(toolbar) {
129
+ this.setToolbar(toolbar);
130
+ }
131
+ /**
132
+ * Activate a tool and trigger an animation or not
133
+ * @param tool Tool to activate
134
+ */
135
+ onActiveToolChange(tool) {
136
+ if (!this.animate) {
137
+ this.setActiveTool(tool);
138
+ return;
139
+ }
140
+ this.onAnimate(() => this.setActiveTool(tool));
141
+ }
142
+ /**
143
+ * Set the active tool
144
+ * @param tool Tool to activate
145
+ */
146
+ setActiveTool(tool) {
147
+ if (tool === undefined) {
148
+ this.actionStore.state.updateAll({ active: false });
149
+ }
150
+ else {
151
+ const action = this.actionStore.get(tool.name);
152
+ if (action !== undefined) {
153
+ this.actionStore.state.update(action, { active: true }, true);
154
+ }
155
+ }
156
+ this.activeTool$.next(tool);
157
+ if (this.animate) {
158
+ this.animation$.next('enter');
159
+ }
160
+ }
161
+ /**
162
+ * Initialize the toolbar
163
+ */
164
+ setToolbar(toolbar) {
165
+ const actions = toolbar.reduce((acc, toolName) => {
166
+ const tool = this.toolbox.getTool(toolName);
167
+ if (tool === undefined) {
168
+ return acc;
169
+ }
170
+ acc.push({
171
+ id: tool.name,
172
+ title: tool.title,
173
+ icon: tool.icon,
174
+ // iconImage: tool.iconImage,
175
+ tooltip: tool.tooltip,
176
+ args: [tool, this.toolbox],
177
+ handler: (_tool, _toolbox) => {
178
+ _toolbox.activateTool(_tool.name);
179
+ },
180
+ ngClass: (_tool, _toolbox) => {
181
+ return this.toolbox.activeTool$.pipe(map((activeTool) => {
182
+ let toolActivated = false;
183
+ if (activeTool !== undefined && _tool.name === activeTool.name) {
184
+ toolActivated = true;
185
+ }
186
+ let childrenToolActivated = false;
187
+ if (activeTool !== undefined &&
188
+ _tool.name === activeTool.parent) {
189
+ childrenToolActivated = true;
190
+ }
191
+ return {
192
+ 'tool-activated': toolActivated,
193
+ 'children-tool-activated': childrenToolActivated
194
+ };
195
+ }));
196
+ }
197
+ });
198
+ return acc;
199
+ }, []);
200
+ this.actionStore.load(actions);
201
+ this.toolbar$.next(toolbar);
202
+ }
203
+ /**
204
+ * Observe the ongoing animation and ignore any incoming animation
205
+ * while one is still ongoing.
206
+ * @param callback Callback to execute when the animation completes
207
+ */
208
+ onAnimate(callback) {
209
+ this.unAnimate();
210
+ this.animating$$ = this.animating$.subscribe((animation) => {
211
+ if (!animation) {
212
+ callback.call(this);
213
+ this.unAnimate();
214
+ }
215
+ });
216
+ }
217
+ /**
218
+ * Stop observing an animation when it's complete
219
+ */
220
+ unAnimate() {
221
+ if (this.animating$$) {
222
+ this.animating$$.unsubscribe();
223
+ }
224
+ }
225
+ }
226
+ ToolboxComponent.ɵfac = function ToolboxComponent_Factory(t) { return new (t || ToolboxComponent)(); };
227
+ ToolboxComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ToolboxComponent, selectors: [["igo-toolbox"]], hostVars: 4, hostBindings: function ToolboxComponent_HostBindings(rf, ctx) { if (rf & 2) {
228
+ i0.ɵɵclassProp("color-grey", ctx.classColorGrey)("color-primary", ctx.classColorPrimary);
229
+ } }, inputs: { toolbox: "toolbox", animate: "animate", color: "color" }, decls: 4, vars: 6, consts: [[3, "store", "withIcon", "withTitle", "withTooltip", "scrollActive", "horizontal", 4, "ngIf"], ["class", "igo-tool-container", 3, "ngClass", 4, "ngIf"], [3, "store", "withIcon", "withTitle", "withTooltip", "scrollActive", "horizontal"], [1, "igo-tool-container", 3, "ngClass"], [3, "component", "inputs"]], template: function ToolboxComponent_Template(rf, ctx) { if (rf & 1) {
230
+ i0.ɵɵtemplate(0, ToolboxComponent_igo_actionbar_0_Template, 4, 12, "igo-actionbar", 0);
231
+ i0.ɵɵpipe(1, "async");
232
+ i0.ɵɵtemplate(2, ToolboxComponent_div_2_Template, 3, 9, "div", 1);
233
+ i0.ɵɵpipe(3, "async");
234
+ } if (rf & 2) {
235
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(1, 2, ctx.toolbar$).length > 0);
236
+ i0.ɵɵadvance(2);
237
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(3, 4, ctx.activeTool$));
238
+ } }, directives: [i1.NgIf, i2.ActionbarComponent, i1.NgClass, i3.DynamicOutletComponent], pipes: [i1.AsyncPipe], styles: ["[_nghost-%COMP%]{display:block;position:relative;overflow:hidden;width:100%;height:100%}.igo-tool-container[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:0;right:0}.igo-tool-container-with-animation[_ngcontent-%COMP%]{transform:translate(100%)}.igo-tool-container-with-toolbar[_ngcontent-%COMP%]{left:50px}igo-actionbar[_ngcontent-%COMP%]{height:100%}igo-actionbar.with-title[_ngcontent-%COMP%]{width:100%;overflow:auto}igo-actionbar[_ngcontent-%COMP%]:not(.with-title){width:48px;overflow:hidden;-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){igo-actionbar[_ngcontent-%COMP%]:not(.with-title){overflow:auto}}igo-dynamic-outlet[_ngcontent-%COMP%]{overflow:auto}"], data: { animation: [toolSlideInOut()] }, changeDetection: 0 });
239
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ToolboxComponent, [{
240
+ type: Component,
241
+ args: [{
242
+ selector: 'igo-toolbox',
243
+ templateUrl: 'toolbox.component.html',
244
+ styleUrls: ['toolbox.component.scss'],
245
+ animations: [toolSlideInOut()],
246
+ changeDetection: ChangeDetectionStrategy.OnPush
247
+ }]
248
+ }], null, { toolbox: [{
249
+ type: Input
250
+ }], animate: [{
251
+ type: Input
252
+ }], color: [{
253
+ type: Input
254
+ }], classColorGrey: [{
255
+ type: HostBinding,
256
+ args: ['class.color-grey']
257
+ }], classColorPrimary: [{
258
+ type: HostBinding,
259
+ args: ['class.color-primary']
260
+ }] }); })();
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi90b29sL3Rvb2xib3gvdG9vbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi90b29sL3Rvb2xib3gvdG9vbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxXQUFXLEVBQ1gsdUJBQXVCLEVBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBZ0IsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQVUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztJQ2hCckQsbUNBUWdCOzs7Ozs7SUFOZCwwQ0FBcUIsa0JBQUEsNkRBQUEseUVBQUEsaUVBQUEscUJBQUE7Ozs7O0lBUXZCLDhCQU1pRDtJQUQvQyxnT0FBNEMsb05BQUE7O0lBRzVDLHdDQUdxQjtJQUV2QixpQkFBTTs7OztJQVZKLCtGQUFpSCw0REFBQTtJQU0vRyxlQUE0QjtJQUE1Qiw2Q0FBNEIseUNBQUE7O0FETWhDLE1BQU0sT0FBTyxnQkFBZ0I7SUFQN0I7UUFRRTs7V0FFRztRQUNILGdCQUFXLEdBQTBCLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBFOztXQUVHO1FBQ0gsZ0JBQVcsR0FBZ0IsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0M7O1dBRUc7UUFDSCxlQUFVLEdBQTRCLElBQUksZUFB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Q0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7Z0ZBbFBVLGdCQUFnQjttRUFBaEIsZ0JBQWdCOzs7UUN6QjdCLHNGQVFnQjs7UUFFaEIsaUVBYU07OztRQXRCSCxvRUFBbUM7UUFVbkMsZUFBMEI7UUFBMUIsNERBQTBCOzI4QkRXZixDQUFDLGNBQWMsRUFBRSxDQUFDO3VGQUduQixnQkFBZ0I7Y0FQNUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QixXQUFXLEVBQUUsd0JBQXdCO2dCQUNyQyxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDckMsVUFBVSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO2dCQXNEVSxPQUFPO2tCQUFmLEtBQUs7WUFLRyxPQUFPO2tCQUFmLEtBQUs7WUFLRyxLQUFLO2tCQUFiLEtBQUs7WUFNRixjQUFjO2tCQURqQixXQUFXO21CQUFDLGtCQUFrQjtZQVMzQixpQkFBaUI7a0JBRHBCLFdBQVc7bUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBIb3N0QmluZGluZyxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQWN0aW9uLCBBY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL2FjdGlvbic7XHJcbmltcG9ydCB7IFRvb2wgfSBmcm9tICcuLi9zaGFyZWQvdG9vbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUb29sYm94Q29sb3IgfSBmcm9tICcuLi9zaGFyZWQvdG9vbGJveC5lbnVtcyc7XHJcbmltcG9ydCB7IFRvb2xib3ggfSBmcm9tICcuLi9zaGFyZWQvdG9vbGJveCc7XHJcbmltcG9ydCB7IHRvb2xTbGlkZUluT3V0IH0gZnJvbSAnLi90b29sYm94LmFuaW1hdGlvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby10b29sYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJ3Rvb2xib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyd0b29sYm94LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW3Rvb2xTbGlkZUluT3V0KCldLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb29sYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGFjdGl2ZSB0b29sXHJcbiAgICovXHJcbiAgYWN0aXZlVG9vbCQ6IEJlaGF2aW9yU3ViamVjdDxUb29sPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgb2YgYWN0aW9ucyB0aGF0IHRvZ2dsZSB0b29sc1xyXG4gICAqL1xyXG4gIGFjdGlvblN0b3JlOiBBY3Rpb25TdG9yZSA9IG5ldyBBY3Rpb25TdG9yZShbXSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgaGUgYW5tYXRpb24gc3RhdGVcclxuICAgKi9cclxuICBhbmltYXRpb24kOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJ25vbmUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgdG9vbGJhclxyXG4gICAqL1xyXG4gIHRvb2xiYXIkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIFRvb2xiYXIgc2hvdWxkIGRpc3BsYXkgYWN0aW9ucycgdGl0bGVzXHJcbiAgICovXHJcbiAgdG9vbGJhcldpdGhUaXRsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmFjdGl2ZVRvb2wkLnBpcGUoXHJcbiAgICBtYXAoKHRvb2w6IFRvb2wgfCB1bmRlZmluZWQpID0+IHRvb2wgPT09IHVuZGVmaW5lZClcclxuICApO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGFjdGl2ZSB0b29sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhY3RpdmVUb29sJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSB0b29sYmFyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB0b29sYmFyJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgb25nb2luZyBhbmltYXRpb24uIFRoaXMgaXMgdXNlZnVsIHdoZW5cclxuICAgKiBtdWx0aXBsZSBhbmltYXRpb25zIGFyZSB0cmlnZ2VyZWQgYXQgb25jZSBpLmUuIHdoZW4gdGhlIHVzZXIgY2xpY2tzXHJcbiAgICogdG9vIGZhc3Qgb24gZGlmZmVyZW50IGFjdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIGFuaW1hdGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBvbmdvaW5nIGFuaW1hdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgYW5pbWF0aW5nJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogVG9vbGJveFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRvb2xib3g6IFRvb2xib3g7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHRvb2xib3ggc2hvdWxkIGFuaW1hdGUgdGhlIGZpcnN0IHRvb2wgZW50ZXJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSBhbmltYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbG9yIG9mIFRvb2xib3hcclxuICAgKi9cclxuICBASW5wdXQoKSBjb2xvcjogVG9vbGJveENvbG9yID0gVG9vbGJveENvbG9yLldoaXRlO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2xvci1ncmV5JylcclxuICBnZXQgY2xhc3NDb2xvckdyZXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xvciA9PT0gVG9vbGJveENvbG9yLkdyZXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2xvci1wcmltYXJ5JylcclxuICBnZXQgY2xhc3NDb2xvclByaW1hcnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xvciA9PT0gVG9vbGJveENvbG9yLlByaW1hcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSB0b29sYmFyIGFuZCBzdWJzY3JpYmUgdG8gdGhlIGFjdGl2ZSB0b29sXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRvb2xiYXIkJCA9IHRoaXMudG9vbGJveC50b29sYmFyJC5zdWJzY3JpYmUoKHRvb2xiYXI6IHN0cmluZ1tdKSA9PlxyXG4gICAgICB0aGlzLm9uVG9vbGJhckNoYW5nZSh0b29sYmFyKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYWN0aXZlVG9vbCQkID0gdGhpcy50b29sYm94LmFjdGl2ZVRvb2wkLnN1YnNjcmliZSgodG9vbDogVG9vbCkgPT5cclxuICAgICAgdGhpcy5vbkFjdGl2ZVRvb2xDaGFuZ2UodG9vbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnN1YnNjcmliZSB0byB0aGUgYWN0aXZlIHRvb2wgYW5kIGRlc3Ryb3kgdGhlIGFjdGlvbiBzdG9yZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy50b29sYmFyJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYWN0aXZlVG9vbCQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmFjdGlvblN0b3JlLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrIHRoZSBzdGFydGluZyBhbmltYXRpb25cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkFuaW1hdGlvblN0YXJ0KCkge1xyXG4gICAgdGhpcy5hbmltYXRpbmckLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnRyYWNrIHRoZSBjb21wbGV0ZWQgYW5pbWF0aW9uXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25BbmltYXRpb25Db21wbGV0ZSgpIHtcclxuICAgIHRoaXMuYW5pbWF0aW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHRvb2wncyBpbnB1dHNcclxuICAgKiBAcGFyYW0gdG9vbCBUb29sXHJcbiAgICogQHJldHVybnMgVG9vbCBpbnB1dHNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUb29sSW5wdXRzKHRvb2w6IFRvb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIHJldHVybiB0b29sLm9wdGlvbnMgfHwge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIGFuIGFjdGlvbiBzdG9yZVxyXG4gICAqIEBwYXJhbSB0b29sYmFyIFRvb2xiYXJcclxuICAgKi9cclxuICBwcml2YXRlIG9uVG9vbGJhckNoYW5nZSh0b29sYmFyOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5zZXRUb29sYmFyKHRvb2xiYXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aXZhdGUgYSB0b29sIGFuZCB0cmlnZ2VyIGFuIGFuaW1hdGlvbiBvciBub3RcclxuICAgKiBAcGFyYW0gdG9vbCBUb29sIHRvIGFjdGl2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkFjdGl2ZVRvb2xDaGFuZ2UodG9vbDogVG9vbCkge1xyXG4gICAgaWYgKCF0aGlzLmFuaW1hdGUpIHtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVUb29sKHRvb2wpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQW5pbWF0ZSgoKSA9PiB0aGlzLnNldEFjdGl2ZVRvb2wodG9vbCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhY3RpdmUgdG9vbFxyXG4gICAqIEBwYXJhbSB0b29sIFRvb2wgdG8gYWN0aXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHNldEFjdGl2ZVRvb2wodG9vbDogVG9vbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRvb2wgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmFjdGlvblN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IGFjdGl2ZTogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvblN0b3JlLmdldCh0b29sLm5hbWUpO1xyXG4gICAgICBpZiAoYWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmFjdGlvblN0b3JlLnN0YXRlLnVwZGF0ZShhY3Rpb24sIHsgYWN0aXZlOiB0cnVlIH0sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3RpdmVUb29sJC5uZXh0KHRvb2wpO1xyXG4gICAgaWYgKHRoaXMuYW5pbWF0ZSkge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiQubmV4dCgnZW50ZXInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIHRvb2xiYXJcclxuICAgKi9cclxuICBwcml2YXRlIHNldFRvb2xiYXIodG9vbGJhcjogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IGFjdGlvbnMgPSB0b29sYmFyLnJlZHVjZSgoYWNjOiBBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCB0b29sID0gdGhpcy50b29sYm94LmdldFRvb2wodG9vbE5hbWUpO1xyXG4gICAgICBpZiAodG9vbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfVxyXG5cclxuICAgICAgYWNjLnB1c2goe1xyXG4gICAgICAgIGlkOiB0b29sLm5hbWUsXHJcbiAgICAgICAgdGl0bGU6IHRvb2wudGl0bGUsXHJcbiAgICAgICAgaWNvbjogdG9vbC5pY29uLFxyXG4gICAgICAgIC8vIGljb25JbWFnZTogdG9vbC5pY29uSW1hZ2UsXHJcbiAgICAgICAgdG9vbHRpcDogdG9vbC50b29sdGlwLFxyXG4gICAgICAgIGFyZ3M6IFt0b29sLCB0aGlzLnRvb2xib3hdLFxyXG4gICAgICAgIGhhbmRsZXI6IChfdG9vbDogVG9vbCwgX3Rvb2xib3g6IFRvb2xib3gpID0+IHtcclxuICAgICAgICAgIF90b29sYm94LmFjdGl2YXRlVG9vbChfdG9vbC5uYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5nQ2xhc3M6IChfdG9vbDogVG9vbCwgX3Rvb2xib3g6IFRvb2xib3gpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRvb2xib3guYWN0aXZlVG9vbCQucGlwZShcclxuICAgICAgICAgICAgbWFwKChhY3RpdmVUb29sOiBUb29sKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHRvb2xBY3RpdmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoYWN0aXZlVG9vbCAhPT0gdW5kZWZpbmVkICYmIF90b29sLm5hbWUgPT09IGFjdGl2ZVRvb2wubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdG9vbEFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgY2hpbGRyZW5Ub29sQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlVG9vbCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICBfdG9vbC5uYW1lID09PSBhY3RpdmVUb29sLnBhcmVudFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5Ub29sQWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAndG9vbC1hY3RpdmF0ZWQnOiB0b29sQWN0aXZhdGVkLFxyXG4gICAgICAgICAgICAgICAgJ2NoaWxkcmVuLXRvb2wtYWN0aXZhdGVkJzogY2hpbGRyZW5Ub29sQWN0aXZhdGVkXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuICAgIHRoaXMuYWN0aW9uU3RvcmUubG9hZChhY3Rpb25zKTtcclxuICAgIHRoaXMudG9vbGJhciQubmV4dCh0b29sYmFyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmUgdGhlIG9uZ29pbmcgYW5pbWF0aW9uIGFuZCBpZ25vcmUgYW55IGluY29taW5nIGFuaW1hdGlvblxyXG4gICAqIHdoaWxlIG9uZSBpcyBzdGlsbCBvbmdvaW5nLlxyXG4gICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXNcclxuICAgKi9cclxuICBwcml2YXRlIG9uQW5pbWF0ZShjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgdGhpcy51bkFuaW1hdGUoKTtcclxuICAgIHRoaXMuYW5pbWF0aW5nJCQgPSB0aGlzLmFuaW1hdGluZyQuc3Vic2NyaWJlKChhbmltYXRpb246IGJvb2xlYW4pID0+IHtcclxuICAgICAgaWYgKCFhbmltYXRpb24pIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudW5BbmltYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBvYnNlcnZpbmcgYW4gYW5pbWF0aW9uIHdoZW4gaXQncyBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdW5BbmltYXRlKCkge1xyXG4gICAgaWYgKHRoaXMuYW5pbWF0aW5nJCQpIHtcclxuICAgICAgdGhpcy5hbmltYXRpbmckJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8aWdvLWFjdGlvbmJhclxyXG4gICpuZ0lmPVwiKHRvb2xiYXIkIHwgYXN5bmMpLmxlbmd0aCA+IDBcIlxyXG4gIFtzdG9yZV09XCJhY3Rpb25TdG9yZVwiXHJcbiAgW3dpdGhJY29uXT1cInRydWVcIlxyXG4gIFt3aXRoVGl0bGVdPVwidG9vbGJhcldpdGhUaXRsZSQgfCBhc3luY1wiXHJcbiAgW3dpdGhUb29sdGlwXT1cIih0b29sYmFyV2l0aFRpdGxlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxyXG4gIFtzY3JvbGxBY3RpdmVdPVwidG9vbGJhcldpdGhUaXRsZSQgfCBhc3luY1wiXHJcbiAgW2hvcml6b250YWxdPVwiZmFsc2VcIj5cclxuPC9pZ28tYWN0aW9uYmFyPlxyXG5cclxuPGRpdlxyXG4gICpuZ0lmPVwiYWN0aXZlVG9vbCQgfCBhc3luYyBhcyB0b29sXCJcclxuICBjbGFzcz1cImlnby10b29sLWNvbnRhaW5lclwiXHJcbiAgW25nQ2xhc3NdPVwieydpZ28tdG9vbC1jb250YWluZXItd2l0aC10b29sYmFyJzogIWFjdGlvblN0b3JlLmVtcHR5LCAnaWdvLXRvb2wtY29udGFpbmVyLXdpdGgtYW5pbWF0aW9uJzogYW5pbWF0ZX1cIlxyXG4gIFtAdG9vbFNsaWRlSW5PdXRdPVwiYW5pbWF0aW9uJCB8IGFzeW5jXCJcclxuICAoQHRvb2xTbGlkZUluT3V0LnN0YXJ0KT1cIm9uQW5pbWF0aW9uU3RhcnQoKVwiXHJcbiAgKEB0b29sU2xpZGVJbk91dC5kb25lKT1cIm9uQW5pbWF0aW9uQ29tcGxldGUoKVwiPlxyXG5cclxuICA8aWdvLWR5bmFtaWMtb3V0bGV0XHJcbiAgICBbY29tcG9uZW50XT1cInRvb2wuY29tcG9uZW50XCJcclxuICAgIFtpbnB1dHNdPVwiZ2V0VG9vbElucHV0cyh0b29sKVwiPlxyXG4gIDwvaWdvLWR5bmFtaWMtb3V0bGV0PlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==