ng-prime-tools 1.0.4 → 1.0.6

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 (233) hide show
  1. package/README.md +488 -0
  2. package/esm2022/lib/enums/button-color.enum.mjs +10 -0
  3. package/esm2022/lib/enums/form-input-type.enum.mjs +14 -0
  4. package/esm2022/lib/enums/index.mjs +2 -6
  5. package/esm2022/lib/enums/input-validation.enum.mjs +8 -0
  6. package/esm2022/lib/enums/public-api.mjs +7 -0
  7. package/esm2022/lib/enums/{search-criteria-type-enum.mjs → search-criteria-type.enum.mjs} +1 -1
  8. package/esm2022/lib/enums/{table-type-enum.mjs → table-type.enum.mjs} +1 -1
  9. package/esm2022/lib/models/filter-option.model.mjs +2 -0
  10. package/esm2022/lib/models/form-button.model.mjs +2 -0
  11. package/esm2022/lib/models/form-check-field.model.mjs +2 -0
  12. package/esm2022/lib/models/form-date-field.model.mjs +2 -0
  13. package/esm2022/lib/models/form-drop-down-field.model.mjs +2 -0
  14. package/esm2022/lib/models/form-field-group.model.mjs +2 -0
  15. package/esm2022/lib/models/form-field.model.mjs +2 -0
  16. package/esm2022/lib/models/form-multi-select.model.mjs +2 -0
  17. package/esm2022/lib/models/form-number-field.model.mjs +2 -0
  18. package/esm2022/lib/models/form-switch-field.model.mjs +2 -0
  19. package/esm2022/lib/models/form-text-area-field.model.mjs +2 -0
  20. package/esm2022/lib/models/form-text-field.model.mjs +2 -0
  21. package/esm2022/lib/models/index.mjs +2 -2
  22. package/esm2022/lib/models/public-api.mjs +15 -0
  23. package/esm2022/lib/models/search-criteria.model.mjs +2 -0
  24. package/esm2022/lib/models/table-column.model.mjs +2 -0
  25. package/esm2022/lib/multi-search-criteria/multi-search-criteria.component.mjs +58 -48
  26. package/esm2022/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.mjs +3 -11
  27. package/esm2022/lib/ng-prime-tools.module.mjs +66 -6
  28. package/esm2022/lib/pipes/custom-currency.mjs +24 -18
  29. package/esm2022/lib/pt-check-box-input/index.mjs +2 -0
  30. package/esm2022/lib/pt-check-box-input/pt-check-box-input.component.mjs +61 -0
  31. package/esm2022/lib/pt-check-box-input/pt-check-box-input.module.mjs +20 -0
  32. package/esm2022/lib/pt-check-box-input/public-api.mjs +3 -0
  33. package/esm2022/lib/pt-date-input/index.mjs +2 -0
  34. package/esm2022/lib/pt-date-input/pt-date-input.component.mjs +85 -0
  35. package/esm2022/lib/pt-date-input/pt-date-input.module.mjs +20 -0
  36. package/esm2022/lib/pt-date-input/pt-date.service.mjs +62 -0
  37. package/esm2022/lib/pt-date-input/public-api.mjs +3 -0
  38. package/esm2022/lib/pt-dropdown/index.mjs +2 -0
  39. package/esm2022/lib/pt-dropdown/pt-dropdown.component.mjs +57 -0
  40. package/esm2022/lib/pt-dropdown/pt-dropdown.module.mjs +20 -0
  41. package/esm2022/lib/pt-dropdown/public-api.mjs +3 -0
  42. package/esm2022/lib/pt-form-builder/index.mjs +2 -0
  43. package/esm2022/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.mjs +59 -0
  44. package/esm2022/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.mjs +55 -0
  45. package/esm2022/lib/pt-form-builder/pt-form-builder.component.mjs +77 -0
  46. package/esm2022/lib/pt-form-builder/pt-form-builder.module.mjs +32 -0
  47. package/esm2022/lib/pt-form-builder/public-api.mjs +3 -0
  48. package/esm2022/lib/pt-multi-select/index.mjs +2 -0
  49. package/esm2022/lib/pt-multi-select/pt-multi-select.component.mjs +57 -0
  50. package/esm2022/lib/pt-multi-select/pt-multi-select.module.mjs +20 -0
  51. package/esm2022/lib/pt-multi-select/public-api.mjs +3 -0
  52. package/esm2022/lib/pt-number-input/index.mjs +2 -0
  53. package/esm2022/lib/pt-number-input/pt-number-input.component.mjs +88 -0
  54. package/esm2022/lib/pt-number-input/pt-number-input.module.mjs +43 -0
  55. package/esm2022/lib/pt-number-input/public-api.mjs +3 -0
  56. package/esm2022/lib/pt-switch-input/index.mjs +2 -0
  57. package/esm2022/lib/pt-switch-input/pt-switch-input.component.mjs +62 -0
  58. package/esm2022/lib/pt-switch-input/pt-switch-input.module.mjs +20 -0
  59. package/esm2022/lib/pt-switch-input/public-api.mjs +3 -0
  60. package/esm2022/lib/pt-text-area-input/index.mjs +2 -0
  61. package/esm2022/lib/pt-text-area-input/pt-text-area-input.component.mjs +83 -0
  62. package/esm2022/lib/pt-text-area-input/pt-text-area-input.module.mjs +36 -0
  63. package/esm2022/lib/pt-text-area-input/public-api.mjs +3 -0
  64. package/esm2022/lib/pt-text-input/index.mjs +2 -0
  65. package/esm2022/lib/pt-text-input/pt-text-input.component.mjs +86 -0
  66. package/esm2022/lib/pt-text-input/pt-text-input.module.mjs +36 -0
  67. package/esm2022/lib/pt-text-input/public-api.mjs +3 -0
  68. package/esm2022/lib/types/date-format.type.mjs +2 -0
  69. package/esm2022/lib/types/date-input.type.mjs +2 -0
  70. package/esm2022/lib/types/index.mjs +2 -0
  71. package/esm2022/lib/types/public-api.mjs +2 -0
  72. package/esm2022/lib/utils/date.util.mjs +69 -0
  73. package/esm2022/public-api.mjs +11 -2
  74. package/fesm2022/ng-prime-tools.mjs +1179 -90
  75. package/fesm2022/ng-prime-tools.mjs.map +1 -1
  76. package/lib/enums/button-color.enum.d.ts +9 -0
  77. package/lib/enums/button-color.enum.d.ts.map +1 -0
  78. package/lib/enums/form-input-type.enum.d.ts +13 -0
  79. package/lib/enums/form-input-type.enum.d.ts.map +1 -0
  80. package/lib/enums/index.d.ts +1 -5
  81. package/lib/enums/index.d.ts.map +1 -1
  82. package/lib/enums/input-validation.enum.d.ts +7 -0
  83. package/lib/enums/input-validation.enum.d.ts.map +1 -0
  84. package/lib/enums/public-api.d.ts +6 -0
  85. package/lib/enums/public-api.d.ts.map +1 -0
  86. package/lib/enums/{search-criteria-type-enum.d.ts → search-criteria-type.enum.d.ts} +1 -1
  87. package/lib/enums/search-criteria-type.enum.d.ts.map +1 -0
  88. package/lib/enums/{table-type-enum.d.ts → table-type.enum.d.ts} +1 -1
  89. package/lib/enums/table-type.enum.d.ts.map +1 -0
  90. package/lib/models/{filter-option.d.ts → filter-option.model.d.ts} +1 -1
  91. package/lib/models/filter-option.model.d.ts.map +1 -0
  92. package/lib/models/form-button.model.d.ts +10 -0
  93. package/lib/models/form-button.model.d.ts.map +1 -0
  94. package/lib/models/form-check-field.model.d.ts +4 -0
  95. package/lib/models/form-check-field.model.d.ts.map +1 -0
  96. package/lib/models/form-date-field.model.d.ts +11 -0
  97. package/lib/models/form-date-field.model.d.ts.map +1 -0
  98. package/lib/models/form-drop-down-field.model.d.ts +5 -0
  99. package/lib/models/form-drop-down-field.model.d.ts.map +1 -0
  100. package/lib/models/form-field-group.model.d.ts +7 -0
  101. package/lib/models/form-field-group.model.d.ts.map +1 -0
  102. package/lib/models/form-field.model.d.ts +16 -0
  103. package/lib/models/form-field.model.d.ts.map +1 -0
  104. package/lib/models/form-multi-select.model.d.ts +5 -0
  105. package/lib/models/form-multi-select.model.d.ts.map +1 -0
  106. package/lib/models/form-number-field.model.d.ts +11 -0
  107. package/lib/models/form-number-field.model.d.ts.map +1 -0
  108. package/lib/models/form-switch-field.model.d.ts +4 -0
  109. package/lib/models/form-switch-field.model.d.ts.map +1 -0
  110. package/lib/models/form-text-area-field.model.d.ts +11 -0
  111. package/lib/models/form-text-area-field.model.d.ts.map +1 -0
  112. package/lib/models/form-text-field.model.d.ts +8 -0
  113. package/lib/models/form-text-field.model.d.ts.map +1 -0
  114. package/lib/models/index.d.ts +1 -1
  115. package/lib/models/public-api.d.ts +15 -0
  116. package/lib/models/public-api.d.ts.map +1 -0
  117. package/lib/models/{search-criteria.d.ts → search-criteria.model.d.ts} +3 -3
  118. package/lib/models/search-criteria.model.d.ts.map +1 -0
  119. package/lib/models/{table-column.d.ts → table-column.model.d.ts} +4 -2
  120. package/lib/models/table-column.model.d.ts.map +1 -0
  121. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts +8 -4
  122. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts.map +1 -1
  123. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.d.ts +0 -1
  124. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.d.ts.map +1 -1
  125. package/lib/ng-prime-tools.module.d.ts +8 -1
  126. package/lib/ng-prime-tools.module.d.ts.map +1 -1
  127. package/lib/pipes/custom-currency.d.ts +1 -1
  128. package/lib/pipes/custom-currency.d.ts.map +1 -1
  129. package/lib/pt-check-box-input/index.d.ts +2 -0
  130. package/lib/pt-check-box-input/index.d.ts.map +1 -0
  131. package/lib/pt-check-box-input/pt-check-box-input.component.d.ts +16 -0
  132. package/lib/pt-check-box-input/pt-check-box-input.component.d.ts.map +1 -0
  133. package/lib/pt-check-box-input/pt-check-box-input.module.d.ts +11 -0
  134. package/lib/pt-check-box-input/pt-check-box-input.module.d.ts.map +1 -0
  135. package/lib/pt-check-box-input/public-api.d.ts +3 -0
  136. package/lib/pt-check-box-input/public-api.d.ts.map +1 -0
  137. package/lib/pt-date-input/index.d.ts +2 -0
  138. package/lib/pt-date-input/index.d.ts.map +1 -0
  139. package/lib/pt-date-input/pt-date-input.component.d.ts +24 -0
  140. package/lib/pt-date-input/pt-date-input.component.d.ts.map +1 -0
  141. package/lib/pt-date-input/pt-date-input.module.d.ts +11 -0
  142. package/lib/pt-date-input/pt-date-input.module.d.ts.map +1 -0
  143. package/lib/pt-date-input/pt-date.service.d.ts +11 -0
  144. package/lib/pt-date-input/pt-date.service.d.ts.map +1 -0
  145. package/lib/pt-date-input/public-api.d.ts +3 -0
  146. package/lib/pt-date-input/public-api.d.ts.map +1 -0
  147. package/lib/pt-dropdown/index.d.ts +2 -0
  148. package/lib/pt-dropdown/index.d.ts.map +1 -0
  149. package/lib/pt-dropdown/pt-dropdown.component.d.ts +15 -0
  150. package/lib/pt-dropdown/pt-dropdown.component.d.ts.map +1 -0
  151. package/lib/pt-dropdown/pt-dropdown.module.d.ts +11 -0
  152. package/lib/pt-dropdown/pt-dropdown.module.d.ts.map +1 -0
  153. package/lib/pt-dropdown/public-api.d.ts +3 -0
  154. package/lib/pt-dropdown/public-api.d.ts.map +1 -0
  155. package/lib/pt-form-builder/index.d.ts +2 -0
  156. package/lib/pt-form-builder/index.d.ts.map +1 -0
  157. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.d.ts +18 -0
  158. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.d.ts.map +1 -0
  159. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.d.ts +29 -0
  160. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.d.ts.map +1 -0
  161. package/lib/pt-form-builder/pt-form-builder.component.d.ts +33 -0
  162. package/lib/pt-form-builder/pt-form-builder.component.d.ts.map +1 -0
  163. package/lib/pt-form-builder/pt-form-builder.module.d.ts +12 -0
  164. package/lib/pt-form-builder/pt-form-builder.module.d.ts.map +1 -0
  165. package/lib/pt-form-builder/public-api.d.ts +3 -0
  166. package/lib/pt-form-builder/public-api.d.ts.map +1 -0
  167. package/lib/pt-multi-select/index.d.ts +2 -0
  168. package/lib/pt-multi-select/index.d.ts.map +1 -0
  169. package/lib/pt-multi-select/pt-multi-select.component.d.ts +15 -0
  170. package/lib/pt-multi-select/pt-multi-select.component.d.ts.map +1 -0
  171. package/lib/pt-multi-select/pt-multi-select.module.d.ts +11 -0
  172. package/lib/pt-multi-select/pt-multi-select.module.d.ts.map +1 -0
  173. package/lib/pt-multi-select/public-api.d.ts +3 -0
  174. package/lib/pt-multi-select/public-api.d.ts.map +1 -0
  175. package/lib/pt-number-input/index.d.ts +2 -0
  176. package/lib/pt-number-input/index.d.ts.map +1 -0
  177. package/lib/pt-number-input/pt-number-input.component.d.ts +16 -0
  178. package/lib/pt-number-input/pt-number-input.component.d.ts.map +1 -0
  179. package/lib/pt-number-input/pt-number-input.module.d.ts +14 -0
  180. package/lib/pt-number-input/pt-number-input.module.d.ts.map +1 -0
  181. package/lib/pt-number-input/public-api.d.ts +3 -0
  182. package/lib/pt-number-input/public-api.d.ts.map +1 -0
  183. package/lib/pt-switch-input/index.d.ts +2 -0
  184. package/lib/pt-switch-input/index.d.ts.map +1 -0
  185. package/lib/pt-switch-input/pt-switch-input.component.d.ts +16 -0
  186. package/lib/pt-switch-input/pt-switch-input.component.d.ts.map +1 -0
  187. package/lib/pt-switch-input/pt-switch-input.module.d.ts +11 -0
  188. package/lib/pt-switch-input/pt-switch-input.module.d.ts.map +1 -0
  189. package/lib/pt-switch-input/public-api.d.ts +3 -0
  190. package/lib/pt-switch-input/public-api.d.ts.map +1 -0
  191. package/lib/pt-text-area-input/index.d.ts +2 -0
  192. package/lib/pt-text-area-input/index.d.ts.map +1 -0
  193. package/lib/pt-text-area-input/pt-text-area-input.component.d.ts +17 -0
  194. package/lib/pt-text-area-input/pt-text-area-input.component.d.ts.map +1 -0
  195. package/lib/pt-text-area-input/pt-text-area-input.module.d.ts +13 -0
  196. package/lib/pt-text-area-input/pt-text-area-input.module.d.ts.map +1 -0
  197. package/lib/pt-text-area-input/public-api.d.ts +3 -0
  198. package/lib/pt-text-area-input/public-api.d.ts.map +1 -0
  199. package/lib/pt-text-input/index.d.ts +2 -0
  200. package/lib/pt-text-input/index.d.ts.map +1 -0
  201. package/lib/pt-text-input/pt-text-input.component.d.ts +18 -0
  202. package/lib/pt-text-input/pt-text-input.component.d.ts.map +1 -0
  203. package/lib/pt-text-input/pt-text-input.module.d.ts +13 -0
  204. package/lib/pt-text-input/pt-text-input.module.d.ts.map +1 -0
  205. package/lib/pt-text-input/public-api.d.ts +3 -0
  206. package/lib/pt-text-input/public-api.d.ts.map +1 -0
  207. package/lib/types/date-format.type.d.ts +2 -0
  208. package/lib/types/date-format.type.d.ts.map +1 -0
  209. package/lib/types/date-input.type.d.ts +2 -0
  210. package/lib/types/date-input.type.d.ts.map +1 -0
  211. package/lib/types/index.d.ts +2 -0
  212. package/lib/types/index.d.ts.map +1 -0
  213. package/lib/types/public-api.d.ts +2 -0
  214. package/lib/types/public-api.d.ts.map +1 -0
  215. package/lib/utils/date.util.d.ts +7 -0
  216. package/lib/utils/date.util.d.ts.map +1 -0
  217. package/package.json +1 -1
  218. package/public-api.d.ts +9 -0
  219. package/public-api.d.ts.map +1 -1
  220. package/esm2022/lib/enums/public_api.mjs +0 -4
  221. package/esm2022/lib/models/filter-option.mjs +0 -2
  222. package/esm2022/lib/models/public_api.mjs +0 -5
  223. package/esm2022/lib/models/search-criteria.mjs +0 -2
  224. package/esm2022/lib/models/table-column.mjs +0 -2
  225. package/lib/enums/public_api.d.ts +0 -3
  226. package/lib/enums/public_api.d.ts.map +0 -1
  227. package/lib/enums/search-criteria-type-enum.d.ts.map +0 -1
  228. package/lib/enums/table-type-enum.d.ts.map +0 -1
  229. package/lib/models/filter-option.d.ts.map +0 -1
  230. package/lib/models/public_api.d.ts +0 -4
  231. package/lib/models/public_api.d.ts.map +0 -1
  232. package/lib/models/search-criteria.d.ts.map +0 -1
  233. package/lib/models/table-column.d.ts.map +0 -1
