@pepperi-addons/ngx-lib 0.2.61 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/address/address.component.theme.scss +4 -7
  2. package/address/pepperi-addons-ngx-lib-address.metadata.json +1 -1
  3. package/attachment/attachment.component.d.ts +1 -0
  4. package/attachment/attachment.component.theme.scss +3 -2
  5. package/attachment/pepperi-addons-ngx-lib-attachment.metadata.json +1 -1
  6. package/bread-crumbs/bread-crumbs.component.theme.scss +7 -7
  7. package/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.metadata.json +1 -1
  8. package/bundles/pepperi-addons-ngx-lib-address.umd.js +1 -1
  9. package/bundles/pepperi-addons-ngx-lib-address.umd.js.map +1 -1
  10. package/bundles/pepperi-addons-ngx-lib-attachment.umd.js +7 -2
  11. package/bundles/pepperi-addons-ngx-lib-attachment.umd.js.map +1 -1
  12. package/bundles/pepperi-addons-ngx-lib-bread-crumbs.umd.js +1 -1
  13. package/bundles/pepperi-addons-ngx-lib-bread-crumbs.umd.js.map +1 -1
  14. package/bundles/pepperi-addons-ngx-lib-button.umd.js +1 -1
  15. package/bundles/pepperi-addons-ngx-lib-button.umd.js.map +1 -1
  16. package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js +4 -1
  17. package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js.map +1 -1
  18. package/bundles/pepperi-addons-ngx-lib-color.umd.js +8 -3
  19. package/bundles/pepperi-addons-ngx-lib-color.umd.js.map +1 -1
  20. package/bundles/pepperi-addons-ngx-lib-date.umd.js +4 -1
  21. package/bundles/pepperi-addons-ngx-lib-date.umd.js.map +1 -1
  22. package/bundles/pepperi-addons-ngx-lib-dialog.umd.js +1 -1
  23. package/bundles/pepperi-addons-ngx-lib-dialog.umd.js.map +1 -1
  24. package/bundles/pepperi-addons-ngx-lib-field-title.umd.js +1 -1
  25. package/bundles/pepperi-addons-ngx-lib-field-title.umd.js.map +1 -1
  26. package/bundles/pepperi-addons-ngx-lib-files-uploader.umd.js +1 -1
  27. package/bundles/pepperi-addons-ngx-lib-files-uploader.umd.js.map +1 -1
  28. package/bundles/pepperi-addons-ngx-lib-form.umd.js +19 -16
  29. package/bundles/pepperi-addons-ngx-lib-form.umd.js.map +1 -1
  30. package/bundles/pepperi-addons-ngx-lib-group-buttons.umd.js +1 -1
  31. package/bundles/pepperi-addons-ngx-lib-group-buttons.umd.js.map +1 -1
  32. package/bundles/pepperi-addons-ngx-lib-image.umd.js +7 -2
  33. package/bundles/pepperi-addons-ngx-lib-image.umd.js.map +1 -1
  34. package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js +7 -2
  35. package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js.map +1 -1
  36. package/bundles/pepperi-addons-ngx-lib-list.umd.js +1 -1
  37. package/bundles/pepperi-addons-ngx-lib-list.umd.js.map +1 -1
  38. package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js +7 -2
  39. package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js.map +1 -1
  40. package/bundles/pepperi-addons-ngx-lib-query-builder.umd.js +1104 -0
  41. package/bundles/pepperi-addons-ngx-lib-query-builder.umd.js.map +1 -0
  42. package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js +7 -2
  43. package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js.map +1 -1
  44. package/bundles/pepperi-addons-ngx-lib-select.umd.js +7 -2
  45. package/bundles/pepperi-addons-ngx-lib-select.umd.js.map +1 -1
  46. package/bundles/pepperi-addons-ngx-lib-separator.umd.js +9 -1
  47. package/bundles/pepperi-addons-ngx-lib-separator.umd.js.map +1 -1
  48. package/bundles/pepperi-addons-ngx-lib-side-bar.umd.js +1 -1
  49. package/bundles/pepperi-addons-ngx-lib-side-bar.umd.js.map +1 -1
  50. package/bundles/pepperi-addons-ngx-lib-signature.umd.js +7 -2
  51. package/bundles/pepperi-addons-ngx-lib-signature.umd.js.map +1 -1
  52. package/bundles/pepperi-addons-ngx-lib-slider.umd.js +1 -1
  53. package/bundles/pepperi-addons-ngx-lib-slider.umd.js.map +1 -1
  54. package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js +306 -39
  55. package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js.map +1 -1
  56. package/bundles/pepperi-addons-ngx-lib-textarea.umd.js +7 -2
  57. package/bundles/pepperi-addons-ngx-lib-textarea.umd.js.map +1 -1
  58. package/bundles/pepperi-addons-ngx-lib-textbox.umd.js +5 -3
  59. package/bundles/pepperi-addons-ngx-lib-textbox.umd.js.map +1 -1
  60. package/bundles/pepperi-addons-ngx-lib-top-bar.umd.js +1 -1
  61. package/bundles/pepperi-addons-ngx-lib-top-bar.umd.js.map +1 -1
  62. package/bundles/pepperi-addons-ngx-lib.umd.js +3 -1
  63. package/bundles/pepperi-addons-ngx-lib.umd.js.map +1 -1
  64. package/button/button.component.theme.scss +0 -2
  65. package/button/pepperi-addons-ngx-lib-button.metadata.json +1 -1
  66. package/checkbox/checkbox.component.theme.scss +0 -2
  67. package/checkbox/pepperi-addons-ngx-lib-checkbox.metadata.json +1 -1
  68. package/color/color-picker.component.theme.scss +123 -128
  69. package/color/color.component.d.ts +1 -0
  70. package/color/color.component.theme.scss +0 -7
  71. package/color/pepperi-addons-ngx-lib-color.metadata.json +1 -1
  72. package/core/customization/customization.service.d.ts +1 -0
  73. package/date/date.component.theme.scss +163 -169
  74. package/date/pepperi-addons-ngx-lib-date.metadata.json +1 -1
  75. package/dialog/dialog.component.theme.scss +4 -4
  76. package/dialog/pepperi-addons-ngx-lib-dialog.metadata.json +1 -1
  77. package/esm2015/address/address.component.js +2 -2
  78. package/esm2015/attachment/attachment.component.js +8 -3
  79. package/esm2015/bread-crumbs/bread-crumbs.component.js +2 -2
  80. package/esm2015/button/button.component.js +2 -2
  81. package/esm2015/checkbox/checkbox.component.js +5 -2
  82. package/esm2015/color/color-picker.component.js +2 -2
  83. package/esm2015/color/color.component.js +8 -3
  84. package/esm2015/core/customization/customization.service.js +4 -2
  85. package/esm2015/date/date.component.js +5 -2
  86. package/esm2015/dialog/dialog.component.js +2 -2
  87. package/esm2015/field-title/field-title.component.js +2 -2
  88. package/esm2015/files-uploader/files-uploader.component.js +2 -2
  89. package/esm2015/form/indicators.component.js +2 -2
  90. package/esm2015/form/internal-button.component.js +20 -17
  91. package/esm2015/group-buttons/group-buttons.component.js +2 -2
  92. package/esm2015/image/image.component.js +8 -3
  93. package/esm2015/images-filmstrip/images-filmstrip.component.js +8 -3
  94. package/esm2015/list/list-total.component.js +2 -2
  95. package/esm2015/quantity-selector/quantity-selector.component.js +8 -3
  96. package/esm2015/query-builder/common/model/field.js +2 -0
  97. package/esm2015/query-builder/common/model/filter.js +2 -0
  98. package/esm2015/query-builder/common/model/legacy.js +2 -0
  99. package/esm2015/query-builder/common/model/operator-unit.js +42 -0
  100. package/esm2015/query-builder/common/model/operator.js +207 -0
  101. package/esm2015/query-builder/common/model/structure.js +2 -0
  102. package/esm2015/query-builder/common/model/type-map.js +27 -0
  103. package/esm2015/query-builder/common/model/type.js +6 -0
  104. package/esm2015/query-builder/common/services/output-query.service.js +111 -0
  105. package/esm2015/query-builder/common/services/type-convertor.service.js +40 -0
  106. package/esm2015/query-builder/pepperi-addons-ngx-lib-query-builder.js +9 -0
  107. package/esm2015/query-builder/public-api.js +8 -0
  108. package/esm2015/query-builder/query-builder-item/query-builder-item.component.js +116 -0
  109. package/esm2015/query-builder/query-builder-section/query-builder-section.component.js +64 -0
  110. package/esm2015/query-builder/query-builder.component.js +104 -0
  111. package/esm2015/query-builder/query-builder.module.js +35 -0
  112. package/esm2015/query-builder/query-builder.service.js +282 -0
  113. package/esm2015/rich-html-textarea/rich-html-textarea.component.js +8 -3
  114. package/esm2015/select/select.component.js +8 -3
  115. package/esm2015/separator/separator.component.js +10 -2
  116. package/esm2015/side-bar/side-bar.component.js +2 -2
  117. package/esm2015/signature/signature.component.js +8 -3
  118. package/esm2015/slider/slider.component.js +2 -2
  119. package/esm2015/smart-filters/boolean-filter/boolean-filter.component.js +23 -3
  120. package/esm2015/smart-filters/common/model/base-filter-component.js +35 -8
  121. package/esm2015/smart-filters/common/model/creator.js +8 -2
  122. package/esm2015/smart-filters/common/model/field.js +12 -1
  123. package/esm2015/smart-filters/common/model/operator.js +8 -8
  124. package/esm2015/smart-filters/common/model/type.js +1 -1
  125. package/esm2015/smart-filters/date-filter/date-filter.component.js +45 -2
  126. package/esm2015/smart-filters/multi-select-filter/multi-select-filter.component.js +53 -14
  127. package/esm2015/smart-filters/number-filter/number-filter.component.js +27 -2
  128. package/esm2015/smart-filters/public-api.js +2 -1
  129. package/esm2015/smart-filters/smart-filters.component.js +2 -2
  130. package/esm2015/smart-filters/smart-filters.module.js +16 -3
  131. package/esm2015/smart-filters/text-filter/text-filter.component.js +79 -0
  132. package/esm2015/textarea/textarea.component.js +8 -3
  133. package/esm2015/textbox/textbox.component.js +6 -4
  134. package/esm2015/top-bar/top-bar.component.js +2 -2
  135. package/fesm2015/pepperi-addons-ngx-lib-address.js +1 -1
  136. package/fesm2015/pepperi-addons-ngx-lib-address.js.map +1 -1
  137. package/fesm2015/pepperi-addons-ngx-lib-attachment.js +7 -2
  138. package/fesm2015/pepperi-addons-ngx-lib-attachment.js.map +1 -1
  139. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.js +1 -1
  140. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.js.map +1 -1
  141. package/fesm2015/pepperi-addons-ngx-lib-button.js +1 -1
  142. package/fesm2015/pepperi-addons-ngx-lib-button.js.map +1 -1
  143. package/fesm2015/pepperi-addons-ngx-lib-checkbox.js +4 -1
  144. package/fesm2015/pepperi-addons-ngx-lib-checkbox.js.map +1 -1
  145. package/fesm2015/pepperi-addons-ngx-lib-color.js +8 -3
  146. package/fesm2015/pepperi-addons-ngx-lib-color.js.map +1 -1
  147. package/fesm2015/pepperi-addons-ngx-lib-date.js +4 -1
  148. package/fesm2015/pepperi-addons-ngx-lib-date.js.map +1 -1
  149. package/fesm2015/pepperi-addons-ngx-lib-dialog.js +1 -1
  150. package/fesm2015/pepperi-addons-ngx-lib-dialog.js.map +1 -1
  151. package/fesm2015/pepperi-addons-ngx-lib-field-title.js +1 -1
  152. package/fesm2015/pepperi-addons-ngx-lib-field-title.js.map +1 -1
  153. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.js +1 -1
  154. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.js.map +1 -1
  155. package/fesm2015/pepperi-addons-ngx-lib-form.js +19 -16
  156. package/fesm2015/pepperi-addons-ngx-lib-form.js.map +1 -1
  157. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.js +1 -1
  158. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.js.map +1 -1
  159. package/fesm2015/pepperi-addons-ngx-lib-image.js +7 -2
  160. package/fesm2015/pepperi-addons-ngx-lib-image.js.map +1 -1
  161. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js +7 -2
  162. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js.map +1 -1
  163. package/fesm2015/pepperi-addons-ngx-lib-list.js +1 -1
  164. package/fesm2015/pepperi-addons-ngx-lib-list.js.map +1 -1
  165. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js +7 -2
  166. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js.map +1 -1
  167. package/fesm2015/pepperi-addons-ngx-lib-query-builder.js +1014 -0
  168. package/fesm2015/pepperi-addons-ngx-lib-query-builder.js.map +1 -0
  169. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js +7 -2
  170. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js.map +1 -1
  171. package/fesm2015/pepperi-addons-ngx-lib-select.js +7 -2
  172. package/fesm2015/pepperi-addons-ngx-lib-select.js.map +1 -1
  173. package/fesm2015/pepperi-addons-ngx-lib-separator.js +9 -1
  174. package/fesm2015/pepperi-addons-ngx-lib-separator.js.map +1 -1
  175. package/fesm2015/pepperi-addons-ngx-lib-side-bar.js +1 -1
  176. package/fesm2015/pepperi-addons-ngx-lib-side-bar.js.map +1 -1
  177. package/fesm2015/pepperi-addons-ngx-lib-signature.js +7 -2
  178. package/fesm2015/pepperi-addons-ngx-lib-signature.js.map +1 -1
  179. package/fesm2015/pepperi-addons-ngx-lib-slider.js +1 -1
  180. package/fesm2015/pepperi-addons-ngx-lib-slider.js.map +1 -1
  181. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js +293 -36
  182. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js.map +1 -1
  183. package/fesm2015/pepperi-addons-ngx-lib-textarea.js +7 -2
  184. package/fesm2015/pepperi-addons-ngx-lib-textarea.js.map +1 -1
  185. package/fesm2015/pepperi-addons-ngx-lib-textbox.js +5 -3
  186. package/fesm2015/pepperi-addons-ngx-lib-textbox.js.map +1 -1
  187. package/fesm2015/pepperi-addons-ngx-lib-top-bar.js +1 -1
  188. package/fesm2015/pepperi-addons-ngx-lib-top-bar.js.map +1 -1
  189. package/fesm2015/pepperi-addons-ngx-lib.js +3 -1
  190. package/fesm2015/pepperi-addons-ngx-lib.js.map +1 -1
  191. package/field-title/field-title.component.theme.scss +0 -2
  192. package/field-title/pepperi-addons-ngx-lib-field-title.metadata.json +1 -1
  193. package/files-uploader/files-uploader.component.theme.scss +3 -2
  194. package/files-uploader/pepperi-addons-ngx-lib-files-uploader.metadata.json +1 -1
  195. package/form/indicators.component.theme.scss +5 -5
  196. package/form/internal-button.component.d.ts +0 -1
  197. package/form/pepperi-addons-ngx-lib-form.metadata.json +1 -1
  198. package/group-buttons/group-buttons.component.theme.scss +11 -11
  199. package/group-buttons/pepperi-addons-ngx-lib-group-buttons.metadata.json +1 -1
  200. package/image/image.component.d.ts +1 -0
  201. package/image/image.component.theme.scss +28 -27
  202. package/image/pepperi-addons-ngx-lib-image.metadata.json +1 -1
  203. package/images-filmstrip/images-filmstrip.component.d.ts +1 -0
  204. package/images-filmstrip/images-filmstrip.component.theme.scss +27 -26
  205. package/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.metadata.json +1 -1
  206. package/list/list-total.component.theme.scss +6 -6
  207. package/list/pepperi-addons-ngx-lib-list.metadata.json +1 -1
  208. package/package.json +5 -5
  209. package/page-layout/page-layout.component.theme.scss +6 -6
  210. package/pepperi-addons-ngx-lib.metadata.json +1 -1
  211. package/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.metadata.json +1 -1
  212. package/quantity-selector/quantity-selector.component.d.ts +1 -0
  213. package/quantity-selector/quantity-selector.component.theme.scss +21 -21
  214. package/query-builder/common/model/field.d.ts +8 -0
  215. package/query-builder/common/model/filter.d.ts +6 -0
  216. package/query-builder/common/model/legacy.d.ts +29 -0
  217. package/query-builder/common/model/operator-unit.d.ts +13 -0
  218. package/query-builder/common/model/operator.d.ts +21 -0
  219. package/query-builder/common/model/structure.d.ts +4 -0
  220. package/query-builder/common/model/type-map.d.ts +12 -0
  221. package/query-builder/common/model/type.d.ts +4 -0
  222. package/query-builder/common/services/output-query.service.d.ts +44 -0
  223. package/query-builder/common/services/type-convertor.service.d.ts +10 -0
  224. package/query-builder/package.json +14 -0
  225. package/query-builder/pepperi-addons-ngx-lib-query-builder.d.ts +8 -0
  226. package/query-builder/pepperi-addons-ngx-lib-query-builder.metadata.json +1 -0
  227. package/query-builder/public-api.d.ts +4 -0
  228. package/query-builder/query-builder-item/query-builder-item.component.d.ts +37 -0
  229. package/query-builder/query-builder-section/query-builder-section.component.d.ts +27 -0
  230. package/query-builder/query-builder-section/query-builder-section.component.theme.scss +7 -0
  231. package/query-builder/query-builder.component.d.ts +35 -0
  232. package/query-builder/query-builder.module.d.ts +2 -0
  233. package/query-builder/query-builder.service.d.ts +94 -0
  234. package/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.metadata.json +1 -1
  235. package/rich-html-textarea/rich-html-textarea.component.d.ts +1 -0
  236. package/rich-html-textarea/rich-html-textarea.component.theme.scss +77 -70
  237. package/select/pepperi-addons-ngx-lib-select.metadata.json +1 -1
  238. package/select/select.component.d.ts +1 -0
  239. package/select/select.component.theme.scss +98 -2
  240. package/separator/pepperi-addons-ngx-lib-separator.metadata.json +1 -1
  241. package/separator/separator.component.theme.scss +1 -1
  242. package/side-bar/pepperi-addons-ngx-lib-side-bar.metadata.json +1 -1
  243. package/side-bar/side-bar.component.theme.scss +17 -16
  244. package/signature/pepperi-addons-ngx-lib-signature.metadata.json +1 -1
  245. package/signature/signature.component.d.ts +1 -0
  246. package/signature/signature.component.theme.scss +5 -21
  247. package/slider/pepperi-addons-ngx-lib-slider.metadata.json +1 -1
  248. package/slider/slider.component.theme.scss +55 -53
  249. package/smart-filters/boolean-filter/boolean-filter.component.d.ts +6 -1
  250. package/smart-filters/common/model/base-filter-component.d.ts +7 -0
  251. package/smart-filters/common/model/field.d.ts +4 -0
  252. package/smart-filters/common/model/operator.d.ts +1 -0
  253. package/smart-filters/common/model/type.d.ts +2 -2
  254. package/smart-filters/date-filter/date-filter.component.d.ts +8 -1
  255. package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +6 -0
  256. package/smart-filters/number-filter/number-filter.component.d.ts +5 -0
  257. package/smart-filters/pepperi-addons-ngx-lib-smart-filters.metadata.json +1 -1
  258. package/smart-filters/public-api.d.ts +1 -0
  259. package/smart-filters/smart-filters.component.theme.scss +6 -7
  260. package/smart-filters/text-filter/text-filter.component.d.ts +17 -0
  261. package/src/assets/i18n/en.ngx-lib.json +2 -1
  262. package/src/core/style/abstracts/breakpoints.scss +4 -2
  263. package/src/core/style/abstracts/functions.scss +233 -216
  264. package/src/core/style/abstracts/mixins.scss +191 -188
  265. package/src/core/style/base/base.scss +125 -124
  266. package/src/core/style/base/grids.scss +1 -1
  267. package/src/core/style/base/typography.scss +66 -62
  268. package/src/core/style/components/button.scss +57 -60
  269. package/src/core/style/components/checkbox.scss +41 -38
  270. package/src/core/style/components/datetime.scss +182 -22
  271. package/src/core/style/components/file.scss +159 -141
  272. package/src/core/style/components/general.scss +175 -287
  273. package/src/core/style/components/input.scss +22 -24
  274. package/src/core/style/components/quantity-selector.scss +15 -12
  275. package/src/core/style/components/radio-button.scss +22 -38
  276. package/src/core/style/components/select.scss +184 -182
  277. package/src/core/style/components/signature.scss +14 -12
  278. package/src/core/style/components/splitter.scss +58 -55
  279. package/src/core/style/components/textarea.scss +90 -78
  280. package/textarea/pepperi-addons-ngx-lib-textarea.metadata.json +1 -1
  281. package/textarea/textarea.component.d.ts +1 -0
  282. package/textarea/textarea.component.theme.scss +3 -2
  283. package/textbox/pepperi-addons-ngx-lib-textbox.metadata.json +1 -1
  284. package/textbox/textbox.component.theme.scss +1 -1
  285. package/theming.scss +50 -144
  286. package/top-bar/pepperi-addons-ngx-lib-top-bar.metadata.json +1 -1
  287. package/top-bar/top-bar.component.theme.scss +7 -7
  288. package/form/form.component.theme.scss +0 -2
  289. package/form/internal-button.component.theme.scss +0 -2
  290. package/form/internal-menu.component.theme.scss +0 -3
  291. package/list/list-actions.component.theme.scss +0 -3
  292. package/list/list-carousel.component.theme.scss +0 -9
  293. package/list/list-chooser.component.theme.scss +0 -3
  294. package/list/list-pager.component.theme.scss +0 -3
  295. package/list/list-sorting.component.theme.scss +0 -3
  296. package/list/list-views.component.theme.scss +0 -3
  297. package/list/list.component.theme.scss +0 -5
  298. package/list/list_old.component.theme.scss +0 -5
  299. package/menu/menu.component.theme.scss +0 -2
  300. package/search/search.component.theme.scss +0 -3
  301. package/textbox-icon/textbox-icon.component.theme.scss +0 -3
