@ng-atomic/components 18.2.1 → 18.5.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 (315) hide show
  1. package/atoms/atoms.module.d.ts +6 -2
  2. package/atoms/smart-menu-button/smart-menu-button.atom.d.ts +9 -8
  3. package/components.module.d.ts +2 -12
  4. package/esm2022/atoms/atoms.module.mjs +7 -2
  5. package/esm2022/atoms/icon/icon.atom.mjs +2 -2
  6. package/esm2022/atoms/smart-menu-button/smart-menu-button.atom.mjs +92 -124
  7. package/esm2022/components.module.mjs +20 -41
  8. package/esm2022/extras/editor/editor.component.mjs +78 -46
  9. package/esm2022/frames/app/app.frame.mjs +132 -70
  10. package/esm2022/frames/auto-layout/auto-layout.frame.mjs +29 -7
  11. package/esm2022/frames/columns/columns.frame.mjs +2 -2
  12. package/esm2022/frames/divider/divider.frame.mjs +2 -2
  13. package/esm2022/frames/drawer/drawer.frame.mjs +2 -2
  14. package/esm2022/frames/entrance/entrance.frame.mjs +2 -2
  15. package/esm2022/frames/fab/fab.frame.mjs +2 -2
  16. package/esm2022/frames/frames.module.mjs +19 -14
  17. package/esm2022/frames/line-up/line-up.animations.mjs +3 -7
  18. package/esm2022/frames/line-up/line-up.frame.mjs +2 -2
  19. package/esm2022/frames/loading/loading.frame.mjs +2 -2
  20. package/esm2022/frames/progress-bar/index.mjs +2 -0
  21. package/esm2022/frames/progress-bar/ng-atomic-components-frames-progress-bar.mjs +5 -0
  22. package/esm2022/frames/progress-bar/progress-bar.frame.mjs +53 -0
  23. package/esm2022/frames/router-outlet/router-outlet.frame.mjs +96 -41
  24. package/esm2022/frames/scroll/scroll.frame.mjs +32 -14
  25. package/esm2022/frames/scroll-v2/index.mjs +2 -2
  26. package/esm2022/frames/side-app/index.mjs +2 -0
  27. package/esm2022/frames/side-app/ng-atomic-components-frames-side-app.mjs +5 -0
  28. package/esm2022/frames/side-app/side-app.frame.mjs +74 -0
  29. package/esm2022/frames/side-nav/side-nav.frame.mjs +27 -21
  30. package/esm2022/frames/smart-menu/smart-menu.frame.mjs +2 -2
  31. package/esm2022/frames/tabs/tabs.frame.mjs +13 -7
  32. package/esm2022/frames/vertical-hide/vertical-hide.frame.mjs +11 -18
  33. package/esm2022/molecules/action-input-field/action-input-field.molecule.mjs +2 -2
  34. package/esm2022/molecules/actions-column/actions-column.molecule.mjs +13 -7
  35. package/esm2022/molecules/checkbox-column/checkbox-column.molecule.mjs +48 -21
  36. package/esm2022/molecules/date-input-field/date-input-field.molecule.mjs +2 -2
  37. package/esm2022/molecules/date-range-input-field/date-range-input-field.molecule.mjs +2 -2
  38. package/esm2022/molecules/file-input-field/file-input-field.molecule.mjs +2 -2
  39. package/esm2022/molecules/grid-item/grid-item.molecule.mjs +2 -2
  40. package/esm2022/molecules/list-item/index.mjs +2 -0
  41. package/esm2022/molecules/list-item/list-item.molecule.mjs +198 -0
  42. package/esm2022/molecules/list-item/ng-atomic-components-molecules-list-item.mjs +5 -0
  43. package/esm2022/molecules/loading-box/loading-box.molecule.mjs +2 -2
  44. package/esm2022/molecules/molecules.module.mjs +19 -14
  45. package/esm2022/molecules/navigation-list-item/navigation-list-item.molecule.mjs +2 -2
  46. package/esm2022/molecules/select-input-field/select-input-field.molecule.mjs +9 -5
  47. package/esm2022/molecules/smart-column/smart-column.molecule.mjs +129 -43
  48. package/esm2022/molecules/tree-column/tree-column.molecule.mjs +37 -25
  49. package/esm2022/organisms/action-buttons-section/action-buttons-section.organism.mjs +2 -2
  50. package/esm2022/organisms/action-input-section/action-input-section.organism.mjs +2 -2
  51. package/esm2022/organisms/agreement-input-section/agreement-input-section.organism.mjs +3 -3
  52. package/esm2022/organisms/card-input-section/card-input-section.organism.mjs +2 -2
  53. package/esm2022/organisms/cvc-and-exp-input-section/cvc-and-exp-input-section.organism.mjs +2 -2
  54. package/esm2022/organisms/date-input-section/date-input-section.organism.mjs +4 -4
  55. package/esm2022/organisms/date-range-input-section/date-range-input-section.organism.mjs +4 -4
  56. package/esm2022/organisms/definition-list/definition-list.organism.mjs +2 -2
  57. package/esm2022/organisms/file-input-section/file-input-section.organism.mjs +2 -2
  58. package/esm2022/organisms/filters-section/filters-section.organism.mjs +5 -5
  59. package/esm2022/organisms/graphql-editor/graphql-editor.organism.mjs +1 -1
  60. package/esm2022/organisms/grid-cards-section/grid-cards-section.organism.mjs +2 -2
  61. package/esm2022/organisms/heading/heading.organism.mjs +2 -2
  62. package/esm2022/{sheets/actions → organisms/list}/index.mjs +2 -2
  63. package/esm2022/organisms/list/list.organism.mjs +161 -0
  64. package/esm2022/{sheets/actions/ng-atomic-components-sheets-actions.mjs → organisms/list/ng-atomic-components-organisms-list.mjs} +1 -1
  65. package/esm2022/organisms/menu-footer/menu-footer.organism.mjs +2 -2
  66. package/esm2022/organisms/menu-header/menu-header.organism.mjs +2 -2
  67. package/esm2022/organisms/mermaid-section/mermaid-section.organism.mjs +39 -33
  68. package/esm2022/organisms/messages-section/messages-section.organism.mjs +2 -2
  69. package/esm2022/organisms/navigation-list/navigation-list.organism.mjs +2 -2
  70. package/esm2022/organisms/navigator/navigator.organism.mjs +48 -29
  71. package/esm2022/organisms/number-input-section/number-input-section.organism.mjs +2 -2
  72. package/esm2022/organisms/organisms.module.mjs +67 -62
  73. package/esm2022/organisms/paginator/paginator.organism.mjs +2 -2
  74. package/esm2022/organisms/password-input-section/password-input-section.organism.mjs +2 -2
  75. package/esm2022/organisms/select-input-section/select-input-section.organism.mjs +4 -4
  76. package/esm2022/organisms/selection-list/selection-list.organism.mjs +1 -1
  77. package/esm2022/organisms/slider-input-section/slider-input-section.organism.mjs +4 -4
  78. package/esm2022/organisms/social-login-section/social-login-section.organism.mjs +2 -2
  79. package/esm2022/organisms/table/index.mjs +2 -1
  80. package/esm2022/organisms/table/table.helpers.mjs +4 -4
  81. package/esm2022/organisms/table/table.organism.mjs +152 -141
  82. package/esm2022/organisms/text-input-section/text-input-section.organism.mjs +4 -4
  83. package/esm2022/organisms/textarea-section/textarea-section.organism.mjs +2 -2
  84. package/esm2022/organisms/thread-messages-section/thread-messages-section.organism.mjs +2 -2
  85. package/esm2022/organisms/tree-list/index.mjs +2 -0
  86. package/esm2022/organisms/tree-list/ng-atomic-components-organisms-tree-list.mjs +5 -0
  87. package/esm2022/organisms/tree-list/tree-list.organism.mjs +125 -0
  88. package/esm2022/pages/_index/index.page.mjs +172 -70
  89. package/esm2022/pages/columns/columns.page.mjs +10 -9
  90. package/esm2022/pages/form/form.page.mjs +32 -15
  91. package/esm2022/pages/pages.module.mjs +10 -7
  92. package/esm2022/pages/terms/terms.page.mjs +2 -2
  93. package/esm2022/templates/_index/index.template.mjs +276 -155
  94. package/esm2022/templates/background/background.template.mjs +2 -2
  95. package/esm2022/templates/code-editor/code-editor.template.mjs +52 -15
  96. package/esm2022/templates/columns/columns.template.mjs +6 -4
  97. package/esm2022/templates/entrance/entrance.template.mjs +28 -25
  98. package/esm2022/templates/form/form.builder.mjs +93 -71
  99. package/esm2022/templates/form/form.template.mjs +47 -28
  100. package/esm2022/templates/icon-button-menu/icon-button-menu.template.mjs +69 -16
  101. package/esm2022/templates/menu/menu.template.mjs +2 -2
  102. package/esm2022/templates/messages/messages.template.mjs +71 -65
  103. package/esm2022/templates/selection/selection.template.mjs +2 -2
  104. package/esm2022/templates/settings/settings.template.mjs +2 -2
  105. package/esm2022/templates/templates.module.mjs +17 -25
  106. package/extras/editor/editor.component.d.ts +19 -10
  107. package/fesm2022/ng-atomic-components-atoms-icon.mjs +2 -2
  108. package/fesm2022/ng-atomic-components-atoms-smart-menu-button.mjs +90 -123
  109. package/fesm2022/ng-atomic-components-atoms-smart-menu-button.mjs.map +1 -1
  110. package/fesm2022/ng-atomic-components-atoms.mjs +7 -2
  111. package/fesm2022/ng-atomic-components-atoms.mjs.map +1 -1
  112. package/fesm2022/ng-atomic-components-extras-editor.mjs +79 -47
  113. package/fesm2022/ng-atomic-components-extras-editor.mjs.map +1 -1
  114. package/fesm2022/ng-atomic-components-frames-app.mjs +131 -69
  115. package/fesm2022/ng-atomic-components-frames-app.mjs.map +1 -1
  116. package/fesm2022/ng-atomic-components-frames-auto-layout.mjs +29 -7
  117. package/fesm2022/ng-atomic-components-frames-auto-layout.mjs.map +1 -1
  118. package/fesm2022/ng-atomic-components-frames-columns.mjs +2 -2
  119. package/fesm2022/ng-atomic-components-frames-divider.mjs +2 -2
  120. package/fesm2022/ng-atomic-components-frames-drawer.mjs +2 -2
  121. package/fesm2022/ng-atomic-components-frames-entrance.mjs +2 -2
  122. package/fesm2022/ng-atomic-components-frames-fab.mjs +2 -2
  123. package/fesm2022/ng-atomic-components-frames-line-up.mjs +4 -8
  124. package/fesm2022/ng-atomic-components-frames-line-up.mjs.map +1 -1
  125. package/fesm2022/ng-atomic-components-frames-loading.mjs +2 -2
  126. package/fesm2022/ng-atomic-components-frames-progress-bar.mjs +60 -0
  127. package/fesm2022/ng-atomic-components-frames-progress-bar.mjs.map +1 -0
  128. package/fesm2022/ng-atomic-components-frames-router-outlet.mjs +96 -41
  129. package/fesm2022/ng-atomic-components-frames-router-outlet.mjs.map +1 -1
  130. package/fesm2022/ng-atomic-components-frames-scroll-v2.mjs +1 -48
  131. package/fesm2022/ng-atomic-components-frames-scroll-v2.mjs.map +1 -1
  132. package/fesm2022/ng-atomic-components-frames-scroll.mjs +31 -13
  133. package/fesm2022/ng-atomic-components-frames-scroll.mjs.map +1 -1
  134. package/fesm2022/ng-atomic-components-frames-side-app.mjs +81 -0
  135. package/fesm2022/ng-atomic-components-frames-side-app.mjs.map +1 -0
  136. package/fesm2022/ng-atomic-components-frames-side-nav.mjs +26 -20
  137. package/fesm2022/ng-atomic-components-frames-side-nav.mjs.map +1 -1
  138. package/fesm2022/ng-atomic-components-frames-smart-menu.mjs +2 -2
  139. package/fesm2022/ng-atomic-components-frames-tabs.mjs +12 -6
  140. package/fesm2022/ng-atomic-components-frames-tabs.mjs.map +1 -1
  141. package/fesm2022/ng-atomic-components-frames-vertical-hide.mjs +10 -17
  142. package/fesm2022/ng-atomic-components-frames-vertical-hide.mjs.map +1 -1
  143. package/fesm2022/ng-atomic-components-frames.mjs +19 -14
  144. package/fesm2022/ng-atomic-components-frames.mjs.map +1 -1
  145. package/fesm2022/ng-atomic-components-molecules-action-input-field.mjs +1 -1
  146. package/fesm2022/ng-atomic-components-molecules-action-input-field.mjs.map +1 -1
  147. package/fesm2022/ng-atomic-components-molecules-actions-column.mjs +12 -6
  148. package/fesm2022/ng-atomic-components-molecules-actions-column.mjs.map +1 -1
  149. package/fesm2022/ng-atomic-components-molecules-checkbox-column.mjs +47 -21
  150. package/fesm2022/ng-atomic-components-molecules-checkbox-column.mjs.map +1 -1
  151. package/fesm2022/ng-atomic-components-molecules-date-input-field.mjs +2 -2
  152. package/fesm2022/ng-atomic-components-molecules-date-range-input-field.mjs +2 -2
  153. package/fesm2022/ng-atomic-components-molecules-file-input-field.mjs +1 -1
  154. package/fesm2022/ng-atomic-components-molecules-file-input-field.mjs.map +1 -1
  155. package/fesm2022/ng-atomic-components-molecules-grid-item.mjs +2 -2
  156. package/fesm2022/ng-atomic-components-molecules-list-item.mjs +203 -0
  157. package/fesm2022/ng-atomic-components-molecules-list-item.mjs.map +1 -0
  158. package/fesm2022/ng-atomic-components-molecules-loading-box.mjs +2 -2
  159. package/fesm2022/ng-atomic-components-molecules-navigation-list-item.mjs +2 -2
  160. package/fesm2022/ng-atomic-components-molecules-select-input-field.mjs +8 -4
  161. package/fesm2022/ng-atomic-components-molecules-select-input-field.mjs.map +1 -1
  162. package/fesm2022/ng-atomic-components-molecules-smart-column.mjs +128 -43
  163. package/fesm2022/ng-atomic-components-molecules-smart-column.mjs.map +1 -1
  164. package/fesm2022/ng-atomic-components-molecules-tree-column.mjs +36 -24
  165. package/fesm2022/ng-atomic-components-molecules-tree-column.mjs.map +1 -1
  166. package/fesm2022/ng-atomic-components-molecules.mjs +19 -14
  167. package/fesm2022/ng-atomic-components-molecules.mjs.map +1 -1
  168. package/fesm2022/ng-atomic-components-organisms-action-buttons-section.mjs +2 -2
  169. package/fesm2022/ng-atomic-components-organisms-action-input-section.mjs +2 -2
  170. package/fesm2022/ng-atomic-components-organisms-agreement-input-section.mjs +2 -2
  171. package/fesm2022/ng-atomic-components-organisms-agreement-input-section.mjs.map +1 -1
  172. package/fesm2022/ng-atomic-components-organisms-card-input-section.mjs +2 -2
  173. package/fesm2022/ng-atomic-components-organisms-cvc-and-exp-input-section.mjs +2 -2
  174. package/fesm2022/ng-atomic-components-organisms-date-input-section.mjs +3 -3
  175. package/fesm2022/ng-atomic-components-organisms-date-input-section.mjs.map +1 -1
  176. package/fesm2022/ng-atomic-components-organisms-date-range-input-section.mjs +3 -3
  177. package/fesm2022/ng-atomic-components-organisms-date-range-input-section.mjs.map +1 -1
  178. package/fesm2022/ng-atomic-components-organisms-definition-list.mjs +2 -2
  179. package/fesm2022/ng-atomic-components-organisms-file-input-section.mjs +2 -2
  180. package/fesm2022/ng-atomic-components-organisms-filters-section.mjs +4 -4
  181. package/fesm2022/ng-atomic-components-organisms-filters-section.mjs.map +1 -1
  182. package/fesm2022/ng-atomic-components-organisms-graphql-editor.mjs +1 -1
  183. package/fesm2022/ng-atomic-components-organisms-graphql-editor.mjs.map +1 -1
  184. package/fesm2022/ng-atomic-components-organisms-grid-cards-section.mjs +2 -2
  185. package/fesm2022/ng-atomic-components-organisms-heading.mjs +2 -2
  186. package/fesm2022/ng-atomic-components-organisms-list.mjs +166 -0
  187. package/fesm2022/ng-atomic-components-organisms-list.mjs.map +1 -0
  188. package/fesm2022/ng-atomic-components-organisms-menu-footer.mjs +2 -2
  189. package/fesm2022/ng-atomic-components-organisms-menu-header.mjs +2 -2
  190. package/fesm2022/ng-atomic-components-organisms-mermaid-section.mjs +38 -32
  191. package/fesm2022/ng-atomic-components-organisms-mermaid-section.mjs.map +1 -1
  192. package/fesm2022/ng-atomic-components-organisms-messages-section.mjs +2 -2
  193. package/fesm2022/ng-atomic-components-organisms-navigation-list.mjs +2 -2
  194. package/fesm2022/ng-atomic-components-organisms-navigator.mjs +47 -28
  195. package/fesm2022/ng-atomic-components-organisms-navigator.mjs.map +1 -1
  196. package/fesm2022/ng-atomic-components-organisms-number-input-section.mjs +2 -2
  197. package/fesm2022/ng-atomic-components-organisms-number-input-section.mjs.map +1 -1
  198. package/fesm2022/ng-atomic-components-organisms-paginator.mjs +2 -2
  199. package/fesm2022/ng-atomic-components-organisms-password-input-section.mjs +2 -2
  200. package/fesm2022/ng-atomic-components-organisms-password-input-section.mjs.map +1 -1
  201. package/fesm2022/ng-atomic-components-organisms-select-input-section.mjs +3 -3
  202. package/fesm2022/ng-atomic-components-organisms-select-input-section.mjs.map +1 -1
  203. package/fesm2022/ng-atomic-components-organisms-selection-list.mjs +1 -1
  204. package/fesm2022/ng-atomic-components-organisms-selection-list.mjs.map +1 -1
  205. package/fesm2022/ng-atomic-components-organisms-slider-input-section.mjs +3 -3
  206. package/fesm2022/ng-atomic-components-organisms-slider-input-section.mjs.map +1 -1
  207. package/fesm2022/ng-atomic-components-organisms-social-login-section.mjs +2 -2
  208. package/fesm2022/ng-atomic-components-organisms-table.mjs +156 -145
  209. package/fesm2022/ng-atomic-components-organisms-table.mjs.map +1 -1
  210. package/fesm2022/ng-atomic-components-organisms-text-input-section.mjs +3 -3
  211. package/fesm2022/ng-atomic-components-organisms-text-input-section.mjs.map +1 -1
  212. package/fesm2022/ng-atomic-components-organisms-textarea-section.mjs +2 -2
  213. package/fesm2022/ng-atomic-components-organisms-textarea-section.mjs.map +1 -1
  214. package/fesm2022/ng-atomic-components-organisms-thread-messages-section.mjs +2 -2
  215. package/fesm2022/ng-atomic-components-organisms-tree-list.mjs +132 -0
  216. package/fesm2022/ng-atomic-components-organisms-tree-list.mjs.map +1 -0
  217. package/fesm2022/ng-atomic-components-organisms.mjs +67 -62
  218. package/fesm2022/ng-atomic-components-organisms.mjs.map +1 -1
  219. package/fesm2022/ng-atomic-components-pages-_index.mjs +171 -70
  220. package/fesm2022/ng-atomic-components-pages-_index.mjs.map +1 -1
  221. package/fesm2022/ng-atomic-components-pages-columns.mjs +9 -8
  222. package/fesm2022/ng-atomic-components-pages-columns.mjs.map +1 -1
  223. package/fesm2022/ng-atomic-components-pages-form.mjs +31 -14
  224. package/fesm2022/ng-atomic-components-pages-form.mjs.map +1 -1
  225. package/fesm2022/ng-atomic-components-pages-terms.mjs +1 -1
  226. package/fesm2022/ng-atomic-components-pages-terms.mjs.map +1 -1
  227. package/fesm2022/ng-atomic-components-pages.mjs +10 -7
  228. package/fesm2022/ng-atomic-components-pages.mjs.map +1 -1
  229. package/fesm2022/ng-atomic-components-templates-_index.mjs +276 -155
  230. package/fesm2022/ng-atomic-components-templates-_index.mjs.map +1 -1
  231. package/fesm2022/ng-atomic-components-templates-background.mjs +2 -2
  232. package/fesm2022/ng-atomic-components-templates-code-editor.mjs +51 -14
  233. package/fesm2022/ng-atomic-components-templates-code-editor.mjs.map +1 -1
  234. package/fesm2022/ng-atomic-components-templates-columns.mjs +5 -3
  235. package/fesm2022/ng-atomic-components-templates-columns.mjs.map +1 -1
  236. package/fesm2022/ng-atomic-components-templates-entrance.mjs +27 -24
  237. package/fesm2022/ng-atomic-components-templates-entrance.mjs.map +1 -1
  238. package/fesm2022/ng-atomic-components-templates-form.mjs +139 -99
  239. package/fesm2022/ng-atomic-components-templates-form.mjs.map +1 -1
  240. package/fesm2022/ng-atomic-components-templates-icon-button-menu.mjs +68 -15
  241. package/fesm2022/ng-atomic-components-templates-icon-button-menu.mjs.map +1 -1
  242. package/fesm2022/ng-atomic-components-templates-menu.mjs +2 -2
  243. package/fesm2022/ng-atomic-components-templates-messages.mjs +71 -65
  244. package/fesm2022/ng-atomic-components-templates-messages.mjs.map +1 -1
  245. package/fesm2022/ng-atomic-components-templates-selection.mjs +2 -2
  246. package/fesm2022/ng-atomic-components-templates-settings.mjs +2 -2
  247. package/fesm2022/ng-atomic-components-templates.mjs +17 -25
  248. package/fesm2022/ng-atomic-components-templates.mjs.map +1 -1
  249. package/fesm2022/ng-atomic-components.mjs +20 -41
  250. package/fesm2022/ng-atomic-components.mjs.map +1 -1
  251. package/frames/app/app.frame.d.ts +14 -1
  252. package/frames/auto-layout/auto-layout.frame.d.ts +7 -1
  253. package/frames/frames.module.d.ts +3 -20
  254. package/frames/progress-bar/index.d.ts +1 -0
  255. package/frames/progress-bar/progress-bar.frame.d.ts +14 -0
  256. package/frames/router-outlet/router-outlet.frame.d.ts +20 -9
  257. package/frames/scroll/scroll.frame.d.ts +5 -1
  258. package/frames/scroll-v2/index.d.ts +1 -1
  259. package/frames/side-app/index.d.ts +1 -0
  260. package/frames/side-app/side-app.frame.d.ts +20 -0
  261. package/frames/side-nav/side-nav.frame.d.ts +6 -2
  262. package/frames/tabs/tabs.frame.d.ts +2 -1
  263. package/frames/vertical-hide/vertical-hide.frame.d.ts +2 -2
  264. package/molecules/actions-column/actions-column.molecule.d.ts +3 -2
  265. package/molecules/checkbox-column/checkbox-column.molecule.d.ts +12 -4
  266. package/molecules/list-item/index.d.ts +1 -0
  267. package/molecules/list-item/list-item.molecule.d.ts +50 -0
  268. package/molecules/molecules.module.d.ts +25 -0
  269. package/molecules/smart-column/smart-column.molecule.d.ts +34 -9
  270. package/molecules/tree-column/tree-column.molecule.d.ts +6 -2
  271. package/organisms/list/index.d.ts +1 -0
  272. package/organisms/{smart-list/smart-list.organism.d.ts → list/list.organism.d.ts} +11 -11
  273. package/organisms/mermaid-section/mermaid-section.organism.d.ts +10 -10
  274. package/organisms/navigator/navigator.organism.d.ts +8 -5
  275. package/organisms/organisms.module.d.ts +57 -2
  276. package/organisms/table/index.d.ts +1 -0
  277. package/organisms/table/table.helpers.d.ts +1 -1
  278. package/organisms/table/table.organism.d.ts +32 -1
  279. package/organisms/tree-list/index.d.ts +1 -0
  280. package/organisms/tree-list/tree-list.organism.d.ts +33 -0
  281. package/package.json +67 -55
  282. package/pages/_index/index.page.d.ts +72 -43
  283. package/pages/columns/columns.page.d.ts +5 -2
  284. package/pages/form/form.page.d.ts +20 -11
  285. package/pages/pages.module.d.ts +1 -0
  286. package/templates/_index/index.template.d.ts +40 -11
  287. package/templates/code-editor/code-editor.template.d.ts +6 -3
  288. package/templates/entrance/entrance.template.d.ts +1 -1
  289. package/templates/form/form.builder.d.ts +10 -3
  290. package/templates/form/form.template.d.ts +2 -1
  291. package/templates/icon-button-menu/icon-button-menu.template.d.ts +3 -2
  292. package/templates/messages/messages.template.d.ts +21 -17
  293. package/templates/templates.module.d.ts +24 -1
  294. package/esm2022/frames/scroll-v2/scroll.frame.mjs +0 -46
  295. package/esm2022/organisms/smart-list/index.mjs +0 -2
  296. package/esm2022/organisms/smart-list/ng-atomic-components-organisms-smart-list.mjs +0 -5
  297. package/esm2022/organisms/smart-list/smart-list.organism.mjs +0 -218
  298. package/esm2022/sheets/actions/actions.sheet.mjs +0 -45
  299. package/esm2022/sheets/index.mjs +0 -3
  300. package/esm2022/sheets/ng-atomic-components-sheets.mjs +0 -5
  301. package/esm2022/sheets/sheets.module.mjs +0 -25
  302. package/esm2022/sheets/sheets.service.mjs +0 -20
  303. package/fesm2022/ng-atomic-components-organisms-smart-list.mjs +0 -223
  304. package/fesm2022/ng-atomic-components-organisms-smart-list.mjs.map +0 -1
  305. package/fesm2022/ng-atomic-components-sheets-actions.mjs +0 -52
  306. package/fesm2022/ng-atomic-components-sheets-actions.mjs.map +0 -1
  307. package/fesm2022/ng-atomic-components-sheets.mjs +0 -48
  308. package/fesm2022/ng-atomic-components-sheets.mjs.map +0 -1
  309. package/frames/scroll-v2/scroll.frame.d.ts +0 -9
  310. package/organisms/smart-list/index.d.ts +0 -1
  311. package/sheets/actions/actions.sheet.d.ts +0 -9
  312. package/sheets/actions/index.d.ts +0 -1
  313. package/sheets/index.d.ts +0 -2
  314. package/sheets/sheets.module.d.ts +0 -11
  315. 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,43 +178,57 @@ 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(() => {
137
185
  const value = formValue();
138
186
  const itemsMapper = (items) => {
139
- // const filterFuncs = store.filterFuncs();
140
- // console.debug('filterFuncs:', filterFuncs);
141
- // for (const func of filterFuncs ?? []) {
142
- // console.debug('items:', items);
143
- // items = items.filter(func);
144
- // console.debug('filteredItems:', items);
145
- // }
146
- return indexPipe.transform(items, value);
187
+ const filterFunc = store.filterFunc();
188
+ return indexPipe.transform(items.filter(filterFunc), value);
147
189
  };
148
190
  applyToInput(store, 'itemsMapper', itemsMapper);
149
191
  }, { allowSignalWrites: true });