@@ -0,0 +1,15 @@
1
+ export * from './table-column.model';
2
+ export * from './search-criteria.model';
3
+ export * from './filter-option.model';
4
+ export * from './form-button.model';
5
+ export * from './form-field.model';
6
+ export * from './form-field-group.model';
7
+ export * from './form-check-field.model';
8
+ export * from './form-date-field.model';
9
+ export * from './form-drop-down-field.model';
10
+ export * from './form-multi-select.model';
11
+ export * from './form-number-field.model';
12
+ export * from './form-switch-field.model';
13
+ export * from './form-text-area-field.model';
14
+ export * from './form-text-field.model';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvbW9kZWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZS1jb2x1bW4ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtY3JpdGVyaWEubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXItb3B0aW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1idXR0b24ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWZpZWxkLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZC1ncm91cC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tY2hlY2stZmllbGQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWRhdGUtZmllbGQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWRyb3AtZG93bi1maWVsZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tbXVsdGktc2VsZWN0Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1udW1iZXItZmllbGQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLXN3aXRjaC1maWVsZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tdGV4dC1hcmVhLWZpZWxkLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS10ZXh0LWZpZWxkLm1vZGVsJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWNyaXRlcmlhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9tb2RlbHMvc2VhcmNoLWNyaXRlcmlhLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtIH0gZnJvbSAnLi4vZW51bXMvc2VhcmNoLWNyaXRlcmlhLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGaWx0ZXJPcHRpb24gfSBmcm9tICcuL2ZpbHRlci1vcHRpb24ubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaENyaXRlcmlhIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICB0eXBlOiBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtO1xuICB2YWx1ZT86IGFueTtcbiAgZmlsdGVyT3B0aW9ucz86IEZpbHRlck9wdGlvbltdO1xuICBjdXJyZW5jeT86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29sdW1uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vZW51bXMvdGFibGUtdHlwZS5lbnVtJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbHVtbiB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHR5cGU/OiBUYWJsZVR5cGVFbnVtO1xuICBvcHRpb25zPzogYW55W107XG4gIGlzRWRpdGFibGU/OiBib29sZWFuO1xuICBpc0ZpbHRlcj86IGJvb2xlYW47XG4gIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBmaWx0ZXJPcHRpb25zPzogYW55W107XG4gIGRlY2ltYWxQbGFjZXM/OiBudW1iZXI7XG4gIGlzU29ydGFibGU/OiBib29sZWFuO1xuICB0aG91c2FuZFNlcGFyYXRvcj86ICdjb21tYScgfCAnc3BhY2UnO1xuICBkZWNpbWFsU2VwYXJhdG9yPzogJ2NvbW1hJyB8ICdkb3QnO1xufVxuIl19
@@ -17,7 +17,9 @@ export class MultiSearchCriteriaComponent {
17
17
  this.criteria = [];
18
18
  this.inputsPerRow = 3;
19
19
  this.data = [];
20
+ this.mode = 'static'; // Add mode input
20
21
  this.filteredData = new EventEmitter();
22
+ this.searchCriteria = new EventEmitter();
21
23
  this.selectAll = false;
22
24
  this.selected = [];
23
25
  }
