@ng-atomic/components 18.2.0 → 18.4.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 (302) hide show
  1. package/atoms/smart-menu-button/smart-menu-button.atom.d.ts +3 -3
  2. package/components.module.d.ts +6 -1
  3. package/esm2022/atoms/icon/icon.atom.mjs +2 -2
  4. package/esm2022/atoms/smart-menu-button/smart-menu-button.atom.mjs +77 -114
  5. package/esm2022/components.module.mjs +7 -3
  6. package/esm2022/extras/editor/editor.component.mjs +78 -46
  7. package/esm2022/frames/app/app.frame.mjs +130 -70
  8. package/esm2022/frames/auto-layout/auto-layout.frame.mjs +29 -7
  9. package/esm2022/frames/columns/columns.frame.mjs +2 -2
  10. package/esm2022/frames/divider/divider.frame.mjs +2 -2
  11. package/esm2022/frames/drawer/drawer.frame.mjs +2 -2
  12. package/esm2022/frames/entrance/entrance.frame.mjs +2 -2
  13. package/esm2022/frames/fab/fab.frame.mjs +2 -2
  14. package/esm2022/frames/frames.module.mjs +3 -3
  15. package/esm2022/frames/line-up/line-up.animations.mjs +3 -7
  16. package/esm2022/frames/line-up/line-up.frame.mjs +2 -2
  17. package/esm2022/frames/loading/loading.frame.mjs +2 -2
  18. package/esm2022/frames/progress-bar/index.mjs +2 -0
  19. package/esm2022/frames/progress-bar/ng-atomic-components-frames-progress-bar.mjs +5 -0
  20. package/esm2022/frames/progress-bar/progress-bar.frame.mjs +53 -0
  21. package/esm2022/frames/router-outlet/router-outlet.frame.mjs +96 -41
  22. package/esm2022/frames/scroll/scroll.frame.mjs +32 -14
  23. package/esm2022/frames/scroll-v2/index.mjs +2 -2
  24. package/esm2022/frames/side-app/index.mjs +2 -0
  25. package/esm2022/frames/side-app/ng-atomic-components-frames-side-app.mjs +5 -0
  26. package/esm2022/frames/side-app/side-app.frame.mjs +74 -0
  27. package/esm2022/frames/side-nav/side-nav.frame.mjs +27 -21
  28. package/esm2022/frames/smart-menu/smart-menu.frame.mjs +2 -2
  29. package/esm2022/frames/tabs/tabs.frame.mjs +13 -7
  30. package/esm2022/frames/vertical-hide/vertical-hide.frame.mjs +11 -18
  31. package/esm2022/molecules/action-input-field/action-input-field.molecule.mjs +2 -2
  32. package/esm2022/molecules/actions-column/actions-column.molecule.mjs +13 -7
  33. package/esm2022/molecules/checkbox-column/checkbox-column.molecule.mjs +48 -21
  34. package/esm2022/molecules/date-input-field/date-input-field.molecule.mjs +2 -2
  35. package/esm2022/molecules/date-range-input-field/date-range-input-field.molecule.mjs +2 -2
  36. package/esm2022/molecules/file-input-field/file-input-field.molecule.mjs +2 -2
  37. package/esm2022/molecules/grid-item/grid-item.molecule.mjs +2 -2
  38. package/esm2022/molecules/list-item/index.mjs +2 -0
  39. package/esm2022/molecules/list-item/list-item.molecule.mjs +198 -0
  40. package/esm2022/molecules/list-item/ng-atomic-components-molecules-list-item.mjs +5 -0
  41. package/esm2022/molecules/loading-box/loading-box.molecule.mjs +2 -2
  42. package/esm2022/molecules/molecules.module.mjs +4 -1
  43. package/esm2022/molecules/navigation-list-item/navigation-list-item.molecule.mjs +2 -2
  44. package/esm2022/molecules/select-input-field/select-input-field.molecule.mjs +9 -5
  45. package/esm2022/molecules/smart-column/smart-column.molecule.mjs +129 -43
  46. package/esm2022/molecules/tree-column/tree-column.molecule.mjs +37 -25
  47. package/esm2022/organisms/action-buttons-section/action-buttons-section.organism.mjs +2 -2
  48. package/esm2022/organisms/action-input-section/action-input-section.organism.mjs +2 -2
  49. package/esm2022/organisms/agreement-input-section/agreement-input-section.organism.mjs +3 -3
  50. package/esm2022/organisms/card-input-section/card-input-section.organism.mjs +2 -2
  51. package/esm2022/organisms/cvc-and-exp-input-section/cvc-and-exp-input-section.organism.mjs +2 -2
  52. package/esm2022/organisms/date-input-section/date-input-section.organism.mjs +4 -4
  53. package/esm2022/organisms/date-range-input-section/date-range-input-section.organism.mjs +4 -4
  54. package/esm2022/organisms/definition-list/definition-list.organism.mjs +2 -2
  55. package/esm2022/organisms/file-input-section/file-input-section.organism.mjs +2 -2
  56. package/esm2022/organisms/filters-section/filters-section.organism.mjs +5 -5
  57. package/esm2022/organisms/graphql-editor/graphql-editor.organism.mjs +1 -1
  58. package/esm2022/organisms/grid-cards-section/grid-cards-section.organism.mjs +2 -2
  59. package/esm2022/organisms/heading/heading.organism.mjs +2 -2
  60. package/esm2022/{sheets/actions → organisms/list}/index.mjs +2 -2
  61. package/esm2022/organisms/list/list.organism.mjs +161 -0
  62. package/esm2022/{sheets/actions/ng-atomic-components-sheets-actions.mjs → organisms/list/ng-atomic-components-organisms-list.mjs} +1 -1
  63. package/esm2022/organisms/menu-footer/menu-footer.organism.mjs +2 -2
  64. package/esm2022/organisms/menu-header/menu-header.organism.mjs +2 -2
  65. package/esm2022/organisms/mermaid-section/mermaid-section.organism.mjs +39 -33
  66. package/esm2022/organisms/messages-section/messages-section.organism.mjs +2 -2
  67. package/esm2022/organisms/navigation-list/navigation-list.organism.mjs +2 -2
  68. package/esm2022/organisms/navigator/navigator.organism.mjs +49 -19
  69. package/esm2022/organisms/number-input-section/number-input-section.organism.mjs +2 -2
  70. package/esm2022/organisms/organisms.module.mjs +5 -5
  71. package/esm2022/organisms/paginator/paginator.organism.mjs +2 -2
  72. package/esm2022/organisms/password-input-section/password-input-section.organism.mjs +2 -2
  73. package/esm2022/organisms/select-input-section/select-input-section.organism.mjs +4 -4
  74. package/esm2022/organisms/selection-list/selection-list.organism.mjs +1 -1
  75. package/esm2022/organisms/slider-input-section/slider-input-section.organism.mjs +4 -4
  76. package/esm2022/organisms/social-login-section/social-login-section.organism.mjs +2 -2
  77. package/esm2022/organisms/table/index.mjs +2 -1
  78. package/esm2022/organisms/table/table.helpers.mjs +4 -4
  79. package/esm2022/organisms/table/table.organism.mjs +152 -141
  80. package/esm2022/organisms/text-input-section/text-input-section.organism.mjs +4 -4
  81. package/esm2022/organisms/textarea-section/textarea-section.organism.mjs +2 -2
  82. package/esm2022/organisms/thread-messages-section/thread-messages-section.organism.mjs +2 -2
  83. package/esm2022/organisms/tree-list/index.mjs +2 -0
  84. package/esm2022/organisms/tree-list/ng-atomic-components-organisms-tree-list.mjs +5 -0
  85. package/esm2022/organisms/tree-list/tree-list.organism.mjs +125 -0
  86. package/esm2022/pages/_index/index.page.mjs +169 -62
  87. package/esm2022/pages/columns/columns.page.mjs +10 -9
  88. package/esm2022/pages/form/form.page.mjs +27 -12
  89. package/esm2022/pages/terms/terms.page.mjs +2 -2
  90. package/esm2022/templates/_index/index.template.mjs +276 -155
  91. package/esm2022/templates/background/background.template.mjs +2 -2
  92. package/esm2022/templates/code-editor/code-editor.template.mjs +52 -15
  93. package/esm2022/templates/columns/columns.template.mjs +6 -4
  94. package/esm2022/templates/entrance/entrance.template.mjs +12 -11
  95. package/esm2022/templates/form/form.builder.mjs +93 -71
  96. package/esm2022/templates/form/form.template.mjs +47 -28
  97. package/esm2022/templates/icon-button-menu/icon-button-menu.template.mjs +69 -16
  98. package/esm2022/templates/menu/menu.template.mjs +2 -2
  99. package/esm2022/templates/messages/messages.template.mjs +71 -65
  100. package/esm2022/templates/selection/selection.template.mjs +2 -2
  101. package/esm2022/templates/settings/settings.template.mjs +2 -2
  102. package/extras/editor/editor.component.d.ts +19 -10
  103. package/fesm2022/ng-atomic-components-atoms-icon.mjs +2 -2
  104. package/fesm2022/ng-atomic-components-atoms-smart-menu-button.mjs +76 -113
  105. package/fesm2022/ng-atomic-components-atoms-smart-menu-button.mjs.map +1 -1
  106. package/fesm2022/ng-atomic-components-extras-editor.mjs +79 -47
  107. package/fesm2022/ng-atomic-components-extras-editor.mjs.map +1 -1
  108. package/fesm2022/ng-atomic-components-frames-app.mjs +129 -69
  109. package/fesm2022/ng-atomic-components-frames-app.mjs.map +1 -1
  110. package/fesm2022/ng-atomic-components-frames-auto-layout.mjs +29 -7
  111. package/fesm2022/ng-atomic-components-frames-auto-layout.mjs.map +1 -1
  112. package/fesm2022/ng-atomic-components-frames-columns.mjs +2 -2
  113. package/fesm2022/ng-atomic-components-frames-divider.mjs +2 -2
  114. package/fesm2022/ng-atomic-components-frames-drawer.mjs +2 -2
  115. package/fesm2022/ng-atomic-components-frames-entrance.mjs +2 -2
  116. package/fesm2022/ng-atomic-components-frames-fab.mjs +2 -2
  117. package/fesm2022/ng-atomic-components-frames-line-up.mjs +4 -8
  118. package/fesm2022/ng-atomic-components-frames-line-up.mjs.map +1 -1
  119. package/fesm2022/ng-atomic-components-frames-loading.mjs +2 -2
  120. package/fesm2022/ng-atomic-components-frames-progress-bar.mjs +60 -0
  121. package/fesm2022/ng-atomic-components-frames-progress-bar.mjs.map +1 -0
  122. package/fesm2022/ng-atomic-components-frames-router-outlet.mjs +96 -41
  123. package/fesm2022/ng-atomic-components-frames-router-outlet.mjs.map +1 -1
  124. package/fesm2022/ng-atomic-components-frames-scroll-v2.mjs +1 -48
  125. package/fesm2022/ng-atomic-components-frames-scroll-v2.mjs.map +1 -1
  126. package/fesm2022/ng-atomic-components-frames-scroll.mjs +31 -13
  127. package/fesm2022/ng-atomic-components-frames-scroll.mjs.map +1 -1
  128. package/fesm2022/ng-atomic-components-frames-side-app.mjs +81 -0
  129. package/fesm2022/ng-atomic-components-frames-side-app.mjs.map +1 -0
  130. package/fesm2022/ng-atomic-components-frames-side-nav.mjs +26 -20
  131. package/fesm2022/ng-atomic-components-frames-side-nav.mjs.map +1 -1
  132. package/fesm2022/ng-atomic-components-frames-smart-menu.mjs +2 -2
  133. package/fesm2022/ng-atomic-components-frames-tabs.mjs +12 -6
  134. package/fesm2022/ng-atomic-components-frames-tabs.mjs.map +1 -1
  135. package/fesm2022/ng-atomic-components-frames-vertical-hide.mjs +10 -17
  136. package/fesm2022/ng-atomic-components-frames-vertical-hide.mjs.map +1 -1
  137. package/fesm2022/ng-atomic-components-frames.mjs +2 -2
  138. package/fesm2022/ng-atomic-components-frames.mjs.map +1 -1
  139. package/fesm2022/ng-atomic-components-molecules-action-input-field.mjs +1 -1
  140. package/fesm2022/ng-atomic-components-molecules-action-input-field.mjs.map +1 -1
  141. package/fesm2022/ng-atomic-components-molecules-actions-column.mjs +12 -6
  142. package/fesm2022/ng-atomic-components-molecules-actions-column.mjs.map +1 -1
  143. package/fesm2022/ng-atomic-components-molecules-checkbox-column.mjs +47 -21
  144. package/fesm2022/ng-atomic-components-molecules-checkbox-column.mjs.map +1 -1
  145. package/fesm2022/ng-atomic-components-molecules-date-input-field.mjs +2 -2
  146. package/fesm2022/ng-atomic-components-molecules-date-range-input-field.mjs +2 -2
  147. package/fesm2022/ng-atomic-components-molecules-file-input-field.mjs +1 -1
  148. package/fesm2022/ng-atomic-components-molecules-file-input-field.mjs.map +1 -1
  149. package/fesm2022/ng-atomic-components-molecules-grid-item.mjs +2 -2
  150. package/fesm2022/ng-atomic-components-molecules-list-item.mjs +203 -0
  151. package/fesm2022/ng-atomic-components-molecules-list-item.mjs.map +1 -0
  152. package/fesm2022/ng-atomic-components-molecules-loading-box.mjs +2 -2
  153. package/fesm2022/ng-atomic-components-molecules-navigation-list-item.mjs +2 -2
  154. package/fesm2022/ng-atomic-components-molecules-select-input-field.mjs +8 -4
  155. package/fesm2022/ng-atomic-components-molecules-select-input-field.mjs.map +1 -1
  156. package/fesm2022/ng-atomic-components-molecules-smart-column.mjs +128 -43
  157. package/fesm2022/ng-atomic-components-molecules-smart-column.mjs.map +1 -1
  158. package/fesm2022/ng-atomic-components-molecules-tree-column.mjs +36 -24
  159. package/fesm2022/ng-atomic-components-molecules-tree-column.mjs.map +1 -1
  160. package/fesm2022/ng-atomic-components-molecules.mjs +3 -0
  161. package/fesm2022/ng-atomic-components-molecules.mjs.map +1 -1
  162. package/fesm2022/ng-atomic-components-organisms-action-buttons-section.mjs +2 -2
  163. package/fesm2022/ng-atomic-components-organisms-action-input-section.mjs +2 -2
  164. package/fesm2022/ng-atomic-components-organisms-agreement-input-section.mjs +2 -2
  165. package/fesm2022/ng-atomic-components-organisms-agreement-input-section.mjs.map +1 -1
  166. package/fesm2022/ng-atomic-components-organisms-card-input-section.mjs +2 -2
  167. package/fesm2022/ng-atomic-components-organisms-cvc-and-exp-input-section.mjs +2 -2
  168. package/fesm2022/ng-atomic-components-organisms-date-input-section.mjs +3 -3
  169. package/fesm2022/ng-atomic-components-organisms-date-input-section.mjs.map +1 -1
  170. package/fesm2022/ng-atomic-components-organisms-date-range-input-section.mjs +3 -3
  171. package/fesm2022/ng-atomic-components-organisms-date-range-input-section.mjs.map +1 -1
  172. package/fesm2022/ng-atomic-components-organisms-definition-list.mjs +2 -2
  173. package/fesm2022/ng-atomic-components-organisms-file-input-section.mjs +2 -2
  174. package/fesm2022/ng-atomic-components-organisms-filters-section.mjs +4 -4
  175. package/fesm2022/ng-atomic-components-organisms-filters-section.mjs.map +1 -1
  176. package/fesm2022/ng-atomic-components-organisms-graphql-editor.mjs +1 -1
  177. package/fesm2022/ng-atomic-components-organisms-graphql-editor.mjs.map +1 -1
  178. package/fesm2022/ng-atomic-components-organisms-grid-cards-section.mjs +2 -2
  179. package/fesm2022/ng-atomic-components-organisms-heading.mjs +2 -2
  180. package/fesm2022/ng-atomic-components-organisms-list.mjs +166 -0
  181. package/fesm2022/ng-atomic-components-organisms-list.mjs.map +1 -0
  182. package/fesm2022/ng-atomic-components-organisms-menu-footer.mjs +2 -2
  183. package/fesm2022/ng-atomic-components-organisms-menu-header.mjs +2 -2
  184. package/fesm2022/ng-atomic-components-organisms-mermaid-section.mjs +38 -32
  185. package/fesm2022/ng-atomic-components-organisms-mermaid-section.mjs.map +1 -1
  186. package/fesm2022/ng-atomic-components-organisms-messages-section.mjs +2 -2
  187. package/fesm2022/ng-atomic-components-organisms-navigation-list.mjs +2 -2
  188. package/fesm2022/ng-atomic-components-organisms-navigator.mjs +48 -18
  189. package/fesm2022/ng-atomic-components-organisms-navigator.mjs.map +1 -1
  190. package/fesm2022/ng-atomic-components-organisms-number-input-section.mjs +2 -2
  191. package/fesm2022/ng-atomic-components-organisms-number-input-section.mjs.map +1 -1
  192. package/fesm2022/ng-atomic-components-organisms-paginator.mjs +2 -2
  193. package/fesm2022/ng-atomic-components-organisms-password-input-section.mjs +2 -2
  194. package/fesm2022/ng-atomic-components-organisms-password-input-section.mjs.map +1 -1
  195. package/fesm2022/ng-atomic-components-organisms-select-input-section.mjs +3 -3
  196. package/fesm2022/ng-atomic-components-organisms-select-input-section.mjs.map +1 -1
  197. package/fesm2022/ng-atomic-components-organisms-selection-list.mjs +1 -1
  198. package/fesm2022/ng-atomic-components-organisms-selection-list.mjs.map +1 -1
  199. package/fesm2022/ng-atomic-components-organisms-slider-input-section.mjs +3 -3
  200. package/fesm2022/ng-atomic-components-organisms-slider-input-section.mjs.map +1 -1
  201. package/fesm2022/ng-atomic-components-organisms-social-login-section.mjs +2 -2
  202. package/fesm2022/ng-atomic-components-organisms-table.mjs +156 -145
  203. package/fesm2022/ng-atomic-components-organisms-table.mjs.map +1 -1
  204. package/fesm2022/ng-atomic-components-organisms-text-input-section.mjs +3 -3
  205. package/fesm2022/ng-atomic-components-organisms-text-input-section.mjs.map +1 -1
  206. package/fesm2022/ng-atomic-components-organisms-textarea-section.mjs +2 -2
  207. package/fesm2022/ng-atomic-components-organisms-textarea-section.mjs.map +1 -1
  208. package/fesm2022/ng-atomic-components-organisms-thread-messages-section.mjs +2 -2
  209. package/fesm2022/ng-atomic-components-organisms-tree-list.mjs +132 -0
  210. package/fesm2022/ng-atomic-components-organisms-tree-list.mjs.map +1 -0
  211. package/fesm2022/ng-atomic-components-organisms.mjs +4 -4
  212. package/fesm2022/ng-atomic-components-organisms.mjs.map +1 -1
  213. package/fesm2022/ng-atomic-components-pages-_index.mjs +168 -62
  214. package/fesm2022/ng-atomic-components-pages-_index.mjs.map +1 -1
  215. package/fesm2022/ng-atomic-components-pages-columns.mjs +9 -8
  216. package/fesm2022/ng-atomic-components-pages-columns.mjs.map +1 -1
  217. package/fesm2022/ng-atomic-components-pages-form.mjs +26 -11
  218. package/fesm2022/ng-atomic-components-pages-form.mjs.map +1 -1
  219. package/fesm2022/ng-atomic-components-pages-terms.mjs +1 -1
  220. package/fesm2022/ng-atomic-components-pages-terms.mjs.map +1 -1
  221. package/fesm2022/ng-atomic-components-templates-_index.mjs +276 -155
  222. package/fesm2022/ng-atomic-components-templates-_index.mjs.map +1 -1
  223. package/fesm2022/ng-atomic-components-templates-background.mjs +2 -2
  224. package/fesm2022/ng-atomic-components-templates-code-editor.mjs +51 -14
  225. package/fesm2022/ng-atomic-components-templates-code-editor.mjs.map +1 -1
  226. package/fesm2022/ng-atomic-components-templates-columns.mjs +5 -3
  227. package/fesm2022/ng-atomic-components-templates-columns.mjs.map +1 -1
  228. package/fesm2022/ng-atomic-components-templates-entrance.mjs +11 -10
  229. package/fesm2022/ng-atomic-components-templates-entrance.mjs.map +1 -1
  230. package/fesm2022/ng-atomic-components-templates-form.mjs +139 -99
  231. package/fesm2022/ng-atomic-components-templates-form.mjs.map +1 -1
  232. package/fesm2022/ng-atomic-components-templates-icon-button-menu.mjs +68 -15
  233. package/fesm2022/ng-atomic-components-templates-icon-button-menu.mjs.map +1 -1
  234. package/fesm2022/ng-atomic-components-templates-menu.mjs +2 -2
  235. package/fesm2022/ng-atomic-components-templates-messages.mjs +71 -65
  236. package/fesm2022/ng-atomic-components-templates-messages.mjs.map +1 -1
  237. package/fesm2022/ng-atomic-components-templates-selection.mjs +2 -2
  238. package/fesm2022/ng-atomic-components-templates-settings.mjs +2 -2
  239. package/fesm2022/ng-atomic-components.mjs +7 -3
  240. package/fesm2022/ng-atomic-components.mjs.map +1 -1
  241. package/frames/app/app.frame.d.ts +13 -1
  242. package/frames/auto-layout/auto-layout.frame.d.ts +7 -1
  243. package/frames/progress-bar/index.d.ts +1 -0
  244. package/frames/progress-bar/progress-bar.frame.d.ts +14 -0
  245. package/frames/router-outlet/router-outlet.frame.d.ts +20 -9
  246. package/frames/scroll/scroll.frame.d.ts +5 -1
  247. package/frames/scroll-v2/index.d.ts +1 -1
  248. package/frames/side-app/index.d.ts +1 -0
  249. package/frames/side-app/side-app.frame.d.ts +20 -0
  250. package/frames/side-nav/side-nav.frame.d.ts +6 -2
  251. package/frames/tabs/tabs.frame.d.ts +2 -1
  252. package/frames/vertical-hide/vertical-hide.frame.d.ts +2 -2
  253. package/molecules/actions-column/actions-column.molecule.d.ts +3 -2
  254. package/molecules/checkbox-column/checkbox-column.molecule.d.ts +12 -4
  255. package/molecules/list-item/index.d.ts +1 -0
  256. package/molecules/list-item/list-item.molecule.d.ts +50 -0
  257. package/molecules/molecules.module.d.ts +3 -0
  258. package/molecules/smart-column/smart-column.molecule.d.ts +34 -9
  259. package/molecules/tree-column/tree-column.molecule.d.ts +6 -2
  260. package/organisms/list/index.d.ts +1 -0
  261. package/organisms/{smart-list/smart-list.organism.d.ts → list/list.organism.d.ts} +11 -11
  262. package/organisms/mermaid-section/mermaid-section.organism.d.ts +10 -10
  263. package/organisms/navigator/navigator.organism.d.ts +8 -6
  264. package/organisms/organisms.module.d.ts +1 -1
  265. package/organisms/table/index.d.ts +1 -0
  266. package/organisms/table/table.helpers.d.ts +1 -1
  267. package/organisms/table/table.organism.d.ts +32 -1
  268. package/organisms/tree-list/index.d.ts +1 -0
  269. package/organisms/tree-list/tree-list.organism.d.ts +33 -0
  270. package/package.json +37 -25
  271. package/pages/_index/index.page.d.ts +72 -43
  272. package/pages/columns/columns.page.d.ts +5 -2
  273. package/pages/form/form.page.d.ts +11 -2
  274. package/templates/_index/index.template.d.ts +40 -11
  275. package/templates/code-editor/code-editor.template.d.ts +6 -3
  276. package/templates/entrance/entrance.template.d.ts +1 -1
  277. package/templates/form/form.builder.d.ts +10 -3
  278. package/templates/form/form.template.d.ts +2 -1
  279. package/templates/icon-button-menu/icon-button-menu.template.d.ts +3 -2
  280. package/templates/messages/messages.template.d.ts +21 -17
  281. package/esm2022/frames/scroll-v2/scroll.frame.mjs +0 -46
  282. package/esm2022/organisms/smart-list/index.mjs +0 -2
  283. package/esm2022/organisms/smart-list/ng-atomic-components-organisms-smart-list.mjs +0 -5
  284. package/esm2022/organisms/smart-list/smart-list.organism.mjs +0 -218
  285. package/esm2022/sheets/actions/actions.sheet.mjs +0 -45
  286. package/esm2022/sheets/index.mjs +0 -3
  287. package/esm2022/sheets/ng-atomic-components-sheets.mjs +0 -5
  288. package/esm2022/sheets/sheets.module.mjs +0 -25
  289. package/esm2022/sheets/sheets.service.mjs +0 -20
  290. package/fesm2022/ng-atomic-components-organisms-smart-list.mjs +0 -223
  291. package/fesm2022/ng-atomic-components-organisms-smart-list.mjs.map +0 -1
  292. package/fesm2022/ng-atomic-components-sheets-actions.mjs +0 -52
  293. package/fesm2022/ng-atomic-components-sheets-actions.mjs.map +0 -1
  294. package/fesm2022/ng-atomic-components-sheets.mjs +0 -48
  295. package/fesm2022/ng-atomic-components-sheets.mjs.map +0 -1
  296. package/frames/scroll-v2/scroll.frame.d.ts +0 -9
  297. package/organisms/smart-list/index.d.ts +0 -1
  298. package/sheets/actions/actions.sheet.d.ts +0 -9
  299. package/sheets/actions/index.d.ts +0 -1
  300. package/sheets/index.d.ts +0 -2
  301. package/sheets/sheets.module.d.ts +0 -11
  302. package/sheets/sheets.service.d.ts +0 -10