150
192
  }),
151
193
  ];
152
194
  }
195
+ static provideColumnsInitializer(useFactory) {
196
+ return [
197
+ IndexPageStore_1.Initializer.provide((store) => {
198
+ const columns = useFactory();
199
+ const form = injectIndexForm({ columns: buildColumns(columns) });
200
+ applyToInput(store, 'form', form);
201
+ }),
202
+ ];
203
+ }
204
+ static provideItemsInitializer(itemsFactory) {
205
+ return [
206
+ IndexPageStore_1.Initializer.provide((store) => {
207
+ effect(() => {
208
+ const items = itemsFactory();
209
+ applyToInput(store, 'items', items);
210
+ console.debug('items:', items);
211
+ }, { allowSignalWrites: true });
212
+ }),
213
+ ];
214
+ }
153
215
  static provideDefaultInitializer() {
154
216
  return [
155
- IndexPageStore.provideFormInitializer(),
156
- IndexPageStore.provideFormValueStorageInitializer(),
157
- IndexPageStore.provideItemsLengthInitializer(),
158
- IndexPageStore.provideItemsMapperInitializer(),
217
+ IndexPageStore_1.provideFormInitializer(),
218
+ IndexPageStore_1.provideFormValueStorageInitializer(),
219
+ IndexPageStore_1.provideItemsLengthInitializer(),
220
+ IndexPageStore_1.provideItemsMapperInitializer(),
159
221
  ];
160
222
  }