@@ -0,0 +1,282 @@
1
+ import { Injectable, ComponentFactoryResolver } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { PepSmartFilterOperators, createSmartFilter, createSmartFilterField } from '@pepperi-addons/ngx-lib/smart-filters';
5
+ import { getSmartBuilderOperator } from './common/model/operator';
6
+ import { PepQueryBuilderSectionComponent } from './query-builder-section/query-builder-section.component';
7
+ import { PepQueryBuilderItemComponent } from './query-builder-item/query-builder-item.component';
8
+ import { PepQueryBuilderTypeMap } from './common/model/type-map';
9
+ import { getSmartBuilderOperationUnit } from './common/model/operator-unit';
10
+ import { PepOutputQueryService } from './common/services/output-query.service';
11
+ import { PepOperatorTypes } from './common/model/type';
12
+ const MAX_STRUCTURE_DEPTH = 3;
13
+ export class PepQueryBuilderService {
14
+ constructor(_fb, _resolver, _outputQueryService) {
15
+ this._fb = _fb;
16
+ this._resolver = _resolver;
17
+ this._outputQueryService = _outputQueryService;
18
+ this._outputQuery$ = new BehaviorSubject(null);
19
+ this._maxStructureDepth = MAX_STRUCTURE_DEPTH;
20
+ this.outputQuery$ = this._outputQuery$.asObservable();
21
+ }
22
+ set maxDepth(value) {
23
+ this._maxStructureDepth = value;
24
+ }
25
+ get maxDepth() {
26
+ return this._maxStructureDepth;
27
+ }
28
+ set fields(list) {
29
+ this._smartFilterFields = this.convertToSmartFilterFields(list);
30
+ }
31
+ get hasFields() {
32
+ var _a;
33
+ return ((_a = this._smartFilterFields) === null || _a === void 0 ? void 0 : _a.length) > 0;
34
+ }
35
+ set form(value) {
36
+ this._form = value;
37
+ }
38
+ get form() {
39
+ return this._form;
40
+ }
41
+ /**
42
+ * builds a dynamic UI query structure
43
+ * might has a different structure than the query's due to parent-child elements merge
44
+ * @param query legacy query
45
+ * @param containerRef reference to root element
46
+ */
47
+ buildQueryStructure(query, containerRef) {
48
+ //update root operator
49
+ if (this.hasProperty(query, 'ComplexId') &&
50
+ (query === null || query === void 0 ? void 0 : query.Operation) &&
51
+ query.Operation !== this._form.get('operator').value) {
52
+ this._form.get('operator').setValue(query.Operation);
53
+ }
54
+ this.flatten(this._form.get('operator').value, query, containerRef, this._form, 0);
55
+ }
56
+ /**
57
+ * checks if the object contains property
58
+ * @param obj object
59
+ * @param prop property name
60
+ * @returns true if contains, false otherwise
61
+ */
62
+ hasProperty(obj, prop) {
63
+ return Object.prototype.hasOwnProperty.call(obj, prop);
64
+ }
65
+ /**
66
+ * a recursive function dynamically builds UI filters structure
67
+ * @param parentOperator parent legacy complex operator
68
+ * @param current child legacy object (either another complex or expression type)
69
+ * @param containerRef parent element
70
+ * @param parentForm parent form
71
+ */
72
+ flatten(parentOperator, current, containerRef, parentForm, depth) {
73
+ if (this.hasProperty(current, 'ComplexId')) {
74
+ const section = current;
75
+ if (parentOperator === current.Operation) {
76
+ this.flatten(current.Operation, section.LeftNode, containerRef, parentForm, depth);
77
+ this.flatten(current.Operation, section.RightNode, containerRef, parentForm, depth);
78
+ }
79
+ else {
80
+ const result = this.createSection(section.Operation, containerRef, parentForm, depth);
81
+ this.flatten(section.Operation, section.LeftNode, result.containerRef, result.parentForm, depth + 1);
82
+ this.flatten(section.Operation, section.RightNode, result.containerRef, result.parentForm, depth + 1);
83
+ }
84
+ }
85
+ else if (this.hasProperty(current, 'ExpressionId')) {
86
+ this.createItem(current, containerRef, parentForm);
87
+ }
88
+ }
89
+ /**
90
+ * creates a container object of two or more child filter items
91
+ * @param operator AND/OR operator
92
+ * @param containerRef parent element
93
+ * @param parentForm parent form
94
+ * @param depth
95
+ * @returns an object containing the current element and current form
96
+ */
97
+ createSection(operator, containerRef, parentForm, depth) {
98
+ const factory = this._resolver.resolveComponentFactory(PepQueryBuilderSectionComponent);
99
+ const componentRef = containerRef.createComponent(factory);
100
+ const sectionGroup = this._fb.group({
101
+ operator: this._fb.control(operator)
102
+ });
103
+ let counter = 1;
104
+ Object.keys(parentForm.controls).forEach(item => { if (item.includes('section')) {
105
+ counter++;
106
+ } });
107
+ const formKey = `section${counter}`;
108
+ parentForm.addControl(formKey, sectionGroup);
109
+ componentRef.instance.form = sectionGroup;
110
+ componentRef.instance.depth = {
111
+ current: depth,
112
+ max: this._maxStructureDepth
113
+ };
114
+ componentRef.instance.createSection.subscribe(() => {
115
+ const section = this.createSection(PepOperatorTypes.And, componentRef.instance.sectionContainer, sectionGroup, depth + 1);
116
+ this.createItem(null, section.containerRef, section.parentForm);
117
+ });
118
+ componentRef.instance.createItem.subscribe(() => {
119
+ this.createItem(null, componentRef.instance.sectionContainer, sectionGroup);
120
+ });
121
+ componentRef.instance.remove.subscribe(() => {
122
+ parentForm.removeControl(formKey);
123
+ componentRef.destroy();
124
+ this.createOutputQuery();
125
+ });
126
+ componentRef.instance.operatorChange.subscribe(() => {
127
+ this.createOutputQuery();
128
+ });
129
+ return {
130
+ containerRef: componentRef.instance.sectionContainer,
131
+ parentForm: sectionGroup
132
+ };
133
+ }
134
+ /**
135
+ * creates a component represents filter item (leaf element - has no childs)
136
+ * @param current filter legacy element
137
+ * @param containerRef parent element
138
+ * @param parentForm parent form
139
+ */
140
+ createItem(current, containerRef, parentForm) {
141
+ const factory = this._resolver.resolveComponentFactory(PepQueryBuilderItemComponent);
142
+ const componentRef = containerRef.createComponent(factory);
143
+ let counter = 1;
144
+ Object.keys(parentForm.controls).forEach(item => { if (item.includes('item')) {
145
+ counter++;
146
+ } });
147
+ const formKey = `item${counter}`;
148
+ componentRef.instance.formKey = formKey;
149
+ componentRef.instance.fields = this._smartFilterFields;
150
+ const selectedField = this.getSelectedField(current);
151
+ if (selectedField) {
152
+ componentRef.instance.selected = selectedField;
153
+ if (current) {
154
+ componentRef.instance.filter = this.getFilter(current, selectedField.smart);
155
+ }
156
+ }
157
+ componentRef.instance.parentForm = parentForm;
158
+ componentRef.instance.filterChange.subscribe(() => {
159
+ this.createOutputQuery();
160
+ });
161
+ componentRef.instance.remove.subscribe(() => {
162
+ parentForm.removeControl(formKey);
163
+ componentRef.destroy();
164
+ this.createOutputQuery();
165
+ });
166
+ }
167
+ /**
168
+ * creates a smart filter object
169
+ * @param current filter legacy element
170
+ * @param field filter's selected field
171
+ * @returns smart filter object
172
+ */
173
+ getFilter(current, field) {
174
+ const operator = getSmartBuilderOperator(current.Operation, field.type);
175
+ if (operator) {
176
+ const filterValues = this.getFilterValues(current, operator, field);
177
+ return createSmartFilter(current.ApiName, operator, filterValues.first, filterValues.second, filterValues.operationUnit);
178
+ }
179
+ else {
180
+ return null;
181
+ }
182
+ }
183
+ /**
184
+ * get smart filter field
185
+ * @param current filter legacy element
186
+ * @returns smart filter field, if not found returns the first field
187
+ */
188
+ getSelectedField(current) {
189
+ var _a, _b;
190
+ if (current) {
191
+ const item = this._smartFilterFields.find(field => field.smart.id === current.ApiName);
192
+ return item ? item : ((_a = this._smartFilterFields) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this._smartFilterFields[0] : null;
193
+ }
194
+ else {
195
+ return ((_b = this._smartFilterFields) === null || _b === void 0 ? void 0 : _b.length) > 0 ? this._smartFilterFields[0] : null;
196
+ }
197
+ }
198
+ /**
199
+ * gets smart filter's values data
200
+ * @param current filter legacy element
201
+ * @param operator smart filter operator
202
+ * @param field filter's selected field
203
+ * @returns object contains the filter values data
204
+ */
205
+ getFilterValues(current, operator, field) {
206
+ var _a, _b, _c, _d, _e;
207
+ const data = {
208
+ first: null,
209
+ second: null,
210
+ operationUnit: null
211
+ };
212
+ if (operator === PepSmartFilterOperators.In) { //multi select
213
+ //filter keys don't exist on field options
214
+ data.first = ((_a = current === null || current === void 0 ? void 0 : current.Values) === null || _a === void 0 ? void 0 : _a.length) > 0 ? current.Values.filter(item => {
215
+ return field.options.find(option => option.key === item);
216
+ }) : null;
217
+ }
218
+ else if (operator === PepSmartFilterOperators.InTheLast ||
219
+ operator === PepSmartFilterOperators.NotInTheLast ||
220
+ operator === PepSmartFilterOperators.DueIn ||
221
+ operator === PepSmartFilterOperators.NotDueIn) { //operation unit
222
+ data.first = ((_b = current === null || current === void 0 ? void 0 : current.Values) === null || _b === void 0 ? void 0 : _b.length) > 0 ? current.Values[0] : null;
223
+ if (((_c = current === null || current === void 0 ? void 0 : current.Values) === null || _c === void 0 ? void 0 : _c.length) === 2) {
224
+ data.operationUnit = getSmartBuilderOperationUnit(current.Values[1]);
225
+ }
226
+ }
227
+ else {
228
+ data.first = ((_d = current === null || current === void 0 ? void 0 : current.Values) === null || _d === void 0 ? void 0 : _d.length) > 0 ? current.Values[0] : null;
229
+ data.second = ((_e = current === null || current === void 0 ? void 0 : current.Values) === null || _e === void 0 ? void 0 : _e.length) === 2 ? current.Values[1] : null;
230
+ }
231
+ return data;
232
+ }
233
+ /**
234
+ * converts legacy fields to smart filter fields
235
+ * @param fields legacy fields array
236
+ * @returns smart filter fields array
237
+ */
238
+ convertToSmartFilterFields(fields) {
239
+ if ((fields === null || fields === void 0 ? void 0 : fields.length) > 0) {
240
+ const typeMapper = new PepQueryBuilderTypeMap();
241
+ return fields.map((field) => {
242
+ var _a;
243
+ return {
244
+ smart: createSmartFilterField({
245
+ id: field.FieldID,
246
+ name: field.Title,
247
+ options: (_a = field.OptionalValues) === null || _a === void 0 ? void 0 : _a.map(option => {
248
+ return {
249
+ key: option.Key,
250
+ value: option.Value
251
+ };
252
+ })
253
+ }, typeMapper.getSmartBuilderType(field.FieldType)),
254
+ query: {
255
+ fieldType: field.FieldType
256
+ }
257
+ };
258
+ });
259
+ }
260
+ else {
261
+ return [];
262
+ }
263
+ }
264
+ /**
265
+ * creates a legacy output query
266
+ */
267
+ createOutputQuery() {
268
+ if (this._form.valid) {
269
+ const query = this._outputQueryService.generateQuery(this._form.value);
270
+ this._outputQuery$.next(query);
271
+ }
272
+ }
273
+ }
274
+ PepQueryBuilderService.decorators = [
275
+ { type: Injectable }
276
+ ];
277
+ PepQueryBuilderService.ctorParameters = () => [
278
+ { type: FormBuilder },
279
+ { type: ComponentFactoryResolver },
280
+ { type: PepOutputQueryService }
281
+ ];
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWVyeS1idWlsZGVyL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFvQix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBR0gsdUJBQXVCLEVBR3ZCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFFekIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUVqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUc5QixNQUFNLE9BQU8sc0JBQXNCO0lBUy9CLFlBQW9CLEdBQWdCLEVBQVUsU0FBbUMsRUFBVSxtQkFBMEM7UUFBakgsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQVI3SCxrQkFBYSxHQUFHLElBQUksZUFBZSxD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LElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUVoRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs7Z0JBQ3hCLE9BQU87b0JBQ0gsS0FBSyxFQUFFLHNCQUFzQixDQUN6Qjt3QkFDSSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU87d0JBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDakIsT0FBTyxFQUFFLE1BQUEsS0FBSyxDQUFDLGNBQWMsMENBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFOzRCQUN4QyxPQUFPO2dDQUNILEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztnQ0FDZixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7NkJBQ3RCLENBQUE7d0JBQ0wsQ0FBQyxDQUFDO3FCQUNMLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQXVCLENBQUM7b0JBQzdFLEtBQUssRUFBRTt3QkFDSCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7cUJBQzdCO2lCQUNKLENBQUE7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO2FBQU07WUFDSCxPQUFPLEVBQUUsQ0FBQztTQUNiO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDOzs7WUE1UkosVUFBVTs7O1lBMUJGLFdBQVc7WUFEbUIsd0JBQXdCO1lBcUJ0RCxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IElQZXBRdWVyeUJ1aWxkZXJGaWVsZCwgSVBlcFF1ZXJ5U2VjdGlvbiwgSVBlcFF1ZXJ5SXRlbSB9IGZyb20gJy4vY29tbW9uL21vZGVsL2xlZ2FjeSc7XG5pbXBvcnQge1xuICAgIElQZXBTbWFydEZpbHRlckZpZWxkLFxuICAgIElQZXBTbWFydEZpbHRlckRhdGEsXG4gICAgUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMsXG4gICAgSVBlcFNtYXJ0RmlsdGVyT3BlcmF0b3IsXG4gICAgUGVwU21hcnRGaWx0ZXJUeXBlLFxuICAgIGNyZWF0ZVNtYXJ0RmlsdGVyLFxuICAgIGNyZWF0ZVNtYXJ0RmlsdGVyRmllbGQsXG4gICAgUGVwU21hcnRGaWx0ZXJCYXNlRmllbGRcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvc21hcnQtZmlsdGVycyc7XG5pbXBvcnQgeyBnZXRTbWFydEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gJy4vY29tbW9uL21vZGVsL29wZXJhdG9yJztcbmltcG9ydCB7IFBlcFF1ZXJ5QnVpbGRlclNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXItc2VjdGlvbi9xdWVyeS1idWlsZGVyLXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFBlcFF1ZXJ5QnVpbGRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXItaXRlbS9xdWVyeS1idWlsZGVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElQZXBRdWVyeUJ1aWxkZXJGaWVsZENvbnRhaW5lciB9IGZyb20gJy4vY29tbW9uL21vZGVsL2ZpZWxkJztcbmltcG9ydCB7IFBlcFF1ZXJ5QnVpbGRlclR5cGVNYXAgfSBmcm9tICcuL2NvbW1vbi9tb2RlbC90eXBlLW1hcCc7XG5pbXBvcnQgeyBnZXRTbWFydEJ1aWxkZXJPcGVyYXRpb25Vbml0IH0gZnJvbSAnLi9jb21tb24vbW9kZWwvb3BlcmF0b3ItdW5pdCc7XG5pbXBvcnQgeyBQZXBPdXRwdXRRdWVyeVNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi9zZXJ2aWNlcy9vdXRwdXQtcXVlcnkuc2VydmljZSc7XG5pbXBvcnQgeyBJUGVwUXVlcnlCdWlsZGVyVmFsdWVzIH0gZnJvbSAnLi9jb21tb24vbW9kZWwvZmlsdGVyJztcbmltcG9ydCB7IFBlcE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuL2NvbW1vbi9tb2RlbC90eXBlJztcblxuY29uc3QgTUFYX1NUUlVDVFVSRV9ERVBUSCA9IDM7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXBRdWVyeUJ1aWxkZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9vdXRwdXRRdWVyeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQZXBRdWVyeVNlY3Rpb24gfCBJUGVwUXVlcnlJdGVtPihudWxsKTtcblxuICAgIHByaXZhdGUgX3NtYXJ0RmlsdGVyRmllbGRzOiBBcnJheTxJUGVwUXVlcnlCdWlsZGVyRmllbGRDb250YWluZXI+O1xuICAgIHByaXZhdGUgX2Zvcm06IEZvcm1Hcm91cDtcbiAgICBwcml2YXRlIF9tYXhTdHJ1Y3R1cmVEZXB0aCA9IE1BWF9TVFJVQ1RVUkVfREVQVEg7XG5cbiAgICBwdWJsaWMgb3V0cHV0UXVlcnkkID0gdGhpcy5fb3V0cHV0UXVlcnkkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9yZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIF9vdXRwdXRRdWVyeVNlcnZpY2U6IFBlcE91dHB1dFF1ZXJ5U2VydmljZSkge1xuXG4gICAgfVxuXG4gICAgc2V0IG1heERlcHRoKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX21heFN0cnVjdHVyZURlcHRoID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG1heERlcHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4U3RydWN0dXJlRGVwdGg7XG4gICAgfVxuXG4gICAgc2V0IGZpZWxkcyhsaXN0OiBBcnJheTxJUGVwUXVlcnlCdWlsZGVyRmllbGQ+KSB7XG4gICAgICAgIHRoaXMuX3NtYXJ0RmlsdGVyRmllbGRzID0gdGhpcy5jb252ZXJ0VG9TbWFydEZpbHRlckZpZWxkcyhsaXN0KTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRmllbGRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgc2V0IGZvcm0odmFsdWU6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLl9mb3JtID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJ1aWxkcyBhIGR5bmFtaWMgVUkgcXVlcnkgc3RydWN0dXJlXG4gICAgICogbWlnaHQgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSB0aGFuIHRoZSBxdWVyeSdzIGR1ZSB0byBwYXJlbnQtY2hpbGQgZWxlbWVudHMgbWVyZ2VcbiAgICAgKiBAcGFyYW0gcXVlcnkgbGVnYWN5IHF1ZXJ5ICAgICBcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyUmVmIHJlZmVyZW5jZSB0byByb290IGVsZW1lbnRcbiAgICAgKi9cbiAgICBidWlsZFF1ZXJ5U3RydWN0dXJlKFxuICAgICAgICBxdWVyeTogSVBlcFF1ZXJ5U2VjdGlvbiB8IElQZXBRdWVyeUl0ZW0sXG4gICAgICAgIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICAgICkge1xuICAgICAgICAvL3VwZGF0ZSByb290IG9wZXJhdG9yICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvcGVydHkocXVlcnksICdDb21wbGV4SWQnKSAmJlxuICAgICAgICAgICAgcXVlcnk/Lk9wZXJhdGlvbiAmJlxuICAgICAgICAgICAgcXVlcnkuT3BlcmF0aW9uICE9PSB0aGlzLl9mb3JtLmdldCgnb3BlcmF0b3InKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybS5nZXQoJ29wZXJhdG9yJykuc2V0VmFsdWUocXVlcnkuT3BlcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZsYXR0ZW4odGhpcy5fZm9ybS5nZXQoJ29wZXJhdG9yJykudmFsdWUsIHF1ZXJ5LCBjb250YWluZXJSZWYsIHRoaXMuX2Zvcm0sIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogY2hlY2tzIGlmIHRoZSBvYmplY3QgY29udGFpbnMgcHJvcGVydHlcbiAgICAqIEBwYXJhbSBvYmogb2JqZWN0XG4gICAgKiBAcGFyYW0gcHJvcCBwcm9wZXJ0eSBuYW1lXG4gICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbnRhaW5zLCBmYWxzZSBvdGhlcndpc2VcbiAgICAqL1xuICAgIHByaXZhdGUgaGFzUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiBkeW5hbWljYWxseSBidWlsZHMgVUkgZmlsdGVycyBzdHJ1Y3R1cmVcbiAgICAgKiBAcGFyYW0gcGFyZW50T3BlcmF0b3IgcGFyZW50IGxlZ2FjeSBjb21wbGV4IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIGN1cnJlbnQgY2hpbGQgbGVnYWN5IG9iamVjdCAoZWl0aGVyIGFub3RoZXIgY29tcGxleCBvciBleHByZXNzaW9uIHR5cGUpXG4gICAgICogQHBhcmFtIGNvbnRhaW5lclJlZiBwYXJlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSBwYXJlbnRGb3JtIHBhcmVudCBmb3JtXG4gICAgICovXG4gICAgcHJpdmF0ZSBmbGF0dGVuKHBhcmVudE9wZXJhdG9yOiBzdHJpbmcsIGN1cnJlbnQ6IElQZXBRdWVyeVNlY3Rpb24gfCBJUGVwUXVlcnlJdGVtLCBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHBhcmVudEZvcm06IEZvcm1Hcm91cCwgZGVwdGg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9wZXJ0eShjdXJyZW50LCAnQ29tcGxleElkJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBjdXJyZW50IGFzIElQZXBRdWVyeVNlY3Rpb247XG4gICAgICAgICAgICBpZiAocGFyZW50T3BlcmF0b3IgPT09IGN1cnJlbnQuT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuKGN1cnJlbnQuT3BlcmF0aW9uLCBzZWN0aW9uLkxlZnROb2RlLCBjb250YWluZXJSZWYsIHBhcmVudEZvcm0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW4oY3VycmVudC5PcGVyYXRpb24sIHNlY3Rpb24uUmlnaHROb2RlLCBjb250YWluZXJSZWYsIHBhcmVudEZvcm0sIGRlcHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVTZWN0aW9uKHNlY3Rpb24uT3BlcmF0aW9uLCBjb250YWluZXJSZWYsIHBhcmVudEZvcm0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW4oc2VjdGlvbi5PcGVyYXRpb24sIHNlY3Rpb24uTGVmdE5vZGUsIHJlc3VsdC5jb250YWluZXJSZWYsIHJlc3VsdC5wYXJlbnRGb3JtLCBkZXB0aCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbihzZWN0aW9uLk9wZXJhdGlvbiwgc2VjdGlvbi5SaWdodE5vZGUsIHJlc3VsdC5jb250YWluZXJSZWYsIHJlc3VsdC5wYXJlbnRGb3JtLCBkZXB0aCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzUHJvcGVydHkoY3VycmVudCwgJ0V4cHJlc3Npb25JZCcpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUl0ZW0oY3VycmVudCBhcyBJUGVwUXVlcnlJdGVtLCBjb250YWluZXJSZWYsIHBhcmVudEZvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBhIGNvbnRhaW5lciBvYmplY3Qgb2YgdHdvIG9yIG1vcmUgY2hpbGQgZmlsdGVyIGl0ZW1zXG4gICAgICogQHBhcmFtIG9wZXJhdG9yIEFORC9PUiBvcGVyYXRvclxuICAgICAqIEBwYXJhbSBjb250YWluZXJSZWYgcGFyZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcGFyZW50Rm9ybSBwYXJlbnQgZm9ybVxuICAgICAqIEBwYXJhbSBkZXB0aFxuICAgICAqIEByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQgYW5kIGN1cnJlbnQgZm9ybVxuICAgICAqL1xuICAgIGNyZWF0ZVNlY3Rpb24ob3BlcmF0b3I6IFBlcE9wZXJhdG9yVHlwZXMsIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgcGFyZW50Rm9ybTogRm9ybUdyb3VwLCBkZXB0aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQZXBRdWVyeUJ1aWxkZXJTZWN0aW9uQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcblxuICAgICAgICBjb25zdCBzZWN0aW9uR3JvdXAgPSB0aGlzLl9mYi5ncm91cCh7XG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5fZmIuY29udHJvbChvcGVyYXRvcilcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjb3VudGVyID0gMTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyZW50Rm9ybS5jb250cm9scykuZm9yRWFjaChpdGVtID0+IHsgaWYgKGl0ZW0uaW5jbHVkZXMoJ3NlY3Rpb24nKSkgeyBjb3VudGVyKys7IH0gfSk7XG4gICAgICAgIGNvbnN0IGZvcm1LZXkgPSBgc2VjdGlvbiR7Y291bnRlcn1gO1xuICAgICAgICBwYXJlbnRGb3JtLmFkZENvbnRyb2woZm9ybUtleSwgc2VjdGlvbkdyb3VwKTtcblxuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZm9ybSA9IHNlY3Rpb25Hcm91cDtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRlcHRoID0ge1xuICAgICAgICAgICAgY3VycmVudDogZGVwdGgsXG4gICAgICAgICAgICBtYXg6IHRoaXMuX21heFN0cnVjdHVyZURlcHRoXG4gICAgICAgIH07XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jcmVhdGVTZWN0aW9uLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5jcmVhdGVTZWN0aW9uKFBlcE9wZXJhdG9yVHlwZXMuQW5kLCBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VjdGlvbkNvbnRhaW5lciwgc2VjdGlvbkdyb3VwLCBkZXB0aCArIDEpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVJdGVtKG51bGwsIHNlY3Rpb24uY29udGFpbmVyUmVmLCBzZWN0aW9uLnBhcmVudEZvcm0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNyZWF0ZUl0ZW0uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSXRlbShudWxsLCBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VjdGlvbkNvbnRhaW5lciwgc2VjdGlvbkdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yZW1vdmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBhcmVudEZvcm0ucmVtb3ZlQ29udHJvbChmb3JtS2V5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU91dHB1dFF1ZXJ5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uub3BlcmF0b3JDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlT3V0cHV0UXVlcnkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRhaW5lclJlZjogY29tcG9uZW50UmVmLmluc3RhbmNlLnNlY3Rpb25Db250YWluZXIsXG4gICAgICAgICAgICBwYXJlbnRGb3JtOiBzZWN0aW9uR3JvdXBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgY29tcG9uZW50IHJlcHJlc2VudHMgZmlsdGVyIGl0ZW0gKGxlYWYgZWxlbWVudCAtIGhhcyBubyBjaGlsZHMpXG4gICAgICogQHBhcmFtIGN1cnJlbnQgZmlsdGVyIGxlZ2FjeSBlbGVtZW50XG4gICAgICogQHBhcmFtIGNvbnRhaW5lclJlZiBwYXJlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSBwYXJlbnRGb3JtIHBhcmVudCBmb3JtXG4gICAgICovXG4gICAgY3JlYXRlSXRlbShjdXJyZW50OiBJUGVwUXVlcnlJdGVtLCBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIHBhcmVudEZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fcmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoUGVwUXVlcnlCdWlsZGVySXRlbUNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XG5cbiAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJlbnRGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGl0ZW0gPT4geyBpZiAoaXRlbS5pbmNsdWRlcygnaXRlbScpKSB7IGNvdW50ZXIrKzsgfSB9KTtcbiAgICAgICAgY29uc3QgZm9ybUtleSA9IGBpdGVtJHtjb3VudGVyfWA7XG5cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZvcm1LZXkgPSBmb3JtS2V5O1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmllbGRzID0gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHM7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGQgPSB0aGlzLmdldFNlbGVjdGVkRmllbGQoY3VycmVudCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEZpZWxkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0ZWQgPSBzZWxlY3RlZEZpZWxkO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXIoY3VycmVudCwgc2VsZWN0ZWRGaWVsZC5zbWFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU91dHB1dFF1ZXJ5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucmVtb3ZlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBwYXJlbnRGb3JtLnJlbW92ZUNvbnRyb2woZm9ybUtleSk7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVPdXRwdXRRdWVyeSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgc21hcnQgZmlsdGVyIG9iamVjdFxuICAgICAqIEBwYXJhbSBjdXJyZW50IGZpbHRlciBsZWdhY3kgZWxlbWVudFxuICAgICAqIEBwYXJhbSBmaWVsZCBmaWx0ZXIncyBzZWxlY3RlZCBmaWVsZFxuICAgICAqIEByZXR1cm5zIHNtYXJ0IGZpbHRlciBvYmplY3RcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEZpbHRlcihjdXJyZW50OiBJUGVwUXVlcnlJdGVtLCBmaWVsZDogUGVwU21hcnRGaWx0ZXJCYXNlRmllbGQpOiBJUGVwU21hcnRGaWx0ZXJEYXRhIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yOiBJUGVwU21hcnRGaWx0ZXJPcGVyYXRvciA9IGdldFNtYXJ0QnVpbGRlck9wZXJhdG9yKGN1cnJlbnQuT3BlcmF0aW9uLCBmaWVsZC50eXBlKTtcbiAgICAgICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXM6IElQZXBRdWVyeUJ1aWxkZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlclZhbHVlcyhjdXJyZW50LCBvcGVyYXRvciwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNtYXJ0RmlsdGVyKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMuZmlyc3QsXG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVzLnNlY29uZCxcbiAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMub3BlcmF0aW9uVW5pdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IHNtYXJ0IGZpbHRlciBmaWVsZFxuICAgICAqIEBwYXJhbSBjdXJyZW50IGZpbHRlciBsZWdhY3kgZWxlbWVudFxuICAgICAqIEByZXR1cm5zIHNtYXJ0IGZpbHRlciBmaWVsZCwgaWYgbm90IGZvdW5kIHJldHVybnMgdGhlIGZpcnN0IGZpZWxkXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZEZpZWxkKGN1cnJlbnQ6IElQZXBRdWVyeUl0ZW0pOiBJUGVwUXVlcnlCdWlsZGVyRmllbGRDb250YWluZXIgfCBudWxsIHtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zbWFydEZpbHRlckZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLnNtYXJ0LmlkID09PSBjdXJyZW50LkFwaU5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtIDogdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDAgPyB0aGlzLl9zbWFydEZpbHRlckZpZWxkc1swXSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc21hcnRGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDAgPyB0aGlzLl9zbWFydEZpbHRlckZpZWxkc1swXSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXRzIHNtYXJ0IGZpbHRlcidzIHZhbHVlcyBkYXRhXG4gICAgICogQHBhcmFtIGN1cnJlbnQgZmlsdGVyIGxlZ2FjeSBlbGVtZW50XG4gICAgICogQHBhcmFtIG9wZXJhdG9yIHNtYXJ0IGZpbHRlciBvcGVyYXRvclxuICAgICAqIEBwYXJhbSBmaWVsZCBmaWx0ZXIncyBzZWxlY3RlZCBmaWVsZFxuICAgICAqIEByZXR1cm5zIG9iamVjdCBjb250YWlucyB0aGUgZmlsdGVyIHZhbHVlcyBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJWYWx1ZXMoY3VycmVudDogSVBlcFF1ZXJ5SXRlbSwgb3BlcmF0b3I6IElQZXBTbWFydEZpbHRlck9wZXJhdG9yLCBmaWVsZDogYW55KSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IElQZXBRdWVyeUJ1aWxkZXJWYWx1ZXMgPSB7XG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIHNlY29uZDogbnVsbCxcbiAgICAgICAgICAgIG9wZXJhdGlvblVuaXQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFBlcFNtYXJ0RmlsdGVyT3BlcmF0b3JzLkluKSB7IC8vbXVsdGkgc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvL2ZpbHRlciBrZXlzIGRvbid0IGV4aXN0IG9uIGZpZWxkIG9wdGlvbnNcbiAgICAgICAgICAgIGRhdGEuZmlyc3QgPSBjdXJyZW50Py5WYWx1ZXM/Lmxlbmd0aCA+IDAgPyBjdXJyZW50LlZhbHVlcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLm9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uLmtleSA9PT0gaXRlbSk7XG4gICAgICAgICAgICB9KSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBvcGVyYXRvciA9PT0gUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMuSW5UaGVMYXN0IHx8XG4gICAgICAgICAgICBvcGVyYXRvciA9PT0gUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMuTm90SW5UaGVMYXN0IHx8XG4gICAgICAgICAgICBvcGVyYXRvciA9PT0gUGVwU21hcnRGaWx0ZXJPcGVyYXRvcnMuRHVlSW4gfHxcbiAgICAgICAgICAgIG9wZXJhdG9yID09PSBQZXBTbWFydEZpbHRlck9wZXJhdG9ycy5Ob3REdWVJblxuICAgICAgICApIHsgLy9vcGVyYXRpb24gdW5pdFxuICAgICAgICAgICAgZGF0YS5maXJzdCA9IGN1cnJlbnQ/LlZhbHVlcz8ubGVuZ3RoID4gMCA/IGN1cnJlbnQuVmFsdWVzWzBdIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Py5WYWx1ZXM/Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGRhdGEub3BlcmF0aW9uVW5pdCA9IGdldFNtYXJ0QnVpbGRlck9wZXJhdGlvblVuaXQoY3VycmVudC5WYWx1ZXNbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YS5maXJzdCA9IGN1cnJlbnQ/LlZhbHVlcz8ubGVuZ3RoID4gMCA/IGN1cnJlbnQuVmFsdWVzWzBdIDogbnVsbDtcbiAgICAgICAgICAgIGRhdGEuc2Vjb25kID0gY3VycmVudD8uVmFsdWVzPy5sZW5ndGggPT09IDIgPyBjdXJyZW50LlZhbHVlc1sxXSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBsZWdhY3kgZmllbGRzIHRvIHNtYXJ0IGZpbHRlciBmaWVsZHNcbiAgICAgKiBAcGFyYW0gZmllbGRzIGxlZ2FjeSBmaWVsZHMgYXJyYXlcbiAgICAgKiBAcmV0dXJucyBzbWFydCBmaWx0ZXIgZmllbGRzIGFycmF5XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9TbWFydEZpbHRlckZpZWxkcyhmaWVsZHM6IEFycmF5PElQZXBRdWVyeUJ1aWxkZXJGaWVsZD4pOiBBcnJheTxJUGVwUXVlcnlCdWlsZGVyRmllbGRDb250YWluZXI+IHtcbiAgICAgICAgaWYgKGZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdHlwZU1hcHBlciA9IG5ldyBQZXBRdWVyeUJ1aWxkZXJUeXBlTWFwKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNtYXJ0OiBjcmVhdGVTbWFydEZpbHRlckZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBmaWVsZC5GaWVsZElELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkLlRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLk9wdGlvbmFsVmFsdWVzPy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9uLktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24uVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0eXBlTWFwcGVyLmdldFNtYXJ0QnVpbGRlclR5cGUoZmllbGQuRmllbGRUeXBlKSBhcyBQZXBTbWFydEZpbHRlclR5cGUpLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlOiBmaWVsZC5GaWVsZFR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGEgbGVnYWN5IG91dHB1dCBxdWVyeSBcbiAgICAgKi9cbiAgICBjcmVhdGVPdXRwdXRRdWVyeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fb3V0cHV0UXVlcnlTZXJ2aWNlLmdlbmVyYXRlUXVlcnkodGhpcy5fZm9ybS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRRdWVyeSQubmV4dChxdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iXX0=
@@ -22,6 +22,7 @@ export class PepRichHtmlTextareaComponent {
22
22
  this.form = null;
23
23
  this.isActive = false;
24
24
  this.showTitle = true;
25
+ this.renderTitle = true;
25
26
  this._layoutType = 'form';
26
27
  this.inlineMode = false;
27
28
  this.valueChange = new EventEmitter();
@@ -86,6 +87,9 @@ export class PepRichHtmlTextareaComponent {
86
87
  this.setFieldHeight();
87
88
  this.setDefaultForm();
88
89
  this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_CLASS_NAME);
90
+ if (!this.renderTitle) {
91
+ this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_NO_SPACING_CLASS_NAME);
92
+ }
89
93
  }