@@ -1,16 +1,17 @@
1
+ var IndexPageStore_1;
1
2
  import { __decorate, __metadata } from "tslib";
2
3
  import { Component, Directive, InjectionToken, Injector, computed, effect, inject, input, runInInjectionContext, signal } from '@angular/core';
3
4
  import { ActivatedRoute, Router } from '@angular/router';
4
5
  import { SelectionModel } from '@angular/cdk/collections';
5
6
  import { RouterOutletFrame } from '@ng-atomic/components/frames/router-outlet';
6
- import { getType, IndexTemplate } from '@ng-atomic/components/templates/_index';
7
+ import { convertToItemsMap, getType, IndexTemplate } from '@ng-atomic/components/templates/_index';
7
8
  import { injectAll } from '@ng-atomic/common/stores/entities';
8
9
  import { injectModel, injectModelName } from '@ng-atomic/common/pipes/domain';
9
- import { Effect, InjectableComponent, NgAtomicComponent, _computed, applyToInput, provideEffect } from '@ng-atomic/core';
10
+ import { Effect, InjectableComponent, NgAtomicComponent, TokenizedType, _computed, applyToInput, provideEffect, resolveActions } from '@ng-atomic/core';
10
11
  import { buildColumns, injectIndexForm } from '@ng-atomic/components/organisms/table';
