@igo2/common 1.15.3 → 16.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/common-theme.scss +19 -0
  2. package/{esm2020 → esm2022}/igo2-common.mjs +4 -4
  3. package/esm2022/lib/action/action.module.mjs +20 -0
  4. package/esm2022/lib/action/actionbar/actionbar-item.component.mjs +270 -0
  5. package/esm2022/lib/action/actionbar/actionbar.component.mjs +389 -0
  6. package/{esm2020 → esm2022}/lib/action/actionbar/actionbar.module.mjs +57 -57
  7. package/{esm2020 → esm2022}/lib/action/index.mjs +3 -3
  8. package/{esm2020 → esm2022}/lib/action/shared/action.enums.mjs +7 -7
  9. package/{esm2020 → esm2022}/lib/action/shared/action.interfaces.mjs +2 -2
  10. package/{esm2020 → esm2022}/lib/action/shared/index.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/action/shared/store.mjs +8 -8
  12. package/esm2022/lib/backdrop/backdrop.component.mjs +27 -0
  13. package/{esm2020 → esm2022}/lib/backdrop/backdrop.module.mjs +25 -25
  14. package/{esm2020 → esm2022}/lib/backdrop/index.mjs +2 -2
  15. package/esm2022/lib/badge-icon/badge-icon.directive.mjs +150 -0
  16. package/{esm2020 → esm2022}/lib/badge-icon/badge-icon.module.mjs +26 -26
  17. package/{esm2020 → esm2022}/lib/badge-icon/index.mjs +2 -2
  18. package/esm2022/lib/clickout/clickout.directive.mjs +33 -0
  19. package/{esm2020 → esm2022}/lib/clickout/clickout.module.mjs +24 -24
  20. package/{esm2020 → esm2022}/lib/clickout/index.mjs +2 -2
  21. package/{esm2020 → esm2022}/lib/clone/clone.module.mjs +24 -24
  22. package/esm2022/lib/clone/clone.pipe.mjs +24 -0
  23. package/{esm2020 → esm2022}/lib/clone/index.mjs +2 -2
  24. package/esm2022/lib/collapsible/collapse.directive.mjs +58 -0
  25. package/esm2022/lib/collapsible/collapsible.component.mjs +54 -0
  26. package/{esm2020 → esm2022}/lib/collapsible/collapsible.module.mjs +27 -27
  27. package/{esm2020 → esm2022}/lib/collapsible/index.mjs +3 -3
  28. package/esm2022/lib/color-picker-form-field/color-picker-form-field.component.mjs +121 -0
  29. package/esm2022/lib/color-picker-form-field/color-picker-form-field.module.mjs +32 -0
  30. package/esm2022/lib/color-picker-form-field/index.mjs +2 -0
  31. package/esm2022/lib/confirm-dialog/confirm-dialog.component.mjs +47 -0
  32. package/{esm2020 → esm2022}/lib/confirm-dialog/confirm-dialog.module.mjs +29 -29
  33. package/esm2022/lib/confirm-dialog/confirm-dialog.service.mjs +29 -0
  34. package/{esm2020 → esm2022}/lib/confirm-dialog/index.mjs +3 -3
  35. package/esm2022/lib/context-menu/context-menu.directive.mjs +110 -0
  36. package/{esm2020 → esm2022}/lib/context-menu/context-menu.module.mjs +25 -25
  37. package/{esm2020 → esm2022}/lib/context-menu/index.mjs +3 -3
  38. package/esm2022/lib/context-menu/long-press.directive.mjs +67 -0
  39. package/esm2022/lib/custom-html/custom-html.component.mjs +27 -0
  40. package/{esm2020 → esm2022}/lib/custom-html/custom-html.module.mjs +47 -47
  41. package/{esm2020 → esm2022}/lib/custom-html/custom-html.pipe.mjs +20 -18
  42. package/{esm2020 → esm2022}/lib/custom-html/index.mjs +3 -3
  43. package/{esm2020 → esm2022}/lib/dom/dom.interfaces.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/dom/dom.module.mjs +21 -23
  45. package/esm2022/lib/dom/dom.service.mjs +35 -0
  46. package/{esm2020 → esm2022}/lib/dom/index.mjs +3 -3
  47. package/esm2022/lib/drag-drop/drag-drop.directive.mjs +85 -0
  48. package/{esm2020 → esm2022}/lib/drag-drop/drag-drop.module.mjs +24 -24
  49. package/{esm2020 → esm2022}/lib/drag-drop/index.mjs +2 -2
  50. package/esm2022/lib/dynamic-component/dynamic-component.module.mjs +20 -0
  51. package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +138 -0
  52. package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +22 -0
  53. package/{esm2020 → esm2022}/lib/dynamic-component/index.mjs +3 -3
  54. package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -2
  55. package/esm2022/lib/dynamic-component/shared/dynamic-component.mjs +183 -0
  56. package/{esm2020 → esm2022}/lib/dynamic-component/shared/dynamic-component.service.mjs +30 -29
  57. package/{esm2020 → esm2022}/lib/dynamic-component/shared/index.mjs +4 -4
  58. package/esm2022/lib/entity/entity-selector/entity-selector.component.mjs +214 -0
  59. package/esm2022/lib/entity/entity-selector/entity-selector.module.mjs +24 -0
  60. package/esm2022/lib/entity/entity-table/entity-table-row.directive.mjs +139 -0
  61. package/esm2022/lib/entity/entity-table/entity-table.component.mjs +1455 -0
  62. package/esm2022/lib/entity/entity-table/entity-table.module.mjs +96 -0
  63. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +167 -0
  64. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -0
  65. package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +22 -0
  66. package/{esm2020 → esm2022}/lib/entity/entity.module.mjs +29 -31
  67. package/{esm2020 → esm2022}/lib/entity/index.mjs +6 -6
  68. package/{esm2020 → esm2022}/lib/entity/shared/entity.enums.mjs +28 -28
  69. package/esm2022/lib/entity/shared/entity.interfaces.mjs +2 -0
  70. package/esm2022/lib/entity/shared/entity.utils.mjs +73 -0
  71. package/esm2022/lib/entity/shared/index.mjs +11 -0
  72. package/esm2022/lib/entity/shared/state.mjs +194 -0
  73. package/esm2022/lib/entity/shared/store-strategy.mjs +73 -0
  74. package/esm2022/lib/entity/shared/store.mjs +256 -0
  75. package/esm2022/lib/entity/shared/strategies/filter-custom-function.mjs +80 -0
  76. package/esm2022/lib/entity/shared/strategies/filter-selection.mjs +81 -0
  77. package/{esm2020 → esm2022}/lib/entity/shared/strategies/index.mjs +4 -4
  78. package/esm2022/lib/entity/shared/strategies/strategy.mjs +78 -0
  79. package/esm2022/lib/entity/shared/transaction.mjs +329 -0
  80. package/esm2022/lib/entity/shared/view.mjs +330 -0
  81. package/esm2022/lib/entity/shared/watcher.mjs +135 -0
  82. package/esm2022/lib/flexible/flexible.component.mjs +153 -0
  83. package/{esm2020 → esm2022}/lib/flexible/flexible.module.mjs +24 -24
  84. package/{esm2020 → esm2022}/lib/flexible/flexible.type.mjs +2 -2
  85. package/{esm2020 → esm2022}/lib/flexible/index.mjs +3 -3
  86. package/esm2022/lib/form/form/form.component.mjs +125 -0
  87. package/esm2022/lib/form/form/form.module.mjs +23 -0
  88. package/esm2022/lib/form/form-field/form-field-select.component.mjs +140 -0
  89. package/esm2022/lib/form/form-field/form-field-text.component.mjs +113 -0
  90. package/esm2022/lib/form/form-field/form-field-textarea.component.mjs +114 -0
  91. package/esm2022/lib/form/form-field/form-field.component.mjs +78 -0
  92. package/{esm2020 → esm2022}/lib/form/form-field/form-field.module.mjs +74 -74
  93. package/{esm2020 → esm2022}/lib/form/form-field/index.mjs +5 -5
  94. package/esm2022/lib/form/form-group/form-group.component.mjs +115 -0
  95. package/esm2022/lib/form/form-group/form-group.module.mjs +36 -0
  96. package/esm2022/lib/form/form.module.mjs +27 -0
  97. package/{esm2020 → esm2022}/lib/form/index.mjs +5 -5
  98. package/{esm2020 → esm2022}/lib/form/shared/form-field-component.mjs +7 -7
  99. package/esm2022/lib/form/shared/form-field.service.mjs +29 -0
  100. package/esm2022/lib/form/shared/form.interfaces.mjs +2 -0
  101. package/esm2022/lib/form/shared/form.service.mjs +82 -0
  102. package/esm2022/lib/form/shared/form.utils.mjs +40 -0
  103. package/{esm2020 → esm2022}/lib/form/shared/index.mjs +6 -6
  104. package/esm2022/lib/home-button/home-button.component.mjs +30 -0
  105. package/{esm2020 → esm2022}/lib/home-button/home-button.module.mjs +41 -41
  106. package/{esm2020 → esm2022}/lib/home-button/index.mjs +2 -2
  107. package/esm2022/lib/image/image-error.directive.mjs +36 -0
  108. package/{esm2020 → esm2022}/lib/image/image.module.mjs +25 -25
  109. package/{esm2020 → esm2022}/lib/image/index.mjs +3 -3
  110. package/esm2022/lib/image/secure-image.pipe.mjs +65 -0
  111. package/{esm2020 → esm2022}/lib/interactive-tour/index.mjs +5 -5
  112. package/esm2022/lib/interactive-tour/interactive-tour.component.mjs +161 -0
  113. package/esm2022/lib/interactive-tour/interactive-tour.interface.mjs +2 -0
  114. package/esm2022/lib/interactive-tour/interactive-tour.loader.mjs +49 -0
  115. package/{esm2020 → esm2022}/lib/interactive-tour/interactive-tour.module.mjs +40 -40
  116. package/esm2022/lib/interactive-tour/interactive-tour.service.mjs +297 -0
  117. package/{esm2020 → esm2022}/lib/json-dialog/index.mjs +3 -3
  118. package/esm2022/lib/json-dialog/json-dialog.component.mjs +114 -0
  119. package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.module.mjs +29 -29
  120. package/{esm2020 → esm2022}/lib/json-dialog/json-dialog.service.mjs +26 -24
  121. package/{esm2020 → esm2022}/lib/keyvalue/index.mjs +2 -2
  122. package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.module.mjs +24 -24
  123. package/{esm2020 → esm2022}/lib/keyvalue/keyvalue.pipe.mjs +18 -18
  124. package/{esm2020 → esm2022}/lib/list/index.mjs +3 -3
  125. package/esm2022/lib/list/list-item.directive.mjs +167 -0
  126. package/esm2022/lib/list/list.component.mjs +268 -0
  127. package/{esm2020 → esm2022}/lib/list/list.module.mjs +29 -29
  128. package/{esm2020 → esm2022}/lib/panel/index.mjs +2 -2
  129. package/esm2022/lib/panel/panel.component.mjs +60 -0
  130. package/{esm2020 → esm2022}/lib/panel/panel.module.mjs +19 -19
  131. package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
  132. package/esm2022/lib/sidenav/sidenav-shim.directive.mjs +59 -0
  133. package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +24 -24
  134. package/{esm2020 → esm2022}/lib/spinner/index.mjs +3 -3
  135. package/esm2022/lib/spinner/spinner-activity.directive.mjs +55 -0
  136. package/esm2022/lib/spinner/spinner.component.mjs +38 -0
  137. package/{esm2020 → esm2022}/lib/spinner/spinner.module.mjs +21 -21
  138. package/{esm2020 → esm2022}/lib/stop-propagation/index.mjs +3 -3
  139. package/{esm2020 → esm2022}/lib/stop-propagation/stop-drop-propagation.directive.mjs +22 -22
  140. package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.directive.mjs +21 -21
  141. package/{esm2020 → esm2022}/lib/stop-propagation/stop-propagation.module.mjs +25 -25
  142. package/{esm2020 → esm2022}/lib/table/index.mjs +6 -6
  143. package/{esm2020 → esm2022}/lib/table/table-action-color.enum.mjs +7 -7
  144. package/esm2022/lib/table/table-database.mjs +28 -0
  145. package/esm2022/lib/table/table-datasource.mjs +64 -0
  146. package/esm2022/lib/table/table-model.interface.mjs +2 -0
  147. package/esm2022/lib/table/table.component.mjs +302 -0
  148. package/{esm2020 → esm2022}/lib/table/table.module.mjs +67 -67
  149. package/{esm2020 → esm2022}/lib/tool/index.mjs +3 -3
  150. package/{esm2020 → esm2022}/lib/tool/shared/index.mjs +6 -6
  151. package/esm2022/lib/tool/shared/tool-component.mjs +9 -0
  152. package/esm2022/lib/tool/shared/tool.interface.mjs +2 -0
  153. package/esm2022/lib/tool/shared/tool.service.mjs +43 -0
  154. package/{esm2020 → esm2022}/lib/tool/shared/toolbox.enums.mjs +7 -7
  155. package/esm2022/lib/tool/shared/toolbox.mjs +184 -0
  156. package/esm2022/lib/tool/tool.module.mjs +26 -0
  157. package/{esm2020 → esm2022}/lib/tool/toolbox/toolbox.animation.mjs +10 -10
  158. package/esm2022/lib/tool/toolbox/toolbox.component.mjs +273 -0
  159. package/esm2022/lib/tool/toolbox/toolbox.module.mjs +24 -0
  160. package/{esm2020 → esm2022}/lib/widget/index.mjs +3 -3
  161. package/{esm2020 → esm2022}/lib/widget/shared/index.mjs +4 -4
  162. package/esm2022/lib/widget/shared/widget.interfaces.mjs +2 -0
  163. package/{esm2020 → esm2022}/lib/widget/shared/widget.mjs +4 -4
  164. package/esm2022/lib/widget/shared/widget.service.mjs +22 -0
  165. package/esm2022/lib/widget/widget-outlet/widget-outlet.component.mjs +124 -0
  166. package/esm2022/lib/widget/widget-outlet/widget-outlet.module.mjs +23 -0
  167. package/esm2022/lib/widget/widget.module.mjs +21 -0
  168. package/{esm2020 → esm2022}/lib/workspace/index.mjs +4 -4
  169. package/{esm2020 → esm2022}/lib/workspace/shared/index.mjs +4 -4
  170. package/esm2022/lib/workspace/shared/store.mjs +37 -0
  171. package/{esm2020 → esm2022}/lib/workspace/shared/workspace.interfaces.mjs +2 -2
  172. package/esm2022/lib/workspace/shared/workspace.mjs +143 -0
  173. package/esm2022/lib/workspace/workspace-selector/workspace-selector.component.mjs +58 -0
  174. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +23 -0
  175. package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +94 -0
  176. package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +23 -0
  177. package/esm2022/lib/workspace/workspace.module.mjs +20 -0
  178. package/esm2022/public_api.mjs +76 -0
  179. package/{fesm2020 → fesm2022}/igo2-common.mjs +9837 -9345
  180. package/fesm2022/igo2-common.mjs.map +1 -0
  181. package/index.d.ts +5 -5
  182. package/lib/action/action.module.d.ts +8 -8
  183. package/lib/action/action.theming.scss +5 -0
  184. package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
  185. package/lib/action/actionbar/actionbar-item.theming.scss +32 -0
  186. package/lib/action/actionbar/actionbar.component.d.ts +147 -146
  187. package/lib/action/actionbar/actionbar.module.d.ts +20 -20
  188. package/lib/action/actionbar/actionbar.theming.scss +22 -0
  189. package/lib/action/index.d.ts +2 -2
  190. package/lib/action/shared/action.enums.d.ts +5 -5
  191. package/lib/action/shared/action.interfaces.d.ts +17 -17
  192. package/lib/action/shared/index.d.ts +3 -3
  193. package/lib/action/shared/store.d.ts +8 -8
  194. package/lib/backdrop/backdrop.component.d.ts +9 -9
  195. package/lib/backdrop/backdrop.module.d.ts +10 -10
  196. package/lib/backdrop/index.d.ts +1 -1
  197. package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
  198. package/lib/badge-icon/badge-icon.module.d.ts +11 -11
  199. package/lib/badge-icon/index.d.ts +1 -1
  200. package/lib/clickout/clickout.directive.d.ts +10 -10
  201. package/lib/clickout/clickout.module.d.ts +9 -9
  202. package/lib/clickout/index.d.ts +1 -1
  203. package/lib/clone/clone.module.d.ts +9 -9
  204. package/lib/clone/clone.pipe.d.ts +7 -7
  205. package/lib/clone/index.d.ts +1 -1
  206. package/lib/collapsible/collapse.directive.d.ts +19 -19
  207. package/lib/collapsible/collapsible.component.d.ts +13 -13
  208. package/lib/collapsible/collapsible.module.d.ts +12 -12
  209. package/lib/collapsible/collapsible.theming.scss +22 -0
  210. package/lib/collapsible/index.d.ts +2 -2
  211. package/lib/color-picker-form-field/color-picker-form-field.component.d.ts +26 -0
  212. package/lib/color-picker-form-field/color-picker-form-field.module.d.ts +10 -0
  213. package/lib/color-picker-form-field/index.d.ts +1 -0
  214. package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
  215. package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
  216. package/lib/confirm-dialog/confirm-dialog.service.d.ts +12 -12
  217. package/lib/confirm-dialog/index.d.ts +2 -2
  218. package/lib/context-menu/context-menu.directive.d.ts +21 -21
  219. package/lib/context-menu/context-menu.module.d.ts +10 -10
  220. package/lib/context-menu/index.d.ts +2 -2
  221. package/lib/context-menu/long-press.directive.d.ts +20 -20
  222. package/lib/custom-html/custom-html.component.d.ts +9 -9
  223. package/lib/custom-html/custom-html.module.d.ts +16 -16
  224. package/lib/custom-html/custom-html.pipe.d.ts +10 -10
  225. package/lib/custom-html/index.d.ts +2 -2
  226. package/lib/dom/dom.interfaces.d.ts +10 -10
  227. package/lib/dom/dom.module.d.ts +8 -8
  228. package/lib/dom/dom.service.d.ts +10 -10
  229. package/lib/dom/index.d.ts +2 -2
  230. package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
  231. package/lib/drag-drop/drag-drop.module.d.ts +9 -9
  232. package/lib/drag-drop/index.d.ts +1 -1
  233. package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
  234. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
  235. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
  236. package/lib/dynamic-component/index.d.ts +2 -2
  237. package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
  238. package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
  239. package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
  240. package/lib/dynamic-component/shared/index.d.ts +3 -3
  241. package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
  242. package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
  243. package/lib/entity/entity-selector/entity-selector.theming.scss +21 -0
  244. package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
  245. package/lib/entity/entity-table/entity-table.component.d.ts +327 -333
  246. package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
  247. package/lib/entity/entity-table/entity-table.theming.scss +34 -0
  248. package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
  249. package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
  250. package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
  251. package/lib/entity/entity-table-paginator/entity-table-paginator.theming.scss +21 -0
  252. package/lib/entity/entity.module.d.ts +10 -10
  253. package/lib/entity/entity.theming.scss +10 -0
  254. package/lib/entity/index.d.ts +5 -5
  255. package/lib/entity/shared/entity.enums.d.ts +23 -23
  256. package/lib/entity/shared/entity.interfaces.d.ts +95 -114
  257. package/lib/entity/shared/entity.utils.d.ts +49 -49
  258. package/lib/entity/shared/index.d.ts +10 -9
  259. package/lib/entity/shared/state.d.ts +108 -103
  260. package/lib/entity/shared/store-strategy.d.ts +38 -0
  261. package/lib/entity/shared/store.d.ts +147 -176
  262. package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
  263. package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
  264. package/lib/entity/shared/strategies/index.d.ts +3 -3
  265. package/lib/entity/shared/strategies/strategy.d.ts +56 -56
  266. package/lib/entity/shared/transaction.d.ts +180 -168
  267. package/lib/entity/shared/view.d.ts +193 -193
  268. package/lib/entity/shared/watcher.d.ts +72 -72
  269. package/lib/flexible/flexible.component.d.ts +41 -41
  270. package/lib/flexible/flexible.module.d.ts +9 -9
  271. package/lib/flexible/flexible.type.d.ts +2 -2
  272. package/lib/flexible/index.d.ts +2 -2
  273. package/lib/form/form/form.component.d.ts +53 -53
  274. package/lib/form/form/form.module.d.ts +12 -12
  275. package/lib/form/form-field/form-field-select.component.d.ts +48 -48
  276. package/lib/form/form-field/form-field-text.component.d.ts +41 -41
  277. package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
  278. package/lib/form/form-field/form-field.component.d.ts +29 -34
  279. package/lib/form/form-field/form-field.module.d.ts +21 -21
  280. package/lib/form/form-field/index.d.ts +4 -4
  281. package/lib/form/form-group/form-group.component.d.ts +49 -49
  282. package/lib/form/form-group/form-group.module.d.ts +14 -14
  283. package/lib/form/form.module.d.ts +13 -13
  284. package/lib/form/index.d.ts +4 -4
  285. package/lib/form/shared/form-field-component.d.ts +1 -1
  286. package/lib/form/shared/form-field.service.d.ts +19 -19
  287. package/lib/form/shared/form.interfaces.d.ts +61 -57
  288. package/lib/form/shared/form.service.d.ts +15 -15
  289. package/lib/form/shared/form.utils.d.ts +11 -11
  290. package/lib/form/shared/index.d.ts +5 -5
  291. package/lib/home-button/home-button.component.d.ts +9 -9
  292. package/lib/home-button/home-button.module.d.ts +15 -15
  293. package/lib/home-button/home-button.theming.scss +18 -0
  294. package/lib/home-button/index.d.ts +1 -1
  295. package/lib/image/image-error.directive.d.ts +11 -11
  296. package/lib/image/image.module.d.ts +10 -10
  297. package/lib/image/index.d.ts +2 -2
  298. package/lib/image/secure-image.pipe.d.ts +13 -13
  299. package/lib/interactive-tour/index.d.ts +4 -4
  300. package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
  301. package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
  302. package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
  303. package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
  304. package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
  305. package/lib/interactive-tour/interactive-tour.theming.scss +32 -0
  306. package/lib/json-dialog/index.d.ts +2 -2
  307. package/lib/json-dialog/json-dialog.component.d.ts +13 -13
  308. package/lib/json-dialog/json-dialog.module.d.ts +13 -13
  309. package/lib/json-dialog/json-dialog.service.d.ts +10 -10
  310. package/lib/keyvalue/index.d.ts +1 -1
  311. package/lib/keyvalue/keyvalue.module.d.ts +9 -9
  312. package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
  313. package/lib/list/index.d.ts +2 -2
  314. package/lib/list/list-item.directive.d.ts +43 -43
  315. package/lib/list/list.component.d.ts +51 -51
  316. package/lib/list/list.module.d.ts +14 -14
  317. package/lib/list/list.theming.scss +40 -0
  318. package/lib/panel/index.d.ts +1 -1
  319. package/lib/panel/panel.component.d.ts +10 -10
  320. package/lib/panel/panel.module.d.ts +8 -8
  321. package/lib/panel/panel.theming.scss +30 -0
  322. package/lib/sidenav/index.d.ts +1 -1
  323. package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
  324. package/lib/sidenav/sidenav.module.d.ts +9 -9
  325. package/lib/spinner/index.d.ts +2 -2
  326. package/lib/spinner/spinner-activity.directive.d.ts +32 -32
  327. package/lib/spinner/spinner.component.d.ts +12 -12
  328. package/lib/spinner/spinner.module.d.ts +10 -10
  329. package/lib/stop-propagation/index.d.ts +2 -2
  330. package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
  331. package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
  332. package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
  333. package/lib/table/index.d.ts +5 -5
  334. package/lib/table/table-action-color.enum.d.ts +5 -5
  335. package/lib/table/table-database.d.ts +10 -10
  336. package/lib/table/table-datasource.d.ts +18 -17
  337. package/lib/table/table-model.interface.d.ts +28 -28
  338. package/lib/table/table.component.d.ts +40 -40
  339. package/lib/table/table.module.d.ts +20 -20
  340. package/lib/tool/index.d.ts +2 -2
  341. package/lib/tool/shared/index.d.ts +5 -5
  342. package/lib/tool/shared/tool-component.d.ts +2 -2
  343. package/lib/tool/shared/tool.interface.d.ts +18 -18
  344. package/lib/tool/shared/tool.service.d.ts +30 -30
  345. package/lib/tool/shared/toolbox.d.ts +95 -95
  346. package/lib/tool/shared/toolbox.enums.d.ts +5 -5
  347. package/lib/tool/tool.module.d.ts +10 -10
  348. package/lib/tool/tool.theming.scss +5 -0
  349. package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
  350. package/lib/tool/toolbox/toolbox.component.d.ts +128 -127
  351. package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
  352. package/lib/tool/toolbox/toolbox.theming.scss +105 -0
  353. package/lib/widget/index.d.ts +2 -2
  354. package/lib/widget/shared/index.d.ts +3 -3
  355. package/lib/widget/shared/widget.d.ts +4 -4
  356. package/lib/widget/shared/widget.interfaces.d.ts +12 -12
  357. package/lib/widget/shared/widget.service.d.ts +10 -10
  358. package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
  359. package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
  360. package/lib/widget/widget.module.d.ts +8 -8
  361. package/lib/workspace/index.d.ts +3 -3
  362. package/lib/workspace/shared/index.d.ts +3 -3
  363. package/lib/workspace/shared/store.d.ts +20 -20
  364. package/lib/workspace/shared/workspace.d.ts +108 -108
  365. package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
  366. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
  367. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
  368. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
  369. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
  370. package/lib/workspace/workspace.module.d.ts +9 -9
  371. package/locale/en.common.json +43 -0
  372. package/locale/fr.common.json +43 -0
  373. package/package.json +30 -28
  374. package/public_api.d.ts +72 -70
  375. package/style/partial/common-utils.scss +9 -0
  376. package/style/partial/common.variables.scss +8 -8
  377. package/style/style.css +204 -0
  378. package/esm2020/lib/action/action.module.mjs +0 -27
  379. package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +0 -252
  380. package/esm2020/lib/action/actionbar/actionbar.component.mjs +0 -370
  381. package/esm2020/lib/backdrop/backdrop.component.mjs +0 -26
  382. package/esm2020/lib/badge-icon/badge-icon.directive.mjs +0 -141
  383. package/esm2020/lib/clickout/clickout.directive.mjs +0 -32
  384. package/esm2020/lib/clone/clone.pipe.mjs +0 -24
  385. package/esm2020/lib/collapsible/collapse.directive.mjs +0 -55
  386. package/esm2020/lib/collapsible/collapsible.component.mjs +0 -57
  387. package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +0 -44
  388. package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +0 -24
  389. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -103
  390. package/esm2020/lib/context-menu/long-press.directive.mjs +0 -67
  391. package/esm2020/lib/custom-html/custom-html.component.mjs +0 -28
  392. package/esm2020/lib/dom/dom.service.mjs +0 -30
  393. package/esm2020/lib/drag-drop/drag-drop.directive.mjs +0 -88
  394. package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +0 -31
  395. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +0 -122
  396. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +0 -28
  397. package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +0 -174
  398. package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +0 -194
  399. package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +0 -32
  400. package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +0 -137
  401. package/esm2020/lib/entity/entity-table/entity-table.component.mjs +0 -1376
  402. package/esm2020/lib/entity/entity-table/entity-table.module.mjs +0 -102
  403. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +0 -132
  404. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +0 -2
  405. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +0 -28
  406. package/esm2020/lib/entity/shared/entity.interfaces.mjs +0 -2
  407. package/esm2020/lib/entity/shared/entity.utils.mjs +0 -67
  408. package/esm2020/lib/entity/shared/index.mjs +0 -10
  409. package/esm2020/lib/entity/shared/state.mjs +0 -191
  410. package/esm2020/lib/entity/shared/store.mjs +0 -288
  411. package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +0 -79
  412. package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +0 -84
  413. package/esm2020/lib/entity/shared/strategies/strategy.mjs +0 -75
  414. package/esm2020/lib/entity/shared/transaction.mjs +0 -316
  415. package/esm2020/lib/entity/shared/view.mjs +0 -315
  416. package/esm2020/lib/entity/shared/watcher.mjs +0 -120
  417. package/esm2020/lib/flexible/flexible.component.mjs +0 -148
  418. package/esm2020/lib/form/form/form.component.mjs +0 -117
  419. package/esm2020/lib/form/form/form.module.mjs +0 -40
  420. package/esm2020/lib/form/form-field/form-field-select.component.mjs +0 -127
  421. package/esm2020/lib/form/form-field/form-field-text.component.mjs +0 -104
  422. package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +0 -105
  423. package/esm2020/lib/form/form-field/form-field.component.mjs +0 -72
  424. package/esm2020/lib/form/form-group/form-group.component.mjs +0 -105
  425. package/esm2020/lib/form/form-group/form-group.module.mjs +0 -40
  426. package/esm2020/lib/form/form.module.mjs +0 -49
  427. package/esm2020/lib/form/shared/form-field.service.mjs +0 -29
  428. package/esm2020/lib/form/shared/form.interfaces.mjs +0 -2
  429. package/esm2020/lib/form/shared/form.service.mjs +0 -81
  430. package/esm2020/lib/form/shared/form.utils.mjs +0 -40
  431. package/esm2020/lib/home-button/home-button.component.mjs +0 -31
  432. package/esm2020/lib/image/image-error.directive.mjs +0 -35
  433. package/esm2020/lib/image/secure-image.pipe.mjs +0 -59
  434. package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +0 -135
  435. package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +0 -2
  436. package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +0 -44
  437. package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +0 -285
  438. package/esm2020/lib/json-dialog/json-dialog.component.mjs +0 -109
  439. package/esm2020/lib/list/list-item.directive.mjs +0 -165
  440. package/esm2020/lib/list/list.component.mjs +0 -262
  441. package/esm2020/lib/panel/panel.component.mjs +0 -59
  442. package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +0 -55
  443. package/esm2020/lib/spinner/spinner-activity.directive.mjs +0 -47
  444. package/esm2020/lib/spinner/spinner.component.mjs +0 -35
  445. package/esm2020/lib/table/table-database.mjs +0 -28
  446. package/esm2020/lib/table/table-datasource.mjs +0 -61
  447. package/esm2020/lib/table/table-model.interface.mjs +0 -2
  448. package/esm2020/lib/table/table.component.mjs +0 -297
  449. package/esm2020/lib/tool/shared/tool-component.mjs +0 -9
  450. package/esm2020/lib/tool/shared/tool.interface.mjs +0 -2
  451. package/esm2020/lib/tool/shared/tool.service.mjs +0 -43
  452. package/esm2020/lib/tool/shared/toolbox.mjs +0 -179
  453. package/esm2020/lib/tool/tool.module.mjs +0 -32
  454. package/esm2020/lib/tool/toolbox/toolbox.component.mjs +0 -255
  455. package/esm2020/lib/tool/toolbox/toolbox.module.mjs +0 -36
  456. package/esm2020/lib/widget/shared/widget.interfaces.mjs +0 -2
  457. package/esm2020/lib/widget/shared/widget.service.mjs +0 -20
  458. package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +0 -116
  459. package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +0 -32
  460. package/esm2020/lib/widget/widget.module.mjs +0 -32
  461. package/esm2020/lib/workspace/shared/store.mjs +0 -40
  462. package/esm2020/lib/workspace/shared/workspace.mjs +0 -117
  463. package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +0 -51
  464. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -32
  465. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +0 -88
  466. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +0 -32
  467. package/esm2020/lib/workspace/workspace.module.mjs +0 -27
  468. package/esm2020/public_api.mjs +0 -74
  469. package/fesm2015/igo2-common.mjs +0 -10329
  470. package/fesm2015/igo2-common.mjs.map +0 -1
  471. package/fesm2020/igo2-common.mjs.map +0 -1
  472. package/style/common.theming.scss +0 -12
  473. package/style/partial/action.scss +0 -18