161
223
  static provideBackEffect() {
162
- return provideEffect(IndexPageStore.ActionId.BACK, () => {
224
+ return provideEffect(IndexPageStore_1.ActionId.BACK, () => {
163
225
  return () => history.back();
164
226
  });
165
227
  }
166
228
  static provideDetailEffect() {
167
- return provideEffect(IndexPageStore.ActionId.DETAIL, () => {
229
+ return provideEffect(IndexPageStore_1.ActionId.DETAIL, () => {
168
230
  const app = inject(AppService);
169
- const store = inject(IndexPageStore);
231
+ const store = inject(IndexPageStore_1);
170
232
  const hasNext = injectHasNext();
171
233
  return (item) => {
172
234
  app.router.navigate([item.id], {
@@ -177,7 +239,7 @@ export class IndexPageStore extends InjectableComponent {
177
239
  });
178
240
  }
179
241
  static provideAddEffect() {
180
- return provideEffect(IndexPageStore.ActionId.ADD, () => {
242
+ return provideEffect(IndexPageStore_1.ActionId.ADD, () => {
181
243
  const app = inject(AppService);
182
244
  const hasNext = injectHasNext();
183
245
  const route = inject(ActivatedRoute);
@@ -191,7 +253,7 @@ export class IndexPageStore extends InjectableComponent {
191
253
  }
192
254
  static provideCheckboxClickEffect() {
193
255
  return provideEffect(IndexTemplate.ActionId.TABLE_CHECKBOX_CLICK, () => {
194
- const store = inject(IndexPageStore);
256
+ const store = inject(IndexPageStore_1);
195
257
  return (item) => {
196
258
  store.selection().toggle(item.id);
197
259
  };
@@ -199,7 +261,7 @@ export class IndexPageStore extends InjectableComponent {
199
261
  }
200
262
  static provideTableHeaderClickEffect() {
201
263
  return provideEffect(IndexTemplate.ActionId.TABLE_HEADER_CLICK, () => {
202
- const store = inject(IndexPageStore);
264
+ const store = inject(IndexPageStore_1);
203
265
  return (key) => {
204
266
  const sort = store.form().get(['sort']).value;
205
267
  const order = key === sort.key && sort.order === 'asc' ? 'desc' : 'asc';
@@ -214,43 +276,49 @@ export class IndexPageStore extends InjectableComponent {
214
276
  });
215
277
  }
216
278
  static provideHeaderCheckboxClickEffect() {
217
- return provideEffect(IndexPageStore.ActionId.HEADER_CHECKBOX_CLICK, () => {
218
- const store = inject(IndexPageStore);
279
+ return provideEffect(IndexPageStore_1.ActionId.HEADER_CHECKBOX_CLICK, () => {
280
+ const store = inject(IndexPageStore_1);
219
281
  return () => {
220
- if (store.isAllSelected()) {
221
- store.selection().clear();
222
- }
223
- else {
224
- store.displayedItems().forEach(entry => store.selection().select(entry.id));
225
- }
282
+ const selection = toggleAllSelection(store.selection(), store.displayedItems());
283
+ applyToInput(store, 'selection', selection);
226
284
  };
227
285
  });
228
286
  }
229
287
  static provideDefaultEffects() {
230
288
  return [
231
- IndexPageStore.provideDetailEffect(),
232
- IndexPageStore.provideAddEffect(),
233
- IndexPageStore.provideBackEffect(),
234
- IndexPageStore.provideHeaderCheckboxClickEffect(),
235
- IndexPageStore.provideCheckboxClickEffect(),
236
- IndexPageStore.provideTableHeaderClickEffect(),
237
- IndexPageStore.provideSideNavEffects(),
289
+ IndexPageStore_1.provideDetailEffect(),
290
+ IndexPageStore_1.provideAddEffect(),
291
+ IndexPageStore_1.provideBackEffect(),
292
+ IndexPageStore_1.provideHeaderCheckboxClickEffect(),
293
+ IndexPageStore_1.provideCheckboxClickEffect(),
294
+ IndexPageStore_1.provideTableHeaderClickEffect(),
295
+ IndexPageStore_1.provideSideNavEffects(),
296
+ ];
297
+ }
298
+ static provideDefaultConfig() {
299
+ return [
300
+ IndexPageStore_1.Config.provide(),
301
+ IndexPageStore_1.provideItemActionsConfig(),
302
+ IndexPageStore_1.provideTypeConfig(),
238
303
  ];
239
304
  }
240
305
  static provideDefault() {
241
306
  return [
242
- IndexPageStore.Config.provide(),
243
- IndexPageStore.provideTypeConfig(),
244
- IndexPageStore.provideDefaultInitializer(),
245
- IndexPageStore.provideDefaultEffects(),
307
+ IndexPageStore_1.provideDefaultConfig(),
308
+ IndexPageStore_1.provideDefaultInitializer(),
309
+ IndexPageStore_1.provideDefaultEffects(),
246
310
  ];
247
311
  }
248
312
  constructor() {
249
313
  super();
250
- this.config = IndexPageStore.Config.inject();
314
+ this.config = IndexPageStore_1.Config.inject();
315
+ this.style = input(_computed(() => this.config().style));
251
316
  this.route = inject(ActivatedRoute);
317
+ this.groupedBy = input(_computed(() => this.config().groupedBy));
318
+ this.groupKeys = input(_computed(() => this.config().groupKeys));
252
319
  this.type = input(_computed(() => this.config().type));
253
320
  this.items = input(_computed(() => this.config().items));
321
+ this.itemsMap = input(_computed(() => convertToItemsMap(this.displayedItems())));
254
322
  this.itemActions = input(_computed(() => this.config().itemActions));
255
323
  this.title = input(_computed(() => this.config().title));
256
324
  this.form = input(_computed(() => this.config().form));
@@ -270,15 +338,24 @@ export class IndexPageStore extends InjectableComponent {
270
338
  return itemsMapper ? itemsMapper(items) : items;
271
339
  });
272
340
  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)));
341
+ this.selected = computed(() => (this.items() ?? []).filter(entry => this.selectedIds().includes(entry.id)));
274
342
  this.isAllSelected = computed(() => {
275
343
  return this.displayedItems().every(entry => this.selectedIds().includes(entry.id));
276
344
  });
277
- IndexPageStore.Initializer.initializeStore(this);
345
+ this.skip = injectRouteSkip();
346
+ IndexPageStore_1.Initializer.initializeStore(this);
347
+ effect(() => {
348
+ console.debug('itemsMap:', this.itemsMap());
349
+ });
278
350
  }
279
351
  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
- }
352
+ 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 }); }
353
+ };
354
+ IndexPageStore = IndexPageStore_1 = __decorate([
355
+ TokenizedType(),
356
+ __metadata("design:paramtypes", [])
357
+ ], IndexPageStore);
358
+ export { IndexPageStore };
282
359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPageStore, decorators: [{
283
360
  type: Directive,
284
361
  args: [{ standalone: true }]
@@ -288,6 +365,7 @@ export class IndexPage extends NgAtomicComponent {
288
365
  super(...arguments);
289
366
  this.store = inject(IndexPageStore);
290
367
  this.router = inject(Router);
368
+ this.sheet = inject(SheetService);
291
369
  }
292
370
  back() {
293
371
  this.dispatch({ id: IndexPageStore.ActionId.BACK });
@@ -301,17 +379,30 @@ export class IndexPage extends NgAtomicComponent {
301
379
  onCheckboxClick(item) {
302
380
  this.dispatch({ id: IndexPageStore.ActionId.HEADER_CHECKBOX_CLICK, payload: item });
303
381
  }
382
+ // MEMO(@nontangent): シートのアクションをページに持たせるべきかは要検討。
383
+ onItemButtonClicked(item) {
384
+ const actions = resolveActions(this.store.itemActions(), item);
385
+ this.sheet.openActions(actions).then((action) => {
386
+ this.dispatch({
387
+ id: action.id,
388
+ payload: action.payload,
389
+ });
390
+ });
391
+ }
304
392
  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>
393
+ 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: `
394
+ <frames-router-outlet [skip]="store.skip()">
307
395
  <templates-index
308
- [style.width]="store.config().style.width"
396
+ [style]="store.style()"
309
397
  [title]="store.title()"
310
398
  [type]="store.type()"
311
399
  [tableChildrenKey]="store.tableChildrenKey()"
312
400
  [items]="store.displayedItems()"
401
+ [itemsMap]="store.itemsMap()"
313
402
  [itemsLength]="store.itemsLength()"
314
403
  [itemActions]="store.itemActions()"
404
+ [groupedBy]="store.groupedBy()"
405
+ [groupKeys]="store.groupKeys()"
315
406
  [form]="store.form()"
316
407
  [selection]="store.selection()"
317
408
  [highlight]="store.highlight()"
@@ -320,7 +411,7 @@ export class IndexPage extends NgAtomicComponent {
320
411
  (action)="dispatch($event)"
321
412
  />
322
413
  </frames-router-outlet>
323
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-2B1W: var(--page-width-lv3);--primary-color-SCOPED-IN-index-2B1W: var(--primary-color);--on-primary-color-SCOPED-IN-index-2B1W: var(--on-primary-color);--surface-color-SCOPED-IN-index-2B1W: var(--surface-color);--on-surface-color-SCOPED-IN-index-2B1W: var(--on-surface-color);--on-background-color-SCOPED-IN-index-2B1W: var(--on-background-color);--background-color-SCOPED-IN-index-2B1W: var(--background-color);--navigator-background-color-SCOPED-IN-index-2B1W: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-2B1W: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-2B1W: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-2B1W: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-2B1W)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-2B1W);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-2B1W);--surface-color: var(--surface-color-SCOPED-IN-index-2B1W);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-2B1W);--background-color: var(--background-color-SCOPED-IN-index-2B1W);--on-background-color: var(--on-background-color-SCOPED-IN-index-2B1W);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-2B1W);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-2B1W);--table-background-color: var(--table-background-color-SCOPED-IN-index-2B1W);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-2B1W)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet" }, { kind: "component", type: IndexTemplate, selector: "templates-index" }] }); }
414
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-YFQt: var(--page-width-lv3);--primary-color-SCOPED-IN-index-YFQt: var(--primary-color);--on-primary-color-SCOPED-IN-index-YFQt: var(--on-primary-color);--surface-color-SCOPED-IN-index-YFQt: var(--surface-color);--on-surface-color-SCOPED-IN-index-YFQt: var(--on-surface-color);--on-background-color-SCOPED-IN-index-YFQt: var(--on-background-color);--background-color-SCOPED-IN-index-YFQt: var(--background-color);--navigator-background-color-SCOPED-IN-index-YFQt: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-YFQt: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-YFQt: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-YFQt: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-YFQt)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-YFQt);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-YFQt);--surface-color: var(--surface-color-SCOPED-IN-index-YFQt);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-YFQt);--background-color: var(--background-color-SCOPED-IN-index-YFQt);--on-background-color: var(--on-background-color-SCOPED-IN-index-YFQt);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-YFQt);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-YFQt);--table-background-color: var(--table-background-color-SCOPED-IN-index-YFQt);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-YFQt)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: IndexTemplate, selector: "templates-index" }] }); }
324
415
  }
325
416
  __decorate([
326
417
  Effect(IndexTemplate.ActionId.BACK),
@@ -346,22 +437,30 @@ __decorate([
346
437
  __metadata("design:paramtypes", [Object]),
347
438
  __metadata("design:returntype", void 0)
348
439
  ], IndexPage.prototype, "onCheckboxClick", null);
440
+ __decorate([
441
+ Effect(IndexTemplate.ActionId.LIST_ITEM_BUTTON_CLICKED),
442
+ __metadata("design:type", Function),
443
+ __metadata("design:paramtypes", [Object]),
444
+ __metadata("design:returntype", void 0)
445
+ ], IndexPage.prototype, "onItemButtonClicked", null);
349
446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: IndexPage, decorators: [{
350
447
  type: Component,
351
448
  args: [{ selector: 'pages-index', standalone: true, imports: [
352
449
  RouterOutletFrame,
353
450
  IndexTemplate,
354
- IndexLengthPipe,
355
451
  ], template: `
356
- <frames-router-outlet>
452
+ <frames-router-outlet [skip]="store.skip()">
357
453
  <templates-index
358
- [style.width]="store.config().style.width"
454
+ [style]="store.style()"
359
455
  [title]="store.title()"
360
456
  [type]="store.type()"
361
457
  [tableChildrenKey]="store.tableChildrenKey()"
362
458
  [items]="store.displayedItems()"
459
+ [itemsMap]="store.itemsMap()"
363
460
  [itemsLength]="store.itemsLength()"
364
461
  [itemActions]="store.itemActions()"
462
+ [groupedBy]="store.groupedBy()"
463
+ [groupKeys]="store.groupKeys()"
365
464
  [form]="store.form()"
366
465
  [selection]="store.selection()"
367
466
  [highlight]="store.highlight()"
@@ -373,8 +472,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
373
472
  `, hostDirectives: [
374
473
  {
375
474
  directive: IndexPageStore,
376
- inputs: ['items'],
475
+ inputs: [
476
+ 'items',
477
+ 'itemsMap',
478
+ ],
377
479
  },
378
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-2B1W: var(--page-width-lv3);--primary-color-SCOPED-IN-index-2B1W: var(--primary-color);--on-primary-color-SCOPED-IN-index-2B1W: var(--on-primary-color);--surface-color-SCOPED-IN-index-2B1W: var(--surface-color);--on-surface-color-SCOPED-IN-index-2B1W: var(--on-surface-color);--on-background-color-SCOPED-IN-index-2B1W: var(--on-background-color);--background-color-SCOPED-IN-index-2B1W: var(--background-color);--navigator-background-color-SCOPED-IN-index-2B1W: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-2B1W: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-2B1W: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-2B1W: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-2B1W)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-2B1W);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-2B1W);--surface-color: var(--surface-color-SCOPED-IN-index-2B1W);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-2B1W);--background-color: var(--background-color-SCOPED-IN-index-2B1W);--on-background-color: var(--on-background-color-SCOPED-IN-index-2B1W);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-2B1W);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-2B1W);--table-background-color: var(--table-background-color-SCOPED-IN-index-2B1W);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-2B1W)}\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
480
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv3-SCOPED-IN-index-YFQt: var(--page-width-lv3);--primary-color-SCOPED-IN-index-YFQt: var(--primary-color);--on-primary-color-SCOPED-IN-index-YFQt: var(--on-primary-color);--surface-color-SCOPED-IN-index-YFQt: var(--surface-color);--on-surface-color-SCOPED-IN-index-YFQt: var(--on-surface-color);--on-background-color-SCOPED-IN-index-YFQt: var(--on-background-color);--background-color-SCOPED-IN-index-YFQt: var(--background-color);--navigator-background-color-SCOPED-IN-index-YFQt: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-index-YFQt: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-index-YFQt: var(--table-background-color);--table-on-background-color-SCOPED-IN-index-YFQt: var(--table-on-background-color)}:host .template{width:var(--page-width-lv3-SCOPED-IN-index-YFQt)}:host *{--primary-color: var(--primary-color-SCOPED-IN-index-YFQt);--on-primary-color: var(--on-primary-color-SCOPED-IN-index-YFQt);--surface-color: var(--surface-color-SCOPED-IN-index-YFQt);--on-surface-color: var(--on-surface-color-SCOPED-IN-index-YFQt);--background-color: var(--background-color-SCOPED-IN-index-YFQt);--on-background-color: var(--on-background-color-SCOPED-IN-index-YFQt);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-index-YFQt);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-index-YFQt);--table-background-color: var(--table-background-color-SCOPED-IN-index-YFQt);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-index-YFQt)}\n"] }]
481
+ }], propDecorators: { back: [], close: [], itemClick: [], onCheckboxClick: [], onItemButtonClicked: [] } });
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL19pbmRleC9pbmRleC5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBb0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBWSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBVyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pLLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUs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Ozs7Ozs7Ozs7Ozs7R0FxQlQsNnBEQXhCQyxpQkFBaUIsc0ZBQ2pCLGFBQWE7O0FBeUNMO0lBRFQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzs7O3FDQUduQztBQUdTO0lBRFQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Ozs7c0NBR3pCO0FBR1M7SUFEVCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Ozs7MENBR3pDO0FBR1M7SUFEVCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQzs7OztnREFHMUQ7QUFJUztJQURULE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDOzs7O29EQVN2RDsyRkFuQ1UsU0FBUztrQkF4Q3JCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxpQkFBaUI7d0JBQ2pCLGFBQWE7cUJBQ2QsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJULGtCQUVlO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxjQUFjOzRCQUN6QixNQUFNLEVBQUU7Z0NBQ04sT0FBTztnQ0FDUCxVQUFVOzZCQUNYO3lCQUNGO3FCQUNGOzhCQVFTLElBQUksTUFLSixLQUFLLE1BS0wsU0FBUyxNQUtULGVBQWUsTUFNZixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBQcm92aWRlciwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXRGcmFtZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9mcmFtZXMvcm91dGVyLW91dGxldCc7XG5pbXBvcnQgeyBjb252ZXJ0VG9JdGVtc01hcCwgZ2V0VHlwZSwgSW5kZXhUZW1wbGF0ZSwgSXRlbXNNYXAgfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvdGVtcGxhdGVzL19pbmRleCc7XG5pbXBvcnQgeyBpbmplY3RBbGwgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zdG9yZXMvZW50aXRpZXMnO1xuaW1wb3J0IHsgaW5qZWN0TW9kZWwsIGluamVjdE1vZGVsTmFtZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3BpcGVzL2RvbWFpbic7XG5pbXBvcnQgeyBBY3Rpb25zLCBFZmZlY3QsIEluamVjdGFibGVDb21wb25lbnQsIE5nQXRvbWljQ29tcG9uZW50LCBUb2tlbml6ZWRUeXBlLCBfY29tcHV0ZWQsIGFwcGx5VG9JbnB1dCwgcHJvdmlkZUVmZmVjdCwgcmVzb2x2ZUFjdGlvbnMgfSBmcm9tICdAbmctYXRvbWljL2NvcmUnO1xuaW1wb3J0IHsgYnVpbGRDb2x1bW5zLCBpbmplY3RJbmRleEZvcm0gfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvb3JnYW5pc21zL3RhYmxlJztcbmltcG9ydCB7IGluamVjdElzUm9vdFBhZ2UsIGluamVjdE5hdlN0YXJ0QWN0aW9ucywgaW5qZWN0U2lkZUFwcE5hdlN0YXJ0QWN0aW9ucywgbWFrZUNvbmZpZywgTmF2QWN0aW9uSWQgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zZXJ2aWNlcy91aSc7XG5pbXBvcnQgeyBpbmplY3RFbnRpdHlJZE5hbWUgfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvZm9ybSc7XG5pbXBvcnQgeyBjb21wdXRlZFJhd1ZhbHVlLCBpbmplY3RDaGlsZFJvdXRlUGFyYW0sIGluamVjdEhhc05leHQsIGluamVjdFJvdXRlU2tpcCB9IGZyb20gXCJAbmctYXRvbWljL2NvbW1vbi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL2FwcCc7XG5pbXBvcnQgeyBJbmRleFBpcGUgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9waXBlcy9pbmRleCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbXB1dGVkQXN5bmMgfSBmcm9tICduZ3h0ZW5zaW9uL2NvbXB1dGVkLWFzeW5jJztcbmltcG9ydCB7IG1ha2VJbml0aWFsaXplckNvbmZpZyB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL2luaXRpYWxpemVyJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5kZXhMZW5ndGhQaXBlIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vcGlwZXMvaW5kZXgtbGVuZ3RoJztcbmltcG9ydCB7IFNoZWV0U2VydmljZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL3NoZWV0cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RIaWdobGlnaHQoa2V5OiBzdHJpbmcpOiBTaWduYWw8U2VsZWN0aW9uTW9kZWw8c3RyaW5nPj4ge1xuICBjb25zdCBpdGVtSWQgPSBpbmplY3RDaGlsZFJvdXRlUGFyYW0oa2V5KTtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUsIGl0ZW1JZCgpID8gW2l0ZW1JZCgpXSA6IFtdKSk7XG59XG5cbnR5cGUgRmlsdGVyRnVuYyA9IChpdGVtOiB7aWQ6IHN0cmluZ30pID0+IGJvb2xlYW47XG5jb25zdCBGSUxURVJfRlVOQyA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoaW5qZWN0b3I/OiBJbmplY3RvcikgPT4gRmlsdGVyRnVuYz4oJ0ZJTFRFUl9GVU5DJyk7XG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZpbHRlckZ1bmModXNlRmFjdG9yeTogKCkgPT4gRmlsdGVyRnVuYykge1xuICBjb25zdCB3cmFwcGVkID0gKCkgPT4gKGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKSkgPT4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB1c2VGYWN0b3J5KTtcblx0cmV0dXJuIHsgcHJvdmlkZTogRklMVEVSX0ZVTkMsIHVzZUZhY3Rvcnk6IHdyYXBwZWQgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RGaWx0ZXJGdW5jKCkge1xuICByZXR1cm4gKGluamVjdChGSUxURVJfRlVOQywge29wdGlvbmFsOiB0cnVlfSkgPz8gKCgpID0+ICgpID0+IHRydWUpKSgpO1xufVxuXG5lbnVtIEFjdGlvbklkIHtcbiAgQkFDSyA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzOnBhZ2VzL2luZGV4XSBCYWNrJyxcbiAgQ0hFQ0tCT1hfQ0xJQ0sgPSAnW0BuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9pbmRleF0gQ2hlY2tib3hDbGljaycsXG4gIEhFQURFUl9DSEVDS0JPWF9DTElDSyA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBIZWFkZXJDaGVja2JveENsaWNrJyxcbiAgQUREID0gJ1tAbmctYXRvbWljL2NvbXBvbmVudHMvcGFnZXMvaW5kZXhdIEFkZCcsXG4gIERFVEFJTCA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBEZXRhaWwnLFxuICBDTE9TRSA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBDbG9zZScsXG4gIExJU1RfSVRFTV9CVVRUT05fQ0xJQ0tFRCA9ICdbQG5nLWF0b21pYy9jb21wb25lbnRzL3BhZ2VzL2luZGV4XSBMaXN0SXRlbUJ1dHRvbkNsaWNrJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4sIGl0ZW1zOiB7aWQ6IHN0cmluZ31bXSkge1xuICBpZiAoc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gaXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUsIFtdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSwgaXRlbXMubWFwKGVudHJ5ID0+IGVudHJ5LmlkKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SnNvblBhcnNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjb3ZlcnlGb3JtVmFsdWUoZm9ybTogQWJzdHJhY3RDb250cm9sLCBrZXk6IHN0cmluZyA9ICdkZWZhdWx0Jykge1xuICAvLyBGb3JtQ29udHJvbOOBruWgtOWQiOOBqEZvcm1Hcm91cOOBruWgtOWQiOOBp+WHpueQhuOCkuWIhuOBkeOCi1xuICBpZiAoZm9ybSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgIGZvcm0ucGF0Y2hWYWx1ZSh0cnlKc29uUGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSkpO1xuICAgIGZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIGNvbnNvbGUuZGVidWcoJ2xvYWRlZDonLCB2YWx1ZSk7XG4gICAgZm9ybS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG59XG5cbkBUb2tlbml6ZWRUeXBlKClcbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgSW5kZXhQYWdlU3RvcmU8VD4gZXh0ZW5kcyBJbmplY3RhYmxlQ29tcG9uZW50IHtcbiAgc3RhdGljIHJlYWRvbmx5IEFjdGlvbklkID0gQWN0aW9uSWQ7XG4gIHN0YXRpYyByZWFkb25seSBDb25maWcgPSBtYWtlQ29uZmlnKCgpID0+IHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBpbmplY3RIaWdobGlnaHQoaW5qZWN0RW50aXR5SWROYW1lKCkpO1xuICAgIGNvbnN0IGlzUm9vdFBhZ2UgPSBpbmplY3RJc1Jvb3RQYWdlKCk7XG4gICAgY29uc3QgbmF2U3RhcnRBY3Rpb25zID0gaW5qZWN0TmF2U3RhcnRBY3Rpb25zKGlzUm9vdFBhZ2UpOyAgXG4gICAgY29uc3QgZmlsdGVyRnVuYyA9IGluamVjdEZpbHRlckZ1bmMoKTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBpbmplY3RNb2RlbE5hbWUoKTtcbiAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiAndmFyKC0tcGFnZS13aWR0aC1sdjMpJyxcbiAgICAgIH0sXG4gICAgICBncm91cGVkQnk6IDxzdHJpbmc+bnVsbCxcbiAgICAgIGdyb3VwS2V5czogW10sXG4gICAgICBpdGVtczogW10sXG4gICAgICBpdGVtc01hcDogPEl0ZW1zTWFwPGFueT4+dW5kZWZpbmVkLFxuICAgICAgaXRlbUFjdGlvbnM6ICgoKSA9PiBbXSkgYXMgQWN0aW9ucyxcbiAgICAgIGl0ZW1zTWFwcGVyOiA8KGl0ZW1zOiBhbnlbXSkgPT4gYW55W10+dW5kZWZpbmVkLFxuICAgICAgaXRlbXNMZW5ndGg6IDAsXG4gICAgICBmaWx0ZXJGdW5jLFxuICAgICAgdGl0bGU6IG1vZGVsTmFtZSgpID8gYCR7bW9kZWxOYW1lKCl95LiA6KanYCA6IGDlj5blvpfkuK0uLi5gLFxuICAgICAgdHlwZTogPCdsaXN0JyB8ICd0YWJsZScgfCAnZ3JpZCc+J3RhYmxlJyxcbiAgICAgIHNlbGVjdGlvbjogbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSwgW10pLFxuICAgICAgaGlnaGxpZ2h0OiBoaWdobGlnaHQoKSxcbiAgICAgIGZvcm06IG5ldyBGb3JtR3JvdXAoe30pIGFzIEFic3RyYWN0Q29udHJvbCxcbiAgICAgIHRhYmxlQ2hpbGRyZW5LZXk6IG51bGwsXG4gICAgICBuYXZTdGFydEFjdGlvbnM6IG5hdlN0YXJ0QWN0aW9ucygpLFxuICAgICAgbmF2RW5kQWN0aW9uczogPEFjdGlvbnM+W10sXG4gICAgfSk7XG4gIH0sIFsnY29tcG9uZW50cycsICdwYWdlcycsICdpbmRleCddKTtcblxuICBzdGF0aWMgcHJvdmlkZVR5cGVDb25maWcoKSB7XG4gICAgcmV0dXJuIEluZGV4UGFnZVN0b3JlLkNvbmZpZy5wcm92aWRlKCgpID0+IHtcbiAgICAgIHJldHVybiAoY29uZmlnLCBjb250ZXh0KSA9PiAoey4uLmNvbmZpZywgdHlwZTogZ2V0VHlwZShjb250ZXh0KX0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVJdGVtc0Zyb21SZXBvc2l0b3J5KCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Db25maWcucHJvdmlkZSgoKSA9PiB7XG4gICAgICBjb25zdCBNb2RlbCA9IGluamVjdE1vZGVsKCk7XG4gICAgICBjb25zdCBpdGVtcyA9IE1vZGVsID8gaW5qZWN0QWxsKE1vZGVsKSA6IHNpZ25hbChbXSk7XG4gICAgICByZXR1cm4gKGNvbmZpZykgPT4gKHsuLi5jb25maWcsIGl0ZW1zOiBpdGVtcygpfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1BY3Rpb25zQ29uZmlnKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Db25maWcucHJvdmlkZSgoKSA9PiB7XG4gICAgICByZXR1cm4gKGNvbmZpZykgPT4gKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBpdGVtQWN0aW9uczogKGl0ZW0pID0+IFtcbiAgICAgICAgICB7IGlkOiBBY3Rpb25JZC5ERVRBSUwsIGljb246ICdvcGVuX2luX25ldycsIG5hbWU6ICfoqbPntLAnLCBwYXlsb2FkOiBpdGVtIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlU2lkZUFwcE5hdlN0YXJ0QWN0aW9ucygpIHtcbiAgICByZXR1cm4gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKCkgPT4ge1xuICAgICAgY29uc3QgaXNSb290UGFnZSA9IGluamVjdElzUm9vdFBhZ2UoJ3NpZGUnKTtcbiAgICAgIGNvbnN0IG5hdlN0YXJ0QWN0aW9ucyA9IGluamVjdFNpZGVBcHBOYXZTdGFydEFjdGlvbnMoaXNSb290UGFnZSk7XG4gICAgICByZXR1cm4gKGNvbmZpZykgPT4gKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBuYXZTdGFydEFjdGlvbnM6IG5hdlN0YXJ0QWN0aW9ucygpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgSW5pdGlhbGl6ZXIgPSBtYWtlSW5pdGlhbGl6ZXJDb25maWcoSW5kZXhQYWdlU3RvcmUpO1xuICBzdGF0aWMgcHJvdmlkZUZvcm1Jbml0aWFsaXplcigpIHtcbiAgICByZXR1cm4gSW5kZXhQYWdlU3RvcmUuSW5pdGlhbGl6ZXIucHJvdmlkZSgoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IGZvcm0gPSBpbmplY3RJbmRleEZvcm0oe1xuICAgICAgICBjb2x1bW5zOiBidWlsZENvbHVtbnMoW1xuICAgICAgICAgICdpZCcsIFxuICAgICAgICAgICdjcmVhdGVkQXQnLFxuICAgICAgICAgICd1cGRhdGVkQXQnLFxuICAgICAgICAgIChpdGVtOiB7aWQ6IHN0cmluZ30pID0+IFt7IGlkOiBBY3Rpb25JZC5ERVRBSUwsIGljb246ICdvcGVuX2luX25ldycsIG5hbWU6ICfoqbPntLAnLCBwYXlsb2FkOiBpdGVtIH1dLFxuICAgICAgICBdKSxcbiAgICAgIH0pO1xuICAgICAgYXBwbHlUb0lucHV0KHN0b3JlLCAnZm9ybScsIGZvcm0pO1xuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBwcm92aWRlRm9ybVZhbHVlU3RvcmFnZUluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgY29uc3QgcGF0aHMgPSByb3V0ZS5wYXRoRnJvbVJvb3QubWFwKHIgPT4gcj8ucm91dGVDb25maWc/LnBhdGgpO1xuICAgICAgY29uc3Qga2V5ID0gYEBuZy1hdG9taWMvY29tcG9uZW50cy9wYWdlcy9pbmRleDoke3BhdGhzLmZpbHRlcigocGF0aCkgPT4gISFwYXRoKS5qb2luKCcvJyl9YDtcbiAgICAgIHJlY292ZXJ5Rm9ybVZhbHVlKHN0b3JlLmZvcm0oKSwga2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSXRlbXNMZW5ndGhJbml0aWFsaXplcigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSW5kZXhMZW5ndGhQaXBlLFxuICAgICAgSW5kZXhQYWdlU3RvcmUuSW5pdGlhbGl6ZXIucHJvdmlkZSgoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IGluamVjdChJbmRleExlbmd0aFBpcGUpO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBjb21wdXRlZFJhd1ZhbHVlKCgpID0+IHN0b3JlLmZvcm0oKSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXNMZW5ndGggPSBwaXBlLnRyYW5zZm9ybShzdG9yZS5pdGVtcygpLCBmb3JtVmFsdWUoKSk7XG4gICAgICAgICAgYXBwbHlUb0lucHV0KHN0b3JlLCAnaXRlbXNMZW5ndGgnLCBpdGVtc0xlbmd0aCk7XG4gICAgICAgIH0sIHthbGxvd1NpZ25hbFdyaXRlczogdHJ1ZX0pO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSXRlbXNNYXBwZXJJbml0aWFsaXplcigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSW5kZXhQaXBlLFxuXHRcdFx0SW5kZXhQYWdlU3RvcmUuSW5pdGlhbGl6ZXIucHJvdmlkZSgoc3RvcmUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybVZhbHVlID0gY29tcHV0ZWRSYXdWYWx1ZSgoKSA9PiBzdG9yZS5mb3JtKCkpO1xuXHRcdFx0XHRjb25zdCBpbmRleFBpcGUgPSBpbmplY3QoSW5kZXhQaXBlKTtcblx0XHRcdFx0ZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZSgpIGFzIGFueTtcblx0XHRcdFx0ICBjb25zdCBpdGVtc01hcHBlciA9IChpdGVtczogYW55W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZ1bmMgPSBzdG9yZS5maWx0ZXJGdW5jKCk7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhQaXBlLnRyYW5zZm9ybShpdGVtcy5maWx0ZXIoZmlsdGVyRnVuYyksIHZhbHVlKTtcbiAgICAgICAgICB9O1xuXHRcdFx0XHRcdGFwcGx5VG9JbnB1dChzdG9yZSwgJ2l0ZW1zTWFwcGVyJywgaXRlbXNNYXBwZXIpO1xuXHRcdFx0XHR9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXHRcdFx0fSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ29sdW1uc0luaXRpYWxpemVyKHVzZUZhY3Rvcnk6ICgpID0+IHN0cmluZ1tdKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGFnZVN0b3JlLkluaXRpYWxpemVyLnByb3ZpZGUoKHN0b3JlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB1c2VGYWN0b3J5KCk7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBpbmplY3RJbmRleEZvcm0oeyBjb2x1bW5zOiBidWlsZENvbHVtbnMoY29sdW1ucykgfSk7XG4gICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ2Zvcm0nLCBmb3JtKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1zSW5pdGlhbGl6ZXIoaXRlbXNGYWN0b3J5OiAoKSA9PiBhbnlbXSk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5wcm92aWRlKChzdG9yZSkgPT4ge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gaXRlbXNGYWN0b3J5KCk7XG5cdFx0XHRcdFx0YXBwbHlUb0lucHV0KHN0b3JlLCAnaXRlbXMnLCBpdGVtcyk7XHRcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdpdGVtczonLCBpdGVtcyk7XG5cdFx0XHRcdH0sIHthbGxvd1NpZ25hbFdyaXRlczogdHJ1ZX0pO1xuXHRcdFx0fSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEluaXRpYWxpemVyKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRm9ybUluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRm9ybVZhbHVlU3RvcmFnZUluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlSXRlbXNMZW5ndGhJbml0aWFsaXplcigpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZUl0ZW1zTWFwcGVySW5pdGlhbGl6ZXIoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVCYWNrRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkJBQ0ssICgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiBoaXN0b3J5LmJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGV0YWlsRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgIHJldHVybiAoaXRlbToge2lkOiBzdHJpbmd9KSA9PiB7XG4gICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoW2l0ZW0uaWRdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogc3RvcmUucm91dGUsXG4gICAgICAgICAgcmVwbGFjZVVybDogaGFzTmV4dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQWRkRWZmZWN0KCkge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KEluZGV4UGFnZVN0b3JlLkFjdGlvbklkLkFERCwgKCkgPT4ge1xuICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgIGNvbnN0IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6ICEhaGFzTmV4dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUNoZWNrYm94Q2xpY2tFZmZlY3QoKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoSW5kZXhUZW1wbGF0ZS5BY3Rpb25JZC5UQUJMRV9DSEVDS0JPWF9DTElDSywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgcmV0dXJuIChpdGVtOiB7aWQ6IHN0cmluZ30pID0+IHtcbiAgICAgICAgc3RvcmUuc2VsZWN0aW9uKCkudG9nZ2xlKGl0ZW0uaWQpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlVGFibGVIZWFkZXJDbGlja0VmZmVjdCgpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLlRBQkxFX0hFQURFUl9DTElDSywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoSW5kZXhQYWdlU3RvcmUpO1xuICAgICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ID0gc3RvcmUuZm9ybSgpLmdldChbJ3NvcnQnXSkudmFsdWU7XG4gICAgICAgIGNvbnN0IG9yZGVyID0ga2V5ID09PSBzb3J0LmtleSAmJiBzb3J0Lm9yZGVyID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICBzdG9yZS5mb3JtKCkucGF0Y2hWYWx1ZSh7c29ydDoge2tleSwgb3JkZXJ9fSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVTaWRlTmF2RWZmZWN0cygpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChOYXZBY3Rpb25JZC5UT0dHTEVfU0lERV9OQVYsICgpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgICAgIHJldHVybiAoKSA9PiBhcHAuc2lkZU5hdi50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlSGVhZGVyQ2hlY2tib3hDbGlja0VmZmVjdCgpIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5IRUFERVJfQ0hFQ0tCT1hfQ0xJQ0ssICgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KEluZGV4UGFnZVN0b3JlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRvZ2dsZUFsbFNlbGVjdGlvbihzdG9yZS5zZWxlY3Rpb24oKSwgc3RvcmUuZGlzcGxheWVkSXRlbXMoKSk7XG4gICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ3NlbGVjdGlvbicsIHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHRFZmZlY3RzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGV0YWlsRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQWRkRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlQmFja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZUhlYWRlckNoZWNrYm94Q2xpY2tFZmZlY3QoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVDaGVja2JveENsaWNrRWZmZWN0KCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlVGFibGVIZWFkZXJDbGlja0VmZmVjdCgpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZVNpZGVOYXZFZmZlY3RzKCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdENvbmZpZygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSW5kZXhQYWdlU3RvcmUuQ29uZmlnLnByb3ZpZGUoKSxcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVJdGVtQWN0aW9uc0NvbmZpZygpLFxuICAgICAgSW5kZXhQYWdlU3RvcmUucHJvdmlkZVR5cGVDb25maWcoKSxcbiAgICBdXG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHQoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEluZGV4UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0Q29uZmlnKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEluaXRpYWxpemVyKCksXG4gICAgICBJbmRleFBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEVmZmVjdHMoKSxcbiAgICBdO1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnID0gSW5kZXhQYWdlU3RvcmUuQ29uZmlnLmluamVjdCgpO1xuICByZWFkb25seSBzdHlsZSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnN0eWxlKSk7XG4gIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcmVhZG9ubHkgZ3JvdXBlZEJ5ID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuZ3JvdXBlZEJ5KSk7XG4gIHJlYWRvbmx5IGdyb3VwS2V5cyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmdyb3VwS2V5cykpO1xuICByZWFkb25seSB0eXBlID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkudHlwZSkpO1xuICByZWFkb25seSBpdGVtcyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1zKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IGNvbnZlcnRUb0l0ZW1zTWFwKHRoaXMuZGlzcGxheWVkSXRlbXMoKSkpKTtcbiAgcmVhZG9ubHkgaXRlbUFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5pdGVtQWN0aW9ucykpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRpdGxlKSk7XG4gIHJlYWRvbmx5IGZvcm0gPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5mb3JtKSk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbiA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnNlbGVjdGlvbikpO1xuICByZWFkb25seSBoaWdobGlnaHQgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5oaWdobGlnaHQpKTtcbiAgcmVhZG9ubHkgbmF2U3RhcnRBY3Rpb25zID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkubmF2U3RhcnRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IG5hdkVuZEFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5uYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IGZpbHRlckZ1bmMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5maWx0ZXJGdW5jKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwcGVyID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuaXRlbXNNYXBwZXIpKTtcbiAgcmVhZG9ubHkgdGFibGVDaGlsZHJlbktleSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnRhYmxlQ2hpbGRyZW5LZXkpKTtcblxuICByZWFkb25seSBpdGVtc0xlbmd0aCA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1zTGVuZ3RoKSk7XG4gIHJlYWRvbmx5IGRpc3BsYXllZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMoKSA/PyBbXTtcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gdGhpcy5maWx0ZXJGdW5jKCk7XG4gICAgaXRlbXMgPSBmaWx0ZXJGdW5jID8gaXRlbXMuZmlsdGVyKGZpbHRlckZ1bmMpIDogaXRlbXM7XG4gICAgY29uc3QgaXRlbXNNYXBwZXIgPSB0aGlzLml0ZW1zTWFwcGVyKCk7XG4gICAgcmV0dXJuIGl0ZW1zTWFwcGVyID8gaXRlbXNNYXBwZXIoaXRlbXMpIDogaXRlbXM7XG4gIH0pO1xuICByZWFkb25seSBzZWxlY3RlZElkcyA9IGNvbXB1dGVkQXN5bmMoKCkgPT4gdGhpcy5zZWxlY3Rpb24oKS5jaGFuZ2VkLnBpcGUoXG4gICAgbWFwKCgpID0+IHRoaXMuc2VsZWN0aW9uKCk/LnNlbGVjdGVkID8/IFtdKSxcbiAgKSwge2luaXRpYWxWYWx1ZTogW119KTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pdGVtcygpID8/IFtdKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5zZWxlY3RlZElkcygpLmluY2x1ZGVzKGVudHJ5LmlkKSkpO1xuICByZWFkb25seSBpc0FsbFNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZEl0ZW1zKCkuZXZlcnkoZW50cnkgPT4gdGhpcy5zZWxlY3RlZElkcygpLmluY2x1ZGVzKGVudHJ5LmlkKSk7XG4gIH0pO1xuICByZWFkb25seSBza2lwID0gaW5qZWN0Um91dGVTa2lwKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBJbmRleFBhZ2VTdG9yZS5Jbml0aWFsaXplci5pbml0aWFsaXplU3RvcmUodGhpcyk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZygnaXRlbXNNYXA6JywgdGhpcy5pdGVtc01hcCgpKTtcbiAgICB9KVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BhZ2VzLWluZGV4JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlck91dGxldEZyYW1lLFxuICAgIEluZGV4VGVtcGxhdGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gIDxmcmFtZXMtcm91dGVyLW91dGxldCBbc2tpcF09XCJzdG9yZS5za2lwKClcIj5cbiAgICA8dGVtcGxhdGVzLWluZGV4XG4gICAgICBbc3R5bGVdPVwic3RvcmUuc3R5bGUoKVwiXG4gICAgICBbdGl0bGVdPVwic3RvcmUudGl0bGUoKVwiXG4gICAgICBbdHlwZV09XCJzdG9yZS50eXBlKClcIlxuICAgICAgW3RhYmxlQ2hpbGRyZW5LZXldPVwic3RvcmUudGFibGVDaGlsZHJlbktleSgpXCJcbiAgICAgIFtpdGVtc109XCJzdG9yZS5kaXNwbGF5ZWRJdGVtcygpXCJcbiAgICAgIFtpdGVtc01hcF09XCJzdG9yZS5pdGVtc01hcCgpXCJcbiAgICAgIFtpdGVtc0xlbmd0aF09XCJzdG9yZS5pdGVtc0xlbmd0aCgpXCJcbiAgICAgIFtpdGVtQWN0aW9uc109XCJzdG9yZS5pdGVtQWN0aW9ucygpXCJcbiAgICAgIFtncm91cGVkQnldPVwic3RvcmUuZ3JvdXBlZEJ5KClcIlxuICAgICAgW2dyb3VwS2V5c109XCJzdG9yZS5ncm91cEtleXMoKVwiXG4gICAgICBbZm9ybV09XCJzdG9yZS5mb3JtKClcIlxuICAgICAgW3NlbGVjdGlvbl09XCJzdG9yZS5zZWxlY3Rpb24oKVwiXG4gICAgICBbaGlnaGxpZ2h0XT1cInN0b3JlLmhpZ2hsaWdodCgpXCJcbiAgICAgIFtuYXZTdGFydEFjdGlvbnNdPVwic3RvcmUubmF2U3RhcnRBY3Rpb25zKClcIlxuICAgICAgW25hdkVuZEFjdGlvbnNdPVwic3RvcmUubmF2RW5kQWN0aW9ucygpXCJcbiAgICAgIChhY3Rpb24pPVwiZGlzcGF0Y2goJGV2ZW50KVwiXG4gICAgLz5cbiAgPC9mcmFtZXMtcm91dGVyLW91dGxldD5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL2luZGV4LnBhZ2Uuc2NzcycsXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBJbmRleFBhZ2VTdG9yZSxcbiAgICAgIGlucHV0czogW1xuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAnaXRlbXNNYXAnLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmRleFBhZ2UgZXh0ZW5kcyBOZ0F0b21pY0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBzdG9yZSA9IGluamVjdChJbmRleFBhZ2VTdG9yZSk7XG4gIHByb3RlY3RlZCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJvdGVjdGVkIHNoZWV0ID0gaW5qZWN0KFNoZWV0U2VydmljZSk7XG5cbiAgQEVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLkJBQ0spXG4gIHByb3RlY3RlZCBiYWNrKCkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5CQUNLfSk7XG4gIH1cblxuICBARWZmZWN0KE5hdkFjdGlvbklkLkNMT1NFKVxuICBwcm90ZWN0ZWQgY2xvc2UoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7aWQ6IEFjdGlvbklkLkNMT1NFfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuSVRFTV9DTElDSylcbiAgcHJvdGVjdGVkIGl0ZW1DbGljayhpdGVtOiB7aWQ6IHN0cmluZ30pIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtpZDogQWN0aW9uSWQuREVUQUlMLCBwYXlsb2FkOiBpdGVtfSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGUuQWN0aW9uSWQuVEFCTEVfSEVBREVSX0NIRUNLQk9YX0NMSUNLKVxuICBwcm90ZWN0ZWQgb25DaGVja2JveENsaWNrKGl0ZW06IHtpZDogc3RyaW5nfSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe2lkOiBJbmRleFBhZ2VTdG9yZS5BY3Rpb25JZC5IRUFERVJfQ0hFQ0tCT1hfQ0xJQ0ssIHBheWxvYWQ6IGl0ZW19KTtcbiAgfVxuXG4gIC8vIE1FTU8oQG5vbnRhbmdlbnQpOiDjgrfjg7zjg4jjga7jgqLjgq/jgrfjg6fjg7PjgpLjg5rjg7zjgrjjgavmjIHjgZ/jgZvjgovjgbnjgY3jgYvjga/opoHmpJzoqI7jgIJcbiAgQEVmZmVjdChJbmRleFRlbXBsYXRlLkFjdGlvbklkLkxJU1RfSVRFTV9CVVRUT05fQ0xJQ0tFRClcbiAgcHJvdGVjdGVkIG9uSXRlbUJ1dHRvbkNsaWNrZWQoaXRlbTogYW55KSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHJlc29sdmVBY3Rpb25zKHRoaXMuc3RvcmUuaXRlbUFjdGlvbnMoKSwgaXRlbSk7XG4gICAgdGhpcy5zaGVldC5vcGVuQWN0aW9ucyhhY3Rpb25zKS50aGVuKChhY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICBpZDogYWN0aW9uLmlkLFxuICAgICAgICBwYXlsb2FkOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=