ngx-register-base 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/esm2022/lib/components/checkbox-selector/checkbox-selector.component.mjs +129 -0
  2. package/esm2022/lib/components/checkbox-selector/checkbox-selector.types.mjs +8 -0
  3. package/esm2022/lib/components/column-settings/column-settings.component.mjs +249 -0
  4. package/esm2022/lib/components/column-settings/components/column-settings-template/column-settings-template.component.mjs +80 -0
  5. package/esm2022/lib/components/column-settings/consts/column-settings.consts.mjs +10 -0
  6. package/esm2022/lib/components/column-settings/index.mjs +3 -0
  7. package/esm2022/lib/components/column-settings/types/column-settings.types.mjs +7 -0
  8. package/esm2022/lib/components/divider/divider.component.mjs +16 -0
  9. package/esm2022/lib/components/filter-button/filter-button.component.mjs +19 -0
  10. package/esm2022/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.mjs +31 -0
  11. package/esm2022/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.mjs +57 -0
  12. package/esm2022/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.mjs +110 -0
  13. package/esm2022/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.mjs +130 -0
  14. package/esm2022/lib/components/filters/components/filter-list/filter-list.service.mjs +89 -0
  15. package/esm2022/lib/components/filters/components/filter-list/filters-section/filters-section.component.mjs +41 -0
  16. package/esm2022/lib/components/filters/components/filter-list.module.mjs +45 -0
  17. package/esm2022/lib/components/filters/index.mjs +3 -0
  18. package/esm2022/lib/components/filters/register-table-filter.component.mjs +155 -0
  19. package/esm2022/lib/components/filters/register-table-filter.module.mjs +39 -0
  20. package/esm2022/lib/components/index.mjs +11 -0
  21. package/esm2022/lib/components/inputs/index.mjs +20 -0
  22. package/esm2022/lib/components/inputs/inputs.module.mjs +166 -0
  23. package/esm2022/lib/components/inputs/param-calendar-year/param-calendar-year.component.mjs +45 -0
  24. package/esm2022/lib/components/inputs/param-custom/param-custom.component.mjs +12 -0
  25. package/esm2022/lib/components/inputs/param-date/param-date.component.mjs +76 -0
  26. package/esm2022/lib/components/inputs/param-date-range/param-date-range.component.mjs +60 -0
  27. package/esm2022/lib/components/inputs/param-date-time/param-date-time.component.mjs +86 -0
  28. package/esm2022/lib/components/inputs/param-date-time-range/param-date-time-range.component.mjs +95 -0
  29. package/esm2022/lib/components/inputs/param-month/param-month.component.mjs +50 -0
  30. package/esm2022/lib/components/inputs/param-month-range/param-month-range.component.mjs +62 -0
  31. package/esm2022/lib/components/inputs/param-multi-select/param-multi-select.component.mjs +309 -0
  32. package/esm2022/lib/components/inputs/param-select/param-select.component.mjs +233 -0
  33. package/esm2022/lib/components/inputs/param-switcher/param-switcher.component.mjs +21 -0
  34. package/esm2022/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.mjs +28 -0
  35. package/esm2022/lib/components/inputs/param-switcher-date-time-range/index.mjs +3 -0
  36. package/esm2022/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.mjs +105 -0
  37. package/esm2022/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.mjs +10 -0
  38. package/esm2022/lib/components/inputs/param-text/param-text.component.mjs +40 -0
  39. package/esm2022/lib/components/inputs/param-textarea/param-textarea.component.mjs +38 -0
  40. package/esm2022/lib/components/inputs/param-toggle/param-toggle.component.mjs +20 -0
  41. package/esm2022/lib/components/inputs/param-tree/consts/param-tree.consts.mjs +37 -0
  42. package/esm2022/lib/components/inputs/param-tree/index.mjs +8 -0
  43. package/esm2022/lib/components/inputs/param-tree/param-tree.component.mjs +207 -0
  44. package/esm2022/lib/components/inputs/param-tree/services/param-tree.service.mjs +116 -0
  45. package/esm2022/lib/components/inputs/param-tree/services/sync-tree-loader.service.mjs +20 -0
  46. package/esm2022/lib/components/inputs/param-tree/tokens/param-tree.tokens.mjs +3 -0
  47. package/esm2022/lib/components/inputs/param-tree/types/param-tree.types.mjs +2 -0
  48. package/esm2022/lib/components/inputs/param-tree/utils/param-tree.utils.mjs +9 -0
  49. package/esm2022/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.mjs +80 -0
  50. package/esm2022/lib/components/inputs/param-tree-select/param-tree-select.component.mjs +85 -0
  51. package/esm2022/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.mjs +15 -0
  52. package/esm2022/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.mjs +12 -0
  53. package/esm2022/lib/components/menu-constructor/index.mjs +5 -0
  54. package/esm2022/lib/components/menu-constructor/sproc-menu-constructor.component.mjs +559 -0
  55. package/esm2022/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.mjs +3 -0
  56. package/esm2022/lib/components/menu-constructor/store/sproc-menu-constructor.consts.mjs +5 -0
  57. package/esm2022/lib/components/menu-constructor/store/sproc-menu.tokens.mjs +3 -0
  58. package/esm2022/lib/components/page-menu/index.mjs +6 -0
  59. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.consts.mjs +9 -0
  60. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.schema.mjs +2 -0
  61. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.tokens.mjs +4 -0
  62. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.types.mjs +3 -0
  63. package/esm2022/lib/components/page-menu/sproc-page-menu.component.mjs +275 -0
  64. package/esm2022/lib/components/paginator/paginator.component.mjs +159 -0
  65. package/esm2022/lib/components/paginator/types/paginator.types.mjs +2 -0
  66. package/esm2022/lib/components/register-table/consts/register-table.consts.mjs +4 -0
  67. package/esm2022/lib/components/register-table/directives/cell-template.directive.mjs +19 -0
  68. package/esm2022/lib/components/register-table/directives/header-template.directive.mjs +18 -0
  69. package/esm2022/lib/components/register-table/index.mjs +4 -0
  70. package/esm2022/lib/components/register-table/model/schema.mjs +10 -0
  71. package/esm2022/lib/components/register-table/pipes/class-by-type.pipe.mjs +33 -0
  72. package/esm2022/lib/components/register-table/pipes/sticky-column.pipe.mjs +17 -0
  73. package/esm2022/lib/components/register-table/register-table.component.mjs +544 -0
  74. package/esm2022/lib/components/reset-settings-form/reset-settings-form.component.mjs +18 -0
  75. package/esm2022/lib/components/search-input/search-input.component.mjs +28 -0
  76. package/esm2022/lib/components/sliding-panel/sliding-panel.component.mjs +48 -0
  77. package/esm2022/lib/components/sliding-panel/sliding-panel.module.mjs +19 -0
  78. package/esm2022/lib/consts/date-time.consts.mjs +2 -0
  79. package/esm2022/lib/consts/index.mjs +4 -0
  80. package/esm2022/lib/consts/inputs.consts.mjs +4 -0
  81. package/esm2022/lib/consts/month.consts.mjs +77 -0
  82. package/esm2022/lib/consts/params.consts.mjs +2 -0
  83. package/esm2022/lib/consts/register-base.consts.mjs +26 -0
  84. package/esm2022/lib/core/form-group-wrapper/errors-consts.mjs +8 -0
  85. package/esm2022/lib/core/form-group-wrapper/form-group-wrapper.mjs +81 -0
  86. package/esm2022/lib/core/form-group-wrapper/index.mjs +2 -0
  87. package/esm2022/lib/core/index.mjs +5 -0
  88. package/esm2022/lib/core/input-control/index.mjs +2 -0
  89. package/esm2022/lib/core/input-control/input-control.mjs +11 -0
  90. package/esm2022/lib/core/param/index.mjs +6 -0
  91. package/esm2022/lib/core/param/param-base.mjs +215 -0
  92. package/esm2022/lib/core/param/param-date-base.mjs +26 -0
  93. package/esm2022/lib/core/param/param-select-base.mjs +114 -0
  94. package/esm2022/lib/core/param/param-text-base.mjs +25 -0
  95. package/esm2022/lib/core/param/param.tokens.mjs +4 -0
  96. package/esm2022/lib/core/register-base/index.mjs +3 -0
  97. package/esm2022/lib/core/register-base/register-base.mjs +575 -0
  98. package/esm2022/lib/core/register-base/register-base.store.mjs +43 -0
  99. package/esm2022/lib/directives/date/date-time.types.mjs +34 -0
  100. package/esm2022/lib/directives/date/format-date.pipe.mjs +33 -0
  101. package/esm2022/lib/directives/index.mjs +3 -0
  102. package/esm2022/lib/directives/number/number-only.directive.mjs +41 -0
  103. package/esm2022/lib/directives/sticky/index.mjs +3 -0
  104. package/esm2022/lib/directives/sticky/sticky-relative.directive.mjs +32 -0
  105. package/esm2022/lib/directives/sticky/sticky-relative.service.mjs +32 -0
  106. package/esm2022/lib/directives/sticky/sticky.directive.mjs +169 -0
  107. package/esm2022/lib/services/date-time.service.mjs +314 -0
  108. package/esm2022/lib/services/dialog/dialog.service.mjs +53 -0
  109. package/esm2022/lib/services/dialog/dialog.types.mjs +2 -0
  110. package/esm2022/lib/services/dialog/index.mjs +3 -0
  111. package/esm2022/lib/services/dom-intersection.service.mjs +22 -0
  112. package/esm2022/lib/services/filter/filters-state.service.mjs +65 -0
  113. package/esm2022/lib/services/filter/filters-transmit.service.mjs +82 -0
  114. package/esm2022/lib/services/filter/filters.service.mjs +23 -0
  115. package/esm2022/lib/services/index.mjs +8 -0
  116. package/esm2022/lib/services/inputs-state.service.mjs +130 -0
  117. package/esm2022/lib/services/inputs.service.mjs +88 -0
  118. package/esm2022/lib/services/key-pressed.service.mjs +37 -0
  119. package/esm2022/lib/services/resize-window-observer.service.mjs +33 -0
  120. package/esm2022/lib/services/selected-objects-state.service.mjs +123 -0
  121. package/esm2022/lib/store/fast-query-store.service.mjs +110 -0
  122. package/esm2022/lib/store/index.mjs +2 -0
  123. package/esm2022/lib/types/event.types.mjs +2 -0
  124. package/esm2022/lib/types/hasura.types.mjs +2 -0
  125. package/esm2022/lib/types/index.mjs +7 -0
  126. package/esm2022/lib/types/inputs.types.mjs +19 -0
  127. package/esm2022/lib/types/params.types.mjs +2 -0
  128. package/esm2022/lib/types/register-base.types.mjs +6 -0
  129. package/esm2022/lib/types/sub-types.mjs +2 -0
  130. package/esm2022/lib/types/user-profile.types.mjs +2 -0
  131. package/esm2022/lib/utils/functions.mjs +10 -0
  132. package/esm2022/lib/utils/get-url-segment.mjs +35 -0
  133. package/esm2022/lib/utils/index.mjs +5 -0
  134. package/esm2022/lib/utils/prizm.shared.module.mjs +284 -0
  135. package/esm2022/lib/utils/rxjs.mjs +28 -0
  136. package/esm2022/lib/utils/select-all-utils.mjs +11 -0
  137. package/esm2022/ngx-register-base.mjs +5 -0
  138. package/esm2022/public-api.mjs +9 -0
  139. package/fesm2022/ngx-register-base.mjs +7487 -0
  140. package/fesm2022/ngx-register-base.mjs.map +1 -0
  141. package/index.d.ts +5 -0
  142. package/lib/components/checkbox-selector/checkbox-selector.component.d.ts +33 -0
  143. package/lib/components/checkbox-selector/checkbox-selector.types.d.ts +7 -0
  144. package/lib/components/column-settings/column-settings.component.d.ts +80 -0
  145. package/lib/components/column-settings/components/column-settings-template/column-settings-template.component.d.ts +24 -0
  146. package/lib/components/column-settings/consts/column-settings.consts.d.ts +8 -0
  147. package/lib/components/column-settings/types/column-settings.types.d.ts +22 -0
  148. package/lib/components/divider/divider.component.d.ts +6 -0
  149. package/lib/components/filter-button/filter-button.component.d.ts +8 -0
  150. package/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.d.ts +14 -0
  151. package/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.d.ts +25 -0
  152. package/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.d.ts +39 -0
  153. package/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.d.ts +41 -0
  154. package/lib/components/filters/components/filter-list/filter-list.service.d.ts +20 -0
  155. package/lib/components/filters/components/filter-list/filters-section/filters-section.component.d.ts +15 -0
  156. package/lib/components/filters/components/filter-list.module.d.ts +15 -0
  157. package/lib/components/filters/register-table-filter.component.d.ts +40 -0
  158. package/lib/components/filters/register-table-filter.module.d.ts +13 -0
  159. package/lib/components/inputs/inputs.module.d.ts +31 -0
  160. package/lib/components/inputs/param-calendar-year/param-calendar-year.component.d.ts +19 -0
  161. package/lib/components/inputs/param-custom/param-custom.component.d.ts +6 -0
  162. package/lib/components/inputs/param-date/param-date.component.d.ts +20 -0
  163. package/lib/components/inputs/param-date-range/param-date-range.component.d.ts +26 -0
  164. package/lib/components/inputs/param-date-time/param-date-time.component.d.ts +25 -0
  165. package/lib/components/inputs/param-date-time-range/param-date-time-range.component.d.ts +28 -0
  166. package/lib/components/inputs/param-month/param-month.component.d.ts +18 -0
  167. package/lib/components/inputs/param-month-range/param-month-range.component.d.ts +21 -0
  168. package/lib/components/inputs/param-multi-select/param-multi-select.component.d.ts +46 -0
  169. package/lib/components/inputs/param-select/param-select.component.d.ts +34 -0
  170. package/lib/components/inputs/param-switcher/param-switcher.component.d.ts +8 -0
  171. package/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.d.ts +2 -0
  172. package/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.d.ts +19 -0
  173. package/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.d.ts +8 -0
  174. package/lib/components/inputs/param-text/param-text.component.d.ts +10 -0
  175. package/lib/components/inputs/param-textarea/param-textarea.component.d.ts +10 -0
  176. package/lib/components/inputs/param-toggle/param-toggle.component.d.ts +9 -0
  177. package/lib/components/inputs/param-tree/consts/param-tree.consts.d.ts +7 -0
  178. package/lib/components/inputs/param-tree/param-tree.component.d.ts +41 -0
  179. package/lib/components/inputs/param-tree/services/param-tree.service.d.ts +37 -0
  180. package/lib/components/inputs/param-tree/services/sync-tree-loader.service.d.ts +10 -0
  181. package/{src/lib/components/inputs/param-tree/tokens/param-tree.tokens.ts → lib/components/inputs/param-tree/tokens/param-tree.tokens.d.ts} +1 -2
  182. package/lib/components/inputs/param-tree/types/param-tree.types.d.ts +32 -0
  183. package/lib/components/inputs/param-tree/utils/param-tree.utils.d.ts +7 -0
  184. package/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.d.ts +31 -0
  185. package/lib/components/inputs/param-tree-select/param-tree-select.component.d.ts +30 -0
  186. package/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.d.ts +6 -0
  187. package/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.d.ts +5 -0
  188. package/lib/components/menu-constructor/sproc-menu-constructor.component.d.ts +113 -0
  189. package/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.d.ts +24 -0
  190. package/lib/components/menu-constructor/store/sproc-menu-constructor.consts.d.ts +36 -0
  191. package/{src/lib/components/menu-constructor/store/sproc-menu.tokens.ts → lib/components/menu-constructor/store/sproc-menu.tokens.d.ts} +1 -4
  192. package/lib/components/page-menu/schema/sproc-page-menu.consts.d.ts +7 -0
  193. package/lib/components/page-menu/schema/sproc-page-menu.schema.d.ts +30 -0
  194. package/lib/components/page-menu/schema/sproc-page-menu.tokens.d.ts +3 -0
  195. package/lib/components/page-menu/schema/sproc-page-menu.types.d.ts +36 -0
  196. package/lib/components/page-menu/sproc-page-menu.component.d.ts +48 -0
  197. package/lib/components/paginator/paginator.component.d.ts +52 -0
  198. package/lib/components/paginator/types/paginator.types.d.ts +15 -0
  199. package/lib/components/register-table/consts/register-table.consts.d.ts +3 -0
  200. package/lib/components/register-table/directives/cell-template.directive.d.ts +9 -0
  201. package/lib/components/register-table/directives/header-template.directive.d.ts +9 -0
  202. package/lib/components/register-table/model/schema.d.ts +52 -0
  203. package/lib/components/register-table/pipes/class-by-type.pipe.d.ts +8 -0
  204. package/lib/components/register-table/pipes/sticky-column.pipe.d.ts +7 -0
  205. package/lib/components/register-table/register-table.component.d.ts +165 -0
  206. package/lib/components/reset-settings-form/reset-settings-form.component.d.ts +9 -0
  207. package/lib/components/search-input/search-input.component.d.ts +11 -0
  208. package/lib/components/sliding-panel/sliding-panel.component.d.ts +14 -0
  209. package/lib/components/sliding-panel/sliding-panel.module.d.ts +9 -0
  210. package/lib/consts/date-time.consts.d.ts +1 -0
  211. package/lib/consts/index.d.ts +3 -0
  212. package/lib/consts/inputs.consts.d.ts +4 -0
  213. package/lib/consts/month.consts.d.ts +49 -0
  214. package/lib/consts/params.consts.d.ts +1 -0
  215. package/lib/consts/register-base.consts.d.ts +19 -0
  216. package/lib/core/form-group-wrapper/errors-consts.d.ts +5 -0
  217. package/lib/core/form-group-wrapper/form-group-wrapper.d.ts +15 -0
  218. package/lib/core/input-control/input-control.d.ts +11 -0
  219. package/lib/core/param/param-base.d.ts +68 -0
  220. package/lib/core/param/param-date-base.d.ts +18 -0
  221. package/lib/core/param/param-select-base.d.ts +42 -0
  222. package/lib/core/param/param-text-base.d.ts +15 -0
  223. package/{src/lib/core/param/param.tokens.ts → lib/core/param/param.tokens.d.ts} +1 -2
  224. package/lib/core/register-base/register-base.d.ts +168 -0
  225. package/lib/core/register-base/register-base.store.d.ts +35 -0
  226. package/lib/directives/date/date-time.types.d.ts +32 -0
  227. package/lib/directives/date/format-date.pipe.d.ts +10 -0
  228. package/lib/directives/number/number-only.directive.d.ts +10 -0
  229. package/lib/directives/sticky/sticky-relative.directive.d.ts +13 -0
  230. package/lib/directives/sticky/sticky-relative.service.d.ts +15 -0
  231. package/lib/directives/sticky/sticky.directive.d.ts +27 -0
  232. package/lib/services/date-time.service.d.ts +80 -0
  233. package/lib/services/dialog/dialog.service.d.ts +22 -0
  234. package/{src/lib/services/dialog/dialog.types.ts → lib/services/dialog/dialog.types.d.ts} +4 -8
  235. package/lib/services/dom-intersection.service.d.ts +8 -0
  236. package/lib/services/filter/filters-state.service.d.ts +21 -0
  237. package/lib/services/filter/filters-transmit.service.d.ts +28 -0
  238. package/lib/services/filter/filters.service.d.ts +12 -0
  239. package/lib/services/inputs-state.service.d.ts +57 -0
  240. package/lib/services/inputs.service.d.ts +28 -0
  241. package/lib/services/key-pressed.service.d.ts +15 -0
  242. package/lib/services/resize-window-observer.service.d.ts +11 -0
  243. package/lib/services/selected-objects-state.service.d.ts +47 -0
  244. package/lib/store/fast-query-store.service.d.ts +19 -0
  245. package/{src/lib/types/event.types.ts → lib/types/event.types.d.ts} +1 -1
  246. package/lib/types/hasura.types.d.ts +35 -0
  247. package/lib/types/inputs.types.d.ts +41 -0
  248. package/lib/types/params.types.d.ts +27 -0
  249. package/lib/types/register-base.types.d.ts +123 -0
  250. package/lib/types/sub-types.d.ts +8 -0
  251. package/lib/types/user-profile.types.d.ts +17 -0
  252. package/lib/utils/functions.d.ts +3 -0
  253. package/lib/utils/get-url-segment.d.ts +7 -0
  254. package/lib/utils/prizm.shared.module.d.ts +14 -0
  255. package/lib/utils/rxjs.d.ts +10 -0
  256. package/lib/utils/select-all-utils.d.ts +8 -0
  257. package/package.json +15 -12
  258. package/schematics/ng-update/replace-menu-state-token/index.d.ts +2 -0
  259. package/schematics/ng-update/replace-menu-state-token/index.js +29 -0
  260. package/schematics/ng-update/replace-menu-state-token/index.js.map +1 -0
  261. package/schematics/ng-update/update-prefix/index.d.ts +2 -0
  262. package/schematics/ng-update/update-prefix/index.js +33 -0
  263. package/schematics/ng-update/update-prefix/index.js.map +1 -0
  264. package/schematics/utils/{utils.ts → utils.d.ts} +2 -9
  265. package/schematics/utils/utils.js +25 -0
  266. package/schematics/utils/utils.js.map +1 -0
  267. package/ng-package.json +0 -15
  268. package/schematics/ng-update/replace-menu-state-token/index.ts +0 -33
  269. package/schematics/ng-update/update-prefix/index.ts +0 -38
  270. package/src/lib/components/checkbox-selector/checkbox-selector.component.html +0 -91
  271. package/src/lib/components/checkbox-selector/checkbox-selector.component.less +0 -67
  272. package/src/lib/components/checkbox-selector/checkbox-selector.component.ts +0 -176
  273. package/src/lib/components/checkbox-selector/checkbox-selector.types.ts +0 -8
  274. package/src/lib/components/column-settings/column-settings.component.html +0 -160
  275. package/src/lib/components/column-settings/column-settings.component.less +0 -131
  276. package/src/lib/components/column-settings/column-settings.component.ts +0 -352
  277. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.html +0 -65
  278. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.less +0 -79
  279. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.ts +0 -114
  280. package/src/lib/components/column-settings/consts/column-settings.consts.ts +0 -9
  281. package/src/lib/components/column-settings/types/column-settings.types.ts +0 -26
  282. package/src/lib/components/divider/divider.component.html +0 -4
  283. package/src/lib/components/divider/divider.component.less +0 -10
  284. package/src/lib/components/divider/divider.component.ts +0 -12
  285. package/src/lib/components/filter-button/filter-button.component.html +0 -20
  286. package/src/lib/components/filter-button/filter-button.component.less +0 -41
  287. package/src/lib/components/filter-button/filter-button.component.ts +0 -18
  288. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.html +0 -22
  289. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.less +0 -23
  290. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.ts +0 -31
  291. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.html +0 -49
  292. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.less +0 -37
  293. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.ts +0 -66
  294. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.html +0 -147
  295. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.less +0 -45
  296. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.ts +0 -114
  297. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.html +0 -44
  298. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.less +0 -49
  299. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.ts +0 -167
  300. package/src/lib/components/filters/components/filter-list/filter-list.service.ts +0 -97
  301. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.html +0 -18
  302. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.less +0 -55
  303. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.ts +0 -69
  304. package/src/lib/components/filters/components/filter-list.module.ts +0 -29
  305. package/src/lib/components/filters/register-table-filter.component.html +0 -53
  306. package/src/lib/components/filters/register-table-filter.component.less +0 -17
  307. package/src/lib/components/filters/register-table-filter.component.ts +0 -167
  308. package/src/lib/components/filters/register-table-filter.module.ts +0 -22
  309. package/src/lib/components/inputs/inputs.module.ts +0 -104
  310. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.html +0 -49
  311. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.less +0 -70
  312. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.ts +0 -52
  313. package/src/lib/components/inputs/param-custom/param-custom.component.html +0 -1
  314. package/src/lib/components/inputs/param-custom/param-custom.component.ts +0 -9
  315. package/src/lib/components/inputs/param-date/param-date.component.html +0 -55
  316. package/src/lib/components/inputs/param-date/param-date.component.less +0 -67
  317. package/src/lib/components/inputs/param-date/param-date.component.ts +0 -77
  318. package/src/lib/components/inputs/param-date-range/param-date-range.component.html +0 -45
  319. package/src/lib/components/inputs/param-date-range/param-date-range.component.less +0 -75
  320. package/src/lib/components/inputs/param-date-range/param-date-range.component.ts +0 -67
  321. package/src/lib/components/inputs/param-date-time/param-date-time.component.html +0 -70
  322. package/src/lib/components/inputs/param-date-time/param-date-time.component.less +0 -72
  323. package/src/lib/components/inputs/param-date-time/param-date-time.component.ts +0 -101
  324. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.html +0 -67
  325. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.less +0 -103
  326. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.ts +0 -128
  327. package/src/lib/components/inputs/param-month/param-month.component.html +0 -46
  328. package/src/lib/components/inputs/param-month/param-month.component.less +0 -72
  329. package/src/lib/components/inputs/param-month/param-month.component.ts +0 -55
  330. package/src/lib/components/inputs/param-month-range/param-month-range.component.html +0 -39
  331. package/src/lib/components/inputs/param-month-range/param-month-range.component.less +0 -71
  332. package/src/lib/components/inputs/param-month-range/param-month-range.component.ts +0 -76
  333. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.html +0 -84
  334. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.less +0 -108
  335. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.ts +0 -448
  336. package/src/lib/components/inputs/param-select/param-select.component.html +0 -106
  337. package/src/lib/components/inputs/param-select/param-select.component.less +0 -26
  338. package/src/lib/components/inputs/param-select/param-select.component.ts +0 -318
  339. package/src/lib/components/inputs/param-switcher/param-switcher.component.html +0 -8
  340. package/src/lib/components/inputs/param-switcher/param-switcher.component.less +0 -53
  341. package/src/lib/components/inputs/param-switcher/param-switcher.component.ts +0 -13
  342. package/src/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.ts +0 -29
  343. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.html +0 -19
  344. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.less +0 -76
  345. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.ts +0 -134
  346. package/src/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.ts +0 -8
  347. package/src/lib/components/inputs/param-text/param-text.component.html +0 -59
  348. package/src/lib/components/inputs/param-text/param-text.component.less +0 -33
  349. package/src/lib/components/inputs/param-text/param-text.component.ts +0 -36
  350. package/src/lib/components/inputs/param-textarea/param-textarea.component.html +0 -61
  351. package/src/lib/components/inputs/param-textarea/param-textarea.component.less +0 -21
  352. package/src/lib/components/inputs/param-textarea/param-textarea.component.ts +0 -33
  353. package/src/lib/components/inputs/param-toggle/param-toggle.component.html +0 -40
  354. package/src/lib/components/inputs/param-toggle/param-toggle.component.less +0 -69
  355. package/src/lib/components/inputs/param-toggle/param-toggle.component.ts +0 -14
  356. package/src/lib/components/inputs/param-tree/consts/param-tree.consts.ts +0 -59
  357. package/src/lib/components/inputs/param-tree/param-tree.component.html +0 -51
  358. package/src/lib/components/inputs/param-tree/param-tree.component.less +0 -3
  359. package/src/lib/components/inputs/param-tree/param-tree.component.ts +0 -282
  360. package/src/lib/components/inputs/param-tree/services/param-tree.service.ts +0 -176
  361. package/src/lib/components/inputs/param-tree/services/sync-tree-loader.service.ts +0 -18
  362. package/src/lib/components/inputs/param-tree/types/param-tree.types.ts +0 -39
  363. package/src/lib/components/inputs/param-tree/utils/param-tree.utils.ts +0 -18
  364. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.html +0 -78
  365. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.less +0 -109
  366. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.ts +0 -89
  367. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.html +0 -54
  368. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.less +0 -56
  369. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.ts +0 -91
  370. package/src/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.html +0 -5
  371. package/src/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.ts +0 -13
  372. package/src/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.html +0 -4
  373. package/src/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.ts +0 -11
  374. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.html +0 -95
  375. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.less +0 -183
  376. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.ts +0 -687
  377. package/src/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.ts +0 -32
  378. package/src/lib/components/menu-constructor/store/sproc-menu-constructor.consts.ts +0 -46
  379. package/src/lib/components/page-menu/README.md +0 -60
  380. package/src/lib/components/page-menu/schema/sproc-page-menu.consts.ts +0 -8
  381. package/src/lib/components/page-menu/schema/sproc-page-menu.schema.ts +0 -35
  382. package/src/lib/components/page-menu/schema/sproc-page-menu.tokens.ts +0 -5
  383. package/src/lib/components/page-menu/schema/sproc-page-menu.types.ts +0 -42
  384. package/src/lib/components/page-menu/sproc-page-menu.component.html +0 -166
  385. package/src/lib/components/page-menu/sproc-page-menu.component.less +0 -228
  386. package/src/lib/components/page-menu/sproc-page-menu.component.ts +0 -337
  387. package/src/lib/components/paginator/paginator.component.html +0 -97
  388. package/src/lib/components/paginator/paginator.component.less +0 -101
  389. package/src/lib/components/paginator/paginator.component.ts +0 -192
  390. package/src/lib/components/paginator/types/paginator.types.ts +0 -16
  391. package/src/lib/components/register-table/consts/register-table.consts.ts +0 -3
  392. package/src/lib/components/register-table/directives/cell-template.directive.ts +0 -11
  393. package/src/lib/components/register-table/directives/header-template.directive.ts +0 -11
  394. package/src/lib/components/register-table/model/schema.ts +0 -62
  395. package/src/lib/components/register-table/pipes/class-by-type.pipe.ts +0 -28
  396. package/src/lib/components/register-table/pipes/sticky-column.pipe.ts +0 -11
  397. package/src/lib/components/register-table/register-table.component.html +0 -257
  398. package/src/lib/components/register-table/register-table.component.less +0 -151
  399. package/src/lib/components/register-table/register-table.component.ts +0 -743
  400. package/src/lib/components/reset-settings-form/reset-settings-form.component.html +0 -14
  401. package/src/lib/components/reset-settings-form/reset-settings-form.component.less +0 -26
  402. package/src/lib/components/reset-settings-form/reset-settings-form.component.ts +0 -15
  403. package/src/lib/components/search-input/search-input.component.html +0 -6
  404. package/src/lib/components/search-input/search-input.component.less +0 -17
  405. package/src/lib/components/search-input/search-input.component.ts +0 -31
  406. package/src/lib/components/sliding-panel/sliding-panel.component.html +0 -13
  407. package/src/lib/components/sliding-panel/sliding-panel.component.less +0 -112
  408. package/src/lib/components/sliding-panel/sliding-panel.component.ts +0 -36
  409. package/src/lib/components/sliding-panel/sliding-panel.module.ts +0 -11
  410. package/src/lib/consts/date-time.consts.ts +0 -1
  411. package/src/lib/consts/index.ts +0 -8
  412. package/src/lib/consts/inputs.consts.ts +0 -9
  413. package/src/lib/consts/month.consts.ts +0 -82
  414. package/src/lib/consts/params.consts.ts +0 -1
  415. package/src/lib/consts/register-base.consts.ts +0 -40
  416. package/src/lib/core/form-group-wrapper/errors-consts.ts +0 -6
  417. package/src/lib/core/form-group-wrapper/form-group-wrapper.ts +0 -109
  418. package/src/lib/core/input-control/input-control.ts +0 -30
  419. package/src/lib/core/param/param-base.ts +0 -262
  420. package/src/lib/core/param/param-date-base.ts +0 -30
  421. package/src/lib/core/param/param-select-base.ts +0 -118
  422. package/src/lib/core/param/param-text-base.ts +0 -23
  423. package/src/lib/core/register-base/register-base.store.ts +0 -84
  424. package/src/lib/core/register-base/register-base.ts +0 -854
  425. package/src/lib/directives/date/date-time.types.ts +0 -36
  426. package/src/lib/directives/date/format-date.pipe.ts +0 -28
  427. package/src/lib/directives/number/number-only.directive.ts +0 -36
  428. package/src/lib/directives/sticky/sticky-relative.directive.ts +0 -30
  429. package/src/lib/directives/sticky/sticky-relative.service.ts +0 -34
  430. package/src/lib/directives/sticky/sticky.directive.ts +0 -189
  431. package/src/lib/services/date-time.service.ts +0 -399
  432. package/src/lib/services/dialog/dialog.service.ts +0 -62
  433. package/src/lib/services/dom-intersection.service.ts +0 -23
  434. package/src/lib/services/filter/filters-state.service.ts +0 -83
  435. package/src/lib/services/filter/filters-transmit.service.ts +0 -105
  436. package/src/lib/services/filter/filters.service.ts +0 -21
  437. package/src/lib/services/inputs-state.service.ts +0 -157
  438. package/src/lib/services/inputs.service.ts +0 -114
  439. package/src/lib/services/key-pressed.service.ts +0 -40
  440. package/src/lib/services/resize-window-observer.service.ts +0 -37
  441. package/src/lib/services/selected-objects-state.service.ts +0 -159
  442. package/src/lib/store/fast-query-store.service.ts +0 -132
  443. package/src/lib/types/hasura.types.ts +0 -41
  444. package/src/lib/types/inputs.types.ts +0 -63
  445. package/src/lib/types/params.types.ts +0 -42
  446. package/src/lib/types/register-base.types.ts +0 -161
  447. package/src/lib/types/sub-types.ts +0 -15
  448. package/src/lib/types/user-profile.types.ts +0 -18
  449. package/src/lib/utils/functions.ts +0 -11
  450. package/src/lib/utils/get-url-segment.ts +0 -46
  451. package/src/lib/utils/prizm.shared.module.ts +0 -176
  452. package/src/lib/utils/rxjs.ts +0 -33
  453. package/src/lib/utils/select-all-utils.ts +0 -16
  454. package/tsconfig.lib.json +0 -16
  455. package/tsconfig.lib.prod.json +0 -11
  456. package/tsconfig.schematics.json +0 -26
  457. package/tsconfig.spec.json +0 -15
  458. /package/{src/lib/components/column-settings/index.ts → lib/components/column-settings/index.d.ts} +0 -0
  459. /package/{src/lib/components/filters/index.ts → lib/components/filters/index.d.ts} +0 -0
  460. /package/{src/lib/components/index.ts → lib/components/index.d.ts} +0 -0
  461. /package/{src/lib/components/inputs/index.ts → lib/components/inputs/index.d.ts} +0 -0
  462. /package/{src/lib/components/inputs/param-switcher-date-time-range/index.ts → lib/components/inputs/param-switcher-date-time-range/index.d.ts} +0 -0
  463. /package/{src/lib/components/inputs/param-tree/index.ts → lib/components/inputs/param-tree/index.d.ts} +0 -0
  464. /package/{src/lib/components/menu-constructor/index.ts → lib/components/menu-constructor/index.d.ts} +0 -0
  465. /package/{src/lib/components/page-menu/index.ts → lib/components/page-menu/index.d.ts} +0 -0
  466. /package/{src/lib/components/register-table/index.ts → lib/components/register-table/index.d.ts} +0 -0
  467. /package/{src/lib/core/form-group-wrapper/index.ts → lib/core/form-group-wrapper/index.d.ts} +0 -0
  468. /package/{src/lib/core/index.ts → lib/core/index.d.ts} +0 -0
  469. /package/{src/lib/core/input-control/index.ts → lib/core/input-control/index.d.ts} +0 -0
  470. /package/{src/lib/core/param/index.ts → lib/core/param/index.d.ts} +0 -0
  471. /package/{src/lib/core/register-base/index.ts → lib/core/register-base/index.d.ts} +0 -0
  472. /package/{src/lib/directives/index.ts → lib/directives/index.d.ts} +0 -0
  473. /package/{src/lib/directives/sticky/index.ts → lib/directives/sticky/index.d.ts} +0 -0
  474. /package/{src/lib/services/dialog/index.ts → lib/services/dialog/index.d.ts} +0 -0
  475. /package/{src/lib/services/index.ts → lib/services/index.d.ts} +0 -0
  476. /package/{src/lib/store/index.ts → lib/store/index.d.ts} +0 -0
  477. /package/{src/lib/types/index.ts → lib/types/index.d.ts} +0 -0
  478. /package/{src/lib/utils/index.ts → lib/utils/index.d.ts} +0 -0
  479. /package/{src/public-api.ts → public-api.d.ts} +0 -0
