@pepperi-addons/ngx-lib 0.4.1-cards-list-scroll.32 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. package/address/address.component.d.ts +30 -30
  2. package/address/address.module.d.ts +15 -15
  3. package/address/index.d.ts +5 -5
  4. package/address/public-api.d.ts +2 -2
  5. package/attachment/attachment.component.d.ts +85 -85
  6. package/attachment/attachment.module.d.ts +14 -14
  7. package/attachment/index.d.ts +5 -5
  8. package/attachment/public-api.d.ts +2 -2
  9. package/bread-crumbs/bread-crumbs.component.d.ts +27 -27
  10. package/bread-crumbs/bread-crumbs.model.d.ts +11 -11
  11. package/bread-crumbs/bread-crumbs.module.d.ts +15 -15
  12. package/bread-crumbs/index.d.ts +5 -5
  13. package/bread-crumbs/public-api.d.ts +3 -3
  14. package/button/button.component.d.ts +102 -102
  15. package/button/button.model.d.ts +14 -14
  16. package/button/button.module.d.ts +13 -13
  17. package/button/index.d.ts +5 -5
  18. package/button/public-api.d.ts +3 -3
  19. package/carousel/carousel-item.directive.d.ts +12 -12
  20. package/carousel/carousel.component.d.ts +148 -148
  21. package/carousel/carousel.module.d.ts +8 -8
  22. package/carousel/index.d.ts +5 -5
  23. package/carousel/public-api.d.ts +3 -3
  24. package/checkbox/checkbox.component.d.ts +50 -50
  25. package/checkbox/checkbox.module.d.ts +19 -19
  26. package/checkbox/index.d.ts +5 -5
  27. package/checkbox/public-api.d.ts +2 -2
  28. package/chips/chips.component.d.ts +104 -93
  29. package/chips/chips.component.theme.scss +16 -7
  30. package/chips/chips.model.d.ts +14 -14
  31. package/chips/chips.module.d.ts +20 -20
  32. package/chips/chips.service.d.ts +15 -15
  33. package/chips/index.d.ts +5 -5
  34. package/chips/public-api.d.ts +3 -3
  35. package/color/color-picker.component.d.ts +57 -57
  36. package/color/color.component.d.ts +30 -30
  37. package/color/color.model.d.ts +1 -1
  38. package/color/color.module.d.ts +26 -26
  39. package/color/index.d.ts +5 -5
  40. package/color/public-api.d.ts +3 -3
  41. package/core/clipboard/clipboard.directive.d.ts +5 -5
  42. package/core/clipboard/clipboard.service.d.ts +5 -5
  43. package/core/clipboard/index.d.ts +1 -1
  44. package/core/clipboard/public-api.d.ts +2 -2
  45. package/core/common/directives/auto-width.directive.d.ts +19 -19
  46. package/core/common/directives/button-blur.directive.d.ts +9 -9
  47. package/core/common/directives/button-loader.directive.d.ts +26 -26
  48. package/core/common/directives/data-qa.directive.d.ts +11 -11
  49. package/core/common/directives/div-loader.directive.d.ts +21 -21
  50. package/core/common/directives/index.d.ts +1 -1
  51. package/core/common/directives/menu-blur.directive.d.ts +10 -10
  52. package/core/common/directives/prevent-multi-click.directive.d.ts +7 -7
  53. package/core/common/directives/print.directive.d.ts +75 -75
  54. package/core/common/directives/public-api.d.ts +8 -8
  55. package/core/common/index.d.ts +1 -1
  56. package/core/common/model/index.d.ts +1 -1
  57. package/core/common/model/papi.model.d.ts +2 -2
  58. package/core/common/model/public-api.d.ts +3 -3
  59. package/core/common/model/utilities.model.d.ts +5 -5
  60. package/core/common/model/wapi.model.d.ts +202 -202
  61. package/core/common/pipes/common-pipes.d.ts +57 -57
  62. package/core/common/pipes/date-ago.pipe.d.ts +11 -11
  63. package/core/common/pipes/index.d.ts +1 -1
  64. package/core/common/pipes/public-api.d.ts +2 -2
  65. package/core/common/public-api.d.ts +4 -4
  66. package/core/common/services/addon.service.d.ts +50 -48
  67. package/core/common/services/color.service.d.ts +51 -51
  68. package/core/common/services/cookie.service.d.ts +53 -53
  69. package/core/common/services/data-convertor.service.d.ts +45 -45
  70. package/core/common/services/file.service.d.ts +27 -27
  71. package/core/common/services/index.d.ts +1 -1
  72. package/core/common/services/jwt-helper.service.d.ts +13 -13
  73. package/core/common/services/public-api.d.ts +11 -11
  74. package/core/common/services/session.service.d.ts +18 -18
  75. package/core/common/services/translate.service.d.ts +12 -12
  76. package/core/common/services/utilities.service.d.ts +39 -39
  77. package/core/common/services/validator.service.d.ts +31 -31
  78. package/core/common/services/window-scrolling.service.d.ts +10 -10
  79. package/core/customization/customization.model.d.ts +277 -277
  80. package/core/customization/customization.service.d.ts +159 -159
  81. package/core/customization/index.d.ts +1 -1
  82. package/core/customization/public-api.d.ts +2 -2
  83. package/core/http/index.d.ts +1 -1
  84. package/core/http/interceptors/error.interceptor.d.ts +8 -8
  85. package/core/http/interceptors/index.d.ts +11 -11
  86. package/core/http/interceptors/loader.interceptor.d.ts +11 -11
  87. package/core/http/interceptors/profiler.interceptor.d.ts +8 -8
  88. package/core/http/public-api.d.ts +2 -2
  89. package/core/http/services/http.service.d.ts +28 -28
  90. package/core/http/services/loader.service.d.ts +13 -13
  91. package/core/index.d.ts +1 -1
  92. package/core/layout/index.d.ts +1 -1
  93. package/core/layout/layout.service.d.ts +36 -36
  94. package/core/layout/public-api.d.ts +2 -2
  95. package/core/layout/rtl.directive.d.ts +21 -21
  96. package/core/portal/attach.directive.d.ts +13 -13
  97. package/core/portal/index.d.ts +1 -1
  98. package/core/portal/portal.service.d.ts +12 -12
  99. package/core/portal/public-api.d.ts +3 -3
  100. package/core/portal/target.directive.d.ts +12 -12
  101. package/core/public-api.d.ts +7 -7
  102. package/core/scroll-to/index.d.ts +1 -1
  103. package/core/scroll-to/public-api.d.ts +1 -1
  104. package/core/scroll-to/scroll-to.service.d.ts +11 -11
  105. package/date/date.component.d.ts +70 -69
  106. package/date/date.model.d.ts +31 -31
  107. package/date/date.module.d.ts +23 -23
  108. package/date/index.d.ts +5 -5
  109. package/date/public-api.d.ts +2 -2
  110. package/dialog/default-dialog.component.d.ts +12 -12
  111. package/dialog/dialog.component.d.ts +13 -13
  112. package/dialog/dialog.model.d.ts +31 -31
  113. package/dialog/dialog.module.d.ts +18 -18
  114. package/dialog/dialog.service.d.ts +27 -27
  115. package/dialog/index.d.ts +5 -5
  116. package/dialog/public-api.d.ts +4 -4
  117. package/draggable-items/draggable-item/draggable-item.component.d.ts +11 -11
  118. package/draggable-items/draggable-items.component.d.ts +36 -36
  119. package/draggable-items/draggable-items.model.d.ts +11 -11
  120. package/draggable-items/draggable-items.module.d.ts +18 -18
  121. package/draggable-items/index.d.ts +5 -5
  122. package/draggable-items/public-api.d.ts +4 -4
  123. package/esm2020/address/address.component.mjs +108 -108
  124. package/esm2020/address/address.module.mjs +53 -53
  125. package/esm2020/address/pepperi-addons-ngx-lib-address.mjs +4 -4
  126. package/esm2020/address/public-api.mjs +5 -5
  127. package/esm2020/attachment/attachment.component.mjs +219 -219
  128. package/esm2020/attachment/attachment.module.mjs +49 -49
  129. package/esm2020/attachment/pepperi-addons-ngx-lib-attachment.mjs +4 -4
  130. package/esm2020/attachment/public-api.mjs +5 -5
  131. package/esm2020/bread-crumbs/bread-crumbs.component.mjs +84 -84
  132. package/esm2020/bread-crumbs/bread-crumbs.model.mjs +6 -6
  133. package/esm2020/bread-crumbs/bread-crumbs.module.mjs +49 -49
  134. package/esm2020/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.mjs +4 -4
  135. package/esm2020/bread-crumbs/public-api.mjs +6 -6
  136. package/esm2020/button/button.component.mjs +137 -137
  137. package/esm2020/button/button.model.mjs +5 -5
  138. package/esm2020/button/button.module.mjs +45 -45
  139. package/esm2020/button/pepperi-addons-ngx-lib-button.mjs +4 -4
  140. package/esm2020/button/public-api.mjs +6 -6
  141. package/esm2020/carousel/carousel-item.directive.mjs +32 -32
  142. package/esm2020/carousel/carousel.component.mjs +736 -736
  143. package/esm2020/carousel/carousel.module.mjs +16 -16
  144. package/esm2020/carousel/pepperi-addons-ngx-lib-carousel.mjs +4 -4
  145. package/esm2020/carousel/public-api.mjs +7 -7
  146. package/esm2020/checkbox/checkbox.component.mjs +167 -167
  147. package/esm2020/checkbox/checkbox.module.mjs +62 -62
  148. package/esm2020/checkbox/pepperi-addons-ngx-lib-checkbox.mjs +4 -4
  149. package/esm2020/checkbox/public-api.mjs +5 -5
  150. package/esm2020/chips/chips.component.mjs +190 -158
  151. package/esm2020/chips/chips.model.mjs +1 -1
  152. package/esm2020/chips/chips.module.mjs +80 -80
  153. package/esm2020/chips/chips.service.mjs +44 -44
  154. package/esm2020/chips/pepperi-addons-ngx-lib-chips.mjs +4 -4
  155. package/esm2020/chips/public-api.mjs +6 -6
  156. package/esm2020/color/color-picker.component.mjs +197 -197
  157. package/esm2020/color/color.component.mjs +89 -89
  158. package/esm2020/color/color.model.mjs +1 -1
  159. package/esm2020/color/color.module.mjs +92 -92
  160. package/esm2020/color/pepperi-addons-ngx-lib-color.mjs +4 -4
  161. package/esm2020/color/public-api.mjs +6 -6
  162. package/esm2020/core/clipboard/clipboard.directive.mjs +23 -23
  163. package/esm2020/core/clipboard/clipboard.service.mjs +13 -13
  164. package/esm2020/core/clipboard/index.mjs +4 -4
  165. package/esm2020/core/clipboard/public-api.mjs +5 -5
  166. package/esm2020/core/common/directives/auto-width.directive.mjs +76 -76
  167. package/esm2020/core/common/directives/button-blur.directive.mjs +23 -23
  168. package/esm2020/core/common/directives/button-loader.directive.mjs +111 -111
  169. package/esm2020/core/common/directives/data-qa.directive.mjs +22 -22
  170. package/esm2020/core/common/directives/div-loader.directive.mjs +60 -60
  171. package/esm2020/core/common/directives/index.mjs +4 -4
  172. package/esm2020/core/common/directives/menu-blur.directive.mjs +31 -31
  173. package/esm2020/core/common/directives/prevent-multi-click.directive.mjs +26 -26
  174. package/esm2020/core/common/directives/print.directive.mjs +144 -144
  175. package/esm2020/core/common/directives/public-api.mjs +12 -12
  176. package/esm2020/core/common/index.mjs +4 -4
  177. package/esm2020/core/common/model/index.mjs +4 -4
  178. package/esm2020/core/common/model/papi.model.mjs +2 -2
  179. package/esm2020/core/common/model/public-api.mjs +6 -6
  180. package/esm2020/core/common/model/utilities.model.mjs +56 -56
  181. package/esm2020/core/common/model/wapi.model.mjs +156 -156
  182. package/esm2020/core/common/pipes/common-pipes.mjs +166 -166
  183. package/esm2020/core/common/pipes/date-ago.pipe.mjs +45 -45
  184. package/esm2020/core/common/pipes/index.mjs +4 -4
  185. package/esm2020/core/common/pipes/public-api.mjs +5 -5
  186. package/esm2020/core/common/public-api.mjs +7 -7
  187. package/esm2020/core/common/services/addon.service.mjs +203 -189
  188. package/esm2020/core/common/services/color.service.mjs +358 -358
  189. package/esm2020/core/common/services/cookie.service.mjs +152 -152
  190. package/esm2020/core/common/services/data-convertor.service.mjs +121 -121
  191. package/esm2020/core/common/services/file.service.mjs +212 -212
  192. package/esm2020/core/common/services/index.mjs +4 -4
  193. package/esm2020/core/common/services/jwt-helper.service.mjs +105 -105
  194. package/esm2020/core/common/services/public-api.mjs +14 -14
  195. package/esm2020/core/common/services/session.service.mjs +70 -70
  196. package/esm2020/core/common/services/translate.service.mjs +45 -45
  197. package/esm2020/core/common/services/utilities.service.mjs +301 -299
  198. package/esm2020/core/common/services/validator.service.mjs +271 -271
  199. package/esm2020/core/common/services/window-scrolling.service.mjs +31 -31
  200. package/esm2020/core/customization/customization.model.mjs +301 -301
  201. package/esm2020/core/customization/customization.service.mjs +770 -770
  202. package/esm2020/core/customization/index.mjs +4 -4
  203. package/esm2020/core/customization/public-api.mjs +5 -5
  204. package/esm2020/core/http/index.mjs +4 -4
  205. package/esm2020/core/http/interceptors/error.interceptor.mjs +26 -26
  206. package/esm2020/core/http/interceptors/index.mjs +23 -23
  207. package/esm2020/core/http/interceptors/loader.interceptor.mjs +31 -31
  208. package/esm2020/core/http/interceptors/profiler.interceptor.mjs +31 -31
  209. package/esm2020/core/http/public-api.mjs +5 -5
  210. package/esm2020/core/http/services/http.service.mjs +154 -154
  211. package/esm2020/core/http/services/loader.service.mjs +49 -49
  212. package/esm2020/core/index.mjs +4 -4
  213. package/esm2020/core/layout/index.mjs +4 -4
  214. package/esm2020/core/layout/layout.service.mjs +167 -167
  215. package/esm2020/core/layout/public-api.mjs +5 -5
  216. package/esm2020/core/layout/rtl.directive.mjs +43 -43
  217. package/esm2020/core/portal/attach.directive.mjs +26 -26
  218. package/esm2020/core/portal/index.mjs +4 -4
  219. package/esm2020/core/portal/portal.service.mjs +35 -35
  220. package/esm2020/core/portal/public-api.mjs +6 -6
  221. package/esm2020/core/portal/target.directive.mjs +23 -23
  222. package/esm2020/core/public-api.mjs +10 -10
  223. package/esm2020/core/scroll-to/index.mjs +4 -4
  224. package/esm2020/core/scroll-to/public-api.mjs +5 -5
  225. package/esm2020/core/scroll-to/scroll-to.service.mjs +83 -83
  226. package/esm2020/date/date.component.mjs +312 -307
  227. package/esm2020/date/date.model.mjs +53 -53
  228. package/esm2020/date/date.module.mjs +87 -87
  229. package/esm2020/date/pepperi-addons-ngx-lib-date.mjs +4 -4
  230. package/esm2020/date/public-api.mjs +5 -5
  231. package/esm2020/dialog/default-dialog.component.mjs +36 -36
  232. package/esm2020/dialog/dialog.component.mjs +35 -35
  233. package/esm2020/dialog/dialog.model.mjs +32 -32
  234. package/esm2020/dialog/dialog.module.mjs +58 -58
  235. package/esm2020/dialog/dialog.service.mjs +81 -81
  236. package/esm2020/dialog/pepperi-addons-ngx-lib-dialog.mjs +4 -4
  237. package/esm2020/dialog/public-api.mjs +7 -7
  238. package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +26 -26
  239. package/esm2020/draggable-items/draggable-items.component.mjs +101 -101
  240. package/esm2020/draggable-items/draggable-items.model.mjs +1 -1
  241. package/esm2020/draggable-items/draggable-items.module.mjs +59 -59
  242. package/esm2020/draggable-items/pepperi-addons-ngx-lib-draggable-items.mjs +4 -4
  243. package/esm2020/draggable-items/public-api.mjs +7 -7
  244. package/esm2020/field-title/field-title.component.mjs +44 -44
  245. package/esm2020/field-title/field-title.module.mjs +46 -46
  246. package/esm2020/field-title/pepperi-addons-ngx-lib-field-title.mjs +4 -4
  247. package/esm2020/field-title/public-api.mjs +5 -5
  248. package/esm2020/files-uploader/files-uploader.component.mjs +240 -240
  249. package/esm2020/files-uploader/files-uploader.module.mjs +78 -78
  250. package/esm2020/files-uploader/pepperi-addons-ngx-lib-files-uploader.mjs +4 -4
  251. package/esm2020/files-uploader/public-api.mjs +5 -5
  252. package/esm2020/form/field-generator.component.mjs +152 -152
  253. package/esm2020/form/form.component.mjs +1237 -1227
  254. package/esm2020/form/form.model.mjs +1 -1
  255. package/esm2020/form/form.module.mjs +178 -178
  256. package/esm2020/form/indicators.component.mjs +22 -22
  257. package/esm2020/form/internal-button.component.mjs +183 -183
  258. package/esm2020/form/internal-carusel.component.mjs +116 -116
  259. package/esm2020/form/internal-carusel.service.mjs +31 -31
  260. package/esm2020/form/internal-field-generator.component.mjs +145 -145
  261. package/esm2020/form/internal-form.component.mjs +1215 -1215
  262. package/esm2020/form/internal-list.component.mjs +512 -512
  263. package/esm2020/form/internal-menu.component.mjs +65 -65
  264. package/esm2020/form/internal-page.component.mjs +361 -361
  265. package/esm2020/form/internal-page.service.mjs +119 -119
  266. package/esm2020/form/pepperi-addons-ngx-lib-form.mjs +4 -4
  267. package/esm2020/form/public-api.mjs +6 -6
  268. package/esm2020/group-buttons/group-buttons.component.mjs +70 -70
  269. package/esm2020/group-buttons/group-buttons.module.mjs +58 -58
  270. package/esm2020/group-buttons/pepperi-addons-ngx-lib-group-buttons.mjs +4 -4
  271. package/esm2020/group-buttons/public-api.mjs +5 -5
  272. package/esm2020/icon/icon-generated-all.model.mjs +117 -114
  273. package/esm2020/icon/icon-generated.model.mjs +454 -442
  274. package/esm2020/icon/icon-registry.service.mjs +24 -24
  275. package/esm2020/icon/icon.component.mjs +90 -90
  276. package/esm2020/icon/icon.module.mjs +19 -19
  277. package/esm2020/icon/icon.service.mjs +30 -30
  278. package/esm2020/icon/pepperi-addons-ngx-lib-icon.mjs +4 -4
  279. package/esm2020/icon/public-api.mjs +10 -10
  280. package/esm2020/image/image.component.mjs +246 -246
  281. package/esm2020/image/image.module.mjs +73 -73
  282. package/esm2020/image/image.service.mjs +51 -51
  283. package/esm2020/image/pepperi-addons-ngx-lib-image.mjs +4 -4
  284. package/esm2020/image/public-api.mjs +6 -6
  285. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +336 -336
  286. package/esm2020/images-filmstrip/images-filmstrip.module.mjs +82 -82
  287. package/esm2020/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.mjs +4 -4
  288. package/esm2020/images-filmstrip/public-api.mjs +5 -5
  289. package/esm2020/link/link.component.mjs +324 -324
  290. package/esm2020/link/link.module.mjs +79 -79
  291. package/esm2020/link/link.pipes.mjs +17 -17
  292. package/esm2020/link/pepperi-addons-ngx-lib-link.mjs +4 -4
  293. package/esm2020/link/public-api.mjs +7 -6
  294. package/esm2020/list/list-actions.component.mjs +43 -43
  295. package/esm2020/list/list-carousel.component.mjs +106 -106
  296. package/esm2020/list/list-chooser.component.mjs +63 -63
  297. package/esm2020/list/list-pager.component.mjs +119 -119
  298. package/esm2020/list/list-sorting.component.mjs +60 -60
  299. package/esm2020/list/list-total.component.mjs +29 -29
  300. package/esm2020/list/list-views.component.mjs +84 -84
  301. package/esm2020/list/list.component.mjs +1193 -1187
  302. package/esm2020/list/list.model.mjs +3 -3
  303. package/esm2020/list/list.module.mjs +143 -143
  304. package/esm2020/list/list.pipes.mjs +46 -46
  305. package/esm2020/list/pepperi-addons-ngx-lib-list.mjs +4 -4
  306. package/esm2020/list/public-api.mjs +14 -14
  307. package/esm2020/list/virtual-scroller.mjs +1070 -1070
  308. package/esm2020/menu/menu-item.component.mjs +114 -114
  309. package/esm2020/menu/menu.component.mjs +212 -212
  310. package/esm2020/menu/menu.model.mjs +18 -18
  311. package/esm2020/menu/menu.module.mjs +58 -58
  312. package/esm2020/menu/pepperi-addons-ngx-lib-menu.mjs +4 -4
  313. package/esm2020/menu/public-api.mjs +6 -6
  314. package/esm2020/ngx-lib.module.mjs +161 -161
  315. package/esm2020/page-layout/page-layout.component.mjs +34 -34
  316. package/esm2020/page-layout/page-layout.module.mjs +33 -33
  317. package/esm2020/page-layout/pepperi-addons-ngx-lib-page-layout.mjs +4 -4
  318. package/esm2020/page-layout/public-api.mjs +5 -5
  319. package/esm2020/pepperi-addons-ngx-lib.mjs +4 -4
  320. package/esm2020/profile-data-views-list/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
  321. package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +44 -44
  322. package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +64 -64
  323. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +94 -94
  324. package/esm2020/profile-data-views-list/profile-data-views-list.model.mjs +1 -1
  325. package/esm2020/profile-data-views-list/profile-data-views-list.module.mjs +87 -87
  326. package/esm2020/profile-data-views-list/public-api.mjs +8 -8
  327. package/esm2020/public-api.mjs +5 -5
  328. package/esm2020/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.mjs +4 -4
  329. package/esm2020/quantity-selector/public-api.mjs +5 -5
  330. package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +48 -48
  331. package/esm2020/quantity-selector/quantity-selector.component.mjs +574 -574
  332. package/esm2020/quantity-selector/quantity-selector.module.mjs +81 -81
  333. package/esm2020/quantity-selector/quantity-selector.pipes.mjs +22 -22
  334. package/esm2020/query-builder/common/model/field.mjs +1 -1
  335. package/esm2020/query-builder/common/model/filter.mjs +1 -1
  336. package/esm2020/query-builder/common/model/legacy.mjs +1 -1
  337. package/esm2020/query-builder/common/model/operator-unit.mjs +41 -41
  338. package/esm2020/query-builder/common/model/operator.mjs +265 -265
  339. package/esm2020/query-builder/common/model/structure.mjs +1 -1
  340. package/esm2020/query-builder/common/model/type-map.mjs +27 -27
  341. package/esm2020/query-builder/common/model/type.mjs +5 -5
  342. package/esm2020/query-builder/common/services/output-query.service.mjs +113 -113
  343. package/esm2020/query-builder/common/services/query-structure.service.mjs +225 -225
  344. package/esm2020/query-builder/common/services/type-convertor.service.mjs +41 -41
  345. package/esm2020/query-builder/pepperi-addons-ngx-lib-query-builder.mjs +4 -4
  346. package/esm2020/query-builder/public-api.mjs +8 -8
  347. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +124 -124
  348. package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +70 -70
  349. package/esm2020/query-builder/query-builder.component.mjs +109 -109
  350. package/esm2020/query-builder/query-builder.module.mjs +58 -58
  351. package/esm2020/query-builder/query-builder.service.mjs +101 -101
  352. package/esm2020/remote-loader/addon-block-loader.component.mjs +101 -101
  353. package/esm2020/remote-loader/addon-block-loader.service.mjs +61 -61
  354. package/esm2020/remote-loader/pepperi-addons-ngx-lib-remote-loader.mjs +4 -4
  355. package/esm2020/remote-loader/public-api.mjs +10 -10
  356. package/esm2020/remote-loader/remote-loader-element.component.mjs +112 -105
  357. package/esm2020/remote-loader/remote-loader.component.mjs +108 -108
  358. package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
  359. package/esm2020/remote-loader/remote-loader.module.mjs +68 -68
  360. package/esm2020/remote-loader/remote-loader.service.mjs +80 -80
  361. package/esm2020/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.mjs +4 -4
  362. package/esm2020/rich-html-textarea/public-api.mjs +5 -5
  363. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +247 -247
  364. package/esm2020/rich-html-textarea/rich-html-textarea.module.mjs +94 -94
  365. package/esm2020/search/pepperi-addons-ngx-lib-search.mjs +4 -4
  366. package/esm2020/search/public-api.mjs +6 -6
  367. package/esm2020/search/search.component.mjs +316 -316
  368. package/esm2020/search/search.model.mjs +1 -1
  369. package/esm2020/search/search.module.mjs +69 -69
  370. package/esm2020/select/pepperi-addons-ngx-lib-select.mjs +4 -4
  371. package/esm2020/select/public-api.mjs +5 -5
  372. package/esm2020/select/select.component.mjs +263 -263
  373. package/esm2020/select/select.module.mjs +69 -69
  374. package/esm2020/select-panel/pepperi-addons-ngx-lib-select-panel.mjs +4 -4
  375. package/esm2020/select-panel/public-api.mjs +6 -6
  376. package/esm2020/select-panel/select-panel.component.mjs +158 -158
  377. package/esm2020/select-panel/select-panel.model.mjs +1 -1
  378. package/esm2020/select-panel/select-panel.module.mjs +69 -69
  379. package/esm2020/separator/pepperi-addons-ngx-lib-separator.mjs +4 -4
  380. package/esm2020/separator/public-api.mjs +5 -5
  381. package/esm2020/separator/separator.component.mjs +62 -62
  382. package/esm2020/separator/separator.module.mjs +17 -17
  383. package/esm2020/side-bar/pepperi-addons-ngx-lib-side-bar.mjs +4 -4
  384. package/esm2020/side-bar/public-api.mjs +6 -6
  385. package/esm2020/side-bar/side-bar.component.mjs +121 -121
  386. package/esm2020/side-bar/side-bar.model.mjs +1 -1
  387. package/esm2020/side-bar/side-bar.module.mjs +54 -54
  388. package/esm2020/signature/pepperi-addons-ngx-lib-signature.mjs +4 -4
  389. package/esm2020/signature/public-api.mjs +5 -5
  390. package/esm2020/signature/signature.component.mjs +253 -253
  391. package/esm2020/signature/signature.module.mjs +89 -89
  392. package/esm2020/size-detector/pepperi-addons-ngx-lib-size-detector.mjs +4 -4
  393. package/esm2020/size-detector/public-api.mjs +5 -5
  394. package/esm2020/size-detector/size-detector.component.mjs +91 -91
  395. package/esm2020/size-detector/size-detector.module.mjs +34 -34
  396. package/esm2020/slider/pepperi-addons-ngx-lib-slider.mjs +4 -4
  397. package/esm2020/slider/public-api.mjs +5 -5
  398. package/esm2020/slider/slider.component.mjs +100 -100
  399. package/esm2020/slider/slider.module.mjs +41 -41
  400. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +75 -75
  401. package/esm2020/smart-filters/common/filter-actions.component.mjs +28 -28
  402. package/esm2020/smart-filters/common/model/base-filter-component.mjs +295 -295
  403. package/esm2020/smart-filters/common/model/creator.mjs +75 -75
  404. package/esm2020/smart-filters/common/model/field.mjs +116 -116
  405. package/esm2020/smart-filters/common/model/filter.mjs +1 -1
  406. package/esm2020/smart-filters/common/model/operator.mjs +270 -270
  407. package/esm2020/smart-filters/common/model/type.mjs +1 -1
  408. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +181 -181
  409. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +199 -199
  410. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +135 -135
  411. package/esm2020/smart-filters/pepperi-addons-ngx-lib-smart-filters.mjs +4 -4
  412. package/esm2020/smart-filters/public-api.mjs +18 -18
  413. package/esm2020/smart-filters/smart-filters.component.mjs +140 -140
  414. package/esm2020/smart-filters/smart-filters.module.mjs +157 -157
  415. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +92 -92
  416. package/esm2020/snack-bar/default-snack-bar.component.mjs +28 -28
  417. package/esm2020/snack-bar/pepperi-addons-ngx-lib-snack-bar.mjs +4 -4
  418. package/esm2020/snack-bar/public-api.mjs +7 -7
  419. package/esm2020/snack-bar/snack-bar.component.mjs +25 -25
  420. package/esm2020/snack-bar/snack-bar.model.mjs +6 -6
  421. package/esm2020/snack-bar/snack-bar.module.mjs +62 -62
  422. package/esm2020/snack-bar/snack-bar.service.mjs +59 -59
  423. package/esm2020/textarea/pepperi-addons-ngx-lib-textarea.mjs +4 -4
  424. package/esm2020/textarea/public-api.mjs +5 -5
  425. package/esm2020/textarea/textarea.component.mjs +187 -187
  426. package/esm2020/textarea/textarea.module.mjs +81 -81
  427. package/esm2020/textbox/pepperi-addons-ngx-lib-textbox.mjs +4 -4
  428. package/esm2020/textbox/public-api.mjs +5 -5
  429. package/esm2020/textbox/textbox-validation.directive.mjs +92 -92
  430. package/esm2020/textbox/textbox.component.mjs +576 -551
  431. package/esm2020/textbox/textbox.module.mjs +71 -71
  432. package/esm2020/textbox-icon/pepperi-addons-ngx-lib-textbox-icon.mjs +4 -4
  433. package/esm2020/textbox-icon/public-api.mjs +5 -5
  434. package/esm2020/textbox-icon/textbox-icon.component.mjs +47 -47
  435. package/esm2020/textbox-icon/textbox-icon.module.mjs +63 -63
  436. package/esm2020/top-bar/pepperi-addons-ngx-lib-top-bar.mjs +4 -4
  437. package/esm2020/top-bar/public-api.mjs +6 -6
  438. package/esm2020/top-bar/top-bar.component.mjs +111 -111
  439. package/esm2020/top-bar/top-bar.model.mjs +1 -1
  440. package/esm2020/top-bar/top-bar.module.mjs +61 -61
  441. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +143 -143
  442. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +253 -253
  443. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
  444. package/fesm2015/pepperi-addons-ngx-lib-button.mjs +171 -171
  445. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +780 -780
  446. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
  447. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +289 -258
  448. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  449. package/fesm2015/pepperi-addons-ngx-lib-color.mjs +336 -336
  450. package/fesm2015/pepperi-addons-ngx-lib-date.mjs +414 -409
  451. package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  452. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +207 -207
  453. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +163 -163
  454. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +76 -76
  455. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +291 -291
  456. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +4129 -4119
  457. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  458. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
  459. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +718 -703
  460. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  461. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +340 -340
  462. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +390 -390
  463. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +388 -388
  464. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  465. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +2866 -2859
  466. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  467. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +368 -368
  468. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
  469. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +254 -254
  470. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +686 -686
  471. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +1119 -1119
  472. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  473. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +511 -504
  474. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  475. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +303 -303
  476. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  477. package/fesm2015/pepperi-addons-ngx-lib-search.mjs +356 -356
  478. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +206 -206
  479. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +305 -305
  480. package/fesm2015/pepperi-addons-ngx-lib-separator.mjs +73 -73
  481. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
  482. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +311 -311
  483. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
  484. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +130 -130
  485. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +1634 -1634
  486. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  487. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +152 -152
  488. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +238 -238
  489. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  490. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
  491. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +703 -678
  492. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  493. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +155 -155
  494. package/fesm2015/pepperi-addons-ngx-lib.mjs +4632 -4616
  495. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  496. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +143 -143
  497. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +253 -253
  498. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
  499. package/fesm2020/pepperi-addons-ngx-lib-button.mjs +171 -171
  500. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs +776 -776
  501. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
  502. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +288 -257
  503. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  504. package/fesm2020/pepperi-addons-ngx-lib-color.mjs +333 -333
  505. package/fesm2020/pepperi-addons-ngx-lib-date.mjs +410 -405
  506. package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  507. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +203 -203
  508. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +162 -162
  509. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +76 -76
  510. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +288 -288
  511. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +4128 -4118
  512. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  513. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
  514. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +716 -701
  515. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  516. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +338 -338
  517. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +387 -387
  518. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +388 -388
  519. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  520. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +2853 -2846
  521. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  522. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +368 -368
  523. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
  524. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +253 -253
  525. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +685 -685
  526. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +1108 -1108
  527. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  528. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +489 -482
  529. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  530. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +303 -303
  531. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  532. package/fesm2020/pepperi-addons-ngx-lib-search.mjs +355 -355
  533. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +205 -205
  534. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +305 -305
  535. package/fesm2020/pepperi-addons-ngx-lib-separator.mjs +73 -73
  536. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
  537. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +311 -311
  538. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
  539. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +129 -129
  540. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +1627 -1627
  541. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  542. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs +149 -149
  543. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +237 -237
  544. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  545. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
  546. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +703 -678
  547. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  548. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +154 -154
  549. package/fesm2020/pepperi-addons-ngx-lib.mjs +4602 -4586
  550. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  551. package/field-title/field-title.component.d.ts +15 -15
  552. package/field-title/field-title.module.d.ts +15 -15
  553. package/field-title/index.d.ts +5 -5
  554. package/field-title/public-api.d.ts +2 -2
  555. package/files-uploader/files-uploader.component.d.ts +57 -57
  556. package/files-uploader/files-uploader.module.d.ts +21 -21
  557. package/files-uploader/index.d.ts +5 -5
  558. package/files-uploader/public-api.d.ts +2 -2
  559. package/form/field-generator.component.d.ts +37 -37
  560. package/form/form.component.d.ts +93 -93
  561. package/form/form.model.d.ts +20 -20
  562. package/form/form.module.d.ts +50 -50
  563. package/form/index.d.ts +5 -5
  564. package/form/indicators.component.d.ts +10 -10
  565. package/form/internal-button.component.d.ts +42 -42
  566. package/form/internal-carusel.component.d.ts +39 -39
  567. package/form/internal-carusel.service.d.ts +10 -10
  568. package/form/internal-field-generator.component.d.ts +33 -33
  569. package/form/internal-form.component.d.ts +89 -89
  570. package/form/internal-list.component.d.ts +95 -95
  571. package/form/internal-menu.component.d.ts +19 -19
  572. package/form/internal-page.component.d.ts +73 -73
  573. package/form/internal-page.service.d.ts +22 -22
  574. package/form/public-api.d.ts +3 -3
  575. package/group-buttons/group-buttons.component.d.ts +24 -24
  576. package/group-buttons/group-buttons.module.d.ts +18 -18
  577. package/group-buttons/index.d.ts +5 -5
  578. package/group-buttons/public-api.d.ts +2 -2
  579. package/icon/icon-generated-all.model.d.ts +115 -112
  580. package/icon/icon-generated.model.d.ts +458 -446
  581. package/icon/icon-registry.service.d.ts +9 -9
  582. package/icon/icon.component.d.ts +49 -49
  583. package/icon/icon.module.d.ts +7 -7
  584. package/icon/icon.service.d.ts +13 -13
  585. package/icon/index.d.ts +5 -5
  586. package/icon/public-api.d.ts +6 -6
  587. package/image/image.component.d.ts +66 -66
  588. package/image/image.module.d.ts +20 -20
  589. package/image/image.service.d.ts +14 -14
  590. package/image/index.d.ts +5 -5
  591. package/image/public-api.d.ts +3 -3
  592. package/images-filmstrip/images-filmstrip.component.d.ts +87 -87
  593. package/images-filmstrip/images-filmstrip.module.d.ts +22 -22
  594. package/images-filmstrip/index.d.ts +5 -5
  595. package/images-filmstrip/public-api.d.ts +2 -2
  596. package/index.d.ts +5 -5
  597. package/link/index.d.ts +5 -5
  598. package/link/link.component.d.ts +125 -125
  599. package/link/link.module.d.ts +22 -22
  600. package/link/link.pipes.d.ts +7 -7
  601. package/link/public-api.d.ts +3 -2
  602. package/list/index.d.ts +5 -5
  603. package/list/list-actions.component.d.ts +18 -18
  604. package/list/list-carousel.component.d.ts +40 -40
  605. package/list/list-chooser.component.d.ts +29 -29
  606. package/list/list-pager.component.d.ts +39 -39
  607. package/list/list-sorting.component.d.ts +30 -30
  608. package/list/list-total.component.d.ts +11 -11
  609. package/list/list-views.component.d.ts +35 -35
  610. package/list/list.component.d.ts +167 -165
  611. package/list/list.model.d.ts +31 -31
  612. package/list/list.module.d.ts +34 -34
  613. package/list/list.pipes.d.ts +16 -16
  614. package/list/public-api.d.ts +10 -10
  615. package/list/virtual-scroller.d.ts +183 -183
  616. package/menu/index.d.ts +5 -5
  617. package/menu/menu-item.component.d.ts +28 -28
  618. package/menu/menu.component.d.ts +48 -48
  619. package/menu/menu.model.d.ts +25 -25
  620. package/menu/menu.module.d.ts +18 -18
  621. package/menu/public-api.d.ts +3 -3
  622. package/ngx-lib.module.d.ts +24 -24
  623. package/package.json +1 -1
  624. package/page-layout/index.d.ts +5 -5
  625. package/page-layout/page-layout.component.d.ts +19 -19
  626. package/page-layout/page-layout.module.d.ts +10 -10
  627. package/page-layout/public-api.d.ts +2 -2
  628. package/profile-data-views-list/index.d.ts +5 -5
  629. package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +18 -18
  630. package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +24 -24
  631. package/profile-data-views-list/profile-data-views-list.component.d.ts +35 -35
  632. package/profile-data-views-list/profile-data-views-list.model.d.ts +18 -18
  633. package/profile-data-views-list/profile-data-views-list.module.d.ts +23 -23
  634. package/profile-data-views-list/public-api.d.ts +5 -5
  635. package/public-api.d.ts +2 -2
  636. package/quantity-selector/index.d.ts +5 -5
  637. package/quantity-selector/public-api.d.ts +2 -2
  638. package/quantity-selector/quantity-selector-validation.directive.d.ts +17 -17
  639. package/quantity-selector/quantity-selector.component.d.ts +112 -112
  640. package/quantity-selector/quantity-selector.module.d.ts +23 -23
  641. package/quantity-selector/quantity-selector.pipes.d.ts +7 -7
  642. package/query-builder/common/model/field.d.ts +8 -8
  643. package/query-builder/common/model/filter.d.ts +6 -6
  644. package/query-builder/common/model/legacy.d.ts +29 -29
  645. package/query-builder/common/model/operator-unit.d.ts +13 -13
  646. package/query-builder/common/model/operator.d.ts +21 -21
  647. package/query-builder/common/model/structure.d.ts +4 -4
  648. package/query-builder/common/model/type-map.d.ts +12 -12
  649. package/query-builder/common/model/type.d.ts +4 -4
  650. package/query-builder/common/services/output-query.service.d.ts +47 -47
  651. package/query-builder/common/services/query-structure.service.d.ts +82 -82
  652. package/query-builder/common/services/type-convertor.service.d.ts +13 -13
  653. package/query-builder/index.d.ts +5 -5
  654. package/query-builder/public-api.d.ts +5 -5
  655. package/query-builder/query-builder-item/query-builder-item.component.d.ts +41 -41
  656. package/query-builder/query-builder-section/query-builder-section.component.d.ts +30 -30
  657. package/query-builder/query-builder.component.d.ts +39 -39
  658. package/query-builder/query-builder.module.d.ts +16 -16
  659. package/query-builder/query-builder.service.d.ts +30 -30
  660. package/remote-loader/addon-block-loader.component.d.ts +36 -36
  661. package/remote-loader/addon-block-loader.service.d.ts +15 -15
  662. package/remote-loader/index.d.ts +5 -5
  663. package/remote-loader/public-api.d.ts +7 -7
  664. package/remote-loader/remote-loader-element.component.d.ts +32 -30
  665. package/remote-loader/remote-loader.component.d.ts +25 -25
  666. package/remote-loader/remote-loader.model.d.ts +41 -41
  667. package/remote-loader/remote-loader.module.d.ts +15 -15
  668. package/remote-loader/remote-loader.service.d.ts +15 -15
  669. package/rich-html-textarea/index.d.ts +5 -5
  670. package/rich-html-textarea/public-api.d.ts +2 -2
  671. package/rich-html-textarea/rich-html-textarea.component.d.ts +79 -79
  672. package/rich-html-textarea/rich-html-textarea.module.d.ts +25 -25
  673. package/search/index.d.ts +5 -5
  674. package/search/public-api.d.ts +3 -3
  675. package/search/search.component.d.ts +65 -65
  676. package/search/search.model.d.ts +14 -14
  677. package/search/search.module.d.ts +20 -20
  678. package/select/index.d.ts +5 -5
  679. package/select/public-api.d.ts +2 -2
  680. package/select/select.component.d.ts +59 -59
  681. package/select/select.module.d.ts +20 -20
  682. package/select-panel/index.d.ts +5 -5
  683. package/select-panel/public-api.d.ts +3 -3
  684. package/select-panel/select-panel.component.d.ts +51 -51
  685. package/select-panel/select-panel.model.d.ts +5 -5
  686. package/select-panel/select-panel.module.d.ts +19 -19
  687. package/separator/index.d.ts +5 -5
  688. package/separator/public-api.d.ts +2 -2
  689. package/separator/separator.component.d.ts +22 -22
  690. package/separator/separator.module.d.ts +8 -8
  691. package/side-bar/index.d.ts +5 -5
  692. package/side-bar/public-api.d.ts +3 -3
  693. package/side-bar/side-bar.component.d.ts +42 -42
  694. package/side-bar/side-bar.model.d.ts +4 -4
  695. package/side-bar/side-bar.module.d.ts +16 -16
  696. package/signature/index.d.ts +5 -5
  697. package/signature/public-api.d.ts +2 -2
  698. package/signature/signature.component.d.ts +68 -68
  699. package/signature/signature.module.d.ts +24 -24
  700. package/size-detector/index.d.ts +5 -5
  701. package/size-detector/public-api.d.ts +2 -2
  702. package/size-detector/size-detector.component.d.ts +29 -29
  703. package/size-detector/size-detector.module.d.ts +11 -11
  704. package/slider/index.d.ts +5 -5
  705. package/slider/public-api.d.ts +2 -2
  706. package/slider/slider.component.d.ts +39 -39
  707. package/slider/slider.module.d.ts +12 -12
  708. package/smart-filters/boolean-filter/boolean-filter.component.d.ts +28 -28
  709. package/smart-filters/common/filter-actions.component.d.ts +12 -12
  710. package/smart-filters/common/model/base-filter-component.d.ts +74 -74
  711. package/smart-filters/common/model/creator.d.ts +6 -6
  712. package/smart-filters/common/model/field.d.ts +69 -69
  713. package/smart-filters/common/model/filter.d.ts +11 -11
  714. package/smart-filters/common/model/operator.d.ts +51 -51
  715. package/smart-filters/common/model/type.d.ts +4 -4
  716. package/smart-filters/date-filter/date-filter.component.d.ts +60 -60
  717. package/smart-filters/index.d.ts +5 -5
  718. package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +56 -56
  719. package/smart-filters/number-filter/number-filter.component.d.ts +52 -52
  720. package/smart-filters/public-api.d.ts +14 -14
  721. package/smart-filters/smart-filters.component.d.ts +35 -35
  722. package/smart-filters/smart-filters.module.d.ts +37 -37
  723. package/smart-filters/text-filter/text-filter.component.d.ts +28 -28
  724. package/snack-bar/default-snack-bar.component.d.ts +13 -13
  725. package/snack-bar/index.d.ts +5 -5
  726. package/snack-bar/public-api.d.ts +4 -4
  727. package/snack-bar/snack-bar.component.d.ts +12 -12
  728. package/snack-bar/snack-bar.model.d.ts +8 -8
  729. package/snack-bar/snack-bar.module.d.ts +19 -19
  730. package/snack-bar/snack-bar.service.d.ts +24 -24
  731. package/src/core/style/base/typography.scss +1 -1
  732. package/src/core/style/components/textarea.scss +4 -2
  733. package/textarea/index.d.ts +5 -5
  734. package/textarea/public-api.d.ts +2 -2
  735. package/textarea/textarea.component.d.ts +56 -56
  736. package/textarea/textarea.module.d.ts +23 -23
  737. package/textbox/index.d.ts +5 -5
  738. package/textbox/public-api.d.ts +2 -2
  739. package/textbox/textbox-validation.directive.d.ts +22 -22
  740. package/textbox/textbox.component.d.ts +157 -154
  741. package/textbox/textbox.module.d.ts +22 -22
  742. package/textbox-icon/index.d.ts +5 -5
  743. package/textbox-icon/public-api.d.ts +2 -2
  744. package/textbox-icon/textbox-icon.component.d.ts +13 -13
  745. package/textbox-icon/textbox-icon.module.d.ts +16 -16
  746. package/theming-offline.scss +79 -0
  747. package/theming.scss +4 -31
  748. package/top-bar/index.d.ts +5 -5
  749. package/top-bar/public-api.d.ts +3 -3
  750. package/top-bar/top-bar.component.d.ts +39 -39
  751. package/top-bar/top-bar.model.d.ts +4 -4
  752. package/top-bar/top-bar.module.d.ts +18 -18