90
94
  this.quillContent = this.value;
91
95
  }
@@ -180,9 +184,9 @@ export class PepRichHtmlTextareaComponent {
180
184
  PepRichHtmlTextareaComponent.decorators = [
181
185
  { type: Component, args: [{
182
186
  selector: 'pep-rich-html-textarea',
183
- template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\">\n <div class=\"pep-textarea-container pep-report-textarea\" [ngClass]=\"{ 'stand-alone': standAlone,\n 'right-alignment': xAlignment == 'right', 'one-row': !isFormView && rowSpan === 1,\n 'pep-textarea-card-container': layoutType === 'card'}\">\n <pep-field-title *ngIf=\"isFormView\" [label]=\"label\" [mandatory]=\"mandatory\" [disabled]=\"disabled\"\n [maxFieldCharacters]=\"inlineMode && !disabled && !readonly ? maxFieldCharacters : 0\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"showTitle\" [inputLength]=\"quillContent?.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\"\n [ngClass]=\"{ 'pep-table-textarea': layoutType === 'table', 'active': active, 'ignore-disabled': disabled }\">\n <textarea [hidden]=\"true\" matInput [formControlName]=\"key\"></textarea>\n\n <ng-container *ngIf=\"inlineMode; then inlineBlock; else notInlineBlock\"></ng-container>\n\n <ng-template #inlineBlock>\n <ng-container *ngTemplateOutlet=\"quilTemplate; context: {inDialog: false}\"></ng-container>\n </ng-template>\n <ng-template #notInlineBlock>\n\n <!-- We can use the quill-view-html\n <quill-view-html class=\"body-sm rich-text-cont \"\n [ngStyle]=\"{ 'text-align': xAlignment == 'right' ? 'right' : 'left' }\" [content]=\"value | pepSafeHtml\"\n theme=\"snow\" [style.height]=\"fieldHeight\"></quill-view-html> \n -->\n\n <div class=\"body-sm rich-text-cont \"\n [ngStyle]=\"{ 'text-align': xAlignment == 'right' ? 'right' : 'left' }\"\n [innerHtml]=\"value | pepSafeHtml\" [style.height]=\"fieldHeight\">\n </div>\n </ng-template>\n <pep-textbox-icon matSuffix [value]=\"value\" [label]=\"label\" [type]=\"controlType\"\n [disabled]=\"disabled || readonly\"\n [ngClass]=\"{ 'card-one-row-icon': layoutType === 'card' && rowSpan === 1 }\"\n (iconClick)=\"openDialog()\">\n </pep-textbox-icon>\n <mat-error>\n <span class=\"body-xs\"\n [title]=\"mandatory && value.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"\n [innerText]=\"mandatory && value.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"></span>\n </mat-error>\n\n </mat-form-field>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-textarea-card-container card-flex-container\"\n [ngClass]=\"{'one-row': rowSpan === 1, 'pep-button weak': isActive && !disabled}\"\n [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\" [class]=\"'text-align-' + xAlignment\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\" [style.height]=\"fieldHeight\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title no-shrink\" title=\"{{ label }}\">{{ label\n }}:&nbsp;</span>\n <span [id]=\"key\" class=\"body-sm value wrap\" [innerHtml]=\"value | pepSafeHtml\"></span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button self-start\"\n [ngClass]=\"{'self-end' : value && value !== ''}\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"isActive && !disabled; then selectedBlock; else notSelectedBlock\"></ng-container>\n <ng-template #selectedBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false }\"></ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"value?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <div class=\"pep-textarea-card-container card-flex-container one-row\">\n <span [id]=\"key\" class=\"wrap\" [innerHtml]=\"value | pepSafeHtml\"></span>\n </div>\n </ng-template>\n <ng-template #emptyBlock>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #richTextEditorDialogTemplate>\n <div class=\"rich-text-editor-container\">\n <button mat-button [mat-dialog-close]=\"null\" class=\"pep-button icon-button md weak pull-right flip\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n <ng-container *ngTemplateOutlet=\"quilTemplate; context: {inDialog: true}\"></ng-container>\n <div mat-dialog-actions class=\" pep-border-top\">\n <div class=\"pep-spacing-element-negative\">\n <button mat-button [mat-dialog-close]=\"null\" class=\"pep-spacing-element pep-button md weak\">\n {{'ACTIONS.CANCEL' | translate}}\n </button>\n <button mat-button [mat-dialog-close]=\"quillContentDialog || ''\" [disabled]=\"disabled\"\n class=\"pep-spacing-element pep-button md strong \">\n {{'ACTIONS.SAVE' | translate}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #quilTemplate let-inDialog=\"inDialog\">\n <quill-editor id=\"{{inDialog ? 'quill-editor-dialog' : 'quill-editor-inline'}}\"\n [class]=\"inDialog ? 'dialog-quill' : 'inline-quill'\" [ngClass]=\"{ 'rich-text-cont': !inDialog }\"\n placeholder=\"{{'RICH_TEXTAREA.HINT' | translate}}\" [ngModel]=\"inDialog ? quillContentDialog : quillContent\"\n [sanitize]=\"true\" [readOnly]=\"disabled\" [maxLength]=\"maxFieldCharacters\" [required]=\"mandatory\"\n (onEditorCreated)=\"onEditorCreated($event, inDialog)\" (onContentChanged)=\"onContentChanged($event, inDialog)\"\n (onBlur)=\"onBlur($event, inDialog)\" (onFocus)=\"onFocus($event, inDialog)\" theme=\"\">\n <div *ngIf=\"!disabled\" quill-editor-toolbar>\n <div class=\"pep-spacing-element-negative\">\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.font\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-font select-arrow\">\n <option selected></option>\n <option value=\"serif\"></option>\n <option value=\"monospace\"></option>\n </select>\n <select *ngIf=\"toolbarOptions?.size\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-size select-arrow\">\n <option value=\"small\"></option>\n <option selected></option>\n <option value=\"large\"></option>\n <option value=\"huge\"></option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.header\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-header select-arrow\">\n <option value=\"1\"></option>\n <option value=\"2\"></option>\n <option value=\"3\"></option>\n <!-- \n <option value=\"4\"></option>\n <option value=\"5\"></option>\n <option value=\"6\"></option> \n -->\n <option value=\"false\" selected></option>\n </select>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.bold\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-bold\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.italic\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-italic\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.underline\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-underline\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.strike\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-strike\"></button>\n </span>\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.link\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-link\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.image\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-image\"></button>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.ordered\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-list\" value=\"ordered\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.bullet\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-list\" value=\"bullet\"></button>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.color\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-color\"></select>\n <select *ngIf=\"toolbarOptions?.background\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-background\"></select>\n </span>\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.align\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-align\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n </div>\n </div>\n </quill-editor>\n</ng-template>",
187
+ template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\">\n <div class=\"pep-textarea-container pep-report-textarea\" [ngClass]=\"{ 'stand-alone': standAlone,\n 'right-alignment': xAlignment == 'right', 'one-row': !isFormView && rowSpan === 1,\n 'pep-textarea-card-container': layoutType === 'card'}\">\n <pep-field-title *ngIf=\"renderTitle && isFormView\" [label]=\"label\" [mandatory]=\"mandatory\"\n [disabled]=\"disabled\"\n [maxFieldCharacters]=\"inlineMode && !disabled && !readonly ? maxFieldCharacters : 0\"\n [xAlignment]=\"xAlignment\" [showTitle]=\"showTitle\" [inputLength]=\"quillContent?.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\" dir=\"{{ xAlignment == 'right' ? 'rtl' : 'ltr' }}\"\n [ngClass]=\"{ 'pep-table-textarea': layoutType === 'table', 'active': active, 'ignore-disabled': disabled }\">\n <textarea [hidden]=\"true\" matInput [formControlName]=\"key\"></textarea>\n\n <ng-container *ngIf=\"inlineMode; then inlineBlock; else notInlineBlock\"></ng-container>\n\n <ng-template #inlineBlock>\n <ng-container *ngTemplateOutlet=\"quilTemplate; context: {inDialog: false}\"></ng-container>\n </ng-template>\n <ng-template #notInlineBlock>\n\n <!-- We can use the quill-view-html\n <quill-view-html class=\"body-sm rich-text-cont \"\n [ngStyle]=\"{ 'text-align': xAlignment == 'right' ? 'right' : 'left' }\" [content]=\"value | pepSafeHtml\"\n theme=\"snow\" [style.height]=\"fieldHeight\"></quill-view-html> \n -->\n\n <div class=\"body-sm rich-text-cont \"\n [ngStyle]=\"{ 'text-align': xAlignment == 'right' ? 'right' : 'left' }\"\n [innerHtml]=\"value | pepSafeHtml\" [style.height]=\"fieldHeight\">\n </div>\n </ng-template>\n <pep-textbox-icon matSuffix [value]=\"value\" [label]=\"label\" [type]=\"controlType\"\n [disabled]=\"disabled || readonly\"\n [ngClass]=\"{ 'card-one-row-icon': layoutType === 'card' && rowSpan === 1 }\"\n (iconClick)=\"openDialog()\">\n </pep-textbox-icon>\n <mat-error>\n <span class=\"body-xs\"\n [title]=\"mandatory && value.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"\n [innerText]=\"mandatory && value.length == 0 ? ('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label }) : ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\"></span>\n </mat-error>\n\n </mat-form-field>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <div class=\"pep-textarea-card-container card-flex-container\"\n [ngClass]=\"{'one-row': rowSpan === 1, 'pep-button weak': isActive && !disabled}\"\n [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\" [class]=\"'text-align-' + xAlignment\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\" [style.height]=\"fieldHeight\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title no-shrink\" title=\"{{ label }}\">{{ label\n }}:&nbsp;</span>\n <span [id]=\"key\" class=\"body-sm value wrap\" [innerHtml]=\"value | pepSafeHtml\"></span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button self-start\"\n [ngClass]=\"{'self-end' : value && value !== ''}\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'table'\">\n <ng-container *ngIf=\"isActive && !disabled; then selectedBlock; else notSelectedBlock\"></ng-container>\n <ng-template #selectedBlock>\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false }\"></ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"value?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <div class=\"pep-textarea-card-container card-flex-container one-row\">\n <span [id]=\"key\" class=\"wrap\" [innerHtml]=\"value | pepSafeHtml\"></span>\n </div>\n </ng-template>\n <ng-template #emptyBlock>\n <span>&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #richTextEditorDialogTemplate>\n <div class=\"rich-text-editor-container\">\n <button mat-button [mat-dialog-close]=\"null\" class=\"pep-button icon-button md weak pull-right flip\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n <ng-container *ngTemplateOutlet=\"quilTemplate; context: {inDialog: true}\"></ng-container>\n <div mat-dialog-actions class=\" pep-border-top\">\n <div class=\"pep-spacing-element-negative\">\n <button mat-button [mat-dialog-close]=\"null\" class=\"pep-spacing-element pep-button md weak\">\n {{'ACTIONS.CANCEL' | translate}}\n </button>\n <button mat-button [mat-dialog-close]=\"quillContentDialog || ''\" [disabled]=\"disabled\"\n class=\"pep-spacing-element pep-button md strong \">\n {{'ACTIONS.SAVE' | translate}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #quilTemplate let-inDialog=\"inDialog\">\n <quill-editor id=\"{{inDialog ? 'quill-editor-dialog' : 'quill-editor-inline'}}\"\n [class]=\"inDialog ? 'dialog-quill' : 'inline-quill'\" [ngClass]=\"{ 'rich-text-cont': !inDialog }\"\n placeholder=\"{{'RICH_TEXTAREA.HINT' | translate}}\" [ngModel]=\"inDialog ? quillContentDialog : quillContent\"\n [sanitize]=\"true\" [readOnly]=\"disabled\" [maxLength]=\"maxFieldCharacters\" [required]=\"mandatory\"\n (onEditorCreated)=\"onEditorCreated($event, inDialog)\" (onContentChanged)=\"onContentChanged($event, inDialog)\"\n (onBlur)=\"onBlur($event, inDialog)\" (onFocus)=\"onFocus($event, inDialog)\" theme=\"\">\n <div *ngIf=\"!disabled\" quill-editor-toolbar>\n <div class=\"pep-spacing-element-negative\">\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.font\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-font select-arrow\">\n <option selected></option>\n <option value=\"serif\"></option>\n <option value=\"monospace\"></option>\n </select>\n <select *ngIf=\"toolbarOptions?.size\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-size select-arrow\">\n <option value=\"small\"></option>\n <option selected></option>\n <option value=\"large\"></option>\n <option value=\"huge\"></option>\n </select>\n </span>\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.header\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-header select-arrow\">\n <option value=\"1\"></option>\n <option value=\"2\"></option>\n <option value=\"3\"></option>\n <!-- \n <option value=\"4\"></option>\n <option value=\"5\"></option>\n <option value=\"6\"></option> \n -->\n <option value=\"false\" selected></option>\n </select>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.bold\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-bold\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.italic\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-italic\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.underline\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-underline\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.strike\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-strike\"></button>\n </span>\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.link\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-link\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.image\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-image\"></button>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <button mat-button *ngIf=\"toolbarOptions?.ordered\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-list\" value=\"ordered\"></button>\n <button mat-button *ngIf=\"toolbarOptions?.bullet\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-list\" value=\"bullet\"></button>\n </span>\n <!-- <hr class=\"vertical-separator\" /> -->\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.color\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-color\"></select>\n <select *ngIf=\"toolbarOptions?.background\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-background\"></select>\n </span>\n <span class=\"ql-formats\">\n <select *ngIf=\"toolbarOptions?.align\"\n class=\"pep-spacing-element pep-button icon-button md weak ql-align\">\n <option selected></option>\n <option value=\"center\"></option>\n <option value=\"right\"></option>\n <option value=\"justify\"></option>\n </select>\n </span>\n </div>\n </div>\n </quill-editor>\n</ng-template>",
184
188
  changeDetection: ChangeDetectionStrategy.OnPush,
185
- styles: [":host{height:inherit;display:block}.pep-textarea-container ::ng-deep.mat-form-field-infix,.pepperi-textarea-container ::ng-deep.mat-form-field-infix{margin-left:calc(.75rem * -1);margin-left:calc(var(--pep-spacing-md, .75rem) * -1)}.pep-textarea-container.right-alignment ::ng-deep.mat-form-field-infix,.pepperi-textarea-container.right-alignment ::ng-deep.mat-form-field-infix{margin-left:unset;margin-right:calc(.75rem * -1);margin-right:calc(var(--pep-spacing-md, .75rem) * -1)}.vertical-separator{display:none}"]
189
+ styles: [".pep-textarea-container,.pepperi-textarea-container{height:inherit;display:grid;align-items:center}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex{display:flex}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix{line-height:unset;width:100%;height:100%;overflow:hidden;display:grid!important}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{margin:0;padding:.5rem 1.5rem .5rem 0;vertical-align:unset;resize:none;width:calc(100% + 3rem);max-width:unset;overflow-y:scroll;box-sizing:border-box}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-prefix,.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-suffix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-prefix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-suffix{align-self:flex-end!important;margin-bottom:.5rem}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element{padding-top:.35rem}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{align-self:center!important;margin-bottom:unset}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pep-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pepperi-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pep-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pepperi-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pep-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pepperi-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pep-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pepperi-button{width:1rem!important;height:1rem!important}.pep-textarea-container.one-row ::ng-deep .mat-form-field.pep-table-textarea .mat-input-element,.pep-textarea-container.one-row ::ng-deep .mat-form-field.pepperi-table-textarea .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field.pep-table-textarea .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field.pepperi-table-textarea .mat-input-element{padding-top:.135rem!important}.pep-textarea-container .rich-text-cont,.pepperi-textarea-container .rich-text-cont{overflow-x:hidden;display:inline-block;vertical-align:unset;margin:0;padding:.5rem 1.5rem .5rem 0;resize:none;width:calc(100% + 3rem);max-width:unset;overflow-y:scroll;box-sizing:border-box}.pep-textarea-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{padding:.5rem 0 .5rem 1.5rem}.pep-textarea-container.right-alignment .rich-text-cont,.pepperi-textarea-container.right-alignment .rich-text-cont{padding:.5rem 0 .5rem 1.5rem}.pep-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex,.pepperi-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex{padding-left:.5rem;padding-right:.5rem}.pep-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-input-element,.pepperi-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-input-element{padding:.25rem 1.5rem .5rem 0}.pep-textarea-card-container.card-flex-container,.pepperi-textarea-card-container.card-flex-container{height:inherit;display:flex;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;white-space:unset;padding:.25rem;max-width:100%}.pep-textarea-card-container.card-flex-container.one-row .title,.pepperi-textarea-card-container.card-flex-container.one-row .title{padding-top:.25rem}.pep-textarea-card-container.card-flex-container span.value,.pepperi-textarea-card-container.card-flex-container span.value{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;white-space:unset}.pep-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix,.pepperi-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix{line-height:0!important}.pep-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element,.pepperi-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element{padding-top:0;padding-bottom:0}.pep-textarea-card-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-card-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{padding:.25rem 0 .5rem 1.5rem}.pep-report-textarea .mat-form-field-suffix,.pepperi-report-textarea .mat-form-field-suffix{right:0!important}.pep-report-textarea.readonly .mat-form-field-wrapper .mat-form-field-flex,.pepperi-report-textarea.readonly .mat-form-field-wrapper .mat-form-field-flex{padding:0}:host{height:inherit;display:block}.pep-textarea-container ::ng-deep.mat-form-field-infix,.pepperi-textarea-container ::ng-deep.mat-form-field-infix{margin-left:calc(.75rem * -1);margin-left:calc(var(--pep-spacing-md, .75rem) * -1)}.pep-textarea-container.right-alignment ::ng-deep.mat-form-field-infix,.pepperi-textarea-container.right-alignment ::ng-deep.mat-form-field-infix{margin-left:unset;margin-right:calc(.75rem * -1);margin-right:calc(var(--pep-spacing-md, .75rem) * -1)}.vertical-separator{display:none}", ".pep-textarea-container,.pepperi-textarea-container{height:inherit;display:grid;align-items:center}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex{display:flex}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix{line-height:unset;width:100%;height:100%;overflow:hidden;display:grid!important}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{margin:0;padding:.5rem 1.5rem .5rem 0;vertical-align:unset;resize:none;width:calc(100% + 3rem);max-width:unset;overflow-y:scroll;box-sizing:border-box}.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-prefix,.pep-textarea-container ::ng-deep .mat-form-field .mat-form-field-suffix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-prefix,.pepperi-textarea-container ::ng-deep .mat-form-field .mat-form-field-suffix{align-self:flex-end!important;margin-bottom:.5rem}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element{padding-top:.35rem}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix{align-self:center!important;margin-bottom:unset}.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pep-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pepperi-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pep-button,.pep-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pepperi-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pep-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-prefix .card-one-row-icon .pepperi-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pep-button,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-suffix .card-one-row-icon .pepperi-button{width:1rem!important;height:1rem!important}.pep-textarea-container.one-row ::ng-deep .mat-form-field.pep-table-textarea .mat-input-element,.pep-textarea-container.one-row ::ng-deep .mat-form-field.pepperi-table-textarea .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field.pep-table-textarea .mat-input-element,.pepperi-textarea-container.one-row ::ng-deep .mat-form-field.pepperi-table-textarea .mat-input-element{padding-top:.135rem!important}.pep-textarea-container .rich-text-cont,.pepperi-textarea-container .rich-text-cont{overflow-x:hidden;display:inline-block;vertical-align:unset;margin:0;padding:.5rem 1.5rem .5rem 0;resize:none;width:calc(100% + 3rem);max-width:unset;overflow-y:scroll;box-sizing:border-box}.pep-textarea-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{padding:.5rem 0 .5rem 1.5rem}.pep-textarea-container.right-alignment .rich-text-cont,.pepperi-textarea-container.right-alignment .rich-text-cont{padding:.5rem 0 .5rem 1.5rem}.pep-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex,.pepperi-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex{padding-left:.5rem;padding-right:.5rem}.pep-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-input-element,.pepperi-textarea-card-container ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-input-element{padding:.25rem 1.5rem .5rem 0}.pep-textarea-card-container.card-flex-container,.pepperi-textarea-card-container.card-flex-container{height:inherit;display:flex;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;white-space:unset;padding:.25rem;max-width:100%}.pep-textarea-card-container.card-flex-container.one-row .title,.pepperi-textarea-card-container.card-flex-container.one-row .title{padding-top:.25rem}.pep-textarea-card-container.card-flex-container span.value,.pepperi-textarea-card-container.card-flex-container span.value{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;white-space:unset}.pep-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix,.pepperi-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix{line-height:0!important}.pep-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element,.pepperi-textarea-card-container.one-row ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-infix .mat-input-element{padding-top:0;padding-bottom:0}.pep-textarea-card-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element,.pepperi-textarea-card-container.right-alignment ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-input-element{padding:.25rem 0 .5rem 1.5rem}.pep-report-textarea .mat-form-field-suffix,.pepperi-report-textarea .mat-form-field-suffix{right:0!important}.pep-report-textarea.readonly .mat-form-field-wrapper .mat-form-field-flex,.pepperi-report-textarea.readonly .mat-form-field-wrapper .mat-form-field-flex{padding:0}.pep-report-textarea ::ng-deep.mat-form-field-flex,.pepperi-report-textarea ::ng-deep.mat-form-field-flex{background:transparent!important}.mat-form-field.mat-form-field-disabled .mat-form-field-flex{color:#1a1a1a;color:hsl(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%))}.right-alignment quill-editor.inline-quill::ng-deep .ql-container .ql-editor{padding-right:unset;padding-left:calc(.5rem + 1rem);padding-left:calc(var(--pep-spacing-sm, .5rem) + 1rem)}quill-editor.inline-quill::ng-deep .ql-container .ql-editor{width:calc(100% + 1rem);padding-right:calc(.5rem + 1rem);padding-right:calc(var(--pep-spacing-sm, .5rem) + 1rem)}quill-editor ::ng-deep .ql-toolbar{display:flex;padding:0!important;border:unset}quill-editor ::ng-deep .ql-toolbar .ql-transparent{opacity:.9}quill-editor ::ng-deep .ql-toolbar .ql-formats{margin-right:0!important;margin-bottom:.5rem}quill-editor ::ng-deep .ql-toolbar .ql-formats button{height:2.5rem}quill-editor ::ng-deep .ql-toolbar .ql-formats button svg{width:1.25rem!important;float:unset!important}quill-editor ::ng-deep .ql-toolbar .ql-formats button.ql-active{box-shadow:0 .125rem .25rem 0 rgba(26,26,26,.08);box-shadow:var(--pep-shadow-xs-offset,0 .125rem .25rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.08);position:relative}quill-editor ::ng-deep .ql-toolbar .ql-formats button.ql-active:not(.keep-background-on-focus){background:#fff;background:hsl(var(--pep-color-system-primary-invert-h,255),var(--pep-color-system-primary-invert-s,100%),var(--pep-color-system-primary-invert-l,100%))}quill-editor ::ng-deep .ql-toolbar .ql-formats button.ql-active:after{z-index:0;content:\"\";transition:all .25s;display:block;position:absolute;top:0;bottom:0;left:0;right:0;border-radius:inherit;border:1px solid #1a1a1a;border:1px solid hsl(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%))}quill-editor ::ng-deep .ql-toolbar .ql-formats button:focus{box-shadow:0 .125rem .25rem 0 rgba(26,26,26,.08);box-shadow:var(--pep-shadow-xs-offset,0 .125rem .25rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.08);position:relative}quill-editor ::ng-deep .ql-toolbar .ql-formats button:focus:not(.keep-background-on-focus){background:#fff;background:hsl(var(--pep-color-system-primary-invert-h,255),var(--pep-color-system-primary-invert-s,100%),var(--pep-color-system-primary-invert-l,100%))}quill-editor ::ng-deep .ql-toolbar .ql-formats button:focus:after{z-index:0;content:\"\";transition:all .25s;display:block;position:absolute;top:0;bottom:0;left:0;right:0;border-radius:inherit;border:1px solid #1a1a1a;border:1px solid hsl(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%))}quill-editor ::ng-deep .ql-toolbar .ql-formats button:active{box-shadow:0 .125rem .25rem 0 rgba(26,26,26,.08);box-shadow:var(--pep-shadow-xs-offset,0 .125rem .25rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.08);position:relative}quill-editor ::ng-deep .ql-toolbar .ql-formats button:active:not(.keep-background-on-focus){background:#fff;background:hsl(var(--pep-color-system-primary-invert-h,255),var(--pep-color-system-primary-invert-s,100%),var(--pep-color-system-primary-invert-l,100%))}quill-editor ::ng-deep .ql-toolbar .ql-formats button:active:after{z-index:0;content:\"\";transition:all .25s;display:block;position:absolute;top:0;bottom:0;left:0;right:0;border-radius:inherit;border:1px solid #1a1a1a;border:1px solid hsl(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-stroke{stroke:rgba(26,26,26,.8);stroke:hsla(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%),.8)}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-fill{fill:rgba(26,26,26,.8);fill:hsla(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%),.8)}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item{outline:unset!important;width:100%;height:auto;padding:.25rem .5rem;padding:var(--pep-spacing-xs,.25rem) var(--pep-spacing-sm,.5rem);display:grid}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:hover{background:rgba(26,26,26,.16);background:hsla(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%),.16)}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:active{box-shadow:0 .125rem .25rem 0 rgba(26,26,26,.08);box-shadow:var(--pep-shadow-xs-offset,0 .125rem .25rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.08);background:rgba(26,26,26,.24)!important;background:hsla(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%),.24)!important}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:active:not(.keep-background-on-focus){background:#fff;background:hsl(var(--pep-color-system-primary-invert-h,255),var(--pep-color-system-primary-invert-s,100%),var(--pep-color-system-primary-invert-l,100%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:disabled{box-shadow:unset;border:unset;color:rgba(26,26,26,.35)!important;color:hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.35)!important;background:rgba(26,26,26,.04)!important;background:hsla(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%),.04)!important}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:disabled:after{border:unset}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:disabled .svg-icon{fill:rgba(26,26,26,.35);fill:hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.35)}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker:not(.ql-color-picker) .ql-picker-options .ql-picker-item:disabled .svg-icon.stroke{fill:unset;stroke:rgba(26,26,26,.35);stroke:hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.35)}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-color-picker,quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-icon-picker{width:unset}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker .ql-picker-label{outline:none;display:grid;grid-auto-flow:column;align-items:center;line-height:1rem;border:unset}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker .ql-picker-label svg{width:1.5rem}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker .ql-picker-label:after{content:url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgaWQ9InN2ZzQiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDI0IDI0IgogICBoZWlnaHQ9IjE2IgogICB3aWR0aD0iMTYiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzOCIgLz4KICA8cGF0aAogICAgIGlkPSJwYXRoMiIKICAgICBkPSJNNS44MDAzMjE0OCw5LjI4Njc0MzU0IEwxMS4yNTQyODI0LDEzLjIwMjc1ODMgQzExLjY2NjEzMDksMTMuNTg1MDgzIDEyLjMzMzg2OTEsMTMuNTg1MDgzIDEyLjc0NTcxNzYsMTMuMjAyNzU4MyBMMTguMTk5Njc4NSw5LjI4Njc0MzU0IEMxOC42MTE1MjcsOC45MDQ0MTg4MiAxOS4yNzkyNjUyLDguOTA0NDE4ODIgMTkuNjkxMTEzNyw5LjI4Njc0MzU0IEMyMC4xMDI5NjIxLDkuNjY5MDY4MjYgMjAuMTAyOTYyMSwxMC4yODg5MzkxIDE5LjY5MTExMzcsMTAuNjcxMjYzOCBMMTMuNDkxNDM1MSwxNi40MjY1MTI5IEMxMi42Njc3MzgzLDE3LjE5MTE2MjQgMTEuMzMyMjYxNywxNy4xOTExNjI0IDEwLjUwODU2NDksMTYuNDI2NTEyOSBMNC4zMDg4ODYzMywxMC42NzEyNjM4IEMzLjg5NzAzNzg5LDEwLjI4ODkzOTEgMy44OTcwMzc4OSw5LjY2OTA2ODI2IDQuMzA4ODg2MzMsOS4yODY3NDM1NCBDNC43MjA3MzQ3OCw4LjkwNDQxODgyIDUuMzg4NDczMDMsOC45MDQ0MTg4MiA1LjgwMDMyMTQ4LDkuMjg2NzQzNTQgWiIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZmlsbC1vcGFjaXR5PSIuNSIgLz4KPC9zdmc+Cg==\");cursor:pointer;display:grid;height:inherit;justify-content:center;align-content:center}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.select-arrow .ql-picker-label:before{line-height:unset}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.select-arrow .ql-picker-label svg{display:none}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker .ql-picker-options{border-radius:.25rem;border-radius:var(--pep-border-radius-md,.25rem);box-sizing:content-box;padding:unset;box-shadow:0 .25rem .5rem 0 rgba(26,26,26,.32);box-shadow:var(--pep-shadow-sm-offset,0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.32);border:1px solid #1a1a1a;border:1px solid hsl(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-color-picker .ql-picker-options{padding:.25rem .5rem;padding:var(--pep-spacing-xs,.25rem) var(--pep-spacing-sm,.5rem);width:140px}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-color-picker .ql-picker-options:focus{outline:unset!important}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-color-picker .ql-picker-options .ql-picker-item:focus{outline:unset!important}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded{box-shadow:0 .125rem .25rem 0 rgba(26,26,26,.08);box-shadow:var(--pep-shadow-xs-offset,0 .125rem .25rem 0) hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.08);position:relative}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded:not(.keep-background-on-focus){background:#fff;background:hsl(var(--pep-color-system-primary-invert-h,255),var(--pep-color-system-primary-invert-s,100%),var(--pep-color-system-primary-invert-l,100%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded:after{z-index:0;content:\"\";transition:all .25s;display:block;position:absolute;top:0;bottom:0;left:0;right:0;border-radius:inherit;border:1px solid #1a1a1a;border:1px solid hsl(var(--pep-color-weak-h,0),var(--pep-color-weak-s,0%),var(--pep-color-weak-l,10%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#1766a6;stroke:hsl(var(--pep-color-text-link-h,207),var(--pep-color-text-link-s,76%),var(--pep-color-text-link-l,37%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#1766a6;fill:hsl(var(--pep-color-text-link-h,207),var(--pep-color-text-link-s,76%),var(--pep-color-text-link-l,37%))}quill-editor ::ng-deep .ql-toolbar .ql-formats .ql-picker.ql-expanded .ql-picker-label{border:unset}quill-editor ::ng-deep .ql-toolbar .vertical-separator{border-color:rgba(26,26,26,.24);border-color:hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.24)}@media (max-width:568px){quill-editor ::ng-deep .ql-toolbar .ql-list{display:none}}@media (max-width:599px){quill-editor ::ng-deep .ql-toolbar .ql-italic,quill-editor ::ng-deep .ql-toolbar .ql-underline{display:none}}@media (max-width:460px){quill-editor ::ng-deep .ql-toolbar .ql-header,quill-editor ::ng-deep .ql-toolbar .ql-image,quill-editor ::ng-deep .ql-toolbar .ql-italic,quill-editor ::ng-deep .ql-toolbar .ql-list,quill-editor ::ng-deep .ql-toolbar .ql-underline{display:none}}quill-editor ::ng-deep .ql-container{height:16rem;border:unset;border-top:1px solid rgba(26,26,26,.24)!important;border-top:1px solid hsla(var(--pep-color-system-primary-h,0),var(--pep-color-system-primary-s,0%),var(--pep-color-system-primary-l,10%),.24)!important}quill-editor ::ng-deep .ql-container .ql-editor{padding:.5rem 0;padding:var(--pep-spacing-sm,.5rem) 0}quill-editor ::ng-deep .ql-container .ql-editor.ql-blank:before{right:0;left:0}quill-editor ::ng-deep .ql-container .ql-tooltip.ql-flip{left:0!important}"]
186
190
  },] }
187
191
  ];
188
192
  PepRichHtmlTextareaComponent.ctorParameters = () => [
@@ -206,10 +210,11 @@ PepRichHtmlTextareaComponent.propDecorators = {
206
210
  form: [{ type: Input }],
207
211
  isActive: [{ type: Input }],
208
212
  showTitle: [{ type: Input }],
213
+ renderTitle: [{ type: Input }],
209
214
  layoutType: [{ type: Input }],
210
215
  inlineMode: [{ type: Input }],
211
216
  toolbarOptions: [{ type: Input }],
212
217
  valueChange: [{ type: Output }],
213
218
  richTextEditorDialogTemplate: [{ type: ViewChild, args: ['richTextEditorDialogTemplate', { read: TemplateRef },] }]
214
219
  };
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1odG1sLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvcmljaC1odG1sLXRleHRhcmVhL3JpY2gtaHRtbC10ZXh0YXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFFdkIsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUdaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBQzVCLHdCQUF3QixHQUMzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsYUFBYSxHQUNoQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQXlCbkUsTUFBTSxPQUFPLDRCQUE0QjtJQWtGckMsWUFDWSxTQUF1QixFQUN2QixhQUErQixFQUMvQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUI7UUFKbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFyRnRCLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGVBQVUsR0FBMkIsNEJBQTRCLENBQUM7UUFFbkUs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QVVMLE1BQU07MkNBR04sU0FBUyxTQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIE9uRGVzdHJveSxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBQZXBSaWNoSHRtbFRleHRhcmVhRmllbGQsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7XG4gICAgUGVwRGlhbG9nU2VydmljZSxcbiAgICBQZXBEaWFsb2dEYXRhLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2cnO1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBSaWNoSHRtbFRleHRhcmVhVG9vbGJhck9wdGlvbnMge1xuICAgIGZvbnQ/OiBhbnk7XG4gICAgc2l6ZT86IGFueTtcbiAgICBoZWFkZXI/OiBhbnk7XG4gICAgYm9sZD86IGFueTtcbiAgICBpdGFsaWM/OiBhbnk7XG4gICAgdW5kZXJsaW5lPzogYW55O1xuICAgIHN0cmlrZT86IGFueTtcbiAgICBsaW5rPzogYW55O1xuICAgIGltYWdlPzogYW55O1xuICAgIG9yZGVyZWQ/OiBhbnk7XG4gICAgYnVsbGV0PzogYW55O1xuICAgIGNvbG9yPzogYW55O1xuICAgIGJhY2tncm91bmQ/OiBhbnk7XG4gICAgYWxpZ24/OiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLXJpY2gtaHRtbC10ZXh0YXJlYScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JpY2gtaHRtbC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmljaC1odG1sLXRleHRhcmVhLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFJpY2hIdG1sVGV4dGFyZWFDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGtleSA9ICcnO1xuICAgIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBtYW5kYXRvcnkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgbWF4RmllbGRDaGFyYWN0ZXJzOiBudW1iZXI7XG4gICAgQElucHV0KCkgeEFsaWdubWVudDogUGVwSG9yaXpvbnRhbEFsaWdubWVudCA9IERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQ7XG5cbiAgICBwcml2YXRlIF9yb3dTcGFuID0gMTtcbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dTcGFuKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NwYW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGaWVsZEhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgcm93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93U3BhbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIGNvbnRyb2xUeXBlID0gJ3JpY2hodG1sdGV4dGFyZWEnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9sYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2Zvcm0nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxheW91dFR5cGUodmFsdWU6IFBlcExheW91dFR5cGUpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0VHlwZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEZpZWxkSGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBsYXlvdXRUeXBlKCk6IFBlcExheW91dFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0VHlwZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpbmxpbmVNb2RlID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgX3Rvb2xiYXJPcHRpb25zOiBJUGVwUmljaEh0bWxUZXh0YXJlYVRvb2xiYXJPcHRpb25zO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHRvb2xiYXJPcHRpb25zKCk6IElQZXBSaWNoSHRtbFRleHRhcmVhVG9vbGJhck9wdGlvbnMge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbGJhck9wdGlvbnM7XG4gICAgfVxuICAgIHNldCB0b29sYmFyT3B0aW9ucyhvcHRpb25zOiBJUGVwUmljaEh0bWxUZXh0YXJlYVRvb2xiYXJPcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl90b29sYmFyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3JpY2hUZXh0RWRpdG9yRGlhbG9nVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcmljaFRleHRFZGl0b3JEaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBxdWlsbENvbnRlbnQgPSAnJztcbiAgICBxdWlsbENvbnRlbnREaWFsb2cgPSAnJztcblxuICAgIGZpZWxkSGVpZ2h0ID0gJyc7XG4gICAgc3RhbmRBbG9uZSA9IGZhbHNlO1xuICAgIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogUGVwRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHRoaXMudG9vbGJhck9wdGlvbnMgPSB0aGlzLmdldERlZmF1bHRUb29sYmFyT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RmllbGRIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUZpZWxkSGVpZ2h0KFxuICAgICAgICAgICAgdGhpcy5sYXlvdXRUeXBlLFxuICAgICAgICAgICAgdGhpcy5yb3dTcGFuLFxuICAgICAgICAgICAgdGhpcy5zdGFuZEFsb25lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGVwRmllbGQgPSBuZXcgUGVwUmljaEh0bWxUZXh0YXJlYUZpZWxkKHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIG1hbmRhdG9yeTogdGhpcy5tYW5kYXRvcnksXG4gICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgbWF4RmllbGRDaGFyYWN0ZXJzOiB0aGlzLm1heEZpZWxkQ2hhcmFjdGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0RGVmYXVsdEZyb21Hcm91cChwZXBGaWVsZCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhbmRBbG9uZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEZpZWxkSGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JtKCk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVpbGxDb250ZW50ID0gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRvb2xiYXJPcHRpb25zKCk6IElQZXBSaWNoSHRtbFRleHRhcmVhVG9vbGJhck9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9udDogZmFsc2UsXG4gICAgICAgICAgICBzaXplOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgICAgICBzdHJpa2U6IGZhbHNlLFxuICAgICAgICAgICAgbGluazogdHJ1ZSxcbiAgICAgICAgICAgIGltYWdlOiB0cnVlLFxuICAgICAgICAgICAgb3JkZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGJ1bGxldDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbG9yOiB0cnVlLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogZmFsc2UsXG4gICAgICAgICAgICBhbGlnbjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5xdWlsbENvbnRlbnQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UudXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgICAgIHRoaXMua2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhcmRUZW1wbGF0ZUNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5EaWFsb2coKTtcbiAgICB9XG5cbiAgICBvcGVuRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0RGlhbG9nQ29uZmlnKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1pbldpZHRoOiAnNTB2dycsXG4gICAgICAgICAgICAgICAgLy8gbWF4V2lkdGg6ICc5MHZ3JyxcbiAgICAgICAgICAgICAgICAvLyBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbGFyZ2UnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gSWYgZGlzYWJsZWQgb3BlbiByZWd1bGFyIG1vZGFsIGFzIGh0bWwgbW9kZS5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBQZXBEaWFsb2dEYXRhKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5sYWJlbCxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnF1aWxsQ29udGVudCxcbiAgICAgICAgICAgICAgICBzaG93Rm9vdGVyOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5EZWZhdWx0RGlhbG9nKGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsQ29udGVudERpYWxvZyA9IHRoaXMucXVpbGxDb250ZW50O1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICAgICAgICAgICAgdGhpcy5yaWNoVGV4dEVkaXRvckRpYWxvZ1RlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5pdCBxdWlsbENvbnRlbnQgaW4gY2FzZSB0aGF0IHRoZXJlIGFyZSBodG1sIHRhZ3MuLi5cbiAgICBvbkVkaXRvckNyZWF0ZWQocXVpbGw6IGFueSwgaW5EaWFsb2c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbkRpYWxvZykge1xuICAgICAgICAgICAgdGhpcy5xdWlsbENvbnRlbnQgPSBxdWlsbC5nZXRUZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbnRlbnRDaGFuZ2VkKG9iajogYW55LCBpbkRpYWxvZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaW5EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxDb250ZW50RGlhbG9nID0gb2JqLmh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsQ29udGVudCA9IG9iai5odG1sO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbHVyKG9iajogYW55LCBpbkRpYWxvZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWluRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh0aGlzLnF1aWxsQ29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZvY3VzKG9iajogYW55LCBpbkRpYWxvZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWluRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1odG1sLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvcmljaC1odG1sLXRleHRhcmVhL3JpY2gtaHRtbC10ZXh0YXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFFdkIsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUdaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBQzVCLHdCQUF3QixHQUMzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsYUFBYSxHQUNoQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQXlCbkUsTUFBTSxPQUFPLDRCQUE0QjtJQW1GckMsWUFDWSxTQUF1QixFQUN2QixhQUErQixFQUMvQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUI7UUFKbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF0RnRCLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGVBQVUsR0FBMkIsNEJBQTRCLENBQUM7UUFFbkUs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QUNMLEtBQUs7b0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSztpQ0FDTCxLQUFLO3lCQUNMLEtBQUs7c0JBR0wsS0FBSztzQkFVTCxLQUFLO21CQXFCTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUdMLEtBQUs7eUJBU0wsS0FBSzs2QkFHTCxLQUFLOzBCQVVMLE1BQU07MkNBR04sU0FBUyxTQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIE9uRGVzdHJveSxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBQZXBSaWNoSHRtbFRleHRhcmVhRmllbGQsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7XG4gICAgUGVwRGlhbG9nU2VydmljZSxcbiAgICBQZXBEaWFsb2dEYXRhLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2cnO1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBSaWNoSHRtbFRleHRhcmVhVG9vbGJhck9wdGlvbnMge1xuICAgIGZvbnQ/OiBhbnk7XG4gICAgc2l6ZT86IGFueTtcbiAgICBoZWFkZXI/OiBhbnk7XG4gICAgYm9sZD86IGFueTtcbiAgICBpdGFsaWM/OiBhbnk7XG4gICAgdW5kZXJsaW5lPzogYW55O1xuICAgIHN0cmlrZT86IGFueTtcbiAgICBsaW5rPzogYW55O1xuICAgIGltYWdlPzogYW55O1xuICAgIG9yZGVyZWQ/OiBhbnk7XG4gICAgYnVsbGV0PzogYW55O1xuICAgIGNvbG9yPzogYW55O1xuICAgIGJhY2tncm91bmQ/OiBhbnk7XG4gICAgYWxpZ24/OiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLXJpY2gtaHRtbC10ZXh0YXJlYScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JpY2gtaHRtbC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmljaC1odG1sLXRleHRhcmVhLmNvbXBvbmVudC5zY3NzJywgJy4vcmljaC1odG1sLXRleHRhcmVhLmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFJpY2hIdG1sVGV4dGFyZWFDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGtleSA9ICcnO1xuICAgIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBtYW5kYXRvcnkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgbWF4RmllbGRDaGFyYWN0ZXJzOiBudW1iZXI7XG4gICAgQElucHV0KCkgeEFsaWdubWVudDogUGVwSG9yaXpvbnRhbEFsaWdubWVudCA9IERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQ7XG5cbiAgICBwcml2YXRlIF9yb3dTcGFuID0gMTtcbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dTcGFuKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NwYW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGaWVsZEhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgcm93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93U3BhbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIGNvbnRyb2xUeXBlID0gJ3JpY2hodG1sdGV4dGFyZWEnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBfbGF5b3V0VHlwZTogUGVwTGF5b3V0VHlwZSA9ICdmb3JtJztcbiAgICBASW5wdXQoKVxuICAgIHNldCBsYXlvdXRUeXBlKHZhbHVlOiBQZXBMYXlvdXRUeXBlKSB7XG4gICAgICAgIHRoaXMuX2xheW91dFR5cGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGaWVsZEhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgbGF5b3V0VHlwZSgpOiBQZXBMYXlvdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dFR5cGU7XG4gICAgfVxuXG4gICAgQElucHV0KCkgaW5saW5lTW9kZSA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF90b29sYmFyT3B0aW9uczogSVBlcFJpY2hIdG1sVGV4dGFyZWFUb29sYmFyT3B0aW9ucztcbiAgICBASW5wdXQoKVxuICAgIGdldCB0b29sYmFyT3B0aW9ucygpOiBJUGVwUmljaEh0bWxUZXh0YXJlYVRvb2xiYXJPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rvb2xiYXJPcHRpb25zO1xuICAgIH1cbiAgICBzZXQgdG9vbGJhck9wdGlvbnMob3B0aW9uczogSVBlcFJpY2hIdG1sVGV4dGFyZWFUb29sYmFyT3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fdG9vbGJhck9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdyaWNoVGV4dEVkaXRvckRpYWxvZ1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHJpY2hUZXh0RWRpdG9yRGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcXVpbGxDb250ZW50ID0gJyc7XG4gICAgcXVpbGxDb250ZW50RGlhbG9nID0gJyc7XG5cbiAgICBmaWVsZEhlaWdodCA9ICcnO1xuICAgIHN0YW5kQWxvbmUgPSBmYWxzZTtcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IFBlcERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U6IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZlxuICAgICkge1xuICAgICAgICB0aGlzLnRvb2xiYXJPcHRpb25zID0gdGhpcy5nZXREZWZhdWx0VG9vbGJhck9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZpZWxkSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpZWxkSGVpZ2h0ID0gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS5jYWxjdWxhdGVGaWVsZEhlaWdodChcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VHlwZSxcbiAgICAgICAgICAgIHRoaXMucm93U3BhbixcbiAgICAgICAgICAgIHRoaXMuc3RhbmRBbG9uZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcFJpY2hIdG1sVGV4dGFyZWFGaWVsZCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBtYW5kYXRvcnk6IHRoaXMubWFuZGF0b3J5LFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIG1heEZpZWxkQ2hhcmFjdGVyczogdGhpcy5tYXhGaWVsZENoYXJhY3RlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAocGVwRmllbGQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRGaWVsZEhlaWdodCgpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5xdWlsbENvbnRlbnQgPSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VG9vbGJhck9wdGlvbnMoKTogSVBlcFJpY2hIdG1sVGV4dGFyZWFUb29sYmFyT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb250OiBmYWxzZSxcbiAgICAgICAgICAgIHNpemU6IGZhbHNlLFxuICAgICAgICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHN0cmlrZTogZmFsc2UsXG4gICAgICAgICAgICBsaW5rOiB0cnVlLFxuICAgICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgICBvcmRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgYnVsbGV0OiB0cnVlLFxuICAgICAgICAgICAgY29sb3I6IHRydWUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGFsaWduOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNoYW5nZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnF1aWxsQ29udGVudCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FyZFRlbXBsYXRlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbkRpYWxvZygpO1xuICAgIH1cblxuICAgIG9wZW5EaWFsb2coKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXREaWFsb2dDb25maWcoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluV2lkdGg6ICc1MHZ3JyxcbiAgICAgICAgICAgICAgICAvLyBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgICAgICAgICAgIC8vIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdsYXJnZSdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJZiBkaXNhYmxlZCBvcGVuIHJlZ3VsYXIgbW9kYWwgYXMgaHRtbCBtb2RlLlxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFBlcERpYWxvZ0RhdGEoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMucXVpbGxDb250ZW50LFxuICAgICAgICAgICAgICAgIHNob3dGb290ZXI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRlZmF1bHREaWFsb2coZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxDb250ZW50RGlhbG9nID0gdGhpcy5xdWlsbENvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgICAgICAgICAgICB0aGlzLnJpY2hUZXh0RWRpdG9yRGlhbG9nVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbml0IHF1aWxsQ29udGVudCBpbiBjYXNlIHRoYXQgdGhlcmUgYXJlIGh0bWwgdGFncy4uLlxuICAgIG9uRWRpdG9yQ3JlYXRlZChxdWlsbDogYW55LCBpbkRpYWxvZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWluRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsQ29udGVudCA9IHF1aWxsLmdldFRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGVudENoYW5nZWQob2JqOiBhbnksIGluRGlhbG9nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpbkRpYWxvZykge1xuICAgICAgICAgICAgdGhpcy5xdWlsbENvbnRlbnREaWFsb2cgPSBvYmouaHRtbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGxDb250ZW50ID0gb2JqLmh0bWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdXIob2JqOiBhbnksIGluRGlhbG9nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaW5EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKHRoaXMucXVpbGxDb250ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9jdXMob2JqOiBhbnksIGluRGlhbG9nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaW5EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==