@@ -0,0 +1,3 @@
1
+ export class SprocAbstractMenuConstructorStore {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtYWJzdHJhY3QtbWVudS1jb25zdHJ1Y3Rvci5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9tZW51LWNvbnN0cnVjdG9yL3N0b3JlL3Nwcm9jLWFic3RyYWN0LW1lbnUtY29uc3RydWN0b3Iuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxPQUFnQixpQ0FBaUM7Q0F3QnREIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQ2xzTWVudUl0ZW1JbnB1dCB9IGZyb20gJy4vc3Byb2MtbWVudS1jb25zdHJ1Y3Rvci5jb25zdHMnO1xuaW1wb3J0IHsgSUNsc01lbnVJdGVtIH0gZnJvbSAnLi4vLi4vcGFnZS1tZW51JztcbmltcG9ydCB7IEFwb2xsbyB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjYWxhclVVSUQgfSBmcm9tICdoYXN1cmEnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3Byb2NBYnN0cmFjdE1lbnVDb25zdHJ1Y3RvclN0b3JlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9tZW51SXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8SUNsc01lbnVJdGVtW10+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2xvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfYXBvbGxvOiBBcG9sbG87XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfZHI6IERlc3Ryb3lSZWY7XG5cbiAgcHVibGljIGFic3RyYWN0IG1lbnVJdGVtcyQ6IE9ic2VydmFibGU8SUNsc01lbnVJdGVtW10+O1xuICBwdWJsaWMgYWJzdHJhY3QgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBhYnN0cmFjdCBvcmlnaW5hbE1lbnU6IElDbHNNZW51SXRlbVtdO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRNZW51KCk6IElDbHNNZW51SXRlbVtdO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCB1cGRhdGVNZW51KFxuICAgIG9iamVjdHNUb1VwZGF0ZToge1xuICAgICAgX3NldDogSUNsc01lbnVJdGVtSW5wdXQ7XG4gICAgICB3aGVyZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICB9W10sXG4gICAgb2JqZWN0c1RvSW5zZXJ0PzogSUNsc01lbnVJdGVtSW5wdXRbXSxcbiAgICBpZHNUb0RlbGV0ZT86IFNjYWxhclVVSURbXVxuICApOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRMb2FkaW5nKHN0YXRlOiBib29sZWFuKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2ZldGNoTWVudSgpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ export const ROOT_TITLE = 'root';
2
+ export const NEW_ITEM_PREFIX = 'NEW_';
3
+ export const MIGRATION_HINT = 'Генерирует SQL код для миграции таблицы cls_menu_item. Генерация кода происходит на основе последней версии сохраненного меню.';
4
+ export const EMPTY_UUID = '00000000-0000-0000-0000-000000000000';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtbWVudS1jb25zdHJ1Y3Rvci5jb25zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvbWVudS1jb25zdHJ1Y3Rvci9zdG9yZS9zcHJvYy1tZW51LWNvbnN0cnVjdG9yLmNvbnN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDekIsZ0lBQWdJLENBQUM7QUF3Qm5JLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjYWxhclVVSUQgfSBmcm9tICdoYXN1cmEnO1xuaW1wb3J0IHsgSUNsc01lbnVJdGVtIH0gZnJvbSAnLi4vLi4vcGFnZS1tZW51JztcblxuZXhwb3J0IGludGVyZmFjZSBGbGF0Tm9kZSB7XG4gIGlkOiBTY2FsYXJVVUlEO1xuICBpZF9wYXJlbnQ6IFNjYWxhclVVSUQgfCBudWxsO1xuICB0aXRsZTogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgb3JkZXJfbnVtOiBudW1iZXI7XG4gIGFsbG93ZWRfcm9sZXM6IHN0cmluZyB8IG51bGw7XG4gIGRlcHRoOiBudW1iZXI7XG4gIGNvbGxhcHNlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBST09UX1RJVExFID0gJ3Jvb3QnO1xuXG5leHBvcnQgY29uc3QgTkVXX0lURU1fUFJFRklYID0gJ05FV18nO1xuXG5leHBvcnQgY29uc3QgTUlHUkFUSU9OX0hJTlQgPVxuICAn0JPQtdC90LXRgNC40YDRg9C10YIgU1FMINC60L7QtCDQtNC70Y8g0LzQuNCz0YDQsNGG0LjQuCDRgtCw0LHQu9C40YbRiyBjbHNfbWVudV9pdGVtLiDQk9C10L3QtdGA0LDRhtC40Y8g0LrQvtC00LAg0L/RgNC+0LjRgdGF0L7QtNC40YIg0L3QsCDQvtGB0L3QvtCy0LUg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGB0LjQuCDRgdC+0YXRgNCw0L3QtdC90L3QvtCz0L4g0LzQtdC90Y4uJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2xzTWVudUl0ZW1SZXNwb25zZSB7XG4gIHVzcl9jbHNfbWVudV9pdGVtOiBJQ2xzTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IHR5cGUgQWxlcnRBcHBlYXJhbmNlID0gJ2luZm8nIHwgJ25lZ2F0aXZlJyB8ICd3YXJuaW5nJyB8ICdwb3NpdGl2ZScgfCAnbmV1dHJhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsc01lbnVJdGVtSW5wdXQge1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgcm91dGU6IHN0cmluZyB8IG51bGw7XG4gIGNvZGU6IHN0cmluZyB8IG51bGw7XG4gIGljb246IHN0cmluZyB8IG51bGw7XG4gIG9yZGVyX251bTogbnVtYmVyO1xuICBhbGxvd2VkX3JvbGVzOiBzdHJpbmdbXSB8IG51bGw7XG4gIGlkX3BhcmVudDogU2NhbGFyVVVJRCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lbnVDb25zdHJ1Y3RvckVycm9yIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY29udGVudDogYW55O1xuICBhcHBlYXJhbmNlOiBBbGVydEFwcGVhcmFuY2U7XG59XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9VVUlEID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const MENU_CONSTRUCTOR_STORE_TOKEN = new InjectionToken('MENU_CONSTRUCTOR_STORE_TOKEN');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtbWVudS50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvbWVudS1jb25zdHJ1Y3Rvci9zdG9yZS9zcHJvYy1tZW51LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUM1RCw4QkFBOEIsQ0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcHJvY0Fic3RyYWN0TWVudUNvbnN0cnVjdG9yU3RvcmUgfSBmcm9tICcuL3Nwcm9jLWFic3RyYWN0LW1lbnUtY29uc3RydWN0b3Iuc3RvcmUnO1xuXG5leHBvcnQgY29uc3QgTUVOVV9DT05TVFJVQ1RPUl9TVE9SRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTcHJvY0Fic3RyYWN0TWVudUNvbnN0cnVjdG9yU3RvcmU+KFxuICAnTUVOVV9DT05TVFJVQ1RPUl9TVE9SRV9UT0tFTicsXG4pO1xuIl19
@@ -0,0 +1,6 @@
1
+ export { SprocPageMenuComponent } from './sproc-page-menu.component';
2
+ export * from './schema/sproc-page-menu.schema';
3
+ export * from './schema/sproc-page-menu.tokens';
4
+ export * from './schema/sproc-page-menu.consts';
5
+ export * from './schema/sproc-page-menu.types';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvcGFnZS1tZW51L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTcHJvY1BhZ2VNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9zcHJvYy1wYWdlLW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS5zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvc3Byb2MtcGFnZS1tZW51LnRva2Vucyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9zcHJvYy1wYWdlLW1lbnUuY29uc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS50eXBlcyc7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ export const SIDE_MENU_OPENED_WIDTH = 350;
2
+ export const SIDE_MENU_CLOSED_WIDTH = 48;
3
+ export var EPageMenuIconsSrc;
4
+ (function (EPageMenuIconsSrc) {
5
+ EPageMenuIconsSrc["CHEVRON_RIGHT"] = "assets/ngx-register-base/icons/chevron-right.svg";
6
+ EPageMenuIconsSrc["CHEVRON_UP"] = "assets/ngx-register-base/icons/chevron-up.svg";
7
+ EPageMenuIconsSrc["MENU_CHEVRON"] = "assets/ngx-register-base/icons/chevron-menu.svg";
8
+ })(EPageMenuIconsSrc || (EPageMenuIconsSrc = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtcGFnZS1tZW51LmNvbnN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLW1lbnUvc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS5jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6QyxNQUFNLENBQU4sSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLHVGQUFrRSxDQUFBO0lBQ2xFLGlGQUE0RCxDQUFBO0lBQzVELHFGQUFnRSxDQUFBO0FBQ2xFLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNJREVfTUVOVV9PUEVORURfV0lEVEggPSAzNTA7XG5leHBvcnQgY29uc3QgU0lERV9NRU5VX0NMT1NFRF9XSURUSCA9IDQ4O1xuXG5leHBvcnQgZW51bSBFUGFnZU1lbnVJY29uc1NyYyB7XG4gIENIRVZST05fUklHSFQgPSAnYXNzZXRzL25neC1yZWdpc3Rlci1iYXNlL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJyxcbiAgQ0hFVlJPTl9VUCA9ICdhc3NldHMvbmd4LXJlZ2lzdGVyLWJhc2UvaWNvbnMvY2hldnJvbi11cC5zdmcnLFxuICBNRU5VX0NIRVZST04gPSAnYXNzZXRzL25neC1yZWdpc3Rlci1iYXNlL2ljb25zL2NoZXZyb24tbWVudS5zdmcnLFxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtcGFnZS1tZW51LnNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLW1lbnUvc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS5zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNjcmVlbiB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbk1lbnVJdGVtIHtcbiAgdGV4dDogc3RyaW5nO1xuICBleHRyYVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsO1xuICBpY29uPzogc3RyaW5nIHwgbnVsbDtcbiAgaXNHcm91cD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogTmF2aWdhdGlvbk1lbnVJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSXRlbSBleHRlbmRzIE5hdmlnYXRpb25NZW51SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogQ3VzdG9tSXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIElTY3JlZW4ge1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBJTmF2aWdhdGlvbkJhc2VbXTtcbiAgcm91dGU/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBhY2Nlc3NlZFJvbGVzPzogc3RyaW5nW107IC8vINC10YHQu9C4INC90LUg0LfQsNC00LDQvSwg0YLQviDQtNC+0YHRgtGD0L/QtdC9INC00LvRjyDQstGB0LXRhVxuICBwYXJlbnQ/OiBJTmF2aWdhdGlvbkJhc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5hdmlnYXRpb24gZXh0ZW5kcyBPbWl0PElOYXZpZ2F0aW9uQmFzZSwgJ2lzRXhwYW5kZWQnPiB7XG4gIGNvZGU6IHN0cmluZztcbiAgY2hpbGRyZW4/OiBJTmF2aWdhdGlvbltdO1xuICBwYXJlbnQ/OiBJTmF2aWdhdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const PAGE_MENU_STATE = new InjectionToken('PAGE_MENU_STATE');
3
+ // export const PAGE_MENU_STORE = new InjectionToken<AbstractMenuStateService>('PAGE_MENU_STATE');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtcGFnZS1tZW51LnRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLW1lbnUvc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS50b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQTJCLGlCQUFpQixDQUFDLENBQUM7QUFDL0Ysa0dBQWtHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0TWVudVN0YXRlU2VydmljZSB9IGZyb20gJy4vc3Byb2MtcGFnZS1tZW51LnR5cGVzJztcblxuZXhwb3J0IGNvbnN0IFBBR0VfTUVOVV9TVEFURSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBYnN0cmFjdE1lbnVTdGF0ZVNlcnZpY2U+KCdQQUdFX01FTlVfU1RBVEUnKTtcbi8vIGV4cG9ydCBjb25zdCBQQUdFX01FTlVfU1RPUkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48QWJzdHJhY3RNZW51U3RhdGVTZXJ2aWNlPignUEFHRV9NRU5VX1NUQVRFJyk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export class AbstractMenuStateService {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtcGFnZS1tZW51LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZ2lzdGVyLWJhc2Uvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtbWVudS9zY2hlbWEvc3Byb2MtcGFnZS1tZW51LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxNQUFNLE9BQWdCLHdCQUF3QjtDQXlCN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTY2FsYXJVVUlEIH0gZnJvbSAnaGFzdXJhJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2xzTWVudUl0ZW0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIGlkOiBTY2FsYXJVVUlEO1xuICBpZF9wYXJlbnQ6IHN0cmluZztcbiAgcm91dGU6IHN0cmluZyB8IG51bGw7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICBpY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFsbG93ZWRfcm9sZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgaXNfZGVsZXRlZDogYm9vbGVhbjtcbiAgb3JkZXJfbnVtOiBudW1iZXIgfCBudWxsO1xuICBjaGlsZHJlbj86IElDbHNNZW51SXRlbVtdO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNZW51U3RhdGVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUsINC+0YLRgNCw0LbQsNGO0YnQuNC5INGC0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDQvNC10L3RjiAo0L7RgtC60YDRi9GC0L4gLyDQt9Cw0LrRgNGL0YLQvilcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpc09wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlLCDRgdC40LPQvdCw0LvQuNC30LjRgNGD0Y7RidC40LksINC00L7RgdGC0YPQv9C90L4g0LvQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LUg0LzQtdC90Y5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0b2dnbGVEaXNhYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqINCi0LXQutGD0YnQtdC1INGB0LjQvdGF0YDQvtC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDQvNC10L3RjlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldCBpc09wZW4oKTogYm9vbGVhbjtcblxuICAvKipcbiAgICog0J/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC80LXQvdGOXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0T3Blbih2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqINCf0LXRgNC10LrQu9GO0YfQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC80LXQvdGOXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdG9nZ2xlKCk6IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,275 @@
1
+ import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, HostBinding, inject, input, signal, } from '@angular/core';
2
+ import { EPageMenuIconsSrc, SIDE_MENU_CLOSED_WIDTH, SIDE_MENU_OPENED_WIDTH, } from './schema/sproc-page-menu.consts';
3
+ import { Router, RouterLink } from '@angular/router';
4
+ import { PAGE_MENU_STATE } from './schema/sproc-page-menu.tokens';
5
+ import { toSignal } from '@angular/core/rxjs-interop';
6
+ import { AsyncPipe, NgClass, NgOptimizedImage, NgTemplateOutlet } from '@angular/common';
7
+ import { animate, style, transition, trigger } from '@angular/animations';
8
+ import * as i0 from "@angular/core";
9
+ export class SprocPageMenuComponent {
10
+ constructor() {
11
+ this.menuItems = input.required();
12
+ this.menuIconsSrc = input('');
13
+ this.openLogoSrc = input('');
14
+ this.closedLogoSrc = input('');
15
+ this.findActiveSection = input.required();
16
+ // TODO Добавить кастомную ширину меню
17
+ this.menuOpenedWidth = `${SIDE_MENU_OPENED_WIDTH}px`;
18
+ this.menuClosedWidth = `${SIDE_MENU_CLOSED_WIDTH}px`;
19
+ this._router = inject(Router);
20
+ this._state = inject(PAGE_MENU_STATE);
21
+ this._dr = inject(DestroyRef);
22
+ this.toggleDisabled$ = this._state.toggleDisabled$;
23
+ this.menuState = toSignal(this._state.isOpen$);
24
+ this.selectedSection = signal('register');
25
+ this.expandedIds = signal(new Set());
26
+ this.selectedItem = computed(() => this.selectedSection() ? this.codeToItem[this.selectedSection()] : null);
27
+ // Хранит parent элементы выбранного пункта меню
28
+ this.parentItems = computed(() => {
29
+ const item = this.selectedItem();
30
+ if (!item) {
31
+ return [];
32
+ }
33
+ const parents = [];
34
+ let current = item.parent;
35
+ while (current) {
36
+ parents.push(current);
37
+ current = current.parent;
38
+ }
39
+ return parents;
40
+ });
41
+ this.parentItemCodes = computed(() => {
42
+ const parentItems = this.parentItems();
43
+ return new Set(parentItems.map((val) => val.code ?? ''));
44
+ });
45
+ this.navigationHierarchy = signal([]);
46
+ this.codeToItem = {};
47
+ this.isOpenServiceVersionInfo = false;
48
+ this.ICONS_SRC = EPageMenuIconsSrc;
49
+ // Построить меню и найти активную секцию
50
+ effect(() => {
51
+ const menuItems = this.menuItems();
52
+ this.buildMenu(menuItems);
53
+ this._findActiveSection();
54
+ }, { allowSignalWrites: true });
55
+ }
56
+ addMenuScrollbar(id) {
57
+ setTimeout(() => {
58
+ // TODO Меню второго уровня есть скролл,третьего нет
59
+ const collapsedMenu = document.querySelector(`[id="${id}"]`);
60
+ const sideMenu = collapsedMenu?.querySelector('#side-menu__subitems');
61
+ const sideMenuLevelTwo = sideMenu?.querySelector('#side-menu__subitems');
62
+ const subitem = sideMenuLevelTwo
63
+ ? sideMenuLevelTwo.querySelectorAll('.side-menu__subitem')
64
+ : sideMenu?.querySelectorAll('.side-menu__subitem');
65
+ if (subitem) {
66
+ const lastSubitem = subitem[subitem.length - 1];
67
+ const rect = lastSubitem?.getBoundingClientRect();
68
+ if (sideMenu && window.innerHeight - rect.bottom < 0) {
69
+ // 40 тк высота плашки меню
70
+ sideMenu.style.height = `${subitem.length * 40 + (window.innerHeight - rect.bottom - 1)}px`;
71
+ sideMenu.style.overflowY = 'scroll';
72
+ sideMenu.style.overflowX = 'hidden';
73
+ }
74
+ if (window.innerHeight - rect.bottom < 0 && sideMenuLevelTwo) {
75
+ // 40 тк высота плашки меню
76
+ sideMenuLevelTwo.style.height = `${subitem.length * 40 + (window.innerHeight - rect.bottom - 1)}px`;
77
+ sideMenuLevelTwo.style.overflowY = 'scroll';
78
+ sideMenuLevelTwo.style.overflowX = 'hidden';
79
+ }
80
+ }
81
+ }, 0);
82
+ }
83
+ ngOnInit() {
84
+ this._state.isOpen$.subscribe((menuState) => {
85
+ if (menuState) {
86
+ this.findRoute(this.selectedSection());
87
+ }
88
+ else {
89
+ this.collapseMenu();
90
+ }
91
+ });
92
+ }
93
+ toggleNavigation() {
94
+ this._state.toggle();
95
+ }
96
+ toggleItem(item) {
97
+ this.addMenuScrollbar(item.id || '');
98
+ this.expandedIds.update((currentExpand) => {
99
+ const code = item.code;
100
+ const copy = new Set(currentExpand);
101
+ if (copy.has(code)) {
102
+ copy.delete(code);
103
+ }
104
+ else {
105
+ copy.clear();
106
+ copy.add(code);
107
+ const parents = this.getParents(item);
108
+ for (const parent of parents) {
109
+ copy.add(parent.code);
110
+ }
111
+ }
112
+ return copy;
113
+ });
114
+ }
115
+ collapseMenu(exception) {
116
+ let codes = [];
117
+ if (exception) {
118
+ const parents = this.getParents(exception);
119
+ codes = [exception.code, ...parents.map((parent) => parent.code)];
120
+ }
121
+ this.expandedIds.set(new Set(codes));
122
+ }
123
+ get isMenuOpened() {
124
+ return this._state.isOpen;
125
+ }
126
+ get isMenuClosed() {
127
+ return !this._state.isOpen;
128
+ }
129
+ isExternalLink(route) {
130
+ if (!route) {
131
+ return false;
132
+ }
133
+ return /^(https?:\/\/|www\.)/i.test(route);
134
+ }
135
+ handleNavigation(item) {
136
+ if (!item.route) {
137
+ return;
138
+ }
139
+ if (this.isExternalLink(item.route)) {
140
+ window.open(item.route, '_blank');
141
+ }
142
+ else {
143
+ this._router.navigate([item.route]);
144
+ this.selectedSection.set(item.code ?? '');
145
+ if (this.isMenuClosed) {
146
+ this.collapseMenu();
147
+ }
148
+ }
149
+ }
150
+ serviceInfoOnActiveZone(active) {
151
+ this.isOpenServiceVersionInfo = active && this.isOpenServiceVersionInfo;
152
+ }
153
+ serviceInfoOnObscured(obscured) {
154
+ if (obscured) {
155
+ this.isOpenServiceVersionInfo = false;
156
+ }
157
+ }
158
+ buildMenu(menu) {
159
+ const sortedMenuItems = [...menu].sort((a, b) => (a.order_num ?? 0) - (b.order_num ?? 0));
160
+ const menuHash = {};
161
+ for (const item of sortedMenuItems) {
162
+ menuHash[item.id] = {
163
+ title: item.title ?? '',
164
+ route: item.route ?? '',
165
+ id: item.id,
166
+ children: [],
167
+ code: item.code,
168
+ icon: item.icon,
169
+ accessedRoles: undefined,
170
+ parent: undefined,
171
+ };
172
+ }
173
+ const rootMenuItems = [];
174
+ for (const item of sortedMenuItems) {
175
+ if (item.id_parent && menuHash[item.id_parent]) {
176
+ const parent = menuHash[item.id_parent];
177
+ const child = menuHash[item.id];
178
+ child.parent = parent;
179
+ parent.children?.push(child);
180
+ }
181
+ else {
182
+ rootMenuItems.push(menuHash[item.id]);
183
+ }
184
+ }
185
+ this.navigationHierarchy.set(rootMenuItems);
186
+ this.codeToItem = {};
187
+ for (const id of Object.keys(menuHash)) {
188
+ const item = menuHash[id];
189
+ if (item.code) {
190
+ this.codeToItem[item.code] = item;
191
+ }
192
+ }
193
+ }
194
+ findRoute(routeToFind) {
195
+ const routeItem = this.codeToItem[routeToFind];
196
+ if (!routeItem) {
197
+ return;
198
+ }
199
+ if (this.isMenuOpened) {
200
+ this.toggleItem(routeItem);
201
+ }
202
+ this.selectedSection.set(routeItem.code ?? '');
203
+ }
204
+ _findActiveSection() {
205
+ this.findActiveSection()(this.resetSelection, this.findRoute);
206
+ }
207
+ getParents(item) {
208
+ const parents = [];
209
+ let current = item.parent;
210
+ while (current) {
211
+ parents.push(current);
212
+ current = current.parent;
213
+ }
214
+ return parents;
215
+ }
216
+ resetSelection() {
217
+ this.expandedIds.set(new Set());
218
+ this.selectedSection.set('');
219
+ }
220
+ collectChildren(item) {
221
+ const result = [];
222
+ const queue = item.children?.slice() ?? [];
223
+ let index = 0;
224
+ while (index < queue.length) {
225
+ const node = queue[index];
226
+ result.push(node);
227
+ if (node.children) {
228
+ queue.push(...node.children);
229
+ }
230
+ index += 1;
231
+ }
232
+ return result;
233
+ }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SprocPageMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SprocPageMenuComponent, isStandalone: true, selector: "sproc-page-menu", inputs: { menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, menuIconsSrc: { classPropertyName: "menuIconsSrc", publicName: "menuIconsSrc", isSignal: true, isRequired: false, transformFunction: null }, openLogoSrc: { classPropertyName: "openLogoSrc", publicName: "openLogoSrc", isSignal: true, isRequired: false, transformFunction: null }, closedLogoSrc: { classPropertyName: "closedLogoSrc", publicName: "closedLogoSrc", isSignal: true, isRequired: false, transformFunction: null }, findActiveSection: { classPropertyName: "findActiveSection", publicName: "findActiveSection", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style.--page-menu-opened-width": "this.menuOpenedWidth", "style.--page-menu-closed-width": "this.menuClosedWidth" } }, ngImport: i0, template: "<section [class]=\"menuState() ? 'side-menu side-menu_opened' : 'side-menu side-menu_closed'\">\n <div class=\"side-menu__header\">\n <img\n [src]=\"menuState() ? openLogoSrc() : closedLogoSrc()\"\n alt=\"Logo Icon\"\n class=\"side-menu__header__logo\"\n />\n <img\n (click)=\"toggleNavigation()\"\n [class.disabled]=\"toggleDisabled$ | async\"\n [height]=\"16\"\n [ngClass]=\"menuState() ? 'side-menu__header__chevron_opened' : 'side-menu__header__chevron_closed'\"\n [ngSrc]=\"ICONS_SRC.MENU_CHEVRON\" [width]=\"16\" alt=\"Menu Chevron\"/>\n </div>\n\n @if (menuState()) {\n <div class=\"expanded-menu-content\">\n @for (navigation_item of navigationHierarchy(); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n menuItemOpened;\n context: { navigation_item: navigation_item, level: 0 }\n \"\n ></ng-container>\n }\n </div>\n\n <ng-content></ng-content>\n } @else {\n @for (navigation_item of navigationHierarchy(); track $index) {\n <ng-container\n *ngTemplateOutlet=\"closedMenu; context: { navigation_item: navigation_item }\"\n ></ng-container>\n }\n }\n</section>\n\n<ng-template #menuItemOpened let-level=\"level\" let-navigation_item=\"navigation_item\">\n @let isExpanded = expandedIds().has(navigation_item.code);\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let icon = navigation_item.icon;\n @let isHighlighted = selectedSection() === code;\n\n <a\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [@fadeInOut]\n [class.menu-item_selected]=\"isHighlighted\"\n [class.padding-level-0]=\"level === 0\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n [style.padding-left.px]=\"level === 0 ? 0 : 44 + level * 20\"\n class=\"menu-item\"\n >\n @if (icon) {\n <span class=\"menu-item__icon\">\n <img [alt]=\"icon\" [width]=\"16\" [height]=\"16\" [ngSrc]=\"menuIconsSrc() + icon + '.svg'\">\n </span>\n }\n <span class=\"menu-item__title\"> {{ navigation_item.title }} </span>\n @if (childrenCount > 0) {\n <img\n class=\"menu-item__chevron\"\n [class.menu-item__chevron_rotated]=\"!isExpanded\"\n [alt]=\"icon\" [width]=\"16\" [height]=\"16\"\n [ngSrc]=\"ICONS_SRC.CHEVRON_UP\">\n }\n </a>\n @if (isExpanded && childrenCount > 0) {\n @for (children of navigation_item.children ?? []; track $index) {\n <ng-container\n *ngTemplateOutlet=\"menuItemOpened; context: { navigation_item: children, level: level + 1 }\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #closedMenu let-navigation_item=\"navigation_item\">\n @let isExpanded = expandedIds().has(navigation_item.code);\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let icon = navigation_item.icon;\n @let isHighlighted = selectedSection() === code || parentItemCodes().has(code);\n\n <div\n (mouseleave)=\"collapseMenu()\"\n [id]=\"navigation_item.id\"\n class=\"collapsed-menu-content\"\n >\n @if (icon) {\n <a\n class=\"menu-item__icon_closed\"\n [class.menu-item_selected]=\"isHighlighted\"\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n (mouseenter)=\"toggleItem(navigation_item)\">\n <img\n [height]=\"16\"\n [width]=\"16\"\n [ngSrc]=\"menuIconsSrc() + icon + '.svg'\" alt=\"Menu Chevron\"/>\n </a>\n }\n <ng-container\n *ngTemplateOutlet=\"\n menuClosedItem;\n context: { item: navigation_item, level: 1, topPadding: 1 }\n \"\n >\n </ng-container>\n @if (isExpanded && childrenCount > 0) {\n <div class=\"static-item\">\n <span class=\"static-item__element\">\n {{ navigation_item.title }}\n </span>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #menuClosedItem let-item=\"item\" let-level=\"level\" let-topPadding=\"topPadding\">\n @let isExpanded = expandedIds().has(item.code);\n <div [id]=\"item.id\">\n @if (isExpanded && item.children.length > 0) {\n <div\n class=\"side-menu__subitems\"\n [class.padding-level-1]=\"level === 1\"\n [style.top.px]=\"topPadding * 40\"\n id=\"side-menu__subitems\"\n >\n @for (navigation_item of item.children; track navigation_item; let index = $index) {\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let isHighlighted = selectedSection() === code || parentItemCodes().has(code);\n <a\n class=\"side-menu__subitem\"\n [class.menu-item_selected]=\"isHighlighted\"\n (mouseenter)=\"childrenCount > 0 ? toggleItem(navigation_item) : collapseMenu(navigation_item)\"\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n >\n <span\n [class.padding-level-1]=\"level === 1\">{{\n navigation_item.title\n }}</span>\n\n @if (childrenCount > 0) {\n <img\n class=\"chevron-right\"\n [height]=\"16\"\n [width]=\"16\"\n [ngSrc]=\"ICONS_SRC.CHEVRON_RIGHT\" alt=\"Menu Chevron\"/>\n }\n </a>\n <ng-container\n *ngTemplateOutlet=\"\n menuClosedItem;\n context: { item: navigation_item, level: level + 1, topPadding: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{background:var(--page-menu-main);height:100vh;max-height:100vh;z-index:1000;display:flex}:host tui-icon{width:16px;height:16px}:host ::-webkit-scrollbar{width:6px;background:var(--page-menu-main)}:host ::-webkit-scrollbar-thumb{width:6px;background:#c3c7cf;border-radius:2px}:host .side-menu{transition:all var(--page-menu-transition-time);display:flex;color:var(--main-white);flex-direction:column;flex-shrink:0;font-size:14px}:host .side-menu__header{height:64px;width:100%;display:flex;align-items:center;justify-content:space-between}:host .side-menu__header__chevron{cursor:pointer;transition:rotate .15s linear}:host .side-menu__header__chevron_opened{margin:0 8px 0 0;rotate:0deg}:host .side-menu__header__chevron_closed{margin:0 0 0 -4px;rotate:180deg}:host .side-menu__header .disabled{pointer-events:none}:host .side-menu__header__logo{margin-left:8px}:host .side-menu_opened{width:var(--page-menu-opened-width)}:host .side-menu_closed{width:var(--page-menu-closed-width)}:host .side-menu__subitems,:host .side-menu .static-item{position:absolute;display:flex;z-index:3;right:0;top:0;flex-direction:column}:host .side-menu__subitems{width:294px;box-shadow:0 2px 6px #28282840;left:294px}:host .side-menu__subitems.padding-level-1{left:48px}:host .side-menu__subitems .chevron-right{margin-right:16px}:host .side-menu__subitems a span{height:40px;display:flex;align-items:center;padding-left:40px}:host .side-menu__subitems a span .padding-level-1{padding-left:64px}:host .side-menu .static-item{color:var(--main-black);left:48px;top:0}:host .side-menu__subitem,:host .side-menu .static-item__element{box-sizing:border-box;display:flex;align-items:center;color:var(--main-white);height:40px;width:294px;background:var(--page-menu-main);justify-content:space-between}:host .side-menu__subitem:hover{background:var(--page-menu-main-hovered);cursor:pointer}:host .side-menu .static-item__element{justify-content:unset;padding-left:16px}:host .side-menu .expanded-menu-content{height:calc(100vh - 103px);-ms-overflow-style:none;scrollbar-width:none;overflow-y:scroll}:host .side-menu .expanded-menu-content::-webkit-scrollbar{display:none}:host .side-menu .collapsed-menu-content{position:relative}:host .side-menu .menu-item{display:flex;flex-direction:row;cursor:pointer;justify-content:start;align-items:center;box-sizing:border-box;transition:background .9ms;height:40px}:host .side-menu .menu-item_selected{background:var(--page-menu-active)!important;box-shadow:inset 3px 0 var(--main-white)}:host .side-menu .menu-item_selected:hover{background:var(--page-menu-active)!important}:host .side-menu .menu-item__chevron{margin-left:auto;margin-right:8px;transition:rotate .15s linear}:host .side-menu .menu-item__chevron_rotated{rotate:180deg}:host .side-menu .menu-item__title{padding:10px 0 10px 8px;overflow:hidden;color:var(--main-white);font-variant-numeric:lining-nums tabular-nums;text-overflow:ellipsis;white-space:nowrap;font-family:Inter,serif;font-size:14px;font-weight:300}:host .side-menu .menu-item__title .page-menu-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300}:host .side-menu .menu-item__icon{padding:0 8px 0 16px}:host .side-menu .menu-item__icon_closed{display:flex;height:40px;justify-content:center;align-items:center}:host .side-menu .menu-item__icon_closed:hover{background:var(--page-menu-main-hovered);cursor:pointer}:host .side-menu .menu-item:hover{background:var(--page-menu-main-hovered)}:host a{text-decoration:none;color:unset}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], animations: [
236
+ trigger('fadeInOut', [
237
+ transition(':enter', [
238
+ style({
239
+ opacity: 0,
240
+ transform: 'translateY(-10px)',
241
+ transformOrigin: 'top',
242
+ }),
243
+ animate('0.15s ease-in', style({
244
+ opacity: 1,
245
+ transform: 'translateY(0)',
246
+ })),
247
+ ]),
248
+ ]),
249
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SprocPageMenuComponent, decorators: [{
252
+ type: Component,
253
+ args: [{ selector: 'sproc-page-menu', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, NgTemplateOutlet, NgClass, AsyncPipe, NgOptimizedImage], animations: [
254
+ trigger('fadeInOut', [
255
+ transition(':enter', [
256
+ style({
257
+ opacity: 0,
258
+ transform: 'translateY(-10px)',
259
+ transformOrigin: 'top',
260
+ }),
261
+ animate('0.15s ease-in', style({
262
+ opacity: 1,
263
+ transform: 'translateY(0)',
264
+ })),
265
+ ]),
266
+ ]),
267
+ ], template: "<section [class]=\"menuState() ? 'side-menu side-menu_opened' : 'side-menu side-menu_closed'\">\n <div class=\"side-menu__header\">\n <img\n [src]=\"menuState() ? openLogoSrc() : closedLogoSrc()\"\n alt=\"Logo Icon\"\n class=\"side-menu__header__logo\"\n />\n <img\n (click)=\"toggleNavigation()\"\n [class.disabled]=\"toggleDisabled$ | async\"\n [height]=\"16\"\n [ngClass]=\"menuState() ? 'side-menu__header__chevron_opened' : 'side-menu__header__chevron_closed'\"\n [ngSrc]=\"ICONS_SRC.MENU_CHEVRON\" [width]=\"16\" alt=\"Menu Chevron\"/>\n </div>\n\n @if (menuState()) {\n <div class=\"expanded-menu-content\">\n @for (navigation_item of navigationHierarchy(); track $index) {\n <ng-container\n *ngTemplateOutlet=\"\n menuItemOpened;\n context: { navigation_item: navigation_item, level: 0 }\n \"\n ></ng-container>\n }\n </div>\n\n <ng-content></ng-content>\n } @else {\n @for (navigation_item of navigationHierarchy(); track $index) {\n <ng-container\n *ngTemplateOutlet=\"closedMenu; context: { navigation_item: navigation_item }\"\n ></ng-container>\n }\n }\n</section>\n\n<ng-template #menuItemOpened let-level=\"level\" let-navigation_item=\"navigation_item\">\n @let isExpanded = expandedIds().has(navigation_item.code);\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let icon = navigation_item.icon;\n @let isHighlighted = selectedSection() === code;\n\n <a\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [@fadeInOut]\n [class.menu-item_selected]=\"isHighlighted\"\n [class.padding-level-0]=\"level === 0\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n [style.padding-left.px]=\"level === 0 ? 0 : 44 + level * 20\"\n class=\"menu-item\"\n >\n @if (icon) {\n <span class=\"menu-item__icon\">\n <img [alt]=\"icon\" [width]=\"16\" [height]=\"16\" [ngSrc]=\"menuIconsSrc() + icon + '.svg'\">\n </span>\n }\n <span class=\"menu-item__title\"> {{ navigation_item.title }} </span>\n @if (childrenCount > 0) {\n <img\n class=\"menu-item__chevron\"\n [class.menu-item__chevron_rotated]=\"!isExpanded\"\n [alt]=\"icon\" [width]=\"16\" [height]=\"16\"\n [ngSrc]=\"ICONS_SRC.CHEVRON_UP\">\n }\n </a>\n @if (isExpanded && childrenCount > 0) {\n @for (children of navigation_item.children ?? []; track $index) {\n <ng-container\n *ngTemplateOutlet=\"menuItemOpened; context: { navigation_item: children, level: level + 1 }\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #closedMenu let-navigation_item=\"navigation_item\">\n @let isExpanded = expandedIds().has(navigation_item.code);\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let icon = navigation_item.icon;\n @let isHighlighted = selectedSection() === code || parentItemCodes().has(code);\n\n <div\n (mouseleave)=\"collapseMenu()\"\n [id]=\"navigation_item.id\"\n class=\"collapsed-menu-content\"\n >\n @if (icon) {\n <a\n class=\"menu-item__icon_closed\"\n [class.menu-item_selected]=\"isHighlighted\"\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n (mouseenter)=\"toggleItem(navigation_item)\">\n <img\n [height]=\"16\"\n [width]=\"16\"\n [ngSrc]=\"menuIconsSrc() + icon + '.svg'\" alt=\"Menu Chevron\"/>\n </a>\n }\n <ng-container\n *ngTemplateOutlet=\"\n menuClosedItem;\n context: { item: navigation_item, level: 1, topPadding: 1 }\n \"\n >\n </ng-container>\n @if (isExpanded && childrenCount > 0) {\n <div class=\"static-item\">\n <span class=\"static-item__element\">\n {{ navigation_item.title }}\n </span>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #menuClosedItem let-item=\"item\" let-level=\"level\" let-topPadding=\"topPadding\">\n @let isExpanded = expandedIds().has(item.code);\n <div [id]=\"item.id\">\n @if (isExpanded && item.children.length > 0) {\n <div\n class=\"side-menu__subitems\"\n [class.padding-level-1]=\"level === 1\"\n [style.top.px]=\"topPadding * 40\"\n id=\"side-menu__subitems\"\n >\n @for (navigation_item of item.children; track navigation_item; let index = $index) {\n @let childrenCount = navigation_item.children.length;\n @let code = navigation_item.code;\n @let route = navigation_item.code;\n @let isHighlighted = selectedSection() === code || parentItemCodes().has(code);\n <a\n class=\"side-menu__subitem\"\n [class.menu-item_selected]=\"isHighlighted\"\n (mouseenter)=\"childrenCount > 0 ? toggleItem(navigation_item) : collapseMenu(navigation_item)\"\n (click)=\"childrenCount === 0 ? handleNavigation(navigation_item) : toggleItem(navigation_item)\"\n [routerLink]=\"childrenCount > 0 || isExternalLink(route) ? undefined : route\"\n >\n <span\n [class.padding-level-1]=\"level === 1\">{{\n navigation_item.title\n }}</span>\n\n @if (childrenCount > 0) {\n <img\n class=\"chevron-right\"\n [height]=\"16\"\n [width]=\"16\"\n [ngSrc]=\"ICONS_SRC.CHEVRON_RIGHT\" alt=\"Menu Chevron\"/>\n }\n </a>\n <ng-container\n *ngTemplateOutlet=\"\n menuClosedItem;\n context: { item: navigation_item, level: level + 1, topPadding: index }\n \"\n ></ng-container>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{background:var(--page-menu-main);height:100vh;max-height:100vh;z-index:1000;display:flex}:host tui-icon{width:16px;height:16px}:host ::-webkit-scrollbar{width:6px;background:var(--page-menu-main)}:host ::-webkit-scrollbar-thumb{width:6px;background:#c3c7cf;border-radius:2px}:host .side-menu{transition:all var(--page-menu-transition-time);display:flex;color:var(--main-white);flex-direction:column;flex-shrink:0;font-size:14px}:host .side-menu__header{height:64px;width:100%;display:flex;align-items:center;justify-content:space-between}:host .side-menu__header__chevron{cursor:pointer;transition:rotate .15s linear}:host .side-menu__header__chevron_opened{margin:0 8px 0 0;rotate:0deg}:host .side-menu__header__chevron_closed{margin:0 0 0 -4px;rotate:180deg}:host .side-menu__header .disabled{pointer-events:none}:host .side-menu__header__logo{margin-left:8px}:host .side-menu_opened{width:var(--page-menu-opened-width)}:host .side-menu_closed{width:var(--page-menu-closed-width)}:host .side-menu__subitems,:host .side-menu .static-item{position:absolute;display:flex;z-index:3;right:0;top:0;flex-direction:column}:host .side-menu__subitems{width:294px;box-shadow:0 2px 6px #28282840;left:294px}:host .side-menu__subitems.padding-level-1{left:48px}:host .side-menu__subitems .chevron-right{margin-right:16px}:host .side-menu__subitems a span{height:40px;display:flex;align-items:center;padding-left:40px}:host .side-menu__subitems a span .padding-level-1{padding-left:64px}:host .side-menu .static-item{color:var(--main-black);left:48px;top:0}:host .side-menu__subitem,:host .side-menu .static-item__element{box-sizing:border-box;display:flex;align-items:center;color:var(--main-white);height:40px;width:294px;background:var(--page-menu-main);justify-content:space-between}:host .side-menu__subitem:hover{background:var(--page-menu-main-hovered);cursor:pointer}:host .side-menu .static-item__element{justify-content:unset;padding-left:16px}:host .side-menu .expanded-menu-content{height:calc(100vh - 103px);-ms-overflow-style:none;scrollbar-width:none;overflow-y:scroll}:host .side-menu .expanded-menu-content::-webkit-scrollbar{display:none}:host .side-menu .collapsed-menu-content{position:relative}:host .side-menu .menu-item{display:flex;flex-direction:row;cursor:pointer;justify-content:start;align-items:center;box-sizing:border-box;transition:background .9ms;height:40px}:host .side-menu .menu-item_selected{background:var(--page-menu-active)!important;box-shadow:inset 3px 0 var(--main-white)}:host .side-menu .menu-item_selected:hover{background:var(--page-menu-active)!important}:host .side-menu .menu-item__chevron{margin-left:auto;margin-right:8px;transition:rotate .15s linear}:host .side-menu .menu-item__chevron_rotated{rotate:180deg}:host .side-menu .menu-item__title{padding:10px 0 10px 8px;overflow:hidden;color:var(--main-white);font-variant-numeric:lining-nums tabular-nums;text-overflow:ellipsis;white-space:nowrap;font-family:Inter,serif;font-size:14px;font-weight:300}:host .side-menu .menu-item__title .page-menu-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300}:host .side-menu .menu-item__icon{padding:0 8px 0 16px}:host .side-menu .menu-item__icon_closed{display:flex;height:40px;justify-content:center;align-items:center}:host .side-menu .menu-item__icon_closed:hover{background:var(--page-menu-main-hovered);cursor:pointer}:host .side-menu .menu-item:hover{background:var(--page-menu-main-hovered)}:host a{text-decoration:none;color:unset}\n"] }]
268
+ }], ctorParameters: () => [], propDecorators: { menuOpenedWidth: [{
269
+ type: HostBinding,
270
+ args: ['style.--page-menu-opened-width']
271
+ }], menuClosedWidth: [{
272
+ type: HostBinding,
273
+ args: ['style.--page-menu-closed-width']
274
+ }] } });
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Byb2MtcGFnZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLW1lbnUvc3Byb2MtcGFnZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLW1lbnUvc3Byb2MtcGFnZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixzQkFBc0IsR0FDdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBNEIxRSxNQUFNLE9BQU8sc0JBQXNCO0lBd0RqQztRQXZETyxjQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBa0IsQ0FBQztRQUM3QyxpQkFBWSxHQUFHLEtBQUssQ0FBUyxF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QzthQUNILENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQTFCbEMsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxjQUNqRTt3QkFDVixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNuQixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLG1CQUFtQjtvQ0FDOUIsZUFBZSxFQUFFLEtBQUs7aUNBQ3ZCLENBQUM7Z0NBQ0YsT0FBTyxDQUNMLGVBQWUsRUFDZixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLGVBQWU7aUNBQzNCLENBQUMsQ0FDSDs2QkFDRixDQUFDO3lCQUNILENBQUM7cUJBQ0g7d0RBWWUsZUFBZTtzQkFEOUIsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBRzdCLGVBQWU7c0JBRDlCLFdBQVc7dUJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVQYWdlTWVudUljb25zU3JjLFxuICBTSURFX01FTlVfQ0xPU0VEX1dJRFRILFxuICBTSURFX01FTlVfT1BFTkVEX1dJRFRILFxufSBmcm9tICcuL3NjaGVtYS9zcHJvYy1wYWdlLW1lbnUuY29uc3RzJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBYnN0cmFjdE1lbnVTdGF0ZVNlcnZpY2UsIElDbHNNZW51SXRlbSB9IGZyb20gJy4vc2NoZW1hL3Nwcm9jLXBhZ2UtbWVudS50eXBlcyc7XG5pbXBvcnQgeyBQQUdFX01FTlVfU1RBVEUgfSBmcm9tICcuL3NjaGVtYS9zcHJvYy1wYWdlLW1lbnUudG9rZW5zJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSU5hdmlnYXRpb24gfSBmcm9tICcuL3NjaGVtYS9zcHJvYy1wYWdlLW1lbnUuc2NoZW1hJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdPcHRpbWl6ZWRJbWFnZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcHJvYy1wYWdlLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3Byb2MtcGFnZS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3Byb2MtcGFnZS1tZW51LmNvbXBvbmVudC5sZXNzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUm91dGVyTGluaywgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgQXN5bmNQaXBlLCBOZ09wdGltaXplZEltYWdlXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbk91dCcsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTBweCknLFxuICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCcsXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcwLjE1cyBlYXNlLWluJyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTcHJvY1BhZ2VNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIG1lbnVJdGVtcyA9IGlucHV0LnJlcXVpcmVkPElDbHNNZW51SXRlbVtdPigpO1xuICBwdWJsaWMgbWVudUljb25zU3JjID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHB1YmxpYyBvcGVuTG9nb1NyYyA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgY2xvc2VkTG9nb1NyYyA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgZmluZEFjdGl2ZVNlY3Rpb24gPVxuICAgIGlucHV0LnJlcXVpcmVkPChyZXNldDogKCkgPT4gdm9pZCwgZmluZFJvdXRlOiAocm91dGVUb0ZpbmQ6IHN0cmluZykgPT4gdm9pZCkgPT4gdm9pZD4oKTtcblxuICAvLyBUT0RPINCU0L7QsdCw0LLQuNGC0Ywg0LrQsNGB0YLQvtC80L3Rg9GOINGI0LjRgNC40L3RgyDQvNC10L3RjlxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tcGFnZS1tZW51LW9wZW5lZC13aWR0aCcpXG4gIHB1YmxpYyByZWFkb25seSBtZW51T3BlbmVkV2lkdGggPSBgJHtTSURFX01FTlVfT1BFTkVEX1dJRFRIfXB4YDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLXBhZ2UtbWVudS1jbG9zZWQtd2lkdGgnKVxuICBwdWJsaWMgcmVhZG9ubHkgbWVudUNsb3NlZFdpZHRoID0gYCR7U0lERV9NRU5VX0NMT1NFRF9XSURUSH1weGA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlID0gaW5qZWN0PEFic3RyYWN0TWVudVN0YXRlU2VydmljZT4oUEFHRV9NRU5VX1NUQVRFKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHIgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvZ2dsZURpc2FibGVkJCA9IHRoaXMuX3N0YXRlLnRvZ2dsZURpc2FibGVkJDtcbiAgcHJvdGVjdGVkIG1lbnVTdGF0ZSA9IHRvU2lnbmFsKHRoaXMuX3N0YXRlLmlzT3BlbiQpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRTZWN0aW9uID0gc2lnbmFsPHN0cmluZz4oJ3JlZ2lzdGVyJyk7XG4gIHByb3RlY3RlZCBleHBhbmRlZElkcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRJdGVtID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbigpID8gdGhpcy5jb2RlVG9JdGVtW3RoaXMuc2VsZWN0ZWRTZWN0aW9uKCldIDogbnVsbFxuICApO1xuXG4gIC8vINCl0YDQsNC90LjRgiBwYXJlbnQg0Y3Qu9C10LzQtdC90YLRiyDQstGL0LHRgNCw0L3QvdC+0LPQviDQv9GD0L3QutGC0LAg0LzQtdC90Y5cbiAgcHJvdGVjdGVkIHBhcmVudEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbSgpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudHM6IElOYXZpZ2F0aW9uW10gPSBbXTtcbiAgICBsZXQgY3VycmVudCA9IGl0ZW0ucGFyZW50O1xuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICBwYXJlbnRzLnB1c2goY3VycmVudCk7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xuICB9KTtcbiAgcHJvdGVjdGVkIHBhcmVudEl0ZW1Db2RlcyA9IGNvbXB1dGVkPFNldDxzdHJpbmc+PigoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50SXRlbXMgPSB0aGlzLnBhcmVudEl0ZW1zKCk7XG5cbiAgICByZXR1cm4gbmV3IFNldChwYXJlbnRJdGVtcy5tYXAoKHZhbCkgPT4gdmFsLmNvZGUgPz8gJycpKTtcbiAgfSk7XG5cbiAgcHVibGljIG5hdmlnYXRpb25IaWVyYXJjaHkgPSBzaWduYWw8SU5hdmlnYXRpb25bXT4oW10pO1xuXG4gIHByb3RlY3RlZCBjb2RlVG9JdGVtOiBSZWNvcmQ8c3RyaW5nLCBJTmF2aWdhdGlvbj4gPSB7fTtcblxuICBwcm90ZWN0ZWQgaXNPcGVuU2VydmljZVZlcnNpb25JbmZvID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IElDT05TX1NSQyA9IEVQYWdlTWVudUljb25zU3JjO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vINCf0L7RgdGC0YDQvtC40YLRjCDQvNC10L3RjiDQuCDQvdCw0LnRgtC4INCw0LrRgtC40LLQvdGD0Y4g0YHQtdC60YbQuNGOXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLm1lbnVJdGVtcygpO1xuICAgICAgICB0aGlzLmJ1aWxkTWVudShtZW51SXRlbXMpO1xuICAgICAgICB0aGlzLl9maW5kQWN0aXZlU2VjdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWVudVNjcm9sbGJhcihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBUT0RPINCc0LXQvdGOINCy0YLQvtGA0L7Qs9C+INGD0YDQvtCy0L3RjyDQtdGB0YLRjCDRgdC60YDQvtC70Lss0YLRgNC10YLRjNC10LPQviDQvdC10YJcbiAgICAgIGNvbnN0IGNvbGxhcHNlZE1lbnUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2lkPVwiJHtpZH1cIl1gKTtcbiAgICAgIGNvbnN0IHNpZGVNZW51ID0gY29sbGFwc2VkTWVudT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJyNzaWRlLW1lbnVfX3N1Yml0ZW1zJyk7XG4gICAgICBjb25zdCBzaWRlTWVudUxldmVsVHdvID0gc2lkZU1lbnU/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjc2lkZS1tZW51X19zdWJpdGVtcycpO1xuXG4gICAgICBjb25zdCBzdWJpdGVtID0gc2lkZU1lbnVMZXZlbFR3b1xuICAgICAgICA/IHNpZGVNZW51TGV2ZWxUd28ucXVlcnlTZWxlY3RvckFsbCgnLnNpZGUtbWVudV9fc3ViaXRlbScpXG4gICAgICAgIDogc2lkZU1lbnU/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zaWRlLW1lbnVfX3N1Yml0ZW0nKTtcbiAgICAgIGlmIChzdWJpdGVtKSB7XG4gICAgICAgIGNvbnN0IGxhc3RTdWJpdGVtID0gc3ViaXRlbVtzdWJpdGVtLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCByZWN0ID0gbGFzdFN1Yml0ZW0/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChzaWRlTWVudSAmJiB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmJvdHRvbSA8IDApIHtcbiAgICAgICAgICAvLyA0MCDRgtC6INCy0YvRgdC+0YLQsCDQv9C70LDRiNC60Lgg0LzQtdC90Y5cbiAgICAgICAgICBzaWRlTWVudS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICAgIHN1Yml0ZW0ubGVuZ3RoICogNDAgKyAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20gLSAxKVxuICAgICAgICAgIH1weGA7XG4gICAgICAgICAgc2lkZU1lbnUuc3R5bGUub3ZlcmZsb3dZID0gJ3Njcm9sbCc7XG4gICAgICAgICAgc2lkZU1lbnUuc3R5bGUub3ZlcmZsb3dYID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tIDwgMCAmJiBzaWRlTWVudUxldmVsVHdvKSB7XG4gICAgICAgICAgLy8gNDAg0YLQuiDQstGL0YHQvtGC0LAg0L/Qu9Cw0YjQutC4INC80LXQvdGOXG4gICAgICAgICAgc2lkZU1lbnVMZXZlbFR3by5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICAgIHN1Yml0ZW0ubGVuZ3RoICogNDAgKyAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20gLSAxKVxuICAgICAgICAgIH1weGA7XG4gICAgICAgICAgc2lkZU1lbnVMZXZlbFR3by5zdHlsZS5vdmVyZmxvd1kgPSAnc2Nyb2xsJztcbiAgICAgICAgICBzaWRlTWVudUxldmVsVHdvLnN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUuaXNPcGVuJC5zdWJzY3JpYmUoKG1lbnVTdGF0ZSkgPT4ge1xuICAgICAgaWYgKG1lbnVTdGF0ZSkge1xuICAgICAgICB0aGlzLmZpbmRSb3V0ZSh0aGlzLnNlbGVjdGVkU2VjdGlvbigpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2VNZW51KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlTmF2aWdhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZS50b2dnbGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVJdGVtKGl0ZW06IElOYXZpZ2F0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRNZW51U2Nyb2xsYmFyKGl0ZW0uaWQgfHwgJycpO1xuXG4gICAgdGhpcy5leHBhbmRlZElkcy51cGRhdGUoKGN1cnJlbnRFeHBhbmQpID0+IHtcbiAgICAgIGNvbnN0IGNvZGUgPSBpdGVtLmNvZGU7XG4gICAgICBjb25zdCBjb3B5ID0gbmV3IFNldDxzdHJpbmc+KGN1cnJlbnRFeHBhbmQpO1xuXG4gICAgICBpZiAoY29weS5oYXMoY29kZSkpIHtcbiAgICAgICAgY29weS5kZWxldGUoY29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5LmNsZWFyKCk7XG4gICAgICAgIGNvcHkuYWRkKGNvZGUpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldFBhcmVudHMoaXRlbSk7XG4gICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudHMpIHtcbiAgICAgICAgICBjb3B5LmFkZChwYXJlbnQuY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29sbGFwc2VNZW51KGV4Y2VwdGlvbj86IElOYXZpZ2F0aW9uKTogdm9pZCB7XG4gICAgbGV0IGNvZGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldFBhcmVudHMoZXhjZXB0aW9uKTtcbiAgICAgIGNvZGVzID0gW2V4Y2VwdGlvbi5jb2RlLCAuLi5wYXJlbnRzLm1hcCgocGFyZW50KSA9PiBwYXJlbnQuY29kZSldO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWRJZHMuc2V0KG5ldyBTZXQ8c3RyaW5nPihjb2RlcykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpc01lbnVPcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmlzT3BlbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNNZW51Q2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fc3RhdGUuaXNPcGVuO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRXh0ZXJuYWxMaW5rKHJvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAoIXJvdXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAvXihodHRwcz86XFwvXFwvfHd3d1xcLikvaS50ZXN0KHJvdXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVOYXZpZ2F0aW9uKGl0ZW06IElOYXZpZ2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFpdGVtLnJvdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFeHRlcm5hbExpbmsoaXRlbS5yb3V0ZSkpIHtcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0ucm91dGUsICdfYmxhbmsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtpdGVtLnJvdXRlXSk7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zZXQoaXRlbS5jb2RlID8/ICcnKTtcblxuICAgICAgaWYgKHRoaXMuaXNNZW51Q2xvc2VkKSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2VNZW51KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNlcnZpY2VJbmZvT25BY3RpdmVab25lKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuU2VydmljZVZlcnNpb25JbmZvID0gYWN0aXZlICYmIHRoaXMuaXNPcGVuU2VydmljZVZlcnNpb25JbmZvO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlcnZpY2VJbmZvT25PYnNjdXJlZChvYnNjdXJlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChvYnNjdXJlZCkge1xuICAgICAgdGhpcy5pc09wZW5TZXJ2aWNlVmVyc2lvbkluZm8gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTWVudShtZW51OiBJQ2xzTWVudUl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRlZE1lbnVJdGVtcyA9IFsuLi5tZW51XS5zb3J0KChhLCBiKSA9PiAoYS5vcmRlcl9udW0gPz8gMCkgLSAoYi5vcmRlcl9udW0gPz8gMCkpO1xuXG4gICAgY29uc3QgbWVudUhhc2g6IFJlY29yZDxzdHJpbmcsIElOYXZpZ2F0aW9uPiA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzb3J0ZWRNZW51SXRlbXMpIHtcbiAgICAgIG1lbnVIYXNoW2l0ZW0uaWRdID0ge1xuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSA/PyAnJyxcbiAgICAgICAgcm91dGU6IGl0ZW0ucm91dGUgPz8gJycsXG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIGNvZGU6IGl0ZW0uY29kZSxcbiAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgICBhY2Nlc3NlZFJvbGVzOiB1bmRlZmluZWQsXG4gICAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByb290TWVudUl0ZW1zOiBJTmF2aWdhdGlvbltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc29ydGVkTWVudUl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbS5pZF9wYXJlbnQgJiYgbWVudUhhc2hbaXRlbS5pZF9wYXJlbnRdKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG1lbnVIYXNoW2l0ZW0uaWRfcGFyZW50XTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtZW51SGFzaFtpdGVtLmlkXTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4/LnB1c2goY2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdE1lbnVJdGVtcy5wdXNoKG1lbnVIYXNoW2l0ZW0uaWRdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5hdmlnYXRpb25IaWVyYXJjaHkuc2V0KHJvb3RNZW51SXRlbXMpO1xuXG4gICAgdGhpcy5jb2RlVG9JdGVtID0ge307XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhtZW51SGFzaCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBtZW51SGFzaFtpZF07XG4gICAgICBpZiAoaXRlbS5jb2RlKSB7XG4gICAgICAgIHRoaXMuY29kZVRvSXRlbVtpdGVtLmNvZGVdID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRSb3V0ZShyb3V0ZVRvRmluZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVJdGVtID0gdGhpcy5jb2RlVG9JdGVtW3JvdXRlVG9GaW5kXTtcblxuICAgIGlmICghcm91dGVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNZW51T3BlbmVkKSB7XG4gICAgICB0aGlzLnRvZ2dsZUl0ZW0ocm91dGVJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbi5zZXQocm91dGVJdGVtLmNvZGUgPz8gJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEFjdGl2ZVNlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5maW5kQWN0aXZlU2VjdGlvbigpKHRoaXMucmVzZXRTZWxlY3Rpb24sIHRoaXMuZmluZFJvdXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyZW50cyhpdGVtOiBJTmF2aWdhdGlvbik6IElOYXZpZ2F0aW9uW10ge1xuICAgIGNvbnN0IHBhcmVudHM6IElOYXZpZ2F0aW9uW10gPSBbXTtcbiAgICBsZXQgY3VycmVudCA9IGl0ZW0ucGFyZW50O1xuXG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgIHBhcmVudHMucHVzaChjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50cztcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZElkcy5zZXQobmV3IFNldDxzdHJpbmc+KCkpO1xuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uLnNldCgnJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RDaGlsZHJlbihpdGVtOiBJTmF2aWdhdGlvbik6IElOYXZpZ2F0aW9uW10ge1xuICAgIGNvbnN0IHJlc3VsdDogSU5hdmlnYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXVlOiBJTmF2aWdhdGlvbltdID0gaXRlbS5jaGlsZHJlbj8uc2xpY2UoKSA/PyBbXTtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub2RlID0gcXVldWVbaW5kZXhdO1xuICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goLi4ubm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIiwiPHNlY3Rpb24gW2NsYXNzXT1cIm1lbnVTdGF0ZSgpID8gJ3NpZGUtbWVudSBzaWRlLW1lbnVfb3BlbmVkJyA6ICdzaWRlLW1lbnUgc2lkZS1tZW51X2Nsb3NlZCdcIj5cbiAgPGRpdiBjbGFzcz1cInNpZGUtbWVudV9faGVhZGVyXCI+XG4gICAgPGltZ1xuICAgICAgW3NyY109XCJtZW51U3RhdGUoKSA/IG9wZW5Mb2dvU3JjKCkgOiBjbG9zZWRMb2dvU3JjKClcIlxuICAgICAgYWx0PVwiTG9nbyBJY29uXCJcbiAgICAgIGNsYXNzPVwic2lkZS1tZW51X19oZWFkZXJfX2xvZ29cIlxuICAgIC8+XG4gICAgPGltZ1xuICAgICAgKGNsaWNrKT1cInRvZ2dsZU5hdmlnYXRpb24oKVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidG9nZ2xlRGlzYWJsZWQkIHwgYXN5bmNcIlxuICAgICAgW2hlaWdodF09XCIxNlwiXG4gICAgICBbbmdDbGFzc109XCJtZW51U3RhdGUoKSA/ICdzaWRlLW1lbnVfX2hlYWRlcl9fY2hldnJvbl9vcGVuZWQnIDogJ3NpZGUtbWVudV9faGVhZGVyX19jaGV2cm9uX2Nsb3NlZCdcIlxuICAgICAgW25nU3JjXT1cIklDT05TX1NSQy5NRU5VX0NIRVZST05cIiBbd2lkdGhdPVwiMTZcIiBhbHQ9XCJNZW51IENoZXZyb25cIi8+XG4gIDwvZGl2PlxuXG4gIEBpZiAobWVudVN0YXRlKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kZWQtbWVudS1jb250ZW50XCI+XG4gICAgICBAZm9yIChuYXZpZ2F0aW9uX2l0ZW0gb2YgbmF2aWdhdGlvbkhpZXJhcmNoeSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZW51SXRlbU9wZW5lZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbmF2aWdhdGlvbl9pdGVtOiBuYXZpZ2F0aW9uX2l0ZW0sIGxldmVsOiAwIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIH0gQGVsc2Uge1xuICAgIEBmb3IgKG5hdmlnYXRpb25faXRlbSBvZiBuYXZpZ2F0aW9uSGllcmFyY2h5KCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlZE1lbnU7IGNvbnRleHQ6IHsgbmF2aWdhdGlvbl9pdGVtOiBuYXZpZ2F0aW9uX2l0ZW0gfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICB9XG48L3NlY3Rpb24+XG5cbjxuZy10ZW1wbGF0ZSAjbWVudUl0ZW1PcGVuZWQgbGV0LWxldmVsPVwibGV2ZWxcIiBsZXQtbmF2aWdhdGlvbl9pdGVtPVwibmF2aWdhdGlvbl9pdGVtXCI+XG4gIEBsZXQgaXNFeHBhbmRlZCA9IGV4cGFuZGVkSWRzKCkuaGFzKG5hdmlnYXRpb25faXRlbS5jb2RlKTtcbiAgQGxldCBjaGlsZHJlbkNvdW50ID0gbmF2aWdhdGlvbl9pdGVtLmNoaWxkcmVuLmxlbmd0aDtcbiAgQGxldCBjb2RlID0gbmF2aWdhdGlvbl9pdGVtLmNvZGU7XG4gIEBsZXQgcm91dGUgPSBuYXZpZ2F0aW9uX2l0ZW0uY29kZTtcbiAgQGxldCBpY29uID0gbmF2aWdhdGlvbl9pdGVtLmljb247XG4gIEBsZXQgaXNIaWdobGlnaHRlZCA9IHNlbGVjdGVkU2VjdGlvbigpID09PSBjb2RlO1xuXG4gIDxhXG4gICAgKGNsaWNrKT1cImNoaWxkcmVuQ291bnQgPT09IDAgPyBoYW5kbGVOYXZpZ2F0aW9uKG5hdmlnYXRpb25faXRlbSkgOiB0b2dnbGVJdGVtKG5hdmlnYXRpb25faXRlbSlcIlxuICAgIFtAZmFkZUluT3V0XVxuICAgIFtjbGFzcy5tZW51LWl0ZW1fc2VsZWN0ZWRdPVwiaXNIaWdobGlnaHRlZFwiXG4gICAgW2NsYXNzLnBhZGRpbmctbGV2ZWwtMF09XCJsZXZlbCA9PT0gMFwiXG4gICAgW3JvdXRlckxpbmtdPVwiY2hpbGRyZW5Db3VudCA+IDAgfHwgaXNFeHRlcm5hbExpbmsocm91dGUpID8gdW5kZWZpbmVkIDogcm91dGVcIlxuICAgIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwibGV2ZWwgPT09IDAgPyAwIDogNDQgKyBsZXZlbCAqIDIwXCJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXG4gID5cbiAgICBAaWYgKGljb24pIHtcbiAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtX19pY29uXCI+XG4gICAgICAgIDxpbWcgW2FsdF09XCJpY29uXCIgW3dpZHRoXT1cIjE2XCIgW2hlaWdodF09XCIxNlwiIFtuZ1NyY109XCJtZW51SWNvbnNTcmMoKSArIGljb24gKyAnLnN2ZydcIj5cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW1fX3RpdGxlXCI+IHt7IG5hdmlnYXRpb25faXRlbS50aXRsZSB9fSA8L3NwYW4+XG4gICAgQGlmIChjaGlsZHJlbkNvdW50ID4gMCkge1xuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbV9fY2hldnJvblwiXG4gICAgICAgIFtjbGFzcy5tZW51LWl0ZW1fX2NoZXZyb25fcm90YXRlZF09XCIhaXNFeHBhbmRlZFwiXG4gICAgICAgIFthbHRdPVwiaWNvblwiIFt3aWR0aF09XCIxNlwiIFtoZWlnaHRdPVwiMTZcIlxuICAgICAgICBbbmdTcmNdPVwiSUNPTlNfU1JDLkNIRVZST05fVVBcIj5cbiAgICB9XG4gIDwvYT5cbiAgQGlmIChpc0V4cGFuZGVkICYmIGNoaWxkcmVuQ291bnQgPiAwKSB7XG4gICAgQGZvciAoY2hpbGRyZW4gb2YgbmF2aWdhdGlvbl9pdGVtLmNoaWxkcmVuID8/IFtdOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbU9wZW5lZDsgY29udGV4dDogeyBuYXZpZ2F0aW9uX2l0ZW06IGNoaWxkcmVuLCBsZXZlbDogbGV2ZWwgKyAxIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjbG9zZWRNZW51IGxldC1uYXZpZ2F0aW9uX2l0ZW09XCJuYXZpZ2F0aW9uX2l0ZW1cIj5cbiAgQGxldCBpc0V4cGFuZGVkID0gZXhwYW5kZWRJZHMoKS5oYXMobmF2aWdhdGlvbl9pdGVtLmNvZGUpO1xuICBAbGV0IGNoaWxkcmVuQ291bnQgPSBuYXZpZ2F0aW9uX2l0ZW0uY2hpbGRyZW4ubGVuZ3RoO1xuICBAbGV0IGNvZGUgPSBuYXZpZ2F0aW9uX2l0ZW0uY29kZTtcbiAgQGxldCByb3V0ZSA9IG5hdmlnYXRpb25faXRlbS5jb2RlO1xuICBAbGV0IGljb24gPSBuYXZpZ2F0aW9uX2l0ZW0uaWNvbjtcbiAgQGxldCBpc0hpZ2hsaWdodGVkID0gc2VsZWN0ZWRTZWN0aW9uKCkgPT09IGNvZGUgfHwgcGFyZW50SXRlbUNvZGVzKCkuaGFzKGNvZGUpO1xuXG4gIDxkaXZcbiAgICAobW91c2VsZWF2ZSk9XCJjb2xsYXBzZU1lbnUoKVwiXG4gICAgW2lkXT1cIm5hdmlnYXRpb25faXRlbS5pZFwiXG4gICAgY2xhc3M9XCJjb2xsYXBzZWQtbWVudS1jb250ZW50XCJcbiAgPlxuICAgIEBpZiAoaWNvbikge1xuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW1fX2ljb25fY2xvc2VkXCJcbiAgICAgICAgW2NsYXNzLm1lbnUtaXRlbV9zZWxlY3RlZF09XCJpc0hpZ2hsaWdodGVkXCJcbiAgICAgICAgKGNsaWNrKT1cImNoaWxkcmVuQ291bnQgPT09IDAgPyBoYW5kbGVOYXZpZ2F0aW9uKG5hdmlnYXRpb25faXRlbSkgOiB0b2dnbGVJdGVtKG5hdmlnYXRpb25faXRlbSlcIlxuICAgICAgICBbcm91dGVyTGlua109XCJjaGlsZHJlbkNvdW50ID4gMCB8fCBpc0V4dGVybmFsTGluayhyb3V0ZSkgPyB1bmRlZmluZWQgOiByb3V0ZVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cInRvZ2dsZUl0ZW0obmF2aWdhdGlvbl9pdGVtKVwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW2hlaWdodF09XCIxNlwiXG4gICAgICAgICAgW3dpZHRoXT1cIjE2XCJcbiAgICAgICAgICBbbmdTcmNdPVwibWVudUljb25zU3JjKCkgKyBpY29uICsgJy5zdmcnXCIgYWx0PVwiTWVudSBDaGV2cm9uXCIvPlxuICAgICAgPC9hPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBtZW51Q2xvc2VkSXRlbTtcbiAgICAgICAgY29udGV4dDogeyBpdGVtOiBuYXZpZ2F0aW9uX2l0ZW0sIGxldmVsOiAxLCB0b3BQYWRkaW5nOiAxIH1cbiAgICAgIFwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoaXNFeHBhbmRlZCAmJiBjaGlsZHJlbkNvdW50ID4gMCkge1xuICAgICAgPGRpdiBjbGFzcz1cInN0YXRpYy1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdGljLWl0ZW1fX2VsZW1lbnRcIj5cbiAgICAgICAge3sgbmF2aWdhdGlvbl9pdGVtLnRpdGxlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVudUNsb3NlZEl0ZW0gbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWxldmVsPVwibGV2ZWxcIiBsZXQtdG9wUGFkZGluZz1cInRvcFBhZGRpbmdcIj5cbiAgQGxldCBpc0V4cGFuZGVkID0gZXhwYW5kZWRJZHMoKS5oYXMoaXRlbS5jb2RlKTtcbiAgPGRpdiBbaWRdPVwiaXRlbS5pZFwiPlxuICAgIEBpZiAoaXNFeHBhbmRlZCAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzaWRlLW1lbnVfX3N1Yml0ZW1zXCJcbiAgICAgICAgW2NsYXNzLnBhZGRpbmctbGV2ZWwtMV09XCJsZXZlbCA9PT0gMVwiXG4gICAgICAgIFtzdHlsZS50b3AucHhdPVwidG9wUGFkZGluZyAqIDQwXCJcbiAgICAgICAgaWQ9XCJzaWRlLW1lbnVfX3N1Yml0ZW1zXCJcbiAgICAgID5cbiAgICAgICAgQGZvciAobmF2aWdhdGlvbl9pdGVtIG9mIGl0ZW0uY2hpbGRyZW47IHRyYWNrIG5hdmlnYXRpb25faXRlbTsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgQGxldCBjaGlsZHJlbkNvdW50ID0gbmF2aWdhdGlvbl9pdGVtLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICBAbGV0IGNvZGUgPSBuYXZpZ2F0aW9uX2l0ZW0uY29kZTtcbiAgICAgICAgICBAbGV0IHJvdXRlID0gbmF2aWdhdGlvbl9pdGVtLmNvZGU7XG4gICAgICAgICAgQGxldCBpc0hpZ2hsaWdodGVkID0gc2VsZWN0ZWRTZWN0aW9uKCkgPT09IGNvZGUgfHwgcGFyZW50SXRlbUNvZGVzKCkuaGFzKGNvZGUpO1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cInNpZGUtbWVudV9fc3ViaXRlbVwiXG4gICAgICAgICAgICBbY2xhc3MubWVudS1pdGVtX3NlbGVjdGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiY2hpbGRyZW5Db3VudCA+IDAgPyB0b2dnbGVJdGVtKG5hdmlnYXRpb25faXRlbSkgOiBjb2xsYXBzZU1lbnUobmF2aWdhdGlvbl9pdGVtKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hpbGRyZW5Db3VudCA9PT0gMCA/IGhhbmRsZU5hdmlnYXRpb24obmF2aWdhdGlvbl9pdGVtKSA6IHRvZ2dsZUl0ZW0obmF2aWdhdGlvbl9pdGVtKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJjaGlsZHJlbkNvdW50ID4gMCB8fCBpc0V4dGVybmFsTGluayhyb3V0ZSkgPyB1bmRlZmluZWQgOiByb3V0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbY2xhc3MucGFkZGluZy1sZXZlbC0xXT1cImxldmVsID09PSAxXCI+e3tcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbl9pdGVtLnRpdGxlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgQGlmIChjaGlsZHJlbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE2XCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTZcIlxuICAgICAgICAgICAgICAgIFtuZ1NyY109XCJJQ09OU19TUkMuQ0hFVlJPTl9SSUdIVFwiIGFsdD1cIk1lbnUgQ2hldnJvblwiLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lbnVDbG9zZWRJdGVtO1xuICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiBuYXZpZ2F0aW9uX2l0ZW0sIGxldmVsOiBsZXZlbCArIDEsIHRvcFBhZGRpbmc6IGluZGV4IH1cbiAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=