@@ -1,325 +1,325 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, HostBinding, } from '@angular/core';
2
- import { PepCustomizationService, DEFAULT_HORIZONTAL_ALIGNMENT, PepTextboxField, } from '@pepperi-addons/ngx-lib';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@pepperi-addons/ngx-lib";
5
- import * as i2 from "@ngx-translate/core";
6
- import * as i3 from "./link.pipes";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "@angular/forms";
9
- import * as i6 from "@angular/material/button";
10
- import * as i7 from "@angular/material/form-field";
11
- import * as i8 from "@angular/material/input";
12
- import * as i9 from "@angular/material/icon";
13
- import * as i10 from "@pepperi-addons/ngx-lib/icon";
14
- import * as i11 from "@pepperi-addons/ngx-lib/field-title";
15
- import * as i12 from "@pepperi-addons/ngx-lib/textbox-icon";
16
- /**
17
- * This is a text box input component that can be use to
18
- *
19
- * @export
20
- * @class PepTextboxComponent
21
- * @implements {OnChanges}
22
- * @implements {OnInit}
23
- * @implements {OnDestroy}
24
- */
25
- export class PepLinkComponent {
26
- constructor(customizationService, renderer, element, translate, utilitiesService, isUrlPipe) {
27
- this.customizationService = customizationService;
28
- this.renderer = renderer;
29
- this.element = element;
30
- this.translate = translate;
31
- this.utilitiesService = utilitiesService;
32
- this.isUrlPipe = isUrlPipe;
33
- this.dataQa = '';
34
- this._key = '';
35
- this._value = '';
36
- this.formattedValue = '';
37
- // private _formattedValue = '';
38
- // /**
39
- // * The formatted value.
40
- // *
41
- // * @memberof PepTextboxComponent
42
- // */
43
- // @Input()
44
- // set formattedValue(value: string) {
45
- // }
46
- // get formattedValue(): string {
47
- // return this._formattedValue;
48
- // }
49
- /**
50
- * The title of the textbox.
51
- *
52
- * @memberof PepTextboxComponent
53
- */
54
- this.label = '';
55
- /**
56
- * The placeholder (relevant only for children - if parent isn't null).
57
- *
58
- * @memberof PepTextboxComponent
59
- */
60
- this.placeholder = '';
61
- /**
62
- * The type of the textbox.
63
- *
64
- * @type {PepTextboxFieldType}
65
- * @memberof PepTextboxComponent
66
- */
67
- this.type = 'link';
68
- /**
69
- * If the textbox is mandatory
70
- *
71
- * @memberof PepTextboxComponent
72
- */
73
- this.mandatory = false;
74
- // TODO: Check if should remove disabled and keep only readonly.
75
- /**
76
- * If the textbox is disabled.
77
- *
78
- * @memberof PepTextboxComponent
79
- */
80
- this.disabled = false;
81
- /**
82
- * If the textbox is readonly
83
- *
84
- * @memberof PepTextboxComponent
85
- */
86
- this.readonly = false;
87
- this.textColor = '';
88
- this.xAlignment = DEFAULT_HORIZONTAL_ALIGNMENT;
89
- this.rowSpan = 1;
90
- // @Input() lastFocusField: any;
91
- this._visible = true;
92
- this.form = null;
93
- this.isActive = false;
94
- this.showTitle = true;
95
- this.renderTitle = true;
96
- this.renderError = true;
97
- this.renderSymbol = true;
98
- this.layoutType = 'form';
99
- /**
100
- * The value change event.
101
- *
102
- * @type {EventEmitter<string>}
103
- * @memberof PepTextboxComponent
104
- */
105
- this.valueChange = new EventEmitter();
106
- // @Output()
107
- // formValidationChange: EventEmitter<boolean> = new EventEmitter<boolean>();
108
- this.elementClick = new EventEmitter();
109
- this._calculateFormattedValue = true;
110
- this.controlType = 'link';
111
- this.standAlone = false;
112
- this.isInEditMode = false;
113
- this.isUrl = false;
114
- this.isInFocus = false;
115
- }
116
- /**
117
- * The text box key
118
- *
119
- * @memberof PepTextboxComponent
120
- */
121
- set key(value) {
122
- this._key = value;
123
- this.dataQa = value;
124
- }
125
- get key() {
126
- return this._key;
127
- }
128
- /**
129
- * The value of the text box.
130
- *
131
- * @memberof PepTextboxComponent
132
- */
133
- set value(value) {
134
- if (!value) {
135
- value = '';
136
- }
137
- this._value = value;
138
- if (this._calculateFormattedValue) {
139
- this.setFormattedValue(value);
140
- }
141
- }
142
- get value() {
143
- return this._value;
144
- }
145
- set visible(visible) {
146
- this._visible = visible;
147
- if (visible) {
148
- this.renderer.removeClass(this.element.nativeElement, 'hidden-element');
149
- }
150
- else {
151
- this.renderer.addClass(this.element.nativeElement, 'hidden-element');
152
- }
153
- }
154
- get visible() {
155
- return this._visible;
156
- }
157
- get calculateFormattedValue() {
158
- return this._calculateFormattedValue;
159
- }
160
- setFormattedValue(value) {
161
- this.formattedValue = value;
162
- this.updateFormFieldValue();
163
- }
164
- updateFormFieldValue() {
165
- this.customizationService.updateFormFieldValue(this.form, this.key, this.formattedValue);
166
- }
167
- get displayValue() {
168
- const res = this.formattedValue;
169
- return res;
170
- }
171
- setDefaultForm() {
172
- const pepField = new PepTextboxField({
173
- key: this.key,
174
- value: this.value,
175
- mandatory: this.mandatory,
176
- readonly: this.readonly,
177
- disabled: this.disabled,
178
- maxFieldCharacters: this.maxFieldCharacters,
179
- type: this.type,
180
- });
181
- this.form = this.customizationService.getDefaultFromGroup(pepField, this.renderError);
182
- }
183
- ngOnInit() {
184
- if (this.form === null) {
185
- this.standAlone = true;
186
- this.setDefaultForm();
187
- this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_CLASS_NAME);
188
- if (!this.renderTitle) {
189
- this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_NO_SPACING_CLASS_NAME);
190
- }
191
- }
192
- this.updateFormFieldValue();
193
- }
194
- ngOnChanges(changes) {
195
- if (this.standAlone) {
196
- this.setDefaultForm();
197
- }
198
- }
199
- ngOnDestroy() {
200
- //
201
- }
202
- onFocus(event) {
203
- this.isInFocus = true;
204
- // select the value in focus (DI-18246 improvement)
205
- setTimeout(() => {
206
- const eventTarget = event.target || event.srcElement;
207
- if (eventTarget) {
208
- eventTarget.select();
209
- }
210
- }, 0);
211
- }
212
- isValueValid(value) {
213
- // TODO: Maybe need to check other types.
214
- const res = true;
215
- return res;
216
- }
217
- onChange(e) {
218
- const value = e.target ? e.target.value : e;
219
- this.valueChange.emit(value);
220
- }
221
- onBlur(e) {
222
- this.isInFocus = false;
223
- const value = e.target ? e.target.value : e;
224
- if (value !== this.value) {
225
- // If renderError is false and the new value is not valid.
226
- if (!this.renderError && !this.isValueValid(value)) {
227
- this.renderer.setProperty(this.input.nativeElement, 'value', this.value);
228
- }
229
- else {
230
- this.value = value;
231
- // If the user is setting the formatted value then set the value till the user format it and return it back.
232
- if (!this._calculateFormattedValue) {
233
- this.formattedValue = value;
234
- }
235
- this.valueChange.emit(value);
236
- }
237
- }
238
- if (this.isInEditMode) {
239
- this.isInEditMode = false;
240
- }
241
- }
242
- onClick() {
243
- const output = {
244
- key: this.key,
245
- value: this.value,
246
- controlType: this.controlType
247
- };
248
- this.elementClick.emit(output);
249
- }
250
- anchorClicked() {
251
- const currentValue = this.value;
252
- if (currentValue.trim().length > 0) {
253
- const output = {
254
- key: this.key,
255
- value: this.value,
256
- controlType: this.controlType
257
- };
258
- this.elementClick.emit(output);
259
- if (this.isUrlPipe.transform(currentValue)) {
260
- window.open(currentValue);
261
- }
262
- }
263
- }
264
- cardTemplateClicked(event) {
265
- this.isInEditMode = true;
266
- setTimeout(() => {
267
- this.input.nativeElement.focus();
268
- }, 0);
269
- }
270
- }
271
- PepLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLinkComponent, deps: [{ token: i1.PepCustomizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.TranslateService }, { token: i1.PepUtilitiesService }, { token: i3.IsUrlPipe }], target: i0.ɵɵFactoryTarget.Component });
272
- PepLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLinkComponent, selector: "pep-link", inputs: { key: "key", value: "value", label: "label", placeholder: "placeholder", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", maxFieldCharacters: "maxFieldCharacters", textColor: "textColor", xAlignment: "xAlignment", rowSpan: "rowSpan", visible: "visible", form: "form", isActive: "isActive", showTitle: "showTitle", renderTitle: "renderTitle", renderError: "renderError", renderSymbol: "renderSymbol", layoutType: "layoutType" }, outputs: { valueChange: "valueChange", elementClick: "elementClick" }, host: { properties: { "attr.data-qa": "this.dataQa" } }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\" let-hasParent=\"hasParent\">\n <pep-field-title *ngIf=\"renderTitle && isFormView && !hasParent\" [label]=\"label\" [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" [maxFieldCharacters]=\"maxFieldCharacters\" [xAlignment]=\"xAlignment\"\n [showTitle]=\"showTitle\" [inputLength]=\"value.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\">\n <input #input pepTextboxValidation [id]=\"key\" [name]=\"key\" class=\" body-sm \" matInput autocomplete=\"off\"\n maxlength=\"{{ maxFieldCharacters > 0 ? maxFieldCharacters : 99999 }}\"\n [placeholder]=\"hasParent && !disabled ? placeholder : ''\"\n [ngStyle]=\"{ color: textColor, 'text-align': xAlignment == 'center' ? 'center' : xAlignment == 'right' ? 'right' : 'left' }\"\n title=\"{{ formattedValue }}\" [formControlName]=\"key\" [type]=\"type\" [value]=\"displayValue\"\n (keyup.enter)=\"$event?.currentTarget?.blur()\" (focus)=\"onFocus($event)\" (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\" [ngClass]=\"{'disable-hidden': disabled && formattedValue?.length > 0}\" />\n\n <span *ngIf=\"disabled && formattedValue?.length > 0\" class=\"dis-grid\">\n <a href=\"javascript:void(0)\" (click)=\"anchorClicked()\" [id]=\"key\" [name]=\"key\"\n class=\"color-link body-sm \">\n {{formattedValue}}</a>\n </span>\n <mat-error *ngIf=\"renderError\">\n <ng-container *ngIf=\"mandatory && input.value.length == 0 then requiredError else otherError\">\n </ng-container>\n <ng-template #requiredError>\n <span class=\"body-xs\" [title]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\"\n [innerText]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\">\n </span>\n </ng-template>\n <ng-template #otherError>\n <!-- TODO: Show error if it's not a valid link -->\n <!-- <span class=\"body-xs\" [title]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\" [innerText]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\">\n </span> -->\n </ng-template>\n </mat-error>\n\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && xAlignment == 'right'\" matPrefix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && (xAlignment == 'left')\" matSuffix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n </mat-form-field>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true, hasParent: false }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngIf=\"isInEditMode; then editBlock; else readOnlyBlock\"></ng-container>\n <ng-template #editBlock>\n <div [ngClass]=\"{'one-row': rowSpan === 1}\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n </ng-container>\n </div>\n </ng-template>\n <ng-template #readOnlyBlock>\n <div class=\"pep-card-input card-flex-container\" [ngStyle]=\"{ color: textColor }\"\n [class]=\"'text-align-' + xAlignment\" [ngClass]=\"{'one-row': rowSpan === 1,\n 'multi-rows': rowSpan > 1,\n 'pep-button weak': isActive && !disabled}\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title\" title=\"{{ label }}\">{{ label\n }}&nbsp;</span>\n <span [id]=\"key\" title=\"{{ formattedValue }}\" class=\"body-sm value\"\n [ngClass]=\"{'multi-rows-text': rowSpan > 1}\" [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\">{{\n formattedValue }}</span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-template>\n\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, hasParent: false }\">\n </ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <a *ngIf=\"formattedValue != null && (value ? value : formattedValue) | isUrl\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n target=\"_blank\" href=\"{{ value ? value : formattedValue }}\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n <a *ngIf=\"formattedValue != null && !((value ? value : formattedValue) | isUrl)\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n href=\"javascript:void(0)\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n </ng-template>\n <ng-template #emptyBlock>\n <span [id]=\"key\">&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center;align-items:baseline}.disable-hidden{display:none}.dis-grid{display:grid}.multi-rows-text{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i11.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }, { kind: "component", type: i12.PepTextboxIconComponent, selector: "pep-textbox-icon", inputs: ["value", "label", "type", "disabled"], outputs: ["iconClick"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.IsUrlPipe, name: "isUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLinkComponent, decorators: [{
274
- type: Component,
275
- args: [{ selector: 'pep-link', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\" let-hasParent=\"hasParent\">\n <pep-field-title *ngIf=\"renderTitle && isFormView && !hasParent\" [label]=\"label\" [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" [maxFieldCharacters]=\"maxFieldCharacters\" [xAlignment]=\"xAlignment\"\n [showTitle]=\"showTitle\" [inputLength]=\"value.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\">\n <input #input pepTextboxValidation [id]=\"key\" [name]=\"key\" class=\" body-sm \" matInput autocomplete=\"off\"\n maxlength=\"{{ maxFieldCharacters > 0 ? maxFieldCharacters : 99999 }}\"\n [placeholder]=\"hasParent && !disabled ? placeholder : ''\"\n [ngStyle]=\"{ color: textColor, 'text-align': xAlignment == 'center' ? 'center' : xAlignment == 'right' ? 'right' : 'left' }\"\n title=\"{{ formattedValue }}\" [formControlName]=\"key\" [type]=\"type\" [value]=\"displayValue\"\n (keyup.enter)=\"$event?.currentTarget?.blur()\" (focus)=\"onFocus($event)\" (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\" [ngClass]=\"{'disable-hidden': disabled && formattedValue?.length > 0}\" />\n\n <span *ngIf=\"disabled && formattedValue?.length > 0\" class=\"dis-grid\">\n <a href=\"javascript:void(0)\" (click)=\"anchorClicked()\" [id]=\"key\" [name]=\"key\"\n class=\"color-link body-sm \">\n {{formattedValue}}</a>\n </span>\n <mat-error *ngIf=\"renderError\">\n <ng-container *ngIf=\"mandatory && input.value.length == 0 then requiredError else otherError\">\n </ng-container>\n <ng-template #requiredError>\n <span class=\"body-xs\" [title]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\"\n [innerText]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\">\n </span>\n </ng-template>\n <ng-template #otherError>\n <!-- TODO: Show error if it's not a valid link -->\n <!-- <span class=\"body-xs\" [title]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\" [innerText]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\">\n </span> -->\n </ng-template>\n </mat-error>\n\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && xAlignment == 'right'\" matPrefix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && (xAlignment == 'left')\" matSuffix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n </mat-form-field>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true, hasParent: false }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngIf=\"isInEditMode; then editBlock; else readOnlyBlock\"></ng-container>\n <ng-template #editBlock>\n <div [ngClass]=\"{'one-row': rowSpan === 1}\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n </ng-container>\n </div>\n </ng-template>\n <ng-template #readOnlyBlock>\n <div class=\"pep-card-input card-flex-container\" [ngStyle]=\"{ color: textColor }\"\n [class]=\"'text-align-' + xAlignment\" [ngClass]=\"{'one-row': rowSpan === 1,\n 'multi-rows': rowSpan > 1,\n 'pep-button weak': isActive && !disabled}\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title\" title=\"{{ label }}\">{{ label\n }}&nbsp;</span>\n <span [id]=\"key\" title=\"{{ formattedValue }}\" class=\"body-sm value\"\n [ngClass]=\"{'multi-rows-text': rowSpan > 1}\" [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\">{{\n formattedValue }}</span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-template>\n\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, hasParent: false }\">\n </ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <a *ngIf=\"formattedValue != null && (value ? value : formattedValue) | isUrl\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n target=\"_blank\" href=\"{{ value ? value : formattedValue }}\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n <a *ngIf=\"formattedValue != null && !((value ? value : formattedValue) | isUrl)\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n href=\"javascript:void(0)\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n </ng-template>\n <ng-template #emptyBlock>\n <span [id]=\"key\">&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center;align-items:baseline}.disable-hidden{display:none}.dis-grid{display:grid}.multi-rows-text{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal!important}\n"] }]
276
- }], ctorParameters: function () { return [{ type: i1.PepCustomizationService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.TranslateService }, { type: i1.PepUtilitiesService }, { type: i3.IsUrlPipe }]; }, propDecorators: { dataQa: [{
277
- type: HostBinding,
278
- args: ['attr.data-qa']
279
- }], key: [{
280
- type: Input
281
- }], value: [{
282
- type: Input
283
- }], label: [{
284
- type: Input
285
- }], placeholder: [{
286
- type: Input
287
- }], mandatory: [{
288
- type: Input
289
- }], disabled: [{
290
- type: Input
291
- }], readonly: [{
292
- type: Input
293
- }], maxFieldCharacters: [{
294
- type: Input
295
- }], textColor: [{
296
- type: Input
297
- }], xAlignment: [{
298
- type: Input
299
- }], rowSpan: [{
300
- type: Input
301
- }], visible: [{
302
- type: Input
303
- }], form: [{
304
- type: Input
305
- }], isActive: [{
306
- type: Input
307
- }], showTitle: [{
308
- type: Input
309
- }], renderTitle: [{
310
- type: Input
311
- }], renderError: [{
312
- type: Input
313
- }], renderSymbol: [{
314
- type: Input
315
- }], layoutType: [{
316
- type: Input
317
- }], valueChange: [{
318
- type: Output
319
- }], elementClick: [{
320
- type: Output
321
- }], input: [{
322
- type: ViewChild,
323
- args: ['input']
324
- }] } });
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, HostBinding, } from '@angular/core';
2
+ import { PepCustomizationService, DEFAULT_HORIZONTAL_ALIGNMENT, PepTextboxField, } from '@pepperi-addons/ngx-lib';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@pepperi-addons/ngx-lib";
5
+ import * as i2 from "@ngx-translate/core";
6
+ import * as i3 from "./link.pipes";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@angular/forms";
9
+ import * as i6 from "@angular/material/button";
10
+ import * as i7 from "@angular/material/form-field";
11
+ import * as i8 from "@angular/material/input";
12
+ import * as i9 from "@angular/material/icon";
13
+ import * as i10 from "@pepperi-addons/ngx-lib/icon";
14
+ import * as i11 from "@pepperi-addons/ngx-lib/field-title";
15
+ import * as i12 from "@pepperi-addons/ngx-lib/textbox-icon";
16
+ /**
17
+ * This is a text box input component that can be use to
18
+ *
19
+ * @export
20
+ * @class PepTextboxComponent
21
+ * @implements {OnChanges}
22
+ * @implements {OnInit}
23
+ * @implements {OnDestroy}
24
+ */
25
+ export class PepLinkComponent {
26
+ constructor(customizationService, renderer, element, translate, utilitiesService, isUrlPipe) {
27
+ this.customizationService = customizationService;
28
+ this.renderer = renderer;
29
+ this.element = element;
30
+ this.translate = translate;
31
+ this.utilitiesService = utilitiesService;
32
+ this.isUrlPipe = isUrlPipe;
33
+ this.dataQa = '';
34
+ this._key = '';
35
+ this._value = '';
36
+ this.formattedValue = '';
37
+ // private _formattedValue = '';
38
+ // /**
39
+ // * The formatted value.
40
+ // *
41
+ // * @memberof PepTextboxComponent
42
+ // */
43
+ // @Input()
44
+ // set formattedValue(value: string) {
45
+ // }
46
+ // get formattedValue(): string {
47
+ // return this._formattedValue;
48
+ // }
49
+ /**
50
+ * The title of the textbox.
51
+ *
52
+ * @memberof PepTextboxComponent
53
+ */
54
+ this.label = '';
55
+ /**
56
+ * The placeholder (relevant only for children - if parent isn't null).
57
+ *
58
+ * @memberof PepTextboxComponent
59
+ */
60
+ this.placeholder = '';
61
+ /**
62
+ * The type of the textbox.
63
+ *
64
+ * @type {PepTextboxFieldType}
65
+ * @memberof PepTextboxComponent
66
+ */
67
+ this.type = 'link';
68
+ /**
69
+ * If the textbox is mandatory
70
+ *
71
+ * @memberof PepTextboxComponent
72
+ */
73
+ this.mandatory = false;
74
+ // TODO: Check if should remove disabled and keep only readonly.
75
+ /**
76
+ * If the textbox is disabled.
77
+ *
78
+ * @memberof PepTextboxComponent
79
+ */
80
+ this.disabled = false;
81
+ /**
82
+ * If the textbox is readonly
83
+ *
84
+ * @memberof PepTextboxComponent
85
+ */
86
+ this.readonly = false;
87
+ this.textColor = '';
88
+ this.xAlignment = DEFAULT_HORIZONTAL_ALIGNMENT;
89
+ this.rowSpan = 1;
90
+ // @Input() lastFocusField: any;
91
+ this._visible = true;
92
+ this.form = null;
93
+ this.isActive = false;
94
+ this.showTitle = true;
95
+ this.renderTitle = true;
96
+ this.renderError = true;
97
+ this.renderSymbol = true;
98
+ this.layoutType = 'form';
99
+ /**
100
+ * The value change event.
101
+ *
102
+ * @type {EventEmitter<string>}
103
+ * @memberof PepTextboxComponent
104
+ */
105
+ this.valueChange = new EventEmitter();
106
+ // @Output()
107
+ // formValidationChange: EventEmitter<boolean> = new EventEmitter<boolean>();
108
+ this.elementClick = new EventEmitter();
109
+ this._calculateFormattedValue = true;
110
+ this.controlType = 'link';
111
+ this.standAlone = false;
112
+ this.isInEditMode = false;
113
+ this.isUrl = false;
114
+ this.isInFocus = false;
115
+ }
116
+ /**
117
+ * The text box key
118
+ *
119
+ * @memberof PepTextboxComponent
120
+ */
121
+ set key(value) {
122
+ this._key = value;
123
+ this.dataQa = value;
124
+ }
125
+ get key() {
126
+ return this._key;
127
+ }
128
+ /**
129
+ * The value of the text box.
130
+ *
131
+ * @memberof PepTextboxComponent
132
+ */
133
+ set value(value) {
134
+ if (!value) {
135
+ value = '';
136
+ }
137
+ this._value = value;
138
+ if (this._calculateFormattedValue) {
139
+ this.setFormattedValue(value);
140
+ }
141
+ }
142
+ get value() {
143
+ return this._value;
144
+ }
145
+ set visible(visible) {
146
+ this._visible = visible;
147
+ if (visible) {
148
+ this.renderer.removeClass(this.element.nativeElement, 'hidden-element');
149
+ }
150
+ else {
151
+ this.renderer.addClass(this.element.nativeElement, 'hidden-element');
152
+ }
153
+ }
154
+ get visible() {
155
+ return this._visible;
156
+ }
157
+ get calculateFormattedValue() {
158
+ return this._calculateFormattedValue;
159
+ }
160
+ setFormattedValue(value) {
161
+ this.formattedValue = value;
162
+ this.updateFormFieldValue();
163
+ }
164
+ updateFormFieldValue() {
165
+ this.customizationService.updateFormFieldValue(this.form, this.key, this.formattedValue);
166
+ }
167
+ get displayValue() {
168
+ const res = this.formattedValue;
169
+ return res;
170
+ }
171
+ setDefaultForm() {
172
+ const pepField = new PepTextboxField({
173
+ key: this.key,
174
+ value: this.value,
175
+ mandatory: this.mandatory,
176
+ readonly: this.readonly,
177
+ disabled: this.disabled,
178
+ maxFieldCharacters: this.maxFieldCharacters,
179
+ type: this.type,
180
+ });
181
+ this.form = this.customizationService.getDefaultFromGroup(pepField, this.renderError);
182
+ }
183
+ ngOnInit() {
184
+ if (this.form === null) {
185
+ this.standAlone = true;
186
+ this.setDefaultForm();
187
+ this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_CLASS_NAME);
188
+ if (!this.renderTitle) {
189
+ this.renderer.addClass(this.element.nativeElement, PepCustomizationService.STAND_ALONE_FIELD_NO_SPACING_CLASS_NAME);
190
+ }
191
+ }
192
+ this.updateFormFieldValue();
193
+ }
194
+ ngOnChanges(changes) {
195
+ if (this.standAlone) {
196
+ this.setDefaultForm();
197
+ }
198
+ }
199
+ ngOnDestroy() {
200
+ //
201
+ }
202
+ onFocus(event) {
203
+ this.isInFocus = true;
204
+ // select the value in focus (DI-18246 improvement)
205
+ setTimeout(() => {
206
+ const eventTarget = event.target || event.srcElement;
207
+ if (eventTarget) {
208
+ eventTarget.select();
209
+ }
210
+ }, 0);
211
+ }
212
+ isValueValid(value) {
213
+ // TODO: Maybe need to check other types.
214
+ const res = true;
215
+ return res;
216
+ }
217
+ onChange(e) {
218
+ const value = e.target ? e.target.value : e;
219
+ this.valueChange.emit(value);
220
+ }
221
+ onBlur(e) {
222
+ this.isInFocus = false;
223
+ const value = e.target ? e.target.value : e;
224
+ if (value !== this.value) {
225
+ // If renderError is false and the new value is not valid.
226
+ if (!this.renderError && !this.isValueValid(value)) {
227
+ this.renderer.setProperty(this.input.nativeElement, 'value', this.value);
228
+ }
229
+ else {
230
+ this.value = value;
231
+ // If the user is setting the formatted value then set the value till the user format it and return it back.
232
+ if (!this._calculateFormattedValue) {
233
+ this.formattedValue = value;
234
+ }
235
+ this.valueChange.emit(value);
236
+ }
237
+ }
238
+ if (this.isInEditMode) {
239
+ this.isInEditMode = false;
240
+ }
241
+ }
242
+ onClick() {
243
+ const output = {
244
+ key: this.key,
245
+ value: this.value,
246
+ controlType: this.controlType
247
+ };
248
+ this.elementClick.emit(output);
249
+ }
250
+ anchorClicked() {
251
+ const currentValue = this.value;
252
+ if (currentValue.trim().length > 0) {
253
+ const output = {
254
+ key: this.key,
255
+ value: this.value,
256
+ controlType: this.controlType
257
+ };
258
+ this.elementClick.emit(output);
259
+ if (this.isUrlPipe.transform(currentValue)) {
260
+ window.open(currentValue);
261
+ }
262
+ }
263
+ }
264
+ cardTemplateClicked(event) {
265
+ this.isInEditMode = true;
266
+ setTimeout(() => {
267
+ this.input.nativeElement.focus();
268
+ }, 0);
269
+ }
270
+ }
271
+ PepLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLinkComponent, deps: [{ token: i1.PepCustomizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.TranslateService }, { token: i1.PepUtilitiesService }, { token: i3.IsUrlPipe }], target: i0.ɵɵFactoryTarget.Component });
272
+ PepLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLinkComponent, selector: "pep-link", inputs: { key: "key", value: "value", label: "label", placeholder: "placeholder", mandatory: "mandatory", disabled: "disabled", readonly: "readonly", maxFieldCharacters: "maxFieldCharacters", textColor: "textColor", xAlignment: "xAlignment", rowSpan: "rowSpan", visible: "visible", form: "form", isActive: "isActive", showTitle: "showTitle", renderTitle: "renderTitle", renderError: "renderError", renderSymbol: "renderSymbol", layoutType: "layoutType" }, outputs: { valueChange: "valueChange", elementClick: "elementClick" }, host: { properties: { "attr.data-qa": "this.dataQa" } }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\" let-hasParent=\"hasParent\">\n <pep-field-title *ngIf=\"renderTitle && isFormView && !hasParent\" [label]=\"label\" [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" [maxFieldCharacters]=\"maxFieldCharacters\" [xAlignment]=\"xAlignment\"\n [showTitle]=\"showTitle\" [inputLength]=\"value.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\">\n <input #input pepTextboxValidation [id]=\"key\" [name]=\"key\" class=\" body-sm \" matInput autocomplete=\"off\"\n maxlength=\"{{ maxFieldCharacters > 0 ? maxFieldCharacters : 99999 }}\"\n [placeholder]=\"hasParent && !disabled ? placeholder : ''\"\n [ngStyle]=\"{ color: textColor, 'text-align': xAlignment == 'center' ? 'center' : xAlignment == 'right' ? 'right' : 'left' }\"\n title=\"{{ formattedValue }}\" [formControlName]=\"key\" [type]=\"type\" [value]=\"displayValue\"\n (keyup.enter)=\"$event?.currentTarget?.blur()\" (focus)=\"onFocus($event)\" (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\" [ngClass]=\"{'disable-hidden': disabled && formattedValue?.length > 0}\" />\n\n <span *ngIf=\"disabled && formattedValue?.length > 0\" class=\"dis-grid\">\n <a href=\"javascript:void(0)\" (click)=\"anchorClicked()\" [id]=\"key\" [name]=\"key\"\n class=\"color-link body-sm \">\n {{formattedValue}}</a>\n </span>\n <mat-error *ngIf=\"renderError\">\n <ng-container *ngIf=\"mandatory && input.value.length == 0 then requiredError else otherError\">\n </ng-container>\n <ng-template #requiredError>\n <span class=\"body-xs\" [title]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\"\n [innerText]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\">\n </span>\n </ng-template>\n <ng-template #otherError>\n <!-- TODO: Show error if it's not a valid link -->\n <!-- <span class=\"body-xs\" [title]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\" [innerText]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\">\n </span> -->\n </ng-template>\n </mat-error>\n\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && xAlignment == 'right'\" matPrefix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && (xAlignment == 'left')\" matSuffix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n </mat-form-field>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true, hasParent: false }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngIf=\"isInEditMode; then editBlock; else readOnlyBlock\"></ng-container>\n <ng-template #editBlock>\n <div [ngClass]=\"{'one-row': rowSpan === 1}\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n </ng-container>\n </div>\n </ng-template>\n <ng-template #readOnlyBlock>\n <div class=\"pep-card-input card-flex-container\" [ngStyle]=\"{ color: textColor }\"\n [class]=\"'text-align-' + xAlignment\" [ngClass]=\"{'one-row': rowSpan === 1,\n 'multi-rows': rowSpan > 1,\n 'pep-button weak': isActive && !disabled}\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title\" title=\"{{ label }}\">{{ label\n }}&nbsp;</span>\n <span [id]=\"key\" title=\"{{ formattedValue }}\" class=\"body-sm value\"\n [ngClass]=\"{'multi-rows-text': rowSpan > 1}\" [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\">{{\n formattedValue }}</span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-template>\n\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, hasParent: false }\">\n </ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <a *ngIf=\"formattedValue != null && (value ? value : formattedValue) | isUrl\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n target=\"_blank\" href=\"{{ value ? value : formattedValue }}\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n <a *ngIf=\"formattedValue != null && !((value ? value : formattedValue) | isUrl)\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n href=\"javascript:void(0)\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n </ng-template>\n <ng-template #emptyBlock>\n <span [id]=\"key\">&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center;align-items:baseline}.disable-hidden{display:none}.dis-grid{display:grid}.multi-rows-text{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: i11.PepFieldTitleComponent, selector: "pep-field-title", inputs: ["label", "mandatory", "disabled", "maxFieldCharacters", "hint", "xAlignment", "showTitle", "inputLength", "fontBodyType"] }, { kind: "component", type: i12.PepTextboxIconComponent, selector: "pep-textbox-icon", inputs: ["value", "label", "type", "disabled"], outputs: ["iconClick"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.IsUrlPipe, name: "isUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLinkComponent, decorators: [{
274
+ type: Component,
275
+ args: [{ selector: 'pep-link', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [formGroup]=\"form\">\n <ng-template #pepTemplate let-isFormView=\"isFormView\" let-hasParent=\"hasParent\">\n <pep-field-title *ngIf=\"renderTitle && isFormView && !hasParent\" [label]=\"label\" [mandatory]=\"mandatory\"\n [disabled]=\"disabled\" [maxFieldCharacters]=\"maxFieldCharacters\" [xAlignment]=\"xAlignment\"\n [showTitle]=\"showTitle\" [inputLength]=\"value.length\">\n </pep-field-title>\n <mat-form-field appearance=\"outline\">\n <input #input pepTextboxValidation [id]=\"key\" [name]=\"key\" class=\" body-sm \" matInput autocomplete=\"off\"\n maxlength=\"{{ maxFieldCharacters > 0 ? maxFieldCharacters : 99999 }}\"\n [placeholder]=\"hasParent && !disabled ? placeholder : ''\"\n [ngStyle]=\"{ color: textColor, 'text-align': xAlignment == 'center' ? 'center' : xAlignment == 'right' ? 'right' : 'left' }\"\n title=\"{{ formattedValue }}\" [formControlName]=\"key\" [type]=\"type\" [value]=\"displayValue\"\n (keyup.enter)=\"$event?.currentTarget?.blur()\" (focus)=\"onFocus($event)\" (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\" [ngClass]=\"{'disable-hidden': disabled && formattedValue?.length > 0}\" />\n\n <span *ngIf=\"disabled && formattedValue?.length > 0\" class=\"dis-grid\">\n <a href=\"javascript:void(0)\" (click)=\"anchorClicked()\" [id]=\"key\" [name]=\"key\"\n class=\"color-link body-sm \">\n {{formattedValue}}</a>\n </span>\n <mat-error *ngIf=\"renderError\">\n <ng-container *ngIf=\"mandatory && input.value.length == 0 then requiredError else otherError\">\n </ng-container>\n <ng-template #requiredError>\n <span class=\"body-xs\" [title]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\"\n [innerText]=\"('MESSAGES.ERROR_IS_REQUIRED' | translate: { field: label })\">\n </span>\n </ng-template>\n <ng-template #otherError>\n <!-- TODO: Show error if it's not a valid link -->\n <!-- <span class=\"body-xs\" [title]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\" [innerText]=\"(input.value | pepToNumber) > this.maxValue || (input.value | pepToNumber) < this.minValue ?\n ('MESSAGES.ERROR_RANGE_IS_NOT_VALID' | translate: { min: minValue, max: maxValue }) :\n ('MESSAGES.ERROR_IS_NOT_VALID' | translate: { field: label })\">\n </span> -->\n </ng-template>\n </mat-error>\n\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && xAlignment == 'right'\" matPrefix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n <pep-textbox-icon *ngIf=\"renderSymbol && isFormView && (xAlignment == 'left')\" matSuffix [value]=\"value\"\n [label]=\"label\" [type]=\"type\" [disabled]=\"disabled\">\n </pep-textbox-icon>\n </mat-form-field>\n </ng-template>\n\n <ng-container *ngIf=\"layoutType === 'form'\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: true, hasParent: false }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"layoutType === 'card'\">\n <ng-container *ngIf=\"isInEditMode; then editBlock; else readOnlyBlock\"></ng-container>\n <ng-template #editBlock>\n <div [ngClass]=\"{'one-row': rowSpan === 1}\">\n <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n </ng-container>\n </div>\n </ng-template>\n <ng-template #readOnlyBlock>\n <div class=\"pep-card-input card-flex-container\" [ngStyle]=\"{ color: textColor }\"\n [class]=\"'text-align-' + xAlignment\" [ngClass]=\"{'one-row': rowSpan === 1,\n 'multi-rows': rowSpan > 1,\n 'pep-button weak': isActive && !disabled}\"\n (click)=\"!disabled ? cardTemplateClicked($event) : ''\">\n <span *ngIf=\"showTitle && label != ''\" class=\"body-xs title\" title=\"{{ label }}\">{{ label\n }}&nbsp;</span>\n <span [id]=\"key\" title=\"{{ formattedValue }}\" class=\"body-sm value\"\n [ngClass]=\"{'multi-rows-text': rowSpan > 1}\" [ngStyle]=\"{ '-webkit-line-clamp': rowSpan }\">{{\n formattedValue }}</span>\n <button *ngIf=\"isActive && !disabled\" class=\"pep-button weak card-edit-button\" mat-button>\n <mat-icon>\n <pep-icon name=\"system_edit\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n </ng-template>\n\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, hasParent: false }\">\n </ng-container>\n </ng-template>\n <ng-template #notSelectedBlock>\n <ng-container *ngIf=\"formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\"></ng-container>\n <ng-template #notEmptyBlock>\n <a *ngIf=\"formattedValue != null && (value ? value : formattedValue) | isUrl\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n target=\"_blank\" href=\"{{ value ? value : formattedValue }}\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n <a *ngIf=\"formattedValue != null && !((value ? value : formattedValue) | isUrl)\" [id]=\"key\"\n class=\"color-link body-sm pep-report-input\"\n [ngClass]=\"{'disable': (disabled && value === '')}\" title=\"{{ formattedValue }}\"\n href=\"javascript:void(0)\" (click)=\"onClick()\">{{\n formattedValue }}</a>\n </ng-template>\n <ng-template #emptyBlock>\n <span [id]=\"key\">&nbsp;</span>\n </ng-template>\n </ng-template>\n </ng-container>\n\n</ng-container>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center;align-items:baseline}.disable-hidden{display:none}.dis-grid{display:grid}.multi-rows-text{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal!important}\n"] }]
276
+ }], ctorParameters: function () { return [{ type: i1.PepCustomizationService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.TranslateService }, { type: i1.PepUtilitiesService }, { type: i3.IsUrlPipe }]; }, propDecorators: { dataQa: [{
277
+ type: HostBinding,
278
+ args: ['attr.data-qa']
279
+ }], key: [{
280
+ type: Input
281
+ }], value: [{
282
+ type: Input
283
+ }], label: [{
284
+ type: Input
285
+ }], placeholder: [{
286
+ type: Input
287
+ }], mandatory: [{
288
+ type: Input
289
+ }], disabled: [{
290
+ type: Input
291
+ }], readonly: [{
292
+ type: Input
293
+ }], maxFieldCharacters: [{
294
+ type: Input
295
+ }], textColor: [{
296
+ type: Input
297
+ }], xAlignment: [{
298
+ type: Input
299
+ }], rowSpan: [{
300
+ type: Input
301
+ }], visible: [{
302
+ type: Input
303
+ }], form: [{
304
+ type: Input
305
+ }], isActive: [{
306
+ type: Input
307
+ }], showTitle: [{
308
+ type: Input
309
+ }], renderTitle: [{
310
+ type: Input
311
+ }], renderError: [{
312
+ type: Input
313
+ }], renderSymbol: [{
314
+ type: Input
315
+ }], layoutType: [{
316
+ type: Input
317
+ }], valueChange: [{
318
+ type: Output
319
+ }], elementClick: [{
320
+ type: Output
321
+ }], input: [{
322
+ type: ViewChild,
323
+ args: ['input']
324
+ }] } });
325
325
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpbmsvbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2xpbmsvbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixFQUV2QixTQUFTLEVBSVQsV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRTVCLGVBQWUsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHakM7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sZ0JBQWdCO0lBa0t6QixZQUNZLG9CQUE2QyxFQUM3QyxRQUFtQixFQUNuQixPQUFtQixFQUNuQixTQUEyQixFQUMzQixnQkFBcUMsRUFDckMsU0FBb0I7UUFMcEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBdEtILFdBQU0sR0FBRyxFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQWVWLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFzQlYsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDOUIsZ0NBQWdDO1FBQ2hDLE1BQU07UUFDTiwwQkFBMEI7UUFDMUIsS0FBSztRQUNMLG1DQUFtQztRQUNuQyxNQUFNO1FBQ04sV0FBVztRQUNYLHNDQUFzQztRQUV0QyxJQUFJO1FBQ0osaUNBQWlDO1FBQ2pD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Q0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQVNOLFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxZQUFZO3NCQURYLE1BQU07Z0JBR2EsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFJlbmRlcmVyMixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBQZXBUZXh0Ym94RmllbGRUeXBlLFxuICAgIFBlcFRleHRib3hGaWVsZCxcbiAgICBQZXBGaWVsZEJhc2UsXG4gICAgUGVwVXRpbGl0aWVzU2VydmljZSxcbiAgICBJUGVwRmllbGRDbGlja0V2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBJc1VybFBpcGUgfSBmcm9tICcuL2xpbmsucGlwZXMnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSB0ZXh0IGJveCBpbnB1dCBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlIHRvXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFBlcFRleHRib3hDb21wb25lbnRcbiAqIEBpbXBsZW1lbnRzIHtPbkNoYW5nZXN9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGluaycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmsuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpbmsuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGVwTGlua0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcWEnKSBkYXRhUWEgPSAnJztcblxuICAgIHByaXZhdGUgX2tleSA9ICcnO1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGJveCBrZXlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQZXBUZXh0Ym94Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQga2V5KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2tleSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFRYSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHRleHQgYm94LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBlcFRleHRib3hDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9ybWF0dGVkVmFsdWUgPSAnJztcbiAgICAvLyBwcml2YXRlIF9mb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIC8vIC8qKlxuICAgIC8vICAqIFRoZSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAbWVtYmVyb2YgUGVwVGV4dGJveENvbXBvbmVudFxuICAgIC8vICAqL1xuICAgIC8vIEBJbnB1dCgpXG4gICAgLy8gc2V0IGZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgXG4gICAgLy8gfVxuICAgIC8vIGdldCBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkVmFsdWU7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSB0ZXh0Ym94LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBlcFRleHRib3hDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBsYWNlaG9sZGVyIChyZWxldmFudCBvbmx5IGZvciBjaGlsZHJlbiAtIGlmIHBhcmVudCBpc24ndCBudWxsKS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQZXBUZXh0Ym94Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSB0ZXh0Ym94LlxuICAgICAqXG4gICAgICogQHR5cGUge1BlcFRleHRib3hGaWVsZFR5cGV9XG4gICAgICogQG1lbWJlcm9mIFBlcFRleHRib3hDb21wb25lbnRcbiAgICAgKi9cbiAgICB0eXBlOiBQZXBUZXh0Ym94RmllbGRUeXBlID0gJ2xpbmsnO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHRleHRib3ggaXMgbWFuZGF0b3J5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUGVwVGV4dGJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1hbmRhdG9yeSA9IGZhbHNlO1xuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgc2hvdWxkIHJlbW92ZSBkaXNhYmxlZCBhbmQga2VlcCBvbmx5IHJlYWRvbmx5LlxuICAgIC8qKlxuICAgICAqIElmIHRoZSB0ZXh0Ym94IGlzIGRpc2FibGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBlcFRleHRib3hDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHRleHRib3ggaXMgcmVhZG9ubHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQZXBUZXh0Ym94Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBtYXhGaWVsZENoYXJhY3RlcnM6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0ZXh0Q29sb3IgPSAnJztcbiAgICBASW5wdXQoKSB4QWxpZ25tZW50OiBQZXBIb3Jpem9udGFsQWxpZ25tZW50ID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcbiAgICBASW5wdXQoKSByb3dTcGFuID0gMTtcbiAgICAvLyBASW5wdXQoKSBsYXN0Rm9jdXNGaWVsZDogYW55O1xuICAgIFxuICAgIHByaXZhdGUgX3Zpc2libGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcmVuZGVyVGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHJlbmRlckVycm9yID0gdHJ1ZTtcbiAgICBASW5wdXQoKSByZW5kZXJTeW1ib2wgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIGNoYW5nZSBldmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICAgKiBAbWVtYmVyb2YgUGVwVGV4dGJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLy8gQE91dHB1dCgpXG4gICAgLy8gZm9ybVZhbGlkYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGVsZW1lbnRDbGljazogRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlID0gdHJ1ZTtcbiAgICBnZXQgY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb250cm9sVHlwZSA9ICdsaW5rJztcblxuICAgIHN0YW5kQWxvbmUgPSBmYWxzZTtcbiAgICBpc0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICBpc0luRm9jdXM6IGJvb2xlYW47XG4gICAgaXNVcmwgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHV0aWxpdGllc1NlcnZpY2U6IFBlcFV0aWxpdGllc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaXNVcmxQaXBlOiBJc1VybFBpcGVcbiAgICApIHtcbiAgICAgICAgdGhpcy5pc0luRm9jdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtRmllbGRWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZm9ybSxcbiAgICAgICAgICAgIHRoaXMua2V5LFxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcFRleHRib3hGaWVsZCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBtYW5kYXRvcnk6IHRoaXMubWFuZGF0b3J5LFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIG1heEZpZWxkQ2hhcmFjdGVyczogdGhpcy5tYXhGaWVsZENoYXJhY3RlcnMsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAoXG4gICAgICAgICAgICBwZXBGaWVsZCxcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRXJyb3JcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Rm9ybSgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX0NMQVNTX05BTUVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJUaXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRmllbGRWYWx1ZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0luRm9jdXMgPSB0cnVlO1xuXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgdmFsdWUgaW4gZm9jdXMgKERJLTE4MjQ2IGltcHJvdmVtZW50KVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBldmVudFRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgaXNWYWx1ZVZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgLy8gVE9ETzogTWF5YmUgbmVlZCB0byBjaGVjayBvdGhlciB0eXBlcy5cbiAgICAgICAgY29uc3QgcmVzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0ID8gZS50YXJnZXQudmFsdWUgOiBlO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25CbHVyKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5Gb2N1cyA9IGZhbHNlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0ID8gZS50YXJnZXQudmFsdWUgOiBlO1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIC8vIElmIHJlbmRlckVycm9yIGlzIGZhbHNlIGFuZCB0aGUgbmV3IHZhbHVlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJFcnJvciAmJiAhdGhpcy5pc1ZhbHVlVmFsaWQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgc2V0dGluZyB0aGUgZm9ybWF0dGVkIHZhbHVlIHRoZW4gc2V0IHRoZSB2YWx1ZSB0aWxsIHRoZSB1c2VyIGZvcm1hdCBpdCBhbmQgcmV0dXJuIGl0IGJhY2suXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pc0luRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dDogSVBlcEZpZWxkQ2xpY2tFdmVudCA9IHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGFuY2hvckNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dDogSVBlcEZpZWxkQ2xpY2tFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KG91dHB1dCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VybFBpcGUudHJhbnNmb3JtKGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FyZFRlbXBsYXRlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkVkaXRNb2RlID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjcGVwVGVtcGxhdGUgbGV0LWlzRm9ybVZpZXc9XCJpc0Zvcm1WaWV3XCIgbGV0LWhhc1BhcmVudD1cImhhc1BhcmVudFwiPlxuICAgICAgICA8cGVwLWZpZWxkLXRpdGxlICpuZ0lmPVwicmVuZGVyVGl0bGUgJiYgaXNGb3JtVmlldyAmJiAhaGFzUGFyZW50XCIgW2xhYmVsXT1cImxhYmVsXCIgW21hbmRhdG9yeV09XCJtYW5kYXRvcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW21heEZpZWxkQ2hhcmFjdGVyc109XCJtYXhGaWVsZENoYXJhY3RlcnNcIiBbeEFsaWdubWVudF09XCJ4QWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCIgW2lucHV0TGVuZ3RoXT1cInZhbHVlLmxlbmd0aFwiPlxuICAgICAgICA8L3BlcC1maWVsZC10aXRsZT5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8aW5wdXQgI2lucHV0IHBlcFRleHRib3hWYWxpZGF0aW9uIFtpZF09XCJrZXlcIiBbbmFtZV09XCJrZXlcIiBjbGFzcz1cIiBib2R5LXNtIFwiIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwie3sgbWF4RmllbGRDaGFyYWN0ZXJzID4gMCA/IG1heEZpZWxkQ2hhcmFjdGVycyA6IDk5OTk5IH19XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaGFzUGFyZW50ICYmICFkaXNhYmxlZCA/IHBsYWNlaG9sZGVyIDogJydcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHRleHRDb2xvciwgJ3RleHQtYWxpZ24nOiB4QWxpZ25tZW50ID09ICdjZW50ZXInID8gJ2NlbnRlcicgOiB4QWxpZ25tZW50ID09ICdyaWdodCcgPyAncmlnaHQnIDogJ2xlZnQnIH1cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImtleVwiIFt0eXBlXT1cInR5cGVcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiJGV2ZW50Py5jdXJyZW50VGFyZ2V0Py5ibHVyKClcIiAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZS1oaWRkZW4nOiBkaXNhYmxlZCAmJiBmb3JtYXR0ZWRWYWx1ZT8ubGVuZ3RoID4gMH1cIiAvPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRpc2FibGVkICYmIGZvcm1hdHRlZFZhbHVlPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJkaXMtZ3JpZFwiPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiYW5jaG9yQ2xpY2tlZCgpXCIgW2lkXT1cImtleVwiIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItbGluayBib2R5LXNtIFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2Zvcm1hdHRlZFZhbHVlfX08L2E+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicmVuZGVyRXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWFuZGF0b3J5ICYmIGlucHV0LnZhbHVlLmxlbmd0aCA9PSAwIHRoZW4gcmVxdWlyZWRFcnJvciBlbHNlIG90aGVyRXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlcXVpcmVkRXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm9keS14c1wiIFt0aXRsZV09XCIoJ01FU1NBR0VTLkVSUk9SX0lTX1JFUVVJUkVEJyB8IHRyYW5zbGF0ZTogeyBmaWVsZDogbGFiZWwgfSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyVGV4dF09XCIoJ01FU1NBR0VTLkVSUk9SX0lTX1JFUVVJUkVEJyB8IHRyYW5zbGF0ZTogeyBmaWVsZDogbGFiZWwgfSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlckVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRPRE86IFNob3cgZXJyb3IgaWYgaXQncyBub3QgYSB2YWxpZCBsaW5rIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiYm9keS14c1wiIFt0aXRsZV09XCIoaW5wdXQudmFsdWUgfCBwZXBUb051bWJlcikgPiB0aGlzLm1heFZhbHVlIHx8IChpbnB1dC52YWx1ZSB8IHBlcFRvTnVtYmVyKSA8IHRoaXMubWluVmFsdWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTUVTU0FHRVMuRVJST1JfUkFOR0VfSVNfTk9UX1ZBTElEJyB8IHRyYW5zbGF0ZTogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01FU1NBR0VTLkVSUk9SX0lTX05PVF9WQUxJRCcgfCB0cmFuc2xhdGU6IHsgZmllbGQ6IGxhYmVsIH0pXCIgW2lubmVyVGV4dF09XCIoaW5wdXQudmFsdWUgfCBwZXBUb051bWJlcikgPiB0aGlzLm1heFZhbHVlIHx8IChpbnB1dC52YWx1ZSB8IHBlcFRvTnVtYmVyKSA8IHRoaXMubWluVmFsdWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTUVTU0FHRVMuRVJST1JfUkFOR0VfSVNfTk9UX1ZBTElEJyB8IHRyYW5zbGF0ZTogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01FU1NBR0VTLkVSUk9SX0lTX05PVF9WQUxJRCcgfCB0cmFuc2xhdGU6IHsgZmllbGQ6IGxhYmVsIH0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuXG4gICAgICAgICAgICA8cGVwLXRleHRib3gtaWNvbiAqbmdJZj1cInJlbmRlclN5bWJvbCAmJiBpc0Zvcm1WaWV3ICYmIHhBbGlnbm1lbnQgPT0gJ3JpZ2h0J1wiIG1hdFByZWZpeCBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiIFt0eXBlXT1cInR5cGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDwvcGVwLXRleHRib3gtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtdGV4dGJveC1pY29uICpuZ0lmPVwicmVuZGVyU3ltYm9sICYmIGlzRm9ybVZpZXcgJiYgKHhBbGlnbm1lbnQgPT0gJ2xlZnQnKVwiIG1hdFN1ZmZpeCBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiIFt0eXBlXT1cInR5cGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDwvcGVwLXRleHRib3gtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdmb3JtJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGU7IGNvbnRleHQ6IHsgaXNGb3JtVmlldzogdHJ1ZSwgaGFzUGFyZW50OiBmYWxzZSB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdjYXJkJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbkVkaXRNb2RlOyB0aGVuIGVkaXRCbG9jazsgZWxzZSByZWFkT25seUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdEJsb2NrPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J29uZS1yb3cnOiByb3dTcGFuID09PSAxfVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZTsgY29udGV4dDogeyBpc0Zvcm1WaWV3OiBmYWxzZSwgaGFzUGFyZW50OiBmYWxzZSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWFkT25seUJsb2NrPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1jYXJkLWlucHV0IGNhcmQtZmxleC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiB0ZXh0Q29sb3IgfVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIid0ZXh0LWFsaWduLScgKyB4QWxpZ25tZW50XCIgW25nQ2xhc3NdPVwieydvbmUtcm93Jzogcm93U3BhbiA9PT0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGktcm93cyc6IHJvd1NwYW4gPiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZXAtYnV0dG9uIHdlYWsnOiBpc0FjdGl2ZSAmJiAhZGlzYWJsZWR9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkID8gY2FyZFRlbXBsYXRlQ2xpY2tlZCgkZXZlbnQpIDogJydcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dUaXRsZSAmJiBsYWJlbCAhPSAnJ1wiIGNsYXNzPVwiYm9keS14cyB0aXRsZVwiIHRpdGxlPVwie3sgbGFiZWwgfX1cIj57eyBsYWJlbFxuICAgICAgICAgICAgICAgICAgICB9fSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwia2V5XCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIGNsYXNzPVwiYm9keS1zbSB2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbXVsdGktcm93cy10ZXh0Jzogcm93U3BhbiA+IDF9XCIgW25nU3R5bGVdPVwieyAnLXdlYmtpdC1saW5lLWNsYW1wJzogcm93U3BhbiB9XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzQWN0aXZlICYmICFkaXNhYmxlZFwiIGNsYXNzPVwicGVwLWJ1dHRvbiB3ZWFrIGNhcmQtZWRpdC1idXR0b25cIiBtYXQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9lZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAndGFibGUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjdGl2ZSAmJiAhZGlzYWJsZWQ7IHRoZW4gc2VsZWN0ZWRCbG9jazsgZWxzZSBub3RTZWxlY3RlZEJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRCbG9jaz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZTsgY29udGV4dDogeyBpc0Zvcm1WaWV3OiBmYWxzZSwgaGFzUGFyZW50OiBmYWxzZSB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RTZWxlY3RlZEJsb2NrPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1hdHRlZFZhbHVlPy5sZW5ndGggPiAwOyB0aGVuIG5vdEVtcHR5QmxvY2s7IGVsc2UgZW1wdHlCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RFbXB0eUJsb2NrPlxuICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiZm9ybWF0dGVkVmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPyB2YWx1ZSA6IGZvcm1hdHRlZFZhbHVlKSB8IGlzVXJsXCIgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItbGluayBib2R5LXNtIHBlcC1yZXBvcnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGUnOiAoZGlzYWJsZWQgJiYgdmFsdWUgPT09ICcnKX1cIiB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cInt7IHZhbHVlID8gdmFsdWUgOiBmb3JtYXR0ZWRWYWx1ZSB9fVwiIChjbGljayk9XCJvbkNsaWNrKClcIj57e1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImZvcm1hdHRlZFZhbHVlICE9IG51bGwgJiYgISgodmFsdWUgPyB2YWx1ZSA6IGZvcm1hdHRlZFZhbHVlKSB8IGlzVXJsKVwiIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLWxpbmsgYm9keS1zbSBwZXAtcmVwb3J0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlJzogKGRpc2FibGVkICYmIHZhbHVlID09PSAnJyl9XCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwib25DbGljaygpXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUJsb2NrPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZF09XCJrZXlcIj4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L25nLWNvbnRhaW5lcj4iXX0=