@@ -1,315 +0,0 @@
1
- import { BehaviorSubject, combineLatest } from 'rxjs';
2
- import { debounceTime, map, skip } from 'rxjs/operators';
3
- import { ObjectUtils, uuid } from '@igo2/utils';
4
- /**
5
- * An entity view streams entities from an observable source. These entities
6
- * can be filtered or sorted without affecting the source. A view can also
7
- * combine data from multiple sources, joined together.
8
- */
9
- export class EntityView {
10
- constructor(source$) {
11
- this.source$ = source$;
12
- /**
13
- * Observable stream of values
14
- */
15
- this.values$ = new BehaviorSubject([]);
16
- /**
17
- * Whether this view has been lifted
18
- */
19
- this.lifted = false;
20
- /**
21
- * Join clauses
22
- */
23
- this.joins = [];
24
- /**
25
- * Observable of a filter clause
26
- */
27
- this.filter$ = new BehaviorSubject(undefined);
28
- /**
29
- * Observable of filter clauses
30
- */
31
- this.filters$ = new BehaviorSubject([]);
32
- /**
33
- * Filters index
34
- */
35
- this.filterIndex = new Map();
36
- /**
37
- * Observable of a sort clause
38
- */
39
- this.sort$ = new BehaviorSubject(undefined);
40
- this.getKey$ = new BehaviorSubject(undefined);
41
- /**
42
- * Number of entities
43
- */
44
- this.count$ = new BehaviorSubject(0);
45
- /**
46
- * Whether the store is empty
47
- */
48
- this.empty$ = new BehaviorSubject(true);
49
- }
50
- /**
51
- * Method for indexing
52
- */
53
- get getKey() { return this.getKey$.value; }
54
- get count() { return this.count$.value; }
55
- get empty() { return this.empty$.value; }
56
- /**
57
- * Store index
58
- */
59
- get index() { return this._index; }
60
- /**
61
- * Get a value from the view by key
62
- * @param key Key
63
- * @returns Value
64
- */
65
- get(key) {
66
- if (this._index === undefined) {
67
- throw new Error('This view has no index, therefore, this method is unavailable.');
68
- }
69
- return this.index.get(key);
70
- }
71
- /**
72
- * Get all the values
73
- * @returns Array of values
74
- */
75
- all() {
76
- return this.values$.value;
77
- }
78
- /**
79
- * Observe all the values
80
- * @returns Observable of values
81
- */
82
- all$() {
83
- return this.values$;
84
- }
85
- /**
86
- * Get the first value that respects a criteria
87
- * @returns A value
88
- */
89
- firstBy(clause) {
90
- return this.values$.value.find(clause);
91
- }
92
- /**
93
- * Observe the first value that respects a criteria
94
- * @returns Observable of a value
95
- */
96
- firstBy$(clause) {
97
- return this.values$.pipe(map((values) => values.find(clause)));
98
- }
99
- /**
100
- * Get all the values that respect a criteria
101
- * @returns Array of values
102
- */
103
- manyBy(clause) {
104
- return this.values$.value.filter(clause);
105
- }
106
- /**
107
- * Observe all the values that respect a criteria
108
- * @returns Observable of values
109
- */
110
- manyBy$(clause) {
111
- return this.values$.pipe(map((values) => values.filter(clause)));
112
- }
113
- /**
114
- * Clear the filter and sort and unsubscribe from the source
115
- */
116
- clear() {
117
- this.filter(undefined);
118
- this.sort(undefined);
119
- }
120
- destroy() {
121
- if (this.values$$ !== undefined) {
122
- this.values$$.unsubscribe();
123
- }
124
- this.clear();
125
- }
126
- /**
127
- * Create an index
128
- * @param getKey Method to get a value's id
129
- * @returns The view
130
- */
131
- createIndex(getKey) {
132
- this._index = new Map();
133
- this.getKey$.next(getKey);
134
- return this;
135
- }
136
- /**
137
- * Join another source to the stream (chainable)
138
- * @param clause Join clause
139
- * @returns The view
140
- */
141
- join(clause) {
142
- if (this.lifted === true) {
143
- throw new Error('This view has already been lifted, therefore, no join is allowed.');
144
- }
145
- this.joins.push(clause);
146
- return this;
147
- }
148
- /**
149
- * Filter values (chainable)
150
- * @param clause Filter clause
151
- * @returns The view
152
- */
153
- filter(clause) {
154
- this.filter$.next(clause);
155
- return this;
156
- }
157
- /**
158
- * @param clause Filter clause
159
- * @returns The filter id
160
- */
161
- addFilter(clause) {
162
- const id = uuid();
163
- this.filterIndex.set(id, clause);
164
- this.filters$.next(Array.from(this.filterIndex.values()));
165
- return id;
166
- }
167
- /**
168
- * Remove a filter by id
169
- * @param clause Filter clause
170
- */
171
- removeFilter(id) {
172
- this.filterIndex.delete(id);
173
- this.filters$.next(Array.from(this.filterIndex.values()));
174
- }
175
- /**
176
- * Sort values (chainable)
177
- * @param clauseSort clause
178
- * @returns The view
179
- */
180
- sort(clause) {
181
- this.sort$.next(clause);
182
- return this;
183
- }
184
- /**
185
- * Create the final observable
186
- * @returns Observable
187
- */
188
- lift() {
189
- this.lifted = true;
190
- const source$ = this.joins.length > 0 ? this.liftJoinedSource() : this.liftSource();
191
- const observables$ = [
192
- source$,
193
- this.filters$,
194
- this.filter$,
195
- this.sort$,
196
- this.getKey$
197
- ];
198
- this.values$$ = combineLatest(observables$)
199
- .pipe(skip(1), debounceTime(5))
200
- .subscribe((bunch) => {
201
- const [_values, filters, filter, sort, getKey] = bunch;
202
- const values = this.processValues(_values, filters, filter, sort);
203
- const generateIndex = getKey !== undefined;
204
- this.setValues(values, generateIndex);
205
- });
206
- }
207
- /**
208
- * Create the source observable when no joins are defined
209
- * @returns Observable
210
- */
211
- liftSource() {
212
- return this.source$;
213
- }
214
- /**
215
- * Create the source observable when joins are defined
216
- * @returns Observable
217
- */
218
- liftJoinedSource() {
219
- const sources$ = [this.source$, combineLatest(this.joins.map((join) => join.source))];
220
- return combineLatest(sources$)
221
- .pipe(map((bunch) => {
222
- const [entities, joinData] = bunch;
223
- return entities.reduce((values, entity) => {
224
- const value = this.computeJoinedValue(entity, joinData);
225
- if (value !== undefined) {
226
- values.push(value);
227
- }
228
- return values;
229
- }, []);
230
- }));
231
- }
232
- /**
233
- * Apply joins to a source's entity and return the final value
234
- * @returns Final value
235
- */
236
- computeJoinedValue(entity, joinData) {
237
- let value = entity;
238
- let joinIndex = 0;
239
- while (value !== undefined && joinIndex < this.joins.length) {
240
- value = this.joins[joinIndex].reduce(value, joinData[joinIndex]);
241
- joinIndex += 1;
242
- }
243
- return value;
244
- }
245
- /**
246
- * Filter and sort values before streaming them
247
- * @param values Values
248
- * @param filters Filter clauses
249
- * @param filter Filter clause
250
- * @param sort Sort clause
251
- * @returns Filtered and sorted values
252
- */
253
- processValues(values, filters, filter, sort) {
254
- values = values.slice(0);
255
- values = this.filterValues(values, filters.concat([filter]));
256
- values = this.sortValues(values, sort);
257
- return values;
258
- }
259
- /**
260
- * Filter values
261
- * @param values Values
262
- * @param filters Filter clauses
263
- * @returns Filtered values
264
- */
265
- filterValues(values, clauses) {
266
- if (clauses.length === 0) {
267
- return values;
268
- }
269
- return values
270
- .filter((value) => {
271
- return clauses
272
- .filter((clause) => clause !== undefined)
273
- .every((clause) => clause(value));
274
- });
275
- }
276
- /**
277
- * Sort values
278
- * @param values Values
279
- * @param sort Sort clause
280
- * @returns Sorted values
281
- */
282
- sortValues(values, clause) {
283
- if (clause === undefined) {
284
- return values;
285
- }
286
- return values.sort((v1, v2) => {
287
- return ObjectUtils.naturalCompare(clause.valueAccessor(v1), clause.valueAccessor(v2), clause.direction, clause.nullsFirst);
288
- });
289
- }
290
- /**
291
- * Set value and optionally generate an index
292
- * @param values Values
293
- * @param generateIndex boolean
294
- */
295
- setValues(values, generateIndex) {
296
- if (generateIndex === true) {
297
- this._index = this.generateIndex(values);
298
- }
299
- this.values$.next(values);
300
- const count = values.length;
301
- const empty = count === 0;
302
- this.count$.next(count);
303
- this.empty$.next(empty);
304
- }
305
- /**
306
- * Generate a complete index of all the values
307
- * @param entities Entities
308
- * @returns Index
309
- */
310
- generateIndex(values) {
311
- const entries = values.map((value) => [this.getKey(value), value]);
312
- return new Map(entries);
313
- }
314
- }
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9zaGFyZWQvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUE0QixhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFRaEQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBa0VyQixZQUFvQixPQUE2QjtRQUE3QixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQWhFakQ7O1dBRUc7UUFDTSxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFPaEQ7O1dBRUc7UUFDSyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXZCOztXQUVHO1FBQ0ssVUFBSyxHQUF1QixFQUFFLENBQUM7UUFFdkM7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakQ7O1dBRUc7UUFDSyxhQUFRLEdBQTBDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxGOztXQUVHO1FBQ0ssZ0JBQVcsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVqRTs7V0FFRztRQUNLLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQU12QyxZQUFPLEdBQXNDLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBGOztXQUVHO1FBQ00sV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBR2pEOztXQUVHO1FBQ00sV0FBTSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FB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SSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxNQUFXO1FBQy9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBMkIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgT2JqZWN0VXRpbHMsIHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcbmltcG9ydCB7XHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eUZpbHRlckNsYXVzZSxcclxuICBFbnRpdHlTb3J0Q2xhdXNlLFxyXG4gIEVudGl0eUpvaW5DbGF1c2VcclxufSBmcm9tICcuL2VudGl0eS5pbnRlcmZhY2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbiBlbnRpdHkgdmlldyBzdHJlYW1zIGVudGl0aWVzIGZyb20gYW4gb2JzZXJ2YWJsZSBzb3VyY2UuIFRoZXNlIGVudGl0aWVzXHJcbiAqIGNhbiBiZSBmaWx0ZXJlZCBvciBzb3J0ZWQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHNvdXJjZS4gQSB2aWV3IGNhbiBhbHNvXHJcbiAqIGNvbWJpbmUgZGF0YSBmcm9tIG11bHRpcGxlIHNvdXJjZXMsIGpvaW5lZCB0b2dldGhlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlWaWV3PEUgZXh0ZW5kcyBvYmplY3QsIFYgZXh0ZW5kcyBvYmplY3QgPSBFPiB7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIHZhbHVlc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZbXT4oW10pO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSAoYW5kIGpvaW5lZCBzb3VyY2VzKSB2YWx1ZXNcclxuICAgKi9cclxuICBwcml2YXRlIHZhbHVlcyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBiZWVuIGxpZnRlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGlmdGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEpvaW4gY2xhdXNlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgam9pbnM6IEVudGl0eUpvaW5DbGF1c2VbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIGEgZmlsdGVyIGNsYXVzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiBmaWx0ZXIgY2xhdXNlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVycyQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlGaWx0ZXJDbGF1c2VbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVycyBpbmRleFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVySW5kZXg6IE1hcDxzdHJpbmcsIEVudGl0eUZpbHRlckNsYXVzZT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgYSBzb3J0IGNsYXVzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBmb3IgaW5kZXhpbmdcclxuICAgKi9cclxuICBnZXQgZ2V0S2V5KCk6IChWKSA9PiBFbnRpdHlLZXkgeyByZXR1cm4gdGhpcy5nZXRLZXkkLnZhbHVlOyB9XHJcbiAgcHJpdmF0ZSBnZXRLZXkkOiBCZWhhdmlvclN1YmplY3Q8KFYpID0+IEVudGl0eUtleT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbnRpdGllc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBnZXQgY291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY291bnQkLnZhbHVlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZW1wdHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmVtcHR5JC52YWx1ZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBpbmRleFxyXG4gICAqL1xyXG4gIGdldCBpbmRleCgpOiBNYXA8RW50aXR5S2V5LCBWPiB7IHJldHVybiB0aGlzLl9pbmRleDsgfVxyXG4gIHByaXZhdGUgX2luZGV4OiBNYXA8RW50aXR5S2V5LCBWPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzb3VyY2UkOiBCZWhhdmlvclN1YmplY3Q8RVtdPikge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGUgdmlldyBieSBrZXlcclxuICAgKiBAcGFyYW0ga2V5IEtleVxyXG4gICAqIEByZXR1cm5zIFZhbHVlXHJcbiAgICovXHJcbiAgZ2V0KGtleTogRW50aXR5S2V5KTogViB7XHJcbiAgICBpZiAodGhpcy5faW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdmlldyBoYXMgbm8gaW5kZXgsIHRoZXJlZm9yZSwgdGhpcyBtZXRob2QgaXMgdW5hdmFpbGFibGUuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbmRleC5nZXQoa2V5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgdGhlIHZhbHVlc1xyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbHVlc1xyXG4gICAqL1xyXG4gIGFsbCgpOiBWW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmUgYWxsIHRoZSB2YWx1ZXNcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHZhbHVlc1xyXG4gICAqL1xyXG4gIGFsbCQoKTogQmVoYXZpb3JTdWJqZWN0PFZbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzJDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZmlyc3QgdmFsdWUgdGhhdCByZXNwZWN0cyBhIGNyaXRlcmlhXHJcbiAgICogQHJldHVybnMgQSB2YWx1ZVxyXG4gICAqL1xyXG4gIGZpcnN0QnkoY2xhdXNlOiBFbnRpdHlGaWx0ZXJDbGF1c2U8Vj4pOiBWIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlcyQudmFsdWUuZmluZChjbGF1c2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2ZSB0aGUgZmlyc3QgdmFsdWUgdGhhdCByZXNwZWN0cyBhIGNyaXRlcmlhXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBhIHZhbHVlXHJcbiAgICovXHJcbiAgZmlyc3RCeSQoY2xhdXNlOiBFbnRpdHlGaWx0ZXJDbGF1c2U8Vj4pOiBPYnNlcnZhYmxlPFY+IHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlcyQucGlwZShtYXAoKHZhbHVlczogVltdKSA9PiB2YWx1ZXMuZmluZChjbGF1c2UpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIHRoZSB2YWx1ZXMgdGhhdCByZXNwZWN0IGEgY3JpdGVyaWFcclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWx1ZXNcclxuICAgKi9cclxuICBtYW55QnkoY2xhdXNlOiBFbnRpdHlGaWx0ZXJDbGF1c2U8Vj4pOiBWW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzJC52YWx1ZS5maWx0ZXIoY2xhdXNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmUgYWxsIHRoZSB2YWx1ZXMgdGhhdCByZXNwZWN0IGEgY3JpdGVyaWFcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHZhbHVlc1xyXG4gICAqL1xyXG4gIG1hbnlCeSQoY2xhdXNlOiBFbnRpdHlGaWx0ZXJDbGF1c2U8Vj4pOiBPYnNlcnZhYmxlPFZbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzJC5waXBlKG1hcCgodmFsdWVzOiBWW10pID0+IHZhbHVlcy5maWx0ZXIoY2xhdXNlKSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIGZpbHRlciBhbmQgc29ydCBhbmQgdW5zdWJzY3JpYmUgZnJvbSB0aGUgc291cmNlXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlcih1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5zb3J0KHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudmFsdWVzJCQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZhbHVlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gaW5kZXhcclxuICAgKiBAcGFyYW0gZ2V0S2V5IE1ldGhvZCB0byBnZXQgYSB2YWx1ZSdzIGlkXHJcbiAgICogQHJldHVybnMgVGhlIHZpZXdcclxuICAgKi9cclxuICBjcmVhdGVJbmRleChnZXRLZXk6IChFKSA9PiBFbnRpdHlLZXkpOiBFbnRpdHlWaWV3PEUsIFY+IHtcclxuICAgIHRoaXMuX2luZGV4ID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5nZXRLZXkkLm5leHQoZ2V0S2V5KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSm9pbiBhbm90aGVyIHNvdXJjZSB0byB0aGUgc3RyZWFtIChjaGFpbmFibGUpXHJcbiAgICogQHBhcmFtIGNsYXVzZSBKb2luIGNsYXVzZVxyXG4gICAqIEByZXR1cm5zIFRoZSB2aWV3XHJcbiAgICovXHJcbiAgam9pbihjbGF1c2U6IEVudGl0eUpvaW5DbGF1c2UpOiBFbnRpdHlWaWV3PEUsIFY+IHtcclxuICAgIGlmICh0aGlzLmxpZnRlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdmlldyBoYXMgYWxyZWFkeSBiZWVuIGxpZnRlZCwgdGhlcmVmb3JlLCBubyBqb2luIGlzIGFsbG93ZWQuJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmpvaW5zLnB1c2goY2xhdXNlKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIHZhbHVlcyAoY2hhaW5hYmxlKVxyXG4gICAqIEBwYXJhbSBjbGF1c2UgRmlsdGVyIGNsYXVzZVxyXG4gICAqIEByZXR1cm5zIFRoZSB2aWV3XHJcbiAgICovXHJcbiAgZmlsdGVyKGNsYXVzZTogRW50aXR5RmlsdGVyQ2xhdXNlPFY+KTogRW50aXR5VmlldzxFLCBWPiB7XHJcbiAgICB0aGlzLmZpbHRlciQubmV4dChjbGF1c2UpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gY2xhdXNlIEZpbHRlciBjbGF1c2VcclxuICAgKiBAcmV0dXJucyBUaGUgZmlsdGVyIGlkXHJcbiAgICovXHJcbiAgYWRkRmlsdGVyKGNsYXVzZTogRW50aXR5RmlsdGVyQ2xhdXNlPFY+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGlkID0gdXVpZCgpO1xyXG4gICAgdGhpcy5maWx0ZXJJbmRleC5zZXQoaWQsIGNsYXVzZSk7XHJcbiAgICB0aGlzLmZpbHRlcnMkLm5leHQoQXJyYXkuZnJvbSh0aGlzLmZpbHRlckluZGV4LnZhbHVlcygpKSk7XHJcbiAgICByZXR1cm4gaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBmaWx0ZXIgYnkgaWRcclxuICAgKiBAcGFyYW0gY2xhdXNlIEZpbHRlciBjbGF1c2VcclxuICAgKi9cclxuICByZW1vdmVGaWx0ZXIoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5maWx0ZXJJbmRleC5kZWxldGUoaWQpO1xyXG4gICAgdGhpcy5maWx0ZXJzJC5uZXh0KEFycmF5LmZyb20odGhpcy5maWx0ZXJJbmRleC52YWx1ZXMoKSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCB2YWx1ZXMgKGNoYWluYWJsZSlcclxuICAgKiBAcGFyYW0gY2xhdXNlU29ydCBjbGF1c2VcclxuICAgKiBAcmV0dXJucyBUaGUgdmlld1xyXG4gICAqL1xyXG4gIHNvcnQoY2xhdXNlOiBFbnRpdHlTb3J0Q2xhdXNlPFY+KTogRW50aXR5VmlldzxFLCBWPiB7XHJcbiAgICB0aGlzLnNvcnQkLm5leHQoY2xhdXNlKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBmaW5hbCBvYnNlcnZhYmxlXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxyXG4gICAqL1xyXG4gIGxpZnQoKSB7XHJcbiAgICB0aGlzLmxpZnRlZCA9IHRydWU7XHJcbiAgICBjb25zdCBzb3VyY2UkID0gdGhpcy5qb2lucy5sZW5ndGggPiAwID8gdGhpcy5saWZ0Sm9pbmVkU291cmNlKCkgOiB0aGlzLmxpZnRTb3VyY2UoKTtcclxuICAgIGNvbnN0IG9ic2VydmFibGVzJCA9IFtcclxuICAgICAgc291cmNlJCxcclxuICAgICAgdGhpcy5maWx0ZXJzJCxcclxuICAgICAgdGhpcy5maWx0ZXIkLFxyXG4gICAgICB0aGlzLnNvcnQkLFxyXG4gICAgICB0aGlzLmdldEtleSRcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy52YWx1ZXMkJCA9IGNvbWJpbmVMYXRlc3Qob2JzZXJ2YWJsZXMkKVxyXG4gICAgICAucGlwZShza2lwKDEpLCBkZWJvdW5jZVRpbWUoNSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGJ1bmNoOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IFtfdmFsdWVzLCBmaWx0ZXJzLCBmaWx0ZXIsIHNvcnQsIGdldEtleV0gPSBidW5jaDtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnByb2Nlc3NWYWx1ZXMoX3ZhbHVlcywgZmlsdGVycywgZmlsdGVyLCBzb3J0KTtcclxuICAgICAgICBjb25zdCBnZW5lcmF0ZUluZGV4ID0gZ2V0S2V5ICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXModmFsdWVzLCBnZW5lcmF0ZUluZGV4KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIHdoZW4gbm8gam9pbnMgYXJlIGRlZmluZWRcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsaWZ0U291cmNlKCk6IE9ic2VydmFibGU8VltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UkIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZbXT47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgdGhlIHNvdXJjZSBvYnNlcnZhYmxlIHdoZW4gam9pbnMgYXJlIGRlZmluZWRcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsaWZ0Sm9pbmVkU291cmNlKCk6IE9ic2VydmFibGU8VltdPiB7XHJcbiAgICBjb25zdCBzb3VyY2VzJCA9IFt0aGlzLnNvdXJjZSQsIGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgIHRoaXMuam9pbnMubWFwKChqb2luOiBFbnRpdHlKb2luQ2xhdXNlKSA9PiBqb2luLnNvdXJjZSlcclxuICAgICldO1xyXG5cclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHNvdXJjZXMkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGJ1bmNoOiBbRVtdLCBhbnlbXV0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtlbnRpdGllcywgam9pbkRhdGFdID0gYnVuY2g7XHJcbiAgICAgICAgICByZXR1cm4gZW50aXRpZXMucmVkdWNlKCh2YWx1ZXM6IFZbXSwgZW50aXR5OiBFKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb21wdXRlSm9pbmVkVmFsdWUoZW50aXR5LCBqb2luRGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGpvaW5zIHRvIGEgc291cmNlJ3MgZW50aXR5IGFuZCByZXR1cm4gdGhlIGZpbmFsIHZhbHVlXHJcbiAgICogQHJldHVybnMgRmluYWwgdmFsdWVcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXB1dGVKb2luZWRWYWx1ZShlbnRpdHk6IEUsIGpvaW5EYXRhOiBhbnlbXSk6IFYgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHZhbHVlID0gZW50aXR5IGFzIFBhcnRpYWw8Vj47XHJcbiAgICBsZXQgam9pbkluZGV4ID0gMDtcclxuICAgIHdoaWxlICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGpvaW5JbmRleCA8IHRoaXMuam9pbnMubGVuZ3RoKSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5qb2luc1tqb2luSW5kZXhdLnJlZHVjZSh2YWx1ZSwgam9pbkRhdGFbam9pbkluZGV4XSk7XHJcbiAgICAgIGpvaW5JbmRleCArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlIGFzIFY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaWx0ZXIgYW5kIHNvcnQgdmFsdWVzIGJlZm9yZSBzdHJlYW1pbmcgdGhlbVxyXG4gICAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzXHJcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyIGNsYXVzZXNcclxuICAgKiBAcGFyYW0gZmlsdGVyIEZpbHRlciBjbGF1c2VcclxuICAgKiBAcGFyYW0gc29ydCBTb3J0IGNsYXVzZVxyXG4gICAqIEByZXR1cm5zIEZpbHRlcmVkIGFuZCBzb3J0ZWQgdmFsdWVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcm9jZXNzVmFsdWVzKFxyXG4gICAgdmFsdWVzOiBWW10sIGZpbHRlcnM6IEVudGl0eUZpbHRlckNsYXVzZVtdLCBmaWx0ZXI6IEVudGl0eUZpbHRlckNsYXVzZSwgc29ydDogRW50aXR5U29ydENsYXVzZVxyXG4gICk6IFZbXSB7XHJcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc2xpY2UoMCk7XHJcbiAgICB2YWx1ZXMgPSB0aGlzLmZpbHRlclZhbHVlcyh2YWx1ZXMsIGZpbHRlcnMuY29uY2F0KFtmaWx0ZXJdKSk7XHJcbiAgICB2YWx1ZXMgPSB0aGlzLnNvcnRWYWx1ZXModmFsdWVzLCBzb3J0KTtcclxuICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaWx0ZXIgdmFsdWVzXHJcbiAgICogQHBhcmFtIHZhbHVlcyBWYWx1ZXNcclxuICAgKiBAcGFyYW0gZmlsdGVycyBGaWx0ZXIgY2xhdXNlc1xyXG4gICAqIEByZXR1cm5zIEZpbHRlcmVkIHZhbHVlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVyVmFsdWVzKHZhbHVlczogVltdLCBjbGF1c2VzOiBFbnRpdHlGaWx0ZXJDbGF1c2VbXSk6IFZbXSB7XHJcbiAgICBpZiAoY2xhdXNlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHZhbHVlczsgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZXNcclxuICAgICAgLmZpbHRlcigodmFsdWU6IFYpID0+IHtcclxuICAgICAgICByZXR1cm4gY2xhdXNlc1xyXG4gICAgICAgICAgLmZpbHRlcigoY2xhdXNlOiBFbnRpdHlGaWx0ZXJDbGF1c2UpID0+IGNsYXVzZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgLmV2ZXJ5KChjbGF1c2U6IEVudGl0eUZpbHRlckNsYXVzZSkgPT4gY2xhdXNlKHZhbHVlKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCB2YWx1ZXNcclxuICAgKiBAcGFyYW0gdmFsdWVzIFZhbHVlc1xyXG4gICAqIEBwYXJhbSBzb3J0IFNvcnQgY2xhdXNlXHJcbiAgICogQHJldHVybnMgU29ydGVkIHZhbHVlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydFZhbHVlcyh2YWx1ZXM6IFZbXSwgY2xhdXNlOiBFbnRpdHlTb3J0Q2xhdXNlKTogVltdIHtcclxuICAgIGlmIChjbGF1c2UgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdmFsdWVzOyB9XHJcbiAgICByZXR1cm4gdmFsdWVzLnNvcnQoKHYxOiBWLCB2MjogVikgPT4ge1xyXG4gICAgICByZXR1cm4gT2JqZWN0VXRpbHMubmF0dXJhbENvbXBhcmUoXHJcbiAgICAgICAgY2xhdXNlLnZhbHVlQWNjZXNzb3IodjEpLFxyXG4gICAgICAgIGNsYXVzZS52YWx1ZUFjY2Vzc29yKHYyKSxcclxuICAgICAgICBjbGF1c2UuZGlyZWN0aW9uLFxyXG4gICAgICAgIGNsYXVzZS5udWxsc0ZpcnN0XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWx1ZSBhbmQgb3B0aW9uYWxseSBnZW5lcmF0ZSBhbiBpbmRleFxyXG4gICAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzXHJcbiAgICogQHBhcmFtIGdlbmVyYXRlSW5kZXggYm9vbGVhblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VmFsdWVzKHZhbHVlczogVltdLCBnZW5lcmF0ZUluZGV4OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZ2VuZXJhdGVJbmRleCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9pbmRleCA9IHRoaXMuZ2VuZXJhdGVJbmRleCh2YWx1ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcyk7XHJcblxyXG4gICAgY29uc3QgY291bnQgPSB2YWx1ZXMubGVuZ3RoO1xyXG4gICAgY29uc3QgZW1wdHkgPSBjb3VudCA9PT0gMDtcclxuICAgIHRoaXMuY291bnQkLm5leHQoY291bnQpO1xyXG4gICAgdGhpcy5lbXB0eSQubmV4dChlbXB0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIGNvbXBsZXRlIGluZGV4IG9mIGFsbCB0aGUgdmFsdWVzXHJcbiAgICogQHBhcmFtIGVudGl0aWVzIEVudGl0aWVzXHJcbiAgICogQHJldHVybnMgSW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlSW5kZXgodmFsdWVzOiBWW10pOiBNYXA8RW50aXR5S2V5LCBWPiB7XHJcbiAgICBjb25zdCBlbnRyaWVzID0gdmFsdWVzLm1hcCgodmFsdWU6IFYpID0+IFt0aGlzLmdldEtleSh2YWx1ZSksIHZhbHVlXSk7XHJcbiAgICByZXR1cm4gbmV3IE1hcChlbnRyaWVzIGFzIFtFbnRpdHlLZXksIFZdW10pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,120 +0,0 @@
1
- import { skip } from 'rxjs/operators';
2
- import { ObjectUtils } from '@igo2/utils';
3
- /**
4
- * This class is used to synchronize a component's changes
5
- * detection with an EntityStore changes. For example, it is frequent
6
- * to have a component subscribe to a store's selected entity and, at the same time,
7
- * this component provides a way to select an entity with, let's say, a click.
8
- *
9
- * This class automatically handles those case and triggers the compoent's
10
- * change detection when needed.
11
- *
12
- * Note: If the component observes the store's stateView, a workspace is
13
- * probably not required because the stateView catches any changes to the
14
- * entities and their state.
15
- */
16
- export class EntityStoreWatcher {
17
- constructor(store, cdRef) {
18
- /**
19
- * Component inner state
20
- */
21
- this.innerStateIndex = new Map();
22
- this.setChangeDetector(cdRef);
23
- this.setStore(store);
24
- }
25
- destroy() {
26
- this.setChangeDetector(undefined);
27
- this.setStore(undefined);
28
- }
29
- /**
30
- * Bind this workspace to a store and start watching for changes
31
- * @param store Entity store
32
- */
33
- setStore(store) {
34
- if (store === undefined) {
35
- this.teardownObservers();
36
- this.innerStateIndex.clear();
37
- this.store = undefined;
38
- return;
39
- }
40
- this.setStore(undefined);
41
- this.store = store;
42
- this.setupObservers();
43
- this.detectChanges();
44
- }
45
- /**
46
- * Bind this workspace to a component's change detector
47
- * @param cdRef Change detector
48
- */
49
- setChangeDetector(cdRef) {
50
- this.cdRef = cdRef;
51
- }
52
- /**
53
- * Set up observers on a store's entities and their state
54
- * @param store Entity store
55
- */
56
- setupObservers() {
57
- this.teardownObservers();
58
- this.entities$$ = this.store.entities$
59
- .subscribe((entities) => this.onEntitiesChange(entities));
60
- this.state$$ = this.store.state.change$
61
- .pipe(skip(1))
62
- .subscribe(() => this.onStateChange());
63
- }
64
- /**
65
- * Teardown store observers
66
- */
67
- teardownObservers() {
68
- if (this.entities$$ !== undefined) {
69
- this.entities$$.unsubscribe();
70
- }
71
- if (this.state$$ !== undefined) {
72
- this.state$$.unsubscribe();
73
- }
74
- this.entities$$ = undefined;
75
- this.state$$ = undefined;
76
- }
77
- /**
78
- * When the entities change, always trigger the changes detection
79
- */
80
- onEntitiesChange(entities) {
81
- this.detectChanges();
82
- }
83
- /**
84
- * When the entities state change, trigger the change detection
85
- * only if the component has not handled these changes yet. For example,
86
- * the component might have initiated thoses changes itself.
87
- */
88
- onStateChange() {
89
- let changesDetected = false;
90
- const storeIndex = this.store.state.index;
91
- const innerIndex = this.innerStateIndex;
92
- if (storeIndex.size !== innerIndex.size) {
93
- changesDetected = this.detectChanges();
94
- }
95
- const storeKeys = Array.from(storeIndex.keys());
96
- for (const key of storeKeys) {
97
- const storeValue = storeIndex.get(key);
98
- const innerValue = innerIndex.get(key);
99
- if (changesDetected === false) {
100
- if (innerValue === undefined) {
101
- changesDetected = this.detectChanges();
102
- }
103
- else if (!ObjectUtils.objectsAreEquivalent(storeValue, innerValue)) {
104
- changesDetected = this.detectChanges();
105
- }
106
- }
107
- this.innerStateIndex.set(key, Object.assign({}, storeValue));
108
- }
109
- }
110
- /**
111
- * Trigger the change detection of the workspace is bound to a change detector
112
- */
113
- detectChanges() {
114
- if (this.cdRef !== undefined) {
115
- this.cdRef.detectChanges();
116
- }
117
- return true;
118
- }
119
- }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9zaGFyZWQvd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUsxQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBMkI3QixZQUFZLEtBQXNCLEVBQUUsS0FBeUI7UUFmN0Q7O1dBRUc7UUFDSyxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBYW5FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN2QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVE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ZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL2VudGl0eS5pbnRlcmZhY2VzJztcclxuXHJcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XHJcblxyXG4vKipcclxuICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHN5bmNocm9uaXplIGEgY29tcG9uZW50J3MgY2hhbmdlc1xyXG4gKiBkZXRlY3Rpb24gd2l0aCBhbiBFbnRpdHlTdG9yZSBjaGFuZ2VzLiBGb3IgZXhhbXBsZSwgaXQgaXMgZnJlcXVlbnRcclxuICogdG8gaGF2ZSBhIGNvbXBvbmVudCBzdWJzY3JpYmUgdG8gYSBzdG9yZSdzIHNlbGVjdGVkIGVudGl0eSBhbmQsIGF0IHRoZSBzYW1lIHRpbWUsXHJcbiAqIHRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgd2F5IHRvIHNlbGVjdCBhbiBlbnRpdHkgd2l0aCwgbGV0J3Mgc2F5LCBhIGNsaWNrLlxyXG4gKlxyXG4gKiBUaGlzIGNsYXNzIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0aG9zZSBjYXNlIGFuZCB0cmlnZ2VycyB0aGUgY29tcG9lbnQnc1xyXG4gKiBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gbmVlZGVkLlxyXG4gKlxyXG4gKiBOb3RlOiBJZiB0aGUgY29tcG9uZW50IG9ic2VydmVzIHRoZSBzdG9yZSdzIHN0YXRlVmlldywgYSB3b3Jrc3BhY2UgaXNcclxuICogcHJvYmFibHkgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHN0YXRlVmlldyBjYXRjaGVzIGFueSBjaGFuZ2VzIHRvIHRoZVxyXG4gKiBlbnRpdGllcyBhbmQgdGhlaXIgc3RhdGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmVXYXRjaGVyPEUgZXh0ZW5kcyBvYmplY3Q+IHtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcG9uZW50IGNoYW5nZSBkZXRlY3RvclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBwcml2YXRlIHN0b3JlOiBFbnRpdHlTdG9yZTxFPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcG9uZW50IGlubmVyIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbm5lclN0YXRlSW5kZXggPSBuZXcgTWFwPEVudGl0eUtleSwge1trZXk6IHN0cmluZ106IGFueX0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBlbnRpdGllc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZW50aXRpZXMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHN0b3JlJ3Mgc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRlJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3Ioc3RvcmU/OiBFbnRpdHlTdG9yZTxFPiwgY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5zZXRDaGFuZ2VEZXRlY3RvcihjZFJlZik7XHJcbiAgICB0aGlzLnNldFN0b3JlKHN0b3JlKTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnNldENoYW5nZURldGVjdG9yKHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLnNldFN0b3JlKHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCaW5kIHRoaXMgd29ya3NwYWNlIHRvIGEgc3RvcmUgYW5kIHN0YXJ0IHdhdGNoaW5nIGZvciBjaGFuZ2VzXHJcbiAgICogQHBhcmFtIHN0b3JlIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIHNldFN0b3JlKHN0b3JlPzogRW50aXR5U3RvcmU8RT4pIHtcclxuICAgIGlmIChzdG9yZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudGVhcmRvd25PYnNlcnZlcnMoKTtcclxuICAgICAgdGhpcy5pbm5lclN0YXRlSW5kZXguY2xlYXIoKTtcclxuICAgICAgdGhpcy5zdG9yZSA9IHVuZGVmaW5lZDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U3RvcmUodW5kZWZpbmVkKTtcclxuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcclxuICAgIHRoaXMuc2V0dXBPYnNlcnZlcnMoKTtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmluZCB0aGlzIHdvcmtzcGFjZSB0byBhIGNvbXBvbmVudCdzIGNoYW5nZSBkZXRlY3RvclxyXG4gICAqIEBwYXJhbSBjZFJlZiBDaGFuZ2UgZGV0ZWN0b3JcclxuICAgKi9cclxuICBzZXRDaGFuZ2VEZXRlY3RvcihjZFJlZj86IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICB0aGlzLmNkUmVmID0gY2RSZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdXAgb2JzZXJ2ZXJzIG9uIGEgc3RvcmUncyBlbnRpdGllcyBhbmQgdGhlaXIgc3RhdGVcclxuICAgKiBAcGFyYW0gc3RvcmUgRW50aXR5IHN0b3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cE9ic2VydmVycygpIHtcclxuICAgIHRoaXMudGVhcmRvd25PYnNlcnZlcnMoKTtcclxuXHJcbiAgICB0aGlzLmVudGl0aWVzJCQgPSB0aGlzLnN0b3JlLmVudGl0aWVzJFxyXG4gICAgICAuc3Vic2NyaWJlKChlbnRpdGllczogRVtdKSA9PiB0aGlzLm9uRW50aXRpZXNDaGFuZ2UoZW50aXRpZXMpKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlJCQgPSB0aGlzLnN0b3JlLnN0YXRlLmNoYW5nZSRcclxuICAgICAgLnBpcGUoc2tpcCgxKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uU3RhdGVDaGFuZ2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUZWFyZG93biBzdG9yZSBvYnNlcnZlcnNcclxuICAgKi9cclxuICBwcml2YXRlIHRlYXJkb3duT2JzZXJ2ZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuZW50aXRpZXMkJCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW50aXRpZXMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RhdGUkJCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdGllcyQkID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zdGF0ZSQkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0aGUgZW50aXRpZXMgY2hhbmdlLCBhbHdheXMgdHJpZ2dlciB0aGUgY2hhbmdlcyBkZXRlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uRW50aXRpZXNDaGFuZ2UoZW50aXRpZXM6IEVbXSkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHRoZSBlbnRpdGllcyBzdGF0ZSBjaGFuZ2UsIHRyaWdnZXIgdGhlIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgKiBvbmx5IGlmIHRoZSBjb21wb25lbnQgaGFzIG5vdCBoYW5kbGVkIHRoZXNlIGNoYW5nZXMgeWV0LiBGb3IgZXhhbXBsZSxcclxuICAgKiB0aGUgY29tcG9uZW50IG1pZ2h0IGhhdmUgaW5pdGlhdGVkIHRob3NlcyBjaGFuZ2VzIGl0c2VsZi5cclxuICAgKi9cclxuICBwcml2YXRlIG9uU3RhdGVDaGFuZ2UoKSB7XHJcbiAgICBsZXQgY2hhbmdlc0RldGVjdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBzdG9yZUluZGV4ID0gdGhpcy5zdG9yZS5zdGF0ZS5pbmRleDtcclxuICAgIGNvbnN0IGlubmVySW5kZXggPSB0aGlzLmlubmVyU3RhdGVJbmRleDtcclxuXHJcbiAgICBpZiAoc3RvcmVJbmRleC5zaXplICE9PSBpbm5lckluZGV4LnNpemUpIHtcclxuICAgICAgY2hhbmdlc0RldGVjdGVkID0gdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RvcmVLZXlzID0gQXJyYXkuZnJvbShzdG9yZUluZGV4LmtleXMoKSk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzdG9yZUtleXMpIHtcclxuICAgICAgY29uc3Qgc3RvcmVWYWx1ZSA9IHN0b3JlSW5kZXguZ2V0KGtleSk7XHJcbiAgICAgIGNvbnN0IGlubmVyVmFsdWUgPSBpbm5lckluZGV4LmdldChrZXkpO1xyXG4gICAgICBpZiAoY2hhbmdlc0RldGVjdGVkID09PSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChpbm5lclZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdFV0aWxzLm9iamVjdHNBcmVFcXVpdmFsZW50KHN0b3JlVmFsdWUsIGlubmVyVmFsdWUpKSB7XHJcbiAgICAgICAgICBjaGFuZ2VzRGV0ZWN0ZWQgPSB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaW5uZXJTdGF0ZUluZGV4LnNldChrZXksIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlVmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgdGhlIGNoYW5nZSBkZXRlY3Rpb24gb2YgdGhlIHdvcmtzcGFjZSBpcyBib3VuZCB0byBhIGNoYW5nZSBkZXRlY3RvclxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmNkUmVmICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,148 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@igo2/core";
4
- const _c0 = ["flexibleMain"];
5
- const _c1 = ["*", [["", "igoFlexibleFill", ""]]];
6
- const _c2 = ["*", "[igoFlexibleFill]"];
7
- export class FlexibleComponent {
8
- constructor(el, mediaService) {
9
- this.el = el;
10
- this.mediaService = mediaService;
11
- this._initial = '0';
12
- this._collapsed = '0';
13
- this._expanded = '100%';
14
- this._initialMobile = this.expanded;
15
- this._collapsedMobile = this.collapsed;
16
- this._expandedMobile = this.expanded;
17
- this._direction = 'column';
18
- this._state = 'initial';
19
- }
20
- get initial() {
21
- return this._initial;
22
- }
23
- set initial(value) {
24
- this._initial = value;
25
- }
26
- get collapsed() {
27
- return this._collapsed;
28
- }
29
- set collapsed(value) {
30
- this._collapsed = value;
31
- }
32
- get expanded() {
33
- return this._expanded;
34
- }
35
- set expanded(value) {
36
- this._expanded = value;
37
- }
38
- get initialMobile() {
39
- return this._initialMobile;
40
- }
41
- set initialMobile(value) {
42
- this._initialMobile = value;
43
- }
44
- get collapsedMobile() {
45
- return this._collapsedMobile;
46
- }
47
- set collapsedMobile(value) {
48
- this._collapsedMobile = value;
49
- }
50
- get expandedMobile() {
51
- return this._expandedMobile;
52
- }
53
- set expandedMobile(value) {
54
- this._expandedMobile = value;
55
- }
56
- get direction() {
57
- return this._direction;
58
- }
59
- set direction(value) {
60
- this._direction = value;
61
- }
62
- get state() {
63
- return this._state;
64
- }
65
- set state(value) {
66
- const sizes = {
67
- initial: this.initial,
68
- collapsed: this.collapsed,
69
- expanded: this.expanded
70
- };
71
- if (this.mediaService.isMobile()) {
72
- Object.assign(sizes, {
73
- initial: this.initialMobile,
74
- collapsed: this.collapsedMobile,
75
- expanded: this.expandedMobile
76
- });
77
- }
78
- const size = sizes[value];
79
- if (size !== undefined) {
80
- this.setSize(size);
81
- setTimeout(() => {
82
- this._state = value;
83
- }, FlexibleComponent.transitionTime);
84
- }
85
- }
86
- ngOnInit() {
87
- this.el.nativeElement.className += this.direction;
88
- // Since this component supports different sizes
89
- // on mobile, force a redraw when the media changes
90
- this.mediaService$$ = this.mediaService.media$.subscribe((media) => (this.state = this.state));
91
- }
92
- ngOnDestroy() {
93
- if (this.mediaService$$) {
94
- this.mediaService$$.unsubscribe();
95
- }
96
- }
97
- setSize(size) {
98
- this._state = 'transition';
99
- if (this.direction === 'column') {
100
- this.main.nativeElement.style.height = size;
101
- }
102
- else if (this.direction === 'row') {
103
- this.main.nativeElement.style.width = size;
104
- }
105
- }
106
- }
107
- FlexibleComponent.transitionTime = 250;
108
- FlexibleComponent.ɵfac = function FlexibleComponent_Factory(t) { return new (t || FlexibleComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.MediaService)); };
109
- FlexibleComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FlexibleComponent, selectors: [["igo-flexible"]], viewQuery: function FlexibleComponent_Query(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵviewQuery(_c0, 7);
111
- } if (rf & 2) {
112
- let _t;
113
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.main = _t.first);
114
- } }, inputs: { initial: "initial", collapsed: "collapsed", expanded: "expanded", initialMobile: "initialMobile", collapsedMobile: "collapsedMobile", expandedMobile: "expandedMobile", direction: "direction", state: "state" }, ngContentSelectors: _c2, decls: 8, vars: 4, consts: [["flexibleMain", ""], [1, "igo-container"], [1, "igo-flexible-fill"]], template: function FlexibleComponent_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵprojectionDef(_c1);
116
- i0.ɵɵelementStart(0, "div", null, 0)(2, "div", 1);
117
- i0.ɵɵprojection(3);
118
- i0.ɵɵelementEnd()();
119
- i0.ɵɵelementStart(4, "div", 2)(5, "div")(6, "div", 1);
120
- i0.ɵɵprojection(7, 1);
121
- i0.ɵɵelementEnd()()();
122
- } if (rf & 2) {
123
- i0.ɵɵclassMapInterpolate2("igo-flexible-main ", ctx.state, " ", ctx.direction, "");
124
- } }, styles: ["[_nghost-%COMP%]{display:flex;height:100%;width:100%}.column[_nghost-%COMP%]{flex-direction:column}.row[_nghost-%COMP%]{flex-direction:row}.igo-flexible-main[_ngcontent-%COMP%]{flex:0 0 auto;overflow:hidden}.igo-flexible-main.column[_ngcontent-%COMP%]{transition:height .25s ease-in}.igo-flexible-main.row[_ngcontent-%COMP%]{transition:width .25s ease-in}.igo-flexible-fill[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:absolute;inset:0}.igo-container[_ngcontent-%COMP%]{width:calc(100% - 10px);height:100%;padding:5px 0;margin:0 5px;overflow:hidden;position:relative} .igo-flexible-fill{flex:1 1 auto;overflow:hidden;position:relative} .igo-content{height:100%;width:100%;overflow:auto} igo-panel{height:100%}"] });
125
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FlexibleComponent, [{
126
- type: Component,
127
- args: [{ selector: 'igo-flexible', template: "<div #flexibleMain class=\"igo-flexible-main {{state}} {{direction}}\">\r\n <div class=\"igo-container\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n<div class=\"igo-flexible-fill\">\r\n <div>\r\n \t<div class=\"igo-container\">\r\n <ng-content select=\"[igoFlexibleFill]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;height:100%;width:100%}:host.column{flex-direction:column}:host.row{flex-direction:row}.igo-flexible-main{flex:0 0 auto;overflow:hidden}.igo-flexible-main.column{transition:height .25s ease-in}.igo-flexible-main.row{transition:width .25s ease-in}.igo-flexible-fill>div{position:absolute;inset:0}.igo-container{width:calc(100% - 10px);height:100%;padding:5px 0;margin:0 5px;overflow:hidden;position:relative}::ng-deep .igo-flexible-fill{flex:1 1 auto;overflow:hidden;position:relative}::ng-deep .igo-content{height:100%;width:100%;overflow:auto}::ng-deep igo-panel{height:100%}\n"] }]
128
- }], function () { return [{ type: i0.ElementRef }, { type: i1.MediaService }]; }, { main: [{
129
- type: ViewChild,
130
- args: ['flexibleMain', { static: true }]
131
- }], initial: [{
132
- type: Input
133
- }], collapsed: [{
134
- type: Input
135
- }], expanded: [{
136
- type: Input
137
- }], initialMobile: [{
138
- type: Input
139
- }], collapsedMobile: [{
140
- type: Input
141
- }], expandedMobile: [{
142
- type: Input
143
- }], direction: [{
144
- type: Input
145
- }], state: [{
146
- type: Input
147
- }] }); })();
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleGlibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWIvZmxleGlibGUvZmxleGlibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9saWIvZmxleGlibGUvZmxleGlibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWTNGLE1BQU0sT0FBTyxpQkFBaUI7SUFtRzVCLFlBQW9CLEVBQWMsRUFBVSxZQUEwQjtRQUFsRCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUF2RjlELGFBQVEsR0FBRyxHQUFHLENBQUM7UUFTZixlQUFVLEdBQUcsR0FBRyxDQUFDO1FBU2pCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFTbkIsbUJBQWMsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBU3ZDLHFCQUFnQixHQUFXLElBQUksQ0FBQyxTQUFTLENBQUM7UUFTMUMsb0JBQWUsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBU3hDLGVBQVUsR0FBc0IsUUFBUSxDQUFDO1FBNkJ6QyxXQUFNLEdBQWtCLFNBQVMsQ0FBQztJQUkrQixDQUFDO0lBOUYxRSxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUdELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsVUFBVSxH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QUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDN0M7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7QUE1SE0sZ0NBQWMsR0FBRyxHQUFHLENBQUM7a0ZBRGpCLGlCQUFpQjtvRUFBakIsaUJBQWlCOzs7Ozs7O1FDWjlCLG9DQUFxRSxhQUFBO1FBRWpFLGtCQUF5QjtRQUMzQixpQkFBTSxFQUFBO1FBRVIsOEJBQStCLFVBQUEsYUFBQTtRQUd6QixxQkFBb0Q7UUFDdEQsaUJBQU0sRUFBQSxFQUFBOztRQVRTLGtGQUFpRDs7dUZEWXZELGlCQUFpQjtjQUw3QixTQUFTOzJCQUNFLGNBQWM7d0ZBT3FCLElBQUk7a0JBQWhELFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUd2QyxPQUFPO2tCQURWLEtBQUs7WUFVRixTQUFTO2tCQURaLEtBQUs7WUFVRixRQUFRO2tCQURYLEtBQUs7WUFVRixhQUFhO2tCQURoQixLQUFLO1lBVUYsZUFBZTtrQkFEbEIsS0FBSztZQVVGLGNBQWM7a0JBRGpCLEtBQUs7WUFVRixTQUFTO2tCQURaLEtBQUs7WUFVRixLQUFLO2tCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTWVkaWEsIE1lZGlhU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRmxleGlibGVTdGF0ZSwgRmxleGlibGVEaXJlY3Rpb24gfSBmcm9tICcuL2ZsZXhpYmxlLnR5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tZmxleGlibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGV4aWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxleGlibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxleGlibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgc3RhdGljIHRyYW5zaXRpb25UaW1lID0gMjUwO1xyXG5cclxuICBAVmlld0NoaWxkKCdmbGV4aWJsZU1haW4nLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYWluO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpbml0aWFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcclxuICB9XHJcbiAgc2V0IGluaXRpYWwodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5pdGlhbCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9pbml0aWFsID0gJzAnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjb2xsYXBzZWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWQ7XHJcbiAgfVxyXG4gIHNldCBjb2xsYXBzZWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29sbGFwc2VkID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbGxhcHNlZCA9ICcwJztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZXhwYW5kZWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcclxuICB9XHJcbiAgc2V0IGV4cGFuZGVkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2V4cGFuZGVkID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2V4cGFuZGVkID0gJzEwMCUnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpbml0aWFsTW9iaWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbE1vYmlsZTtcclxuICB9XHJcbiAgc2V0IGluaXRpYWxNb2JpbGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5pdGlhbE1vYmlsZSA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9pbml0aWFsTW9iaWxlOiBzdHJpbmcgPSB0aGlzLmV4cGFuZGVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjb2xsYXBzZWRNb2JpbGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWRNb2JpbGU7XHJcbiAgfVxyXG4gIHNldCBjb2xsYXBzZWRNb2JpbGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29sbGFwc2VkTW9iaWxlID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbGxhcHNlZE1vYmlsZTogc3RyaW5nID0gdGhpcy5jb2xsYXBzZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGV4cGFuZGVkTW9iaWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRNb2JpbGU7XHJcbiAgfVxyXG4gIHNldCBleHBhbmRlZE1vYmlsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9leHBhbmRlZE1vYmlsZSA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9leHBhbmRlZE1vYmlsZTogc3RyaW5nID0gdGhpcy5leHBhbmRlZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGlyZWN0aW9uKCk6IEZsZXhpYmxlRGlyZWN0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXJlY3Rpb247XHJcbiAgfVxyXG4gIHNldCBkaXJlY3Rpb24odmFsdWU6IEZsZXhpYmxlRGlyZWN0aW9uKSB7XHJcbiAgICB0aGlzLl9kaXJlY3Rpb24gPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uOiBGbGV4aWJsZURpcmVjdGlvbiA9ICdjb2x1bW4nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBzdGF0ZSgpOiBGbGV4aWJsZVN0YXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcclxuICB9XHJcbiAgc2V0IHN0YXRlKHZhbHVlOiBGbGV4aWJsZVN0YXRlKSB7XHJcbiAgICBjb25zdCBzaXplcyA9IHtcclxuICAgICAgaW5pdGlhbDogdGhpcy5pbml0aWFsLFxyXG4gICAgICBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkLFxyXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5tZWRpYVNlcnZpY2UuaXNNb2JpbGUoKSkge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHNpemVzLCB7XHJcbiAgICAgICAgaW5pdGlhbDogdGhpcy5pbml0aWFsTW9iaWxlLFxyXG4gICAgICAgIGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWRNb2JpbGUsXHJcbiAgICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWRNb2JpbGVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2l6ZSA9IHNpemVzW3ZhbHVlXTtcclxuICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZXRTaXplKHNpemUpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zdGF0ZSA9IHZhbHVlO1xyXG4gICAgICB9LCBGbGV4aWJsZUNvbXBvbmVudC50cmFuc2l0aW9uVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0YXRlOiBGbGV4aWJsZVN0YXRlID0gJ2luaXRpYWwnO1xyXG5cclxuICBwcml2YXRlIG1lZGlhU2VydmljZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgbWVkaWFTZXJ2aWNlOiBNZWRpYVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZSArPSB0aGlzLmRpcmVjdGlvbjtcclxuXHJcbiAgICAvLyBTaW5jZSB0aGlzIGNvbXBvbmVudCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZXNcclxuICAgIC8vIG9uIG1vYmlsZSwgZm9yY2UgYSByZWRyYXcgd2hlbiB0aGUgbWVkaWEgY2hhbmdlc1xyXG4gICAgdGhpcy5tZWRpYVNlcnZpY2UkJCA9IHRoaXMubWVkaWFTZXJ2aWNlLm1lZGlhJC5zdWJzY3JpYmUoXHJcbiAgICAgIChtZWRpYTogTWVkaWEpID0+ICh0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLm1lZGlhU2VydmljZSQkKSB7XHJcbiAgICAgIHRoaXMubWVkaWFTZXJ2aWNlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2l6ZShzaXplOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3N0YXRlID0gJ3RyYW5zaXRpb24nO1xyXG5cclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2NvbHVtbicpIHtcclxuICAgICAgdGhpcy5tYWluLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnKSB7XHJcbiAgICAgIHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjZmxleGlibGVNYWluIGNsYXNzPVwiaWdvLWZsZXhpYmxlLW1haW4ge3tzdGF0ZX19IHt7ZGlyZWN0aW9ufX1cIj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWNvbnRhaW5lclwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImlnby1mbGV4aWJsZS1maWxsXCI+XHJcbiAgPGRpdj5cclxuICBcdDxkaXYgY2xhc3M9XCJpZ28tY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ29GbGV4aWJsZUZpbGxdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=