@ohioepa/oepa-ui-lib 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/account-search-input/account-search-input.component.mjs +147 -0
  3. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +151 -0
  4. package/esm2022/lib/action-btn/action-btn.component.mjs +70 -0
  5. package/esm2022/lib/action-btn/oepa-action-event.mjs +2 -0
  6. package/esm2022/lib/action-btn/oepa-action.mjs +2 -0
  7. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +21 -0
  8. package/esm2022/lib/address/address.component.mjs +174 -0
  9. package/esm2022/lib/address/oepa-address.service.mjs +64 -0
  10. package/esm2022/lib/address/oepa-form-address.mjs +2 -0
  11. package/esm2022/lib/blank/blank.component.mjs +14 -0
  12. package/esm2022/lib/checkbox/checkbox.component.mjs +33 -0
  13. package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +41 -0
  14. package/esm2022/lib/comment-modal/comment-modal.component.mjs +56 -0
  15. package/esm2022/lib/common-forms.module.mjs +291 -0
  16. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +120 -0
  17. package/esm2022/lib/contact/contact.component.mjs +102 -0
  18. package/esm2022/lib/contact/oepa-form-contact.mjs +2 -0
  19. package/esm2022/lib/date-input/date-input.component.mjs +52 -0
  20. package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +68 -0
  21. package/esm2022/lib/datepicker/datepicker.component.mjs +131 -0
  22. package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +70 -0
  23. package/esm2022/lib/document/document-editor/document-editor.component.mjs +225 -0
  24. package/esm2022/lib/document/document-event-entity-type.mjs +7 -0
  25. package/esm2022/lib/document/document-event-type.mjs +7 -0
  26. package/esm2022/lib/document/document-event.mjs +2 -0
  27. package/esm2022/lib/document/document-group/document-group.component.mjs +210 -0
  28. package/esm2022/lib/document/document-part/document-part.component.mjs +19 -0
  29. package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +296 -0
  30. package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +49 -0
  31. package/esm2022/lib/document/document-section/document-section.component.mjs +226 -0
  32. package/esm2022/lib/document/document.service.mjs +325 -0
  33. package/esm2022/lib/document/group-modal/group-modal.component.mjs +46 -0
  34. package/esm2022/lib/document/part-modal/part-modal.component.mjs +48 -0
  35. package/esm2022/lib/document/portal-document-class.mjs +2 -0
  36. package/esm2022/lib/document/portal-document-group.mjs +2 -0
  37. package/esm2022/lib/document/portal-document-part.mjs +2 -0
  38. package/esm2022/lib/document/portal-document-placeholder.mjs +2 -0
  39. package/esm2022/lib/document/portal-document-section.mjs +2 -0
  40. package/esm2022/lib/document/portal-document-text.mjs +2 -0
  41. package/esm2022/lib/document/portal-document-type.mjs +2 -0
  42. package/esm2022/lib/document/portal-document.mjs +2 -0
  43. package/esm2022/lib/document/portal-email-attachment-type.mjs +2 -0
  44. package/esm2022/lib/document/portal-email-attachment.mjs +2 -0
  45. package/esm2022/lib/document/portal-email-filter.mjs +2 -0
  46. package/esm2022/lib/document/portal-email.mjs +2 -0
  47. package/esm2022/lib/document/section-modal/section-modal.component.mjs +46 -0
  48. package/esm2022/lib/dual-list-box/array.pipes.mjs +71 -0
  49. package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +339 -0
  50. package/esm2022/lib/dual-list-box/items-moved-event.mjs +2 -0
  51. package/esm2022/lib/dual-list-box/list-box-item.mjs +2 -0
  52. package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +62 -0
  53. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +216 -0
  54. package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +38 -0
  55. package/esm2022/lib/edoc-attachment/edocument-attachment-metadata.mjs +2 -0
  56. package/esm2022/lib/edoc-attachment/edocument-attachment.mjs +2 -0
  57. package/esm2022/lib/edoc-attachment/edocument-reference.mjs +2 -0
  58. package/esm2022/lib/entity/entity.service.mjs +104 -0
  59. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +307 -0
  60. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +127 -0
  61. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +304 -0
  62. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +316 -0
  63. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +129 -0
  64. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +311 -0
  65. package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +14 -0
  66. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +126 -0
  67. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +216 -0
  68. package/esm2022/lib/esri-map/esri-map.component.mjs +416 -0
  69. package/esm2022/lib/file-upload/file-upload.component.mjs +148 -0
  70. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +143 -0
  71. package/esm2022/lib/lynx-image-upload/lynx.service.mjs +47 -0
  72. package/esm2022/lib/masks/oepa-create-integer-mask.mjs +39 -0
  73. package/esm2022/lib/masks/oepa-integer-mask-args.mjs +2 -0
  74. package/esm2022/lib/message/message.component.mjs +19 -0
  75. package/esm2022/lib/message/oepa-message-type.mjs +7 -0
  76. package/esm2022/lib/message/oepa-message.mjs +31 -0
  77. package/esm2022/lib/message-list/message-list.component.mjs +24 -0
  78. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +137 -0
  79. package/esm2022/lib/notes-modal/notes-modal.component.mjs +177 -0
  80. package/esm2022/lib/notes-modal/oepa-note-result.mjs +2 -0
  81. package/esm2022/lib/notes-modal/oepa-note.mjs +2 -0
  82. package/esm2022/lib/numeric-input/numeric-input.component.mjs +50 -0
  83. package/esm2022/lib/numeric-input.directive.mjs +76 -0
  84. package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +39 -0
  85. package/esm2022/lib/oepa-forms.service.mjs +199 -0
  86. package/esm2022/lib/oepa-images.mjs +59 -0
  87. package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +29 -0
  88. package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +176 -0
  89. package/esm2022/lib/parameter/parameter.mjs +2 -0
  90. package/esm2022/lib/parameter/parameter.service.mjs +47 -0
  91. package/esm2022/lib/params-help-button/params-help-button.component.mjs +42 -0
  92. package/esm2022/lib/phone-number/phone-number.component.mjs +44 -0
  93. package/esm2022/lib/pin-modal/oepa-attestation.mjs +2 -0
  94. package/esm2022/lib/pin-modal/oepa-pin.mjs +2 -0
  95. package/esm2022/lib/pin-modal/oepa-pin.service.mjs +54 -0
  96. package/esm2022/lib/pin-modal/oepa-security-question.mjs +2 -0
  97. package/esm2022/lib/pin-modal/pin-modal.component.mjs +186 -0
  98. package/esm2022/lib/progress-indicator/progress-info.mjs +2 -0
  99. package/esm2022/lib/select-input/select-input.component.mjs +96 -0
  100. package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +63 -0
  101. package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +54 -0
  102. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.mjs +2 -0
  103. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +190 -0
  104. package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +89 -0
  105. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +126 -0
  106. package/esm2022/lib/table/oepa-p-column.mjs +2 -0
  107. package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +22 -0
  108. package/esm2022/lib/table/oepa-table-cell-click-event.mjs +2 -0
  109. package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +22 -0
  110. package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +22 -0
  111. package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +22 -0
  112. package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +22 -0
  113. package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +22 -0
  114. package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +22 -0
  115. package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +22 -0
  116. package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +22 -0
  117. package/esm2022/lib/table/oepa-table-cell.mjs +2 -0
  118. package/esm2022/lib/table/oepa-table-column.mjs +2 -0
  119. package/esm2022/lib/table/oepa-table-config.mjs +2 -0
  120. package/esm2022/lib/table/oepa-table-filter.mjs +2 -0
  121. package/esm2022/lib/table/oepa-table-filtering.directive.mjs +57 -0
  122. package/esm2022/lib/table/oepa-table-header.mjs +2 -0
  123. package/esm2022/lib/table/oepa-table-page-info.mjs +2 -0
  124. package/esm2022/lib/table/oepa-table-popover.mjs +2 -0
  125. package/esm2022/lib/table/oepa-table-row.mjs +2 -0
  126. package/esm2022/lib/table/oepa-table-sort-criterion.mjs +2 -0
  127. package/esm2022/lib/table/oepa-table-sorting.directive.mjs +57 -0
  128. package/esm2022/lib/table/oepa-table.mjs +2 -0
  129. package/esm2022/lib/table/p-table/p-table.component.mjs +826 -0
  130. package/esm2022/lib/table/table-data-cell/table-data-cell-click-event.mjs +2 -0
  131. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +60 -0
  132. package/esm2022/lib/table/table-export.service.mjs +57 -0
  133. package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +61 -0
  134. package/esm2022/lib/table/table.component.mjs +793 -0
  135. package/esm2022/lib/table/table.service.mjs +112 -0
  136. package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +46 -0
  137. package/esm2022/lib/text-area-input/text-area-input.component.mjs +48 -0
  138. package/esm2022/lib/text-input/text-input.component.mjs +48 -0
  139. package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +31 -0
  140. package/esm2022/lib/timepicker/timepicker.component.mjs +48 -0
  141. package/esm2022/lib/validation/form-validator.mjs +2 -0
  142. package/esm2022/lib/validation/validation.service.mjs +134 -0
  143. package/esm2022/lib/yes-no/yes-no.component.mjs +44 -0
  144. package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +44 -0
  145. package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +41 -0
  146. package/esm2022/lib/zip-code/zip-code.component.mjs +42 -0
  147. package/esm2022/ohioepa-oepa-ui-lib.mjs +5 -0
  148. package/esm2022/public-api.mjs +142 -0
  149. package/fesm2022/ohioepa-oepa-ui-lib.mjs +10720 -0
  150. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -0
  151. package/index.d.ts +5 -0
  152. package/lib/account-search-input/account-search-input.component.d.ts +36 -0
  153. package/lib/account-search-modal/account-search-modal.component.d.ts +40 -0
  154. package/lib/action-btn/action-btn.component.d.ts +34 -0
  155. package/lib/action-btn/oepa-action-event.d.ts +19 -0
  156. package/lib/action-btn/oepa-action.d.ts +13 -0
  157. package/lib/action-btn-modal/action-btn-modal.component.d.ts +12 -0
  158. package/lib/address/address.component.d.ts +43 -0
  159. package/lib/address/oepa-address.service.d.ts +28 -0
  160. package/lib/address/oepa-form-address.d.ts +19 -0
  161. package/lib/blank/blank.component.d.ts +8 -0
  162. package/lib/checkbox/checkbox.component.d.ts +15 -0
  163. package/lib/checkbox-input/checkbox-input.component.d.ts +17 -0
  164. package/lib/comment-modal/comment-modal.component.d.ts +22 -0
  165. package/lib/common-forms.module.d.ts +104 -0
  166. package/lib/confirmation-modal/confirmation-modal.component.d.ts +49 -0
  167. package/lib/contact/contact.component.d.ts +33 -0
  168. package/lib/contact/oepa-form-contact.d.ts +58 -0
  169. package/lib/date-input/date-input.component.d.ts +18 -0
  170. package/lib/date-input-modal/date-input-modal.component.d.ts +25 -0
  171. package/lib/datepicker/datepicker.component.d.ts +28 -0
  172. package/lib/daterangepicker/daterangepicker.component.d.ts +22 -0
  173. package/lib/document/document-editor/document-editor.component.d.ts +34 -0
  174. package/lib/document/document-event-entity-type.d.ts +5 -0
  175. package/lib/document/document-event-type.d.ts +5 -0
  176. package/lib/document/document-event.d.ts +9 -0
  177. package/lib/document/document-group/document-group.component.d.ts +38 -0
  178. package/lib/document/document-part/document-part.component.d.ts +10 -0
  179. package/lib/document/document-part-editor/document-part-editor.component.d.ts +46 -0
  180. package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +19 -0
  181. package/lib/document/document-section/document-section.component.d.ts +37 -0
  182. package/lib/document/document.service.d.ts +90 -0
  183. package/lib/document/group-modal/group-modal.component.d.ts +20 -0
  184. package/lib/document/part-modal/part-modal.component.d.ts +20 -0
  185. package/lib/document/portal-document-class.d.ts +10 -0
  186. package/lib/document/portal-document-group.d.ts +15 -0
  187. package/lib/document/portal-document-part.d.ts +22 -0
  188. package/lib/document/portal-document-placeholder.d.ts +12 -0
  189. package/lib/document/portal-document-section.d.ts +13 -0
  190. package/lib/document/portal-document-text.d.ts +7 -0
  191. package/lib/document/portal-document-type.d.ts +15 -0
  192. package/lib/document/portal-document.d.ts +27 -0
  193. package/lib/document/portal-email-attachment-type.d.ts +6 -0
  194. package/lib/document/portal-email-attachment.d.ts +12 -0
  195. package/lib/document/portal-email-filter.d.ts +12 -0
  196. package/lib/document/portal-email.d.ts +18 -0
  197. package/lib/document/section-modal/section-modal.component.d.ts +20 -0
  198. package/lib/dual-list-box/array.pipes.d.ts +36 -0
  199. package/lib/dual-list-box/dual-list-box.component.d.ts +91 -0
  200. package/lib/dual-list-box/items-moved-event.d.ts +11 -0
  201. package/lib/dual-list-box/list-box-item.d.ts +7 -0
  202. package/lib/ebiz-address/ebiz-address.component.d.ts +23 -0
  203. package/lib/edoc-attachment/edoc-attachment.component.d.ts +44 -0
  204. package/lib/edoc-attachment/edoc-attachment.service.d.ts +16 -0
  205. package/lib/edoc-attachment/edocument-attachment-metadata.d.ts +16 -0
  206. package/lib/edoc-attachment/edocument-attachment.d.ts +12 -0
  207. package/lib/edoc-attachment/edocument-reference.d.ts +5 -0
  208. package/lib/entity/entity.service.d.ts +31 -0
  209. package/lib/entity/organization-create-modal/organization-create-modal.component.d.ts +53 -0
  210. package/lib/entity/organization-search-input/organization-search-input.component.d.ts +34 -0
  211. package/lib/entity/organization-search-modal/organization-search-modal.component.d.ts +56 -0
  212. package/lib/entity/person-create-modal/person-create-modal.component.d.ts +53 -0
  213. package/lib/entity/person-search-input/person-search-input.component.d.ts +34 -0
  214. package/lib/entity/person-search-modal/person-search-modal.component.d.ts +56 -0
  215. package/lib/entity/place-create-modal/place-create-modal.component.d.ts +8 -0
  216. package/lib/entity/place-search-input/place-search-input.component.d.ts +34 -0
  217. package/lib/entity/place-search-modal/place-search-modal.component.d.ts +41 -0
  218. package/lib/esri-map/esri-map.component.d.ts +41 -0
  219. package/lib/file-upload/file-upload.component.d.ts +37 -0
  220. package/lib/lynx-image-upload/lynx-image-upload.component.d.ts +36 -0
  221. package/lib/lynx-image-upload/lynx.service.d.ts +16 -0
  222. package/lib/masks/oepa-create-integer-mask.d.ts +8 -0
  223. package/lib/masks/oepa-integer-mask-args.d.ts +5 -0
  224. package/lib/message/message.component.d.ts +10 -0
  225. package/lib/message/oepa-message-type.d.ts +5 -0
  226. package/lib/message/oepa-message.d.ts +7 -0
  227. package/lib/message-list/message-list.component.d.ts +11 -0
  228. package/lib/multi-file-upload/multi-file-upload.component.d.ts +36 -0
  229. package/lib/notes-modal/notes-modal.component.d.ts +50 -0
  230. package/lib/notes-modal/oepa-note-result.d.ts +10 -0
  231. package/lib/notes-modal/oepa-note.d.ts +13 -0
  232. package/lib/numeric-input/numeric-input.component.d.ts +20 -0
  233. package/lib/numeric-input.directive.d.ts +19 -0
  234. package/lib/oepa-error-message/oepa-error-message.component.d.ts +9 -0
  235. package/lib/oepa-forms.service.d.ts +28 -0
  236. package/lib/oepa-images.d.ts +53 -0
  237. package/lib/oepa-wait-message/oepa-wait-message.component.d.ts +9 -0
  238. package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +63 -0
  239. package/lib/parameter/parameter.d.ts +7 -0
  240. package/lib/parameter/parameter.service.d.ts +18 -0
  241. package/lib/params-help-button/params-help-button.component.d.ts +15 -0
  242. package/lib/phone-number/phone-number.component.d.ts +19 -0
  243. package/lib/pin-modal/oepa-attestation.d.ts +10 -0
  244. package/lib/pin-modal/oepa-pin.d.ts +26 -0
  245. package/lib/pin-modal/oepa-pin.service.d.ts +38 -0
  246. package/lib/pin-modal/oepa-security-question.d.ts +8 -0
  247. package/lib/pin-modal/pin-modal.component.d.ts +46 -0
  248. package/lib/progress-indicator/progress-info.d.ts +4 -0
  249. package/lib/select-input/select-input.component.d.ts +27 -0
  250. package/lib/server-timeout-modal/server-timeout-modal.component.d.ts +23 -0
  251. package/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.d.ts +18 -0
  252. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.d.ts +10 -0
  253. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.d.ts +51 -0
  254. package/lib/shopping-cart/shopping-cart.service.d.ts +44 -0
  255. package/lib/start-end-timepicker/start-end-timepicker.component.d.ts +29 -0
  256. package/lib/table/oepa-p-column.d.ts +4 -0
  257. package/lib/table/oepa-table-cell-classname.pipe.d.ts +9 -0
  258. package/lib/table/oepa-table-cell-click-event.d.ts +15 -0
  259. package/lib/table/oepa-table-cell-colspan.pipe.d.ts +9 -0
  260. package/lib/table/oepa-table-cell-hidden.pipe.d.ts +9 -0
  261. package/lib/table/oepa-table-cell-icon-classname.pipe.d.ts +9 -0
  262. package/lib/table/oepa-table-cell-img-src.pipe.d.ts +9 -0
  263. package/lib/table/oepa-table-cell-inner-html.pipe.d.ts +9 -0
  264. package/lib/table/oepa-table-cell-input-component.pipe.d.ts +9 -0
  265. package/lib/table/oepa-table-cell-not-selectable.pipe.d.ts +9 -0
  266. package/lib/table/oepa-table-cell-value.pipe.d.ts +9 -0
  267. package/lib/table/oepa-table-cell.d.ts +66 -0
  268. package/lib/table/oepa-table-column.d.ts +71 -0
  269. package/lib/table/oepa-table-config.d.ts +72 -0
  270. package/lib/table/oepa-table-filter.d.ts +10 -0
  271. package/lib/table/oepa-table-filtering.directive.d.ts +17 -0
  272. package/lib/table/oepa-table-header.d.ts +9 -0
  273. package/lib/table/oepa-table-page-info.d.ts +22 -0
  274. package/lib/table/oepa-table-popover.d.ts +28 -0
  275. package/lib/table/oepa-table-row.d.ts +84 -0
  276. package/lib/table/oepa-table-sort-criterion.d.ts +4 -0
  277. package/lib/table/oepa-table-sorting.directive.d.ts +16 -0
  278. package/lib/table/oepa-table.d.ts +42 -0
  279. package/lib/table/p-table/p-table.component.d.ts +155 -0
  280. package/lib/table/table-data-cell/table-data-cell-click-event.d.ts +5 -0
  281. package/lib/table/table-data-cell/table-data-cell.component.d.ts +23 -0
  282. package/lib/table/table-export.service.d.ts +33 -0
  283. package/lib/table/table-header-cell/table-header-cell.component.d.ts +24 -0
  284. package/lib/table/table.component.d.ts +144 -0
  285. package/lib/table/table.service.d.ts +28 -0
  286. package/lib/template-confirmation-modal/template-confirmation-modal.component.d.ts +19 -0
  287. package/lib/text-area-input/text-area-input.component.d.ts +19 -0
  288. package/lib/text-input/text-input.component.d.ts +19 -0
  289. package/lib/timeout-modal/timeout-modal.component.d.ts +13 -0
  290. package/lib/timepicker/timepicker.component.d.ts +17 -0
  291. package/lib/validation/form-validator.d.ts +10 -0
  292. package/lib/validation/validation.service.d.ts +16 -0
  293. package/lib/yes-no/yes-no.component.d.ts +19 -0
  294. package/lib/yes-no-boolean/yes-no.component.d.ts +19 -0
  295. package/lib/yes-no-other-input/yes-no-other-input.component.d.ts +18 -0
  296. package/lib/zip-code/zip-code.component.d.ts +19 -0
  297. package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
  298. package/package.json +25 -0
  299. package/public-api.d.ts +138 -0
