@tft/crispr-forms 13.0.23 → 14.0.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 (405) hide show
  1. package/README.md +77 -76
  2. package/esm2020/public-api.mjs +5 -0
  3. package/esm2020/src/index.mjs +2 -0
  4. package/esm2020/src/lib/crispr-forms.module.mjs +57 -0
  5. package/esm2020/src/lib/field-component-map.const.mjs +27 -0
  6. package/esm2020/src/lib/field.directive.mjs +69 -0
  7. package/esm2020/src/lib/form/form.component.mjs +63 -0
  8. package/esm2020/src/lib/form-group-list/form-group-list.component.mjs +93 -0
  9. package/esm2020/src/lib/form-group-list/index.mjs +2 -0
  10. package/esm2020/src/lib/pipes/crispr-pipes.module.mjs +24 -0
  11. package/esm2020/src/lib/pipes/initial-control-value.pipe.mjs +21 -0
  12. package/esm2020/src/lib/public_api.mjs +3 -0
  13. package/esm2020/src/lib/sub-group/index.mjs +3 -0
  14. package/esm2020/src/lib/sub-group/sub-group.component.mjs +21 -0
  15. package/esm2020/src/lib/sub-group/sub-group.module.mjs +42 -0
  16. package/esm2020/tft-crispr-forms.mjs +2 -2
  17. package/esm2020/ui/autocomplete-chiplist-field/autocomplete-chiplist-field.component.mjs +130 -0
  18. package/esm2020/ui/autocomplete-chiplist-field/public-api.mjs +2 -0
  19. package/esm2020/ui/autocomplete-chiplist-field/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +5 -0
  20. package/esm2020/ui/autocomplete-field/autocomplete-field.component.mjs +93 -0
  21. package/esm2020/ui/autocomplete-field/public-api.mjs +2 -0
  22. package/esm2020/ui/autocomplete-field/tft-crispr-forms-ui-autocomplete-field.mjs +5 -0
  23. package/esm2020/ui/button/button.component.mjs +49 -0
  24. package/esm2020/ui/button/public-api.mjs +2 -0
  25. package/esm2020/ui/button/tft-crispr-forms-ui-button.mjs +5 -0
  26. package/esm2020/ui/checkbox-field/checkbox-field.component.mjs +42 -0
  27. package/esm2020/ui/checkbox-field/public-api.mjs +2 -0
  28. package/esm2020/ui/checkbox-field/tft-crispr-forms-ui-checkbox-field.mjs +5 -0
  29. package/esm2020/ui/datepicker-field/datepicker-field.component.mjs +63 -0
  30. package/esm2020/ui/datepicker-field/public-api.mjs +2 -0
  31. package/esm2020/ui/datepicker-field/tft-crispr-forms-ui-datepicker-field.mjs +5 -0
  32. package/esm2020/ui/divider/divider.component.mjs +28 -0
  33. package/esm2020/ui/divider/public-api.mjs +2 -0
  34. package/esm2020/ui/divider/tft-crispr-forms-ui-divider.mjs +5 -0
  35. package/esm2020/ui/field-container/field-container.component.mjs +58 -0
  36. package/esm2020/ui/field-container/public-api.mjs +2 -0
  37. package/esm2020/ui/field-container/tft-crispr-forms-ui-field-container.mjs +5 -0
  38. package/esm2020/ui/file-dropzone/file-dropzone.directive.mjs +40 -0
  39. package/esm2020/ui/file-dropzone/public-api.mjs +2 -0
  40. package/esm2020/ui/file-dropzone/tft-crispr-forms-ui-file-dropzone.mjs +5 -0
  41. package/esm2020/ui/file-upload-field/file-upload-field.component.mjs +108 -0
  42. package/esm2020/ui/file-upload-field/public-api.mjs +2 -0
  43. package/esm2020/ui/file-upload-field/tft-crispr-forms-ui-file-upload-field.mjs +5 -0
  44. package/esm2020/ui/heading/heading.component.mjs +31 -0
  45. package/esm2020/ui/heading/public-api.mjs +2 -0
  46. package/esm2020/ui/heading/tft-crispr-forms-ui-heading.mjs +5 -0
  47. package/esm2020/ui/image-upload-field/image-upload-field.component.mjs +179 -0
  48. package/esm2020/ui/image-upload-field/public-api.mjs +2 -0
  49. package/esm2020/ui/image-upload-field/tft-crispr-forms-ui-image-upload-field.mjs +5 -0
  50. package/esm2020/ui/info/info.component.mjs +23 -0
  51. package/esm2020/ui/info/public-api.mjs +2 -0
  52. package/esm2020/ui/info/tft-crispr-forms-ui-info.mjs +5 -0
  53. package/esm2020/ui/input-field/input-field.component.mjs +41 -0
  54. package/esm2020/ui/input-field/public-api.mjs +2 -0
  55. package/esm2020/ui/input-field/tft-crispr-forms-ui-input-field.mjs +5 -0
  56. package/esm2020/ui/option/option.component.mjs +19 -0
  57. package/esm2020/ui/option/public-api.mjs +2 -0
  58. package/esm2020/ui/option/tft-crispr-forms-ui-option.mjs +5 -0
  59. package/esm2020/ui/public-api.mjs +7 -0
  60. package/esm2020/ui/radio-field/public-api.mjs +2 -0
  61. package/esm2020/ui/radio-field/radio-field.component.mjs +39 -0
  62. package/esm2020/ui/radio-field/tft-crispr-forms-ui-radio-field.mjs +5 -0
  63. package/esm2020/ui/select-field/public-api.mjs +2 -0
  64. package/esm2020/ui/select-field/select-field.component.mjs +73 -0
  65. package/esm2020/ui/select-field/tft-crispr-forms-ui-select-field.mjs +5 -0
  66. package/esm2020/ui/selected-file/public-api.mjs +2 -0
  67. package/esm2020/ui/selected-file/selected-file.component.mjs +26 -0
  68. package/esm2020/ui/selected-file/tft-crispr-forms-ui-selected-file.mjs +5 -0
  69. package/esm2020/ui/slider-field/public-api.mjs +2 -0
  70. package/esm2020/ui/slider-field/slider-field.component.mjs +44 -0
  71. package/esm2020/ui/slider-field/tft-crispr-forms-ui-slider-field.mjs +5 -0
  72. package/esm2020/ui/textarea-field/public-api.mjs +2 -0
  73. package/esm2020/ui/textarea-field/textarea-field.component.mjs +42 -0
  74. package/esm2020/ui/textarea-field/tft-crispr-forms-ui-textarea-field.mjs +5 -0
  75. package/esm2020/ui/tft-crispr-forms-ui.mjs +5 -0
  76. package/esm2020/ui/unit-conversion-field/public-api.mjs +2 -0
  77. package/esm2020/ui/unit-conversion-field/tft-crispr-forms-ui-unit-conversion-field.mjs +5 -0
  78. package/esm2020/ui/unit-conversion-field/unit-conversion-field.component.mjs +84 -0
  79. package/esm2020/utils/abstracts/autocomplete-field.abstract.mjs +30 -0
  80. package/esm2020/utils/abstracts/crispr-control.mixin.mjs +27 -0
  81. package/esm2020/utils/abstracts/crispr-field.abstract.mjs +20 -0
  82. package/esm2020/utils/abstracts/index.mjs +4 -0
  83. package/esm2020/utils/functions/buildFormGroupFromConfig.mjs +28 -0
  84. package/esm2020/utils/functions/callOptionsIfFunction.mjs +4 -0
  85. package/esm2020/utils/functions/createControlForType.mjs +19 -0
  86. package/esm2020/utils/functions/filterOptionsByLabel.mjs +11 -0
  87. package/esm2020/utils/functions/image-compression.helpers.mjs +50 -0
  88. package/esm2020/utils/functions/index.mjs +8 -0
  89. package/esm2020/utils/functions/isControlConfig.mjs +7 -0
  90. package/esm2020/utils/functions/observablifyOptions.mjs +29 -0
  91. package/esm2020/utils/models/autocomplete-chiplist-field.config.mjs +2 -0
  92. package/esm2020/utils/models/autocomplete-field.config.mjs +2 -0
  93. package/esm2020/utils/models/button.config.mjs +2 -0
  94. package/esm2020/utils/models/checkbox-field.config.mjs +2 -0
  95. package/esm2020/utils/models/crispr-field.config.mjs +23 -0
  96. package/esm2020/utils/models/datepicker-field.config.mjs +2 -0
  97. package/esm2020/utils/models/divider.config.mjs +2 -0
  98. package/esm2020/utils/models/file-upload-field.config.mjs +2 -0
  99. package/esm2020/utils/models/form-group-list.config.mjs +2 -0
  100. package/esm2020/utils/models/heading.config.mjs +3 -0
  101. package/esm2020/utils/models/image-upload-field.config.mjs +2 -0
  102. package/esm2020/utils/models/index.mjs +18 -0
  103. package/esm2020/utils/models/input-field.config.mjs +2 -0
  104. package/esm2020/utils/models/radio-field.config.mjs +2 -0
  105. package/esm2020/utils/models/select-field.config.mjs +2 -0
  106. package/esm2020/utils/models/slider-field.config.mjs +2 -0
  107. package/esm2020/utils/models/textarea-field.config.mjs +2 -0
  108. package/esm2020/utils/models/unit-conversion-field.config.mjs +2 -0
  109. package/esm2020/utils/operators/form.operators.mjs +24 -0
  110. package/esm2020/utils/operators/index.mjs +2 -0
  111. package/esm2020/utils/public-api.mjs +5 -0
  112. package/esm2020/utils/tft-crispr-forms-utils.mjs +5 -0
  113. package/fesm2015/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +138 -0
  114. package/fesm2015/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs.map +1 -0
  115. package/fesm2015/tft-crispr-forms-ui-autocomplete-field.mjs +101 -0
  116. package/fesm2015/tft-crispr-forms-ui-autocomplete-field.mjs.map +1 -0
  117. package/fesm2015/tft-crispr-forms-ui-button.mjs +55 -0
  118. package/fesm2015/tft-crispr-forms-ui-button.mjs.map +1 -0
  119. package/fesm2015/tft-crispr-forms-ui-checkbox-field.mjs +49 -0
  120. package/fesm2015/tft-crispr-forms-ui-checkbox-field.mjs.map +1 -0
  121. package/fesm2015/tft-crispr-forms-ui-datepicker-field.mjs +71 -0
  122. package/fesm2015/tft-crispr-forms-ui-datepicker-field.mjs.map +1 -0
  123. package/fesm2015/tft-crispr-forms-ui-divider.mjs +34 -0
  124. package/fesm2015/tft-crispr-forms-ui-divider.mjs.map +1 -0
  125. package/fesm2015/tft-crispr-forms-ui-field-container.mjs +64 -0
  126. package/fesm2015/tft-crispr-forms-ui-field-container.mjs.map +1 -0
  127. package/fesm2015/tft-crispr-forms-ui-file-dropzone.mjs +47 -0
  128. package/fesm2015/tft-crispr-forms-ui-file-dropzone.mjs.map +1 -0
  129. package/fesm2015/tft-crispr-forms-ui-file-upload-field.mjs +117 -0
  130. package/fesm2015/tft-crispr-forms-ui-file-upload-field.mjs.map +1 -0
  131. package/fesm2015/tft-crispr-forms-ui-heading.mjs +37 -0
  132. package/fesm2015/tft-crispr-forms-ui-heading.mjs.map +1 -0
  133. package/fesm2015/tft-crispr-forms-ui-image-upload-field.mjs +182 -0
  134. package/fesm2015/tft-crispr-forms-ui-image-upload-field.mjs.map +1 -0
  135. package/fesm2015/tft-crispr-forms-ui-info.mjs +30 -0
  136. package/fesm2015/tft-crispr-forms-ui-info.mjs.map +1 -0
  137. package/fesm2015/tft-crispr-forms-ui-input-field.mjs +48 -0
  138. package/fesm2015/tft-crispr-forms-ui-input-field.mjs.map +1 -0
  139. package/fesm2015/tft-crispr-forms-ui-option.mjs +26 -0
  140. package/fesm2015/tft-crispr-forms-ui-option.mjs.map +1 -0
  141. package/fesm2015/tft-crispr-forms-ui-radio-field.mjs +46 -0
  142. package/fesm2015/tft-crispr-forms-ui-radio-field.mjs.map +1 -0
  143. package/fesm2015/tft-crispr-forms-ui-select-field.mjs +81 -0
  144. package/fesm2015/tft-crispr-forms-ui-select-field.mjs.map +1 -0
  145. package/fesm2015/tft-crispr-forms-ui-selected-file.mjs +33 -0
  146. package/fesm2015/tft-crispr-forms-ui-selected-file.mjs.map +1 -0
  147. package/fesm2015/tft-crispr-forms-ui-slider-field.mjs +51 -0
  148. package/fesm2015/tft-crispr-forms-ui-slider-field.mjs.map +1 -0
  149. package/fesm2015/tft-crispr-forms-ui-textarea-field.mjs +49 -0
  150. package/fesm2015/tft-crispr-forms-ui-textarea-field.mjs.map +1 -0
  151. package/fesm2015/tft-crispr-forms-ui-unit-conversion-field.mjs +93 -0
  152. package/fesm2015/tft-crispr-forms-ui-unit-conversion-field.mjs.map +1 -0
  153. package/fesm2015/tft-crispr-forms-ui.mjs +12 -0
  154. package/fesm2015/tft-crispr-forms-ui.mjs.map +1 -0
  155. package/fesm2015/tft-crispr-forms-utils.mjs +270 -0
  156. package/fesm2015/tft-crispr-forms-utils.mjs.map +1 -0
  157. package/fesm2015/tft-crispr-forms.mjs +117 -1730
  158. package/fesm2015/tft-crispr-forms.mjs.map +1 -1
  159. package/fesm2020/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs +137 -0
  160. package/fesm2020/tft-crispr-forms-ui-autocomplete-chiplist-field.mjs.map +1 -0
  161. package/fesm2020/tft-crispr-forms-ui-autocomplete-field.mjs +100 -0
  162. package/fesm2020/tft-crispr-forms-ui-autocomplete-field.mjs.map +1 -0
  163. package/fesm2020/tft-crispr-forms-ui-button.mjs +55 -0
  164. package/fesm2020/tft-crispr-forms-ui-button.mjs.map +1 -0
  165. package/fesm2020/tft-crispr-forms-ui-checkbox-field.mjs +49 -0
  166. package/fesm2020/tft-crispr-forms-ui-checkbox-field.mjs.map +1 -0
  167. package/fesm2020/tft-crispr-forms-ui-datepicker-field.mjs +70 -0
  168. package/fesm2020/tft-crispr-forms-ui-datepicker-field.mjs.map +1 -0
  169. package/fesm2020/tft-crispr-forms-ui-divider.mjs +34 -0
  170. package/fesm2020/tft-crispr-forms-ui-divider.mjs.map +1 -0
  171. package/fesm2020/tft-crispr-forms-ui-field-container.mjs +65 -0
  172. package/fesm2020/tft-crispr-forms-ui-field-container.mjs.map +1 -0
  173. package/fesm2020/tft-crispr-forms-ui-file-dropzone.mjs +47 -0
  174. package/fesm2020/tft-crispr-forms-ui-file-dropzone.mjs.map +1 -0
  175. package/fesm2020/tft-crispr-forms-ui-file-upload-field.mjs +115 -0
  176. package/fesm2020/tft-crispr-forms-ui-file-upload-field.mjs.map +1 -0
  177. package/fesm2020/tft-crispr-forms-ui-heading.mjs +37 -0
  178. package/fesm2020/tft-crispr-forms-ui-heading.mjs.map +1 -0
  179. package/fesm2020/tft-crispr-forms-ui-image-upload-field.mjs +185 -0
  180. package/fesm2020/tft-crispr-forms-ui-image-upload-field.mjs.map +1 -0
  181. package/fesm2020/tft-crispr-forms-ui-info.mjs +30 -0
  182. package/fesm2020/tft-crispr-forms-ui-info.mjs.map +1 -0
  183. package/fesm2020/tft-crispr-forms-ui-input-field.mjs +48 -0
  184. package/fesm2020/tft-crispr-forms-ui-input-field.mjs.map +1 -0
  185. package/fesm2020/tft-crispr-forms-ui-option.mjs +26 -0
  186. package/fesm2020/tft-crispr-forms-ui-option.mjs.map +1 -0
  187. package/fesm2020/tft-crispr-forms-ui-radio-field.mjs +46 -0
  188. package/fesm2020/tft-crispr-forms-ui-radio-field.mjs.map +1 -0
  189. package/fesm2020/tft-crispr-forms-ui-select-field.mjs +80 -0
  190. package/fesm2020/tft-crispr-forms-ui-select-field.mjs.map +1 -0
  191. package/fesm2020/tft-crispr-forms-ui-selected-file.mjs +33 -0
  192. package/fesm2020/tft-crispr-forms-ui-selected-file.mjs.map +1 -0
  193. package/fesm2020/tft-crispr-forms-ui-slider-field.mjs +51 -0
  194. package/fesm2020/tft-crispr-forms-ui-slider-field.mjs.map +1 -0
  195. package/fesm2020/tft-crispr-forms-ui-textarea-field.mjs +49 -0
  196. package/fesm2020/tft-crispr-forms-ui-textarea-field.mjs.map +1 -0
  197. package/fesm2020/tft-crispr-forms-ui-unit-conversion-field.mjs +91 -0
  198. package/fesm2020/tft-crispr-forms-ui-unit-conversion-field.mjs.map +1 -0
  199. package/fesm2020/tft-crispr-forms-ui.mjs +12 -0
  200. package/fesm2020/tft-crispr-forms-ui.mjs.map +1 -0
  201. package/fesm2020/tft-crispr-forms-utils.mjs +269 -0
  202. package/fesm2020/tft-crispr-forms-utils.mjs.map +1 -0
  203. package/fesm2020/tft-crispr-forms.mjs +117 -1723
  204. package/fesm2020/tft-crispr-forms.mjs.map +1 -1
  205. package/index.d.ts +5 -1
  206. package/package.json +188 -15
  207. package/public-api.d.ts +3 -0
  208. package/src/index.d.ts +1 -0
  209. package/src/lib/crispr-forms.module.d.ts +15 -0
  210. package/src/lib/field-component-map.const.d.ts +42 -0
  211. package/{lib → src/lib}/field.directive.d.ts +4 -10
  212. package/{lib → src/lib}/form/form.component.d.ts +3 -3
  213. package/{lib → src/lib}/form-group-list/form-group-list.component.d.ts +12 -14
  214. package/{lib → src/lib}/form-group-list/index.d.ts +0 -1
  215. package/{lib → src/lib}/pipes/crispr-pipes.module.d.ts +0 -0
  216. package/{lib → src/lib}/pipes/initial-control-value.pipe.d.ts +2 -2
  217. package/src/lib/public_api.d.ts +2 -0
  218. package/{lib → src/lib}/sub-group/index.d.ts +0 -0
  219. package/src/lib/sub-group/sub-group.component.d.ts +22 -0
  220. package/{lib → src/lib}/sub-group/sub-group.module.d.ts +2 -2
  221. package/tft-crispr-forms-14.0.0.tgz +0 -0
  222. package/ui/README.md +3 -0
  223. package/{lib/material → ui}/autocomplete-chiplist-field/autocomplete-chiplist-field.component.d.ts +2 -3
  224. package/ui/autocomplete-chiplist-field/index.d.ts +5 -0
  225. package/ui/autocomplete-chiplist-field/public-api.d.ts +1 -0
  226. package/{lib/material → ui}/autocomplete-field/autocomplete-field.component.d.ts +2 -3
  227. package/ui/autocomplete-field/index.d.ts +5 -0
  228. package/ui/autocomplete-field/public-api.d.ts +1 -0
  229. package/{lib/material → ui}/button/button.component.d.ts +2 -3
  230. package/ui/button/index.d.ts +5 -0
  231. package/ui/button/public-api.d.ts +1 -0
  232. package/ui/checkbox-field/checkbox-field.component.d.ts +21 -0
  233. package/ui/checkbox-field/index.d.ts +5 -0
  234. package/ui/checkbox-field/public-api.d.ts +1 -0
  235. package/{lib/material → ui}/datepicker-field/datepicker-field.component.d.ts +14 -17
  236. package/ui/datepicker-field/index.d.ts +5 -0
  237. package/ui/datepicker-field/public-api.d.ts +1 -0
  238. package/{lib/material → ui}/divider/divider.component.d.ts +2 -3
  239. package/ui/divider/index.d.ts +5 -0
  240. package/ui/divider/public-api.d.ts +1 -0
  241. package/{lib → ui}/field-container/field-container.component.d.ts +3 -10
  242. package/ui/field-container/index.d.ts +5 -0
  243. package/{lib/field-container/index.d.ts → ui/field-container/public-api.d.ts} +0 -0
  244. package/{lib/material/file-upload → ui/file-dropzone}/file-dropzone.directive.d.ts +1 -1
  245. package/ui/file-dropzone/index.d.ts +5 -0
  246. package/{lib/material/file-upload/index.d.ts → ui/file-dropzone/public-api.d.ts} +0 -1
  247. package/ui/file-upload-field/file-upload-field.component.d.ts +37 -0
  248. package/ui/file-upload-field/index.d.ts +5 -0
  249. package/ui/file-upload-field/public-api.d.ts +1 -0
  250. package/ui/heading/heading.component.d.ts +8 -0
  251. package/ui/heading/index.d.ts +5 -0
  252. package/ui/heading/public-api.d.ts +1 -0
  253. package/ui/image-upload-field/image-upload-field.component.d.ts +48 -0
  254. package/ui/image-upload-field/index.d.ts +5 -0
  255. package/{lib/material/image-upload-field/index.d.ts → ui/image-upload-field/public-api.d.ts} +0 -0
  256. package/ui/index.d.ts +5 -0
  257. package/ui/info/index.d.ts +5 -0
  258. package/ui/info/info.component.d.ts +7 -0
  259. package/ui/info/public-api.d.ts +1 -0
  260. package/ui/input-field/index.d.ts +5 -0
  261. package/ui/input-field/input-field.component.d.ts +22 -0
  262. package/ui/input-field/public-api.d.ts +1 -0
  263. package/ui/option/index.d.ts +5 -0
  264. package/{lib/material → ui}/option/option.component.d.ts +2 -2
  265. package/{lib/material/option/index.d.ts → ui/option/public-api.d.ts} +0 -0
  266. package/ui/public-api.d.ts +5 -0
  267. package/ui/radio-field/index.d.ts +5 -0
  268. package/ui/radio-field/public-api.d.ts +1 -0
  269. package/ui/radio-field/radio-field.component.d.ts +23 -0
  270. package/ui/select-field/index.d.ts +5 -0
  271. package/ui/select-field/public-api.d.ts +1 -0
  272. package/{lib/material → ui}/select-field/select-field.component.d.ts +12 -14
  273. package/ui/selected-file/index.d.ts +5 -0
  274. package/ui/selected-file/public-api.d.ts +1 -0
  275. package/ui/selected-file/selected-file.component.d.ts +10 -0
  276. package/ui/slider-field/index.d.ts +5 -0
  277. package/ui/slider-field/public-api.d.ts +1 -0
  278. package/ui/slider-field/slider-field.component.d.ts +25 -0
  279. package/ui/textarea-field/index.d.ts +5 -0
  280. package/ui/textarea-field/public-api.d.ts +1 -0
  281. package/ui/textarea-field/textarea-field.component.d.ts +21 -0
  282. package/ui/unit-conversion-field/index.d.ts +5 -0
  283. package/ui/unit-conversion-field/public-api.d.ts +1 -0
  284. package/{lib/material → ui}/unit-conversion-field/unit-conversion-field.component.d.ts +14 -17
  285. package/utils/README.md +3 -0
  286. package/{lib → utils}/abstracts/autocomplete-field.abstract.d.ts +4 -4
  287. package/{lib → utils}/abstracts/crispr-control.mixin.d.ts +0 -0
  288. package/{lib → utils}/abstracts/crispr-field.abstract.d.ts +1 -1
  289. package/{lib → utils}/abstracts/index.d.ts +0 -0
  290. package/utils/functions/buildFormGroupFromConfig.d.ts +9 -0
  291. package/utils/functions/callOptionsIfFunction.d.ts +3 -0
  292. package/utils/functions/createControlForType.d.ts +9 -0
  293. package/utils/functions/filterOptionsByLabel.d.ts +7 -0
  294. package/utils/functions/image-compression.helpers.d.ts +5 -0
  295. package/utils/functions/index.d.ts +7 -0
  296. package/utils/functions/isControlConfig.d.ts +5 -0
  297. package/utils/functions/observablifyOptions.d.ts +12 -0
  298. package/utils/index.d.ts +5 -0
  299. package/{lib → utils}/models/autocomplete-chiplist-field.config.d.ts +2 -1
  300. package/{lib → utils}/models/autocomplete-field.config.d.ts +1 -2
  301. package/{lib → utils}/models/button.config.d.ts +0 -0
  302. package/{lib → utils}/models/checkbox-field.config.d.ts +1 -2
  303. package/{lib → utils}/models/crispr-field.config.d.ts +5 -7
  304. package/{lib → utils}/models/datepicker-field.config.d.ts +4 -6
  305. package/{lib → utils}/models/divider.config.d.ts +1 -1
  306. package/{lib → utils}/models/file-upload-field.config.d.ts +9 -4
  307. package/{lib → utils}/models/form-group-list.config.d.ts +1 -2
  308. package/{lib → utils}/models/heading.config.d.ts +1 -2
  309. package/{lib → utils}/models/image-upload-field.config.d.ts +2 -1
  310. package/{lib → utils}/models/index.d.ts +0 -0
  311. package/{lib → utils}/models/input-field.config.d.ts +1 -2
  312. package/{lib → utils}/models/radio-field.config.d.ts +0 -0
  313. package/{lib → utils}/models/select-field.config.d.ts +1 -2
  314. package/{lib → utils}/models/slider-field.config.d.ts +1 -2
  315. package/{lib → utils}/models/textarea-field.config.d.ts +1 -2
  316. package/{lib → utils}/models/unit-conversion-field.config.d.ts +1 -2
  317. package/{lib → utils/operators}/form.operators.d.ts +0 -0
  318. package/utils/operators/index.d.ts +1 -0
  319. package/utils/public-api.d.ts +4 -0
  320. package/esm2020/index.mjs +0 -2
  321. package/esm2020/lib/abstracts/autocomplete-field.abstract.mjs +0 -30
  322. package/esm2020/lib/abstracts/crispr-control.mixin.mjs +0 -27
  323. package/esm2020/lib/abstracts/crispr-field.abstract.mjs +0 -17
  324. package/esm2020/lib/abstracts/index.mjs +0 -4
  325. package/esm2020/lib/crispr-forms.module.mjs +0 -66
  326. package/esm2020/lib/field-component-map.const.mjs +0 -28
  327. package/esm2020/lib/field-container/field-container.component.mjs +0 -85
  328. package/esm2020/lib/field-container/index.mjs +0 -2
  329. package/esm2020/lib/field.directive.mjs +0 -90
  330. package/esm2020/lib/form/form.component.mjs +0 -53
  331. package/esm2020/lib/form-group-list/form-group-list.component.mjs +0 -77
  332. package/esm2020/lib/form-group-list/form-group-list.module.mjs +0 -54
  333. package/esm2020/lib/form-group-list/index.mjs +0 -3
  334. package/esm2020/lib/form.helpers.mjs +0 -190
  335. package/esm2020/lib/form.operators.mjs +0 -24
  336. package/esm2020/lib/material/autocomplete-chiplist-field/autocomplete-chiplist-field.component.mjs +0 -111
  337. package/esm2020/lib/material/autocomplete-field/autocomplete-field.component.mjs +0 -78
  338. package/esm2020/lib/material/button/button.component.mjs +0 -35
  339. package/esm2020/lib/material/checkbox-field/checkbox-field.component.mjs +0 -31
  340. package/esm2020/lib/material/datepicker-field/datepicker-field.component.mjs +0 -45
  341. package/esm2020/lib/material/divider/divider.component.mjs +0 -22
  342. package/esm2020/lib/material/file-upload/file-dropzone.directive.mjs +0 -39
  343. package/esm2020/lib/material/file-upload/file-upload.component.mjs +0 -145
  344. package/esm2020/lib/material/file-upload/index.mjs +0 -3
  345. package/esm2020/lib/material/heading/heading.component.mjs +0 -54
  346. package/esm2020/lib/material/image-upload-field/image-compression.helpers.mjs +0 -4
  347. package/esm2020/lib/material/image-upload-field/image-upload-field.component.mjs +0 -265
  348. package/esm2020/lib/material/image-upload-field/index.mjs +0 -2
  349. package/esm2020/lib/material/index.mjs +0 -18
  350. package/esm2020/lib/material/info/info.component.mjs +0 -46
  351. package/esm2020/lib/material/input-field/input-field.component.mjs +0 -27
  352. package/esm2020/lib/material/material.module.mjs +0 -200
  353. package/esm2020/lib/material/option/index.mjs +0 -2
  354. package/esm2020/lib/material/option/option.component.mjs +0 -15
  355. package/esm2020/lib/material/radio-field/radio-field.component.mjs +0 -29
  356. package/esm2020/lib/material/select-field/select-field.component.mjs +0 -58
  357. package/esm2020/lib/material/selected-file/selected-file.component.mjs +0 -47
  358. package/esm2020/lib/material/slider-field/slider-field.component.mjs +0 -30
  359. package/esm2020/lib/material/textarea-field/textarea-field.component.mjs +0 -28
  360. package/esm2020/lib/material/unit-conversion-field/unit-conversion-field.component.mjs +0 -69
  361. package/esm2020/lib/models/autocomplete-chiplist-field.config.mjs +0 -2
  362. package/esm2020/lib/models/autocomplete-field.config.mjs +0 -2
  363. package/esm2020/lib/models/button.config.mjs +0 -2
  364. package/esm2020/lib/models/checkbox-field.config.mjs +0 -2
  365. package/esm2020/lib/models/crispr-field.config.mjs +0 -23
  366. package/esm2020/lib/models/datepicker-field.config.mjs +0 -2
  367. package/esm2020/lib/models/divider.config.mjs +0 -2
  368. package/esm2020/lib/models/file-upload-field.config.mjs +0 -2
  369. package/esm2020/lib/models/form-group-list.config.mjs +0 -2
  370. package/esm2020/lib/models/heading.config.mjs +0 -3
  371. package/esm2020/lib/models/image-upload-field.config.mjs +0 -2
  372. package/esm2020/lib/models/index.mjs +0 -18
  373. package/esm2020/lib/models/input-field.config.mjs +0 -2
  374. package/esm2020/lib/models/radio-field.config.mjs +0 -2
  375. package/esm2020/lib/models/select-field.config.mjs +0 -2
  376. package/esm2020/lib/models/slider-field.config.mjs +0 -2
  377. package/esm2020/lib/models/textarea-field.config.mjs +0 -2
  378. package/esm2020/lib/models/unit-conversion-field.config.mjs +0 -2
  379. package/esm2020/lib/pipes/crispr-pipes.module.mjs +0 -26
  380. package/esm2020/lib/pipes/initial-control-value.pipe.mjs +0 -20
  381. package/esm2020/lib/public_api.mjs +0 -10
  382. package/esm2020/lib/sub-group/index.mjs +0 -3
  383. package/esm2020/lib/sub-group/sub-group.component.mjs +0 -20
  384. package/esm2020/lib/sub-group/sub-group.module.mjs +0 -45
  385. package/lib/crispr-forms.module.d.ts +0 -16
  386. package/lib/field-component-map.const.d.ts +0 -28
  387. package/lib/form-group-list/form-group-list.module.d.ts +0 -15
  388. package/lib/form.helpers.d.ts +0 -88
  389. package/lib/material/checkbox-field/checkbox-field.component.d.ts +0 -23
  390. package/lib/material/file-upload/file-upload.component.d.ts +0 -54
  391. package/lib/material/heading/heading.component.d.ts +0 -17
  392. package/lib/material/image-upload-field/image-compression.helpers.d.ts +0 -1
  393. package/lib/material/image-upload-field/image-upload-field.component.d.ts +0 -68
  394. package/lib/material/index.d.ts +0 -17
  395. package/lib/material/info/info.component.d.ts +0 -15
  396. package/lib/material/input-field/input-field.component.d.ts +0 -24
  397. package/lib/material/material.module.d.ts +0 -44
  398. package/lib/material/radio-field/radio-field.component.d.ts +0 -26
  399. package/lib/material/selected-file/selected-file.component.d.ts +0 -17
  400. package/lib/material/slider-field/slider-field.component.d.ts +0 -27
  401. package/lib/material/textarea-field/textarea-field.component.d.ts +0 -24
  402. package/lib/public_api.d.ts +0 -9
  403. package/lib/sub-group/sub-group.component.d.ts +0 -24
  404. package/tft-crispr-forms-13.0.23.tgz +0 -0
  405. package/tft-crispr-forms.d.ts +0 -5
