ngx-register-base 1.2.3 → 1.3.1

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/ng-package.json +15 -0
  2. package/package.json +12 -15
  3. package/schematics/ng-update/replace-menu-state-token/index.ts +33 -0
  4. package/schematics/ng-update/update-prefix/index.ts +38 -0
  5. package/schematics/utils/{utils.d.ts → utils.ts} +9 -2
  6. package/src/lib/components/checkbox-selector/checkbox-selector.component.html +91 -0
  7. package/src/lib/components/checkbox-selector/checkbox-selector.component.less +67 -0
  8. package/src/lib/components/checkbox-selector/checkbox-selector.component.ts +176 -0
  9. package/src/lib/components/checkbox-selector/checkbox-selector.types.ts +8 -0
  10. package/src/lib/components/column-settings/column-settings.component.html +160 -0
  11. package/src/lib/components/column-settings/column-settings.component.less +131 -0
  12. package/src/lib/components/column-settings/column-settings.component.ts +352 -0
  13. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.html +65 -0
  14. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.less +79 -0
  15. package/src/lib/components/column-settings/components/column-settings-template/column-settings-template.component.ts +114 -0
  16. package/src/lib/components/column-settings/consts/column-settings.consts.ts +9 -0
  17. package/src/lib/components/column-settings/types/column-settings.types.ts +26 -0
  18. package/src/lib/components/divider/divider.component.html +4 -0
  19. package/src/lib/components/divider/divider.component.less +10 -0
  20. package/src/lib/components/divider/divider.component.ts +12 -0
  21. package/src/lib/components/filter-button/filter-button.component.html +20 -0
  22. package/src/lib/components/filter-button/filter-button.component.less +41 -0
  23. package/src/lib/components/filter-button/filter-button.component.ts +18 -0
  24. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.html +22 -0
  25. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.less +23 -0
  26. package/src/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.ts +31 -0
  27. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.html +49 -0
  28. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.less +37 -0
  29. package/src/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.ts +66 -0
  30. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.html +147 -0
  31. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.less +45 -0
  32. package/src/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.ts +114 -0
  33. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.html +44 -0
  34. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.less +49 -0
  35. package/src/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.ts +167 -0
  36. package/src/lib/components/filters/components/filter-list/filter-list.service.ts +97 -0
  37. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.html +18 -0
  38. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.less +55 -0
  39. package/src/lib/components/filters/components/filter-list/filters-section/filters-section.component.ts +69 -0
  40. package/src/lib/components/filters/components/filter-list.module.ts +29 -0
  41. package/src/lib/components/filters/register-table-filter.component.html +53 -0
  42. package/src/lib/components/filters/register-table-filter.component.less +17 -0
  43. package/src/lib/components/filters/register-table-filter.component.ts +167 -0
  44. package/src/lib/components/filters/register-table-filter.module.ts +22 -0
  45. package/src/lib/components/inputs/inputs.module.ts +104 -0
  46. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.html +49 -0
  47. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.less +70 -0
  48. package/src/lib/components/inputs/param-calendar-year/param-calendar-year.component.ts +52 -0
  49. package/src/lib/components/inputs/param-custom/param-custom.component.html +1 -0
  50. package/src/lib/components/inputs/param-custom/param-custom.component.ts +9 -0
  51. package/src/lib/components/inputs/param-date/param-date.component.html +55 -0
  52. package/src/lib/components/inputs/param-date/param-date.component.less +67 -0
  53. package/src/lib/components/inputs/param-date/param-date.component.ts +77 -0
  54. package/src/lib/components/inputs/param-date-range/param-date-range.component.html +45 -0
  55. package/src/lib/components/inputs/param-date-range/param-date-range.component.less +75 -0
  56. package/src/lib/components/inputs/param-date-range/param-date-range.component.ts +67 -0
  57. package/src/lib/components/inputs/param-date-time/param-date-time.component.html +70 -0
  58. package/src/lib/components/inputs/param-date-time/param-date-time.component.less +72 -0
  59. package/src/lib/components/inputs/param-date-time/param-date-time.component.ts +101 -0
  60. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.html +67 -0
  61. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.less +103 -0
  62. package/src/lib/components/inputs/param-date-time-range/param-date-time-range.component.ts +128 -0
  63. package/src/lib/components/inputs/param-month/param-month.component.html +46 -0
  64. package/src/lib/components/inputs/param-month/param-month.component.less +72 -0
  65. package/src/lib/components/inputs/param-month/param-month.component.ts +55 -0
  66. package/src/lib/components/inputs/param-month-range/param-month-range.component.html +39 -0
  67. package/src/lib/components/inputs/param-month-range/param-month-range.component.less +71 -0
  68. package/src/lib/components/inputs/param-month-range/param-month-range.component.ts +76 -0
  69. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.html +84 -0
  70. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.less +108 -0
  71. package/src/lib/components/inputs/param-multi-select/param-multi-select.component.ts +448 -0
  72. package/src/lib/components/inputs/param-select/param-select.component.html +106 -0
  73. package/src/lib/components/inputs/param-select/param-select.component.less +26 -0
  74. package/src/lib/components/inputs/param-select/param-select.component.ts +318 -0
  75. package/src/lib/components/inputs/param-switcher/param-switcher.component.html +8 -0
  76. package/src/lib/components/inputs/param-switcher/param-switcher.component.less +53 -0
  77. package/src/lib/components/inputs/param-switcher/param-switcher.component.ts +13 -0
  78. package/src/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.ts +29 -0
  79. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.html +19 -0
  80. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.less +76 -0
  81. package/src/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.ts +134 -0
  82. package/src/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.ts +8 -0
  83. package/src/lib/components/inputs/param-text/param-text.component.html +59 -0
  84. package/src/lib/components/inputs/param-text/param-text.component.less +33 -0
  85. package/src/lib/components/inputs/param-text/param-text.component.ts +36 -0
  86. package/src/lib/components/inputs/param-textarea/param-textarea.component.html +61 -0
  87. package/src/lib/components/inputs/param-textarea/param-textarea.component.less +21 -0
  88. package/src/lib/components/inputs/param-textarea/param-textarea.component.ts +33 -0
  89. package/src/lib/components/inputs/param-toggle/param-toggle.component.html +40 -0
  90. package/src/lib/components/inputs/param-toggle/param-toggle.component.less +69 -0
  91. package/src/lib/components/inputs/param-toggle/param-toggle.component.ts +14 -0
  92. package/src/lib/components/inputs/param-tree/consts/param-tree.consts.ts +59 -0
  93. package/src/lib/components/inputs/param-tree/param-tree.component.html +51 -0
  94. package/src/lib/components/inputs/param-tree/param-tree.component.less +3 -0
  95. package/src/lib/components/inputs/param-tree/param-tree.component.ts +282 -0
  96. package/src/lib/components/inputs/param-tree/services/param-tree.service.ts +176 -0
  97. package/src/lib/components/inputs/param-tree/services/sync-tree-loader.service.ts +18 -0
  98. package/{lib/components/inputs/param-tree/tokens/param-tree.tokens.d.ts → src/lib/components/inputs/param-tree/tokens/param-tree.tokens.ts} +2 -1
  99. package/src/lib/components/inputs/param-tree/types/param-tree.types.ts +39 -0
  100. package/src/lib/components/inputs/param-tree/utils/param-tree.utils.ts +18 -0
  101. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.html +78 -0
  102. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.less +109 -0
  103. package/src/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.ts +89 -0
  104. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.html +54 -0
  105. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.less +56 -0
  106. package/src/lib/components/inputs/param-tree-select/param-tree-select.component.ts +91 -0
  107. package/src/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.html +5 -0
  108. package/src/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.ts +13 -0
  109. package/src/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.html +4 -0
  110. package/src/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.ts +11 -0
  111. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.html +95 -0
  112. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.less +183 -0
  113. package/src/lib/components/menu-constructor/sproc-menu-constructor.component.ts +687 -0
  114. package/src/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.ts +32 -0
  115. package/src/lib/components/menu-constructor/store/sproc-menu-constructor.consts.ts +46 -0
  116. package/{lib/components/menu-constructor/store/sproc-menu.tokens.d.ts → src/lib/components/menu-constructor/store/sproc-menu.tokens.ts} +4 -1
  117. package/src/lib/components/page-menu/README.md +60 -0
  118. package/src/lib/components/page-menu/schema/sproc-page-menu.consts.ts +8 -0
  119. package/src/lib/components/page-menu/schema/sproc-page-menu.schema.ts +35 -0
  120. package/src/lib/components/page-menu/schema/sproc-page-menu.tokens.ts +5 -0
  121. package/src/lib/components/page-menu/schema/sproc-page-menu.types.ts +42 -0
  122. package/src/lib/components/page-menu/sproc-page-menu.component.html +166 -0
  123. package/src/lib/components/page-menu/sproc-page-menu.component.less +228 -0
  124. package/src/lib/components/page-menu/sproc-page-menu.component.ts +337 -0
  125. package/src/lib/components/paginator/paginator.component.html +97 -0
  126. package/src/lib/components/paginator/paginator.component.less +101 -0
  127. package/src/lib/components/paginator/paginator.component.ts +192 -0
  128. package/src/lib/components/paginator/types/paginator.types.ts +16 -0
  129. package/src/lib/components/register-table/consts/register-table.consts.ts +3 -0
  130. package/src/lib/components/register-table/directives/cell-template.directive.ts +11 -0
  131. package/src/lib/components/register-table/directives/header-template.directive.ts +11 -0
  132. package/src/lib/components/register-table/model/schema.ts +62 -0
  133. package/src/lib/components/register-table/pipes/class-by-type.pipe.ts +28 -0
  134. package/src/lib/components/register-table/pipes/sticky-column.pipe.ts +11 -0
  135. package/src/lib/components/register-table/register-table.component.html +257 -0
  136. package/src/lib/components/register-table/register-table.component.less +151 -0
  137. package/src/lib/components/register-table/register-table.component.ts +743 -0
  138. package/src/lib/components/reset-settings-form/reset-settings-form.component.html +14 -0
  139. package/src/lib/components/reset-settings-form/reset-settings-form.component.less +26 -0
  140. package/src/lib/components/reset-settings-form/reset-settings-form.component.ts +15 -0
  141. package/src/lib/components/search-input/search-input.component.html +6 -0
  142. package/src/lib/components/search-input/search-input.component.less +17 -0
  143. package/src/lib/components/search-input/search-input.component.ts +31 -0
  144. package/src/lib/components/sliding-panel/sliding-panel.component.html +13 -0
  145. package/src/lib/components/sliding-panel/sliding-panel.component.less +112 -0
  146. package/src/lib/components/sliding-panel/sliding-panel.component.ts +36 -0
  147. package/src/lib/components/sliding-panel/sliding-panel.module.ts +11 -0
  148. package/src/lib/consts/date-time.consts.ts +1 -0
  149. package/src/lib/consts/index.ts +8 -0
  150. package/src/lib/consts/inputs.consts.ts +9 -0
  151. package/src/lib/consts/month.consts.ts +82 -0
  152. package/src/lib/consts/params.consts.ts +1 -0
  153. package/src/lib/consts/register-base.consts.ts +40 -0
  154. package/src/lib/core/form-group-wrapper/errors-consts.ts +6 -0
  155. package/src/lib/core/form-group-wrapper/form-group-wrapper.ts +109 -0
  156. package/src/lib/core/input-control/input-control.ts +30 -0
  157. package/src/lib/core/param/param-base.ts +262 -0
  158. package/src/lib/core/param/param-date-base.ts +30 -0
  159. package/src/lib/core/param/param-select-base.ts +118 -0
  160. package/src/lib/core/param/param-text-base.ts +23 -0
  161. package/{lib/core/param/param.tokens.d.ts → src/lib/core/param/param.tokens.ts} +2 -1
  162. package/src/lib/core/register-base/register-base.store.ts +84 -0
  163. package/src/lib/core/register-base/register-base.ts +854 -0
  164. package/src/lib/directives/date/date-time.types.ts +36 -0
  165. package/src/lib/directives/date/format-date.pipe.ts +28 -0
  166. package/src/lib/directives/number/number-only.directive.ts +36 -0
  167. package/src/lib/directives/sticky/sticky-relative.directive.ts +30 -0
  168. package/src/lib/directives/sticky/sticky-relative.service.ts +34 -0
  169. package/src/lib/directives/sticky/sticky.directive.ts +189 -0
  170. package/src/lib/services/date-time.service.ts +399 -0
  171. package/src/lib/services/dialog/dialog.service.ts +62 -0
  172. package/{lib/services/dialog/dialog.types.d.ts → src/lib/services/dialog/dialog.types.ts} +8 -4
  173. package/src/lib/services/dom-intersection.service.ts +23 -0
  174. package/src/lib/services/filter/filters-state.service.ts +83 -0
  175. package/src/lib/services/filter/filters-transmit.service.ts +105 -0
  176. package/src/lib/services/filter/filters.service.ts +21 -0
  177. package/src/lib/services/inputs-state.service.ts +157 -0
  178. package/src/lib/services/inputs.service.ts +114 -0
  179. package/src/lib/services/key-pressed.service.ts +40 -0
  180. package/src/lib/services/resize-window-observer.service.ts +37 -0
  181. package/src/lib/services/selected-objects-state.service.ts +159 -0
  182. package/src/lib/store/fast-query-store.service.ts +132 -0
  183. package/{lib/types/event.types.d.ts → src/lib/types/event.types.ts} +1 -1
  184. package/src/lib/types/hasura.types.ts +41 -0
  185. package/src/lib/types/inputs.types.ts +63 -0
  186. package/src/lib/types/params.types.ts +42 -0
  187. package/src/lib/types/register-base.types.ts +161 -0
  188. package/src/lib/types/sub-types.ts +15 -0
  189. package/src/lib/types/user-profile.types.ts +18 -0
  190. package/src/lib/utils/functions.ts +11 -0
  191. package/src/lib/utils/get-url-segment.ts +46 -0
  192. package/src/lib/utils/prizm.shared.module.ts +176 -0
  193. package/src/lib/utils/rxjs.ts +33 -0
  194. package/src/lib/utils/select-all-utils.ts +16 -0
  195. package/tsconfig.lib.json +16 -0
  196. package/tsconfig.lib.prod.json +11 -0
  197. package/tsconfig.schematics.json +26 -0
  198. package/tsconfig.spec.json +15 -0
  199. package/esm2022/lib/components/checkbox-selector/checkbox-selector.component.mjs +0 -129
  200. package/esm2022/lib/components/checkbox-selector/checkbox-selector.types.mjs +0 -8
  201. package/esm2022/lib/components/column-settings/column-settings.component.mjs +0 -249
  202. package/esm2022/lib/components/column-settings/components/column-settings-template/column-settings-template.component.mjs +0 -80
  203. package/esm2022/lib/components/column-settings/consts/column-settings.consts.mjs +0 -10
  204. package/esm2022/lib/components/column-settings/index.mjs +0 -3
  205. package/esm2022/lib/components/column-settings/types/column-settings.types.mjs +0 -7
  206. package/esm2022/lib/components/divider/divider.component.mjs +0 -16
  207. package/esm2022/lib/components/filter-button/filter-button.component.mjs +0 -19
  208. package/esm2022/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.mjs +0 -31
  209. package/esm2022/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.mjs +0 -57
  210. package/esm2022/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.mjs +0 -110
  211. package/esm2022/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.mjs +0 -130
  212. package/esm2022/lib/components/filters/components/filter-list/filter-list.service.mjs +0 -89
  213. package/esm2022/lib/components/filters/components/filter-list/filters-section/filters-section.component.mjs +0 -41
  214. package/esm2022/lib/components/filters/components/filter-list.module.mjs +0 -45
  215. package/esm2022/lib/components/filters/index.mjs +0 -3
  216. package/esm2022/lib/components/filters/register-table-filter.component.mjs +0 -155
  217. package/esm2022/lib/components/filters/register-table-filter.module.mjs +0 -39
  218. package/esm2022/lib/components/index.mjs +0 -11
  219. package/esm2022/lib/components/inputs/index.mjs +0 -20
  220. package/esm2022/lib/components/inputs/inputs.module.mjs +0 -166
  221. package/esm2022/lib/components/inputs/param-calendar-year/param-calendar-year.component.mjs +0 -45
  222. package/esm2022/lib/components/inputs/param-custom/param-custom.component.mjs +0 -12
  223. package/esm2022/lib/components/inputs/param-date/param-date.component.mjs +0 -76
  224. package/esm2022/lib/components/inputs/param-date-range/param-date-range.component.mjs +0 -61
  225. package/esm2022/lib/components/inputs/param-date-time/param-date-time.component.mjs +0 -86
  226. package/esm2022/lib/components/inputs/param-date-time-range/param-date-time-range.component.mjs +0 -96
  227. package/esm2022/lib/components/inputs/param-month/param-month.component.mjs +0 -50
  228. package/esm2022/lib/components/inputs/param-month-range/param-month-range.component.mjs +0 -62
  229. package/esm2022/lib/components/inputs/param-multi-select/param-multi-select.component.mjs +0 -309
  230. package/esm2022/lib/components/inputs/param-select/param-select.component.mjs +0 -209
  231. package/esm2022/lib/components/inputs/param-switcher/param-switcher.component.mjs +0 -21
  232. package/esm2022/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.mjs +0 -28
  233. package/esm2022/lib/components/inputs/param-switcher-date-time-range/index.mjs +0 -3
  234. package/esm2022/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.mjs +0 -105
  235. package/esm2022/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.mjs +0 -10
  236. package/esm2022/lib/components/inputs/param-text/param-text.component.mjs +0 -40
  237. package/esm2022/lib/components/inputs/param-textarea/param-textarea.component.mjs +0 -38
  238. package/esm2022/lib/components/inputs/param-toggle/param-toggle.component.mjs +0 -20
  239. package/esm2022/lib/components/inputs/param-tree/consts/param-tree.consts.mjs +0 -37
  240. package/esm2022/lib/components/inputs/param-tree/index.mjs +0 -8
  241. package/esm2022/lib/components/inputs/param-tree/param-tree.component.mjs +0 -207
  242. package/esm2022/lib/components/inputs/param-tree/services/param-tree.service.mjs +0 -116
  243. package/esm2022/lib/components/inputs/param-tree/services/sync-tree-loader.service.mjs +0 -20
  244. package/esm2022/lib/components/inputs/param-tree/tokens/param-tree.tokens.mjs +0 -3
  245. package/esm2022/lib/components/inputs/param-tree/types/param-tree.types.mjs +0 -2
  246. package/esm2022/lib/components/inputs/param-tree/utils/param-tree.utils.mjs +0 -9
  247. package/esm2022/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.mjs +0 -80
  248. package/esm2022/lib/components/inputs/param-tree-select/param-tree-select.component.mjs +0 -85
  249. package/esm2022/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.mjs +0 -15
  250. package/esm2022/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.mjs +0 -12
  251. package/esm2022/lib/components/menu-constructor/index.mjs +0 -5
  252. package/esm2022/lib/components/menu-constructor/sproc-menu-constructor.component.mjs +0 -559
  253. package/esm2022/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.mjs +0 -3
  254. package/esm2022/lib/components/menu-constructor/store/sproc-menu-constructor.consts.mjs +0 -5
  255. package/esm2022/lib/components/menu-constructor/store/sproc-menu.tokens.mjs +0 -3
  256. package/esm2022/lib/components/page-menu/index.mjs +0 -6
  257. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.consts.mjs +0 -9
  258. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.schema.mjs +0 -2
  259. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.tokens.mjs +0 -4
  260. package/esm2022/lib/components/page-menu/schema/sproc-page-menu.types.mjs +0 -3
  261. package/esm2022/lib/components/page-menu/sproc-page-menu.component.mjs +0 -275
  262. package/esm2022/lib/components/paginator/paginator.component.mjs +0 -159
  263. package/esm2022/lib/components/paginator/types/paginator.types.mjs +0 -2
  264. package/esm2022/lib/components/register-table/consts/register-table.consts.mjs +0 -4
  265. package/esm2022/lib/components/register-table/directives/cell-template.directive.mjs +0 -19
  266. package/esm2022/lib/components/register-table/directives/header-template.directive.mjs +0 -18
  267. package/esm2022/lib/components/register-table/index.mjs +0 -4
  268. package/esm2022/lib/components/register-table/model/schema.mjs +0 -10
  269. package/esm2022/lib/components/register-table/pipes/class-by-type.pipe.mjs +0 -33
  270. package/esm2022/lib/components/register-table/pipes/sticky-column.pipe.mjs +0 -17
  271. package/esm2022/lib/components/register-table/register-table.component.mjs +0 -544
  272. package/esm2022/lib/components/reset-settings-form/reset-settings-form.component.mjs +0 -18
  273. package/esm2022/lib/components/search-input/search-input.component.mjs +0 -28
  274. package/esm2022/lib/components/sliding-panel/sliding-panel.component.mjs +0 -48
  275. package/esm2022/lib/components/sliding-panel/sliding-panel.module.mjs +0 -19
  276. package/esm2022/lib/consts/date-time.consts.mjs +0 -2
  277. package/esm2022/lib/consts/index.mjs +0 -4
  278. package/esm2022/lib/consts/inputs.consts.mjs +0 -4
  279. package/esm2022/lib/consts/month.consts.mjs +0 -77
  280. package/esm2022/lib/consts/params.consts.mjs +0 -2
  281. package/esm2022/lib/consts/register-base.consts.mjs +0 -26
  282. package/esm2022/lib/core/form-group-wrapper/errors-consts.mjs +0 -8
  283. package/esm2022/lib/core/form-group-wrapper/form-group-wrapper.mjs +0 -81
  284. package/esm2022/lib/core/form-group-wrapper/index.mjs +0 -2
  285. package/esm2022/lib/core/index.mjs +0 -5
  286. package/esm2022/lib/core/input-control/index.mjs +0 -2
  287. package/esm2022/lib/core/input-control/input-control.mjs +0 -11
  288. package/esm2022/lib/core/param/index.mjs +0 -6
  289. package/esm2022/lib/core/param/param-base.mjs +0 -215
  290. package/esm2022/lib/core/param/param-date-base.mjs +0 -26
  291. package/esm2022/lib/core/param/param-select-base.mjs +0 -114
  292. package/esm2022/lib/core/param/param-text-base.mjs +0 -25
  293. package/esm2022/lib/core/param/param.tokens.mjs +0 -4
  294. package/esm2022/lib/core/register-base/index.mjs +0 -3
  295. package/esm2022/lib/core/register-base/register-base.mjs +0 -575
  296. package/esm2022/lib/core/register-base/register-base.store.mjs +0 -43
  297. package/esm2022/lib/directives/date/date-time.types.mjs +0 -34
  298. package/esm2022/lib/directives/date/format-date.pipe.mjs +0 -33
  299. package/esm2022/lib/directives/index.mjs +0 -3
  300. package/esm2022/lib/directives/number/number-only.directive.mjs +0 -41
  301. package/esm2022/lib/directives/sticky/index.mjs +0 -3
  302. package/esm2022/lib/directives/sticky/sticky-relative.directive.mjs +0 -32
  303. package/esm2022/lib/directives/sticky/sticky-relative.service.mjs +0 -32
  304. package/esm2022/lib/directives/sticky/sticky.directive.mjs +0 -169
  305. package/esm2022/lib/services/date-time.service.mjs +0 -314
  306. package/esm2022/lib/services/dialog/dialog.service.mjs +0 -53
  307. package/esm2022/lib/services/dialog/dialog.types.mjs +0 -2
  308. package/esm2022/lib/services/dialog/index.mjs +0 -3
  309. package/esm2022/lib/services/dom-intersection.service.mjs +0 -22
  310. package/esm2022/lib/services/filter/filters-state.service.mjs +0 -65
  311. package/esm2022/lib/services/filter/filters-transmit.service.mjs +0 -82
  312. package/esm2022/lib/services/filter/filters.service.mjs +0 -23
  313. package/esm2022/lib/services/index.mjs +0 -8
  314. package/esm2022/lib/services/inputs-state.service.mjs +0 -130
  315. package/esm2022/lib/services/inputs.service.mjs +0 -88
  316. package/esm2022/lib/services/key-pressed.service.mjs +0 -37
  317. package/esm2022/lib/services/resize-window-observer.service.mjs +0 -33
  318. package/esm2022/lib/services/selected-objects-state.service.mjs +0 -123
  319. package/esm2022/lib/store/fast-query-store.service.mjs +0 -110
  320. package/esm2022/lib/store/index.mjs +0 -2
  321. package/esm2022/lib/types/event.types.mjs +0 -2
  322. package/esm2022/lib/types/hasura.types.mjs +0 -2
  323. package/esm2022/lib/types/index.mjs +0 -7
  324. package/esm2022/lib/types/inputs.types.mjs +0 -19
  325. package/esm2022/lib/types/params.types.mjs +0 -2
  326. package/esm2022/lib/types/register-base.types.mjs +0 -6
  327. package/esm2022/lib/types/sub-types.mjs +0 -2
  328. package/esm2022/lib/types/user-profile.types.mjs +0 -2
  329. package/esm2022/lib/utils/functions.mjs +0 -10
  330. package/esm2022/lib/utils/get-url-segment.mjs +0 -35
  331. package/esm2022/lib/utils/index.mjs +0 -5
  332. package/esm2022/lib/utils/prizm.shared.module.mjs +0 -284
  333. package/esm2022/lib/utils/rxjs.mjs +0 -28
  334. package/esm2022/lib/utils/select-all-utils.mjs +0 -11
  335. package/esm2022/ngx-register-base.mjs +0 -5
  336. package/esm2022/public-api.mjs +0 -9
  337. package/fesm2022/ngx-register-base.mjs +0 -7465
  338. package/fesm2022/ngx-register-base.mjs.map +0 -1
  339. package/index.d.ts +0 -5
  340. package/lib/components/checkbox-selector/checkbox-selector.component.d.ts +0 -33
  341. package/lib/components/checkbox-selector/checkbox-selector.types.d.ts +0 -7
  342. package/lib/components/column-settings/column-settings.component.d.ts +0 -80
  343. package/lib/components/column-settings/components/column-settings-template/column-settings-template.component.d.ts +0 -24
  344. package/lib/components/column-settings/consts/column-settings.consts.d.ts +0 -8
  345. package/lib/components/column-settings/types/column-settings.types.d.ts +0 -22
  346. package/lib/components/divider/divider.component.d.ts +0 -6
  347. package/lib/components/filter-button/filter-button.component.d.ts +0 -8
  348. package/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.d.ts +0 -14
  349. package/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.d.ts +0 -25
  350. package/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.d.ts +0 -39
  351. package/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.d.ts +0 -41
  352. package/lib/components/filters/components/filter-list/filter-list.service.d.ts +0 -20
  353. package/lib/components/filters/components/filter-list/filters-section/filters-section.component.d.ts +0 -15
  354. package/lib/components/filters/components/filter-list.module.d.ts +0 -15
  355. package/lib/components/filters/register-table-filter.component.d.ts +0 -40
  356. package/lib/components/filters/register-table-filter.module.d.ts +0 -13
  357. package/lib/components/inputs/inputs.module.d.ts +0 -31
  358. package/lib/components/inputs/param-calendar-year/param-calendar-year.component.d.ts +0 -19
  359. package/lib/components/inputs/param-custom/param-custom.component.d.ts +0 -6
  360. package/lib/components/inputs/param-date/param-date.component.d.ts +0 -20
  361. package/lib/components/inputs/param-date-range/param-date-range.component.d.ts +0 -26
  362. package/lib/components/inputs/param-date-time/param-date-time.component.d.ts +0 -25
  363. package/lib/components/inputs/param-date-time-range/param-date-time-range.component.d.ts +0 -28
  364. package/lib/components/inputs/param-month/param-month.component.d.ts +0 -18
  365. package/lib/components/inputs/param-month-range/param-month-range.component.d.ts +0 -21
  366. package/lib/components/inputs/param-multi-select/param-multi-select.component.d.ts +0 -46
  367. package/lib/components/inputs/param-select/param-select.component.d.ts +0 -30
  368. package/lib/components/inputs/param-switcher/param-switcher.component.d.ts +0 -8
  369. package/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.d.ts +0 -2
  370. package/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.d.ts +0 -19
  371. package/lib/components/inputs/param-switcher-date-time-range/types/param-switcher-date-time-range.types.d.ts +0 -8
  372. package/lib/components/inputs/param-text/param-text.component.d.ts +0 -10
  373. package/lib/components/inputs/param-textarea/param-textarea.component.d.ts +0 -10
  374. package/lib/components/inputs/param-toggle/param-toggle.component.d.ts +0 -9
  375. package/lib/components/inputs/param-tree/consts/param-tree.consts.d.ts +0 -7
  376. package/lib/components/inputs/param-tree/param-tree.component.d.ts +0 -41
  377. package/lib/components/inputs/param-tree/services/param-tree.service.d.ts +0 -37
  378. package/lib/components/inputs/param-tree/services/sync-tree-loader.service.d.ts +0 -10
  379. package/lib/components/inputs/param-tree/types/param-tree.types.d.ts +0 -32
  380. package/lib/components/inputs/param-tree/utils/param-tree.utils.d.ts +0 -7
  381. package/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.d.ts +0 -31
  382. package/lib/components/inputs/param-tree-select/param-tree-select.component.d.ts +0 -30
  383. package/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.d.ts +0 -6
  384. package/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.d.ts +0 -5
  385. package/lib/components/menu-constructor/sproc-menu-constructor.component.d.ts +0 -113
  386. package/lib/components/menu-constructor/store/sproc-abstract-menu-constructor.store.d.ts +0 -24
  387. package/lib/components/menu-constructor/store/sproc-menu-constructor.consts.d.ts +0 -36
  388. package/lib/components/page-menu/schema/sproc-page-menu.consts.d.ts +0 -7
  389. package/lib/components/page-menu/schema/sproc-page-menu.schema.d.ts +0 -30
  390. package/lib/components/page-menu/schema/sproc-page-menu.tokens.d.ts +0 -3
  391. package/lib/components/page-menu/schema/sproc-page-menu.types.d.ts +0 -36
  392. package/lib/components/page-menu/sproc-page-menu.component.d.ts +0 -48
  393. package/lib/components/paginator/paginator.component.d.ts +0 -52
  394. package/lib/components/paginator/types/paginator.types.d.ts +0 -15
  395. package/lib/components/register-table/consts/register-table.consts.d.ts +0 -3
  396. package/lib/components/register-table/directives/cell-template.directive.d.ts +0 -9
  397. package/lib/components/register-table/directives/header-template.directive.d.ts +0 -9
  398. package/lib/components/register-table/model/schema.d.ts +0 -52
  399. package/lib/components/register-table/pipes/class-by-type.pipe.d.ts +0 -8
  400. package/lib/components/register-table/pipes/sticky-column.pipe.d.ts +0 -7
  401. package/lib/components/register-table/register-table.component.d.ts +0 -165
  402. package/lib/components/reset-settings-form/reset-settings-form.component.d.ts +0 -9
  403. package/lib/components/search-input/search-input.component.d.ts +0 -11
  404. package/lib/components/sliding-panel/sliding-panel.component.d.ts +0 -14
  405. package/lib/components/sliding-panel/sliding-panel.module.d.ts +0 -9
  406. package/lib/consts/date-time.consts.d.ts +0 -1
  407. package/lib/consts/index.d.ts +0 -3
  408. package/lib/consts/inputs.consts.d.ts +0 -4
  409. package/lib/consts/month.consts.d.ts +0 -49
  410. package/lib/consts/params.consts.d.ts +0 -1
  411. package/lib/consts/register-base.consts.d.ts +0 -19
  412. package/lib/core/form-group-wrapper/errors-consts.d.ts +0 -5
  413. package/lib/core/form-group-wrapper/form-group-wrapper.d.ts +0 -15
  414. package/lib/core/input-control/input-control.d.ts +0 -11
  415. package/lib/core/param/param-base.d.ts +0 -68
  416. package/lib/core/param/param-date-base.d.ts +0 -18
  417. package/lib/core/param/param-select-base.d.ts +0 -42
  418. package/lib/core/param/param-text-base.d.ts +0 -15
  419. package/lib/core/register-base/register-base.d.ts +0 -168
  420. package/lib/core/register-base/register-base.store.d.ts +0 -35
  421. package/lib/directives/date/date-time.types.d.ts +0 -32
  422. package/lib/directives/date/format-date.pipe.d.ts +0 -10
  423. package/lib/directives/number/number-only.directive.d.ts +0 -10
  424. package/lib/directives/sticky/sticky-relative.directive.d.ts +0 -13
  425. package/lib/directives/sticky/sticky-relative.service.d.ts +0 -15
  426. package/lib/directives/sticky/sticky.directive.d.ts +0 -27
  427. package/lib/services/date-time.service.d.ts +0 -80
  428. package/lib/services/dialog/dialog.service.d.ts +0 -22
  429. package/lib/services/dom-intersection.service.d.ts +0 -8
  430. package/lib/services/filter/filters-state.service.d.ts +0 -21
  431. package/lib/services/filter/filters-transmit.service.d.ts +0 -28
  432. package/lib/services/filter/filters.service.d.ts +0 -12
  433. package/lib/services/inputs-state.service.d.ts +0 -57
  434. package/lib/services/inputs.service.d.ts +0 -28
  435. package/lib/services/key-pressed.service.d.ts +0 -15
  436. package/lib/services/resize-window-observer.service.d.ts +0 -11
  437. package/lib/services/selected-objects-state.service.d.ts +0 -47
  438. package/lib/store/fast-query-store.service.d.ts +0 -19
  439. package/lib/types/hasura.types.d.ts +0 -35
  440. package/lib/types/inputs.types.d.ts +0 -41
  441. package/lib/types/params.types.d.ts +0 -27
  442. package/lib/types/register-base.types.d.ts +0 -123
  443. package/lib/types/sub-types.d.ts +0 -8
  444. package/lib/types/user-profile.types.d.ts +0 -17
  445. package/lib/utils/functions.d.ts +0 -3
  446. package/lib/utils/get-url-segment.d.ts +0 -7
  447. package/lib/utils/prizm.shared.module.d.ts +0 -14
  448. package/lib/utils/rxjs.d.ts +0 -10
  449. package/lib/utils/select-all-utils.d.ts +0 -8
  450. package/schematics/ng-update/replace-menu-state-token/index.d.ts +0 -2
  451. package/schematics/ng-update/replace-menu-state-token/index.js +0 -29
  452. package/schematics/ng-update/replace-menu-state-token/index.js.map +0 -1
  453. package/schematics/ng-update/update-prefix/index.d.ts +0 -2
  454. package/schematics/ng-update/update-prefix/index.js +0 -33
  455. package/schematics/ng-update/update-prefix/index.js.map +0 -1
  456. package/schematics/utils/utils.js +0 -25
  457. package/schematics/utils/utils.js.map +0 -1
  458. /package/{lib/components/column-settings/index.d.ts → src/lib/components/column-settings/index.ts} +0 -0
  459. /package/{lib/components/filters/index.d.ts → src/lib/components/filters/index.ts} +0 -0
  460. /package/{lib/components/index.d.ts → src/lib/components/index.ts} +0 -0
  461. /package/{lib/components/inputs/index.d.ts → src/lib/components/inputs/index.ts} +0 -0
  462. /package/{lib/components/inputs/param-switcher-date-time-range/index.d.ts → src/lib/components/inputs/param-switcher-date-time-range/index.ts} +0 -0
  463. /package/{lib/components/inputs/param-tree/index.d.ts → src/lib/components/inputs/param-tree/index.ts} +0 -0
  464. /package/{lib/components/menu-constructor/index.d.ts → src/lib/components/menu-constructor/index.ts} +0 -0
  465. /package/{lib/components/page-menu/index.d.ts → src/lib/components/page-menu/index.ts} +0 -0
  466. /package/{lib/components/register-table/index.d.ts → src/lib/components/register-table/index.ts} +0 -0
  467. /package/{lib/core/form-group-wrapper/index.d.ts → src/lib/core/form-group-wrapper/index.ts} +0 -0
  468. /package/{lib/core/index.d.ts → src/lib/core/index.ts} +0 -0
  469. /package/{lib/core/input-control/index.d.ts → src/lib/core/input-control/index.ts} +0 -0
  470. /package/{lib/core/param/index.d.ts → src/lib/core/param/index.ts} +0 -0
  471. /package/{lib/core/register-base/index.d.ts → src/lib/core/register-base/index.ts} +0 -0
  472. /package/{lib/directives/index.d.ts → src/lib/directives/index.ts} +0 -0
  473. /package/{lib/directives/sticky/index.d.ts → src/lib/directives/sticky/index.ts} +0 -0
  474. /package/{lib/services/dialog/index.d.ts → src/lib/services/dialog/index.ts} +0 -0
  475. /package/{lib/services/index.d.ts → src/lib/services/index.ts} +0 -0
  476. /package/{lib/store/index.d.ts → src/lib/store/index.ts} +0 -0
  477. /package/{lib/types/index.d.ts → src/lib/types/index.ts} +0 -0
  478. /package/{lib/utils/index.d.ts → src/lib/utils/index.ts} +0 -0
  479. /package/{public-api.d.ts → src/public-api.ts} +0 -0