@@ -0,0 +1,46 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "ngx-bootstrap/modal";
6
+ export class SectionModalComponent {
7
+ fb;
8
+ bsModalRef;
9
+ section;
10
+ label = '';
11
+ onSectionSave = new EventEmitter();
12
+ modalForm;
13
+ constructor(fb, bsModalRef) {
14
+ this.fb = fb;
15
+ this.bsModalRef = bsModalRef;
16
+ }
17
+ ngOnInit() {
18
+ this.createForm();
19
+ }
20
+ createForm() {
21
+ this.modalForm = this.fb.group({
22
+ name: [this.section.name, [Validators.required]]
23
+ });
24
+ }
25
+ save() {
26
+ this.section.name = this.modalForm.get('name')?.value;
27
+ this.onSectionSave.emit(this.section);
28
+ this.bsModalRef.hide();
29
+ }
30
+ cancel() {
31
+ this.bsModalRef.hide();
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SectionModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SectionModalComponent, selector: "oepa-insert-section-modal", inputs: { section: "section", label: "label" }, outputs: { onSectionSave: "onSectionSave" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{label}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div [formGroup]=\"modalForm\">\n <div class=\"row\">\n <div class=\"col-sm-12 form-group\">\n <label>Section Name</label>\n <input class=\"form-control\" id=\"partNameInput\" formControlName=\"name\"/>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"submit\" id=\"saveBtn\" [disabled]=\"modalForm.invalid\" class=\"btn btn-primary mr-1\" (click)=\"save()\">Save</button>\n <button type=\"button\" id=\"cancelBtn\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">Cancel</button>\n </div>", styles: [""], dependencies: [{ kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SectionModalComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'oepa-insert-section-modal', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{label}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div [formGroup]=\"modalForm\">\n <div class=\"row\">\n <div class=\"col-sm-12 form-group\">\n <label>Section Name</label>\n <input class=\"form-control\" id=\"partNameInput\" formControlName=\"name\"/>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"submit\" id=\"saveBtn\" [disabled]=\"modalForm.invalid\" class=\"btn btn-primary mr-1\" (click)=\"save()\">Save</button>\n <button type=\"button\" id=\"cancelBtn\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">Cancel</button>\n </div>" }]
39
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }], propDecorators: { section: [{
40
+ type: Input
41
+ }], label: [{
42
+ type: Input
43
+ }], onSectionSave: [{
44
+ type: Output
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L3NlY3Rpb24tbW9kYWwvc2VjdGlvbi1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L3NlY3Rpb24tbW9kYWwvc2VjdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRcEUsTUFBTSxPQUFPLHFCQUFxQjtJQVFaO0lBQXdCO0lBUG5DLE9BQU8sQ0FBeUI7SUFDaEMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVWLGFBQWEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFbEcsU0FBUyxDQUFhO0lBRTdCLFlBQW9CLEVBQWUsRUFBUyxVQUFzQjtRQUE5QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7SUFFdkUsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQTVCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiw4SkNWbEMsMDVCQW9CUTs7NEZEVksscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLDJCQUEyQjt5R0FLNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9ydGFsRG9jdW1lbnRTZWN0aW9uIH0gZnJvbSAnLi4vcG9ydGFsLWRvY3VtZW50LXNlY3Rpb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1pbnNlcnQtc2VjdGlvbi1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWN0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VjdGlvbi1tb2RhbC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc2VjdGlvbiE6IFBvcnRhbERvY3VtZW50U2VjdGlvbjtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcblxuICBAT3V0cHV0KCkgb25TZWN0aW9uU2F2ZTogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4oKTtcblxuICBwdWJsaWMgbW9kYWxGb3JtITogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5tb2RhbEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsgdGhpcy5zZWN0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5zZWN0aW9uLm5hbWUgPSB0aGlzLm1vZGFsRm9ybS5nZXQoJ25hbWUnKT8udmFsdWU7XG4gICAgdGhpcy5vblNlY3Rpb25TYXZlLmVtaXQodGhpcy5zZWN0aW9uKTtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPnt7bGFiZWx9fTwvaDQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBwdWxsLXJpZ2h0XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWN0aW9uIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJwYXJ0TmFtZUlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGlkPVwic2F2ZUJ0blwiIFtkaXNhYmxlZF09XCJtb2RhbEZvcm0uaW52YWxpZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTFcIiAoY2xpY2spPVwic2F2ZSgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiY2FuY2VsQnRuXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMVwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICA8L2Rpdj4iXX0=
@@ -0,0 +1,71 @@
1
+ import { Pipe } from '@angular/core';
2
+ import orderBy from 'lodash/orderBy';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Utility class to not hardcode sort directions
6
+ */
7
+ export class SortOptions {
8
+ /**
9
+ * Static property to defined ASC and DESC values
10
+ * to avoid hardcoding and repeating
11
+ * replaces string enums
12
+ */
13
+ static direction = {
14
+ ASC: 'ASC',
15
+ DESC: 'DESC'
16
+ };
17
+ }
18
+ /**
19
+ * Pipe used to sort arrays by using lodash
20
+ * Takes array and array of 2 strings(parameters), key and direction
21
+ * direction must be either ASC or DESC
22
+ */
23
+ export class ArraySortPipe {
24
+ transform(array, args) {
25
+ array = array || [];
26
+ if (typeof args === 'undefined' || args.length !== 2) {
27
+ return array;
28
+ }
29
+ const [key, direction] = args;
30
+ if (direction !== SortOptions.direction.ASC && direction !== SortOptions.direction.DESC) {
31
+ return array;
32
+ }
33
+ // if there is no key we assume item is of string type
34
+ return orderBy(array, (item) => item.hasOwnProperty(key) ? item[key] : item, (direction === SortOptions.direction.DESC ? 'desc' : 'asc'));
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
37
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, name: "arraySort" });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, decorators: [{
40
+ type: Pipe,
41
+ args: [{
42
+ name: 'arraySort'
43
+ }]
44
+ }] });
45
+ /**
46
+ * Pipe used to filter array, takes input array and
47
+ * array of 2 arguments, key of object and search term
48
+ * if key does not exist, pipe assumes the item is string
49
+ */
50
+ export class ArrayFilterPipe {
51
+ transform(array, args) {
52
+ array = array || [];
53
+ if (typeof args === 'undefined' || args.length !== 2) {
54
+ return array;
55
+ }
56
+ const [key, searchTerm] = args;
57
+ if (!searchTerm || searchTerm.trim() === '') {
58
+ return array;
59
+ }
60
+ return array.filter((item) => item[key].toString().toLowerCase().search(searchTerm.toLowerCase().trim()) >= 0);
61
+ }
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
63
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, name: "arrayFilter" });
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, decorators: [{
66
+ type: Pipe,
67
+ args: [{
68
+ name: 'arrayFilter'
69
+ }]
70
+ }] });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvYXJyYXkucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXJDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDcEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxTQUFTLEdBR1o7UUFDQSxHQUFHLEVBQUUsS0FBSztRQUNWLElBQUksRUFBRSxNQUFNO0tBQ2YsQ0FBQzs7QUFHTjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFFdEIsU0FBUyxDQUFDLEtBQWlCLEVBQUUsSUFBYztRQUV2QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVwQixJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUosQ0FBQzt3R0FsQlEsYUFBYTtzR0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUh6QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxXQUFXO2lCQUNwQjs7QUFzQkQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBRXhCLFNBQVMsQ0FBQyxLQUFpQixFQUFFLElBQWM7UUFFdkMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFcEIsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUcsQ0FBQztZQUNwRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO3dHQWpCUSxlQUFlO3NHQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBSDNCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGFBQWE7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgdG8gbm90IGhhcmRjb2RlIHNvcnQgZGlyZWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgU29ydE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmVkIEFTQyBhbmQgREVTQyB2YWx1ZXNcbiAgICAgKiB0byBhdm9pZCBoYXJkY29kaW5nIGFuZCByZXBlYXRpbmdcbiAgICAgKiByZXBsYWNlcyBzdHJpbmcgZW51bXNcbiAgICAgKi9cbiAgICBzdGF0aWMgZGlyZWN0aW9uOiB7XG4gICAgICAgIEFTQzogc3RyaW5nLFxuICAgICAgICBERVNDOiBzdHJpbmdcbiAgICB9ID0ge1xuICAgICAgICBBU0M6ICdBU0MnLFxuICAgICAgICBERVNDOiAnREVTQydcbiAgICB9O1xufVxuXG4vKipcbiAqIFBpcGUgdXNlZCB0byBzb3J0IGFycmF5cyBieSB1c2luZyBsb2Rhc2hcbiAqIFRha2VzIGFycmF5IGFuZCBhcnJheSBvZiAyIHN0cmluZ3MocGFyYW1ldGVycyksIGtleSBhbmQgZGlyZWN0aW9uXG4gKiBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgQVNDIG9yIERFU0NcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdhcnJheVNvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U29ydFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHRyYW5zZm9ybShhcnJheTogQXJyYXk8YW55PiwgYXJnczogc3RyaW5nW10pOiBBcnJheTxzdHJpbmc+IHwgQXJyYXk8YW55PiB7XG5cbiAgICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnIHx8IGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gYXJncztcblxuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSBTb3J0T3B0aW9ucy5kaXJlY3Rpb24uQVNDICYmIGRpcmVjdGlvbiAhPT0gU29ydE9wdGlvbnMuZGlyZWN0aW9uLkRFU0MpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGtleSB3ZSBhc3N1bWUgaXRlbSBpcyBvZiBzdHJpbmcgdHlwZVxuICAgICAgICByZXR1cm4gb3JkZXJCeShhcnJheSwgKGl0ZW06IGFueSB8IHN0cmluZykgPT4gaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpID8gaXRlbVtrZXldIDogaXRlbSwgKGRpcmVjdGlvbiA9PT0gU29ydE9wdGlvbnMuZGlyZWN0aW9uLkRFU0MgPyAnZGVzYycgOiAnYXNjJykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQaXBlIHVzZWQgdG8gZmlsdGVyIGFycmF5LCB0YWtlcyBpbnB1dCBhcnJheSBhbmRcbiAqIGFycmF5IG9mIDIgYXJndW1lbnRzLCBrZXkgb2Ygb2JqZWN0IGFuZCBzZWFyY2ggdGVybVxuICogaWYga2V5IGRvZXMgbm90IGV4aXN0LCBwaXBlIGFzc3VtZXMgdGhlIGl0ZW0gaXMgc3RyaW5nXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnYXJyYXlGaWx0ZXInXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5RmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgdHJhbnNmb3JtKGFycmF5OiBBcnJheTxhbnk+LCBhcmdzOiBzdHJpbmdbXSk6IEFycmF5PHN0cmluZz4gfCBBcnJheTxhbnk+IHtcblxuICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcgfHwgYXJncy5sZW5ndGggIT09IDIgKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBba2V5LCBzZWFyY2hUZXJtXSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFzZWFyY2hUZXJtIHx8IHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW2tleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnNlYXJjaChzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkudHJpbSgpKSA+PSAwKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,339 @@
1
+ import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
4
+ import intersectionWith from 'lodash/intersectionWith';
5
+ import differenceWith from 'lodash/differenceWith';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "ngx-toastr";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "./array.pipes";
11
+ /**
12
+ * NOTE: This code is a modified version of the project: https://www.npmjs.com/package/ng2-dual-list-box
13
+ * LICENSE: MIT © [Eldar Granulo](mailto:eldar32@gmail.com)
14
+ */
15
+ export class DualListBoxComponent {
16
+ fb;
17
+ toastr;
18
+ // array of items to display in left box
19
+ set available(items) {
20
+ this.availableItems = [...(items || []).map((item, index) => ({
21
+ value: item[this.valueField].toString(),
22
+ text: item[this.textField]
23
+ }))];
24
+ }
25
+ ;
26
+ // array of items to display in right box
27
+ set selected(items) {
28
+ this.selectedItems = [...(items || []).map((item, index) => ({
29
+ value: item[this.valueField].toString(),
30
+ text: item[this.textField]
31
+ }))];
32
+ }
33
+ ;
34
+ // input to set search term for available list box from the outside
35
+ set availableSearch(searchTerm) {
36
+ this.searchTermAvailable = searchTerm;
37
+ this.availableSearchInputControl.setValue(searchTerm);
38
+ }
39
+ ;
40
+ // input to set search term for selected list box from the outside
41
+ set selectedSearch(searchTerm) {
42
+ this.searchTermSelected = searchTerm;
43
+ this.selectedSearchInputControl.setValue(searchTerm);
44
+ }
45
+ ;
46
+ // field to use for value of option
47
+ valueField = 'id';
48
+ // field to use for displaying option text
49
+ textField = 'name';
50
+ // text to display as title above component
51
+ title = '';
52
+ // time to debounce search output in ms
53
+ debounceTime = 500;
54
+ // show/hide button to move all items between boxes
55
+ moveAllButton = true;
56
+ // text displayed over the available items list box
57
+ availableText = 'Available items';
58
+ // text displayed over the selected items list box
59
+ selectedText = 'Selected items';
60
+ // set placeholder text in available items list box
61
+ availableFilterPlaceholder = 'Filter...';
62
+ // set placeholder text in selected items list box
63
+ selectedFilterPlaceholder = 'Filter...';
64
+ // field to use for html id
65
+ idField = 'id';
66
+ // disable component
67
+ set disabled(disabled) {
68
+ if (this.listBoxForm) {
69
+ if (disabled) {
70
+ this.listBoxForm.disable();
71
+ }
72
+ else {
73
+ this.listBoxForm.enable();
74
+ }
75
+ }
76
+ }
77
+ listSize = 10;
78
+ sortBy = 'text';
79
+ maxSelectableItems = undefined;
80
+ // event called when item or items from available items(left box) is selected
81
+ onAvailableItemSelected = new EventEmitter();
82
+ // event called when item or items from selected items(right box) is selected
83
+ onSelectedItemsSelected = new EventEmitter();
84
+ // event called when items are moved between boxes, returns state of both boxes and item moved
85
+ onItemsMoved = new EventEmitter();
86
+ // private variables to manage class
87
+ searchTermAvailable = '';
88
+ searchTermSelected = '';
89
+ availableItems = [];
90
+ selectedItems = [];
91
+ listBoxForm;
92
+ availableListBoxControl = new FormControl();
93
+ selectedListBoxControl = new FormControl();
94
+ availableSearchInputControl = new FormControl();
95
+ selectedSearchInputControl = new FormControl();
96
+ // control value accessors
97
+ _onChange = (_) => { };
98
+ _onTouched = () => { };
99
+ constructor(fb, toastr) {
100
+ this.fb = fb;
101
+ this.toastr = toastr;
102
+ this.listBoxForm = this.fb.group({
103
+ availableListBox: this.availableListBoxControl,
104
+ selectedListBox: this.selectedListBoxControl,
105
+ availableSearchInput: this.availableSearchInputControl,
106
+ selectedSearchInput: this.selectedSearchInputControl
107
+ });
108
+ }
109
+ ngOnInit() {
110
+ this.availableListBoxControl
111
+ .valueChanges
112
+ .subscribe((items) => this.onAvailableItemSelected.emit(items));
113
+ this.selectedListBoxControl
114
+ .valueChanges
115
+ .subscribe((items) => this.onSelectedItemsSelected.emit(items));
116
+ this.availableSearchInputControl
117
+ .valueChanges.pipe(debounceTime(this.debounceTime), distinctUntilChanged(), tap((search) => this.searchTermAvailable = search)).subscribe();
118
+ this.selectedSearchInputControl
119
+ .valueChanges.pipe(debounceTime(this.debounceTime), distinctUntilChanged(), tap((search) => this.searchTermSelected = search)).subscribe();
120
+ }
121
+ /**
122
+ * Move all items from available to selected
123
+ */
124
+ moveAllItemsToSelected() {
125
+ this.toastr.clear();
126
+ if (!this.availableItems.length) {
127
+ return;
128
+ }
129
+ if (this.maxSelectableItems && (this.availableItems.length + this.selectedItems.length > this.maxSelectableItems)) {
130
+ this.toastr.info('Only ' + this.maxSelectableItems + ' items may be added to ' + this.selectedText, '', { disableTimeOut: false, timeOut: 5000 });
131
+ return;
132
+ }
133
+ this.selectedItems = [...this.selectedItems, ...this.availableItems];
134
+ this.availableItems = [];
135
+ this.onItemsMoved.emit({
136
+ available: this.availableItems,
137
+ selected: this.selectedItems,
138
+ movedItems: this.availableListBoxControl.value,
139
+ from: 'available',
140
+ to: 'selected'
141
+ });
142
+ this.availableListBoxControl.setValue([]);
143
+ this.writeValue(this.getValues());
144
+ }
145
+ /**
146
+ * Move all items from selected to available
147
+ */
148
+ moveAllItemsToAvailable() {
149
+ this.toastr.clear();
150
+ if (!this.selectedItems.length) {
151
+ return;
152
+ }
153
+ this.availableItems = [...this.availableItems, ...this.selectedItems];
154
+ this.selectedItems = [];
155
+ this.onItemsMoved.emit({
156
+ available: this.availableItems,
157
+ selected: this.selectedItems,
158
+ movedItems: this.selectedListBoxControl.value,
159
+ from: 'selected',
160
+ to: 'available'
161
+ });
162
+ this.selectedListBoxControl.setValue([]);
163
+ this.writeValue([]);
164
+ }
165
+ /**
166
+ * Move marked items from available items to selected items
167
+ */
168
+ moveMarkedAvailableItemsToSelected() {
169
+ this.toastr.clear();
170
+ let pendingItems = intersectionWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value);
171
+ if (this.maxSelectableItems && (pendingItems.length + this.selectedItems.length > this.maxSelectableItems)) {
172
+ this.toastr.info('Only ' + this.maxSelectableItems + ' items may be added to ' + this.selectedText, '', { disableTimeOut: false, timeOut: 5000 });
173
+ return;
174
+ }
175
+ // first move items to selected
176
+ this.selectedItems = [...this.selectedItems,
177
+ ...intersectionWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value)];
178
+ // now filter available items to not include marked values
179
+ this.availableItems = [...differenceWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value)];
180
+ // clear marked available items and emit event
181
+ this.onItemsMoved.emit({
182
+ available: this.availableItems,
183
+ selected: this.selectedItems,
184
+ movedItems: this.availableListBoxControl.value,
185
+ from: 'available',
186
+ to: 'selected'
187
+ });
188
+ this.availableListBoxControl.setValue([]);
189
+ this.availableSearchInputControl.setValue('');
190
+ this.writeValue(this.getValues());
191
+ }
192
+ /**
193
+ * Move marked items from selected items to available items
194
+ */
195
+ moveMarkedSelectedItemsToAvailable() {
196
+ this.toastr.clear();
197
+ // first move items to available
198
+ this.availableItems = [...this.availableItems,
199
+ ...intersectionWith(this.selectedItems, this.selectedListBoxControl.value, (item, value) => item.value === value)];
200
+ // now filter available items to not include marked values
201
+ this.selectedItems = [...differenceWith(this.selectedItems, this.selectedListBoxControl.value, (item, value) => item.value === value)];
202
+ // clear marked available items and emit event
203
+ this.onItemsMoved.emit({
204
+ available: this.availableItems,
205
+ selected: this.selectedItems,
206
+ movedItems: this.selectedListBoxControl.value,
207
+ from: 'selected',
208
+ to: 'available'
209
+ });
210
+ this.selectedListBoxControl.setValue([]);
211
+ this.selectedSearchInputControl.setValue('');
212
+ this.writeValue(this.getValues());
213
+ }
214
+ /**
215
+ * Move single item from available to selected
216
+ * @param item
217
+ */
218
+ moveAvailableItemToSelected(item) {
219
+ this.availableItems = this.availableItems.filter((listItem) => listItem.value !== item.value);
220
+ this.selectedItems = [...this.selectedItems, item];
221
+ this.onItemsMoved.emit({
222
+ available: this.availableItems,
223
+ selected: this.selectedItems,
224
+ movedItems: [item.value],
225
+ from: 'available',
226
+ to: 'selected'
227
+ });
228
+ this.availableSearchInputControl.setValue('');
229
+ this.availableListBoxControl.setValue([]);
230
+ this.writeValue(this.getValues());
231
+ }
232
+ /**
233
+ * Move single item from selected to available
234
+ * @param item
235
+ */
236
+ moveSelectedItemToAvailable(item) {
237
+ this.selectedItems = this.selectedItems.filter((listItem) => listItem.value !== item.value);
238
+ this.availableItems = [...this.availableItems, item];
239
+ this.onItemsMoved.emit({
240
+ available: this.availableItems,
241
+ selected: this.selectedItems,
242
+ movedItems: [item.value],
243
+ from: 'selected',
244
+ to: 'available'
245
+ });
246
+ this.selectedSearchInputControl.setValue('');
247
+ this.selectedListBoxControl.setValue([]);
248
+ this.writeValue(this.getValues());
249
+ }
250
+ /**
251
+ * Function to pass to ngFor to improve performance, tracks items
252
+ * by the value field
253
+ * @param index
254
+ * @param item
255
+ */
256
+ trackByValue(index, item) {
257
+ return item[this.valueField];
258
+ }
259
+ /* Methods from ControlValueAccessor interface, required for ngModel and formControlName - begin */
260
+ writeValue(value) {
261
+ if (this.selectedItems && value && value.length > 0) {
262
+ this.selectedItems = [...this.selectedItems,
263
+ ...intersectionWith(this.availableItems, value, (item, val) => item.value === val)];
264
+ this.availableItems = [...differenceWith(this.availableItems, value, (item, val) => item.value === val)];
265
+ }
266
+ this._onChange(value);
267
+ }
268
+ registerOnChange(fn) {
269
+ this._onChange = fn;
270
+ }
271
+ registerOnTouched(fn) {
272
+ this._onTouched = fn;
273
+ }
274
+ /* Methods from ControlValueAccessor interface, required for ngModel and formControlName - end */
275
+ /**
276
+ * Utility method to get values from
277
+ * selected items
278
+ */
279
+ getValues() {
280
+ return (this.selectedItems || []).map((item) => item.value);
281
+ }
282
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DualListBoxComponent, selector: "oepa-dual-list-box", inputs: { available: "available", selected: "selected", availableSearch: "availableSearch", selectedSearch: "selectedSearch", valueField: "valueField", textField: "textField", title: "title", debounceTime: "debounceTime", moveAllButton: "moveAllButton", availableText: "availableText", selectedText: "selectedText", availableFilterPlaceholder: "availableFilterPlaceholder", selectedFilterPlaceholder: "selectedFilterPlaceholder", idField: "idField", disabled: "disabled", listSize: "listSize", sortBy: "sortBy", maxSelectableItems: "maxSelectableItems" }, outputs: { onAvailableItemSelected: "onAvailableItemSelected", onSelectedItemsSelected: "onSelectedItemsSelected", onItemsMoved: "onItemsMoved" }, providers: [{
284
+ provide: NG_VALUE_ACCESSOR,
285
+ useExisting: forwardRef(() => DualListBoxComponent),
286
+ multi: true
287
+ }], ngImport: i0, template: "<div class=\"row\" [formGroup]=\"listBoxForm\">\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{availableText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{availableFilterPlaceholder}}\"\n formControlName=\"availableSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"availableListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of availableItems | arrayFilter:['text', searchTermAvailable] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n [id]=\"item?.value+'Option'\"\n (dblclick)=\"moveAvailableItemToSelected(item)\">{{item?.text}}</option>\n </select>\n </div>\n <div class=\"col-md-2 col-lg-2 col-sm-12 center-block text-center\">\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atr top80 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToSelected()\">\n <span class=\"bi bi-list-task\"></span>\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 str vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !availableListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneBtn'\"\n (click)=\"moveMarkedAvailableItemsToSelected()\">\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 stl vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !selectedListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneLeftBtn'\"\n (click)=\"moveMarkedSelectedItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atl bottom10 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllLeftBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n <span class=\"bi bi-list-task\"></span>\n </button>\n </div>\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{selectedText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{selectedFilterPlaceholder}}\"\n formControlName=\"selectedSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"selectedListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of selectedItems | arrayFilter:['text', searchTermSelected] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n (dblclick)=\"moveSelectedItemToAvailable(item)\">{{item?.text}}</option>\n </select>\n </div>\n</div>\n", styles: [".list-box{min-height:200px;width:100%}.top100{margin-top:100px}.top80{margin-top:80px}.bottom10{margin-bottom:10px}.vertical-spacing-5{margin-top:5px;margin-bottom:5px}.center-block{min-height:50px}@media only screen and (max-width : 768px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (min-width : 768px) and (max-width : 992px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (max-width : 480px){.sm-spacing{margin-top:10px;margin-bottom:10px}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.ArrayFilterPipe, name: "arrayFilter" }, { kind: "pipe", type: i4.ArraySortPipe, name: "arraySort" }] });
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, decorators: [{
290
+ type: Component,
291
+ args: [{ selector: 'oepa-dual-list-box', providers: [{
292
+ provide: NG_VALUE_ACCESSOR,
293
+ useExisting: forwardRef(() => DualListBoxComponent),
294
+ multi: true
295
+ }], template: "<div class=\"row\" [formGroup]=\"listBoxForm\">\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{availableText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{availableFilterPlaceholder}}\"\n formControlName=\"availableSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"availableListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of availableItems | arrayFilter:['text', searchTermAvailable] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n [id]=\"item?.value+'Option'\"\n (dblclick)=\"moveAvailableItemToSelected(item)\">{{item?.text}}</option>\n </select>\n </div>\n <div class=\"col-md-2 col-lg-2 col-sm-12 center-block text-center\">\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atr top80 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToSelected()\">\n <span class=\"bi bi-list-task\"></span>\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 str vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !availableListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneBtn'\"\n (click)=\"moveMarkedAvailableItemsToSelected()\">\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 stl vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !selectedListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneLeftBtn'\"\n (click)=\"moveMarkedSelectedItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atl bottom10 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllLeftBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n <span class=\"bi bi-list-task\"></span>\n </button>\n </div>\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{selectedText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{selectedFilterPlaceholder}}\"\n formControlName=\"selectedSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"selectedListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of selectedItems | arrayFilter:['text', searchTermSelected] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n (dblclick)=\"moveSelectedItemToAvailable(item)\">{{item?.text}}</option>\n </select>\n </div>\n</div>\n", styles: [".list-box{min-height:200px;width:100%}.top100{margin-top:100px}.top80{margin-top:80px}.bottom10{margin-bottom:10px}.vertical-spacing-5{margin-top:5px;margin-bottom:5px}.center-block{min-height:50px}@media only screen and (max-width : 768px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (min-width : 768px) and (max-width : 992px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (max-width : 480px){.sm-spacing{margin-top:10px;margin-bottom:10px}}\n"] }]
296
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastrService }], propDecorators: { available: [{
297
+ type: Input
298
+ }], selected: [{
299
+ type: Input
300
+ }], availableSearch: [{
301
+ type: Input
302
+ }], selectedSearch: [{
303
+ type: Input
304
+ }], valueField: [{
305
+ type: Input
306
+ }], textField: [{
307
+ type: Input
308
+ }], title: [{
309
+ type: Input
310
+ }], debounceTime: [{
311
+ type: Input
312
+ }], moveAllButton: [{
313
+ type: Input
314
+ }], availableText: [{
315
+ type: Input
316
+ }], selectedText: [{
317
+ type: Input
318
+ }], availableFilterPlaceholder: [{
319
+ type: Input
320
+ }], selectedFilterPlaceholder: [{
321
+ type: Input
322
+ }], idField: [{
323
+ type: Input
324
+ }], disabled: [{
325
+ type: Input
326
+ }], listSize: [{
327
+ type: Input
328
+ }], sortBy: [{
329
+ type: Input
330
+ }], maxSelectableItems: [{
331
+ type: Input
332
+ }], onAvailableItemSelected: [{
333
+ type: Output
334
+ }], onSelectedItemsSelected: [{
335
+ type: Output
336
+ }], onItemsMoved: [{
337
+ type: Output
338
+ }] } });
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1saXN0LWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvZHVhbC1saXN0LWJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvZHVhbC1saXN0LWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQTBCLFdBQVcsRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsWUFBWSxFQUFPLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTlFLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUVuRDs7O0dBR0c7QUFZSCxNQUFNLE9BQU8sb0JBQW9CO0lBb0ZaO0lBQXlCO0lBbEY1Qyx3Q0FBd0M7SUFDeEMsSUFBYSxTQUFTLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7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VTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUdJLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIHJlcXVpcmU6IGFueTtcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IElJdGVtc01vdmVkRXZlbnQgfSBmcm9tICcuL2l0ZW1zLW1vdmVkLWV2ZW50JztcbmltcG9ydCB7IElMaXN0Qm94SXRlbSB9IGZyb20gJy4vbGlzdC1ib3gtaXRlbSc7XG5pbXBvcnQgaW50ZXJzZWN0aW9uV2l0aCBmcm9tICdsb2Rhc2gvaW50ZXJzZWN0aW9uV2l0aCc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnbG9kYXNoL2RpZmZlcmVuY2VXaXRoJztcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGNvZGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9uZzItZHVhbC1saXN0LWJveFxuICogTElDRU5TRTogTUlUIMKpIFtFbGRhciBHcmFudWxvXShtYWlsdG86ZWxkYXIzMkBnbWFpbC5jb20pXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1kdWFsLWxpc3QtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R1YWwtbGlzdC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kdWFsLWxpc3QtYm94LmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEdWFsTGlzdEJveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBEdWFsTGlzdEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIC8vIGFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXkgaW4gbGVmdCBib3hcbiAgQElucHV0KCkgc2V0IGF2YWlsYWJsZShpdGVtczogQXJyYXk8YW55Pikge1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi4oaXRlbXMgfHwgW10pLm1hcCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgIHZhbHVlOiBpdGVtW3RoaXMudmFsdWVGaWVsZF0udG9TdHJpbmcoKSxcbiAgICAgICAgICB0ZXh0OiBpdGVtW3RoaXMudGV4dEZpZWxkXVxuICAgICAgfSkpXTtcbiAgfTtcbiAgLy8gYXJyYXkgb2YgaXRlbXMgdG8gZGlzcGxheSBpbiByaWdodCBib3hcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4uKGl0ZW1zIHx8IFtdKS5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogaXRlbVt0aGlzLnZhbHVlRmllbGRdLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGV4dDogaXRlbVt0aGlzLnRleHRGaWVsZF1cbiAgICAgIH0pKV07XG4gIH07XG4gIC8vIGlucHV0IHRvIHNldCBzZWFyY2ggdGVybSBmb3IgYXZhaWxhYmxlIGxpc3QgYm94IGZyb20gdGhlIG91dHNpZGVcbiAgQElucHV0KCkgc2V0IGF2YWlsYWJsZVNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybUF2YWlsYWJsZSA9IHNlYXJjaFRlcm07XG4gICAgICB0aGlzLmF2YWlsYWJsZVNlYXJjaElucHV0Q29udHJvbC5zZXRWYWx1ZShzZWFyY2hUZXJtKTtcbiAgfTtcbiAgLy8gaW5wdXQgdG8gc2V0IHNlYXJjaCB0ZXJtIGZvciBzZWxlY3RlZCBsaXN0IGJveCBmcm9tIHRoZSBvdXRzaWRlXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZFNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybVNlbGVjdGVkID0gc2VhcmNoVGVybTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hJbnB1dENvbnRyb2wuc2V0VmFsdWUoc2VhcmNoVGVybSk7XG4gIH07XG4gIC8vIGZpZWxkIHRvIHVzZSBmb3IgdmFsdWUgb2Ygb3B0aW9uXG4gIEBJbnB1dCgpIHZhbHVlRmllbGQgPSAnaWQnO1xuICAvLyBmaWVsZCB0byB1c2UgZm9yIGRpc3BsYXlpbmcgb3B0aW9uIHRleHRcbiAgQElucHV0KCkgdGV4dEZpZWxkID0gJ25hbWUnO1xuICAvLyB0ZXh0IHRvIGRpc3BsYXkgYXMgdGl0bGUgYWJvdmUgY29tcG9uZW50XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgLy8gdGltZSB0byBkZWJvdW5jZSBzZWFyY2ggb3V0cHV0IGluIG1zXG4gIEBJbnB1dCgpIGRlYm91bmNlVGltZSA9IDUwMDtcbiAgLy8gc2hvdy9oaWRlIGJ1dHRvbiB0byBtb3ZlIGFsbCBpdGVtcyBiZXR3ZWVuIGJveGVzXG4gIEBJbnB1dCgpIG1vdmVBbGxCdXR0b24gPSB0cnVlO1xuICAvLyB0ZXh0IGRpc3BsYXllZCBvdmVyIHRoZSBhdmFpbGFibGUgaXRlbXMgbGlzdCBib3hcbiAgQElucHV0KCkgYXZhaWxhYmxlVGV4dCA9ICdBdmFpbGFibGUgaXRlbXMnO1xuICAvLyB0ZXh0IGRpc3BsYXllZCBvdmVyIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0IGJveFxuICBASW5wdXQoKSBzZWxlY3RlZFRleHQgPSAnU2VsZWN0ZWQgaXRlbXMnO1xuICAvLyBzZXQgcGxhY2Vob2xkZXIgdGV4dCBpbiBhdmFpbGFibGUgaXRlbXMgbGlzdCBib3hcbiAgQElucHV0KCkgYXZhaWxhYmxlRmlsdGVyUGxhY2Vob2xkZXI9ICdGaWx0ZXIuLi4nO1xuICAvLyBzZXQgcGxhY2Vob2xkZXIgdGV4dCBpbiBzZWxlY3RlZCBpdGVtcyBsaXN0IGJveFxuICBASW5wdXQoKSBzZWxlY3RlZEZpbHRlclBsYWNlaG9sZGVyID0gJ0ZpbHRlci4uLic7XG4gIC8vIGZpZWxkIHRvIHVzZSBmb3IgaHRtbCBpZFxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcbiAgLy8gZGlzYWJsZSBjb21wb25lbnRcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICBpZiAodGhpcy5saXN0Qm94Rm9ybSkge1xuICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICB0aGlzLmxpc3RCb3hGb3JtLmRpc2FibGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxpc3RCb3hGb3JtLmVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBASW5wdXQoKSBsaXN0U2l6ZSA9IDEwO1xuXG4gIEBJbnB1dCgpIHNvcnRCeSA9ICd0ZXh0JztcblxuICBASW5wdXQoKSBtYXhTZWxlY3RhYmxlSXRlbXM6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtIG9yIGl0ZW1zIGZyb20gYXZhaWxhYmxlIGl0ZW1zKGxlZnQgYm94KSBpcyBzZWxlY3RlZFxuICBAT3V0cHV0KCkgb25BdmFpbGFibGVJdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx7fSB8IEFycmF5PHt9Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPHt9IHwgQXJyYXk8e30+PigpO1xuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtIG9yIGl0ZW1zIGZyb20gc2VsZWN0ZWQgaXRlbXMocmlnaHQgYm94KSBpcyBzZWxlY3RlZFxuICBAT3V0cHV0KCkgb25TZWxlY3RlZEl0ZW1zU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx7fSB8IEFycmF5PHt9Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPHt9IHwgQXJyYXk8e30+PigpO1xuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtcyBhcmUgbW92ZWQgYmV0d2VlbiBib3hlcywgcmV0dXJucyBzdGF0ZSBvZiBib3RoIGJveGVzIGFuZCBpdGVtIG1vdmVkXG4gIEBPdXRwdXQoKSBvbkl0ZW1zTW92ZWQ6IEV2ZW50RW1pdHRlcjxJSXRlbXNNb3ZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1zTW92ZWRFdmVudD4oKTtcblxuICAvLyBwcml2YXRlIHZhcmlhYmxlcyB0byBtYW5hZ2UgY2xhc3NcbiAgc2VhcmNoVGVybUF2YWlsYWJsZSA9ICcnO1xuICBzZWFyY2hUZXJtU2VsZWN0ZWQgPSAnJztcbiAgYXZhaWxhYmxlSXRlbXM6IEFycmF5PElMaXN0Qm94SXRlbT4gPSBbXTtcbiAgc2VsZWN0ZWRJdGVtczogQXJyYXk8SUxpc3RCb3hJdGVtPiA9IFtdO1xuICBsaXN0Qm94Rm9ybTogRm9ybUdyb3VwO1xuICBhdmFpbGFibGVMaXN0Qm94Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgc2VsZWN0ZWRMaXN0Qm94Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBzZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvLyBjb250cm9sIHZhbHVlIGFjY2Vzc29yc1xuICBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gIF9vblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IocHVibGljIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UpIHsgXG4gICAgdGhpcy5saXN0Qm94Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBhdmFpbGFibGVMaXN0Qm94OiB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLFxuICAgICAgICBzZWxlY3RlZExpc3RCb3g6IHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbCxcbiAgICAgICAgYXZhaWxhYmxlU2VhcmNoSW5wdXQ6IHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLFxuICAgICAgICBzZWxlY3RlZFNlYXJjaElucHV0OiB0aGlzLnNlbGVjdGVkU2VhcmNoSW5wdXRDb250cm9sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IEFycmF5PHt9PikgPT4gdGhpcy5vbkF2YWlsYWJsZUl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW1zKSk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RCb3hDb250cm9sXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IEFycmF5PHt9PikgPT4gdGhpcy5vblNlbGVjdGVkSXRlbXNTZWxlY3RlZC5lbWl0KGl0ZW1zKSk7XG4gICAgdGhpcy5hdmFpbGFibGVTZWFyY2hJbnB1dENvbnRyb2xcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICB0YXAoKHNlYXJjaDogc3RyaW5nKSA9PiB0aGlzLnNlYXJjaFRlcm1BdmFpbGFibGUgPSBzZWFyY2gpXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbFxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHRhcCgoc2VhcmNoOiBzdHJpbmcpID0+IHRoaXMuc2VhcmNoVGVybVNlbGVjdGVkID0gc2VhcmNoKVxuICAgICAgICApLnN1YnNjcmliZSgpO1xuICB9XG4gIC8qKlxuICAgKiBNb3ZlIGFsbCBpdGVtcyBmcm9tIGF2YWlsYWJsZSB0byBzZWxlY3RlZFxuICAgKi9cbiAgbW92ZUFsbEl0ZW1zVG9TZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xuICAgICAgaWYgKCF0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1heFNlbGVjdGFibGVJdGVtcyAmJiAodGhpcy5hdmFpbGFibGVJdGVtcy5sZW5ndGggKyB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdGhpcy5tYXhTZWxlY3RhYmxlSXRlbXMpKSB7XG4gICAgICAgIHRoaXMudG9hc3RyLmluZm8oJ09ubHkgJyArIHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zICsgJyBpdGVtcyBtYXkgYmUgYWRkZWQgdG8gJyArIHRoaXMuc2VsZWN0ZWRUZXh0LCAnJywgeyBkaXNhYmxlVGltZU91dDogZmFsc2UsIHRpbWVPdXQ6IDUwMDAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXMsIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXNdO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnYXZhaWxhYmxlJyxcbiAgICAgICAgICB0bzogJ3NlbGVjdGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmdldFZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCBpdGVtcyBmcm9tIHNlbGVjdGVkIHRvIGF2YWlsYWJsZVxuICAgKi9cbiAgbW92ZUFsbEl0ZW1zVG9BdmFpbGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdHIuY2xlYXIoKTtcblxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLCAuLi50aGlzLnNlbGVjdGVkSXRlbXNdO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLm9uSXRlbXNNb3ZlZC5lbWl0KHtcbiAgICAgICAgICBhdmFpbGFibGU6IHRoaXMuYXZhaWxhYmxlSXRlbXMsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICBtb3ZlZEl0ZW1zOiB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgZnJvbTogJ3NlbGVjdGVkJyxcbiAgICAgICAgICB0bzogJ2F2YWlsYWJsZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZExpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShbXSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBtYXJrZWQgaXRlbXMgZnJvbSBhdmFpbGFibGUgaXRlbXMgdG8gc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIG1vdmVNYXJrZWRBdmFpbGFibGVJdGVtc1RvU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdHIuY2xlYXIoKTtcbiAgICBsZXQgcGVuZGluZ0l0ZW1zID0gaW50ZXJzZWN0aW9uV2l0aCh0aGlzLmF2YWlsYWJsZUl0ZW1zLCB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnZhbHVlLCAoaXRlbTogSUxpc3RCb3hJdGVtLCB2YWx1ZTogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zICYmIChwZW5kaW5nSXRlbXMubGVuZ3RoICsgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zKSkge1xuICAgICAgICB0aGlzLnRvYXN0ci5pbmZvKCdPbmx5ICcgKyB0aGlzLm1heFNlbGVjdGFibGVJdGVtcyArICcgaXRlbXMgbWF5IGJlIGFkZGVkIHRvICcgKyB0aGlzLnNlbGVjdGVkVGV4dCwgJycsIHsgZGlzYWJsZVRpbWVPdXQ6IGZhbHNlLCB0aW1lT3V0OiA1MDAwIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaXJzdCBtb3ZlIGl0ZW1zIHRvIHNlbGVjdGVkXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIC4uLmludGVyc2VjdGlvbldpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgICAgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsdWU6IHN0cmluZykgPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpXTtcbiAgICAgIC8vIG5vdyBmaWx0ZXIgYXZhaWxhYmxlIGl0ZW1zIHRvIG5vdCBpbmNsdWRlIG1hcmtlZCB2YWx1ZXNcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICAoaXRlbTogSUxpc3RCb3hJdGVtLCB2YWx1ZTogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSldO1xuICAgICAgLy8gY2xlYXIgbWFya2VkIGF2YWlsYWJsZSBpdGVtcyBhbmQgZW1pdCBldmVudFxuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnYXZhaWxhYmxlJyxcbiAgICAgICAgICB0bzogJ3NlbGVjdGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmdldFZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIG1hcmtlZCBpdGVtcyBmcm9tIHNlbGVjdGVkIGl0ZW1zIHRvIGF2YWlsYWJsZSBpdGVtc1xuICAgKi9cbiAgbW92ZU1hcmtlZFNlbGVjdGVkSXRlbXNUb0F2YWlsYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xuXG4gICAgICAvLyBmaXJzdCBtb3ZlIGl0ZW1zIHRvIGF2YWlsYWJsZVxuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIC4uLmludGVyc2VjdGlvbldpdGgodGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgIChpdGVtOiBJTGlzdEJveEl0ZW0sIHZhbHVlOiBzdHJpbmcpID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKV07XG4gICAgICAvLyBub3cgZmlsdGVyIGF2YWlsYWJsZSBpdGVtcyB0byBub3QgaW5jbHVkZSBtYXJrZWQgdmFsdWVzXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsdWU6IHN0cmluZykgPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpXTtcbiAgICAgIC8vIGNsZWFyIG1hcmtlZCBhdmFpbGFibGUgaXRlbXMgYW5kIGVtaXQgZXZlbnRcbiAgICAgIHRoaXMub25JdGVtc01vdmVkLmVtaXQoe1xuICAgICAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVJdGVtcyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIG1vdmVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnc2VsZWN0ZWQnLFxuICAgICAgICAgIHRvOiAnYXZhaWxhYmxlJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5nZXRWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBzaW5nbGUgaXRlbSBmcm9tIGF2YWlsYWJsZSB0byBzZWxlY3RlZFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgbW92ZUF2YWlsYWJsZUl0ZW1Ub1NlbGVjdGVkKGl0ZW06IElMaXN0Qm94SXRlbSk6IHZvaWQge1xuXG4gICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maWx0ZXIoKGxpc3RJdGVtOiBJTGlzdEJveEl0ZW0pID0+IGxpc3RJdGVtLnZhbHVlICE9PSBpdGVtLnZhbHVlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXMsIGl0ZW1dO1xuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogW2l0ZW0udmFsdWVdLFxuICAgICAgICAgIGZyb206ICdhdmFpbGFibGUnLFxuICAgICAgICAgIHRvOiAnc2VsZWN0ZWQnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGlzdEJveENvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuZ2V0VmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgc2luZ2xlIGl0ZW0gZnJvbSBzZWxlY3RlZCB0byBhdmFpbGFibGVcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIG1vdmVTZWxlY3RlZEl0ZW1Ub0F2YWlsYWJsZShpdGVtOiBJTGlzdEJveEl0ZW0pOiB2b2lkIHtcblxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigobGlzdEl0ZW06IElMaXN0Qm94SXRlbSkgPT4gbGlzdEl0ZW0udmFsdWUgIT09IGl0ZW0udmFsdWUpO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLCBpdGVtXTtcbiAgICAgIHRoaXMub25JdGVtc01vdmVkLmVtaXQoe1xuICAgICAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVJdGVtcyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIG1vdmVkSXRlbXM6IFtpdGVtLnZhbHVlXSxcbiAgICAgICAgICBmcm9tOiAnc2VsZWN0ZWQnLFxuICAgICAgICAgIHRvOiAnYXZhaWxhYmxlJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5nZXRWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gcGFzcyB0byBuZ0ZvciB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCB0cmFja3MgaXRlbXNcbiAgICogYnkgdGhlIHZhbHVlIGZpZWxkXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgdHJhY2tCeVZhbHVlKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuICB9XG5cbiAgLyogTWV0aG9kcyBmcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSwgcmVxdWlyZWQgZm9yIG5nTW9kZWwgYW5kIGZvcm1Db250cm9sTmFtZSAtIGJlZ2luICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICAgLi4uaW50ZXJzZWN0aW9uV2l0aCh0aGlzLmF2YWlsYWJsZUl0ZW1zLCB2YWx1ZSwgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsOiBzdHJpbmcpID0+IGl0ZW0udmFsdWUgPT09IHZhbCldO1xuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdmFsdWUsXG4gICAgICAgICAgICAgIChpdGVtOiBJTGlzdEJveEl0ZW0sIHZhbDogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWwpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHt9KTogdm9pZCB7XG4gICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XG4gICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuICAvKiBNZXRob2RzIGZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLCByZXF1aXJlZCBmb3IgbmdNb2RlbCBhbmQgZm9ybUNvbnRyb2xOYW1lIC0gZW5kICovXG5cbiAgLyoqXG4gICAqIFV0aWxpdHkgbWV0aG9kIHRvIGdldCB2YWx1ZXMgZnJvbVxuICAgKiBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSXRlbXMgfHwgW10pLm1hcCgoaXRlbTogSUxpc3RCb3hJdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIiBbZm9ybUdyb3VwXT1cImxpc3RCb3hGb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGNvbC1sZy01IGNvbC1zbS0xMlwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWNlbnRlciB2ZXJ0aWNhbC1zcGFjaW5nLTVcIj57e2F2YWlsYWJsZVRleHR9fTwvaDQ+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHZlcnRpY2FsLXNwYWNpbmctNVwiIHBsYWNlaG9sZGVyPVwie3thdmFpbGFibGVGaWx0ZXJQbGFjZWhvbGRlcn19XCJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF2YWlsYWJsZVNlYXJjaElucHV0XCIgLz5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBsaXN0LWJveFwiIGZvcm1Db250cm9sTmFtZT1cImF2YWlsYWJsZUxpc3RCb3hcIiBtdWx0aXBsZSBbc2l6ZV09XCJsaXN0U2l6ZVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVJdGVtcyB8IGFycmF5RmlsdGVyOlsndGV4dCcsIHNlYXJjaFRlcm1BdmFpbGFibGVdIHwgYXJyYXlTb3J0Oltzb3J0QnksICdBU0MnXTt0cmFja0J5OnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtPy52YWx1ZSsnT3B0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJtb3ZlQXZhaWxhYmxlSXRlbVRvU2VsZWN0ZWQoaXRlbSlcIj57e2l0ZW0/LnRleHR9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLWxnLTIgY29sLXNtLTEyIGNlbnRlci1ibG9jayB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBhdHIgdG9wODAgc20tc3BhY2luZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxpc3RCb3hGb3JtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRGaWVsZCsnTW92ZUFsbEJ0bidcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW92ZUFsbEJ1dHRvblwiIChjbGljayk9XCJtb3ZlQWxsSXRlbXNUb1NlbGVjdGVkKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmkgYmktbGlzdC10YXNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBjb2wtbWQtOCBjb2wtbWQtb2Zmc2V0LTIgc3RyIHZlcnRpY2FsLXNwYWNpbmctNSBzbS1zcGFjaW5nXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGlzdEJveEZvcm0uZGlzYWJsZWQgfHwgIWF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnZhbHVlPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJpZEZpZWxkKydNb3ZlT25lQnRuJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVNYXJrZWRBdmFpbGFibGVJdGVtc1RvU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBjb2wtbWQtOCBjb2wtbWQtb2Zmc2V0LTIgc3RsIHZlcnRpY2FsLXNwYWNpbmctNSBzbS1zcGFjaW5nXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGlzdEJveEZvcm0uZGlzYWJsZWQgfHwgIXNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWU/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkRmllbGQrJ01vdmVPbmVMZWZ0QnRuJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVNYXJrZWRTZWxlY3RlZEl0ZW1zVG9BdmFpbGFibGUoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBhdGwgYm90dG9tMTAgc20tc3BhY2luZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxpc3RCb3hGb3JtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRGaWVsZCsnTW92ZUFsbExlZnRCdG4nXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vdmVBbGxCdXR0b25cIiAoY2xpY2spPVwibW92ZUFsbEl0ZW1zVG9BdmFpbGFibGUoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJpIGJpLWxpc3QtdGFza1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGNvbC1sZy01IGNvbC1zbS0xMlwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWNlbnRlciB2ZXJ0aWNhbC1zcGFjaW5nLTVcIj57e3NlbGVjdGVkVGV4dH19PC9oND5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdmVydGljYWwtc3BhY2luZy01XCIgcGxhY2Vob2xkZXI9XCJ7e3NlbGVjdGVkRmlsdGVyUGxhY2Vob2xkZXJ9fVwiXG4gICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZFNlYXJjaElucHV0XCIgLz5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBsaXN0LWJveFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkTGlzdEJveFwiIG11bHRpcGxlIFtzaXplXT1cImxpc3RTaXplXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXMgfCBhcnJheUZpbHRlcjpbJ3RleHQnLCBzZWFyY2hUZXJtU2VsZWN0ZWRdIHwgYXJyYXlTb3J0Oltzb3J0QnksICdBU0MnXTt0cmFja0J5OnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJtb3ZlU2VsZWN0ZWRJdGVtVG9BdmFpbGFibGUoaXRlbSlcIj57e2l0ZW0/LnRleHR9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtbW92ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvaXRlbXMtbW92ZWQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0byBlbWl0IGV2ZW50IHdoZW5cbiAqIGl0ZW1zIGFyZSBtb3ZlZCBiZXR3ZWVuIGJveGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUl0ZW1zTW92ZWRFdmVudCB7XG4gICAgYXZhaWxhYmxlOiBBcnJheTx7fT47XG4gICAgc2VsZWN0ZWQ6IEFycmF5PHt9PjtcbiAgICBtb3ZlZEl0ZW1zOiBBcnJheTx7fT47XG4gICAgZnJvbTogJ3NlbGVjdGVkJyB8ICdhdmFpbGFibGUnO1xuICAgIHRvOiAnc2VsZWN0ZWQnIHwgJ2F2YWlsYWJsZSc7XG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ib3gtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZHVhbC1saXN0LWJveC9saXN0LWJveC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgZm9yIGxpc3Rib3ggaXRlbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdEJveEl0ZW0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xufSJdfQ==