@@ -34,48 +36,56 @@ export class MultiSearchCriteriaComponent {
34
36
  return input.currency || 'EUR';
35
37
  }
36
38
  search() {
37
- console.log('Original Data:', this.data);
38
- const filtered = this.data.filter((item) => {
39
- return this.criteria.every((criterion) => {
40
- console.log('Criterion:', criterion);
41
- if (criterion.type === SearchCriteriaTypeEnum.DATERANGE) {
42
- const [startDate, endDate] = criterion.value || [
43
- undefined,
44
- undefined,
45
- ];
46
- const itemDate = this.parseDate(item[criterion.code] || item['date']);
47
- console.log('Item Date:', itemDate, 'Start Date:', startDate, 'End Date:', endDate);
48
- if (!startDate && !endDate) {
49
- return true;
39
+ if (this.mode === 'dynamic') {
40
+ const criteriaValues = {};
41
+ this.criteria.forEach((criterion) => {
42
+ if (criterion.value !== null && criterion.value !== undefined) {
43
+ criteriaValues[criterion.code] = criterion.value;
44
+ }
45
+ });
46
+ this.searchCriteria.emit(criteriaValues);
47
+ }
48
+ else {
49
+ const filtered = this.data.filter((item) => {
50
+ return this.criteria.every((criterion) => {
51
+ if (criterion.type === SearchCriteriaTypeEnum.DATERANGE) {
52
+ const [startDate, endDate] = criterion.value || [
53
+ undefined,
54
+ undefined,
55
+ ];
56
+ const itemDate = this.parseDate(item[criterion.code] || item['date']);
57
+ if (!startDate && !endDate) {
58
+ return true;
59
+ }
60
+ if (itemDate === null) {
61
+ return false;
62
+ }
63
+ const parsedStartDate = startDate
64
+ ? this.parseDate(startDate)
65
+ : null;
66
+ const parsedEndDate = endDate ? this.parseDate(endDate) : null;
67
+ return ((!parsedStartDate || itemDate >= parsedStartDate) &&
68
+ (!parsedEndDate || itemDate <= parsedEndDate));
50
69
  }
51
- if (itemDate === null) {
52
- return false;
70
+ else if (criterion.type === SearchCriteriaTypeEnum.AMOUNT) {
71
+ return !criterion.value || item[criterion.code] === criterion.value;
53
72
  }
54
- const parsedStartDate = startDate ? this.parseDate(startDate) : null;
55
- const parsedEndDate = endDate ? this.parseDate(endDate) : null;
56
- console.log('Parsed Start Date:', parsedStartDate, 'Parsed End Date:', parsedEndDate);
57
- return ((!parsedStartDate || itemDate >= parsedStartDate) &&
58
- (!parsedEndDate || itemDate <= parsedEndDate));
59
- }
60
- else if (criterion.type === SearchCriteriaTypeEnum.AMOUNT) {
61
- return !criterion.value || item[criterion.code] === criterion.value;
62
- }
63
- else if (criterion.type === SearchCriteriaTypeEnum.MULTISELECT) {
64
- return (!criterion.value ||
65
- criterion.value.some((option) => option.label === item[criterion.code]));
66
- }
67
- else if (criterion.type === SearchCriteriaTypeEnum.STRING) {
68
- return (!criterion.value ||
69
- item[criterion.code]
70
- .toString()
71
- .toLowerCase()
72
- .includes(criterion.value.toString().toLowerCase()));
73
- }
74
- return true;
73
+ else if (criterion.type === SearchCriteriaTypeEnum.MULTISELECT) {
74
+ return (!criterion.value ||
75
+ criterion.value.some((option) => option.label === item[criterion.code]));
76
+ }
77
+ else if (criterion.type === SearchCriteriaTypeEnum.STRING) {
78
+ return (!criterion.value ||
79
+ item[criterion.code]
80
+ .toString()
81
+ .toLowerCase()
82
+ .includes(criterion.value.toString().toLowerCase()));
83
+ }
84
+ return true;
85
+ });
75
86
  });
76
- });
77
- console.log('Filtered Data:', filtered);
78
- this.filteredData.emit(filtered);
87
+ this.filteredData.emit(filtered);
88
+ }
79
89
  }
80
90
  clear() {
81
91
  this.criteria.forEach((input) => {
@@ -83,13 +93,9 @@ export class MultiSearchCriteriaComponent {
83
93
  });
84
94
  this.filteredData.emit(this.data);
85
95
  }
86
- onSelectAllChange(event) {
96
+ onSelectAllChange(event, criterion) {
87
97
  this.selectAll = event.checked;
88
- this.selected = event.checked
89
- ? [
90
- ...(this.criteria.find((criterion) => criterion.type === SearchCriteriaTypeEnum.MULTISELECT)?.filterOptions || []),
91
- ]
92
- : [];
98
+ criterion.value = event.checked ? [...(criterion.filterOptions ?? [])] : [];
93
99
  }
94
100
  parseDate(dateString) {
95
101
  if (!dateString) {
@@ -109,11 +115,11 @@ export class MultiSearchCriteriaComponent {
109
115
  return null;
110
116
  }
111
117
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MultiSearchCriteriaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: MultiSearchCriteriaComponent, selector: "multi-search-criteria", inputs: { title: "title", criteria: "criteria", inputsPerRow: "inputsPerRow", data: "data" }, outputs: { filteredData: "filteredData" }, ngImport: i0, template: "<p-panel header=\"{{ title }}\" [toggleable]=\"true\" [collapsed]=\"true\">\n <div\n class=\"criteria-container\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + inputsPerRow + ', 1fr)' }\"\n >\n <div *ngFor=\"let input of criteria\" class=\"criteria-item\">\n <label class=\"bsc-label\">{{ input.title }}</label>\n\n <ng-container [ngSwitch]=\"input.type\">\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATERANGE\"\n [(ngModel)]=\"input.value\"\n selectionMode=\"range\"\n [dateFormat]=\"'dd/mm/yy'\"\n class=\"full-width-input\"\n [showIcon]=\"true\"\n (ngModelChange)=\"input.value = $event\"\n ></p-calendar>\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATE\"\n [ngModel]=\"input.value\"\n (ngModelChange)=\"input.value = $event\"\n [dateFormat]=\"'dd/mm/yy'\"\n [showIcon]=\"true\"\n class=\"full-width-input\"\n ></p-calendar>\n <input\n *ngSwitchCase=\"SearchCriteriaTypeEnum.STRING\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n />\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.AMOUNT\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n mode=\"decimal\"\n inputId=\"minmaxfraction\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"5\"\n [placeholder]=\"getCurrencySymbol(input)\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.NUMBER\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-multiSelect\n *ngSwitchCase=\"SearchCriteriaTypeEnum.MULTISELECT\"\n [options]=\"input.filterOptions\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n [selectAll]=\"selectAll\"\n [(ngModel)]=\"input.value\"\n optionLabel=\"label\"\n (onSelectAllChange)=\"onSelectAllChange($event)\"\n class=\"custom-multiselect full-width-input\"\n ></p-multiSelect>\n </ng-container>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"footer-buttons\">\n <p-button\n label=\"Effacer\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n class=\"footer-button\"\n ></p-button>\n <p-button\n label=\"Rechercher\"\n icon=\"pi pi-search\"\n (click)=\"search()\"\n class=\"footer-button\"\n ></p-button>\n </div>\n </ng-template>\n</p-panel>\n", styles: ["::ng-deep .p-element .p-hidden-accessible input{display:none}::ng-deep .bsc-label{display:block;margin-bottom:5px;font-weight:700}::ng-deep .custom-multiselect{width:100%}::ng-deep .p-multiselect .p-multiselect-label{font-size:14px;color:#333}::ng-deep .p-inputtext{width:100%}::ng-deep .p-calendar .p-inputtext{width:100%}::ng-deep .p-inputnumber{width:100%}.criteria-container{display:grid;gap:10px}.criteria-item{margin-bottom:10px;box-sizing:border-box}.full-width-input,::ng-deep .p-calendar,::ng-deep .p-multiselect{width:100%}::ng-deep .p-calendar .p-inputtext,::ng-deep .p-multiselect .p-multiselect-label{width:100%}.footer-buttons{display:flex;justify-content:flex-end;gap:10px}::ng-deep .footer-button button{width:140px;cursor:pointer}::ng-deep .p-panel .p-panel-footer{background:#f8f9fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i9.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }] }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: MultiSearchCriteriaComponent, selector: "multi-search-criteria", inputs: { title: "title", criteria: "criteria", inputsPerRow: "inputsPerRow", data: "data", mode: "mode" }, outputs: { filteredData: "filteredData", searchCriteria: "searchCriteria" }, ngImport: i0, template: "<p-panel header=\"{{ title }}\" [toggleable]=\"true\" [collapsed]=\"true\">\n <div\n class=\"criteria-container\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + inputsPerRow + ', 1fr)' }\"\n >\n <div *ngFor=\"let input of criteria\" class=\"criteria-item\">\n <label class=\"bsc-label\">{{ input.title }}</label>\n\n <ng-container [ngSwitch]=\"input.type\">\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATERANGE\"\n [(ngModel)]=\"input.value\"\n selectionMode=\"range\"\n [dateFormat]=\"'dd/mm/yy'\"\n class=\"full-width-input\"\n [showIcon]=\"true\"\n (ngModelChange)=\"input.value = $event\"\n ></p-calendar>\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATE\"\n [ngModel]=\"input.value\"\n (ngModelChange)=\"input.value = $event\"\n [dateFormat]=\"'dd/mm/yy'\"\n [showIcon]=\"true\"\n class=\"full-width-input\"\n ></p-calendar>\n <input\n *ngSwitchCase=\"SearchCriteriaTypeEnum.STRING\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n />\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.AMOUNT\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n mode=\"decimal\"\n inputId=\"minmaxfraction\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"5\"\n [placeholder]=\"getCurrencySymbol(input)\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.NUMBER\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-multiSelect\n *ngSwitchCase=\"SearchCriteriaTypeEnum.MULTISELECT\"\n [options]=\"input.filterOptions\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n [selectAll]=\"selectAll\"\n [(ngModel)]=\"input.value\"\n optionLabel=\"label\"\n (onSelectAllChange)=\"onSelectAllChange($event, input)\"\n class=\"custom-multiselect full-width-input\"\n ></p-multiSelect>\n </ng-container>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"footer-buttons\">\n <p-button\n label=\"Effacer\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n class=\"footer-button\"\n ></p-button>\n <p-button\n label=\"Rechercher\"\n icon=\"pi pi-search\"\n (click)=\"search()\"\n class=\"footer-button\"\n ></p-button>\n </div>\n </ng-template>\n</p-panel>\n", styles: ["::ng-deep .p-element .p-hidden-accessible input{display:none}::ng-deep .bsc-label{display:block;margin-bottom:5px;font-weight:700}::ng-deep .custom-multiselect{width:100%}::ng-deep .p-multiselect .p-multiselect-label{font-size:14px;color:#333}::ng-deep .p-inputtext{width:100%}::ng-deep .p-calendar .p-inputtext{width:100%}::ng-deep .p-inputnumber{width:100%}.criteria-container{display:grid;gap:10px}.criteria-item{margin-bottom:10px;box-sizing:border-box}.full-width-input,::ng-deep .p-calendar,::ng-deep .p-multiselect{width:100%}::ng-deep .p-calendar .p-inputtext,::ng-deep .p-multiselect .p-multiselect-label{width:100%}.footer-buttons{display:flex;justify-content:flex-end;gap:10px}::ng-deep .footer-button button{width:140px;cursor:pointer}::ng-deep .p-panel .p-panel-footer{background:#f8f9fa}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i9.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }] }); }
113
119
  }
114
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MultiSearchCriteriaComponent, decorators: [{
115
121
  type: Component,
116
- args: [{ selector: 'multi-search-criteria', template: "<p-panel header=\"{{ title }}\" [toggleable]=\"true\" [collapsed]=\"true\">\n <div\n class=\"criteria-container\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + inputsPerRow + ', 1fr)' }\"\n >\n <div *ngFor=\"let input of criteria\" class=\"criteria-item\">\n <label class=\"bsc-label\">{{ input.title }}</label>\n\n <ng-container [ngSwitch]=\"input.type\">\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATERANGE\"\n [(ngModel)]=\"input.value\"\n selectionMode=\"range\"\n [dateFormat]=\"'dd/mm/yy'\"\n class=\"full-width-input\"\n [showIcon]=\"true\"\n (ngModelChange)=\"input.value = $event\"\n ></p-calendar>\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATE\"\n [ngModel]=\"input.value\"\n (ngModelChange)=\"input.value = $event\"\n [dateFormat]=\"'dd/mm/yy'\"\n [showIcon]=\"true\"\n class=\"full-width-input\"\n ></p-calendar>\n <input\n *ngSwitchCase=\"SearchCriteriaTypeEnum.STRING\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n />\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.AMOUNT\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n mode=\"decimal\"\n inputId=\"minmaxfraction\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"5\"\n [placeholder]=\"getCurrencySymbol(input)\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.NUMBER\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-multiSelect\n *ngSwitchCase=\"SearchCriteriaTypeEnum.MULTISELECT\"\n [options]=\"input.filterOptions\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n [selectAll]=\"selectAll\"\n [(ngModel)]=\"input.value\"\n optionLabel=\"label\"\n (onSelectAllChange)=\"onSelectAllChange($event)\"\n class=\"custom-multiselect full-width-input\"\n ></p-multiSelect>\n </ng-container>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"footer-buttons\">\n <p-button\n label=\"Effacer\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n class=\"footer-button\"\n ></p-button>\n <p-button\n label=\"Rechercher\"\n icon=\"pi pi-search\"\n (click)=\"search()\"\n class=\"footer-button\"\n ></p-button>\n </div>\n </ng-template>\n</p-panel>\n", styles: ["::ng-deep .p-element .p-hidden-accessible input{display:none}::ng-deep .bsc-label{display:block;margin-bottom:5px;font-weight:700}::ng-deep .custom-multiselect{width:100%}::ng-deep .p-multiselect .p-multiselect-label{font-size:14px;color:#333}::ng-deep .p-inputtext{width:100%}::ng-deep .p-calendar .p-inputtext{width:100%}::ng-deep .p-inputnumber{width:100%}.criteria-container{display:grid;gap:10px}.criteria-item{margin-bottom:10px;box-sizing:border-box}.full-width-input,::ng-deep .p-calendar,::ng-deep .p-multiselect{width:100%}::ng-deep .p-calendar .p-inputtext,::ng-deep .p-multiselect .p-multiselect-label{width:100%}.footer-buttons{display:flex;justify-content:flex-end;gap:10px}::ng-deep .footer-button button{width:140px;cursor:pointer}::ng-deep .p-panel .p-panel-footer{background:#f8f9fa}\n"] }]
122
+ args: [{ selector: 'multi-search-criteria', template: "<p-panel header=\"{{ title }}\" [toggleable]=\"true\" [collapsed]=\"true\">\n <div\n class=\"criteria-container\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + inputsPerRow + ', 1fr)' }\"\n >\n <div *ngFor=\"let input of criteria\" class=\"criteria-item\">\n <label class=\"bsc-label\">{{ input.title }}</label>\n\n <ng-container [ngSwitch]=\"input.type\">\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATERANGE\"\n [(ngModel)]=\"input.value\"\n selectionMode=\"range\"\n [dateFormat]=\"'dd/mm/yy'\"\n class=\"full-width-input\"\n [showIcon]=\"true\"\n (ngModelChange)=\"input.value = $event\"\n ></p-calendar>\n <p-calendar\n *ngSwitchCase=\"SearchCriteriaTypeEnum.DATE\"\n [ngModel]=\"input.value\"\n (ngModelChange)=\"input.value = $event\"\n [dateFormat]=\"'dd/mm/yy'\"\n [showIcon]=\"true\"\n class=\"full-width-input\"\n ></p-calendar>\n <input\n *ngSwitchCase=\"SearchCriteriaTypeEnum.STRING\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n />\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.AMOUNT\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n mode=\"decimal\"\n inputId=\"minmaxfraction\"\n [minFractionDigits]=\"2\"\n [maxFractionDigits]=\"5\"\n [placeholder]=\"getCurrencySymbol(input)\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-inputNumber\n *ngSwitchCase=\"SearchCriteriaTypeEnum.NUMBER\"\n type=\"number\"\n [(ngModel)]=\"input.value\"\n class=\"full-width-input\"\n ></p-inputNumber>\n\n <p-multiSelect\n *ngSwitchCase=\"SearchCriteriaTypeEnum.MULTISELECT\"\n [options]=\"input.filterOptions\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n [selectAll]=\"selectAll\"\n [(ngModel)]=\"input.value\"\n optionLabel=\"label\"\n (onSelectAllChange)=\"onSelectAllChange($event, input)\"\n class=\"custom-multiselect full-width-input\"\n ></p-multiSelect>\n </ng-container>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"footer-buttons\">\n <p-button\n label=\"Effacer\"\n icon=\"pi pi-times\"\n (click)=\"clear()\"\n class=\"footer-button\"\n ></p-button>\n <p-button\n label=\"Rechercher\"\n icon=\"pi pi-search\"\n (click)=\"search()\"\n class=\"footer-button\"\n ></p-button>\n </div>\n </ng-template>\n</p-panel>\n", styles: ["::ng-deep .p-element .p-hidden-accessible input{display:none}::ng-deep .bsc-label{display:block;margin-bottom:5px;font-weight:700}::ng-deep .custom-multiselect{width:100%}::ng-deep .p-multiselect .p-multiselect-label{font-size:14px;color:#333}::ng-deep .p-inputtext{width:100%}::ng-deep .p-calendar .p-inputtext{width:100%}::ng-deep .p-inputnumber{width:100%}.criteria-container{display:grid;gap:10px}.criteria-item{margin-bottom:10px;box-sizing:border-box}.full-width-input,::ng-deep .p-calendar,::ng-deep .p-multiselect{width:100%}::ng-deep .p-calendar .p-inputtext,::ng-deep .p-multiselect .p-multiselect-label{width:100%}.footer-buttons{display:flex;justify-content:flex-end;gap:10px}::ng-deep .footer-button button{width:140px;cursor:pointer}::ng-deep .p-panel .p-panel-footer{background:#f8f9fa}\n"] }]
117
123
  }], propDecorators: { title: [{
118
124
  type: Input
119
125
  }], criteria: [{
@@ -122,7 +128,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
122
128
  type: Input
123
129
  }], data: [{
124
130
  type: Input
131
+ }], mode: [{
132
+ type: Input
125
133
  }], filteredData: [{
126
134
  type: Output
135
+ }], searchCriteria: [{
136
+ type: Output
127
137
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VhcmNoLWNyaXRlcmlhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvbXVsdGktc2VhcmNoLWNyaXRlcmlhL211bHRpLXNlYXJjaC1jcml0ZXJpYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL211bHRpLXNlYXJjaC1jcml0ZXJpYS9tdWx0aS1zZWFyY2gtY3JpdGVyaWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7O0FBU2xELE1BQU0sT0FBTyw0QkFBNEI7SUFMekM7UUFNRSwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUV2QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDaEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBRW5ELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsYUFBUSxHQUFtQixFQUFFLENBQUM7S0FxSC9CO0lBbkhDLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdCLElBQ0UsSUFBSSxDQUFDLElBQUksS0FBSyxzQkFBc0IsQ0FBQyxXQUFXO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxFQUNsQixDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxh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cnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgU2VhcmNoQ3JpdGVyaWEgfSBmcm9tICcuLi9tb2RlbHMvc2VhcmNoLWNyaXRlcmlhJztcbmltcG9ydCB7IEZpbHRlck9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9maWx0ZXItb3B0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXVsdGktc2VhcmNoLWNyaXRlcmlhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlYXJjaC1jcml0ZXJpYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlYXJjaC1jcml0ZXJpYS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VhcmNoQ3JpdGVyaWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtID0gU2VhcmNoQ3JpdGVyaWFUeXBlRW51bTtcblxuICBASW5wdXQoKSB0aXRsZTogU3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNyaXRlcmlhOiBTZWFyY2hDcml0ZXJpYVtdID0gW107XG4gIEBJbnB1dCgpIGlucHV0c1BlclJvdzogbnVtYmVyID0gMztcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQE91dHB1dCgpIGZpbHRlcmVkRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgc2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkOiBGaWx0ZXJPcHRpb25bXSA9IFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpdGVtLnR5cGUgPT09IFNlYXJjaENyaXRlcmlhVHlwZUVudW0uTVVMVElTRUxFQ1QgJiZcbiAgICAgICAgaXRlbS5maWx0ZXJPcHRpb25zXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFsuLi5pdGVtLmZpbHRlck9wdGlvbnNdO1xuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5zZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEN1cnJlbmN5U3ltYm9sKGlucHV0OiBTZWFyY2hDcml0ZXJpYSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlucHV0LmN1cnJlbmN5IHx8ICdFVVInO1xuICB9XG5cbiAgc2VhcmNoKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdPcmlnaW5hbCBEYXRhOicsIHRoaXMuZGF0YSk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jcml0ZXJpYS5ldmVyeSgoY3JpdGVyaW9uKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDcml0ZXJpb246JywgY3JpdGVyaW9uKTtcbiAgICAgICAgaWYgKGNyaXRlcmlvbi50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLkRBVEVSQU5HRSkge1xuICAgICAgICAgIGNvbnN0IFtzdGFydERhdGUsIGVuZERhdGVdID0gY3JpdGVyaW9uLnZhbHVlIHx8IFtcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGl0ZW1EYXRlID0gdGhpcy5wYXJzZURhdGUoaXRlbVtjcml0ZXJpb24uY29kZV0gfHwgaXRlbVsnZGF0ZSddKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdJdGVtIERhdGU6JyxcbiAgICAgICAgICAgIGl0ZW1EYXRlLFxuICAgICAgICAgICAgJ1N0YXJ0IERhdGU6JyxcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICdFbmQgRGF0ZTonLFxuICAgICAgICAgICAgZW5kRGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFzdGFydERhdGUgJiYgIWVuZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlbURhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnREYXRlID0gc3RhcnREYXRlID8gdGhpcy5wYXJzZURhdGUoc3RhcnREYXRlKSA6IG51bGw7XG4gICAgICAgICAgY29uc3QgcGFyc2VkRW5kRGF0ZSA9IGVuZERhdGUgPyB0aGlzLnBhcnNlRGF0ZShlbmREYXRlKSA6IG51bGw7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAnUGFyc2VkIFN0YXJ0IERhdGU6JyxcbiAgICAgICAgICAgIHBhcnNlZFN0YXJ0RGF0ZSxcbiAgICAgICAgICAgICdQYXJzZWQgRW5kIERhdGU6JyxcbiAgICAgICAgICAgIHBhcnNlZEVuZERhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoIXBhcnNlZFN0YXJ0RGF0ZSB8fCBpdGVtRGF0ZSA+PSBwYXJzZWRTdGFydERhdGUpICYmXG4gICAgICAgICAgICAoIXBhcnNlZEVuZERhdGUgfHwgaXRlbURhdGUgPD0gcGFyc2VkRW5kRGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlvbi50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLkFNT1VOVCkge1xuICAgICAgICAgIHJldHVybiAhY3JpdGVyaW9uLnZhbHVlIHx8IGl0ZW1bY3JpdGVyaW9uLmNvZGVdID09PSBjcml0ZXJpb24udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uLnR5cGUgPT09IFNlYXJjaENyaXRlcmlhVHlwZUVudW0uTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIWNyaXRlcmlvbi52YWx1ZSB8fFxuICAgICAgICAgICAgY3JpdGVyaW9uLnZhbHVlLnNvbWUoXG4gICAgICAgICAgICAgIChvcHRpb246IEZpbHRlck9wdGlvbikgPT4gb3B0aW9uLmxhYmVsID09PSBpdGVtW2NyaXRlcmlvbi5jb2RlXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uLnR5cGUgPT09IFNlYXJjaENyaXRlcmlhVHlwZUVudW0uU1RSSU5HKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICFjcml0ZXJpb24udmFsdWUgfHxcbiAgICAgICAgICAgIGl0ZW1bY3JpdGVyaW9uLmNvZGVdXG4gICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyhjcml0ZXJpb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnRmlsdGVyZWQgRGF0YTonLCBmaWx0ZXJlZCk7XG4gICAgdGhpcy5maWx0ZXJlZERhdGEuZW1pdChmaWx0ZXJlZCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNyaXRlcmlhLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgfSk7XG4gICAgdGhpcy5maWx0ZXJlZERhdGEuZW1pdCh0aGlzLmRhdGEpO1xuICB9XG5cbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0QWxsID0gZXZlbnQuY2hlY2tlZDtcbiAgICB0aGlzLnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZFxuICAgICAgPyBbXG4gICAgICAgICAgLi4uKHRoaXMuY3JpdGVyaWEuZmluZChcbiAgICAgICAgICAgIChjcml0ZXJpb24pID0+IGNyaXRlcmlvbi50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLk1VTFRJU0VMRUNUXG4gICAgICAgICAgKT8uZmlsdGVyT3B0aW9ucyB8fCBbXSksXG4gICAgICAgIF1cbiAgICAgIDogW107XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcgfCBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIWRhdGVTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0ZVN0cmluZykgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgcmV0dXJuIGRhdGVTdHJpbmcgYXMgRGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IChkYXRlU3RyaW5nIGFzIHN0cmluZykuc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBjb25zdCBkYXkgPSBwYXJzZUludChwYXJ0c1swXSwgMTApO1xuICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApIC0gMTtcbiAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJ0c1syXSwgMTApO1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuICAgICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiPHAtcGFuZWwgaGVhZGVyPVwie3sgdGl0bGUgfX1cIiBbdG9nZ2xlYWJsZV09XCJ0cnVlXCIgW2NvbGxhcHNlZF09XCJ0cnVlXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNyaXRlcmlhLWNvbnRhaW5lclwiXG4gICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogJ3JlcGVhdCgnICsgaW5wdXRzUGVyUm93ICsgJywgMWZyKScgfVwiXG4gID5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBjcml0ZXJpYVwiIGNsYXNzPVwiY3JpdGVyaWEtaXRlbVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiYnNjLWxhYmVsXCI+e3sgaW5wdXQudGl0bGUgfX08L2xhYmVsPlxuXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpbnB1dC50eXBlXCI+XG4gICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNlYXJjaENyaXRlcmlhVHlwZUVudW0uREFURVJBTkdFXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwicmFuZ2VcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aC1pbnB1dFwiXG4gICAgICAgICAgW3Nob3dJY29uXT1cInRydWVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlucHV0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU2VhcmNoQ3JpdGVyaWFUeXBlRW51bS5EQVRFXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaW5wdXQudmFsdWUgPSAkZXZlbnRcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGgtaW5wdXRcIlxuICAgICAgICA+PC9wLWNhbGVuZGFyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU2VhcmNoQ3JpdGVyaWFUeXBlRW51bS5TVFJJTkdcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoLWlucHV0XCJcbiAgICAgICAgLz5cblxuICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLkFNT1VOVFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgbW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgIGlucHV0SWQ9XCJtaW5tYXhmcmFjdGlvblwiXG4gICAgICAgICAgW21pbkZyYWN0aW9uRGlnaXRzXT1cIjJcIlxuICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCI1XCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0Q3VycmVuY3lTeW1ib2woaW5wdXQpXCJcbiAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGgtaW5wdXRcIlxuICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuXG4gICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNlYXJjaENyaXRlcmlhVHlwZUVudW0uTlVNQkVSXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGgtaW5wdXRcIlxuICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuXG4gICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNlYXJjaENyaXRlcmlhVHlwZUVudW0uTVVMVElTRUxFQ1RcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImlucHV0LmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgIFtkaXNwbGF5XT1cIidjaGlwJ1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0QWxsXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAob25TZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjdXN0b20tbXVsdGlzZWxlY3QgZnVsbC13aWR0aC1pbnB1dFwiXG4gICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYnV0dG9uc1wiPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgIGxhYmVsPVwiRWZmYWNlclwiXG4gICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgY2xhc3M9XCJmb290ZXItYnV0dG9uXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgIGxhYmVsPVwiUmVjaGVyY2hlclwiXG4gICAgICAgIGljb249XCJwaSBwaS1zZWFyY2hcIlxuICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICBjbGFzcz1cImZvb3Rlci1idXR0b25cIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtcGFuZWw+XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VhcmNoLWNyaXRlcmlhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvbXVsdGktc2VhcmNoLWNyaXRlcmlhL211bHRpLXNlYXJjaC1jcml0ZXJpYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL211bHRpLXNlYXJjaC1jcml0ZXJpYS9tdWx0aS1zZWFyY2gtY3JpdGVyaWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7O0FBU2xELE1BQU0sT0FBTyw0QkFBNEI7SUFMekM7UUFNRSwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUV2QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDakIsU0FBSSxHQUF5QixRQUFRLENBQUMsQ0FBQyxpQkFBaUI7UUFDdkQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdEUsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQW1CLEVBQUUsQ0FBQztLQTRHL0I7SUExR0MsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLHNCQUFzQixDQUFDLFdBQVc7Z0JB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Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlYXJjaENyaXRlcmlhVHlwZUVudW0gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBTZWFyY2hDcml0ZXJpYSB9IGZyb20gJy4uL21vZGVscy9zZWFyY2gtY3JpdGVyaWEubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1vcHRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdWx0aS1zZWFyY2gtY3JpdGVyaWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktc2VhcmNoLWNyaXRlcmlhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VhcmNoLWNyaXRlcmlhLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWFyY2hDcml0ZXJpYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIFNlYXJjaENyaXRlcmlhVHlwZUVudW0gPSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtO1xuXG4gIEBJbnB1dCgpIHRpdGxlOiBTdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY3JpdGVyaWE6IFNlYXJjaENyaXRlcmlhW10gPSBbXTtcbiAgQElucHV0KCkgaW5wdXRzUGVyUm93OiBudW1iZXIgPSAzO1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBtb2RlOiAnc3RhdGljJyB8ICdkeW5hbWljJyA9ICdzdGF0aWMnOyAvLyBBZGQgbW9kZSBpbnB1dFxuICBAT3V0cHV0KCkgZmlsdGVyZWREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaENyaXRlcmlhID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IGFueSB9PigpO1xuXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZDogRmlsdGVyT3B0aW9uW10gPSBbXTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbS50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLk1VTFRJU0VMRUNUICYmXG4gICAgICAgIGl0ZW0uZmlsdGVyT3B0aW9uc1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbLi4uaXRlbS5maWx0ZXJPcHRpb25zXTtcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRDdXJyZW5jeVN5bWJvbChpbnB1dDogU2VhcmNoQ3JpdGVyaWEpOiBzdHJpbmcge1xuICAgIHJldHVybiBpbnB1dC5jdXJyZW5jeSB8fCAnRVVSJztcbiAgfVxuXG4gIHNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHluYW1pYycpIHtcbiAgICAgIGNvbnN0IGNyaXRlcmlhVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICB0aGlzLmNyaXRlcmlhLmZvckVhY2goKGNyaXRlcmlvbikgPT4ge1xuICAgICAgICBpZiAoY3JpdGVyaW9uLnZhbHVlICE9PSBudWxsICYmIGNyaXRlcmlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY3JpdGVyaWFWYWx1ZXNbY3JpdGVyaW9uLmNvZGVdID0gY3JpdGVyaW9uLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEuZW1pdChjcml0ZXJpYVZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jcml0ZXJpYS5ldmVyeSgoY3JpdGVyaW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGNyaXRlcmlvbi50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLkRBVEVSQU5HRSkge1xuICAgICAgICAgICAgY29uc3QgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0gPSBjcml0ZXJpb24udmFsdWUgfHwgW1xuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBpdGVtRGF0ZSA9IHRoaXMucGFyc2VEYXRlKFxuICAgICAgICAgICAgICBpdGVtW2NyaXRlcmlvbi5jb2RlXSB8fCBpdGVtWydkYXRlJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0RGF0ZSAmJiAhZW5kRGF0ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTdGFydERhdGUgPSBzdGFydERhdGVcbiAgICAgICAgICAgICAgPyB0aGlzLnBhcnNlRGF0ZShzdGFydERhdGUpXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZERhdGUgPSBlbmREYXRlID8gdGhpcy5wYXJzZURhdGUoZW5kRGF0ZSkgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKCFwYXJzZWRTdGFydERhdGUgfHwgaXRlbURhdGUgPj0gcGFyc2VkU3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgICAoIXBhcnNlZEVuZERhdGUgfHwgaXRlbURhdGUgPD0gcGFyc2VkRW5kRGF0ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpb24udHlwZSA9PT0gU2VhcmNoQ3JpdGVyaWFUeXBlRW51bS5BTU9VTlQpIHtcbiAgICAgICAgICAgIHJldHVybiAhY3JpdGVyaW9uLnZhbHVlIHx8IGl0ZW1bY3JpdGVyaW9uLmNvZGVdID09PSBjcml0ZXJpb24udmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpb24udHlwZSA9PT0gU2VhcmNoQ3JpdGVyaWFUeXBlRW51bS5NVUxUSVNFTEVDVCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgIWNyaXRlcmlvbi52YWx1ZSB8fFxuICAgICAgICAgICAgICBjcml0ZXJpb24udmFsdWUuc29tZShcbiAgICAgICAgICAgICAgICAob3B0aW9uOiBGaWx0ZXJPcHRpb24pID0+IG9wdGlvbi5sYWJlbCA9PT0gaXRlbVtjcml0ZXJpb24uY29kZV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlvbi50eXBlID09PSBTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLlNUUklORykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgIWNyaXRlcmlvbi52YWx1ZSB8fFxuICAgICAgICAgICAgICBpdGVtW2NyaXRlcmlvbi5jb2RlXVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoY3JpdGVyaW9uLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEuZW1pdChmaWx0ZXJlZCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jcml0ZXJpYS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaW5wdXQudmFsdWUgPSBudWxsO1xuICAgIH0pO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhLmVtaXQodGhpcy5kYXRhKTtcbiAgfVxuXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGV2ZW50OiBhbnksIGNyaXRlcmlvbjogU2VhcmNoQ3JpdGVyaWEpIHtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgY3JpdGVyaW9uLnZhbHVlID0gZXZlbnQuY2hlY2tlZCA/IFsuLi4oY3JpdGVyaW9uLmZpbHRlck9wdGlvbnMgPz8gW10pXSA6IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGUoZGF0ZVN0cmluZzogc3RyaW5nIHwgRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGVTdHJpbmcpID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgIHJldHVybiBkYXRlU3RyaW5nIGFzIERhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSAoZGF0ZVN0cmluZyBhcyBzdHJpbmcpLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKSAtIDE7XG4gICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFydHNbMl0sIDEwKTtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcbiAgICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiIsIjxwLXBhbmVsIGhlYWRlcj1cInt7IHRpdGxlIH19XCIgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiIFtjb2xsYXBzZWRdPVwidHJ1ZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcml0ZXJpYS1jb250YWluZXJcIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6ICdyZXBlYXQoJyArIGlucHV0c1BlclJvdyArICcsIDFmciknIH1cIlxuICA+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaW5wdXQgb2YgY3JpdGVyaWFcIiBjbGFzcz1cImNyaXRlcmlhLWl0ZW1cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImJzYy1sYWJlbFwiPnt7IGlucHV0LnRpdGxlIH19PC9sYWJlbD5cblxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaW5wdXQudHlwZVwiPlxuICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLkRBVEVSQU5HRVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInJhbmdlXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGgtaW5wdXRcIlxuICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJpbnB1dC52YWx1ZSA9ICRldmVudFwiXG4gICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNlYXJjaENyaXRlcmlhVHlwZUVudW0uREFURVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwiaW5wdXQudmFsdWVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlucHV0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoLWlucHV0XCJcbiAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNlYXJjaENyaXRlcmlhVHlwZUVudW0uU1RSSU5HXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXQudmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aC1pbnB1dFwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHAtaW5wdXROdW1iZXJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU2VhcmNoQ3JpdGVyaWFUeXBlRW51bS5BTU9VTlRcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXQudmFsdWVcIlxuICAgICAgICAgIG1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgICBpbnB1dElkPVwibWlubWF4ZnJhY3Rpb25cIlxuICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCIyXCJcbiAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiNVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldEN1cnJlbmN5U3ltYm9sKGlucHV0KVwiXG4gICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoLWlucHV0XCJcbiAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cblxuICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLk5VTUJFUlwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoLWlucHV0XCJcbiAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cblxuICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTZWFyY2hDcml0ZXJpYVR5cGVFbnVtLk1VTFRJU0VMRUNUXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJpbnB1dC5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICBbZGlzcGxheV09XCInY2hpcCdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCJcbiAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgKG9uU2VsZWN0QWxsQ2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudCwgaW5wdXQpXCJcbiAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tdWx0aXNlbGVjdCBmdWxsLXdpZHRoLWlucHV0XCJcbiAgICAgICAgPjwvcC1tdWx0aVNlbGVjdD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1idXR0b25zXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgbGFiZWw9XCJFZmZhY2VyXCJcbiAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgICBjbGFzcz1cImZvb3Rlci1idXR0b25cIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgbGFiZWw9XCJSZWNoZXJjaGVyXCJcbiAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgIGNsYXNzPVwiZm9vdGVyLWJ1dHRvblwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1wYW5lbD5cbiJdfQ==