@@ -1,309 +0,0 @@
1
- import { DOCUMENT, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, forwardRef, Inject, input, output, signal, } from '@angular/core';
3
- import { BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, map, of, skip, switchMap, tap, } from 'rxjs';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { TUI_ITEMS_HANDLERS, TuiAppearance, TuiHint, TuiIcon, TuiTextfield } from '@taiga-ui/core';
6
- import { TuiMultiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';
7
- import { ReactiveFormsModule } from '@angular/forms';
8
- import { FastQueryStore } from '../../../store/fast-query-store.service';
9
- import { ParamSelectBase } from '../../../core/param/param-select-base';
10
- import { SELECT_ALL_ID, selectAllItem } from '../../../utils/select-all-utils';
11
- import { distinctUntilChangedJSONs } from '../../../utils';
12
- import { PARAM_SEARCH_INPUT_DEBOUNCE_TIME_MLS } from '../../../consts/params.consts';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@taiga-ui/core";
15
- import * as i2 from "@taiga-ui/legacy";
16
- import * as i3 from "@taiga-ui/core/components/data-list";
17
- import * as i4 from "@taiga-ui/kit/components/data-list-wrapper";
18
- import * as i5 from "@angular/forms";
19
- export class ParamMultiSelectComponent extends ParamSelectBase {
20
- constructor(injector, document) {
21
- super(injector);
22
- this.document = document;
23
- this.placeholder = input('Выберите значения');
24
- this.itemSelectAll = input(false);
25
- this.searchMatcher = input((search, item) => item.name?.toLowerCase().includes(search.toLowerCase()));
26
- this.shortPickedLength = input(true);
27
- this.stringify = input((item) => ('name' in item ? item.name : item.$implicit.name));
28
- this.identityMatcher = input((a, b) => a?.id === b?.id);
29
- this.buildShowedValue = input((values) => values?.map((v) => v.name).join(',\n') ?? '-');
30
- this.onSelect = output();
31
- this.selectAllItem = selectAllItem;
32
- this.searchValue = '';
33
- this.onSearch$ = new BehaviorSubject('');
34
- this.onSearchSubscription = null;
35
- this.cachedString = '';
36
- this.onClearButtonSubscription = null;
37
- this.choosedHint = '';
38
- }
39
- onInit() {
40
- this._subscribeOnSearch();
41
- if (this.itemSelectAll()) {
42
- this.items.unshift(this.selectAllItem);
43
- }
44
- }
45
- _subscribeOnSearch() {
46
- this.onSearch$
47
- .pipe(debounceTime(PARAM_SEARCH_INPUT_DEBOUNCE_TIME_MLS), distinctUntilChanged(), takeUntilDestroyed(this.dr))
48
- .subscribe((value) => {
49
- this.fetchItems(value);
50
- });
51
- }
52
- afterViewInit() {
53
- if (this.meta?.table && this.searchable) {
54
- this._subscribeOnClearButton();
55
- }
56
- if (this.meta) {
57
- this._observeFetchItems();
58
- }
59
- this._subscribeOnMetaChanges();
60
- this._subscribeOnValueControl();
61
- if (this.control?.value?.some((elem) => elem.id === SELECT_ALL_ID)) {
62
- if (this.items.length > 0) {
63
- this.control.setValue(this.items);
64
- }
65
- if (this.items.length === 1) {
66
- this.fetchItems();
67
- }
68
- }
69
- }
70
- _observeFetchItems() {
71
- this.control.valueChanges
72
- .pipe(filter(Boolean), filter((values) => {
73
- const someValueNotHaveName = values.some((value) => !value.name);
74
- const everyValuesExistsInItems = values.every(({ id }) => this.items.some((item) => item.id === id));
75
- return someValueNotHaveName && everyValuesExistsInItems;
76
- }), takeUntilDestroyed(this.dr))
77
- .subscribe((values) => {
78
- const ids = new Set(values.map((value) => value.id));
79
- const filledValues = this.items.filter(({ id }) => ids.has(id));
80
- this.control.setValue(filledValues, { emitEvent: false });
81
- });
82
- combineLatest([
83
- this.control.valueChanges.pipe(map((values) => values?.map((value) => value.id) ?? []), distinctUntilChangedJSONs(), filter((ids) => ids.some((id) => !this.items.some((item) => item.id === id)))),
84
- this.meta$,
85
- ])
86
- .pipe(takeUntilDestroyed(this.dr))
87
- .subscribe(() => {
88
- this.fetchItems();
89
- });
90
- }
91
- _subscribeOnMetaChanges() {
92
- this.meta$.pipe(takeUntilDestroyed(this.dr)).subscribe(() => {
93
- this.fetchItems();
94
- });
95
- }
96
- _subscribeOnValueControl() {
97
- let controlValue = this.control.value;
98
- this.control?.valueChanges
99
- .pipe(distinctUntilChangedJSONs(), map((values) => values ?? []), takeUntilDestroyed(this.dr))
100
- .subscribe((values) => {
101
- if (this.itemSelectAll()) {
102
- if (this.items.length - values.length === 1 &&
103
- values.filter((elem) => elem.id === SELECT_ALL_ID).length === 0 &&
104
- controlValue.includes(this.selectAllItem)) {
105
- this.control.setValue([], { emitEvent: false });
106
- }
107
- if (values?.some((elem) => elem.id === SELECT_ALL_ID)) {
108
- this.control.setValue(this.items, { emitEvent: false });
109
- }
110
- if (this.items.length !== values.length &&
111
- controlValue?.includes(this.selectAllItem) &&
112
- values?.some((elem) => elem.id === SELECT_ALL_ID)) {
113
- this.control.setValue(values.filter((elem) => elem !== this.selectAllItem), { emitEvent: false });
114
- }
115
- }
116
- controlValue = this.control.value;
117
- });
118
- }
119
- ngOnDestroy() {
120
- this.onSearch$.complete();
121
- this.onSearchSubscription?.unsubscribe();
122
- this.onCancelButtonSubscription?.unsubscribe();
123
- this.onClearButtonSubscription?.unsubscribe();
124
- }
125
- fetchItems(searchValue) {
126
- const { idField, valueField } = this.metaFields;
127
- if (!this.meta?.table?.name || idField === null || valueField === null) {
128
- return;
129
- }
130
- const selectedItemIDs = this._getSelectedItemIDs(searchValue);
131
- this.loading = true;
132
- const where = this.buildWhere(searchValue);
133
- const selectedItemIdsWhere = this._buildSelectedItemIdsWhere(where, selectedItemIDs, idField);
134
- let fetchAll = false;
135
- if (this.control.value?.some((elem) => elem.id === SELECT_ALL_ID)) {
136
- fetchAll = true;
137
- }
138
- const qParams = {
139
- table: this.meta.table,
140
- where,
141
- order_by: this.meta.order_by,
142
- offset: this.meta.offset,
143
- distinct_on: this.meta.distinct_on,
144
- subquery: this.meta.subquery,
145
- };
146
- if (!fetchAll) {
147
- qParams.limit = this.meta.limit ?? this.limit;
148
- }
149
- this.store
150
- .getResults(qParams, true, selectedItemIdsWhere)
151
- .pipe(tap((data) => {
152
- this._handleResults(data, idField, valueField, selectedItemIDs);
153
- }), tap(() => {
154
- if (this.itemSelectAll() &&
155
- this.items.length > 0 &&
156
- !this.items.includes(this.selectAllItem)) {
157
- this.items.unshift(this.selectAllItem);
158
- }
159
- if (fetchAll) {
160
- this.control.setValue(this.items, { emitEvent: false });
161
- }
162
- this.loading = false;
163
- this.cdr.markForCheck();
164
- }), takeUntilDestroyed(this.dr))
165
- .subscribe(() => {
166
- this.choosedHint =
167
- this.control
168
- .getRawValue()
169
- ?.map((elem) => elem.name)
170
- .join(', ') ?? '';
171
- });
172
- }
173
- _subscribeOnClearButton() {
174
- this.onClearButtonSubscription?.unsubscribe();
175
- this.onClearButtonSubscription = this.onSearch$
176
- .pipe(skip(1), switchMap((value) => {
177
- if (value.length > 0 && this.cachedString.length === 0) {
178
- const elements = this.document.querySelectorAll('.input-search');
179
- const clearButtonClicks$ = [];
180
- for (let i = 0; i < elements.length; i++) {
181
- const founded = elements.item(i);
182
- const item = founded?.parentElement;
183
- if (founded && item && item.className === 'prizm-input-form-body') {
184
- clearButtonClicks$.push(of(null).pipe(delay(300), switchMap(() => {
185
- const clearButton = item.parentElement?.getElementsByClassName('prizm-input-label-clear-btn prizm-input-button-default clear-icon interactive ng-star-inserted');
186
- if (clearButton?.[0]) {
187
- clearButton[0].addEventListener('click', () => {
188
- this.onSearch$.next('');
189
- });
190
- }
191
- return of(null);
192
- })));
193
- }
194
- }
195
- return clearButtonClicks$.length > 0 ? clearButtonClicks$[0] : of(null);
196
- }
197
- this.cachedString = value;
198
- return of(null);
199
- }), takeUntilDestroyed(this.dr))
200
- .subscribe();
201
- }
202
- _getSelectedItemIDs(searchValue) {
203
- if (!searchValue || searchValue === '') {
204
- return this.value?.filter((elem) => elem.id !== SELECT_ALL_ID).map((val) => val.id);
205
- }
206
- return;
207
- }
208
- _buildSelectedItemIdsWhere(where, selectedItemIDs, idField) {
209
- if (where && selectedItemIDs && selectedItemIDs.length > 0) {
210
- return { _and: [{ [idField]: { _in: selectedItemIDs } }, where] };
211
- }
212
- return;
213
- }
214
- _handleResults(data, idField, valueField, selectedItemIDs) {
215
- this.items = data.data.map((item) => ({
216
- ...item,
217
- id: item[idField] ?? '',
218
- name: this._getNameFromField(item, valueField),
219
- }));
220
- if (this.itemSelectAll() && this.items.length > 0) {
221
- this.items.unshift(this.selectAllItem);
222
- }
223
- this._updateControlValues(data, idField, valueField, selectedItemIDs);
224
- }
225
- _updateControlValues(data, idField, valueField, selectedItemIDs) {
226
- const idsSelectedValues = new Set(this.value?.map((val) => val[idField]) ?? []);
227
- const availableItems = data.selectedIdsQuery
228
- ?.filter((item) => idsSelectedValues.has(item[idField]))
229
- .map((item) => ({
230
- ...item,
231
- id: item[idField] ?? '',
232
- name: this._getNameFromField(item, valueField),
233
- })) ?? [];
234
- if (selectedItemIDs && selectedItemIDs.length > 0 && availableItems.length > 0) {
235
- this.control?.setValue(availableItems, { emitEvent: !this.itemSelectAll });
236
- }
237
- const itemsThatDontExist = availableItems.filter((new_item) => !this.items?.some((value) => value.id === new_item.id));
238
- this.items.push(...itemsThatDontExist);
239
- this.itemsChange.emit(this.items);
240
- }
241
- _getNameFromField(item, field) {
242
- if (field.includes('.')) {
243
- return this._getNameFromDeepField(item, field);
244
- }
245
- return this.formatShowedValue(item, field);
246
- }
247
- _getNameFromDeepField(item, field) {
248
- const deepFields = field.split('.');
249
- let tempObject = { ...item };
250
- for (const deepField of deepFields) {
251
- tempObject = tempObject[deepField];
252
- }
253
- return tempObject;
254
- }
255
- onSearch(value) {
256
- if (this.searchable) {
257
- this.onSearch$.next(value ?? '');
258
- }
259
- }
260
- getListLength(list) {
261
- const length = list.some((item) => item?.id === SELECT_ALL_ID) ? list.length - 1 : list.length;
262
- return length === 1 ? '' : String(length);
263
- }
264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ParamMultiSelectComponent, deps: [{ token: i0.Injector }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
265
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ParamMultiSelectComponent, isStandalone: true, selector: "sproc-param-multi-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, itemSelectAll: { classPropertyName: "itemSelectAll", publicName: "itemSelectAll", isSignal: true, isRequired: false, transformFunction: null }, searchMatcher: { classPropertyName: "searchMatcher", publicName: "searchMatcher", isSignal: true, isRequired: false, transformFunction: null }, shortPickedLength: { classPropertyName: "shortPickedLength", publicName: "shortPickedLength", isSignal: true, isRequired: false, transformFunction: null }, stringify: { classPropertyName: "stringify", publicName: "stringify", isSignal: true, isRequired: false, transformFunction: null }, identityMatcher: { classPropertyName: "identityMatcher", publicName: "identityMatcher", isSignal: true, isRequired: false, transformFunction: null }, buildShowedValue: { classPropertyName: "buildShowedValue", publicName: "buildShowedValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, providers: [
266
- FastQueryStore,
267
- {
268
- provide: TUI_ITEMS_HANDLERS,
269
- deps: [forwardRef(() => ParamMultiSelectComponent)],
270
- useFactory: (component) => ({
271
- stringify: component.stringify,
272
- identityMatcher: component.identityMatcher,
273
- disabledItemHandler: signal((_) => false),
274
- }),
275
- },
276
- ], usesInheritance: true, ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon\n *ngIf=\"hint\"\n icon=\"assets/ngx-register-base/icons/circle-info-empty.svg\"\n [tuiHint]=\"hint\"\n class=\"hintIcon\"\n ></tui-icon>\n </div>\n <tui-multi-select\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n tuiAppearance=\"sproc-input-appearance\"\n [valueContent]=\"valueContent\"\n tuiTextfieldSize=\"m\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n (searchChange)=\"onSearch($event)\"\n [editable]=\"searchable\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n\n <tui-data-list-wrapper\n *tuiDataList\n tuiMultiSelectGroup\n [items]=\"items\"\n [itemContent]=\"listItemTemplate ?? itemContent\"\n ></tui-data-list-wrapper>\n </tui-multi-select>\n\n <ng-template #itemContent let-data>\n {{ data.name }}\n </ng-template>\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);padding-left:8px;width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{margin-left:8px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}:host ::ng-deep .choosed{display:none}:host ::ng-deep .empty{position:relative}:host ::ng-deep .t-value-content{padding-left:16px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: i1.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"] }, { kind: "ngmodule", type: TuiMultiSelectModule }, { kind: "component", type: i2.TuiMultiSelectComponent, selector: "tui-multi-select", inputs: ["stringify", "identityMatcher", "search", "placeholder", "editable", "disabledItemHandler", "valueContent", "tagValidator", "rows", "autoColor"], outputs: ["searchChange"] }, { kind: "directive", type: i2.TuiMultiSelectGroupDirective, selector: "[tuiMultiSelectGroup]" }, { kind: "directive", type: i2.TuiMultiSelectDirective, selector: "tui-multi-select" }, { kind: "directive", type: i3.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i4.TuiDataListWrapperComponent, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: ["items", "disabledItemHandler", "emptyContent", "size", "itemContent"], outputs: ["itemClick"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceMode"] }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.TuiTextfieldCleanerDirective, selector: "[tuiTextfieldCleaner]", inputs: ["tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
277
- }
278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ParamMultiSelectComponent, decorators: [{
279
- type: Component,
280
- args: [{ selector: 'sproc-param-multi-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
281
- FastQueryStore,
282
- {
283
- provide: TUI_ITEMS_HANDLERS,
284
- deps: [forwardRef(() => ParamMultiSelectComponent)],
285
- useFactory: (component) => ({
286
- stringify: component.stringify,
287
- identityMatcher: component.identityMatcher,
288
- disabledItemHandler: signal((_) => false),
289
- }),
290
- },
291
- ], standalone: true, imports: [
292
- NgTemplateOutlet,
293
- NgIf,
294
- NgSwitch,
295
- NgSwitchCase,
296
- NgSwitchDefault,
297
- TuiIcon,
298
- TuiHint,
299
- TuiMultiSelectModule,
300
- ReactiveFormsModule,
301
- TuiTextfield,
302
- TuiAppearance,
303
- TuiTextfieldControllerModule,
304
- ], template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon\n *ngIf=\"hint\"\n icon=\"assets/ngx-register-base/icons/circle-info-empty.svg\"\n [tuiHint]=\"hint\"\n class=\"hintIcon\"\n ></tui-icon>\n </div>\n <tui-multi-select\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n tuiAppearance=\"sproc-input-appearance\"\n [valueContent]=\"valueContent\"\n tuiTextfieldSize=\"m\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n (searchChange)=\"onSearch($event)\"\n [editable]=\"searchable\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n\n <tui-data-list-wrapper\n *tuiDataList\n tuiMultiSelectGroup\n [items]=\"items\"\n [itemContent]=\"listItemTemplate ?? itemContent\"\n ></tui-data-list-wrapper>\n </tui-multi-select>\n\n <ng-template #itemContent let-data>\n {{ data.name }}\n </ng-template>\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);padding-left:8px;width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{margin-left:8px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}:host ::ng-deep .choosed{display:none}:host ::ng-deep .empty{position:relative}:host ::ng-deep .t-value-content{padding-left:16px}\n"] }]
305
- }], ctorParameters: () => [{ type: i0.Injector }, { type: Document, decorators: [{
306
- type: Inject,
307
- args: [DOCUMENT]
308
- }] }] });
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvcGFyYW0tbXVsdGktc2VsZWN0L3BhcmFtLW11bHRpLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL3BhcmFtLW11bHRpLXNlbGVjdC9wYXJhbS1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILEVBQUUsRUFDRixJQUFJLEVBRUosU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFP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LE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLDRCQUE0QjtxQkFDN0I7OzBCQTJDRSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBET0NVTUVOVCxcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxuICBOZ1RlbXBsYXRlT3V0bGV0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJpem1NdWx0aVNlbGVjdFNlYXJjaE1hdGNoZXIgfSBmcm9tICdAcHJpem0tdWkvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgb2YsXG4gIHNraXAsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVFVJX0lURU1TX0hBTkRMRVJTLCBUdWlBcHBlYXJhbmNlLCBUdWlIaW50LCBUdWlJY29uLCBUdWlUZXh0ZmllbGQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlNdWx0aVNlbGVjdE1vZHVsZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUNvbnRleHQsIFR1aUlkZW50aXR5TWF0Y2hlciwgVHVpU3RyaW5nSGFuZGxlciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgRmFzdFF1ZXJ5U3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9mYXN0LXF1ZXJ5LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZpbHRlclNlbGVjdFZhbHVlLCBNZXRhUXVlcnkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9wYXJhbXMudHlwZXMnO1xuaW1wb3J0IHsgUGFyYW1TZWxlY3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wYXJhbS9wYXJhbS1zZWxlY3QtYmFzZSc7XG5pbXBvcnQgeyBTRUxFQ1RfQUxMX0lELCBzZWxlY3RBbGxJdGVtIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2VsZWN0LWFsbC11dGlscyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUEFSQU1fU0VBUkNIX0lOUFVUX0RFQk9VTkNFX1RJTUVfTUxTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL3BhcmFtcy5jb25zdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcHJvYy1wYXJhbS1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5sZXNzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBGYXN0UXVlcnlTdG9yZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUVUlfSVRFTVNfSEFORExFUlMsXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50KV0sXG4gICAgICB1c2VGYWN0b3J5OiAoY29tcG9uZW50OiBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50KSA9PiAoe1xuICAgICAgICBzdHJpbmdpZnk6IGNvbXBvbmVudC5zdHJpbmdpZnksXG4gICAgICAgIGlkZW50aXR5TWF0Y2hlcjogY29tcG9uZW50LmlkZW50aXR5TWF0Y2hlcixcbiAgICAgICAgZGlzYWJsZWRJdGVtSGFuZGxlcjogc2lnbmFsKChfOiBJRmlsdGVyU2VsZWN0VmFsdWUpID0+IGZhbHNlKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBUdWlJY29uLFxuICAgIFR1aUhpbnQsXG4gICAgVHVpTXVsdGlTZWxlY3RNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUdWlUZXh0ZmllbGQsXG4gICAgVHVpQXBwZWFyYW5jZSxcbiAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50XG4gIGV4dGVuZHMgUGFyYW1TZWxlY3RCYXNlPElGaWx0ZXJTZWxlY3RWYWx1ZVtdLCBJRmlsdGVyU2VsZWN0VmFsdWVbXT5cbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgb3ZlcnJpZGUgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dCgn0JLRi9Cx0LXRgNC40YLQtSDQt9C90LDRh9C10L3QuNGPJyk7XG4gIHJlYWRvbmx5IGl0ZW1TZWxlY3RBbGwgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHNlYXJjaE1hdGNoZXIgPSBpbnB1dDxQcml6bU11bHRpU2VsZWN0U2VhcmNoTWF0Y2hlcjxJRmlsdGVyU2VsZWN0VmFsdWU+PihcbiAgICAoc2VhcmNoOiBzdHJpbmcsIGl0ZW06IElGaWx0ZXJTZWxlY3RWYWx1ZSkgPT5cbiAgICAgIGl0ZW0ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcbiAgKTtcbiAgcmVhZG9ubHkgc2hvcnRQaWNrZWRMZW5ndGggPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSBzdHJpbmdpZnkgPSBpbnB1dDxUdWlTdHJpbmdIYW5kbGVyPElGaWx0ZXJTZWxlY3RWYWx1ZSB8IFR1aUNvbnRleHQ8SUZpbHRlclNlbGVjdFZhbHVlPj4+KFxuICAgIChpdGVtKSA9PiAoJ25hbWUnIGluIGl0ZW0gPyBpdGVtLm5hbWUgOiBpdGVtLiRpbXBsaWNpdC5uYW1lKVxuICApO1xuXG4gIHJlYWRvbmx5IGlkZW50aXR5TWF0Y2hlciA9IGlucHV0PFR1aUlkZW50aXR5TWF0Y2hlcjxJRmlsdGVyU2VsZWN0VmFsdWU+PihcbiAgICAoYSwgYikgPT4gYT8uaWQgPT09IGI/LmlkXG4gICk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgYnVpbGRTaG93ZWRWYWx1ZSA9IGlucHV0KFxuICAgICh2YWx1ZXM6IElGaWx0ZXJTZWxlY3RWYWx1ZVtdKTogc3RyaW5nID0+IHZhbHVlcz8ubWFwKCh2KSA9PiB2Lm5hbWUpLmpvaW4oJyxcXG4nKSA/PyAnLSdcbiAgKTtcblxuICByZWFkb25seSBvblNlbGVjdCA9IG91dHB1dDxJRmlsdGVyU2VsZWN0VmFsdWVbXT4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0QWxsSXRlbTogSUZpbHRlclNlbGVjdFZhbHVlID0gc2VsZWN0QWxsSXRlbTtcblxuICBwcm90ZWN0ZWQgb25DYW5jZWxCdXR0b25TdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFZhbHVlID0gJyc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uU2VhcmNoJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIG9uU2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWRTdHJpbmcgPSAnJztcblxuICBwcml2YXRlIG9uQ2xlYXJCdXR0b25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY2hvb3NlZEhpbnQgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVPblNlYXJjaCgpO1xuXG4gICAgaWYgKHRoaXMuaXRlbVNlbGVjdEFsbCgpKSB7XG4gICAgICB0aGlzLml0ZW1zLnVuc2hpZnQodGhpcy5zZWxlY3RBbGxJdGVtKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPblNlYXJjaCgpIHtcbiAgICB0aGlzLm9uU2VhcmNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZShQQVJBTV9TRUFSQ0hfSU5QVVRfREVCT1VOQ0VfVElNRV9NTFMpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtcyh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBhZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1ldGE/LnRhYmxlICYmIHRoaXMuc2VhcmNoYWJsZSkge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlT25DbGVhckJ1dHRvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVGZXRjaEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaWJlT25NZXRhQ2hhbmdlcygpO1xuICAgIHRoaXMuX3N1YnNjcmliZU9uVmFsdWVDb250cm9sKCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sPy52YWx1ZT8uc29tZSgoZWxlbTogYW55KSA9PiBlbGVtLmlkID09PSBTRUxFQ1RfQUxMX0lEKSkge1xuICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5pdGVtcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5mZXRjaEl0ZW1zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUZldGNoSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBzb21lVmFsdWVOb3RIYXZlTmFtZSA9IHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gIXZhbHVlLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcyA9IHZhbHVlcy5ldmVyeSgoeyBpZCB9KSA9PlxuICAgICAgICAgICAgdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHNvbWVWYWx1ZU5vdEhhdmVOYW1lICYmIGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcztcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQodmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLmlkKSk7XG4gICAgICAgIGNvbnN0IGZpbGxlZFZhbHVlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKCh7IGlkIH0pID0+IGlkcy5oYXMoaWQpKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZmlsbGVkVmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzPy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5pZCkgPz8gW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zKCksXG4gICAgICAgIGZpbHRlcigoaWRzKSA9PiBpZHMuc29tZSgoaWQpID0+ICF0aGlzLml0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSkpXG4gICAgICApLFxuICAgICAgdGhpcy5tZXRhJCxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZHIpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPbk1ldGFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMubWV0YSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoSXRlbXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZU9uVmFsdWVDb250cm9sKCk6IHZvaWQge1xuICAgIGxldCBjb250cm9sVmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWU7XG5cbiAgICB0aGlzLmNvbnRyb2w/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkSlNPTnMoKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcyA/PyBbXSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1TZWxlY3RBbGwoKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gdmFsdWVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdmFsdWVzLmZpbHRlcigoZWxlbSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICBjb250cm9sVmFsdWUuaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFtdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlcz8uc29tZSgoZWxlbSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLml0ZW1zLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGggJiZcbiAgICAgICAgICAgIGNvbnRyb2xWYWx1ZT8uaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKSAmJlxuICAgICAgICAgICAgdmFsdWVzPy5zb21lKChlbGVtKSA9PiBlbGVtLmlkID09PSBTRUxFQ1RfQUxMX0lEKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICB2YWx1ZXMuZmlsdGVyKChlbGVtKSA9PiBlbGVtICE9PSB0aGlzLnNlbGVjdEFsbEl0ZW0pLFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbFZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vblNlYXJjaCQuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DYW5jZWxCdXR0b25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNsZWFyQnV0dG9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZldGNoSXRlbXMoc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkRmllbGQsIHZhbHVlRmllbGQgfSA9IHRoaXMubWV0YUZpZWxkcztcbiAgICBpZiAoIXRoaXMubWV0YT8udGFibGU/Lm5hbWUgfHwgaWRGaWVsZCA9PT0gbnVsbCB8fCB2YWx1ZUZpZWxkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtSURzID0gdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtSURzKHNlYXJjaFZhbHVlKTtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLmJ1aWxkV2hlcmUoc2VhcmNoVmFsdWUpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbUlkc1doZXJlID0gdGhpcy5fYnVpbGRTZWxlY3RlZEl0ZW1JZHNXaGVyZSh3aGVyZSwgc2VsZWN0ZWRJdGVtSURzLCBpZEZpZWxkKTtcbiAgICBsZXQgZmV0Y2hBbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWU/LnNvbWUoKGVsZW06IGFueSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkpIHtcbiAgICAgIGZldGNoQWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcVBhcmFtczogTWV0YVF1ZXJ5ID0ge1xuICAgICAgdGFibGU6IHRoaXMubWV0YS50YWJsZSxcbiAgICAgIHdoZXJlLFxuICAgICAgb3JkZXJfYnk6IHRoaXMubWV0YS5vcmRlcl9ieSxcbiAgICAgIG9mZnNldDogdGhpcy5tZXRhLm9mZnNldCxcbiAgICAgIGRpc3RpbmN0X29uOiB0aGlzLm1ldGEuZGlzdGluY3Rfb24sXG4gICAgICBzdWJxdWVyeTogdGhpcy5tZXRhLnN1YnF1ZXJ5LFxuICAgIH07XG4gICAgaWYgKCFmZXRjaEFsbCkge1xuICAgICAgcVBhcmFtcy5saW1pdCA9IHRoaXMubWV0YS5saW1pdCA/PyB0aGlzLmxpbWl0O1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmVcbiAgICAgIC5nZXRSZXN1bHRzKHFQYXJhbXMsIHRydWUsIHNlbGVjdGVkSXRlbUlkc1doZXJlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdHMoZGF0YSwgaWRGaWVsZCwgdmFsdWVGaWVsZCwgc2VsZWN0ZWRJdGVtSURzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pdGVtU2VsZWN0QWxsKCkgJiZcbiAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuaXRlbXMuaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmZXRjaEFsbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuaXRlbXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNob29zZWRIaW50ID1cbiAgICAgICAgICB0aGlzLmNvbnRyb2xcbiAgICAgICAgICAgIC5nZXRSYXdWYWx1ZSgpXG4gICAgICAgICAgICA/Lm1hcCgoZWxlbTogYW55KSA9PiBlbGVtLm5hbWUpXG4gICAgICAgICAgICAuam9pbignLCAnKSA/PyAnJztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlT25DbGVhckJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2xlYXJCdXR0b25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNsZWFyQnV0dG9uU3Vic2NyaXB0aW9uID0gdGhpcy5vblNlYXJjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5jYWNoZWRTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmlucHV0LXNlYXJjaCcpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJCdXR0b25DbGlja3MkID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kZWQgPSBlbGVtZW50cy5pdGVtKGkpO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZm91bmRlZD8ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kZWQgJiYgaXRlbSAmJiBpdGVtLmNsYXNzTmFtZSA9PT0gJ3ByaXptLWlucHV0LWZvcm0tYm9keScpIHtcbiAgICAgICAgICAgICAgICBjbGVhckJ1dHRvbkNsaWNrcyQucHVzaChcbiAgICAgICAgICAgICAgICAgIG9mKG51bGwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDMwMCksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYXJCdXR0b24gPSBpdGVtLnBhcmVudEVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAncHJpem0taW5wdXQtbGFiZWwtY2xlYXItYnRuIHByaXptLWlucHV0LWJ1dHRvbi1kZWZhdWx0IGNsZWFyLWljb24gaW50ZXJhY3RpdmUgbmctc3Rhci1pbnNlcnRlZCdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhckJ1dHRvbj8uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckJ1dHRvblswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaCQubmV4dCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbGVhckJ1dHRvbkNsaWNrcyQubGVuZ3RoID4gMCA/IGNsZWFyQnV0dG9uQ2xpY2tzJFswXSA6IG9mKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhY2hlZFN0cmluZyA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWRJdGVtSURzKHNlYXJjaFZhbHVlPzogc3RyaW5nKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghc2VhcmNoVmFsdWUgfHwgc2VhcmNoVmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZT8uZmlsdGVyKChlbGVtKSA9PiBlbGVtLmlkICE9PSBTRUxFQ1RfQUxMX0lEKS5tYXAoKHZhbDogYW55KSA9PiB2YWwuaWQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkU2VsZWN0ZWRJdGVtSWRzV2hlcmUoXG4gICAgd2hlcmU6IGFueSxcbiAgICBzZWxlY3RlZEl0ZW1JRHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGlkRmllbGQ6IHN0cmluZ1xuICApOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICh3aGVyZSAmJiBzZWxlY3RlZEl0ZW1JRHMgJiYgc2VsZWN0ZWRJdGVtSURzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IF9hbmQ6IFt7IFtpZEZpZWxkXTogeyBfaW46IHNlbGVjdGVkSXRlbUlEcyB9IH0sIHdoZXJlXSB9O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVSZXN1bHRzKFxuICAgIGRhdGE6IGFueSxcbiAgICBpZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWVGaWVsZDogc3RyaW5nLFxuICAgIHNlbGVjdGVkSXRlbUlEczogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyA9IGRhdGEuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpZDogaXRlbVtpZEZpZWxkXSA/PyAnJyxcbiAgICAgIG5hbWU6IHRoaXMuX2dldE5hbWVGcm9tRmllbGQoaXRlbSwgdmFsdWVGaWVsZCksXG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaXRlbVNlbGVjdEFsbCgpICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbHVlcyhkYXRhLCBpZEZpZWxkLCB2YWx1ZUZpZWxkLCBzZWxlY3RlZEl0ZW1JRHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ29udHJvbFZhbHVlcyhcbiAgICBkYXRhOiBhbnksXG4gICAgaWRGaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcbiAgICBzZWxlY3RlZEl0ZW1JRHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGlkc1NlbGVjdGVkVmFsdWVzID0gbmV3IFNldCh0aGlzLnZhbHVlPy5tYXAoKHZhbDogYW55KSA9PiB2YWxbaWRGaWVsZF0pID8/IFtdKTtcbiAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9XG4gICAgICBkYXRhLnNlbGVjdGVkSWRzUXVlcnlcbiAgICAgICAgPy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaWRzU2VsZWN0ZWRWYWx1ZXMuaGFzKGl0ZW1baWRGaWVsZF0pKVxuICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBpZDogaXRlbVtpZEZpZWxkXSA/PyAnJyxcbiAgICAgICAgICBuYW1lOiB0aGlzLl9nZXROYW1lRnJvbUZpZWxkKGl0ZW0sIHZhbHVlRmllbGQpLFxuICAgICAgICB9KSkgPz8gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRJdGVtSURzICYmIHNlbGVjdGVkSXRlbUlEcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoYXZhaWxhYmxlSXRlbXMsIHsgZW1pdEV2ZW50OiAhdGhpcy5pdGVtU2VsZWN0QWxsIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zVGhhdERvbnRFeGlzdCA9IGF2YWlsYWJsZUl0ZW1zLmZpbHRlcihcbiAgICAgIChuZXdfaXRlbTogYW55KSA9PiAhdGhpcy5pdGVtcz8uc29tZSgodmFsdWU6IGFueSkgPT4gdmFsdWUuaWQgPT09IG5ld19pdGVtLmlkKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zLnB1c2goLi4uaXRlbXNUaGF0RG9udEV4aXN0KTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROYW1lRnJvbUZpZWxkKGl0ZW06IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGZpZWxkLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXROYW1lRnJvbURlZXBGaWVsZChpdGVtLCBmaWVsZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFNob3dlZFZhbHVlKGl0ZW0sIGZpZWxkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5hbWVGcm9tRGVlcEZpZWxkKGl0ZW06IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVlcEZpZWxkcyA9IGZpZWxkLnNwbGl0KCcuJyk7XG4gICAgbGV0IHRlbXBPYmplY3QgPSB7IC4uLml0ZW0gfTtcblxuICAgIGZvciAoY29uc3QgZGVlcEZpZWxkIG9mIGRlZXBGaWVsZHMpIHtcbiAgICAgIHRlbXBPYmplY3QgPSB0ZW1wT2JqZWN0W2RlZXBGaWVsZF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBPYmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZWFyY2godmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWFyY2hhYmxlKSB7XG4gICAgICB0aGlzLm9uU2VhcmNoJC5uZXh0KHZhbHVlID8/ICcnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGlzdExlbmd0aChsaXN0OiBJRmlsdGVyU2VsZWN0VmFsdWVbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGVuZ3RoID0gbGlzdC5zb21lKChpdGVtKSA9PiBpdGVtPy5pZCA9PT0gU0VMRUNUX0FMTF9JRCkgPyBsaXN0Lmxlbmd0aCAtIDEgOiBsaXN0Lmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoID09PSAxID8gJycgOiBTdHJpbmcobGVuZ3RoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWFkbW9kZSA/IHJlYWRUZW1wbGF0ZSA6IGVkaXRUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgI3JlYWRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnRhaW5lci0tcmVhZFwiIFthdHRyLnNwcm9jLXBhcmFtLXN0eWxlXT1cInBhcmFtU3R5bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cImZpbHRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGVkLXJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hlZC1yb3dcIj48L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZSA/IHNob3dlZFZhbHVlVGVtcGxhdGUgOiBlbXB0eVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd2VkVmFsdWVUZW1wbGF0ZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJ2YWx1ZVwiPnt7IHNob3dlZFZhbHVlIH19PC9wcmU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCIgW3R1aUhpbnRdPVwic2hvd2VkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzaG93ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPi08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb250YWluZXItLWVkaXRcIiBbYXR0ci5zcHJvYy1wYXJhbS1zdHlsZV09XCJwYXJhbVN0eWxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIiBbY2xhc3MuYXBwbGllZF09XCJhcHBsaWVkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgKm5nSWY9XCJoaW50XCJcbiAgICAgICAgICBpY29uPVwiYXNzZXRzL25neC1yZWdpc3Rlci1iYXNlL2ljb25zL2NpcmNsZS1pbmZvLWVtcHR5LnN2Z1wiXG4gICAgICAgICAgW3R1aUhpbnRdPVwiaGludFwiXG4gICAgICAgICAgY2xhc3M9XCJoaW50SWNvblwiXG4gICAgICAgID48L3R1aS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8dHVpLW11bHRpLXNlbGVjdFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgIFt0dWlUZXh0ZmllbGRMYWJlbE91dHNpZGVdPVwidHJ1ZVwiXG4gICAgICAgIFt0dWlUZXh0ZmllbGRDbGVhbmVyXT1cInRydWVcIlxuICAgICAgICB0dWlBcHBlYXJhbmNlPVwic3Byb2MtaW5wdXQtYXBwZWFyYW5jZVwiXG4gICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwidmFsdWVDb250ZW50XCJcbiAgICAgICAgdHVpVGV4dGZpZWxkU2l6ZT1cIm1cIlxuICAgICAgICBbc3RyaW5naWZ5XT1cInN0cmluZ2lmeSgpXCJcbiAgICAgICAgW2lkZW50aXR5TWF0Y2hlcl09XCJpZGVudGl0eU1hdGNoZXIoKVwiXG4gICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIFtlZGl0YWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyKCkgfX08L3NwYW4+XG5cbiAgICAgICAgPHR1aS1kYXRhLWxpc3Qtd3JhcHBlclxuICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgIHR1aU11bHRpU2VsZWN0R3JvdXBcbiAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgICAgICAgIFtpdGVtQ29udGVudF09XCJsaXN0SXRlbVRlbXBsYXRlID8/IGl0ZW1Db250ZW50XCJcbiAgICAgICAgPjwvdHVpLWRhdGEtbGlzdC13cmFwcGVyPlxuICAgICAgPC90dWktbXVsdGktc2VsZWN0PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2l0ZW1Db250ZW50IGxldC1kYXRhPlxuICAgICAgICB7eyBkYXRhLm5hbWUgfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlQ29udGVudCBsZXQtbGlzdD5cbiAgICAgICAgQGxldCBpc1NpbmdsZSA9IGxpc3QubGVuZ3RoID09PSAxO1xuICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXNTaW5nbGUgPyAnY2hvb3NlZCBjaG9vc2VkLW9uZScgOiAnY2hvb3NlZCBjaG9vc2VkLW1hbnknXCI+XG4gICAgICAgICAge3sgaXNTaW5nbGUgPyBsaXN0WzBdLm5hbWUgOiBzaG9ydFBpY2tlZExlbmd0aCgpID8gJ9CS0YvQsdGA0LDQvdC+OiAnIDogbnVsbCB9fVxuICAgICAgICAgIHt7IGdldExpc3RMZW5ndGgobGlzdCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19