11
12
  import { injectIsRootPage, injectNavStartActions, injectSideAppNavStartActions, makeConfig, NavActionId } from '@ng-atomic/common/services/ui';
12
13
  import { injectEntityIdName } from '@ng-atomic/components/pages/form';
13
- import { computedRawValue, injectChildRouteParam, injectHasNext } from "@ng-atomic/common/utils";
14
+ import { computedRawValue, injectChildRouteParam, injectHasNext, injectRouteSkip } from "@ng-atomic/common/utils";
14
15
  import { AppService } from '@ng-atomic/common/services/app';
15
16
  import { IndexPipe } from '@ng-atomic/common/pipes/index';
16
17
  import { map } from 'rxjs';
@@ -18,6 +19,7 @@ import { computedAsync } from 'ngxtension/computed-async';
18
19
  import { makeInitializerConfig } from '@ng-atomic/common/services/initializer';
19
20
  import { FormGroup } from '@angular/forms';
20
21
  import { IndexLengthPipe } from '@ng-atomic/common/pipes/index-length';
22
+ import { SheetService } from '@ng-atomic/common/services/sheets';
21
23
  import * as i0 from "@angular/core";
22
24
  export function injectHighlight(key) {
23
25
  const itemId = injectChildRouteParam(key);
@@ -39,8 +41,44 @@ var ActionId;
39
41
  ActionId["ADD"] = "[@ng-atomic/components/pages/index] Add";
40
42
  ActionId["DETAIL"] = "[@ng-atomic/components/pages/index] Detail";
41
43
  ActionId["CLOSE"] = "[@ng-atomic/components/pages/index] Close";
44
+ ActionId["LIST_ITEM_BUTTON_CLICKED"] = "[@ng-atomic/components/pages/index] ListItemButtonClick";
42
45
  })(ActionId || (ActionId = {}));