@@ -1,190 +0,0 @@
1
- import { ControlType, } from './models/crispr-field.config';
2
- import { from, of, isObservable, combineLatest } from 'rxjs';
3
- import { FormGroup, FormArray, FormControl } from '@angular/forms';
4
- import { valueIn } from './form.operators';
5
- import { map, startWith } from 'rxjs/operators';
6
- /**
7
- * Watches a single control for a list of values, returns true when field value matches any value in list
8
- * unless an evaluate method is found on config, in which case that method is run on the returned boolean value
9
- * @param group the direct parent of the field we want to watch
10
- * @param config
11
- */
12
- export function checkControlForValues(group, config) {
13
- // check that all the pieces we need are available
14
- if (config && config.controlName && Array.isArray(config.values)) {
15
- return getValueChanges(group, config.controlName).pipe(
16
- // return a boolean, true if value is in the values being watch for, otherwise false
17
- valueIn(config.values), map((isValueInValues) => {
18
- // since we can only check if the value is in the list of watched values, the evaluate function gives us
19
- // a chance to make other decisions based on if the boolean returned, e.g. return true if value not in watched values
20
- if (config.evaluate && config.evaluate instanceof Function) {
21
- return config.evaluate(isValueInValues);
22
- }
23
- else {
24
- return isValueInValues;
25
- }
26
- }));
27
- }
28
- else {
29
- //
30
- return of(true);
31
- }
32
- }
33
- /**
34
- * Watches a list of fields for individual lists of values returning true when any field contains one
35
- * of the values being watched for, or optionally running a function on the array of resolved booleans
36
- * from the listed fields and returning a boolean
37
- * @param group the form group that has the fields to watch as direct descendants
38
- * @param config the configuration to use when calling the function
39
- */
40
- export function checkControlsForValues(group, config) {
41
- // if no config is passed we just want to show the field, so we return an observable of true
42
- if (!config || !config.watchConfigs) {
43
- return of(true);
44
- }
45
- // we run checkControlForValues on every control in the list of WatchConfigs creating
46
- // an array of Observable watching fields for values
47
- const fieldTriggers = config.watchConfigs.map(watchConfig => {
48
- // resolves a boolean, true when field value matches a watched value, otherwise false
49
- return checkControlForValues(group, watchConfig);
50
- });
51
- return combineLatest(fieldTriggers).pipe(startWith([true]), map((booleans) => {
52
- // if the user passed an evaluate function use it
53
- if (config.evaluate && config.evaluate instanceof Function) {
54
- return config.evaluate(booleans);
55
- }
56
- else { // otherwise we return true if any of the watched fields resolve to true
57
- return booleans.some(bool => bool);
58
- }
59
- }));
60
- }
61
- /**
62
- * Watches values on an array of fields, computing their values as they change
63
- * @param group the group to get the fields from, for now it can only be the parent of the computed field
64
- * @param computeFieldsConfig the configuration that drives the computation, holds the names to watch and the
65
- * computation function that get called against the array of values
66
- */
67
- export function computeValueFromFields(group, computeFieldsConfig) {
68
- // TODO: better checking
69
- const { controlNamesToWatch } = computeFieldsConfig;
70
- //creates an observable listener for each control in the controlNamesToWatch array
71
- return combineLatest(controlNamesToWatch.map(controlNameToWatch => getValueChanges(group, controlNameToWatch))).pipe(
72
- // each time a watched field values changes a new array of the latest field values is pipe through to the
73
- // compute callback. Which runs the users logic on the values to compute this fields value
74
- map(valuesArray => computeFieldsConfig.computeCallback(valuesArray)));
75
- }
76
- /**
77
- * A simple wrapper for doing error checking around getting the valueChanges observable from a control on a form group
78
- * @param group the form group we want to pull the observable from
79
- * @param controlName the name of the control who's value we want to subscribe to
80
- */
81
- function getValueChanges(group, controlName) {
82
- const control = group.get(controlName);
83
- if (!control) {
84
- throw new Error(`No control with controlName ${controlName}`);
85
- }
86
- return control.valueChanges;
87
- }
88
- /**
89
- * TODO: move to utils library after library is built
90
- * Allows developer to pass an array of operators into the pipe of an Observable.
91
- * Useful for creating function with a variable amount of operators to be run
92
- * @param observable the observable to pass the operators to
93
- * @param operators array of operators to pipe
94
- */
95
- function pipeOperatorsIntoObservable(observable, operators) {
96
- try {
97
- return operators.reduce((obs, op) => {
98
- return obs.pipe(op);
99
- }, observable);
100
- }
101
- catch {
102
- console.error('Unable to pipe operators into observable');
103
- return of(null);
104
- }
105
- }
106
- export function callOptionsIfFunction(options, parentGroup, searchString) {
107
- return options instanceof Function ? options(parentGroup, searchString) : options;
108
- }
109
- /**
110
- * The user can give us select options as an array, a function that resolves to a promise,
111
- * or an observable. This functions consumes any of those and returns an observable that
112
- * resolves an array of options
113
- *
114
- * @param options the options passed in from the config
115
- * @param emptyMessageOption the message to display when the array is empty
116
- */
117
- export function observablifyOptions(options, parentGroup, searchString) {
118
- const calledOptions = callOptionsIfFunction(options, parentGroup, searchString);
119
- // if options are a promise
120
- const observableOptions = calledOptions instanceof Promise
121
- // convert to observable
122
- ? from(calledOptions)
123
- // if array that isn't empty
124
- : Array.isArray(calledOptions) && calledOptions.length
125
- // convert to observable
126
- ? of(calledOptions)
127
- // if observable
128
- : isObservable(calledOptions)
129
- // return it
130
- ? calledOptions
131
- // else an empty array
132
- : of([]);
133
- return observableOptions;
134
- }
135
- /**
136
- * Determines if the field config is for a form control (not a divider, heading or other non-control field)
137
- * */
138
- export function isControlConfig(fieldConfig) {
139
- return 'controlName' in fieldConfig;
140
- }
141
- /**
142
- * builds out form group based on config
143
- * @param config a configuration for a form group
144
- * @param value an object of initial values to pass in
145
- * @param group the form group to modify and build out
146
- */
147
- export function buildFormGroupFromConfig(config, value = null, group = new FormGroup({})) {
148
- config.fields.forEach((controlConfig) => {
149
- if (isControlConfig(controlConfig)) {
150
- // then add a control to the group using the controlName from configuration
151
- const { controlName } = controlConfig;
152
- if (group.get(controlName)) {
153
- group.removeControl(controlName);
154
- }
155
- // if there's a value object and it has a non-null/undefined value for this field use it.
156
- // Otherwise, default to null
157
- const controlValue = (value && value[controlName]) ?? null;
158
- const control = createControlForType(controlConfig, controlValue);
159
- group.addControl(controlName, control);
160
- }
161
- });
162
- group.setValidators(config.validators);
163
- return group;
164
- }
165
- /**
166
- * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here
167
- * as we want to keep this function pure.
168
- * @param controlConfig the configuration object for the control to build
169
- * @param value an initial value to use if passed in
170
- */
171
- export function createControlForType(controlConfig, value = null) {
172
- // build form control out based on the control type
173
- const control = controlConfig.controlType === ControlType.SUB_GROUP
174
- ? buildFormGroupFromConfig(controlConfig, value)
175
- : controlConfig.controlType === ControlType.GROUP_LIST
176
- ? new FormArray([], controlConfig.validators)
177
- : new FormControl(value || null, controlConfig.validators);
178
- return control;
179
- }
180
- /**
181
- * A basic filter function that filters the search string against the label of the options object
182
- * @param options the array of options to filter
183
- * @param searchString the string from the input
184
- */
185
- export function filterOptionsByLabel(options, searchString) {
186
- return options.filter(option => {
187
- return option.label && option.label.toLowerCase().includes(searchString.toLowerCase());
188
- });
189
- }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jcmlzcHItZm9ybXMvc3JjL2xpYi9mb3JtLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUNMLFdBQVcsR0FDWixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFDTCxJQUFJLEVBRUosRUFBRSxFQUNGLFlBQVksRUFDWixhQUFhLEVBRWQsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBZSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXNCN0Q7Ozs7O0VBS0U7QUFDRixNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBZ0IsRUFBRSxNQUEwQjtJQUNoRixrREFBa0Q7SUFDbEQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNoRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUk7UUFDcEQsb0ZBQW9GO1FBQ3BGLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLGVBQXdCLEVBQUUsRUFBRTtZQUMvQix3R0FBd0c7WUFDeEcscUhBQXFIO1lBQ3JILElBQUssTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxZQUFZLFFBQVEsRUFBRztnQkFDNUQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFNO2dCQUFFLE9BQU8sZUFBZSxDQUFDO2FBQUU7UUFD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T0FBdUIsRUFBRSxZQUFvQjtJQUNoRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgU2VsZWN0T3B0aW9uLFxuICBBbnlGaWVsZENvbmZpZyxcbiAgRm9ybUNvbmZpZyxcbiAgRm9ybUdyb3VwTGlzdENvbmZpZyxcbiAgQ3Jpc3ByQ29udHJvbENvbmZpZyxcbiAgT3B0aW9uc1R5cGUsXG4gIEF1dG9jb21wbGV0ZU9wdGlvbnNDYWxsYmFjayxcbiAgQ3Jpc3ByRmllbGRDb25maWcsXG4gIENvbnRyb2xWYWx1ZVxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICBDb250cm9sVHlwZSxcbn0gZnJvbSAnLi9tb2RlbHMvY3Jpc3ByLWZpZWxkLmNvbmZpZydcbmltcG9ydCB7XG4gIGZyb20sXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBpc09ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9wZXJhdG9yRnVuY3Rpb25cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB2YWx1ZUluIH0gZnJvbSAnLi9mb3JtLm9wZXJhdG9ycyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogRFlOQU1JQyBGT1JNIFVUSUxTOiBhIGNvbGxlY3Rpb24gb2YgcHVyZS9tb3N0bHkgcHVyZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZnVsIGJvdGggaW50ZXJuYWxseSBhbmQgZm9yXG4gKiBkZXZlbG9waW5nIHRoZSBjb25zdW1pbmcgYXBwLlxuICpcbiAqIFRoZXkgYXJlIHNvcnRlZCBieSB1c2UgY2FzZTogYnVpbGRpbmcgb3V0IHRoZSBmb3JtIG9iamVjdDsgaGVscGVyIGZ1bmN0aW9ucyB0byB1c2Ugd2l0aCB0aGUgZGlzYWJsZWQkIGZ1bmN0aW9uO1xuICogaGVscGVyIGZ1bmN0aW9ucyB0byB1c2Ugd2l0aCB0aGUgY29tcHV0ZSBmaWVsZCBmdW5jdGlvbjsgYW5kIG90aGVyIGxvZ2ljIHNoYXJlZCBiZXR3ZWVuIGNvbXBvbmVudHNcbiAqL1xuXG4vKipcbiAqIFJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHdpdGggY2hlY2tDb250cm9sRm9yVmFsdWVzIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tDb250cm9sQ29uZmlnIHtcbiAgLy8gdGhlIGNvbnRyb2wgbmFtZSB0byB3YXRjaFxuICBjb250cm9sTmFtZTogc3RyaW5nO1xuICAvLyB0aGUgdmFsdWVzIHRvIHdhdGNoIGZvclxuICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAvLyB0aGUgZnVuY3Rpb24gdG8gcnVuIG9uIHRoZSBib29sZWFuIHJldHVybmVkIGJ5IHRoZSB3YXRjaGVyXG4gIGV2YWx1YXRlPzogKGlzVmFsdWVJblZhbHVlczogYm9vbGVhbikgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4qIFdhdGNoZXMgYSBzaW5nbGUgY29udHJvbCBmb3IgYSBsaXN0IG9mIHZhbHVlcywgcmV0dXJucyB0cnVlIHdoZW4gZmllbGQgdmFsdWUgbWF0Y2hlcyBhbnkgdmFsdWUgaW4gbGlzdFxuKiB1bmxlc3MgYW4gZXZhbHVhdGUgbWV0aG9kIGlzIGZvdW5kIG9uIGNvbmZpZywgaW4gd2hpY2ggY2FzZSB0aGF0IG1ldGhvZCBpcyBydW4gb24gdGhlIHJldHVybmVkIGJvb2xlYW4gdmFsdWVcbiogQHBhcmFtIGdyb3VwIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBmaWVsZCB3ZSB3YW50IHRvIHdhdGNoXG4qIEBwYXJhbSBjb25maWdcbiovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb250cm9sRm9yVmFsdWVzKGdyb3VwOiBGb3JtR3JvdXAsIGNvbmZpZzogQ2hlY2tDb250cm9sQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gIC8vIGNoZWNrIHRoYXQgYWxsIHRoZSBwaWVjZXMgd2UgbmVlZCBhcmUgYXZhaWxhYmxlXG4gIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRyb2xOYW1lICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnZhbHVlcykpIHtcbiAgICByZXR1cm4gZ2V0VmFsdWVDaGFuZ2VzKGdyb3VwLCBjb25maWcuY29udHJvbE5hbWUpLnBpcGUoXG4gICAgICAvLyByZXR1cm4gYSBib29sZWFuLCB0cnVlIGlmIHZhbHVlIGlzIGluIHRoZSB2YWx1ZXMgYmVpbmcgd2F0Y2ggZm9yLCBvdGhlcndpc2UgZmFsc2VcbiAgICAgIHZhbHVlSW4oY29uZmlnLnZhbHVlcyksXG4gICAgICBtYXAoKGlzVmFsdWVJblZhbHVlczogYm9vbGVhbikgPT4ge1xuICAgICAgICAvLyBzaW5jZSB3ZSBjYW4gb25seSBjaGVjayBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGxpc3Qgb2Ygd2F0Y2hlZCB2YWx1ZXMsIHRoZSBldmFsdWF0ZSBmdW5jdGlvbiBnaXZlcyB1c1xuICAgICAgICAvLyBhIGNoYW5jZSB0byBtYWtlIG90aGVyIGRlY2lzaW9ucyBiYXNlZCBvbiBpZiB0aGUgYm9vbGVhbiByZXR1cm5lZCwgZS5nLiByZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBub3QgaW4gd2F0Y2hlZCB2YWx1ZXNcbiAgICAgICAgaWYgKCBjb25maWcuZXZhbHVhdGUgJiYgY29uZmlnLmV2YWx1YXRlIGluc3RhbmNlb2YgRnVuY3Rpb24gKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5ldmFsdWF0ZShpc1ZhbHVlSW5WYWx1ZXMpO1xuICAgICAgICB9IGVsc2UgeyByZXR1cm4gaXNWYWx1ZUluVmFsdWVzOyB9XG4gICAgICB9KVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy9cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyB0aGUgY2hlY2tDb250cm9sc0ZvclZhbHVlcyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnRyb2xzQ29uZmlnIHtcbiAgLy8gYW4gYXJyYXkgb2YgY29udHJvbHMgdG8gd2F0Y2ggYW5kIHRoZSB2YWx1ZXMgdG8gY2hlY2sgZm9yXG4gIHdhdGNoQ29uZmlnczogQ2hlY2tDb250cm9sQ29uZmlnW107XG4gIC8vIHRoZSBmdW5jdGlvbiB0byBydW4gYWdhaW5zdCB0aGUgYXJyYXkgb2YgY3VycmVudCBmaWVsZCB2YWx1ZUluIHJlc3BvbnNlc1xuICBldmFsdWF0ZT86ICggYm9vbHM6IGJvb2xlYW5bXSApID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2F0Y2hlcyBhIGxpc3Qgb2YgZmllbGRzIGZvciBpbmRpdmlkdWFsIGxpc3RzIG9mIHZhbHVlcyByZXR1cm5pbmcgdHJ1ZSB3aGVuIGFueSBmaWVsZCBjb250YWlucyBvbmVcbiAqIG9mIHRoZSB2YWx1ZXMgYmVpbmcgd2F0Y2hlZCBmb3IsIG9yIG9wdGlvbmFsbHkgcnVubmluZyBhIGZ1bmN0aW9uIG9uIHRoZSBhcnJheSBvZiByZXNvbHZlZCBib29sZWFuc1xuICogZnJvbSB0aGUgbGlzdGVkIGZpZWxkcyBhbmQgcmV0dXJuaW5nIGEgYm9vbGVhblxuICogQHBhcmFtIGdyb3VwIHRoZSBmb3JtIGdyb3VwIHRoYXQgaGFzIHRoZSBmaWVsZHMgdG8gd2F0Y2ggYXMgZGlyZWN0IGRlc2NlbmRhbnRzXG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbnRyb2xzRm9yVmFsdWVzKGdyb3VwOiBGb3JtR3JvdXAsIGNvbmZpZzogQ2hlY2tDb250cm9sc0NvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIC8vIGlmIG5vIGNvbmZpZyBpcyBwYXNzZWQgd2UganVzdCB3YW50IHRvIHNob3cgdGhlIGZpZWxkLCBzbyB3ZSByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiB0cnVlXG4gIGlmICghY29uZmlnIHx8ICFjb25maWcud2F0Y2hDb25maWdzKSB7IHJldHVybiBvZih0cnVlKTsgfVxuICAvLyB3ZSBydW4gY2hlY2tDb250cm9sRm9yVmFsdWVzIG9uIGV2ZXJ5IGNvbnRyb2wgaW4gdGhlIGxpc3Qgb2YgV2F0Y2hDb25maWdzIGNyZWF0aW5nXG4gIC8vIGFuIGFycmF5IG9mIE9ic2VydmFibGUgd2F0Y2hpbmcgZmllbGRzIGZvciB2YWx1ZXNcbiAgY29uc3QgZmllbGRUcmlnZ2VycyA9IGNvbmZpZy53YXRjaENvbmZpZ3MubWFwKHdhdGNoQ29uZmlnID0+IHtcbiAgICAvLyByZXNvbHZlcyBhIGJvb2xlYW4sIHRydWUgd2hlbiBmaWVsZCB2YWx1ZSBtYXRjaGVzIGEgd2F0Y2hlZCB2YWx1ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgcmV0dXJuIGNoZWNrQ29udHJvbEZvclZhbHVlcyhncm91cCwgd2F0Y2hDb25maWcpO1xuICB9KTtcblxuICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICBmaWVsZFRyaWdnZXJzXG4gICkucGlwZShcbiAgICBzdGFydFdpdGgoW3RydWVdKSxcbiAgICBtYXAoKGJvb2xlYW5zOiBib29sZWFuW10pID0+IHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlZCBhbiBldmFsdWF0ZSBmdW5jdGlvbiB1c2UgaXRcbiAgICAgIGlmIChjb25maWcuZXZhbHVhdGUgJiYgY29uZmlnLmV2YWx1YXRlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5ldmFsdWF0ZShib29sZWFucyk7XG4gICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2Ugd2UgcmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSB3YXRjaGVkIGZpZWxkcyByZXNvbHZlIHRvIHRydWVcbiAgICAgICAgcmV0dXJuIGJvb2xlYW5zLnNvbWUoYm9vbCA9PiBib29sKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyB0aGUgY29tcHV0ZVZhbHVlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZUZpZWxkQ29uZmlnPFQgPSBhbnksIFJUID0gYW55PiB7XG4gIC8vIGFycmF5IG9mIGNvbnRyb2wgbmFtZXMgd2hvJ3MgdmFsdWVzIHdlIHdhbnQgdG8gd2F0Y2hcbiAgY29udHJvbE5hbWVzVG9XYXRjaDogc3RyaW5nW107XG4gIC8vIHRoZSBmdW5jdGlvbiB3ZSB3YW50IHRvIGNhbGwgb24gdGhlIGFycmF5IG9mIHdhdGNoZWQgdmFsdWVzIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIHdlXG4gIGNvbXB1dGVDYWxsYmFjazogKFxuICAgIHZhbHVlczogKFQpW11cbiAgKSA9PiBSVDtcbn1cblxuLyoqXG4gKiBXYXRjaGVzIHZhbHVlcyBvbiBhbiBhcnJheSBvZiBmaWVsZHMsIGNvbXB1dGluZyB0aGVpciB2YWx1ZXMgYXMgdGhleSBjaGFuZ2VcbiAqIEBwYXJhbSBncm91cCB0aGUgZ3JvdXAgdG8gZ2V0IHRoZSBmaWVsZHMgZnJvbSwgZm9yIG5vdyBpdCBjYW4gb25seSBiZSB0aGUgcGFyZW50IG9mIHRoZSBjb21wdXRlZCBmaWVsZFxuICogQHBhcmFtIGNvbXB1dGVGaWVsZHNDb25maWcgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBkcml2ZXMgdGhlIGNvbXB1dGF0aW9uLCBob2xkcyB0aGUgbmFtZXMgdG8gd2F0Y2ggYW5kIHRoZVxuICogY29tcHV0YXRpb24gZnVuY3Rpb24gdGhhdCBnZXQgY2FsbGVkIGFnYWluc3QgdGhlIGFycmF5IG9mIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlRnJvbUZpZWxkcyhncm91cDogRm9ybUdyb3VwLCBjb21wdXRlRmllbGRzQ29uZmlnOiBDb21wdXRlRmllbGRDb25maWcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBUT0RPOiBiZXR0ZXIgY2hlY2tpbmdcbiAgY29uc3QgeyBjb250cm9sTmFtZXNUb1dhdGNoIH0gPSBjb21wdXRlRmllbGRzQ29uZmlnO1xuICAvL2NyZWF0ZXMgYW4gb2JzZXJ2YWJsZSBsaXN0ZW5lciBmb3IgZWFjaCBjb250cm9sIGluIHRoZSBjb250cm9sTmFtZXNUb1dhdGNoIGFycmF5XG4gIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgIGNvbnRyb2xOYW1lc1RvV2F0Y2gubWFwKGNvbnRyb2xOYW1lVG9XYXRjaCA9PiBnZXRWYWx1ZUNoYW5nZXMoZ3JvdXAsIGNvbnRyb2xOYW1lVG9XYXRjaCkpXG4gICkucGlwZShcbiAgICAvLyBlYWNoIHRpbWUgYSB3YXRjaGVkIGZpZWxkIHZhbHVlcyBjaGFuZ2VzIGEgbmV3IGFycmF5IG9mIHRoZSBsYXRlc3QgZmllbGQgdmFsdWVzIGlzIHBpcGUgdGhyb3VnaCB0byB0aGVcbiAgICAvLyBjb21wdXRlIGNhbGxiYWNrLiBXaGljaCBydW5zIHRoZSB1c2VycyBsb2dpYyBvbiB0aGUgdmFsdWVzIHRvIGNvbXB1dGUgdGhpcyBmaWVsZHMgdmFsdWVcbiAgICBtYXAodmFsdWVzQXJyYXkgPT4gY29tcHV0ZUZpZWxkc0NvbmZpZy5jb21wdXRlQ2FsbGJhY2sodmFsdWVzQXJyYXkpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSB3cmFwcGVyIGZvciBkb2luZyBlcnJvciBjaGVja2luZyBhcm91bmQgZ2V0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIG9ic2VydmFibGUgZnJvbSBhIGNvbnRyb2wgb24gYSBmb3JtIGdyb3VwXG4gKiBAcGFyYW0gZ3JvdXAgdGhlIGZvcm0gZ3JvdXAgd2Ugd2FudCB0byBwdWxsIHRoZSBvYnNlcnZhYmxlIGZyb21cbiAqIEBwYXJhbSBjb250cm9sTmFtZSB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCB3aG8ncyB2YWx1ZSB3ZSB3YW50IHRvIHN1YnNjcmliZSB0b1xuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUNoYW5nZXMoZ3JvdXA6IEZvcm1Hcm91cCwgY29udHJvbE5hbWU6IHN0cmluZykge1xuICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcbiAgaWYgKCFjb250cm9sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb250cm9sIHdpdGggY29udHJvbE5hbWUgJHtjb250cm9sTmFtZX1gLCApO1xuICB9XG4gIHJldHVybiBjb250cm9sLnZhbHVlQ2hhbmdlcztcbn1cbi8qKlxuICogIFRPRE86IG1vdmUgdG8gdXRpbHMgbGlicmFyeSBhZnRlciBsaWJyYXJ5IGlzIGJ1aWx0XG4gKiAgQWxsb3dzIGRldmVsb3BlciB0byBwYXNzIGFuIGFycmF5IG9mIG9wZXJhdG9ycyBpbnRvIHRoZSBwaXBlIG9mIGFuIE9ic2VydmFibGUuXG4gKiAgVXNlZnVsIGZvciBjcmVhdGluZyBmdW5jdGlvbiB3aXRoIGEgdmFyaWFibGUgYW1vdW50IG9mIG9wZXJhdG9ycyB0byBiZSBydW5cbiAqIEBwYXJhbSBvYnNlcnZhYmxlIHRoZSBvYnNlcnZhYmxlIHRvIHBhc3MgdGhlIG9wZXJhdG9ycyB0b1xuICogQHBhcmFtIG9wZXJhdG9ycyBhcnJheSBvZiBvcGVyYXRvcnMgdG8gcGlwZVxuICovXG5mdW5jdGlvbiBwaXBlT3BlcmF0b3JzSW50b09ic2VydmFibGUob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+LCBvcGVyYXRvcnM6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBhbnk+W10pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb3BlcmF0b3JzLnJlZHVjZSgob2JzOiBPYnNlcnZhYmxlPHt9Piwgb3A6IE9wZXJhdG9yRnVuY3Rpb248e30sIHt9PikgPT4ge1xuICAgICAgcmV0dXJuIG9icy5waXBlKG9wKTtcbiAgICB9LCBvYnNlcnZhYmxlKTtcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIHBpcGUgb3BlcmF0b3JzIGludG8gb2JzZXJ2YWJsZScpO1xuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsT3B0aW9uc0lmRnVuY3Rpb24oXG4gIG9wdGlvbnM6IE9wdGlvbnNUeXBlIHwgQXV0b2NvbXBsZXRlT3B0aW9uc0NhbGxiYWNrLFxuICBwYXJlbnRHcm91cD86IEZvcm1Hcm91cCxcbiAgc2VhcmNoU3RyaW5nPzogc3RyaW5nXG4pOiBPcHRpb25zVHlwZSB7XG4gIHJldHVybiBvcHRpb25zIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvcHRpb25zKHBhcmVudEdyb3VwLCBzZWFyY2hTdHJpbmcpIDogb3B0aW9ucztcbn1cbi8qKlxuICogVGhlIHVzZXIgY2FuIGdpdmUgdXMgc2VsZWN0IG9wdGlvbnMgYXMgYW4gYXJyYXksIGEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0byBhIHByb21pc2UsXG4gKiBvciBhbiBvYnNlcnZhYmxlLiBUaGlzIGZ1bmN0aW9ucyBjb25zdW1lcyBhbnkgb2YgdGhvc2UgYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSB0aGF0XG4gKiByZXNvbHZlcyBhbiBhcnJheSBvZiBvcHRpb25zXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgcGFzc2VkIGluIGZyb20gdGhlIGNvbmZpZ1xuICogQHBhcmFtIGVtcHR5TWVzc2FnZU9wdGlvbiB0aGUgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGFycmF5IGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZhYmxpZnlPcHRpb25zKFxuICBvcHRpb25zOiBPcHRpb25zVHlwZSxcbiAgcGFyZW50R3JvdXA6IEZvcm1Hcm91cCxcbiAgc2VhcmNoU3RyaW5nPzogc3RyaW5nLFxuKTogT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXT4ge1xuICBjb25zdCBjYWxsZWRPcHRpb25zID0gY2FsbE9wdGlvbnNJZkZ1bmN0aW9uKG9wdGlvbnMsIHBhcmVudEdyb3VwLCBzZWFyY2hTdHJpbmcpO1xuICAvLyBpZiBvcHRpb25zIGFyZSBhIHByb21pc2VcbiAgY29uc3Qgb2JzZXJ2YWJsZU9wdGlvbnMgPSBjYWxsZWRPcHRpb25zIGluc3RhbmNlb2YgUHJvbWlzZVxuICAvLyBjb252ZXJ0IHRvIG9ic2VydmFibGVcbiAgPyBmcm9tKGNhbGxlZE9wdGlvbnMpXG4gIC8vIGlmIGFycmF5IHRoYXQgaXNuJ3QgZW1wdHlcbiAgOiBBcnJheS5pc0FycmF5KGNhbGxlZE9wdGlvbnMpICYmIGNhbGxlZE9wdGlvbnMubGVuZ3RoXG4gIC8vIGNvbnZlcnQgdG8gb2JzZXJ2YWJsZVxuICA/IG9mKGNhbGxlZE9wdGlvbnMpXG4gIC8vIGlmIG9ic2VydmFibGVcbiAgOiBpc09ic2VydmFibGUoY2FsbGVkT3B0aW9ucylcbiAgLy8gcmV0dXJuIGl0XG4gID8gY2FsbGVkT3B0aW9uc1xuICAvLyBlbHNlIGFuIGVtcHR5IGFycmF5XG4gIDogb2YoW10pO1xuICByZXR1cm4gb2JzZXJ2YWJsZU9wdGlvbnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZmllbGQgY29uZmlnIGlzIGZvciBhIGZvcm0gY29udHJvbCAobm90IGEgZGl2aWRlciwgaGVhZGluZyBvciBvdGhlciBub24tY29udHJvbCBmaWVsZClcbiAqICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udHJvbENvbmZpZyhmaWVsZENvbmZpZzogQ3Jpc3ByRmllbGRDb25maWcpOiBmaWVsZENvbmZpZyBpcyBDcmlzcHJDb250cm9sQ29uZmlnIHtcbiAgcmV0dXJuICdjb250cm9sTmFtZScgaW4gZmllbGRDb25maWc7XG59XG4vKipcbiAqIGJ1aWxkcyBvdXQgZm9ybSBncm91cCBiYXNlZCBvbiBjb25maWdcbiAqIEBwYXJhbSBjb25maWcgYSBjb25maWd1cmF0aW9uIGZvciBhIGZvcm0gZ3JvdXBcbiAqIEBwYXJhbSB2YWx1ZSBhbiBvYmplY3Qgb2YgaW5pdGlhbCB2YWx1ZXMgdG8gcGFzcyBpblxuICogQHBhcmFtIGdyb3VwIHRoZSBmb3JtIGdyb3VwIHRvIG1vZGlmeSBhbmQgYnVpbGQgb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1Hcm91cEZyb21Db25maWcoY29uZmlnOiBGb3JtQ29uZmlnLCB2YWx1ZSA9IG51bGwsIGdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KSApIHtcbiAgY29uZmlnLmZpZWxkcy5mb3JFYWNoKCAoY29udHJvbENvbmZpZzogQW55RmllbGRDb25maWcpID0+IHtcbiAgICBpZiAoaXNDb250cm9sQ29uZmlnKGNvbnRyb2xDb25maWcpKSB7XG4gICAgICAvLyB0aGVuIGFkZCBhIGNvbnRyb2wgdG8gdGhlIGdyb3VwIHVzaW5nIHRoZSBjb250cm9sTmFtZSBmcm9tIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IHtjb250cm9sTmFtZX0gPSBjb250cm9sQ29uZmlnO1xuICAgICAgaWYgKGdyb3VwLmdldChjb250cm9sTmFtZSkpIHtcbiAgICAgICAgZ3JvdXAucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGVyZSdzIGEgdmFsdWUgb2JqZWN0IGFuZCBpdCBoYXMgYSBub24tbnVsbC91bmRlZmluZWQgdmFsdWUgZm9yIHRoaXMgZmllbGQgdXNlIGl0LlxuICAgICAgLy8gT3RoZXJ3aXNlLCBkZWZhdWx0IHRvIG51bGxcbiAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9ICh2YWx1ZSAmJiB2YWx1ZVtjb250cm9sTmFtZV0pID8/IG51bGw7XG4gICAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbEZvclR5cGUoY29udHJvbENvbmZpZywgY29udHJvbFZhbHVlKVxuICAgICAgZ3JvdXAuYWRkQ29udHJvbChjb250cm9sTmFtZSwgY29udHJvbCk7XG4gICAgfVxuICB9KTtcbiAgZ3JvdXAuc2V0VmFsaWRhdG9ycyhjb25maWcudmFsaWRhdG9ycyk7XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBBbmFseXplIHRoZSBjb25maWcgYW5kIGJ1aWxkIGEgZm9ybSBjb250cm9sIHRvIHNwZWMuIE5vdGljZSB3ZSBkb24ndCB1c2UgRm9ybUJ1aWxkZXIgaGVyZVxuICogYXMgd2Ugd2FudCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gcHVyZS5cbiAqIEBwYXJhbSBjb250cm9sQ29uZmlnIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGNvbnRyb2wgdG8gYnVpbGRcbiAqIEBwYXJhbSB2YWx1ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHVzZSBpZiBwYXNzZWQgaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xGb3JUeXBlKGNvbnRyb2xDb25maWc6IEFueUZpZWxkQ29uZmlnLCB2YWx1ZTogQ29udHJvbFZhbHVlID0gbnVsbCkgIHtcbiAgLy8gYnVpbGQgZm9ybSBjb250cm9sIG91dCBiYXNlZCBvbiB0aGUgY29udHJvbCB0eXBlXG4gIGNvbnN0IGNvbnRyb2wgPSBjb250cm9sQ29uZmlnLmNvbnRyb2xUeXBlID09PSBDb250cm9sVHlwZS5TVUJfR1JPVVBcbiAgICA/IGJ1aWxkRm9ybUdyb3VwRnJvbUNvbmZpZyhjb250cm9sQ29uZmlnIGFzIEZvcm1Db25maWcsIHZhbHVlKVxuICAgIDogY29udHJvbENvbmZpZy5jb250cm9sVHlwZSA9PT0gQ29udHJvbFR5cGUuR1JPVVBfTElTVFxuICAgID8gbmV3IEZvcm1BcnJheShbXSwgKGNvbnRyb2xDb25maWcgYXMgRm9ybUdyb3VwTGlzdENvbmZpZykudmFsaWRhdG9ycylcbiAgICA6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgIHZhbHVlIHx8IG51bGwsXG4gICAgICAoY29udHJvbENvbmZpZyBhcyBDcmlzcHJDb250cm9sQ29uZmlnKS52YWxpZGF0b3JzXG4gICAgKTtcblxuICByZXR1cm4gY29udHJvbDtcbn1cblxuLyoqXG4gKiBBIGJhc2ljIGZpbHRlciBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgdGhlIHNlYXJjaCBzdHJpbmcgYWdhaW5zdCB0aGUgbGFiZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB0byBmaWx0ZXJcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgdGhlIHN0cmluZyBmcm9tIHRoZSBpbnB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT3B0aW9uc0J5TGFiZWwob3B0aW9uczogU2VsZWN0T3B0aW9uW10sIHNlYXJjaFN0cmluZzogc3RyaW5nKSAge1xuICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsICYmIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG59XG4iXX0=
@@ -1,24 +0,0 @@
1
- import { map } from 'rxjs/operators';
2
- export function valueIn(values) {
3
- return map((value) => {
4
- if (value) {
5
- return values.some(v => {
6
- if (isRegex(v)) {
7
- const trimmedStringForRegex = v.substr(1, v.length - 2);
8
- const regex = new RegExp(trimmedStringForRegex);
9
- return regex.test(value);
10
- }
11
- else {
12
- return v === value;
13
- }
14
- });
15
- }
16
- else {
17
- return false;
18
- }
19
- });
20
- }
21
- function isRegex(string) {
22
- return string.startsWith('/') && string.endsWith('/');
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5vcGVyYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0ub3BlcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLFVBQVUsT0FBTyxDQUFFLE1BQWdCO0lBQ3ZDLE9BQU8sR0FBRyxDQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNkLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDaEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLE1BQWM7SUFDN0IsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlSW4gKHZhbHVlczogc3RyaW5nW10pIHtcbiAgcmV0dXJuIG1hcCggKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZXMuc29tZSh2ID0+IHtcbiAgICAgICAgaWYgKGlzUmVnZXgodikpIHtcbiAgICAgICAgICBjb25zdCB0cmltbWVkU3RyaW5nRm9yUmVnZXggPSB2LnN1YnN0cigxLCB2Lmxlbmd0aCAtIDIpO1xuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0cmltbWVkU3RyaW5nRm9yUmVnZXgpO1xuICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdiA9PT0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNSZWdleChzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnN0YXJ0c1dpdGgoJy8nKSAmJiBzdHJpbmcuZW5kc1dpdGgoJy8nKTtcbn1cbiJdfQ==
@@ -1,111 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';
2
- import { map, tap } from 'rxjs/operators';
3
- import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
4
- import { BehaviorSubject, combineLatest } from 'rxjs';
5
- import { ENTER } from '@angular/cdk/keycodes';
6
- import { DEFAULT_EMPTY_OPTIONS_MESSAGE } from '../../models';
7
- import { AbstractAutocompleteComponent } from '../../abstracts';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../field-container/field-container.component";
10
- import * as i2 from "@angular/material/form-field";
11
- import * as i3 from "@angular/material/chips";
12
- import * as i4 from "@angular/material/icon";
13
- import * as i5 from "../info/info.component";
14
- import * as i6 from "@angular/material/autocomplete";
15
- import * as i7 from "@angular/material/core";
16
- import * as i8 from "../option/option.component";
17
- import * as i9 from "@angular/forms";
18
- import * as i10 from "@tft/form-validation-handler";
19
- import * as i11 from "@angular/common";
20
- import * as i12 from "@angular/material/input";
21
- const defaultConfig = {
22
- chipsSelectable: true,
23
- areChipsRemovable: true,
24
- tabToSelect: true,
25
- autoActiveFirstOption: true,
26
- imageUrlParam: 'image',
27
- typeDebounceTime: 500,
28
- allowDuplicates: false,
29
- duplicateCompareFunction: (chip, option) => chip.value === option.value,
30
- separatorKeyCodes: [ENTER],
31
- emptyOptionsMessage: DEFAULT_EMPTY_OPTIONS_MESSAGE,
32
- };
33
- export class AutocompleteChiplistFieldComponent extends AbstractAutocompleteComponent {
34
- constructor() {
35
- super(...arguments);
36
- this.defaultConfig = defaultConfig;
37
- this.chips$ = new BehaviorSubject([]);
38
- this.controlValue$ = this.chips$.pipe(tap(chips => {
39
- this.control.setValue(chips.map(chip => chip.value));
40
- }));
41
- }
42
- ngOnInit() {
43
- super.ngOnInit();
44
- this.remainingOptions$ = combineLatest([
45
- this.chips$,
46
- this.options$
47
- ]).pipe(map(([chips, options]) => {
48
- return this.config.allowDuplicates
49
- ? options
50
- : options?.filter(option => {
51
- return !chips.some(chip => this.config.duplicateCompareFunction(chip, option));
52
- });
53
- }));
54
- }
55
- setControlValue(value) {
56
- if (value) {
57
- this.chips$.next(value);
58
- }
59
- }
60
- // handles mat selecting
61
- handleSelect(event) {
62
- const selectedOption = event.option.value;
63
- this.chips$.next([...this.chips$.value, selectedOption]);
64
- this.chipInputRef.nativeElement.value = '';
65
- this.autocompleteInputControl.setValue('');
66
- // setTimeout needed because the panel thinks it's still open at this point
67
- setTimeout(() => this.chipInput.openPanel());
68
- }
69
- /**
70
- * To follow ARIA standards we want to select the active option on blur.
71
- * matChipInputAddOnBlur should do this but it causes buggy behaviour
72
- * @param event blur event that triggers the handle blur
73
- */
74
- handleTab(_event) {
75
- if (this.chipInput.activeOption && (this.config.tabToSelect || this.config.addChipOnBlur)) {
76
- const chip = this.chipInput.activeOption.value;
77
- this.chips$.next([...this.chips$.value, chip]);
78
- }
79
- }
80
- /**
81
- * Handles selection via key tokens passed through separatorKeyCodes propert
82
- * NOTE: If TAB is used focus does not move on to next component
83
- * @param event
84
- */
85
- handleTokenEnd(event) {
86
- if (this.chipInput.activeOption) {
87
- this.chipInput.activeOption.select();
88
- }
89
- event.chipInput?.clear();
90
- }
91
- mapToLabel(option) {
92
- return option ? option.label : '';
93
- }
94
- removeChip(removedChip) {
95
- const remainingChips = this.chips$.value.filter(chip => chip !== removedChip);
96
- this.chips$.next(remainingChips);
97
- }
98
- }
99
- AutocompleteChiplistFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AutocompleteChiplistFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
100
- AutocompleteChiplistFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: AutocompleteChiplistFieldComponent, selector: "crispr-autocomplete-chiplist-field", viewQueries: [{ propertyName: "chipInput", first: true, predicate: ["autoInput"], descendants: true, read: MatAutocompleteTrigger }, { propertyName: "chipInputRef", first: true, predicate: ["autoInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <mat-chip-list\n #chipList>\n <mat-chip\n class=\"refinement-chip\"\n *ngFor=\"let chip of controlValue$ | async\"\n [selectable]=\"config.chipsSelectable\"\n [removable]=\"config.areChipsRemovable\"\n (removed)=\"removeChip(chip)\">\n <span *ngIf=\"chip.imageUrl as imageUrl\" class=\"image-container\">\n <img [src]=\"imageUrl\" alt=\"image of {{chip.label}}\">\n </span>\n {{chip.label}}\n <mat-icon\n matChipRemove\n *ngIf=\"config.areChipsRemovable\">\n cancel\n </mat-icon>\n </mat-chip>\n <input class=\"hidden-error-directive-anchor\" [formControlName]=\"config.controlName\" type=\"text\"/>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n (keydown.tab)=\"handleTab($event)\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeyCodes\"\n (matChipInputTokenEnd)=\"handleTokenEnd($event)\"\n role=\"searchbox\"\n type=\"text\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput/>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n </mat-chip-list>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"this.config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"mapToLabel\">\n <ng-container *ngIf=\"remainingOptions$ | async as remainingOptions; else emptyOption\">\n <ng-container *ngIf=\"remainingOptions.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of remainingOptions$ | async\"\n [value]=\"option\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n</crispr-field-container>\n", styles: [".refinement-chip .image-container{width:26px;height:26px;border-radius:50%;overflow:hidden;margin:-2px 4px -2px -8px}.refinement-chip .image-container img{width:100%;height:100%;object-fit:cover}.hidden-error-directive-anchor{display:none}\n"], components: [{ type: i1.FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.InfoComponent, selector: "crispr-info", inputs: ["info"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.OptionComponent, selector: "crispr-option", inputs: ["option"] }], directives: [{ type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.ControlErrorsDirective, selector: "[formControl], [formControlName]" }, { type: i12.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"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }, { type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i11.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AutocompleteChiplistFieldComponent, decorators: [{
102
- type: Component,
103
- args: [{ selector: 'crispr-autocomplete-chiplist-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <mat-chip-list\n #chipList>\n <mat-chip\n class=\"refinement-chip\"\n *ngFor=\"let chip of controlValue$ | async\"\n [selectable]=\"config.chipsSelectable\"\n [removable]=\"config.areChipsRemovable\"\n (removed)=\"removeChip(chip)\">\n <span *ngIf=\"chip.imageUrl as imageUrl\" class=\"image-container\">\n <img [src]=\"imageUrl\" alt=\"image of {{chip.label}}\">\n </span>\n {{chip.label}}\n <mat-icon\n matChipRemove\n *ngIf=\"config.areChipsRemovable\">\n cancel\n </mat-icon>\n </mat-chip>\n <input class=\"hidden-error-directive-anchor\" [formControlName]=\"config.controlName\" type=\"text\"/>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n (keydown.tab)=\"handleTab($event)\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeyCodes\"\n (matChipInputTokenEnd)=\"handleTokenEnd($event)\"\n role=\"searchbox\"\n type=\"text\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput/>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n </mat-chip-list>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"this.config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"mapToLabel\">\n <ng-container *ngIf=\"remainingOptions$ | async as remainingOptions; else emptyOption\">\n <ng-container *ngIf=\"remainingOptions.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of remainingOptions$ | async\"\n [value]=\"option\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n</crispr-field-container>\n", styles: [".refinement-chip .image-container{width:26px;height:26px;border-radius:50%;overflow:hidden;margin:-2px 4px -2px -8px}.refinement-chip .image-container img{width:100%;height:100%;object-fit:cover}.hidden-error-directive-anchor{display:none}\n"] }]
104
- }], propDecorators: { chipInput: [{
105
- type: ViewChild,
106
- args: ['autoInput', { read: MatAutocompleteTrigger }]
107
- }], chipInputRef: [{
108
- type: ViewChild,
109
- args: ['autoInput']
110
- }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWNoaXBsaXN0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlLWNoaXBsaXN0LWZpZWxkL2F1dG9jb21wbGV0ZS1jaGlwbGlzdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL21hdGVyaWFsL2F1dG9jb21wbGV0ZS1jaGlwbGlzdC1maWVsZC9hdXRvY29tcGxldGUtY2hpcGxpc3QtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFnQyxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxPQUFPLEVBQW1DLDZCQUE2QixFQUFnQixNQUFNLGNBQWMsQ0FBQztBQUM1RyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHaEUsTUFBTSxhQUFhLEdBQTZDO0lBQzlELGVBQWUsRUFBRSxJQUFJO0lBQ3JCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsV0FBVyxFQUFFLElBQUk7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixhQUFhLEVBQUUsT0FBTztJQUN0QixnQkFBZ0IsRUFBRSxHQUFHO0lBQ3JCLGVB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QUNILGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQW9CO1FBQzdCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUF5QjtRQUNsQyxNQUFNLGNBQWMsR0FBbUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7OytIQW5GVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyw2SkFnQmIsc0JBQXNCLGdKQzdDeEQscXRGQWlGQTsyRkRwRGEsa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLG9DQUFvQyxtQkFHN0IsdUJBQXVCLENBQUMsTUFBTTs4QkFrQlcsU0FBUztzQkFBbEUsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7Z0JBQ2hDLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNoaXBsaXN0RmllbGRDb25maWcsIERFRkFVTFRfRU1QVFlfT1BUSU9OU19NRVNTQUdFLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5cbmNvbnN0IGRlZmF1bHRDb25maWc6IFBhcnRpYWw8QXV0b2NvbXBsZXRlQ2hpcGxpc3RGaWVsZENvbmZpZz4gPSB7XG4gIGNoaXBzU2VsZWN0YWJsZTogdHJ1ZSxcbiAgYXJlQ2hpcHNSZW1vdmFibGU6IHRydWUsXG4gIHRhYlRvU2VsZWN0OiB0cnVlLFxuICBhdXRvQWN0aXZlRmlyc3RPcHRpb246IHRydWUsXG4gIGltYWdlVXJsUGFyYW06ICdpbWFnZScsXG4gIHR5cGVEZWJvdW5jZVRpbWU6IDUwMCxcbiAgYWxsb3dEdXBsaWNhdGVzOiBmYWxzZSxcbiAgZHVwbGljYXRlQ29tcGFyZUZ1bmN0aW9uOiAoY2hpcCwgb3B0aW9uKSA9PiBjaGlwLnZhbHVlID09PSBvcHRpb24udmFsdWUsXG4gIHNlcGFyYXRvcktleUNvZGVzOiBbRU5URVJdLFxuICBlbXB0eU9wdGlvbnNNZXNzYWdlOiBERUZBVUxUX0VNUFRZX09QVElPTlNfTUVTU0FHRSxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLWF1dG9jb21wbGV0ZS1jaGlwbGlzdC1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtY2hpcGxpc3QtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdXRvY29tcGxldGUtY2hpcGxpc3QtZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ2hpcGxpc3RGaWVsZENvbXBvbmVudFxuICBleHRlbmRzIEFic3RyYWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50PEF1dG9jb21wbGV0ZUNoaXBsaXN0RmllbGRDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGVmYXVsdENvbmZpZyA9IGRlZmF1bHRDb25maWc7XG4gIGNoaXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0T3B0aW9uW10+KFtdKTtcbiAgcmVtYWluaW5nT3B0aW9ucyQ6IE9ic2VydmFibGU8U2VsZWN0T3B0aW9uW10+O1xuXG4gIGNvbnRyb2xWYWx1ZSQgPSB0aGlzLmNoaXBzJC5waXBlKFxuICAgIHRhcChjaGlwcyA9PiB7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoY2hpcHMubWFwKGNoaXAgPT4gY2hpcC52YWx1ZSkpXG4gICAgfSlcbiAgKTtcblxuXG4gIC8vIFdlIG5lZWQgdXNlIFZpZXdDaGlsZCB0d2ljZSBvbiB0aGUgc2FtZSB0ZW1wbGF0ZSByZWYgdG8gYWNjZXNzIGFzIGRpZmZlcmVudCB0eXBlc1xuICAvLyAtIHRoZSBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIGlzIHVzZWQgdG8gZm9yIHNlbGVjdGluZyB2YWx1ZSBvbiB0YWJcbiAgLy8gLSB0aGUgRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiBpcyB1c2VkIHRvIGNsZWFyIHRoZSB2YWx1ZSBmcm9tIGlucHV0IGVsZW1lbnQgb24gc2VsZWN0aW9uXG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9KSBjaGlwSW5wdXQ6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcpIGNoaXBJbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5yZW1haW5pbmdPcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jaGlwcyQsXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2NoaXBzLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuYWxsb3dEdXBsaWNhdGVzXG4gICAgICAgICAgPyBvcHRpb25zXG4gICAgICAgICAgOiBvcHRpb25zPy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhY2hpcHMuc29tZShjaGlwID0+IHRoaXMuY29uZmlnLmR1cGxpY2F0ZUNvbXBhcmVGdW5jdGlvbihjaGlwLCBvcHRpb24pKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBTZWxlY3RPcHRpb25bXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGlwcyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gaGFuZGxlcyBtYXQgc2VsZWN0aW5nXG4gIGhhbmRsZVNlbGVjdChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RPcHRpb24gPSBldmVudC5vcHRpb24udmFsdWUgYXMgU2VsZWN0T3B0aW9uO1xuICAgIHRoaXMuY2hpcHMkLm5leHQoWy4uLnRoaXMuY2hpcHMkLnZhbHVlLCAgc2VsZWN0ZWRPcHRpb25dKTtcbiAgICB0aGlzLmNoaXBJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5hdXRvY29tcGxldGVJbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIC8vIHNldFRpbWVvdXQgbmVlZGVkIGJlY2F1c2UgdGhlIHBhbmVsIHRoaW5rcyBpdCdzIHN0aWxsIG9wZW4gYXQgdGhpcyBwb2ludFxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGlwSW5wdXQub3BlblBhbmVsKCkpXG4gIH1cblxuICAvKipcbiAgICogVG8gZm9sbG93IEFSSUEgc3RhbmRhcmRzIHdlIHdhbnQgdG8gc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uIG9uIGJsdXIuXG4gICAqIG1hdENoaXBJbnB1dEFkZE9uQmx1ciBzaG91bGQgZG8gdGhpcyBidXQgaXQgY2F1c2VzIGJ1Z2d5IGJlaGF2aW91clxuICAgKiBAcGFyYW0gZXZlbnQgYmx1ciBldmVudCB0aGF0IHRyaWdnZXJzIHRoZSBoYW5kbGUgYmx1clxuICAgKi9cbiAgaGFuZGxlVGFiKF9ldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICh0aGlzLmNoaXBJbnB1dC5hY3RpdmVPcHRpb24gJiYgKHRoaXMuY29uZmlnLnRhYlRvU2VsZWN0IHx8IHRoaXMuY29uZmlnLmFkZENoaXBPbkJsdXIpKSB7XG4gICAgICBjb25zdCBjaGlwID0gdGhpcy5jaGlwSW5wdXQuYWN0aXZlT3B0aW9uLnZhbHVlO1xuICAgICAgdGhpcy5jaGlwcyQubmV4dChbLi4udGhpcy5jaGlwcyQudmFsdWUsICBjaGlwXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgc2VsZWN0aW9uIHZpYSBrZXkgdG9rZW5zIHBhc3NlZCB0aHJvdWdoIHNlcGFyYXRvcktleUNvZGVzIHByb3BlcnRcbiAgICogTk9URTogSWYgVEFCIGlzIHVzZWQgZm9jdXMgZG9lcyBub3QgbW92ZSBvbiB0byBuZXh0IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIGhhbmRsZVRva2VuRW5kKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xuICAgIGlmICh0aGlzLmNoaXBJbnB1dC5hY3RpdmVPcHRpb24pIHtcbiAgICAgIHRoaXMuY2hpcElucHV0LmFjdGl2ZU9wdGlvbi5zZWxlY3QoKTtcbiAgICB9XG4gICAgZXZlbnQuY2hpcElucHV0Py5jbGVhcigpO1xuICB9XG5cbiAgbWFwVG9MYWJlbChvcHRpb246IFNlbGVjdE9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiAnJztcbiAgfVxuXG4gIHJlbW92ZUNoaXAocmVtb3ZlZENoaXA6IFNlbGVjdE9wdGlvbikge1xuICAgIGNvbnN0IHJlbWFpbmluZ0NoaXBzOiBTZWxlY3RPcHRpb25bXSA9IHRoaXMuY2hpcHMkLnZhbHVlLmZpbHRlcihjaGlwID0+IGNoaXAgIT09IHJlbW92ZWRDaGlwKTtcbiAgICB0aGlzLmNoaXBzJC5uZXh0KHJlbWFpbmluZ0NoaXBzKTtcbiAgfVxufVxuIiwiPGNyaXNwci1maWVsZC1jb250YWluZXJcbiAgW2NvbmZpZ109XCJjb25maWdcIlxuICBbZ3JvdXBdPVwiZ3JvdXBcIj5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbY29sb3JdPVwiY29uZmlnLmNvbG9yXCJcbiAgICBbYXBwZWFyYW5jZV09XCJjb25maWcuYXBwZWFyYW5jZVwiXG4gICAgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIj5cbiAgICAgIHt7Y29uZmlnLmxhYmVsfX1cbiAgICA8L21hdC1sYWJlbD5cblxuICAgIDxtYXQtY2hpcC1saXN0XG4gICAgICAjY2hpcExpc3Q+XG4gICAgICA8bWF0LWNoaXBcbiAgICAgICAgY2xhc3M9XCJyZWZpbmVtZW50LWNoaXBcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjb250cm9sVmFsdWUkIHwgYXN5bmNcIlxuICAgICAgICBbc2VsZWN0YWJsZV09XCJjb25maWcuY2hpcHNTZWxlY3RhYmxlXCJcbiAgICAgICAgW3JlbW92YWJsZV09XCJjb25maWcuYXJlQ2hpcHNSZW1vdmFibGVcIlxuICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwKGNoaXApXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY2hpcC5pbWFnZVVybCBhcyBpbWFnZVVybFwiIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlVXJsXCIgYWx0PVwiaW1hZ2Ugb2Yge3tjaGlwLmxhYmVsfX1cIj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7e2NoaXAubGFiZWx9fVxuICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICBtYXRDaGlwUmVtb3ZlXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuYXJlQ2hpcHNSZW1vdmFibGVcIj5cbiAgICAgICAgICBjYW5jZWxcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJoaWRkZW4tZXJyb3ItZGlyZWN0aXZlLWFuY2hvclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmNvbnRyb2xOYW1lXCIgdHlwZT1cInRleHRcIi8+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiYXV0b2NvbXBsZXRlSW5wdXRDb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy5wbGFjZWhvbGRlclwiXG4gICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiaGFuZGxlVGFiKCRldmVudClcIlxuICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiY29uZmlnLnNlcGFyYXRvcktleUNvZGVzXCJcbiAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImhhbmRsZVRva2VuRW5kKCRldmVudClcIlxuICAgICAgICByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgI2F1dG9JbnB1dC8+XG4gICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5maWVsZFN1ZmZpeFwiIG1hdFN1ZmZpeD57e2NvbmZpZy5maWVsZFN1ZmZpeH19PC9zcGFuPlxuICAgICAgPGNyaXNwci1pbmZvXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLmluZm9cIlxuICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgW2luZm9dPVwiY29uZmlnLmluZm8gXCI+XG4gICAgICA8L2NyaXNwci1pbmZvPlxuXG4gICAgPC9tYXQtY2hpcC1saXN0PlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICBbYXV0b0FjdGl2ZUZpcnN0T3B0aW9uXT1cInRoaXMuY29uZmlnLmF1dG9BY3RpdmVGaXJzdE9wdGlvblwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlU2VsZWN0KCRldmVudClcIlxuICAgICAgW2Rpc3BsYXlXaXRoXT1cIm1hcFRvTGFiZWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW1haW5pbmdPcHRpb25zJCB8IGFzeW5jIGFzIHJlbWFpbmluZ09wdGlvbnM7IGVsc2UgZW1wdHlPcHRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbWFpbmluZ09wdGlvbnMubGVuZ3RoID4gMDsgZWxzZSBlbXB0eU9wdGlvblwiPlxuICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByZW1haW5pbmdPcHRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgIDxjcmlzcHItb3B0aW9uIFtvcHRpb25dPVwib3B0aW9uXCI+PC9jcmlzcHItb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eU9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAge3tjb25maWcuZW1wdHlPcHRpb25zTWVzc2FnZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuXG4gICAgPG1hdC1oaW50ICpuZ0lmPVwiY29uZmlnLmhpbnQgJiYgKGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wudG91Y2hlZClcIj57e2NvbmZpZy5oaW50fX08L21hdC1oaW50PlxuXG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2NyaXNwci1maWVsZC1jb250YWluZXI+XG4iXX0=
@@ -1,78 +0,0 @@
1
- import { Component, ViewChild, ChangeDetectionStrategy, ElementRef } from '@angular/core';
2
- import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
3
- import { DEFAULT_EMPTY_OPTIONS_MESSAGE } from '../../models';
4
- import { AbstractAutocompleteComponent } from '../../abstracts';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../field-container/field-container.component";
7
- import * as i2 from "@angular/material/form-field";
8
- import * as i3 from "../info/info.component";
9
- import * as i4 from "@angular/material/autocomplete";
10
- import * as i5 from "@angular/material/core";
11
- import * as i6 from "../option/option.component";
12
- import * as i7 from "@angular/forms";
13
- import * as i8 from "@tft/form-validation-handler";
14
- import * as i9 from "@angular/common";
15
- import * as i10 from "@angular/material/input";
16
- const defaultConfig = {
17
- autoActiveFirstOption: true,
18
- typeDebounceTime: 500,
19
- emptyOptionsMessage: DEFAULT_EMPTY_OPTIONS_MESSAGE
20
- };
21
- export class AutocompleteFieldComponent extends AbstractAutocompleteComponent {
22
- constructor() {
23
- super(...arguments);
24
- this.defaultConfig = defaultConfig;
25
- }
26
- ngOnInit() {
27
- super.ngOnInit();
28
- this.clearFieldSubscription = this.autocompleteInputControl.valueChanges.subscribe((text) => {
29
- if (typeof text === 'string' && text?.trim() === '') {
30
- this.control.setValue(null);
31
- }
32
- });
33
- }
34
- ngOnDestroy() {
35
- this.clearFieldSubscription.unsubscribe();
36
- }
37
- setControlValue(value) {
38
- if (this.control && value) {
39
- // sets the initial value on the control if one is passed
40
- this.control.setValue(value.value || '');
41
- this.autocompleteInputControl.setValue(value.label || '');
42
- }
43
- }
44
- /**
45
- * The material autocomplete defaults to displaying the options value instead of its label.
46
- * We only have the value from the selected option to work with, so we have to pass the options
47
- * through a function called in the template and return the function that the material displayWith
48
- * input is expecting.
49
- * @param options the array of options to search for option with corresponding value
50
- */
51
- displayLabel(options) {
52
- if (this.config.displayWith) {
53
- return this.config.displayWith(options);
54
- }
55
- return (value) => {
56
- const label = !!options && Array.isArray(options)
57
- ? options.find((option) => JSON.stringify(option.value) === JSON.stringify(value))?.label : value;
58
- return label;
59
- };
60
- }
61
- handleSelect(event) {
62
- this.control.setValue(event.option.value);
63
- this.autoInputRef.nativeElement.blur();
64
- }
65
- }
66
- AutocompleteFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AutocompleteFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
67
- AutocompleteFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: AutocompleteFieldComponent, selector: "crispr-autocomplete-field", viewQueries: [{ propertyName: "autoInput", first: true, predicate: ["autoInput"], descendants: true, read: MatAutocompleteTrigger }, { propertyName: "autoInputRef", first: true, predicate: ["autoInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <input class=\"hidden-error-directive-anchor\" [formControlName]=\"config.controlName\" type=\"text\"/>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matAutocomplete]=\"auto\"\n role=\"textbox\"\n type=\"textbox\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput>\n\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"displayLabel(options$ | async)\">\n\n <ng-container *ngIf=\"options$ | async as options; else emptyOption\">\n <ng-container *ngIf=\"options.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of options\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n</crispr-field-container>\n", styles: [".hidden-error-directive-anchor{display:none}\n"], components: [{ type: i1.FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.InfoComponent, selector: "crispr-info", inputs: ["info"] }, { type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i6.OptionComponent, selector: "crispr-option", inputs: ["option"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i8.ControlErrorsDirective, selector: "[formControl], [formControlName]" }, { type: i10.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"] }, { type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i9.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AutocompleteFieldComponent, decorators: [{
69
- type: Component,
70
- args: [{ selector: 'crispr-autocomplete-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <input class=\"hidden-error-directive-anchor\" [formControlName]=\"config.controlName\" type=\"text\"/>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matAutocomplete]=\"auto\"\n role=\"textbox\"\n type=\"textbox\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput>\n\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"displayLabel(options$ | async)\">\n\n <ng-container *ngIf=\"options$ | async as options; else emptyOption\">\n <ng-container *ngIf=\"options.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of options\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"config.hint && (control.valid || !control.touched)\">{{config.hint}}</mat-hint>\n\n </mat-form-field>\n</crispr-field-container>\n", styles: [".hidden-error-directive-anchor{display:none}\n"] }]
71
- }], propDecorators: { autoInput: [{
72
- type: ViewChild,
73
- args: ['autoInput', { read: MatAutocompleteTrigger }]
74
- }], autoInputRef: [{
75
- type: ViewChild,
76
- args: ['autoInput']
77
- }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlLWZpZWxkL2F1dG9jb21wbGV0ZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL21hdGVyaWFsL2F1dG9jb21wbGV0ZS1maWVsZC9hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxzQkFBc0IsRUFBZ0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RyxPQUFPLEVBQXlDLDZCQUE2QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFHaEUsTUFBTSxhQUFhLEdBQXFDO0lBQ3RELHFCQUFxQixFQUFFLElBQUk7SUFDM0IsZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixtQkFBbUIsRUFBRSw2QkFBNkI7Q0FDbkQsQ0FBQztBQVFGLE1BQU0sT0FBTywwQkFDWCxTQUFRLDZCQUFzRDtJQVBoRTs7UUFVRSxrQkFBYSxHQUFHLGFBQWEsQ0FBQztLQWlEL0I7SUEzQ0MsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUNsRyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFtQjtRQUNqQyxJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxFQUFFO1lBQ3hCLHlEQUF5RDtZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxZQUFZLENBQUMsT0FBdUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sS0FBSyxHQUFXLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3pELENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakcsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQW1DO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQzs7dUhBcERVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLG9KQUtMLHNCQUFzQixnSkN4QnhELHcwREE4REE7MkZEM0NhLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU07OEJBT1csU0FBUztzQkFBbEUsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7Z0JBQ2hDLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24sIEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnLCBERUZBVUxUX0VNUFRZX09QVElPTlNfTUVTU0FHRSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBBYnN0cmFjdEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0cyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuY29uc3QgZGVmYXVsdENvbmZpZzogUGFydGlhbDxBdXRvY29tcGxldGVGaWVsZENvbmZpZz4gPSB7XG4gIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogdHJ1ZSxcbiAgdHlwZURlYm91bmNlVGltZTogNTAwLFxuICBlbXB0eU9wdGlvbnNNZXNzYWdlOiBERUZBVUxUX0VNUFRZX09QVElPTlNfTUVTU0FHRVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLWF1dG9jb21wbGV0ZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlRmllbGRDb21wb25lbnRcbiAgZXh0ZW5kcyBBYnN0cmFjdEF1dG9jb21wbGV0ZUNvbXBvbmVudDxBdXRvY29tcGxldGVGaWVsZENvbmZpZz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgZGVmYXVsdENvbmZpZyA9IGRlZmF1bHRDb25maWc7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9KSBhdXRvSW5wdXQ6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcpIGF1dG9JbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBjbGVhckZpZWxkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNsZWFyRmllbGRTdWJzY3JpcHRpb24gPSB0aGlzLmF1dG9jb21wbGV0ZUlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dD8udHJpbSgpID09PSAnJykge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJGaWVsZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBTZWxlY3RPcHRpb24pIHtcbiAgICBpZih0aGlzLmNvbnRyb2wgJiYgdmFsdWUpIHtcbiAgICAgIC8vIHNldHMgdGhlIGluaXRpYWwgdmFsdWUgb24gdGhlIGNvbnRyb2wgaWYgb25lIGlzIHBhc3NlZFxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlLnZhbHVlIHx8ICcnKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlSW5wdXRDb250cm9sLnNldFZhbHVlKHZhbHVlLmxhYmVsIHx8ICcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1hdGVyaWFsIGF1dG9jb21wbGV0ZSBkZWZhdWx0cyB0byBkaXNwbGF5aW5nIHRoZSBvcHRpb25zIHZhbHVlIGluc3RlYWQgb2YgaXRzIGxhYmVsLlxuICAgKiBXZSBvbmx5IGhhdmUgdGhlIHZhbHVlIGZyb20gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB3b3JrIHdpdGgsIHNvIHdlIGhhdmUgdG8gcGFzcyB0aGUgb3B0aW9uc1xuICAgKiB0aHJvdWdoIGEgZnVuY3Rpb24gY2FsbGVkIGluIHRoZSB0ZW1wbGF0ZSBhbmQgcmV0dXJuIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBtYXRlcmlhbCBkaXNwbGF5V2l0aFxuICAgKiBpbnB1dCBpcyBleHBlY3RpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIHRoZSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3Igb3B0aW9uIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZVxuICAgKi9cbiAgZGlzcGxheUxhYmVsKG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzcGxheVdpdGgob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWw6IHN0cmluZyA9ICEhb3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICA/IG9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBKU09OLnN0cmluZ2lmeShvcHRpb24udmFsdWUpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpPy5sYWJlbDogdmFsdWU7XG4gICAgICByZXR1cm4gbGFiZWxcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGV2ZW50Lm9wdGlvbi52YWx1ZSlcbiAgICB0aGlzLmF1dG9JbnB1dFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxufVxuXG4iLCJcbjxjcmlzcHItZmllbGQtY29udGFpbmVyXG4gIFtjb25maWddPVwiY29uZmlnXCJcbiAgW2dyb3VwXT1cImdyb3VwXCI+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2NvbG9yXT1cImNvbmZpZy5jb2xvclwiXG4gICAgW2FwcGVhcmFuY2VdPVwiY29uZmlnLmFwcGVhcmFuY2VcIlxuICAgIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwiY29uZmlnLmxhYmVsXCI+XG4gICAgICB7e2NvbmZpZy5sYWJlbH19XG4gICAgPC9tYXQtbGFiZWw+XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJoaWRkZW4tZXJyb3ItZGlyZWN0aXZlLWFuY2hvclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29uZmlnLmNvbnRyb2xOYW1lXCIgdHlwZT1cInRleHRcIi8+XG5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbZm9ybUNvbnRyb2xdPVwiYXV0b2NvbXBsZXRlSW5wdXRDb250cm9sXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcucGxhY2Vob2xkZXJcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgIHR5cGU9XCJ0ZXh0Ym94XCJcbiAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAjYXV0b0lucHV0PlxuXG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWcuZmllbGRTdWZmaXhcIiBtYXRTdWZmaXg+e3tjb25maWcuZmllbGRTdWZmaXh9fTwvc3Bhbj5cbiAgICA8Y3Jpc3ByLWluZm9cbiAgICAgICpuZ0lmPVwiY29uZmlnLmluZm9cIlxuICAgICAgbWF0U3VmZml4XG4gICAgICBbaW5mb109XCJjb25maWcuaW5mbyBcIj5cbiAgICA8L2NyaXNwci1pbmZvPlxuXG4gICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIFthdXRvQWN0aXZlRmlyc3RPcHRpb25dPVwiY29uZmlnLmF1dG9BY3RpdmVGaXJzdE9wdGlvblwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlU2VsZWN0KCRldmVudClcIlxuICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlMYWJlbChvcHRpb25zJCB8IGFzeW5jKVwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucyQgfCBhc3luYyBhcyBvcHRpb25zOyBlbHNlIGVtcHR5T3B0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlPcHRpb25cIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgIDxjcmlzcHItb3B0aW9uIFtvcHRpb25dPVwib3B0aW9uXCI+PC9jcmlzcHItb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eU9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAge3tjb25maWcuZW1wdHlPcHRpb25zTWVzc2FnZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJjb25maWcuaGludCAmJiAoY29udHJvbC52YWxpZCB8fCAhY29udHJvbC50b3VjaGVkKVwiPnt7Y29uZmlnLmhpbnR9fTwvbWF0LWhpbnQ+XG5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvY3Jpc3ByLWZpZWxkLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { Component, ChangeDetectionStrategy } from '@angular/core';
2
- import { map, startWith } from 'rxjs/operators';
3
- import { CrisprFieldComponent } from '../../abstracts';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/button";
6
- import * as i2 from "@angular/material/icon";
7
- import * as i3 from "@angular/forms";
8
- import * as i4 from "@tft/form-validation-handler";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "@angular/material/tooltip";
11
- export class ButtonComponent extends CrisprFieldComponent {
12
- constructor() {
13
- super(...arguments);
14
- this.defaultConfig = { buttonType: 'raised', type: 'submit' };
15
- }
16
- get matButtonClass() {
17
- return this.config.buttonType ? `mat-${this.config.buttonType}-button` : '';
18
- }
19
- ngOnInit() {
20
- super.ngOnInit();
21
- this.formValid$ = this.group.statusChanges.pipe(map(status => status === 'VALID'), startWith(this.group.valid));
22
- }
23
- handleClick(group, event) {
24
- if (this.config.callback) {
25
- this.config.callback(group, event);
26
- }
27
- }
28
- }
29
- ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
30
- ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: ButtonComponent, selector: "crispr-button", usesInheritance: true, ngImport: i0, template: "<button\n [formGroup]=\"group\"\n mat-button\n [ngClass]=\"matButtonClass\"\n [color]=\"config.color\"\n [disabled]=\"config.disabledOnInvalidForm && !(formValid$ | async)\"\n [type]=\"config.type\"\n (click)=\"handleClick(group, $event)\"\n [matTooltip]=\"config.info?.content\"\n [matTooltipPosition]=\"config.info?.tooltipPosition || 'below'\">\n {{ config.label }}\n <mat-icon *ngIf=\"config.icon\">\n {{ config.icon}}\n </mat-icon>\n</button>\n\n", styles: [""], components: [{ type: i1.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"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: ButtonComponent, decorators: [{
32
- type: Component,
33
- args: [{ selector: 'crispr-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n [formGroup]=\"group\"\n mat-button\n [ngClass]=\"matButtonClass\"\n [color]=\"config.color\"\n [disabled]=\"config.disabledOnInvalidForm && !(formValid$ | async)\"\n [type]=\"config.type\"\n (click)=\"handleClick(group, $event)\"\n [matTooltip]=\"config.info?.content\"\n [matTooltipPosition]=\"config.info?.tooltipPosition || 'below'\">\n {{ config.label }}\n <mat-icon *ngIf=\"config.icon\">\n {{ config.icon}}\n </mat-icon>\n</button>\n\n", styles: [""] }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvbWF0ZXJpYWwvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL21hdGVyaWFsL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxvQkFBa0M7SUFOdkU7O1FBU0Usa0JBQWEsR0FBMEIsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztLQW9CL0U7SUFqQkMsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQixFQUFFLEtBQWlCO1FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQzs7NEdBdEJVLGVBQWU7Z0dBQWYsZUFBZSw0RUNkNUIsb2RBZ0JBOzJGREZhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ1dHRvbkNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENyaXNwckZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIENyaXNwckZpZWxkQ29tcG9uZW50PEJ1dHRvbkNvbmZpZz4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGdyb3VwOiBGb3JtR3JvdXA7XG4gIGRlZmF1bHRDb25maWc6IFBhcnRpYWw8QnV0dG9uQ29uZmlnPiA9IHtidXR0b25UeXBlOiAncmFpc2VkJywgdHlwZTogJ3N1Ym1pdCd9O1xuICBmb3JtVmFsaWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG5cbiAgZ2V0IG1hdEJ1dHRvbkNsYXNzICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYnV0dG9uVHlwZSA/IGBtYXQtJHt0aGlzLmNvbmZpZy5idXR0b25UeXBlfS1idXR0b25gIDogJyc7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuZm9ybVZhbGlkJCA9IHRoaXMuZ3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMgPT09ICdWQUxJRCcpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuZ3JvdXAudmFsaWQpLFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVDbGljayhncm91cDogRm9ybUdyb3VwLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5jYWxsYmFjaykge1xuICAgICAgdGhpcy5jb25maWcuY2FsbGJhY2soZ3JvdXAsIGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgW2Zvcm1Hcm91cF09XCJncm91cFwiXG4gIG1hdC1idXR0b25cbiAgW25nQ2xhc3NdPVwibWF0QnV0dG9uQ2xhc3NcIlxuICBbY29sb3JdPVwiY29uZmlnLmNvbG9yXCJcbiAgW2Rpc2FibGVkXT1cImNvbmZpZy5kaXNhYmxlZE9uSW52YWxpZEZvcm0gJiYgIShmb3JtVmFsaWQkIHwgYXN5bmMpXCJcbiAgW3R5cGVdPVwiY29uZmlnLnR5cGVcIlxuICAoY2xpY2spPVwiaGFuZGxlQ2xpY2soZ3JvdXAsICRldmVudClcIlxuICBbbWF0VG9vbHRpcF09XCJjb25maWcuaW5mbz8uY29udGVudFwiXG4gIFttYXRUb29sdGlwUG9zaXRpb25dPVwiY29uZmlnLmluZm8/LnRvb2x0aXBQb3NpdGlvbiB8fCAnYmVsb3cnXCI+XG4gIHt7IGNvbmZpZy5sYWJlbCB9fVxuICA8bWF0LWljb24gKm5nSWY9XCJjb25maWcuaWNvblwiPlxuICAgIHt7IGNvbmZpZy5pY29ufX1cbiAgPC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuXG4iXX0=