43
- export class IndexPageStore extends InjectableComponent {
46
+ export function toggleAllSelection(selection, items) {
47
+ if (selection.selected.length === items.length) {
48
+ return new SelectionModel(true, []);
49
+ }
50
+ else {
51
+ return new SelectionModel(true, items.map(entry => entry.id));
52
+ }
53
+ }
54
+ function tryJsonParse(value) {
55
+ try {
56
+ return JSON.parse(value);
57
+ }
58
+ catch {
59
+ return {};
60
+ }
61
+ }
62
+ export function recoveryFormValue(form, key = 'default') {
63
+ // FormControlの場合とFormGroupの場合で処理を分ける
64
+ if (form instanceof FormGroup) {
65
+ form.patchValue(tryJsonParse(localStorage.getItem(key)));
66
+ form.valueChanges.subscribe(value => {
67
+ localStorage.setItem(key, JSON.stringify(value));
68
+ });
69
+ }
70
+ else {
71
+ const value = localStorage.getItem(key);
72
+ console.debug('loaded:', value);
73
+ form.setValue(value);
74
+ form.valueChanges.subscribe(value => {
75
+ console.debug('value:', value);
76
+ localStorage.setItem(key, value);
77
+ });
78
+ }
79
+ }
80
+ let IndexPageStore = class IndexPageStore extends InjectableComponent {
81
+ static { IndexPageStore_1 = this; }
44
82
  static { this.ActionId = ActionId; }
45
83
  static { this.Config = makeConfig(() => {
46
84
  const highlight = injectHighlight(injectEntityIdName());
@@ -52,7 +90,10 @@ export class IndexPageStore extends InjectableComponent {
52
90
  style: {
53
91
  width: 'var(--page-width-lv3)',
54
92
  },
93
+ groupedBy: null,
94
+ groupKeys: [],
55
95
  items: [],
96
+ itemsMap: undefined,
56
97
  itemActions: (() => []),
57
98
  itemsMapper: undefined,
58
99
  itemsLength: 0,
@@ -68,20 +109,30 @@ export class IndexPageStore extends InjectableComponent {
68
109
  });
69
110
  }, ['components', 'pages', 'index']); }
70
111
  static provideTypeConfig() {
71
- return IndexPageStore.Config.provide(() => {
112
+ return IndexPageStore_1.Config.provide(() => {
72
113
  return (config, context) => ({ ...config, type: getType(context) });
73
114
  });
74
115
  }
75
116
  static provideItemsFromRepository() {
76
- return IndexPageStore.Config.provide(() => {
117
+ return IndexPageStore_1.Config.provide(() => {
77
118
  const Model = injectModel();
78
119
  const items = Model ? injectAll(Model) : signal([]);
79
120
  return (config) => ({ ...config, items: items() });
80
121
  });
81
122
  }
123
+ static provideItemActionsConfig() {
124
+ return IndexPageStore_1.Config.provide(() => {
125
+ return (config) => ({
126
+ ...config,
127
+ itemActions: (item) => [
128
+ { id: ActionId.DETAIL, icon: 'open_in_new', name: '詳細', payload: item },
129
+ ],
130
+ });
131
+ });
132
+ }
82
133
  static provideSideAppNavStartActions() {
83
- return IndexPageStore.Config.provide(() => {
84
- const isRootPage = injectIsRootPage();
134
+ return IndexPageStore_1.Config.provide(() => {
135
+ const isRootPage = injectIsRootPage('side');
85
136
  const navStartActions = injectSideAppNavStartActions(isRootPage);
86
137
  return (config) => ({
87
138
  ...config,
@@ -89,9 +140,9 @@ export class IndexPageStore extends InjectableComponent {
89
140
  });
90
141
  });
91
142
  }
92
- static { this.Initializer = makeInitializerConfig(IndexPageStore); }
143
+ static { this.Initializer = makeInitializerConfig(IndexPageStore_1); }
93
144
  static provideFormInitializer() {
94
- return IndexPageStore.Initializer.provide((store) => {
145
+ return IndexPageStore_1.Initializer.provide((store) => {
95
146
  const form = injectIndexForm({
96
147
  columns: buildColumns([
97
148
  'id',
@@ -104,20 +155,17 @@ export class IndexPageStore extends InjectableComponent {
104
155
  });
105
156
  }
106
157
  static provideFormValueStorageInitializer() {
107
- return IndexPageStore.Initializer.provide((store) => {
158
+ return IndexPageStore_1.Initializer.provide((store) => {
108
159
  const route = inject(ActivatedRoute);
109
160
  const paths = route.pathFromRoot.map(r => r?.routeConfig?.path);
110
161
  const key = `@ng-atomic/components/pages/index:${paths.filter((path) => !!path).join('/')}`;
111
- store.form().patchValue(JSON.parse(localStorage.getItem(key) || '{}'));
112
- store.form().valueChanges.subscribe(value => {
113
- localStorage.setItem(key, JSON.stringify(value));
114
- });
162
+ recoveryFormValue(store.form(), key);
115
163
  });
116
164
  }
117
165
  static provideItemsLengthInitializer() {
118
166
  return [
119
167
  IndexLengthPipe,
120
- IndexPageStore.Initializer.provide((store) => {
168
+ IndexPageStore_1.Initializer.provide((store) => {
121
169
  const pipe = inject(IndexLengthPipe);
122
170
  const formValue = computedRawValue(() => store.form());
123
171
  effect(() => {
@@ -130,7 +178,7 @@ export class IndexPageStore extends InjectableComponent {
130
178
  static provideItemsMapperInitializer() {
131
179
  return [
132
180
  IndexPipe,
133
- IndexPageStore.Initializer.provide((store) => {
181
+ IndexPageStore_1.Initializer.provide((store) => {
134
182
  const formValue = computedRawValue(() => store.form());
135
183
  const indexPipe = inject(IndexPipe);
136
184
  effect(() => {
@@ -150,23 +198,42 @@ export class IndexPageStore extends InjectableComponent {
150
198
  }),
151
199
  ];
152
200
  }
201
+ static provideColumnsInitializer(useFactory) {
202
+ return [
203
+ IndexPageStore_1.Initializer.provide((store) => {
204
+ const columns = useFactory();
205
+ const form = injectIndexForm({ columns: buildColumns(columns) });
206
+ applyToInput(store, 'form', form);
207
+ }),
208
+ ];
209
+ }
210
+ static provideItemsInitializer(itemsFactory) {
211
+ return [
212
+ IndexPageStore_1.Initializer.provide((store) => {
213
+ const items = itemsFactory();
214
+ effect(() => {
215
+ applyToInput(store, 'items', items);
216
+ }, { allowSignalWrites: true });
217
+ }),
218
+ ];
219
+ }
153
220
  static provideDefaultInitializer() {
154
221
  return [
155
- IndexPageStore.provideFormInitializer(),
156
- IndexPageStore.provideFormValueStorageInitializer(),
157
- IndexPageStore.provideItemsLengthInitializer(),
158
- IndexPageStore.provideItemsMapperInitializer(),
222
+ IndexPageStore_1.provideFormInitializer(),
223
+ IndexPageStore_1.provideFormValueStorageInitializer(),
224
+ IndexPageStore_1.provideItemsLengthInitializer(),
225
+ IndexPageStore_1.provideItemsMapperInitializer(),
159
226
  ];
160
227
  }
161
228
  static provideBackEffect() {
162
- return provideEffect(IndexPageStore.ActionId.BACK, () => {
229
+ return provideEffect(IndexPageStore_1.ActionId.BACK, () => {
163
230
  return () => history.back();
164
231
  });
165
232
  }
166
233
  static provideDetailEffect() {
167
- return provideEffect(IndexPageStore.ActionId.DETAIL, () => {
234
+ return provideEffect(IndexPageStore_1.ActionId.DETAIL, () => {
168
235
  const app = inject(AppService);
169
- const store = inject(IndexPageStore);
236
+ const store = inject(IndexPageStore_1);
170
237
  const hasNext = injectHasNext();
171
238
  return (item) => {
172
239
  app.router.navigate([item.id], {
@@ -177,7 +244,7 @@ export class IndexPageStore extends InjectableComponent {
177
244
  });
178
245
  }
179
246
  static provideAddEffect() {
180
- return provideEffect(IndexPageStore.ActionId.ADD, () => {
247
+ return provideEffect(IndexPageStore_1.ActionId.ADD, () => {
181
248
  const app = inject(AppService);
182
249
  const hasNext = injectHasNext();
183
250
  const route = inject(ActivatedRoute);
@@ -191,7 +258,7 @@ export class IndexPageStore extends InjectableComponent {
191
258
  }
192
259
  static provideCheckboxClickEffect() {
193
260
  return provideEffect(IndexTemplate.ActionId.TABLE_CHECKBOX_CLICK, () => {
194
- const store = inject(IndexPageStore);
261
+ const store = inject(IndexPageStore_1);
195
262
  return (item) => {
196
263
  store.selection().toggle(item.id);
197
264
  };
@@ -199,7 +266,7 @@ export class IndexPageStore extends InjectableComponent {
199
266
  }
200
267
  static provideTableHeaderClickEffect() {
201
268
  return provideEffect(IndexTemplate.ActionId.TABLE_HEADER_CLICK, () => {
202
- const store = inject(IndexPageStore);
269
+ const store = inject(IndexPageStore_1);
203
270
  return (key) => {
204
271
  const sort = store.form().get(['sort']).value;
205
272
  const order = key === sort.key && sort.order === 'asc' ? 'desc' : 'asc';
@@ -214,43 +281,49 @@ export class IndexPageStore extends InjectableComponent {
214
281
  });
215
282
  }
216
283
  static provideHeaderCheckboxClickEffect() {
217
- return provideEffect(IndexPageStore.ActionId.HEADER_CHECKBOX_CLICK, () => {
218
- const store = inject(IndexPageStore);
284
+ return provideEffect(IndexPageStore_1.ActionId.HEADER_CHECKBOX_CLICK, () => {
285
+ const store = inject(IndexPageStore_1);
219
286
  return () => {
220
- if (store.isAllSelected()) {
221
- store.selection().clear();
222
- }
223
- else {
224
- store.displayedItems().forEach(entry => store.selection().select(entry.id));
225
- }
287
+ const selection = toggleAllSelection(store.selection(), store.displayedItems());
288
+ applyToInput(store, 'selection', selection);
226
289
  };
227
290
  });
228
291
  }
229
292
  static provideDefaultEffects() {
230
293
  return [
231
- IndexPageStore.provideDetailEffect(),
232
- IndexPageStore.provideAddEffect(),
233
- IndexPageStore.provideBackEffect(),
234
- IndexPageStore.provideHeaderCheckboxClickEffect(),
235
- IndexPageStore.provideCheckboxClickEffect(),
236
- IndexPageStore.provideTableHeaderClickEffect(),
237
- IndexPageStore.provideSideNavEffects(),
294
+ IndexPageStore_1.provideDetailEffect(),
295
+ IndexPageStore_1.provideAddEffect(),
296
+ IndexPageStore_1.provideBackEffect(),
297
+ IndexPageStore_1.provideHeaderCheckboxClickEffect(),
298
+ IndexPageStore_1.provideCheckboxClickEffect(),
299
+ IndexPageStore_1.provideTableHeaderClickEffect(),
300
+ IndexPageStore_1.provideSideNavEffects(),
301
+ ];
302
+ }
303
+ static provideDefaultConfig() {
304
+ return [
305
+ IndexPageStore_1.Config.provide(),
306
+ IndexPageStore_1.provideItemActionsConfig(),
307
+ IndexPageStore_1.provideTypeConfig(),
238
308
  ];
239
309
  }
240
310
  static provideDefault() {
241
311
  return [
242
- IndexPageStore.Config.provide(),
243
- IndexPageStore.provideTypeConfig(),
244
- IndexPageStore.provideDefaultInitializer(),
245
- IndexPageStore.provideDefaultEffects(),
312
+ IndexPageStore_1.provideDefaultConfig(),
313
+ IndexPageStore_1.provideDefaultInitializer(),
314
+ IndexPageStore_1.provideDefaultEffects(),
246
315
  ];
247
316
  }
248
317
  constructor() {
249
318
  super();
250
- this.config = IndexPageStore.Config.inject();
319
+ this.config = IndexPageStore_1.Config.inject();
320
+ this.style = input(_computed(() => this.config().style));
251
321
  this.route = inject(ActivatedRoute);
322
+ this.groupedBy = input(_computed(() => this.config().groupedBy));
323
+ this.groupKeys = input(_computed(() => this.config().groupKeys));
252
324
  this.type = input(_computed(() => this.config().type));
253
325
  this.items = input(_computed(() => this.config().items));
326
+ this.itemsMap = input(_computed(() => convertToItemsMap(this.items())));
254
327
  this.itemActions = input(_computed(() => this.config().itemActions));
255
328
  this.title = input(_computed(() => this.config().title));
256
329
  this.form = input(_computed(() => this.config().form));
@@ -270,15 +343,24 @@ export class IndexPageStore extends InjectableComponent {
270
343
  return itemsMapper ? itemsMapper(items) : items;
271
344
  });
272
345
  this.selectedIds = computedAsync(() => this.selection().changed.pipe(map(() => this.selection()?.selected ?? [])), { initialValue: [] });
273
- this.selected = computed(() => this.items().filter(entry => this.selectedIds().includes(entry.id)));
346
+ this.selected = computed(() => (this.items() ?? []).filter(entry => this.selectedIds().includes(entry.id)));
274
347
  this.isAllSelected = computed(() => {
275
348
  return this.displayedItems().every(entry => this.selectedIds().includes(entry.id));
276
349
  });
277
- IndexPageStore.Initializer.initializeStore(this);
350
+ this.skip = injectRouteSkip();
351
+ IndexPageStore_1.Initializer.initializeStore(this);
352
+ effect(() => {
353
+ console.debug('itemsMap:', this.itemsMap());
354
+ });
278
355
  }
279
356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPageStore, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
280
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.2", type: IndexPageStore, isStandalone: true, inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, itemActions: { classPropertyName: "itemActions", publicName: "itemActions", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, highlight: { classPropertyName: "highlight", publicName: "highlight", isSignal: true, isRequired: false, transformFunction: null }, navStartActions: { classPropertyName: "navStartActions", publicName: "navStartActions", isSignal: true, isRequired: false, transformFunction: null }, navEndActions: { classPropertyName: "navEndActions", publicName: "navEndActions", isSignal: true, isRequired: false, transformFunction: null }, filterFunc: { classPropertyName: "filterFunc", publicName: "filterFunc", isSignal: true, isRequired: false, transformFunction: null }, itemsMapper: { classPropertyName: "itemsMapper", publicName: "itemsMapper", isSignal: true, isRequired: false, transformFunction: null }, tableChildrenKey: { classPropertyName: "tableChildrenKey", publicName: "tableChildrenKey", isSignal: true, isRequired: false, transformFunction: null }, itemsLength: { classPropertyName: "itemsLength", publicName: "itemsLength", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
281
- }
357
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.2", type: IndexPageStore, isStandalone: true, inputs: { style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, groupedBy: { classPropertyName: "groupedBy", publicName: "groupedBy", isSignal: true, isRequired: false, transformFunction: null }, groupKeys: { classPropertyName: "groupKeys", publicName: "groupKeys", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, itemsMap: { classPropertyName: "itemsMap", publicName: "itemsMap", isSignal: true, isRequired: false, transformFunction: null }, itemActions: { classPropertyName: "itemActions", publicName: "itemActions", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, highlight: { classPropertyName: "highlight", publicName: "highlight", isSignal: true, isRequired: false, transformFunction: null }, navStartActions: { classPropertyName: "navStartActions", publicName: "navStartActions", isSignal: true, isRequired: false, transformFunction: null }, navEndActions: { classPropertyName: "navEndActions", publicName: "navEndActions", isSignal: true, isRequired: false, transformFunction: null }, filterFunc: { classPropertyName: "filterFunc", publicName: "filterFunc", isSignal: true, isRequired: false, transformFunction: null }, itemsMapper: { classPropertyName: "itemsMapper", publicName: "itemsMapper", isSignal: true, isRequired: false, transformFunction: null }, tableChildrenKey: { classPropertyName: "tableChildrenKey", publicName: "tableChildrenKey", isSignal: true, isRequired: false, transformFunction: null }, itemsLength: { classPropertyName: "itemsLength", publicName: "itemsLength", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
358
+ };
359
+ IndexPageStore = IndexPageStore_1 = __decorate([
360
+ TokenizedType(),
361
+ __metadata("design:paramtypes", [])
362
+ ], IndexPageStore);
363
+ export { IndexPageStore };
282
364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPageStore, decorators: [{
283
365
  type: Directive,
284
366
  args: [{ standalone: true }]
@@ -288,6 +370,7 @@ export class IndexPage extends NgAtomicComponent {
288
370
  super(...arguments);
289
371
  this.store = inject(IndexPageStore);
290
372
  this.router = inject(Router);
373
+ this.sheet = inject(SheetService);
291
374
  }
292
375
  back() {
293
376
  this.dispatch({ id: IndexPageStore.ActionId.BACK });
@@ -301,17 +384,30 @@ export class IndexPage extends NgAtomicComponent {
301
384
  onCheckboxClick(item) {
302
385
  this.dispatch({ id: IndexPageStore.ActionId.HEADER_CHECKBOX_CLICK, payload: item });
303
386
  }
387
+ // MEMO(@nontangent): シートのアクションをページに持たせるべきかは要検討。
388
+ onItemButtonClicked(item) {
389
+ const actions = resolveActions(this.store.itemActions(), item);
390
+ this.sheet.openActions(actions).then((action) => {
391
+ this.dispatch({
392
+ id: action.id,
393
+ payload: action.payload,
394
+ });
395
+ });
396
+ }
304
397
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
305
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IndexPage, isStandalone: true, selector: "pages-index", usesInheritance: true, hostDirectives: [{ directive: IndexPageStore, inputs: ["items", "items"] }], ngImport: i0, template: `
306
- <frames-router-outlet>
398
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: IndexPage, isStandalone: true, selector: "pages-index", usesInheritance: true, hostDirectives: [{ directive: IndexPageStore, inputs: ["items", "items", "itemsMap", "itemsMap"] }], ngImport: i0, template: `
399
+ <frames-router-outlet [skip]="store.skip()">
307
400
  <templates-index
308
- [style.width]="store.config().style.width"
401
+ [style]="store.style()"
309
402
  [title]="store.title()"
310
403
  [type]="store.type()"
311
404
  [tableChildrenKey]="store.tableChildrenKey()"
312
405
  [items]="store.displayedItems()"
406
+ [itemsMap]="store.itemsMap()"
313
407
  [itemsLength]="store.itemsLength()"
314
408
  [itemActions]="store.itemActions()"
409
+ [groupedBy]="store.groupedBy()"
410
+ [groupKeys]="store.groupKeys()"
315
411
  [form]="store.form()"
316
412
  [selection]="store.selection()"
317
413
  [highlight]="store.highlight()"
@@ -320,7 +416,7 @@ export class IndexPage extends NgAtomicComponent {
320
416
  (action)="dispatch($event)"
321
417
  />
322
418
  </frames-router-outlet>
323
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-pie2: var(--page-width-lv3);--primary-color-SCOPED-IN-index-pie2: var(--primary-color);--on-primary-color-SCOPED-IN-index-pie2: var(--on-primary-color);--surface-color-SCOPED-IN-index-pie2: var(--surface-color);--on-surface-color-SCOPED-IN-index-pie2: var(--on-surface-color);--on-background-color-SCOPED-IN-index-pie2: var(--on-background-color);--background-color-SCOPED-IN-index-pie2: var(--background-color);--navigator-background-color-SCOPED-IN-index-pie2: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-pie2: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-pie2: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-pie2: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-pie2)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-pie2);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-pie2);--surface-color: var(--surface-color-SCOPED-IN-index-pie2);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-pie2);--background-color: var(--background-color-SCOPED-IN-index-pie2);--on-background-color: var(--on-background-color-SCOPED-IN-index-pie2);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-pie2);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-pie2);--table-background-color: var(--table-background-color-SCOPED-IN-index-pie2);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-pie2)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet" }, { kind: "component", type: IndexTemplate, selector: "templates-index" }] }); }
419
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-Xw2p: var(--page-width-lv3);--primary-color-SCOPED-IN-index-Xw2p: var(--primary-color);--on-primary-color-SCOPED-IN-index-Xw2p: var(--on-primary-color);--surface-color-SCOPED-IN-index-Xw2p: var(--surface-color);--on-surface-color-SCOPED-IN-index-Xw2p: var(--on-surface-color);--on-background-color-SCOPED-IN-index-Xw2p: var(--on-background-color);--background-color-SCOPED-IN-index-Xw2p: var(--background-color);--navigator-background-color-SCOPED-IN-index-Xw2p: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-Xw2p: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-Xw2p: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-Xw2p: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-Xw2p)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-Xw2p);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-Xw2p);--surface-color: var(--surface-color-SCOPED-IN-index-Xw2p);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-Xw2p);--background-color: var(--background-color-SCOPED-IN-index-Xw2p);--on-background-color: var(--on-background-color-SCOPED-IN-index-Xw2p);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-Xw2p);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-Xw2p);--table-background-color: var(--table-background-color-SCOPED-IN-index-Xw2p);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-Xw2p)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: IndexTemplate, selector: "templates-index" }] }); }
324
420
  }
325
421
  __decorate([
326
422
  Effect(IndexTemplate.ActionId.BACK),
@@ -346,22 +442,30 @@ __decorate([
346
442
  __metadata("design:paramtypes", [Object]),
347
443
  __metadata("design:returntype", void 0)
348
444
  ], IndexPage.prototype, "onCheckboxClick", null);
445
+ __decorate([
446
+ Effect(IndexTemplate.ActionId.LIST_ITEM_BUTTON_CLICKED),
447
+ __metadata("design:type", Function),
448
+ __metadata("design:paramtypes", [Object]),
449
+ __metadata("design:returntype", void 0)
450
+ ], IndexPage.prototype, "onItemButtonClicked", null);
349
451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPage, decorators: [{
350
452
  type: Component,
351
453
  args: [{ selector: 'pages-index', standalone: true, imports: [
352
454
  RouterOutletFrame,
353
455
  IndexTemplate,
354
- IndexLengthPipe,
355
456
  ], template: `
356
- <frames-router-outlet>
457
+ <frames-router-outlet [skip]="store.skip()">
357
458
  <templates-index
358
- [style.width]="store.config().style.width"
459
+ [style]="store.style()"
359
460
  [title]="store.title()"
360
461
  [type]="store.type()"
361
462
  [tableChildrenKey]="store.tableChildrenKey()"
362
463
  [items]="store.displayedItems()"
464
+ [itemsMap]="store.itemsMap()"
363
465
  [itemsLength]="store.itemsLength()"
364
466
  [itemActions]="store.itemActions()"
467
+ [groupedBy]="store.groupedBy()"
468
+ [groupKeys]="store.groupKeys()"
365
469
  [form]="store.form()"
366
470
  [selection]="store.selection()"
367
471
  [highlight]="store.highlight()"
@@ -373,8 +477,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
373
477
  `, hostDirectives: [
374
478
  {
375
479
  directive: IndexPageStore,
376
- inputs: ['items'],
480
+ inputs: [
481
+ 'items',
482
+ 'itemsMap',
483
+ ],
377
484
  },
378
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-pie2: var(--page-width-lv3);--primary-color-SCOPED-IN-index-pie2: var(--primary-color);--on-primary-color-SCOPED-IN-index-pie2: var(--on-primary-color);--surface-color-SCOPED-IN-index-pie2: var(--surface-color);--on-surface-color-SCOPED-IN-index-pie2: var(--on-surface-color);--on-background-color-SCOPED-IN-index-pie2: var(--on-background-color);--background-color-SCOPED-IN-index-pie2: var(--background-color);--navigator-background-color-SCOPED-IN-index-pie2: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-pie2: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-pie2: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-pie2: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-pie2)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-pie2);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-pie2);--surface-color: var(--surface-color-SCOPED-IN-index-pie2);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-pie2);--background-color: var(--background-color-SCOPED-IN-index-pie2);--on-background-color: var(--on-background-color-SCOPED-IN-index-pie2);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-pie2);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-pie2);--table-background-color: var(--table-background-color-SCOPED-IN-index-pie2);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-pie2)}\n"] }]
379
- }], propDecorators: { back: [], close: [], itemClick: [], onCheckboxClick: [] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL19pbmRleC9pbmRleC5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQVcsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEksT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9JLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxn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a0JULGtCQUVlO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxjQUFjOzRCQUN6QixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUM7eUJBQ2xCO3FCQUNGOzhCQU9TLElBQUksTUFLSixLQUFLLE1BS0wsU0FBUyxNQUtULGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBTaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFJvdXRlck91dGxldEZyYW1lIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL2ZyYW1lcy9yb3V0ZXItb3V0bGV0JztcbmltcG9ydCB7IGdldFR5cGUsIEluZGV4VGVtcGxhdGUgfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvdGVtcGxhdGVzL19pbmRleCc7XG5pbXBvcnQgeyBpbmplY3RBbGwgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zdG9yZXMvZW50aXRpZXMnO1xuaW1wb3J0IHsgaW5qZWN0TW9kZWwsIGluamVjdE1vZGVsTmFtZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3BpcGVzL2RvbWFpbic7XG5pbXBvcnQgeyBBY3Rpb25zLCBFZmZlY3QsIEluamVjdGFibGVDb21wb25lbnQsIE5nQXRvbWljQ29tcG9uZW50LCBfY29tcHV0ZWQsIGFwcGx5VG9JbnB1dCwgcHJvdmlkZUVmZmVjdCB9IGZyb20gJ0BuZy1hdG9taWMvY29yZSc7XG5pbXBvcnQgeyBidWlsZENvbHVtbnMsIGluamVjdEluZGV4Rm9ybSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9vcmdhbmlzbXMvdGFibGUnO1xuaW1wb3J0IHsgaW5qZWN0SXNSb290UGFnZSwgaW5qZWN0TmF2U3RhcnRBY3Rpb25zLCBpbmplY3RTaWRlQXBwTmF2U3RhcnRBY3Rpb25zLCBtYWtlQ29uZmlnLCBOYXZBY3Rpb25JZCB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL3VpJztcbmltcG9ydCB7IGluamVjdEVudGl0eUlkTmFtZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9mb3JtJztcbmltcG9ydCB7IGNvbXB1dGVkUmF3VmFsdWUsIGluamVjdENoaWxkUm91dGVQYXJhbSwgaW5qZWN0SGFzTmV4dCB9IGZyb20gXCJAbmctYXRvbWljL2NvbW1vbi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL2FwcCc7XG5pbXBvcnQgeyBJbmRleFBpcGUgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9waXBlcy9pbmRleCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbXB1dGVkQXN5bmMgfSBmcm9tICduZ3h0ZW5zaW9uL2NvbXB1dGVkLWFzeW5jJztcbmltcG9ydCB7IG1ha2VJbml0aWFsaXplckNvbmZpZyB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL2luaXRpYWxpemVyJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5kZXhMZW5ndGhQaXBlIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vcGlwZXMvaW5kZXgtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEhpZ2hsaWdodChrZXk6IHN0cmluZyk6IFNpZ25hbDxTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+PiB7XG4gIGNvbnN0IGl0ZW1JZCA9IGluamVjdENoaWxkUm91dGVQYXJhbShrZXkpO1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSwgaXRlbUlkKCkgPyBbaXRlbUlkKCldIDogW10pKTtcbn1cblxudHlwZSBGaWx0ZXJGdW5jID0gKGl0ZW06IHtpZDogc3RyaW5nfSkgPT4gYm9vbGVhbjtcbmNvbnN0IEZJTFRFUl9GVU5DID0gbmV3IEluamVjdGlvblRva2VuPChpbmplY3Rvcj86IEluamVjdG9yKSA9PiBGaWx0ZXJGdW5jPignRklMVEVSX0ZVTkMnKTtcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRmlsdGVyRnVuYyh1c2VGYWN0b3J5OiAoKSA9PiBGaWx0ZXJGdW5jKSB7XG4gIGNvbnN0IHdyYXBwZWQgPSAoKSA9PiAoaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpKSA9PiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsIHVzZUZhY3RvcnkpO1xuXHRyZXR1cm4geyBwcm92aWRlOiBGSUxURVJfRlVOQywgdXNlRmFjdG9yeTogd3JhcHBlZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZpbHRlckZ1bmMoKSB7XG4gIHJldHVybiAoaW5qZWN0KEZJTFRFUl9GVU5DLCB7b3B0aW9uYWw6IHRydWV9KSA/PyAoKCkgPT4gKCkgPT4gdHJ1ZSkpKCk7XG59XG5cbmVudW0gQWN0aW9uSWQge1xuICBCQUNLID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHM6cGFnZXMvaW5kZXhdIEJhY2snLFxuICBDSEVDS0JPWF9DTElDSyA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBDaGVja2JveENsaWNrJyxcbiAgSEVBREVSX0NIRUNLQk9YX0NMSUNLID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIEhlYWRlckNoZWNrYm94Q2xpY2snLFxuICBBREQgPSAnW0BuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9pbmRleF0gQWRkJyxcbiAgREVUQUlMID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIERldGFpbCcsXG4gIENMT1NFID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIENsb3NlJyxcbn1cblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBJbmRleFBhZ2VTdG9yZSBleHRlbmRzIEluamVjdGFibGVDb21wb25lbnQge1xuICBzdGF0aWMgcmVhZG9ubHkgQWN0aW9uSWQgPSBBY3Rpb25JZDtcbiAgc3RhdGljIHJlYWRvbmx5IENvbmZpZyA9IG1ha2VDb25maWcoKCkgPT4ge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IGluamVjdEhpZ2hsaWdodChpbmplY3RFbnRpdHlJZE5hbWUoKSk7XG4gICAgY29uc3QgaXNSb290UGFnZSA9IGluamVjdElzUm9vdFBhZ2UoKTtcbiAgICBjb25zdCBuYXZTdGFydEFjdGlvbnMgPSBpbmplY3ROYXZTdGFydEFjdGlvbnMoaXNSb290UGFnZSk7ICBcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gaW5qZWN0RmlsdGVyRnVuYygpO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGluamVjdE1vZGVsTmFtZSgpO1xuICAgIHJldHVybiAoKSA9PiAoe1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknLFxuICAgICAgfSxcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGl0ZW1BY3Rpb25zOiAoKCkgPT4gW10pIGFzIEFjdGlvbnMsXG4gICAgICBpdGVtc01hcHBlcjogPChpdGVtczogYW55W10pID0+IGFueVtdPnVuZGVmaW5lZCxcbiAgICAgIGl0ZW1zTGVuZ3RoOiAwLFxuICAgICAgZmlsdGVyRnVuYyxcbiAgICAgIHRpdGxlOiBtb2RlbE5hbWUoKSA/IGAke21vZGVsTmFtZSgpfeS4gOimp2AgOiBg5Y+W5b6X5LitLi4uYCxcbiAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICBzZWxlY3Rpb246IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUsIFtdKSxcbiAgICAgIGhpZ2hsaWdodDogaGlnaGxpZ2h0KCksXG4gICAgICBmb3JtOiBuZXcgRm9ybUdyb3VwKHt9KSBhcyBBYnN0cmFjdENvbnRyb2wsXG4gICAgICB0YWJsZUNoaWxkcmVuS2V5OiBudWxsLFxuICAgICAgbmF2U3RhcnRBY3Rpb25zOiBuYXZTdGFydEFjdGlvbnMoKSxcbiAgICAgIG5hdkVuZEFjdGlvbnM6IDxBY3Rpb25zPltdLFxuICAgIH0pO1xuICB9LCBbJ2NvbXBvbmVudHMnLCAncGFnZXMnLCAnaW5kZXgnXSk7XG5cbiAgc3RhdGljIHByb3ZpZGVUeXBlQ29uZmlnKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Db25maWcucHJvdmlkZSgoKSA9PiB7XG4gICAgICByZXR1cm4gKGNvbmZpZywgY29udGV4dCkgPT4gKHsuLi5jb25maWcsIHR5cGU6IGdldFR5cGUoY29udGV4dCl9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSXRlbXNGcm9tUmVwb3NpdG9yeSgpIHtcbiAgICByZXR1cm4gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKCkgPT4ge1xuICAgICAgY29uc3QgTW9kZWwgPSBpbmplY3RNb2RlbCgpO1xuICAgICAgY29uc3QgaXRlbXMgPSBNb2RlbCA/IGluamVjdEFsbChNb2RlbCkgOiBzaWduYWwoW10pO1xuICAgICAgcmV0dXJuIChjb25maWcpID0+ICh7Li4uY29uZmlnLCBpdGVtczogaXRlbXMoKX0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVTaWRlQXBwTmF2U3RhcnRBY3Rpb25zKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Db25maWcucHJvdmlkZSgoKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3RQYWdlID0gaW5qZWN0SXNSb290UGFnZSgpO1xuICAgICAgY29uc3QgbmF2U3RhcnRBY3Rpb25zID0gaW5qZWN0U2lkZUFwcE5hdlN0YXJ0QWN0aW9ucyhpc1Jvb3RQYWdlKTtcbiAgICAgIHJldHVybiAoY29uZmlnKSA9PiAoe1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIG5hdlN0YXJ0QWN0aW9uczogbmF2U3RhcnRBY3Rpb25zKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBJbml0aWFsaXplciA9IG1ha2VJbml0aWFsaXplckNvbmZpZyhJbmRleFBhZ2VTdG9yZSk7XG4gIHN0YXRpYyBwcm92aWRlRm9ybUluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9IGluamVjdEluZGV4Rm9ybSh7XG4gICAgICAgIGNvbHVtbnM6IGJ1aWxkQ29sdW1ucyhbXG4gICAgICAgICAgJ2lkJywgXG4gICAgICAgICAgJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgJ3VwZGF0ZWRBdCcsXG4gICAgICAgICAgKGl0ZW06IHtpZDogc3RyaW5nfSkgPT4gW3sgaWQ6IEFjdGlvbklkLkRFVEFJTCwgaWNvbjogJ29wZW5faW5fbmV3JywgbmFtZTogJ+ips+e0sCcsIHBheWxvYWQ6IGl0ZW0gfV0sXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdmb3JtJywgZm9ybSk7XG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIHByb3ZpZGVGb3JtVmFsdWVTdG9yYWdlSW5pdGlhbGl6ZXIoKSB7XG4gICAgcmV0dXJuIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCBwYXRocyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5tYXAociA9PiByPy5yb3V0ZUNvbmZpZz8ucGF0aCk7XG4gICAgICBjb25zdCBrZXkgPSBgQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4OiR7cGF0aHMuZmlsdGVyKChwYXRoKSA9PiAhIXBhdGgpLmpvaW4oJy8nKX1gO1xuICAgICAgc3RvcmUuZm9ybSgpLnBhdGNoVmFsdWUoSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpIHx8ICd7fScpKTtcbiAgICAgIHN0b3JlLmZvcm0oKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1zTGVuZ3RoSW5pdGlhbGl6ZXIoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4TGVuZ3RoUGlwZSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBpbmplY3QoSW5kZXhMZW5ndGhQaXBlKTtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gY29tcHV0ZWRSYXdWYWx1ZSgoKSA9PiBzdG9yZS5mb3JtKCkpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zTGVuZ3RoID0gcGlwZS50cmFuc2Zvcm0oc3RvcmUuaXRlbXMoKSwgZm9ybVZhbHVlKCkpO1xuICAgICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ2l0ZW1zTGVuZ3RoJywgaXRlbXNMZW5ndGgpO1xuICAgICAgICB9LCB7YWxsb3dTaWduYWxXcml0ZXM6IHRydWV9KTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1zTWFwcGVySW5pdGlhbGl6ZXIoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGlwZSxcblx0XHRcdEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZvcm1WYWx1ZSA9IGNvbXB1dGVkUmF3VmFsdWUoKCkgPT4gc3RvcmUuZm9ybSgpKTtcblx0XHRcdFx0Y29uc3QgaW5kZXhQaXBlID0gaW5qZWN0KEluZGV4UGlwZSk7XG5cdFx0XHRcdGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtVmFsdWUoKSBhcyBhbnk7XG5cdFx0XHRcdCAgY29uc3QgaXRlbXNNYXBwZXIgPSAoaXRlbXM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zdCBmaWx0ZXJGdW5jcyA9IHN0b3JlLmZpbHRlckZ1bmNzKCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdmaWx0ZXJGdW5jczonLCBmaWx0ZXJGdW5jcyk7XG4gICAgICAgICAgICAvLyBmb3IgKGNvbnN0IGZ1bmMgb2YgZmlsdGVyRnVuY3MgPz8gW10pIHtcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZygnaXRlbXM6JywgaXRlbXMpO1xuICAgICAgICAgICAgLy8gICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihmdW5jKTtcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZygnZmlsdGVyZWRJdGVtczonLCBpdGVtcyk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhQaXBlLnRyYW5zZm9ybShpdGVtcywgdmFsdWUpO1xuICAgICAgICAgIH07XG5cdFx0XHRcdFx0YXBwbHlUb0lucHV0KHN0b3JlLCAnaXRlbXNNYXBwZXInLCBpdGVtc01hcHBlcik7XG5cdFx0XHRcdH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cdFx0XHR9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVEZWZhdWx0SW5pdGlhbGl6ZXIoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVGb3JtSW5pdGlhbGl6ZXIoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVGb3JtVmFsdWVTdG9yYWdlSW5pdGlhbGl6ZXIoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVJdGVtc0xlbmd0aEluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlSXRlbXNNYXBwZXJJbml0aWFsaXplcigpLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUJhY2tFZmZlY3QoKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoSW5kZXhQYWdlU3RvcmUuQWN0aW9uSWQuQkFDSywgKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IGhpc3RvcnkuYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVEZXRhaWxFZmZlY3QoKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoSW5kZXhQYWdlU3RvcmUuQWN0aW9uSWQuREVUQUlMLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gICAgICBjb25zdCBzdG9yZSA9IGluamVjdChJbmRleFBhZ2VTdG9yZSk7XG4gICAgICBjb25zdCBoYXNOZXh0ID0gaW5qZWN0SGFzTmV4dCgpO1xuICAgICAgcmV0dXJuIChpdGVtOiB7aWQ6IHN0cmluZ30pID0+IHtcbiAgICAgICAgYXBwLnJvdXRlci5uYXZpZ2F0ZShbaXRlbS5pZF0sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiBzdG9yZS5yb3V0ZSxcbiAgICAgICAgICByZXBsYWNlVXJsOiBoYXNOZXh0KCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVBZGRFZmZlY3QoKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoSW5kZXhQYWdlU3RvcmUuQWN0aW9uSWQuQURELCAoKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gICAgICBjb25zdCBoYXNOZXh0ID0gaW5qZWN0SGFzTmV4dCgpO1xuICAgICAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgYXBwLnJvdXRlci5uYXZpZ2F0ZShbJ25ldyddLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogcm91dGUsXG4gICAgICAgICAgcmVwbGFjZVVybDogISFoYXNOZXh0KCksXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ2hlY2tib3hDbGlja0VmZmVjdCgpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLlRBQkxFX0NIRUNLQk9YX0NMSUNLLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IGluamVjdChJbmRleFBhZ2VTdG9yZSk7XG4gICAgICByZXR1cm4gKGl0ZW06IHtpZDogc3RyaW5nfSkgPT4ge1xuICAgICAgICBzdG9yZS5zZWxlY3Rpb24oKS50b2dnbGUoaXRlbS5pZCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVUYWJsZUhlYWRlckNsaWNrRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuVEFCTEVfSEVBREVSX0NMSUNLLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IGluamVjdChJbmRleFBhZ2VTdG9yZSk7XG4gICAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBzdG9yZS5mb3JtKCkuZ2V0KFsnc29ydCddKS52YWx1ZTtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBrZXkgPT09IHNvcnQua2V5ICYmIHNvcnQub3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgIHN0b3JlLmZvcm0oKS5wYXRjaFZhbHVlKHtzb3J0OiB7a2V5LCBvcmRlcn19KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVNpZGVOYXZFZmZlY3RzKCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KE5hdkFjdGlvbklkLlRPR0dMRV9TSURFX05BViwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgcmV0dXJuICgpID0+IGFwcC5zaWRlTmF2LnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVIZWFkZXJDaGVja2JveENsaWNrRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkhFQURFUl9DSEVDS0JPWF9DTElDSywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHN0b3JlLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIHN0b3JlLnNlbGVjdGlvbigpLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RvcmUuZGlzcGxheWVkSXRlbXMoKS5mb3JFYWNoKGVudHJ5ID0+IHN0b3JlLnNlbGVjdGlvbigpLnNlbGVjdChlbnRyeS5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHRFZmZlY3RzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGV0YWlsRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQWRkRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQmFja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZUhlYWRlckNoZWNrYm94Q2xpY2tFZmZlY3QoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVDaGVja2JveENsaWNrRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlVGFibGVIZWFkZXJDbGlja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZVNpZGVOYXZFZmZlY3RzKCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVUeXBlQ29uZmlnKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEVmZmVjdHMoKSxcbiAgICBdO1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnID0gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLmluamVjdCgpO1xuICByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50eXBlKSk7XG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuaXRlbXMpKTtcbiAgcmVhZG9ubHkgaXRlbUFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5pdGVtQWN0aW9ucykpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRpdGxlKSk7XG4gIHJlYWRvbmx5IGZvcm0gPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5mb3JtKSk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbiA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnNlbGVjdGlvbikpO1xuICByZWFkb25seSBoaWdobGlnaHQgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5oaWdobGlnaHQpKTtcbiAgcmVhZG9ubHkgbmF2U3RhcnRBY3Rpb25zID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkubmF2U3RhcnRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IG5hdkVuZEFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5uYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IGZpbHRlckZ1bmMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5maWx0ZXJGdW5jKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwcGVyID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuaXRlbXNNYXBwZXIpKTtcbiAgcmVhZG9ubHkgdGFibGVDaGlsZHJlbktleSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRhYmxlQ2hpbGRyZW5LZXkpKTtcblxuICByZWFkb25seSBpdGVtc0xlbmd0aCA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1zTGVuZ3RoKSk7XG4gIHJlYWRvbmx5IGRpc3BsYXllZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMoKSA/PyBbXTtcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gdGhpcy5maWx0ZXJGdW5jKCk7XG4gICAgaXRlbXMgPSBmaWx0ZXJGdW5jID8gaXRlbXMuZmlsdGVyKGZpbHRlckZ1bmMpIDogaXRlbXM7XG4gICAgY29uc3QgaXRlbXNNYXBwZXIgPSB0aGlzLml0ZW1zTWFwcGVyKCk7XG4gICAgcmV0dXJuIGl0ZW1zTWFwcGVyID8gaXRlbXNNYXBwZXIoaXRlbXMpIDogaXRlbXM7XG4gIH0pO1xuICByZWFkb25seSBzZWxlY3RlZElkcyA9IGNvbXB1dGVkQXN5bmMoKCkgPT4gdGhpcy5zZWxlY3Rpb24oKS5jaGFuZ2VkLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuc2VsZWN0aW9uKCk/LnNlbGVjdGVkID8/IFtdKSxcbiAgKSwge2luaXRpYWxWYWx1ZTogW119KTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKGVudHJ5ID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5pbmNsdWRlcyhlbnRyeS5pZCkpKTtcbiAgcmVhZG9ubHkgaXNBbGxTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRJdGVtcygpLmV2ZXJ5KGVudHJ5ID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5pbmNsdWRlcyhlbnRyeS5pZCkpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLmluaXRpYWxpemVTdG9yZSh0aGlzKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYWdlcy1pbmRleCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSb3V0ZXJPdXRsZXRGcmFtZSxcbiAgICBJbmRleFRlbXBsYXRlLFxuICAgIEluZGV4TGVuZ3RoUGlwZSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgPGZyYW1lcy1yb3V0ZXItb3V0bGV0PlxuICAgIDx0ZW1wbGF0ZXMtaW5kZXhcbiAgICAgIFtzdHlsZS53aWR0aF09XCJzdG9yZS5jb25maWcoKS5zdHlsZS53aWR0aFwiXG4gICAgICBbdGl0bGVdPVwic3RvcmUudGl0bGUoKVwiXG4gICAgICBbdHlwZV09XCJzdG9yZS50eXBlKClcIlxuICAgICAgW3RhYmxlQ2hpbGRyZW5LZXldPVwic3RvcmUudGFibGVDaGlsZHJlbktleSgpXCJcbiAgICAgIFtpdGVtc109XCJzdG9yZS5kaXNwbGF5ZWRJdGVtcygpXCJcbiAgICAgIFtpdGVtc0xlbmd0aF09XCJzdG9yZS5pdGVtc0xlbmd0aCgpXCJcbiAgICAgIFtpdGVtQWN0aW9uc109XCJzdG9yZS5pdGVtQWN0aW9ucygpXCJcbiAgICAgIFtmb3JtXT1cInN0b3JlLmZvcm0oKVwiXG4gICAgICBbc2VsZWN0aW9uXT1cInN0b3JlLnNlbGVjdGlvbigpXCJcbiAgICAgIFtoaWdobGlnaHRdPVwic3RvcmUuaGlnaGxpZ2h0KClcIlxuICAgICAgW25hdlN0YXJ0QWN0aW9uc109XCJzdG9yZS5uYXZTdGFydEFjdGlvbnMoKVwiXG4gICAgICBbbmF2RW5kQWN0aW9uc109XCJzdG9yZS5uYXZFbmRBY3Rpb25zKClcIlxuICAgICAgKGFjdGlvbik9XCJkaXNwYXRjaCgkZXZlbnQpXCJcbiAgICAvPlxuICA8L2ZyYW1lcy1yb3V0ZXItb3V0bGV0PlxuICBgLFxuICBzdHlsZVVybDogJy4vaW5kZXgucGFnZS5zY3NzJyxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IEluZGV4UGFnZVN0b3JlLFxuICAgICAgaW5wdXRzOiBbJ2l0ZW1zJ10sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5kZXhQYWdlIGV4dGVuZHMgTmdBdG9taWNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICBwcm90ZWN0ZWQgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgQEVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLkJBQ0spXG4gIHByb3RlY3RlZCBiYWNrKCkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5CQUNLfSk7XG4gIH1cblxuICBARWZmZWN0KE5hdkFjdGlvbklkLkNMT1NFKVxuICBwcm90ZWN0ZWQgY2xvc2UoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7aWQ6IEFjdGlvbklkLkNMT1NFfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuSVRFTV9DTElDSylcbiAgcHJvdGVjdGVkIGl0ZW1DbGljayhpdGVtOiB7aWQ6IHN0cmluZ30pIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtpZDogQWN0aW9uSWQuREVUQUlMLCBwYXlsb2FkOiBpdGVtfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuVEFCTEVfSEVBREVSX0NIRUNLQk9YX0NMSUNLKVxuICBwcm90ZWN0ZWQgb25DaGVja2JveENsaWNrKGl0ZW06IHtpZDogc3RyaW5nfSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5IRUFERVJfQ0hFQ0tCT1hfQ0xJQ0ssIHBheWxvYWQ6IGl0ZW19KTtcbiAgfVxufVxuIl19
485
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-Xw2p: var(--page-width-lv3);--primary-color-SCOPED-IN-index-Xw2p: var(--primary-color);--on-primary-color-SCOPED-IN-index-Xw2p: var(--on-primary-color);--surface-color-SCOPED-IN-index-Xw2p: var(--surface-color);--on-surface-color-SCOPED-IN-index-Xw2p: var(--on-surface-color);--on-background-color-SCOPED-IN-index-Xw2p: var(--on-background-color);--background-color-SCOPED-IN-index-Xw2p: var(--background-color);--navigator-background-color-SCOPED-IN-index-Xw2p: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-Xw2p: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-Xw2p: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-Xw2p: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-Xw2p)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-Xw2p);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-Xw2p);--surface-color: var(--surface-color-SCOPED-IN-index-Xw2p);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-Xw2p);--background-color: var(--background-color-SCOPED-IN-index-Xw2p);--on-background-color: var(--on-background-color-SCOPED-IN-index-Xw2p);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-Xw2p);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-Xw2p);--table-background-color: var(--table-background-color-SCOPED-IN-index-Xw2p);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-Xw2p)}\n"] }]
486
+ }], propDecorators: { back: [], close: [], itemClick: [], onCheckboxClick: [], onItemButtonClicked: [] } });
487
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL19pbmRleC9pbmRleC5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBb0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBWSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBVyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pLLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUs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QUFpQixzRkFDakIsYUFBYTs7QUF5Q0w7SUFEVCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Ozs7cUNBR25DO0FBR1M7SUFEVCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQzs7OztzQ0FHekI7QUFHUztJQURULE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs7OzswQ0FHekM7QUFHUztJQURULE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDOzs7O2dEQUcxRDtBQUlTO0lBRFQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUM7Ozs7b0RBU3ZEOzJGQW5DVSxTQUFTO2tCQXhDckIsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLGlCQUFpQjt3QkFDakIsYUFBYTtxQkFDZCxZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQsa0JBRWU7d0JBQ2Q7NEJBQ0UsU0FBUyxFQUFFLGNBQWM7NEJBQ3pCLE1BQU0sRUFBRTtnQ0FDTixPQUFPO2dDQUNQLFVBQVU7NkJBQ1g7eUJBQ0Y7cUJBQ0Y7OEJBUVMsSUFBSSxNQUtKLEtBQUssTUFLTCxTQUFTLE1BS1QsZUFBZSxNQU1mLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIFByb3ZpZGVyLCBTaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFJvdXRlck91dGxldEZyYW1lIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL2ZyYW1lcy9yb3V0ZXItb3V0bGV0JztcbmltcG9ydCB7IGNvbnZlcnRUb0l0ZW1zTWFwLCBnZXRUeXBlLCBJbmRleFRlbXBsYXRlLCBJdGVtc01hcCB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy90ZW1wbGF0ZXMvX2luZGV4JztcbmltcG9ydCB7IGluamVjdEFsbCB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3N0b3Jlcy9lbnRpdGllcyc7XG5pbXBvcnQgeyBpbmplY3RNb2RlbCwgaW5qZWN0TW9kZWxOYW1lIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vcGlwZXMvZG9tYWluJztcbmltcG9ydCB7IEFjdGlvbnMsIEVmZmVjdCwgSW5qZWN0YWJsZUNvbXBvbmVudCwgTmdBdG9taWNDb21wb25lbnQsIFRva2VuaXplZFR5cGUsIF9jb21wdXRlZCwgYXBwbHlUb0lucHV0LCBwcm92aWRlRWZmZWN0LCByZXNvbHZlQWN0aW9ucyB9IGZyb20gJ0BuZy1hdG9taWMvY29yZSc7XG5pbXBvcnQgeyBidWlsZENvbHVtbnMsIGluamVjdEluZGV4Rm9ybSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9vcmdhbmlzbXMvdGFibGUnO1xuaW1wb3J0IHsgaW5qZWN0SXNSb290UGFnZSwgaW5qZWN0TmF2U3RhcnRBY3Rpb25zLCBpbmplY3RTaWRlQXBwTmF2U3RhcnRBY3Rpb25zLCBtYWtlQ29uZmlnLCBOYXZBY3Rpb25JZCB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL3VpJztcbmltcG9ydCB7IGluamVjdEVudGl0eUlkTmFtZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9mb3JtJztcbmltcG9ydCB7IGNvbXB1dGVkUmF3VmFsdWUsIGluamVjdENoaWxkUm91dGVQYXJhbSwgaW5qZWN0SGFzTmV4dCwgaW5qZWN0Um91dGVQYXJhbSwgaW5qZWN0Um91dGVTa2lwIH0gZnJvbSBcIkBuZy1hdG9taWMvY29tbW9uL3V0aWxzXCI7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vc2VydmljZXMvYXBwJztcbmltcG9ydCB7IEluZGV4UGlwZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3BpcGVzL2luZGV4JztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29tcHV0ZWRBc3luYyB9IGZyb20gJ25neHRlbnNpb24vY29tcHV0ZWQtYXN5bmMnO1xuaW1wb3J0IHsgbWFrZUluaXRpYWxpemVyQ29uZmlnIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vc2VydmljZXMvaW5pdGlhbGl6ZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbmRleExlbmd0aFBpcGUgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9waXBlcy9pbmRleC1sZW5ndGgnO1xuaW1wb3J0IHsgU2hlZXRTZXJ2aWNlIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vc2VydmljZXMvc2hlZXRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEhpZ2hsaWdodChrZXk6IHN0cmluZyk6IFNpZ25hbDxTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+PiB7XG4gIGNvbnN0IGl0ZW1JZCA9IGluamVjdENoaWxkUm91dGVQYXJhbShrZXkpO1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSwgaXRlbUlkKCkgPyBbaXRlbUlkKCldIDogW10pKTtcbn1cblxudHlwZSBGaWx0ZXJGdW5jID0gKGl0ZW06IHtpZDogc3RyaW5nfSkgPT4gYm9vbGVhbjtcbmNvbnN0IEZJTFRFUl9GVU5DID0gbmV3IEluamVjdGlvblRva2VuPChpbmplY3Rvcj86IEluamVjdG9yKSA9PiBGaWx0ZXJGdW5jPignRklMVEVSX0ZVTkMnKTtcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRmlsdGVyRnVuYyh1c2VGYWN0b3J5OiAoKSA9PiBGaWx0ZXJGdW5jKSB7XG4gIGNvbnN0IHdyYXBwZWQgPSAoKSA9PiAoaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpKSA9PiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsIHVzZUZhY3RvcnkpO1xuXHRyZXR1cm4geyBwcm92aWRlOiBGSUxURVJfRlVOQywgdXNlRmFjdG9yeTogd3JhcHBlZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZpbHRlckZ1bmMoKSB7XG4gIHJldHVybiAoaW5qZWN0KEZJTFRFUl9GVU5DLCB7b3B0aW9uYWw6IHRydWV9KSA/PyAoKCkgPT4gKCkgPT4gdHJ1ZSkpKCk7XG59XG5cbmVudW0gQWN0aW9uSWQge1xuICBCQUNLID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHM6cGFnZXMvaW5kZXhdIEJhY2snLFxuICBDSEVDS0JPWF9DTElDSyA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBDaGVja2JveENsaWNrJyxcbiAgSEVBREVSX0NIRUNLQk9YX0NMSUNLID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIEhlYWRlckNoZWNrYm94Q2xpY2snLFxuICBBREQgPSAnW0BuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9pbmRleF0gQWRkJyxcbiAgREVUQUlMID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIERldGFpbCcsXG4gIENMT1NFID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIENsb3NlJyxcbiAgTElTVF9JVEVNX0JVVFRPTl9DTElDS0VEID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIExpc3RJdGVtQnV0dG9uQ2xpY2snLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8c3RyaW5nPiwgaXRlbXM6IHtpZDogc3RyaW5nfVtdKSB7XG4gIGlmIChzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSBpdGVtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSwgW10pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPih0cnVlLCBpdGVtcy5tYXAoZW50cnkgPT4gZW50cnkuaWQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlKc29uUGFyc2UodmFsdWU6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvdmVyeUZvcm1WYWx1ZShmb3JtOiBBYnN0cmFjdENvbnRyb2wsIGtleTogc3RyaW5nID0gJ2RlZmF1bHQnKSB7XG4gIC8vIEZvcm1Db250cm9s44Gu5aC05ZCI44GoRm9ybUdyb3Vw44Gu5aC05ZCI44Gn5Yem55CG44KS5YiG44GR44KLXG4gIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgZm9ybS5wYXRjaFZhbHVlKHRyeUpzb25QYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSk7XG4gICAgZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgY29uc29sZS5kZWJ1ZygnbG9hZGVkOicsIHZhbHVlKTtcbiAgICBmb3JtLnNldFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZygndmFsdWU6JywgdmFsdWUpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuQFRva2VuaXplZFR5cGUoKVxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBJbmRleFBhZ2VTdG9yZTxUPiBleHRlbmRzIEluamVjdGFibGVDb21wb25lbnQge1xuICBzdGF0aWMgcmVhZG9ubHkgQWN0aW9uSWQgPSBBY3Rpb25JZDtcbiAgc3RhdGljIHJlYWRvbmx5IENvbmZpZyA9IG1ha2VDb25maWcoKCkgPT4ge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IGluamVjdEhpZ2hsaWdodChpbmplY3RFbnRpdHlJZE5hbWUoKSk7XG4gICAgY29uc3QgaXNSb290UGFnZSA9IGluamVjdElzUm9vdFBhZ2UoKTtcbiAgICBjb25zdCBuYXZTdGFydEFjdGlvbnMgPSBpbmplY3ROYXZTdGFydEFjdGlvbnMoaXNSb290UGFnZSk7ICBcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gaW5qZWN0RmlsdGVyRnVuYygpO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGluamVjdE1vZGVsTmFtZSgpO1xuICAgIHJldHVybiAoKSA9PiAoe1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknLFxuICAgICAgfSxcbiAgICAgIGdyb3VwZWRCeTogPHN0cmluZz5udWxsLFxuICAgICAgZ3JvdXBLZXlzOiBbXSxcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGl0ZW1zTWFwOiA8SXRlbXNNYXA8YW55Pj51bmRlZmluZWQsXG4gICAgICBpdGVtQWN0aW9uczogKCgpID0+IFtdKSBhcyBBY3Rpb25zLFxuICAgICAgaXRlbXNNYXBwZXI6IDwoaXRlbXM6IGFueVtdKSA9PiBhbnlbXT51bmRlZmluZWQsXG4gICAgICBpdGVtc0xlbmd0aDogMCxcbiAgICAgIGZpbHRlckZ1bmMsXG4gICAgICB0aXRsZTogbW9kZWxOYW1lKCkgPyBgJHttb2RlbE5hbWUoKX3kuIDopqdgIDogYOWPluW+l+S4rS4uLmAsXG4gICAgICB0eXBlOiA8J2xpc3QnIHwgJ3RhYmxlJyB8ICdncmlkJz4ndGFibGUnLFxuICAgICAgc2VsZWN0aW9uOiBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPih0cnVlLCBbXSksXG4gICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodCgpLFxuICAgICAgZm9ybTogbmV3IEZvcm1Hcm91cCh7fSkgYXMgQWJzdHJhY3RDb250cm9sLFxuICAgICAgdGFibGVDaGlsZHJlbktleTogbnVsbCxcbiAgICAgIG5hdlN0YXJ0QWN0aW9uczogbmF2U3RhcnRBY3Rpb25zKCksXG4gICAgICBuYXZFbmRBY3Rpb25zOiA8QWN0aW9ucz5bXSxcbiAgICB9KTtcbiAgfSwgWydjb21wb25lbnRzJywgJ3BhZ2VzJywgJ2luZGV4J10pO1xuXG4gIHN0YXRpYyBwcm92aWRlVHlwZUNvbmZpZygpIHtcbiAgICByZXR1cm4gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKCkgPT4ge1xuICAgICAgcmV0dXJuIChjb25maWcsIGNvbnRleHQpID0+ICh7Li4uY29uZmlnLCB0eXBlOiBnZXRUeXBlKGNvbnRleHQpfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1zRnJvbVJlcG9zaXRvcnkoKSB7XG4gICAgcmV0dXJuIEluZGV4UGFnZVN0b3JlLkNvbmZpZy5wcm92aWRlKCgpID0+IHtcbiAgICAgIGNvbnN0IE1vZGVsID0gaW5qZWN0TW9kZWwoKTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gTW9kZWwgPyBpbmplY3RBbGwoTW9kZWwpIDogc2lnbmFsKFtdKTtcbiAgICAgIHJldHVybiAoY29uZmlnKSA9PiAoey4uLmNvbmZpZywgaXRlbXM6IGl0ZW1zKCl9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSXRlbUFjdGlvbnNDb25maWcoKSB7XG4gICAgcmV0dXJuIEluZGV4UGFnZVN0b3JlLkNvbmZpZy5wcm92aWRlKCgpID0+IHtcbiAgICAgIHJldHVybiAoY29uZmlnKSA9PiAoe1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIGl0ZW1BY3Rpb25zOiAoaXRlbSkgPT4gW1xuICAgICAgICAgIHsgaWQ6IEFjdGlvbklkLkRFVEFJTCwgaWNvbjogJ29wZW5faW5fbmV3JywgbmFtZTogJ+ips+e0sCcsIHBheWxvYWQ6IGl0ZW0gfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVTaWRlQXBwTmF2U3RhcnRBY3Rpb25zKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Db25maWcucHJvdmlkZSgoKSA9PiB7XG4gICAgICBjb25zdCBpc1Jvb3RQYWdlID0gaW5qZWN0SXNSb290UGFnZSgnc2lkZScpO1xuICAgICAgY29uc3QgbmF2U3RhcnRBY3Rpb25zID0gaW5qZWN0U2lkZUFwcE5hdlN0YXJ0QWN0aW9ucyhpc1Jvb3RQYWdlKTtcbiAgICAgIHJldHVybiAoY29uZmlnKSA9PiAoe1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIG5hdlN0YXJ0QWN0aW9uczogbmF2U3RhcnRBY3Rpb25zKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBJbml0aWFsaXplciA9IG1ha2VJbml0aWFsaXplckNvbmZpZyhJbmRleFBhZ2VTdG9yZSk7XG4gIHN0YXRpYyBwcm92aWRlRm9ybUluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9IGluamVjdEluZGV4Rm9ybSh7XG4gICAgICAgIGNvbHVtbnM6IGJ1aWxkQ29sdW1ucyhbXG4gICAgICAgICAgJ2lkJywgXG4gICAgICAgICAgJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgJ3VwZGF0ZWRBdCcsXG4gICAgICAgICAgKGl0ZW06IHtpZDogc3RyaW5nfSkgPT4gW3sgaWQ6IEFjdGlvbklkLkRFVEFJTCwgaWNvbjogJ29wZW5faW5fbmV3JywgbmFtZTogJ+ips+e0sCcsIHBheWxvYWQ6IGl0ZW0gfV0sXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdmb3JtJywgZm9ybSk7XG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIHByb3ZpZGVGb3JtVmFsdWVTdG9yYWdlSW5pdGlhbGl6ZXIoKSB7XG4gICAgcmV0dXJuIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCBwYXRocyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5tYXAociA9PiByPy5yb3V0ZUNvbmZpZz8ucGF0aCk7XG4gICAgICBjb25zdCBrZXkgPSBgQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4OiR7cGF0aHMuZmlsdGVyKChwYXRoKSA9PiAhIXBhdGgpLmpvaW4oJy8nKX1gO1xuICAgICAgcmVjb3ZlcnlGb3JtVmFsdWUoc3RvcmUuZm9ybSgpLCBrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVJdGVtc0xlbmd0aEluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleExlbmd0aFBpcGUsXG4gICAgICBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBwaXBlID0gaW5qZWN0KEluZGV4TGVuZ3RoUGlwZSk7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGNvbXB1dGVkUmF3VmFsdWUoKCkgPT4gc3RvcmUuZm9ybSgpKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtc0xlbmd0aCA9IHBpcGUudHJhbnNmb3JtKHN0b3JlLml0ZW1zKCksIGZvcm1WYWx1ZSgpKTtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdpdGVtc0xlbmd0aCcsIGl0ZW1zTGVuZ3RoKTtcbiAgICAgICAgfSwge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfSk7XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVJdGVtc01hcHBlckluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBpcGUsXG5cdFx0XHRJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtVmFsdWUgPSBjb21wdXRlZFJhd1ZhbHVlKCgpID0+IHN0b3JlLmZvcm0oKSk7XG5cdFx0XHRcdGNvbnN0IGluZGV4UGlwZSA9IGluamVjdChJbmRleFBpcGUpO1xuXHRcdFx0XHRlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybVZhbHVlKCkgYXMgYW55O1xuXHRcdFx0XHQgIGNvbnN0IGl0ZW1zTWFwcGVyID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc3QgZmlsdGVyRnVuY3MgPSBzdG9yZS5maWx0ZXJGdW5jcygpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnZmlsdGVyRnVuY3M6JywgZmlsdGVyRnVuY3MpO1xuICAgICAgICAgICAgLy8gZm9yIChjb25zdCBmdW5jIG9mIGZpbHRlckZ1bmNzID8/IFtdKSB7XG4gICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoJ2l0ZW1zOicsIGl0ZW1zKTtcbiAgICAgICAgICAgIC8vICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuYyk7XG4gICAgICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoJ2ZpbHRlcmVkSXRlbXM6JywgaXRlbXMpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4UGlwZS50cmFuc2Zvcm0oaXRlbXMsIHZhbHVlKTtcbiAgICAgICAgICB9O1xuXHRcdFx0XHRcdGFwcGx5VG9JbnB1dChzdG9yZSwgJ2l0ZW1zTWFwcGVyJywgaXRlbXNNYXBwZXIpO1xuXHRcdFx0XHR9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXHRcdFx0fSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ29sdW1uc0luaXRpYWxpemVyKHVzZUZhY3Rvcnk6ICgpID0+IHN0cmluZ1tdKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB1c2VGYWN0b3J5KCk7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBpbmplY3RJbmRleEZvcm0oeyBjb2x1bW5zOiBidWlsZENvbHVtbnMoY29sdW1ucykgfSk7XG4gICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ2Zvcm0nLCBmb3JtKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1zSW5pdGlhbGl6ZXIoaXRlbXNGYWN0b3J5OiAoKSA9PiBhbnlbXSk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGl0ZW1zRmFjdG9yeSgpO1xuXHRcdFx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRcdGFwcGx5VG9JbnB1dChzdG9yZSwgJ2l0ZW1zJywgaXRlbXMpO1x0XG5cdFx0XHRcdH0sIHthbGxvd1NpZ25hbFdyaXRlczogdHJ1ZX0pO1xuXHRcdFx0fSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRm9ybUluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRm9ybVZhbHVlU3RvcmFnZUluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlSXRlbXNMZW5ndGhJbml0aWFsaXplcigpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZUl0ZW1zTWFwcGVySW5pdGlhbGl6ZXIoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVCYWNrRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkJBQ0ssICgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiBoaXN0b3J5LmJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGV0YWlsRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgIHJldHVybiAoaXRlbToge2lkOiBzdHJpbmd9KSA9PiB7XG4gICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoW2l0ZW0uaWRdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogc3RvcmUucm91dGUsXG4gICAgICAgICAgcmVwbGFjZVVybDogaGFzTmV4dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQWRkRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkFERCwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgIGNvbnN0IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6ICEhaGFzTmV4dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUNoZWNrYm94Q2xpY2tFZmZlY3QoKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoSW5kZXhUZW1wbGF0ZS5BY3Rpb25JZC5UQUJMRV9DSEVDS0JPWF9DTElDSywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgcmV0dXJuIChpdGVtOiB7aWQ6IHN0cmluZ30pID0+IHtcbiAgICAgICAgc3RvcmUuc2VsZWN0aW9uKCkudG9nZ2xlKGl0ZW0uaWQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlVGFibGVIZWFkZXJDbGlja0VmZmVjdCgpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLlRBQkxFX0hFQURFUl9DTElDSywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ID0gc3RvcmUuZm9ybSgpLmdldChbJ3NvcnQnXSkudmFsdWU7XG4gICAgICAgIGNvbnN0IG9yZGVyID0ga2V5ID09PSBzb3J0LmtleSAmJiBzb3J0Lm9yZGVyID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICBzdG9yZS5mb3JtKCkucGF0Y2hWYWx1ZSh7c29ydDoge2tleSwgb3JkZXJ9fSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVTaWRlTmF2RWZmZWN0cygpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChOYXZBY3Rpb25JZC5UT0dHTEVfU0lERV9OQVYsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgICAgIHJldHVybiAoKSA9PiBhcHAuc2lkZU5hdi50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSGVhZGVyQ2hlY2tib3hDbGlja0VmZmVjdCgpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5IRUFERVJfQ0hFQ0tCT1hfQ0xJQ0ssICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KEluZGV4UGFnZVN0b3JlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRvZ2dsZUFsbFNlbGVjdGlvbihzdG9yZS5zZWxlY3Rpb24oKSwgc3RvcmUuZGlzcGxheWVkSXRlbXMoKSk7XG4gICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ3NlbGVjdGlvbicsIHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHRFZmZlY3RzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGV0YWlsRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQWRkRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQmFja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZUhlYWRlckNoZWNrYm94Q2xpY2tFZmZlY3QoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVDaGVja2JveENsaWNrRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlVGFibGVIZWFkZXJDbGlja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZVNpZGVOYXZFZmZlY3RzKCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdENvbmZpZygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVJdGVtQWN0aW9uc0NvbmZpZygpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZVR5cGVDb25maWcoKSxcbiAgICBdXG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHQoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0Q29uZmlnKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEVmZmVjdHMoKSxcbiAgICBdO1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnID0gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLmluamVjdCgpO1xuICByZWFkb25seSBzdHlsZSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnN0eWxlKSk7XG4gIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcmVhZG9ubHkgZ3JvdXBlZEJ5ID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZ3JvdXBlZEJ5KSk7XG4gIHJlYWRvbmx5IGdyb3VwS2V5cyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmdyb3VwS2V5cykpO1xuICByZWFkb25seSB0eXBlID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkudHlwZSkpO1xuICByZWFkb25seSBpdGVtcyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1zKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IGNvbnZlcnRUb0l0ZW1zTWFwKHRoaXMuaXRlbXMoKSkpKTtcbiAgcmVhZG9ubHkgaXRlbUFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5pdGVtQWN0aW9ucykpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRpdGxlKSk7XG4gIHJlYWRvbmx5IGZvcm0gPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5mb3JtKSk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbiA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnNlbGVjdGlvbikpO1xuICByZWFkb25seSBoaWdobGlnaHQgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5oaWdobGlnaHQpKTtcbiAgcmVhZG9ubHkgbmF2U3RhcnRBY3Rpb25zID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkubmF2U3RhcnRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IG5hdkVuZEFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5uYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IGZpbHRlckZ1bmMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5maWx0ZXJGdW5jKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwcGVyID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuaXRlbXNNYXBwZXIpKTtcbiAgcmVhZG9ubHkgdGFibGVDaGlsZHJlbktleSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRhYmxlQ2hpbGRyZW5LZXkpKTtcblxuICByZWFkb25seSBpdGVtc0xlbmd0aCA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1zTGVuZ3RoKSk7XG4gIHJlYWRvbmx5IGRpc3BsYXllZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMoKSA/PyBbXTtcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gdGhpcy5maWx0ZXJGdW5jKCk7XG4gICAgaXRlbXMgPSBmaWx0ZXJGdW5jID8gaXRlbXMuZmlsdGVyKGZpbHRlckZ1bmMpIDogaXRlbXM7XG4gICAgY29uc3QgaXRlbXNNYXBwZXIgPSB0aGlzLml0ZW1zTWFwcGVyKCk7XG4gICAgcmV0dXJuIGl0ZW1zTWFwcGVyID8gaXRlbXNNYXBwZXIoaXRlbXMpIDogaXRlbXM7XG4gIH0pO1xuICByZWFkb25seSBzZWxlY3RlZElkcyA9IGNvbXB1dGVkQXN5bmMoKCkgPT4gdGhpcy5zZWxlY3Rpb24oKS5jaGFuZ2VkLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuc2VsZWN0aW9uKCk/LnNlbGVjdGVkID8/IFtdKSxcbiAgKSwge2luaXRpYWxWYWx1ZTogW119KTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pdGVtcygpID8/IFtdKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5zZWxlY3RlZElkcygpLmluY2x1ZGVzKGVudHJ5LmlkKSkpO1xuICByZWFkb25seSBpc0FsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZEl0ZW1zKCkuZXZlcnkoZW50cnkgPT4gdGhpcy5zZWxlY3RlZElkcygpLmluY2x1ZGVzKGVudHJ5LmlkKSk7XG4gIH0pO1xuICByZWFkb25seSBza2lwID0gaW5qZWN0Um91dGVTa2lwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5pbml0aWFsaXplU3RvcmUodGhpcyk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZygnaXRlbXNNYXA6JywgdGhpcy5pdGVtc01hcCgpKTtcbiAgICB9KVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BhZ2VzLWluZGV4JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlck91dGxldEZyYW1lLFxuICAgIEluZGV4VGVtcGxhdGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gIDxmcmFtZXMtcm91dGVyLW91dGxldCBbc2tpcF09XCJzdG9yZS5za2lwKClcIj5cbiAgICA8dGVtcGxhdGVzLWluZGV4XG4gICAgICBbc3R5bGVdPVwic3RvcmUuc3R5bGUoKVwiXG4gICAgICBbdGl0bGVdPVwic3RvcmUudGl0bGUoKVwiXG4gICAgICBbdHlwZV09XCJzdG9yZS50eXBlKClcIlxuICAgICAgW3RhYmxlQ2hpbGRyZW5LZXldPVwic3RvcmUudGFibGVDaGlsZHJlbktleSgpXCJcbiAgICAgIFtpdGVtc109XCJzdG9yZS5kaXNwbGF5ZWRJdGVtcygpXCJcbiAgICAgIFtpdGVtc01hcF09XCJzdG9yZS5pdGVtc01hcCgpXCJcbiAgICAgIFtpdGVtc0xlbmd0aF09XCJzdG9yZS5pdGVtc0xlbmd0aCgpXCJcbiAgICAgIFtpdGVtQWN0aW9uc109XCJzdG9yZS5pdGVtQWN0aW9ucygpXCJcbiAgICAgIFtncm91cGVkQnldPVwic3RvcmUuZ3JvdXBlZEJ5KClcIlxuICAgICAgW2dyb3VwS2V5c109XCJzdG9yZS5ncm91cEtleXMoKVwiXG4gICAgICBbZm9ybV09XCJzdG9yZS5mb3JtKClcIlxuICAgICAgW3NlbGVjdGlvbl09XCJzdG9yZS5zZWxlY3Rpb24oKVwiXG4gICAgICBbaGlnaGxpZ2h0XT1cInN0b3JlLmhpZ2hsaWdodCgpXCJcbiAgICAgIFtuYXZTdGFydEFjdGlvbnNdPVwic3RvcmUubmF2U3RhcnRBY3Rpb25zKClcIlxuICAgICAgW25hdkVuZEFjdGlvbnNdPVwic3RvcmUubmF2RW5kQWN0aW9ucygpXCJcbiAgICAgIChhY3Rpb24pPVwiZGlzcGF0Y2goJGV2ZW50KVwiXG4gICAgLz5cbiAgPC9mcmFtZXMtcm91dGVyLW91dGxldD5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL2luZGV4LnBhZ2Uuc2NzcycsXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBJbmRleFBhZ2VTdG9yZSxcbiAgICAgIGlucHV0czogW1xuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAnaXRlbXNNYXAnLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmRleFBhZ2UgZXh0ZW5kcyBOZ0F0b21pY0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBzdG9yZSA9IGluamVjdChJbmRleFBhZ2VTdG9yZSk7XG4gIHByb3RlY3RlZCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJvdGVjdGVkIHNoZWV0ID0gaW5qZWN0KFNoZWV0U2VydmljZSk7XG5cbiAgQEVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLkJBQ0spXG4gIHByb3RlY3RlZCBiYWNrKCkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5CQUNLfSk7XG4gIH1cblxuICBARWZmZWN0KE5hdkFjdGlvbklkLkNMT1NFKVxuICBwcm90ZWN0ZWQgY2xvc2UoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7aWQ6IEFjdGlvbklkLkNMT1NFfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuSVRFTV9DTElDSylcbiAgcHJvdGVjdGVkIGl0ZW1DbGljayhpdGVtOiB7aWQ6IHN0cmluZ30pIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtpZDogQWN0aW9uSWQuREVUQUlMLCBwYXlsb2FkOiBpdGVtfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuVEFCTEVfSEVBREVSX0NIRUNLQk9YX0NMSUNLKVxuICBwcm90ZWN0ZWQgb25DaGVja2JveENsaWNrKGl0ZW06IHtpZDogc3RyaW5nfSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5IRUFERVJfQ0hFQ0tCT1hfQ0xJQ0ssIHBheWxvYWQ6IGl0ZW19KTtcbiAgfVxuXG4gIC8vIE1FTU8oQG5vbnRhbmdlbnQpOiDjgrfjg7zjg4jjga7jgqLjgq/jgrfjg6fjg7PjgpLjg5rjg7zjgrjjgavmjIHjgZ/jgZvjgovjgbnjgY3jgYvjga/opoHmpJzoqI7jgIJcbiAgQEVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLkxJU1RfSVRFTV9CVVRUT05fQ0xJQ0tFRClcbiAgcHJvdGVjdGVkIG9uSXRlbUJ1dHRvbkNsaWNrZWQoaXRlbTogYW55KSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHJlc29sdmVBY3Rpb25zKHRoaXMuc3RvcmUuaXRlbUFjdGlvbnMoKSwgaXRlbSk7XG4gICAgdGhpcy5zaGVldC5vcGVuQWN0aW9ucyhhY3Rpb25zKS50aGVuKChhY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICBpZDogYWN0aW9uLmlkLFxuICAgICAgICBwYXlsb2FkOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=