@tft/crispr-forms 18.0.1 → 19.0.2

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 (305) hide show
  1. package/README.md +111 -112
  2. package/fesm2022/tft-crispr-forms-autocomplete-field.component-jdr2Hr6I.mjs +95 -0
  3. package/fesm2022/tft-crispr-forms-autocomplete-field.component-jdr2Hr6I.mjs.map +1 -0
  4. package/fesm2022/tft-crispr-forms-index-BHv9E1Y2.mjs +36 -0
  5. package/fesm2022/tft-crispr-forms-index-BHv9E1Y2.mjs.map +1 -0
  6. package/fesm2022/tft-crispr-forms-index-BIhGbdgn.mjs +68 -0
  7. package/fesm2022/tft-crispr-forms-index-BIhGbdgn.mjs.map +1 -0
  8. package/fesm2022/tft-crispr-forms-index-BQFuEW6x.mjs +40 -0
  9. package/fesm2022/tft-crispr-forms-index-BQFuEW6x.mjs.map +1 -0
  10. package/fesm2022/tft-crispr-forms-index-BWsxn34Q.mjs +2 -0
  11. package/fesm2022/tft-crispr-forms-index-BWsxn34Q.mjs.map +1 -0
  12. package/fesm2022/tft-crispr-forms-index-Bh8kDfe4.mjs +39 -0
  13. package/fesm2022/tft-crispr-forms-index-Bh8kDfe4.mjs.map +1 -0
  14. package/fesm2022/tft-crispr-forms-index-C9gYJRzb.mjs +182 -0
  15. package/fesm2022/tft-crispr-forms-index-C9gYJRzb.mjs.map +1 -0
  16. package/fesm2022/tft-crispr-forms-index-ClPQl_5D.mjs +137 -0
  17. package/fesm2022/tft-crispr-forms-index-ClPQl_5D.mjs.map +1 -0
  18. package/fesm2022/tft-crispr-forms-index-DCRLl0jR.mjs +190 -0
  19. package/fesm2022/tft-crispr-forms-index-DCRLl0jR.mjs.map +1 -0
  20. package/fesm2022/tft-crispr-forms-index-Dx-HIAiX.mjs +39 -0
  21. package/fesm2022/tft-crispr-forms-index-Dx-HIAiX.mjs.map +1 -0
  22. package/fesm2022/tft-crispr-forms-index-Dyx5SqHu.mjs +88 -0
  23. package/fesm2022/tft-crispr-forms-index-Dyx5SqHu.mjs.map +1 -0
  24. package/fesm2022/tft-crispr-forms-index-LX0Bvkjk.mjs +73 -0
  25. package/fesm2022/tft-crispr-forms-index-LX0Bvkjk.mjs.map +1 -0
  26. package/fesm2022/tft-crispr-forms-index-UAYeTe3L.mjs +17 -0
  27. package/fesm2022/tft-crispr-forms-index-UAYeTe3L.mjs.map +1 -0
  28. package/fesm2022/tft-crispr-forms-index-UvEVbwnf.mjs +41 -0
  29. package/fesm2022/tft-crispr-forms-index-UvEVbwnf.mjs.map +1 -0
  30. package/fesm2022/tft-crispr-forms-index-joNvlmny.mjs +61 -0
  31. package/fesm2022/tft-crispr-forms-index-joNvlmny.mjs.map +1 -0
  32. package/fesm2022/tft-crispr-forms-index-kjMTlZoq.mjs +24 -0
  33. package/fesm2022/tft-crispr-forms-index-kjMTlZoq.mjs.map +1 -0
  34. package/fesm2022/tft-crispr-forms.mjs +300 -175
  35. package/fesm2022/tft-crispr-forms.mjs.map +1 -1
  36. package/package.json +3 -5
  37. package/tft-crispr-forms-19.0.2.tgz +0 -0
  38. package/types/tft-crispr-forms.d.ts +887 -0
  39. package/esm2022/public-api.mjs +0 -4
  40. package/esm2022/src/index.mjs +0 -2
  41. package/esm2022/src/lib/crispr-forms.module.mjs +0 -55
  42. package/esm2022/src/lib/display-field.directive.mjs +0 -52
  43. package/esm2022/src/lib/field-component-map.const.mjs +0 -29
  44. package/esm2022/src/lib/field.directive.mjs +0 -69
  45. package/esm2022/src/lib/form/form.component.mjs +0 -62
  46. package/esm2022/src/lib/form-group-list/form-group-list.component.mjs +0 -97
  47. package/esm2022/src/lib/form-group-list/index.mjs +0 -2
  48. package/esm2022/src/lib/pipes/crispr-pipes.module.mjs +0 -24
  49. package/esm2022/src/lib/pipes/initial-control-value.pipe.mjs +0 -20
  50. package/esm2022/src/lib/public_api.mjs +0 -3
  51. package/esm2022/src/lib/sub-group/index.mjs +0 -3
  52. package/esm2022/src/lib/sub-group/sub-group.component.mjs +0 -20
  53. package/esm2022/src/lib/sub-group/sub-group.module.mjs +0 -42
  54. package/esm2022/src/lib/ui/autocomplete-chiplist-field/autocomplete-chiplist-field.component.mjs +0 -138
  55. package/esm2022/src/lib/ui/autocomplete-chiplist-field/index.mjs +0 -2
  56. package/esm2022/src/lib/ui/autocomplete-chiplist-field/public-api.mjs +0 -2
  57. package/esm2022/src/lib/ui/autocomplete-field/autocomplete-field.component.mjs +0 -95
  58. package/esm2022/src/lib/ui/autocomplete-field/index.mjs +0 -2
  59. package/esm2022/src/lib/ui/autocomplete-field/public-api.mjs +0 -2
  60. package/esm2022/src/lib/ui/button/button.component.mjs +0 -52
  61. package/esm2022/src/lib/ui/button/index.mjs +0 -2
  62. package/esm2022/src/lib/ui/button/public-api.mjs +0 -2
  63. package/esm2022/src/lib/ui/checkbox-field/checkbox-field.component.mjs +0 -42
  64. package/esm2022/src/lib/ui/checkbox-field/index.mjs +0 -2
  65. package/esm2022/src/lib/ui/checkbox-field/public-api.mjs +0 -2
  66. package/esm2022/src/lib/ui/datepicker-field/datepicker-field.component.mjs +0 -66
  67. package/esm2022/src/lib/ui/datepicker-field/index.mjs +0 -2
  68. package/esm2022/src/lib/ui/datepicker-field/public-api.mjs +0 -2
  69. package/esm2022/src/lib/ui/divider/divider.component.mjs +0 -25
  70. package/esm2022/src/lib/ui/divider/index.mjs +0 -2
  71. package/esm2022/src/lib/ui/divider/public-api.mjs +0 -2
  72. package/esm2022/src/lib/ui/field-container/field-container.component.mjs +0 -59
  73. package/esm2022/src/lib/ui/field-container/index.mjs +0 -2
  74. package/esm2022/src/lib/ui/field-container/public-api.mjs +0 -2
  75. package/esm2022/src/lib/ui/file-dropzone/file-dropzone.directive.mjs +0 -40
  76. package/esm2022/src/lib/ui/file-dropzone/index.mjs +0 -2
  77. package/esm2022/src/lib/ui/file-dropzone/public-api.mjs +0 -2
  78. package/esm2022/src/lib/ui/file-upload-field/file-upload-field.component.mjs +0 -107
  79. package/esm2022/src/lib/ui/file-upload-field/index.mjs +0 -2
  80. package/esm2022/src/lib/ui/file-upload-field/public-api.mjs +0 -2
  81. package/esm2022/src/lib/ui/heading/heading.component.mjs +0 -27
  82. package/esm2022/src/lib/ui/heading/index.mjs +0 -2
  83. package/esm2022/src/lib/ui/heading/public-api.mjs +0 -2
  84. package/esm2022/src/lib/ui/image-upload-field/image-upload-field.component.mjs +0 -184
  85. package/esm2022/src/lib/ui/image-upload-field/index.mjs +0 -2
  86. package/esm2022/src/lib/ui/image-upload-field/public-api.mjs +0 -2
  87. package/esm2022/src/lib/ui/index.mjs +0 -2
  88. package/esm2022/src/lib/ui/info/index.mjs +0 -2
  89. package/esm2022/src/lib/ui/info/info.component.mjs +0 -23
  90. package/esm2022/src/lib/ui/info/public-api.mjs +0 -2
  91. package/esm2022/src/lib/ui/input-field/index.mjs +0 -2
  92. package/esm2022/src/lib/ui/input-field/input-field.component.mjs +0 -43
  93. package/esm2022/src/lib/ui/input-field/public-api.mjs +0 -2
  94. package/esm2022/src/lib/ui/map/index.mjs +0 -2
  95. package/esm2022/src/lib/ui/map/map-field.component.mjs +0 -53
  96. package/esm2022/src/lib/ui/map/public-api.mjs +0 -2
  97. package/esm2022/src/lib/ui/option/index.mjs +0 -2
  98. package/esm2022/src/lib/ui/option/option.component.mjs +0 -16
  99. package/esm2022/src/lib/ui/option/public-api.mjs +0 -2
  100. package/esm2022/src/lib/ui/public-api.mjs +0 -7
  101. package/esm2022/src/lib/ui/radio-field/index.mjs +0 -2
  102. package/esm2022/src/lib/ui/radio-field/public-api.mjs +0 -2
  103. package/esm2022/src/lib/ui/radio-field/radio-field.component.mjs +0 -39
  104. package/esm2022/src/lib/ui/select-field/index.mjs +0 -2
  105. package/esm2022/src/lib/ui/select-field/public-api.mjs +0 -2
  106. package/esm2022/src/lib/ui/select-field/select-field.component.mjs +0 -73
  107. package/esm2022/src/lib/ui/selected-file/index.mjs +0 -2
  108. package/esm2022/src/lib/ui/selected-file/public-api.mjs +0 -2
  109. package/esm2022/src/lib/ui/selected-file/selected-file.component.mjs +0 -26
  110. package/esm2022/src/lib/ui/slider-field/index.mjs +0 -2
  111. package/esm2022/src/lib/ui/slider-field/public-api.mjs +0 -2
  112. package/esm2022/src/lib/ui/slider-field/slider-field.component.mjs +0 -46
  113. package/esm2022/src/lib/ui/textarea-field/index.mjs +0 -2
  114. package/esm2022/src/lib/ui/textarea-field/public-api.mjs +0 -2
  115. package/esm2022/src/lib/ui/textarea-field/textarea-field.component.mjs +0 -42
  116. package/esm2022/src/lib/ui/unit-conversion-field/index.mjs +0 -2
  117. package/esm2022/src/lib/ui/unit-conversion-field/public-api.mjs +0 -2
  118. package/esm2022/src/lib/ui/unit-conversion-field/unit-conversion-field.component.mjs +0 -86
  119. package/esm2022/src/lib/utils/abstracts/autocomplete-field.abstract.mjs +0 -30
  120. package/esm2022/src/lib/utils/abstracts/crispr-control.mixin.mjs +0 -27
  121. package/esm2022/src/lib/utils/abstracts/crispr-display-field.abstract.mjs +0 -14
  122. package/esm2022/src/lib/utils/abstracts/crispr-field.abstract.mjs +0 -19
  123. package/esm2022/src/lib/utils/abstracts/index.mjs +0 -5
  124. package/esm2022/src/lib/utils/functions/buildFormGroupFromConfig.mjs +0 -28
  125. package/esm2022/src/lib/utils/functions/callOptionsIfFunction.mjs +0 -4
  126. package/esm2022/src/lib/utils/functions/createControlForType.mjs +0 -19
  127. package/esm2022/src/lib/utils/functions/filterOptionsByLabel.mjs +0 -11
  128. package/esm2022/src/lib/utils/functions/image-compression.helpers.mjs +0 -50
  129. package/esm2022/src/lib/utils/functions/index.mjs +0 -8
  130. package/esm2022/src/lib/utils/functions/isControlConfig.mjs +0 -7
  131. package/esm2022/src/lib/utils/functions/observablifyOptions.mjs +0 -29
  132. package/esm2022/src/lib/utils/index.mjs +0 -2
  133. package/esm2022/src/lib/utils/models/autocomplete-chiplist-field.config.mjs +0 -2
  134. package/esm2022/src/lib/utils/models/autocomplete-field.config.mjs +0 -2
  135. package/esm2022/src/lib/utils/models/button.config.mjs +0 -2
  136. package/esm2022/src/lib/utils/models/checkbox-field.config.mjs +0 -2
  137. package/esm2022/src/lib/utils/models/crispr-field.config.mjs +0 -24
  138. package/esm2022/src/lib/utils/models/datepicker-field.config.mjs +0 -2
  139. package/esm2022/src/lib/utils/models/divider.config.mjs +0 -2
  140. package/esm2022/src/lib/utils/models/file-upload-field.config.mjs +0 -2
  141. package/esm2022/src/lib/utils/models/form-group-list.config.mjs +0 -2
  142. package/esm2022/src/lib/utils/models/heading.config.mjs +0 -3
  143. package/esm2022/src/lib/utils/models/image-upload-field.config.mjs +0 -2
  144. package/esm2022/src/lib/utils/models/index.mjs +0 -19
  145. package/esm2022/src/lib/utils/models/input-field.config.mjs +0 -2
  146. package/esm2022/src/lib/utils/models/map-field.config.mjs +0 -2
  147. package/esm2022/src/lib/utils/models/radio-field.config.mjs +0 -2
  148. package/esm2022/src/lib/utils/models/select-field.config.mjs +0 -2
  149. package/esm2022/src/lib/utils/models/slider-field.config.mjs +0 -2
  150. package/esm2022/src/lib/utils/models/textarea-field.config.mjs +0 -2
  151. package/esm2022/src/lib/utils/models/unit-conversion-field.config.mjs +0 -2
  152. package/esm2022/src/lib/utils/operators/form.operators.mjs +0 -24
  153. package/esm2022/src/lib/utils/operators/index.mjs +0 -2
  154. package/esm2022/src/lib/utils/public-api.mjs +0 -5
  155. package/esm2022/tft-crispr-forms.mjs +0 -5
  156. package/fesm2022/tft-crispr-forms-index-BC1uV7T_.mjs +0 -19
  157. package/fesm2022/tft-crispr-forms-index-BC1uV7T_.mjs.map +0 -1
  158. package/fesm2022/tft-crispr-forms-index-BDJfgpKH.mjs +0 -142
  159. package/fesm2022/tft-crispr-forms-index-BDJfgpKH.mjs.map +0 -1
  160. package/fesm2022/tft-crispr-forms-index-BVwoi2lw.mjs +0 -49
  161. package/fesm2022/tft-crispr-forms-index-BVwoi2lw.mjs.map +0 -1
  162. package/fesm2022/tft-crispr-forms-index-Bbcv75sh.mjs +0 -48
  163. package/fesm2022/tft-crispr-forms-index-Bbcv75sh.mjs.map +0 -1
  164. package/fesm2022/tft-crispr-forms-index-BdOC-6h3.mjs +0 -110
  165. package/fesm2022/tft-crispr-forms-index-BdOC-6h3.mjs.map +0 -1
  166. package/fesm2022/tft-crispr-forms-index-BwC11k3P.mjs +0 -73
  167. package/fesm2022/tft-crispr-forms-index-BwC11k3P.mjs.map +0 -1
  168. package/fesm2022/tft-crispr-forms-index-CN4M4eEo.mjs +0 -50
  169. package/fesm2022/tft-crispr-forms-index-CN4M4eEo.mjs.map +0 -1
  170. package/fesm2022/tft-crispr-forms-index-CP5Jn6EK.mjs +0 -63
  171. package/fesm2022/tft-crispr-forms-index-CP5Jn6EK.mjs.map +0 -1
  172. package/fesm2022/tft-crispr-forms-index-CYzZB0sA.mjs +0 -54
  173. package/fesm2022/tft-crispr-forms-index-CYzZB0sA.mjs.map +0 -1
  174. package/fesm2022/tft-crispr-forms-index-C_YTy6il.mjs +0 -102
  175. package/fesm2022/tft-crispr-forms-index-C_YTy6il.mjs.map +0 -1
  176. package/fesm2022/tft-crispr-forms-index-Cpu5cwLo.mjs +0 -80
  177. package/fesm2022/tft-crispr-forms-index-Cpu5cwLo.mjs.map +0 -1
  178. package/fesm2022/tft-crispr-forms-index-DLa8K3lm.mjs +0 -36
  179. package/fesm2022/tft-crispr-forms-index-DLa8K3lm.mjs.map +0 -1
  180. package/fesm2022/tft-crispr-forms-index-DNTOjcVZ.mjs +0 -49
  181. package/fesm2022/tft-crispr-forms-index-DNTOjcVZ.mjs.map +0 -1
  182. package/fesm2022/tft-crispr-forms-index-DYHyL8s6.mjs +0 -57
  183. package/fesm2022/tft-crispr-forms-index-DYHyL8s6.mjs.map +0 -1
  184. package/fesm2022/tft-crispr-forms-index-DhIYxOdD.mjs +0 -185
  185. package/fesm2022/tft-crispr-forms-index-DhIYxOdD.mjs.map +0 -1
  186. package/fesm2022/tft-crispr-forms-index-o78Cm3Kf.mjs +0 -91
  187. package/fesm2022/tft-crispr-forms-index-o78Cm3Kf.mjs.map +0 -1
  188. package/index.d.ts +0 -5
  189. package/public-api.d.ts +0 -3
  190. package/src/index.d.ts +0 -1
  191. package/src/lib/crispr-forms.module.d.ts +0 -16
  192. package/src/lib/display-field.directive.d.ts +0 -23
  193. package/src/lib/field-component-map.const.d.ts +0 -44
  194. package/src/lib/field.directive.d.ts +0 -24
  195. package/src/lib/form/form.component.d.ts +0 -19
  196. package/src/lib/form-group-list/form-group-list.component.d.ts +0 -40
  197. package/src/lib/form-group-list/index.d.ts +0 -1
  198. package/src/lib/pipes/crispr-pipes.module.d.ts +0 -8
  199. package/src/lib/pipes/initial-control-value.pipe.d.ts +0 -10
  200. package/src/lib/public_api.d.ts +0 -2
  201. package/src/lib/sub-group/index.d.ts +0 -2
  202. package/src/lib/sub-group/sub-group.component.d.ts +0 -24
  203. package/src/lib/sub-group/sub-group.module.d.ts +0 -12
  204. package/src/lib/ui/autocomplete-chiplist-field/autocomplete-chiplist-field.component.d.ts +0 -36
  205. package/src/lib/ui/autocomplete-chiplist-field/index.d.ts +0 -1
  206. package/src/lib/ui/autocomplete-chiplist-field/public-api.d.ts +0 -1
  207. package/src/lib/ui/autocomplete-field/autocomplete-field.component.d.ts +0 -25
  208. package/src/lib/ui/autocomplete-field/index.d.ts +0 -1
  209. package/src/lib/ui/autocomplete-field/public-api.d.ts +0 -1
  210. package/src/lib/ui/button/button.component.d.ts +0 -15
  211. package/src/lib/ui/button/index.d.ts +0 -1
  212. package/src/lib/ui/button/public-api.d.ts +0 -1
  213. package/src/lib/ui/checkbox-field/checkbox-field.component.d.ts +0 -23
  214. package/src/lib/ui/checkbox-field/index.d.ts +0 -1
  215. package/src/lib/ui/checkbox-field/public-api.d.ts +0 -1
  216. package/src/lib/ui/datepicker-field/datepicker-field.component.d.ts +0 -32
  217. package/src/lib/ui/datepicker-field/index.d.ts +0 -1
  218. package/src/lib/ui/datepicker-field/public-api.d.ts +0 -1
  219. package/src/lib/ui/divider/divider.component.d.ts +0 -9
  220. package/src/lib/ui/divider/index.d.ts +0 -1
  221. package/src/lib/ui/divider/public-api.d.ts +0 -1
  222. package/src/lib/ui/field-container/field-container.component.d.ts +0 -24
  223. package/src/lib/ui/field-container/index.d.ts +0 -1
  224. package/src/lib/ui/field-container/public-api.d.ts +0 -1
  225. package/src/lib/ui/file-dropzone/file-dropzone.directive.d.ts +0 -10
  226. package/src/lib/ui/file-dropzone/index.d.ts +0 -1
  227. package/src/lib/ui/file-dropzone/public-api.d.ts +0 -1
  228. package/src/lib/ui/file-upload-field/file-upload-field.component.d.ts +0 -39
  229. package/src/lib/ui/file-upload-field/index.d.ts +0 -1
  230. package/src/lib/ui/file-upload-field/public-api.d.ts +0 -1
  231. package/src/lib/ui/heading/heading.component.d.ts +0 -8
  232. package/src/lib/ui/heading/index.d.ts +0 -1
  233. package/src/lib/ui/heading/public-api.d.ts +0 -1
  234. package/src/lib/ui/image-upload-field/image-upload-field.component.d.ts +0 -50
  235. package/src/lib/ui/image-upload-field/index.d.ts +0 -1
  236. package/src/lib/ui/image-upload-field/public-api.d.ts +0 -1
  237. package/src/lib/ui/index.d.ts +0 -1
  238. package/src/lib/ui/info/index.d.ts +0 -1
  239. package/src/lib/ui/info/info.component.d.ts +0 -7
  240. package/src/lib/ui/info/public-api.d.ts +0 -1
  241. package/src/lib/ui/input-field/index.d.ts +0 -1
  242. package/src/lib/ui/input-field/input-field.component.d.ts +0 -24
  243. package/src/lib/ui/input-field/public-api.d.ts +0 -1
  244. package/src/lib/ui/map/index.d.ts +0 -1
  245. package/src/lib/ui/map/map-field.component.d.ts +0 -32
  246. package/src/lib/ui/map/public-api.d.ts +0 -1
  247. package/src/lib/ui/option/index.d.ts +0 -1
  248. package/src/lib/ui/option/option.component.d.ts +0 -7
  249. package/src/lib/ui/option/public-api.d.ts +0 -1
  250. package/src/lib/ui/public-api.d.ts +0 -6
  251. package/src/lib/ui/radio-field/index.d.ts +0 -1
  252. package/src/lib/ui/radio-field/public-api.d.ts +0 -1
  253. package/src/lib/ui/radio-field/radio-field.component.d.ts +0 -25
  254. package/src/lib/ui/select-field/index.d.ts +0 -1
  255. package/src/lib/ui/select-field/public-api.d.ts +0 -1
  256. package/src/lib/ui/select-field/select-field.component.d.ts +0 -34
  257. package/src/lib/ui/selected-file/index.d.ts +0 -1
  258. package/src/lib/ui/selected-file/public-api.d.ts +0 -1
  259. package/src/lib/ui/selected-file/selected-file.component.d.ts +0 -10
  260. package/src/lib/ui/slider-field/index.d.ts +0 -1
  261. package/src/lib/ui/slider-field/public-api.d.ts +0 -1
  262. package/src/lib/ui/slider-field/slider-field.component.d.ts +0 -24
  263. package/src/lib/ui/textarea-field/index.d.ts +0 -1
  264. package/src/lib/ui/textarea-field/public-api.d.ts +0 -1
  265. package/src/lib/ui/textarea-field/textarea-field.component.d.ts +0 -23
  266. package/src/lib/ui/unit-conversion-field/index.d.ts +0 -1
  267. package/src/lib/ui/unit-conversion-field/public-api.d.ts +0 -1
  268. package/src/lib/ui/unit-conversion-field/unit-conversion-field.component.d.ts +0 -38
  269. package/src/lib/utils/abstracts/autocomplete-field.abstract.d.ts +0 -28
  270. package/src/lib/utils/abstracts/crispr-control.mixin.d.ts +0 -16
  271. package/src/lib/utils/abstracts/crispr-display-field.abstract.d.ts +0 -22
  272. package/src/lib/utils/abstracts/crispr-field.abstract.d.ts +0 -11
  273. package/src/lib/utils/abstracts/index.d.ts +0 -4
  274. package/src/lib/utils/functions/buildFormGroupFromConfig.d.ts +0 -9
  275. package/src/lib/utils/functions/callOptionsIfFunction.d.ts +0 -3
  276. package/src/lib/utils/functions/createControlForType.d.ts +0 -9
  277. package/src/lib/utils/functions/filterOptionsByLabel.d.ts +0 -7
  278. package/src/lib/utils/functions/image-compression.helpers.d.ts +0 -5
  279. package/src/lib/utils/functions/index.d.ts +0 -7
  280. package/src/lib/utils/functions/isControlConfig.d.ts +0 -5
  281. package/src/lib/utils/functions/observablifyOptions.d.ts +0 -12
  282. package/src/lib/utils/index.d.ts +0 -1
  283. package/src/lib/utils/models/autocomplete-chiplist-field.config.d.ts +0 -20
  284. package/src/lib/utils/models/autocomplete-field.config.d.ts +0 -14
  285. package/src/lib/utils/models/button.config.d.ts +0 -17
  286. package/src/lib/utils/models/checkbox-field.config.d.ts +0 -6
  287. package/src/lib/utils/models/crispr-field.config.d.ts +0 -98
  288. package/src/lib/utils/models/datepicker-field.config.d.ts +0 -20
  289. package/src/lib/utils/models/divider.config.d.ts +0 -5
  290. package/src/lib/utils/models/file-upload-field.config.d.ts +0 -33
  291. package/src/lib/utils/models/form-group-list.config.d.ts +0 -18
  292. package/src/lib/utils/models/heading.config.d.ts +0 -6
  293. package/src/lib/utils/models/image-upload-field.config.d.ts +0 -54
  294. package/src/lib/utils/models/index.d.ts +0 -18
  295. package/src/lib/utils/models/input-field.config.d.ts +0 -16
  296. package/src/lib/utils/models/map-field.config.d.ts +0 -13
  297. package/src/lib/utils/models/radio-field.config.d.ts +0 -6
  298. package/src/lib/utils/models/select-field.config.d.ts +0 -21
  299. package/src/lib/utils/models/slider-field.config.d.ts +0 -11
  300. package/src/lib/utils/models/textarea-field.config.d.ts +0 -5
  301. package/src/lib/utils/models/unit-conversion-field.config.d.ts +0 -30
  302. package/src/lib/utils/operators/form.operators.d.ts +0 -1
  303. package/src/lib/utils/operators/index.d.ts +0 -1
  304. package/src/lib/utils/public-api.d.ts +0 -4
  305. package/tft-crispr-forms-18.0.1.tgz +0 -0
@@ -1,23 +1,26 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Input, Pipe, NgModule, EventEmitter, Component, Output, ViewChild, HostListener, ChangeDetectionStrategy } from '@angular/core';
2
+ import { signal, Input, Directive, inject, DestroyRef, computed, EventEmitter, effect, Output, Pipe, NgModule, ViewChild, Component, HostListener, ChangeDetectionStrategy, Optional, Self } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import * as i2 from '@angular/forms';
5
+ import * as i1$1 from '@angular/forms';
6
6
  import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
7
- import * as i7 from '@tft/form-validation-handler';
7
+ import * as i6 from '@tft/form-validation-handler';
8
8
  import { FormValidationHandlerModule } from '@tft/form-validation-handler';
9
9
  import { from, of, isObservable } from 'rxjs';
10
10
  import { map, startWith, debounceTime, distinctUntilChanged, switchMap, shareReplay, tap } from 'rxjs/operators';
11
- import * as i2$2 from '@angular/material/button';
11
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
+ import * as i1$3 from '@angular/material/button';
12
13
  import { MatButtonModule } from '@angular/material/button';
13
- import * as i3 from '@angular/material/icon';
14
+ import * as i2 from '@angular/material/icon';
14
15
  import { MatIconModule } from '@angular/material/icon';
15
- import * as i2$1 from '@angular/material/progress-bar';
16
- import { MatProgressBarModule } from '@angular/material/progress-bar';
17
- import * as i3$2 from '@angular/material/form-field';
16
+ import * as i2$2 from '@angular/material/form-field';
18
17
  import { MatFormFieldModule } from '@angular/material/form-field';
19
- import * as i3$1 from '@angular/material/tooltip';
18
+ import * as i3 from '@angular/material/input';
19
+ import { MatInputModule } from '@angular/material/input';
20
+ import * as i2$1 from '@angular/material/tooltip';
20
21
  import { MatTooltipModule } from '@angular/material/tooltip';
22
+ import * as i1$2 from '@angular/material/progress-bar';
23
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
21
24
 
22
25
  function valueIn(values) {
23
26
  return map((value) => {
@@ -68,51 +71,6 @@ var ControlType;
68
71
  ControlType["UNIT_CONVERSION"] = "unitConversion";
69
72
  })(ControlType || (ControlType = {}));
70
73
 
71
- ;
72
-
73
- function crisprControlMixin(BaseClass) {
74
- return class extends BaseClass {
75
- set value(value) {
76
- this.setControlValue(value);
77
- this._value = value;
78
- }
79
- get value() {
80
- return this._value;
81
- }
82
- ngOnInit() {
83
- super.ngOnInit();
84
- this.control = this.group.get(this.config.controlName);
85
- this.setControlValue(this.value);
86
- // setTimeouts are ugly but this seems to be the only way to get the computed field to compute initial values
87
- setTimeout(() => {
88
- this.control.updateValueAndValidity();
89
- });
90
- }
91
- setControlValue(value) {
92
- if (value && this.control && this.config.controlType !== ControlType.SUB_GROUP) {
93
- this.control.setValue(value);
94
- }
95
- }
96
- };
97
- }
98
-
99
- class CrisprFieldComponent {
100
- ngOnInit() {
101
- this.applyDefaultConfig();
102
- }
103
- applyDefaultConfig() {
104
- this.config = this.defaultConfig ? { ...this.defaultConfig, ...this.config } : this.config;
105
- }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: CrisprFieldComponent, isStandalone: true, ngImport: i0 }); }
108
- }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFieldComponent, decorators: [{
110
- type: Directive,
111
- args: [{
112
- standalone: true
113
- }]
114
- }] });
115
-
116
74
  /**
117
75
  * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here
118
76
  * as we want to keep this function pure.
@@ -253,65 +211,145 @@ function allowedFileType(matchExp) {
253
211
  };
254
212
  }
255
213
 
256
- const AbstractAutocompleteFieldMixin = crisprControlMixin(CrisprFieldComponent);
214
+ class CrisprFieldComponent {
215
+ constructor() {
216
+ this.config = signal(null, ...(ngDevMode ? [{ debugName: "config" }] : []));
217
+ }
218
+ // eslint-disable-next-line @angular-eslint/no-input-rename
219
+ set inputConfig(config) {
220
+ this.updateConfig(config);
221
+ }
222
+ updateConfig(inputConfig) {
223
+ const mergedConfig = this.defaultConfig ? { ...this.defaultConfig, ...inputConfig } : inputConfig;
224
+ this.config.set(mergedConfig);
225
+ }
226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
227
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: CrisprFieldComponent, isStandalone: true, inputs: { inputConfig: ["config", "inputConfig"] }, ngImport: i0 }); }
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFieldComponent, decorators: [{
230
+ type: Directive,
231
+ args: [{
232
+ standalone: true
233
+ }]
234
+ }], propDecorators: { inputConfig: [{
235
+ type: Input,
236
+ args: [{ alias: 'config' }]
237
+ }] } });
238
+
239
+ class CrisprControlComponent extends CrisprFieldComponent {
240
+ // eslint-disable-next-line @angular-eslint/no-input-rename
241
+ set inputGroup(group) {
242
+ this.group.set(group);
243
+ }
244
+ /*
245
+ * Having the input alias allows us to consume these components in the traditional Angular way as well as progammatically in the form builder
246
+ */
247
+ // eslint-disable-next-line @angular-eslint/no-input-rename
248
+ set inputValue(value) {
249
+ this.value.set(value);
250
+ }
251
+ constructor() {
252
+ super();
253
+ this.destroyRef = inject(DestroyRef);
254
+ this.group = signal(null, ...(ngDevMode ? [{ debugName: "group" }] : []));
255
+ this.control = computed(() => this.group()?.get(this.config().controlName), ...(ngDevMode ? [{ debugName: "control" }] : []));
256
+ this.valueChanges = new EventEmitter();
257
+ this.value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
258
+ effect(() => {
259
+ this.setControlValue(this.value());
260
+ });
261
+ }
262
+ ngOnInit() {
263
+ this.control().valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {
264
+ this.valueChanges.emit(value);
265
+ });
266
+ // this.setControlValue(this.value);
267
+ // setTimeouts are ugly but this seems to be the only way to get the computed field to compute initial values
268
+ setTimeout(() => {
269
+ this.control().updateValueAndValidity();
270
+ });
271
+ }
272
+ setControlValue(value) {
273
+ if (value && this.control() && this.config().controlType !== ControlType.SUB_GROUP) {
274
+ this.control().setValue(value);
275
+ }
276
+ }
277
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
278
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: CrisprControlComponent, isStandalone: true, inputs: { inputGroup: ["group", "inputGroup"], inputValue: ["value", "inputValue"] }, outputs: { valueChanges: "valueChanges" }, usesInheritance: true, ngImport: i0 }); }
279
+ }
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprControlComponent, decorators: [{
281
+ type: Directive,
282
+ args: [{
283
+ standalone: true
284
+ }]
285
+ }], ctorParameters: () => [], propDecorators: { inputGroup: [{
286
+ type: Input,
287
+ args: [{ alias: 'group' }]
288
+ }], valueChanges: [{
289
+ type: Output
290
+ }], inputValue: [{
291
+ type: Input,
292
+ args: [{ alias: 'value' }]
293
+ }] } });
294
+
257
295
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
258
- class AbstractAutocompleteComponent extends AbstractAutocompleteFieldMixin {
296
+ class AbstractAutocompleteComponent extends CrisprControlComponent {
259
297
  constructor() {
260
298
  super(...arguments);
261
299
  // we need a separate control for the UI because of the way the material autocomplete chiplist works
262
300
  this.autocompleteInputControl = new FormControl('');
301
+ this.config = signal(null, ...(ngDevMode ? [{ debugName: "config" }] : []));
263
302
  }
264
303
  ngOnInit() {
265
304
  super.ngOnInit();
266
- this.group.addControl(this.config.controlName, new FormControl());
267
- // filter options by the search string using either the default filter function or one passed in through config
305
+ this.group().addControl(this.config().controlName, new FormControl());
306
+ // filter options by the search string using either the default filter function or one passed in through config()
268
307
  this.options$ = this.autocompleteInputControl.valueChanges.pipe(
269
308
  // this is needed to have the options panel to open on focus
270
- startWith(''), debounceTime(this.config.typeDebounceTime), map((searchText) => typeof searchText === 'string' ? searchText?.trim() : ''), distinctUntilChanged(), switchMap((searchText) => observablifyOptions(this.config.options, this.group, searchText)), shareReplay(1));
309
+ startWith(''), debounceTime(this.config().typeDebounceTime), map((searchText) => typeof searchText === 'string' ? searchText?.trim() : ''), distinctUntilChanged(), switchMap((searchText) => observablifyOptions(this.config().options, this.group(), searchText)), shareReplay(1));
271
310
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: AbstractAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
273
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: AbstractAutocompleteComponent, usesInheritance: true, ngImport: i0 }); }
311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AbstractAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
312
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: AbstractAutocompleteComponent, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
274
313
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: AbstractAutocompleteComponent, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AbstractAutocompleteComponent, decorators: [{
276
315
  type: Directive
277
316
  }] });
278
317
 
279
- const CrisprDisplayFieldMixin = crisprControlMixin(CrisprFieldComponent);
280
318
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
281
- class CrisprDisplayFieldComponent extends CrisprDisplayFieldMixin {
282
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprDisplayFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
283
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: CrisprDisplayFieldComponent, usesInheritance: true, ngImport: i0 }); }
319
+ class CrisprDisplayFieldComponent extends CrisprControlComponent {
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprDisplayFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
321
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: CrisprDisplayFieldComponent, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
284
322
  }
285
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprDisplayFieldComponent, decorators: [{
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprDisplayFieldComponent, decorators: [{
286
324
  type: Directive
287
325
  }] });
288
326
 
289
327
  const FIELD_COMPONENTS = {
290
328
  groupList: () => Promise.resolve().then(function () { return index$1; }).then(({ FormGroupListComponent }) => FormGroupListComponent),
291
329
  subGroup: () => Promise.resolve().then(function () { return index; }).then(({ SubGroupComponent }) => SubGroupComponent),
292
- button: () => import('./tft-crispr-forms-index-DYHyL8s6.mjs').then(({ ButtonComponent }) => ButtonComponent),
293
- input: () => import('./tft-crispr-forms-index-DNTOjcVZ.mjs').then(({ InputFieldComponent }) => InputFieldComponent),
294
- select: () => import('./tft-crispr-forms-index-Cpu5cwLo.mjs').then(({ SelectFieldComponent }) => SelectFieldComponent),
295
- radio: () => import('./tft-crispr-forms-index-Bbcv75sh.mjs').then(({ RadioFieldComponent }) => RadioFieldComponent),
296
- autocomplete: () => import('./tft-crispr-forms-index-C_YTy6il.mjs').then(({ AutocompleteFieldComponent }) => AutocompleteFieldComponent),
297
- autocompleteChiplist: () => import('./tft-crispr-forms-index-BDJfgpKH.mjs').then(({ AutocompleteChiplistFieldComponent }) => AutocompleteChiplistFieldComponent),
298
- map: () => import('./tft-crispr-forms-index-CP5Jn6EK.mjs').then(({ MapFieldComponent }) => MapFieldComponent),
299
- textarea: () => import('./tft-crispr-forms-index-BVwoi2lw.mjs').then(({ TextareaFieldComponent }) => TextareaFieldComponent),
300
- checkbox: () => import('./tft-crispr-forms-index-CN4M4eEo.mjs').then(({ CheckboxFieldComponent }) => CheckboxFieldComponent),
301
- slider: () => import('./tft-crispr-forms-index-CYzZB0sA.mjs').then(({ SliderFieldComponent }) => SliderFieldComponent),
302
- datepicker: () => import('./tft-crispr-forms-index-BwC11k3P.mjs').then(({ DatepickerFieldComponent }) => DatepickerFieldComponent),
303
- fileUpload: () => import('./tft-crispr-forms-index-BdOC-6h3.mjs').then(({ FileUploadFieldComponent }) => FileUploadFieldComponent),
304
- imageUpload: () => import('./tft-crispr-forms-index-DhIYxOdD.mjs').then(({ ImageUploadFieldComponent }) => ImageUploadFieldComponent),
330
+ button: () => import('./tft-crispr-forms-index-joNvlmny.mjs').then(({ ButtonComponent }) => ButtonComponent),
331
+ input: () => import('./tft-crispr-forms-index-UvEVbwnf.mjs').then(({ InputFieldComponent }) => InputFieldComponent),
332
+ select: () => import('./tft-crispr-forms-index-LX0Bvkjk.mjs').then(({ SelectFieldComponent }) => SelectFieldComponent),
333
+ radio: () => import('./tft-crispr-forms-index-BQFuEW6x.mjs').then(({ RadioFieldComponent }) => RadioFieldComponent),
334
+ autocomplete: () => import('./tft-crispr-forms-index-BWsxn34Q.mjs').then(({ AutocompleteFieldComponent }) => AutocompleteFieldComponent),
335
+ autocompleteChiplist: () => import('./tft-crispr-forms-index-ClPQl_5D.mjs').then(({ AutocompleteChiplistFieldComponent }) => AutocompleteChiplistFieldComponent),
336
+ map: () => import('./tft-crispr-forms-index-DCRLl0jR.mjs').then(({ MapFieldComponent }) => MapFieldComponent),
337
+ textarea: () => import('./tft-crispr-forms-index-Dx-HIAiX.mjs').then(({ TextareaFieldComponent }) => TextareaFieldComponent),
338
+ checkbox: () => import('./tft-crispr-forms-index-Bh8kDfe4.mjs').then(({ CheckboxFieldComponent }) => CheckboxFieldComponent),
339
+ slider: () => import('./tft-crispr-forms-index-BHv9E1Y2.mjs').then(({ SliderFieldComponent }) => SliderFieldComponent),
340
+ datepicker: () => import('./tft-crispr-forms-index-BIhGbdgn.mjs').then(({ DatepickerFieldComponent }) => DatepickerFieldComponent),
341
+ fileUpload: () => Promise.resolve().then(function () { return index$3; }).then(({ FileUploadFieldComponent }) => FileUploadFieldComponent),
342
+ imageUpload: () => import('./tft-crispr-forms-index-C9gYJRzb.mjs').then(({ ImageUploadFieldComponent }) => ImageUploadFieldComponent),
305
343
  heading: () => Promise.resolve().then(function () { return index$2; }).then(({ HeadingComponent }) => HeadingComponent),
306
- divider: () => import('./tft-crispr-forms-index-DLa8K3lm.mjs').then(({ DividerComponent }) => DividerComponent),
307
- unitConversion: () => import('./tft-crispr-forms-index-o78Cm3Kf.mjs').then(({ UnitConversionFieldComponent }) => UnitConversionFieldComponent),
344
+ divider: () => import('./tft-crispr-forms-index-kjMTlZoq.mjs').then(({ DividerComponent }) => DividerComponent),
345
+ unitConversion: () => import('./tft-crispr-forms-index-Dyx5SqHu.mjs').then(({ UnitConversionFieldComponent }) => UnitConversionFieldComponent),
308
346
  };
309
347
  function isControlComponent(component) {
310
- return component && isControlConfig(component.config) && 'value' in component; // || component.config.controlType === ControlType.BUTTON;
348
+ return component && isControlConfig(component.config()) && 'value' in component;
311
349
  }
312
350
  function isControlOrButtonComponent(component) {
313
351
  return (isControlComponent(component) ||
314
- component.config.controlType === ControlType.BUTTON);
352
+ component.config().controlType === ControlType.BUTTON);
315
353
  }
316
354
 
317
355
  class CrisprFieldDirective {
@@ -336,9 +374,9 @@ class CrisprFieldDirective {
336
374
  (await FIELD_COMPONENTS[this.config.controlType]());
337
375
  const componentRef = this.container.createComponent(component);
338
376
  this.component = componentRef.instance;
339
- this.component.config = this.config;
377
+ this.component.config.set(this.config);
340
378
  if (isControlOrButtonComponent(this.component)) {
341
- this.component.group = this.group;
379
+ componentRef.setInput('group', this.group);
342
380
  }
343
381
  this.updateComponentValue(this.value);
344
382
  // adds any config classes to the dynamically generated component
@@ -357,15 +395,15 @@ class CrisprFieldDirective {
357
395
  }
358
396
  updateComponentValue(value) {
359
397
  if (isControlComponent(this.component)) {
360
- this.component.value = value;
398
+ this.component.value.set(value);
361
399
  // SubGroups won't populate without this detectChanges
362
400
  this.cdr.detectChanges();
363
401
  }
364
402
  }
365
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFieldDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
366
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: CrisprFieldDirective, isStandalone: true, selector: "[crisprField]", inputs: { config: "config", group: "group", value: "value" }, ngImport: i0 }); }
403
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFieldDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
404
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: CrisprFieldDirective, isStandalone: true, selector: "[crisprField]", inputs: { config: "config", group: "group", value: "value" }, ngImport: i0 }); }
367
405
  }
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFieldDirective, decorators: [{
406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFieldDirective, decorators: [{
369
407
  type: Directive,
370
408
  args: [{
371
409
  selector: '[crisprField]',
@@ -386,22 +424,23 @@ class InitialControlValuePipe {
386
424
  ? initialFormValue[fieldConfig.controlName] || null
387
425
  : null;
388
426
  }
389
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InitialControlValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
390
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: InitialControlValuePipe, name: "initialControlValue" }); }
427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: InitialControlValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
428
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: InitialControlValuePipe, isStandalone: false, name: "initialControlValue" }); }
391
429
  }
392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InitialControlValuePipe, decorators: [{
430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: InitialControlValuePipe, decorators: [{
393
431
  type: Pipe,
394
432
  args: [{
395
433
  name: 'initialControlValue',
434
+ standalone: false
396
435
  }]
397
436
  }] });
398
437
 
399
438
  class CrisprPipesModule {
400
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
401
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: CrisprPipesModule, declarations: [InitialControlValuePipe], imports: [CommonModule], exports: [InitialControlValuePipe] }); }
402
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprPipesModule, imports: [CommonModule] }); }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
440
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: CrisprPipesModule, declarations: [InitialControlValuePipe], imports: [CommonModule], exports: [InitialControlValuePipe] }); }
441
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprPipesModule, imports: [CommonModule] }); }
403
442
  }
404
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprPipesModule, decorators: [{
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprPipesModule, decorators: [{
405
444
  type: NgModule,
406
445
  args: [{
407
446
  imports: [
@@ -436,18 +475,18 @@ class CrisprFormComponent {
436
475
  triggerSubmit() {
437
476
  this.submitTrigger.nativeElement.click();
438
477
  }
439
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
440
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: CrisprFormComponent, isStandalone: true, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i7.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { kind: "directive", type: i7.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }], preserveWhitespaces: true }); }
478
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: CrisprFormComponent, isStandalone: true, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n @for (field of config.fields; track field) {\n <ng-container\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n }\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i6.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { kind: "directive", type: i6.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }], preserveWhitespaces: true }); }
441
480
  }
442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormComponent, decorators: [{
481
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormComponent, decorators: [{
443
482
  type: Component,
444
- args: [{ selector: 'crispr-form', standalone: true, imports: [
483
+ args: [{ selector: 'crispr-form', imports: [
445
484
  CommonModule,
446
485
  CrisprFieldDirective,
447
486
  ReactiveFormsModule,
448
487
  FormValidationHandlerModule,
449
488
  CrisprPipesModule,
450
- ], template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"] }]
489
+ ], template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n @for (field of config.fields; track field) {\n <ng-container\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n }\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"] }]
451
490
  }], propDecorators: { config: [{
452
491
  type: Input
453
492
  }], form: [{
@@ -482,10 +521,10 @@ class FileDropzoneDirective {
482
521
  $event.preventDefault();
483
522
  }
484
523
  }
485
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FileDropzoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
486
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: FileDropzoneDirective, isStandalone: true, selector: "[crisprFileDropzone]", inputs: { crisprFileDropzone: "crisprFileDropzone" }, outputs: { fileDrop: "fileDrop" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)" } }, ngImport: i0 }); }
524
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FileDropzoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
525
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: FileDropzoneDirective, isStandalone: true, selector: "[crisprFileDropzone]", inputs: { crisprFileDropzone: "crisprFileDropzone" }, outputs: { fileDrop: "fileDrop" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)" } }, ngImport: i0 }); }
487
526
  }
488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FileDropzoneDirective, decorators: [{
527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FileDropzoneDirective, decorators: [{
489
528
  type: Directive,
490
529
  args: [{
491
530
  selector: '[crisprFileDropzone]',
@@ -503,37 +542,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
503
542
  args: ['dragover', ['$event']]
504
543
  }] } });
505
544
 
506
- class SelectedFileComponent {
507
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SelectedFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
508
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: SelectedFileComponent, isStandalone: true, selector: "crispr-selected-file", inputs: { fileName: "fileName", progress: "progress", showProgress: "showProgress", color: "color" }, ngImport: i0, template: "<h3 class=\"mat-h3\">{{ fileName }}</h3>\n<mat-progress-bar\n *ngIf=\"showProgress\"\n mode=\"determinate\"\n [color]=\"color\"\n [value]=\"progress\">\n</mat-progress-bar>\n", styles: ["mat-progress-bar{margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i2$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], preserveWhitespaces: true }); }
509
- }
510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SelectedFileComponent, decorators: [{
511
- type: Component,
512
- args: [{ selector: 'crispr-selected-file', standalone: true, imports: [
513
- CommonModule,
514
- MatProgressBarModule
515
- ], template: "<h3 class=\"mat-h3\">{{ fileName }}</h3>\n<mat-progress-bar\n *ngIf=\"showProgress\"\n mode=\"determinate\"\n [color]=\"color\"\n [value]=\"progress\">\n</mat-progress-bar>\n", styles: ["mat-progress-bar{margin-bottom:8px}\n"] }]
516
- }], propDecorators: { fileName: [{
517
- type: Input
518
- }], progress: [{
519
- type: Input
520
- }], showProgress: [{
521
- type: Input
522
- }], color: [{
523
- type: Input
524
- }] } });
525
-
526
545
  class InfoComponent {
527
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
528
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: InfoComponent, isStandalone: true, selector: "crispr-info", inputs: { info: "info" }, ngImport: i0, template: "<mat-icon\n *ngIf=\"info\"\n [matTooltip]=\"info.content\"\n [matTooltipPosition]=\"info.tooltipPosition || 'below'\">\n {{info.iconName || 'info'}}\n</mat-icon>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
546
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
547
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: InfoComponent, isStandalone: true, selector: "crispr-info", inputs: { info: "info" }, ngImport: i0, template: "@if (info) {\n <mat-icon\n [matTooltip]=\"info.content\"\n [matTooltipPosition]=\"info.tooltipPosition || 'below'\">\n {{info.iconName || 'info'}}\n </mat-icon>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
529
548
  }
530
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: InfoComponent, decorators: [{
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: InfoComponent, decorators: [{
531
550
  type: Component,
532
- args: [{ selector: 'crispr-info', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
533
- CommonModule,
551
+ args: [{ selector: 'crispr-info', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
534
552
  MatIconModule,
535
553
  MatTooltipModule
536
- ], template: "<mat-icon\n *ngIf=\"info\"\n [matTooltip]=\"info.content\"\n [matTooltipPosition]=\"info.tooltipPosition || 'below'\">\n {{info.iconName || 'info'}}\n</mat-icon>\n" }]
554
+ ], template: "@if (info) {\n <mat-icon\n [matTooltip]=\"info.content\"\n [matTooltipPosition]=\"info.tooltipPosition || 'below'\">\n {{info.iconName || 'info'}}\n </mat-icon>\n}\n" }]
537
555
  }], propDecorators: { info: [{
538
556
  type: Input
539
557
  }] } });
@@ -546,15 +564,13 @@ class HeadingComponent extends CrisprFieldComponent {
546
564
  super(...arguments);
547
565
  this.defaultConfig = defaultConfig$1;
548
566
  }
549
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: HeadingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
550
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: HeadingComponent, isStandalone: true, selector: "crispr-heading", inputs: { config: "config" }, usesInheritance: true, ngImport: i0, template: " <label\n *ngIf=\"!!config?.label\"\n [ngClass]=\"config.typographyClass\">\n {{ config.label }}\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info\">\n </crispr-info>\n </label>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i3$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: InfoComponent, selector: "crispr-info", inputs: ["info"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
567
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: HeadingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
568
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: HeadingComponent, isStandalone: true, selector: "crispr-heading", usesInheritance: true, ngImport: i0, template: "@if (!!config()?.label) {\n <label\n [ngClass]=\"config().typographyClass\">\n {{ config().label }}\n @if (config().info) {\n <crispr-info\n matSuffix\n [info]=\"config().info\">\n </crispr-info>\n }\n </label>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i2$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: InfoComponent, selector: "crispr-info", inputs: ["info"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
551
569
  }
552
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: HeadingComponent, decorators: [{
570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: HeadingComponent, decorators: [{
553
571
  type: Component,
554
- args: [{ selector: 'crispr-heading', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, MatFormFieldModule, InfoComponent], template: " <label\n *ngIf=\"!!config?.label\"\n [ngClass]=\"config.typographyClass\">\n {{ config.label }}\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info\">\n </crispr-info>\n </label>\n", styles: [":host{display:block}\n"] }]
555
- }], propDecorators: { config: [{
556
- type: Input
557
- }] } });
572
+ args: [{ selector: 'crispr-heading', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatFormFieldModule, InfoComponent], standalone: true, template: "@if (!!config()?.label) {\n <label\n [ngClass]=\"config().typographyClass\">\n {{ config().label }}\n @if (config().info) {\n <crispr-info\n matSuffix\n [info]=\"config().info\">\n </crispr-info>\n }\n </label>\n}\n", styles: [":host{display:block}\n"] }]
573
+ }] });
558
574
 
559
575
  class FieldContainerComponent {
560
576
  constructor() {
@@ -593,12 +609,12 @@ class FieldContainerComponent {
593
609
  tap((shouldDisable) => shouldDisable ? control.disable() : control.enable()))
594
610
  : of(false);
595
611
  }
596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FieldContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
597
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: FieldContainerComponent, isStandalone: true, selector: "crispr-field-container", inputs: { config: "config", group: "group", inlineField: "inlineField" }, ngImport: i0, template: "<div\n *ngIf=\"(disabled$ | async) ? !config.hideDisabled : true\"\n [ngClass]=\"config.classes\"\n [class.inline-field]=\"inlineField\"\n class=\"field-container\">\n\n <crispr-heading\n *ngIf=\"config.heading\"\n [config]=\"config.heading\">\n </crispr-heading>\n\n <ng-content>\n </ng-content>\n\n</div>\n", styles: ["::ng-deep mat-form-field.mat-mdc-form-field{display:block;padding:.25em 0}.inline-field{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: HeadingComponent, selector: "crispr-heading", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
612
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FieldContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
613
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: FieldContainerComponent, isStandalone: true, selector: "crispr-field-container", inputs: { config: "config", group: "group", inlineField: "inlineField" }, ngImport: i0, template: "@if ((disabled$ | async) ? !config.hideDisabled : true) {\n <div\n [ngClass]=\"config.classes\"\n [class.inline-field]=\"inlineField\"\n class=\"field-container\">\n @if (config.heading) {\n <crispr-heading\n [config]=\"config.heading\">\n </crispr-heading>\n }\n <ng-content>\n </ng-content>\n </div>\n}\n", styles: ["::ng-deep mat-form-field.mat-mdc-form-field{display:block;padding:.25em 0}.inline-field{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HeadingComponent, selector: "crispr-heading" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
598
614
  }
599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FieldContainerComponent, decorators: [{
615
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FieldContainerComponent, decorators: [{
600
616
  type: Component,
601
- args: [{ selector: 'crispr-field-container', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, HeadingComponent], template: "<div\n *ngIf=\"(disabled$ | async) ? !config.hideDisabled : true\"\n [ngClass]=\"config.classes\"\n [class.inline-field]=\"inlineField\"\n class=\"field-container\">\n\n <crispr-heading\n *ngIf=\"config.heading\"\n [config]=\"config.heading\">\n </crispr-heading>\n\n <ng-content>\n </ng-content>\n\n</div>\n", styles: ["::ng-deep mat-form-field.mat-mdc-form-field{display:block;padding:.25em 0}.inline-field{display:inline-block}\n"] }]
617
+ args: [{ selector: 'crispr-field-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, HeadingComponent], template: "@if ((disabled$ | async) ? !config.hideDisabled : true) {\n <div\n [ngClass]=\"config.classes\"\n [class.inline-field]=\"inlineField\"\n class=\"field-container\">\n @if (config.heading) {\n <crispr-heading\n [config]=\"config.heading\">\n </crispr-heading>\n }\n <ng-content>\n </ng-content>\n </div>\n}\n", styles: ["::ng-deep mat-form-field.mat-mdc-form-field{display:block;padding:.25em 0}.inline-field{display:inline-block}\n"] }]
602
618
  }], propDecorators: { config: [{
603
619
  type: Input
604
620
  }], group: [{
@@ -607,10 +623,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
607
623
  type: Input
608
624
  }] } });
609
625
 
626
+ class SelectedFileComponent {
627
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SelectedFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
628
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: SelectedFileComponent, isStandalone: true, selector: "crispr-selected-file", inputs: { fileName: "fileName", progress: "progress", showProgress: "showProgress", color: "color" }, ngImport: i0, template: "<h3 class=\"mat-h3\">{{ fileName }}</h3>\n@if (showProgress) {\n <mat-progress-bar\n mode=\"determinate\"\n [color]=\"color\"\n [value]=\"progress\">\n </mat-progress-bar>\n}\n", styles: ["mat-progress-bar{margin-bottom:8px}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], preserveWhitespaces: true }); }
629
+ }
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SelectedFileComponent, decorators: [{
631
+ type: Component,
632
+ args: [{ selector: 'crispr-selected-file', imports: [
633
+ MatProgressBarModule
634
+ ], template: "<h3 class=\"mat-h3\">{{ fileName }}</h3>\n@if (showProgress) {\n <mat-progress-bar\n mode=\"determinate\"\n [color]=\"color\"\n [value]=\"progress\">\n </mat-progress-bar>\n}\n", styles: ["mat-progress-bar{margin-bottom:8px}\n"] }]
635
+ }], propDecorators: { fileName: [{
636
+ type: Input
637
+ }], progress: [{
638
+ type: Input
639
+ }], showProgress: [{
640
+ type: Input
641
+ }], color: [{
642
+ type: Input
643
+ }] } });
644
+
645
+ /* eslint-disable @nx/enforce-module-boundaries */
646
+ class FileUploadFieldComponent extends CrisprControlComponent {
647
+ // ngControl: NgControl = null;
648
+ constructor(ngControl) {
649
+ super();
650
+ this.ngControl = ngControl;
651
+ this.defaultConfig = {
652
+ allowMultipleFiles: false,
653
+ acceptedTypes: '*.*',
654
+ dropZoneText: 'DROP FILE HERE',
655
+ selectFilesButtonType: 'button',
656
+ selectButtonText: 'SELECT',
657
+ showClearFilesButton: true,
658
+ clearFilesButtonText: 'CLEAR',
659
+ uploadButtonText: 'UPLOAD',
660
+ uploadButtonType: 'button',
661
+ showUploadProgress: false,
662
+ disableOnUpload: true,
663
+ };
664
+ this.selectedFiles = signal(null, ...(ngDevMode ? [{ debugName: "selectedFiles" }] : []));
665
+ this.selectedFilesArray = computed(() => Array.from(this.selectedFiles()), ...(ngDevMode ? [{ debugName: "selectedFilesArray" }] : []));
666
+ this.isUploaded = false;
667
+ this.fileProgress = [];
668
+ if (this.ngControl != null) {
669
+ // Setting the value accessor directly (instead of using
670
+ // the providers) to avoid running into a circular import.
671
+ ngControl.valueAccessor = this;
672
+ }
673
+ }
674
+ ngOnInit() {
675
+ super.ngOnInit();
676
+ this.disabled$ = this.config().disabledCallback
677
+ ? this.config().disabledCallback(this.group())
678
+ : of(false);
679
+ }
680
+ filesChanged(files) {
681
+ if (files && files.length > 0) {
682
+ this.selectedFiles.set(files);
683
+ this.control().patchValue(files);
684
+ }
685
+ }
686
+ uploadFiles() {
687
+ if (this.selectedFiles() && this.config().uploadFiles) {
688
+ this.isUploaded = true;
689
+ this.config().uploadFiles(this.group(), this.selectedFiles(), this);
690
+ }
691
+ }
692
+ resetFileInput() {
693
+ this.fileInputRef.nativeElement.value = '';
694
+ this.control().patchValue(null);
695
+ this.isUploaded = false;
696
+ }
697
+ writeValue(value) {
698
+ // clear file input
699
+ // this.host.nativeElement.value = '';
700
+ // this.file = null;
701
+ }
702
+ registerOnChange(fn) {
703
+ this.onChange = fn;
704
+ }
705
+ registerOnTouched(fn) { }
706
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FileUploadFieldComponent, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
707
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: FileUploadFieldComponent, isStandalone: true, selector: "crispr-file-upload-field", viewQueries: [{ propertyName: "fileInputRef", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config()\"\n [group]=\"group()\">\n <mat-form-field floatLabel=\"always\"\n [color]=\"config().color\"\n appearance=\"outline\"\n [crisprFileDropzone]=\"!(disabled$ | async) && !(config().disableOnUpload && isUploaded)\"\n [formGroup]=\"group()\"\n (fileDrop)=\"filesChanged($event)\">\n\n <input [formControlName]=\"config().controlName\" matInput type=\"text\"/>\n <input\n #fileInput\n type=\"file\"\n style=\"display: none\"\n [accept]=\"config().acceptedTypes\"\n [multiple]=\"config().allowMultipleFiles\"\n (change)=\"filesChanged($event.target.files)\"/>\n <mat-label>{{config().label}}</mat-label>\n\n @if ((selectedFiles()?.length === 0)) {\n <div class=\"drop-info\">\n <mat-icon class=\"drop-icon\" inline=\"true\">cloud_upload</mat-icon>\n <h2 class=\"mat-h2\">{{config().dropZoneText}}</h2>\n or\n <button\n mat-raised-button\n type=\"button\"\n color=\"primary\"\n [disabled]=\"(disabled$ | async) || config().disableOnUpload && isUploaded\"\n (click)=\"fileInput.click()\"\n [attr.aria-label]=\"config().controlName\">\n {{config().selectButtonText}}\n </button>\n </div>\n } @else {\n <div class=\"selected-files-container\">\n <div class=\"selected-files-list\">\n @for (file of selectedFilesArray(); track file; let i = $index) {\n <crispr-selected-file\n [color]=\"config().color === 'primary' ? 'accent' : 'primary'\"\n [fileName]=\"file.name\"\n [showProgress]=\"config().showUploadProgress\"\n [progress]=\"fileProgress && (fileProgress[i] | async)\">\n </crispr-selected-file>\n }\n </div>\n </div>\n }\n @if (config().hint && (control().valid || !control().touched)) {<mat-hint>{{config().hint}}</mat-hint>}\n </mat-form-field>\n @if ((selectedFiles())?.length > 0) {\n <div class=\"button-container\">\n <button\n mat-button\n (click)=\"resetFileInput()\"\n type=\"button\"\n [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n aria-label=\"Remove Selected File(s)\">\n {{config().clearFilesButtonText}}\n <mat-icon>delete</mat-icon>\n </button>\n @if (!!config().uploadFiles) {\n <button\n mat-raised-button\n type=\"button\"\n color=\"accent\"\n class=\"file-input-button\"\n [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n (click)=\"uploadFiles()\"\n [attr.aria-label]=\"config().uploadButtonText\">\n {{ config().uploadButtonText }}\n </button>\n }\n </div>\n }\n</crispr-field-container>\n", styles: [":host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-infix{padding-top:0;display:flex;justify-content:center}:host .drop-info{display:flex;flex-direction:column;align-items:center}:host .drop-info .drop-icon{font-size:36px}:host .drop-info .mat-h2{margin:0}:host .button-container{display:flex;justify-content:flex-end;margin-top:-16px}:host .button-container button{margin-left:8px}:host .selected-files-container{width:100%}:host [matInput]{position:absolute;max-height:0;visibility:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: SelectedFileComponent, selector: "crispr-selected-file", inputs: ["fileName", "progress", "showProgress", "color"] }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i6.ControlErrorsDirective, selector: "[formControl], [formControlName]" }, { kind: "directive", type: i6.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { kind: "directive", type: FileDropzoneDirective, selector: "[crisprFileDropzone]", inputs: ["crisprFileDropzone"], outputs: ["fileDrop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
708
+ }
709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FileUploadFieldComponent, decorators: [{
710
+ type: Component,
711
+ args: [{ selector: 'crispr-file-upload-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
712
+ CommonModule,
713
+ FieldContainerComponent,
714
+ ReactiveFormsModule,
715
+ MatIconModule,
716
+ MatButtonModule,
717
+ MatFormFieldModule,
718
+ MatInputModule,
719
+ SelectedFileComponent,
720
+ FormValidationHandlerModule,
721
+ FileDropzoneDirective,
722
+ ], standalone: true, template: "<crispr-field-container\n [config]=\"config()\"\n [group]=\"group()\">\n <mat-form-field floatLabel=\"always\"\n [color]=\"config().color\"\n appearance=\"outline\"\n [crisprFileDropzone]=\"!(disabled$ | async) && !(config().disableOnUpload && isUploaded)\"\n [formGroup]=\"group()\"\n (fileDrop)=\"filesChanged($event)\">\n\n <input [formControlName]=\"config().controlName\" matInput type=\"text\"/>\n <input\n #fileInput\n type=\"file\"\n style=\"display: none\"\n [accept]=\"config().acceptedTypes\"\n [multiple]=\"config().allowMultipleFiles\"\n (change)=\"filesChanged($event.target.files)\"/>\n <mat-label>{{config().label}}</mat-label>\n\n @if ((selectedFiles()?.length === 0)) {\n <div class=\"drop-info\">\n <mat-icon class=\"drop-icon\" inline=\"true\">cloud_upload</mat-icon>\n <h2 class=\"mat-h2\">{{config().dropZoneText}}</h2>\n or\n <button\n mat-raised-button\n type=\"button\"\n color=\"primary\"\n [disabled]=\"(disabled$ | async) || config().disableOnUpload && isUploaded\"\n (click)=\"fileInput.click()\"\n [attr.aria-label]=\"config().controlName\">\n {{config().selectButtonText}}\n </button>\n </div>\n } @else {\n <div class=\"selected-files-container\">\n <div class=\"selected-files-list\">\n @for (file of selectedFilesArray(); track file; let i = $index) {\n <crispr-selected-file\n [color]=\"config().color === 'primary' ? 'accent' : 'primary'\"\n [fileName]=\"file.name\"\n [showProgress]=\"config().showUploadProgress\"\n [progress]=\"fileProgress && (fileProgress[i] | async)\">\n </crispr-selected-file>\n }\n </div>\n </div>\n }\n @if (config().hint && (control().valid || !control().touched)) {<mat-hint>{{config().hint}}</mat-hint>}\n </mat-form-field>\n @if ((selectedFiles())?.length > 0) {\n <div class=\"button-container\">\n <button\n mat-button\n (click)=\"resetFileInput()\"\n type=\"button\"\n [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n aria-label=\"Remove Selected File(s)\">\n {{config().clearFilesButtonText}}\n <mat-icon>delete</mat-icon>\n </button>\n @if (!!config().uploadFiles) {\n <button\n mat-raised-button\n type=\"button\"\n color=\"accent\"\n class=\"file-input-button\"\n [disabled]=\"(disabled$ | async) || (config().disableOnUpload && isUploaded)\"\n (click)=\"uploadFiles()\"\n [attr.aria-label]=\"config().uploadButtonText\">\n {{ config().uploadButtonText }}\n </button>\n }\n </div>\n }\n</crispr-field-container>\n", styles: [":host ::ng-deep .mat-mdc-form-field .mat-mdc-form-field-infix{padding-top:0;display:flex;justify-content:center}:host .drop-info{display:flex;flex-direction:column;align-items:center}:host .drop-info .drop-icon{font-size:36px}:host .drop-info .mat-h2{margin:0}:host .button-container{display:flex;justify-content:flex-end;margin-top:-16px}:host .button-container button{margin-left:8px}:host .selected-files-container{width:100%}:host [matInput]{position:absolute;max-height:0;visibility:hidden}\n"] }]
723
+ }], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
724
+ type: Optional
725
+ }, {
726
+ type: Self
727
+ }] }], propDecorators: { fileInputRef: [{
728
+ type: ViewChild,
729
+ args: ['fileInput']
730
+ }] } });
731
+
732
+ var index$3 = /*#__PURE__*/Object.freeze({
733
+ __proto__: null,
734
+ FileUploadFieldComponent: FileUploadFieldComponent
735
+ });
736
+
610
737
  var index$2 = /*#__PURE__*/Object.freeze({
611
738
  __proto__: null,
612
739
  FieldContainerComponent: FieldContainerComponent,
613
740
  FileDropzoneDirective: FileDropzoneDirective,
741
+ FileUploadFieldComponent: FileUploadFieldComponent,
614
742
  HeadingComponent: HeadingComponent,
615
743
  InfoComponent: InfoComponent,
616
744
  SelectedFileComponent: SelectedFileComponent
@@ -646,10 +774,10 @@ class CrisprDisplayFieldDirective {
646
774
  this.componentInstance.value = value;
647
775
  this.cdr.detectChanges();
648
776
  }
649
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprDisplayFieldDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
650
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: CrisprDisplayFieldDirective, isStandalone: true, selector: "[crisprDisplayField]", inputs: { group: "group", value: "value", component: "component", index: "index" }, ngImport: i0 }); }
777
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprDisplayFieldDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
778
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: CrisprDisplayFieldDirective, isStandalone: true, selector: "[crisprDisplayField]", inputs: { group: "group", value: "value", component: "component", index: "index" }, ngImport: i0 }); }
651
779
  }
652
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprDisplayFieldDirective, decorators: [{
780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprDisplayFieldDirective, decorators: [{
653
781
  type: Directive,
654
782
  args: [{
655
783
  selector: '[crisprDisplayField]',
@@ -669,8 +797,7 @@ const defaultConfig = {
669
797
  addButtonLabel: 'ADD ITEM',
670
798
  minListLength: 1,
671
799
  };
672
- const FormGroupListMixin = crisprControlMixin(CrisprFieldComponent);
673
- class FormGroupListComponent extends FormGroupListMixin {
800
+ class FormGroupListComponent extends CrisprControlComponent {
674
801
  constructor(cdr) {
675
802
  super();
676
803
  this.cdr = cdr;
@@ -687,16 +814,16 @@ class FormGroupListComponent extends FormGroupListMixin {
687
814
  // TODO: this is required to ngFor of controls in template, must be a better way
688
815
  }
689
816
  setControlValue(values) {
690
- if (this.control) {
817
+ if (this.control()) {
691
818
  if (values?.length > 0) {
692
819
  // clear any existing values so that new values don't concatenate onto the old
693
- const currentValues = this.control.value;
820
+ const currentValues = this.control().value;
694
821
  if (currentValues.length) {
695
- this.control.clear();
822
+ this.control().clear();
696
823
  }
697
824
  values.forEach((value) => this.addGroup(value));
698
825
  }
699
- else if (this.config.displayInitialItem) {
826
+ else if (this.config().displayInitialItem) {
700
827
  this.addGroup();
701
828
  }
702
829
  // needed to ensure new array items render
@@ -714,25 +841,24 @@ class FormGroupListComponent extends FormGroupListMixin {
714
841
  this.addGroup();
715
842
  }
716
843
  addGroup(value = null) {
717
- this.control.push(createControlForType(this.config.itemConfig, value));
844
+ this.control().push(createControlForType(this.config().itemConfig, value));
718
845
  // needed to ensure new array items render
719
846
  setTimeout(() => {
720
847
  this.cdr.detectChanges();
721
848
  });
722
849
  }
723
850
  deleteGroup(index) {
724
- this.control.removeAt(index);
851
+ this.control().removeAt(index);
725
852
  }
726
853
  clickEditItem(index) {
727
854
  this.selectedIndex = index;
728
855
  }
729
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FormGroupListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
730
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: FormGroupListComponent, isStandalone: true, selector: "crispr-form-group-list", usesInheritance: true, ngImport: i0, template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <ng-container *ngFor=\"let itemControl of control?.controls; let i = index; let last = last\">\n <ng-container *ngIf=\"!config.displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true); else display\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"itemControl\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #display>\n <div\n class=\"display-field-container\"\n crisprDisplayField\n [component]=\"config.displayItemComponent\"\n [value]=\"itemControl.value\"\n [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "directive", type: CrisprDisplayFieldDirective, selector: "[crisprDisplayField]", inputs: ["group", "value", "component", "index"] }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i7.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
856
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FormGroupListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
857
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: FormGroupListComponent, isStandalone: true, selector: "crispr-form-group-list", usesInheritance: true, ngImport: i0, template: "<crispr-field-container [config]=\"config\" [group]=\"group()\" [formGroup]=\"group()\">\n\n <div [formArrayName]=\"config().controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n @for (itemControl of control()?.controls; track itemControl; let i = $index; let last = $last) {\n @if (!config().displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true)) {\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config().itemLabelBuilder ? config().itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n @if (i + 1 > config().minListLength) {\n <button mat-icon-button type=\"button\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n }\n </div>\n <div [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n @for (field of config().itemConfig.fields; track field) {\n <ng-container crisprField [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\" [group]=\"itemControl\">\n </ng-container>\n }\n </div>\n } @else {\n <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n [value]=\"itemControl.value\" [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n }\n <ng-template #display>\n <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n [value]=\"itemControl.value\" [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n }\n </div>\n <div class=\"group-footer\">\n <button type=\"button\" class=\"add\" mat-raised-button [color]=\"config().addButtonColor\" (click)=\"clickAdd()\">\n {{config().addItemLabel || config().addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "directive", type: CrisprDisplayFieldDirective, selector: "[crisprDisplayField]", inputs: ["group", "value", "component", "index"] }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i6.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true }); }
731
858
  }
732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: FormGroupListComponent, decorators: [{
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: FormGroupListComponent, decorators: [{
733
860
  type: Component,
734
- args: [{ selector: 'crispr-form-group-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
735
- CommonModule,
861
+ args: [{ selector: 'crispr-form-group-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
736
862
  MatButtonModule,
737
863
  MatIconModule,
738
864
  FieldContainerComponent,
@@ -740,8 +866,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
740
866
  CrisprFieldDirective,
741
867
  CrisprDisplayFieldDirective,
742
868
  CrisprPipesModule,
743
- FormValidationHandlerModule,
744
- ], template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <ng-container *ngFor=\"let itemControl of control?.controls; let i = index; let last = last\">\n <ng-container *ngIf=\"!config.displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true); else display\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"itemControl\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #display>\n <div\n class=\"display-field-container\"\n crisprDisplayField\n [component]=\"config.displayItemComponent\"\n [value]=\"itemControl.value\"\n [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\n"] }]
869
+ FormValidationHandlerModule
870
+ ], standalone: true, template: "<crispr-field-container [config]=\"config\" [group]=\"group()\" [formGroup]=\"group()\">\n\n <div [formArrayName]=\"config().controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n @for (itemControl of control()?.controls; track itemControl; let i = $index; let last = $last) {\n @if (!config().displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true)) {\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config().itemLabelBuilder ? config().itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n @if (i + 1 > config().minListLength) {\n <button mat-icon-button type=\"button\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n }\n </div>\n <div [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n @for (field of config().itemConfig.fields; track field) {\n <ng-container crisprField [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\" [group]=\"itemControl\">\n </ng-container>\n }\n </div>\n } @else {\n <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n [value]=\"itemControl.value\" [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n }\n <ng-template #display>\n <div class=\"display-field-container\" crisprDisplayField [component]=\"config().displayItemComponent\"\n [value]=\"itemControl.value\" [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n }\n </div>\n <div class=\"group-footer\">\n <button type=\"button\" class=\"add\" mat-raised-button [color]=\"config().addButtonColor\" (click)=\"clickAdd()\">\n {{config().addItemLabel || config().addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\n"] }]
745
871
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
746
872
 
747
873
  var index$1 = /*#__PURE__*/Object.freeze({
@@ -749,34 +875,33 @@ var index$1 = /*#__PURE__*/Object.freeze({
749
875
  FormGroupListComponent: FormGroupListComponent
750
876
  });
751
877
 
752
- const FormGroupMixin = crisprControlMixin(CrisprFieldComponent);
753
- class SubGroupComponent extends FormGroupMixin {
878
+ class SubGroupComponent extends CrisprControlComponent {
754
879
  ngOnInit() {
755
880
  super.ngOnInit();
756
881
  }
757
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SubGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
758
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: SubGroupComponent, selector: "crispr-sub-group", usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <ng-container\n *ngFor=\"let fieldConfig of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : fieldConfig\"\n [config]=\"fieldConfig\"\n [group]=\"control\">\n </ng-container>\n</crispr-field-container>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }], preserveWhitespaces: true }); }
882
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SubGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
883
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: SubGroupComponent, isStandalone: false, selector: "crispr-sub-group", usesInheritance: true, ngImport: i0, template: "<crispr-field-container\n [config]=\"config()\"\n [group]=\"group()\">\n @for (fieldConfig of config().fields; track fieldConfig) {\n <ng-container\n crisprField\n [value]=\"value | initialControlValue : fieldConfig\"\n [config]=\"fieldConfig\"\n [group]=\"control\">\n </ng-container>\n }\n</crispr-field-container>\n\n", styles: [""], dependencies: [{ kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "pipe", type: InitialControlValuePipe, name: "initialControlValue" }], preserveWhitespaces: true }); }
759
884
  }
760
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SubGroupComponent, decorators: [{
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SubGroupComponent, decorators: [{
761
886
  type: Component,
762
- args: [{ selector: 'crispr-sub-group', template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <ng-container\n *ngFor=\"let fieldConfig of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : fieldConfig\"\n [config]=\"fieldConfig\"\n [group]=\"control\">\n </ng-container>\n</crispr-field-container>\n\n" }]
887
+ args: [{ selector: 'crispr-sub-group', standalone: false, template: "<crispr-field-container\n [config]=\"config()\"\n [group]=\"group()\">\n @for (fieldConfig of config().fields; track fieldConfig) {\n <ng-container\n crisprField\n [value]=\"value | initialControlValue : fieldConfig\"\n [config]=\"fieldConfig\"\n [group]=\"control\">\n </ng-container>\n }\n</crispr-field-container>\n\n" }]
763
888
  }] });
764
889
 
765
890
  class SubGroupModule {
766
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SubGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
767
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: SubGroupModule, declarations: [SubGroupComponent], imports: [CommonModule,
891
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SubGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
892
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: SubGroupModule, declarations: [SubGroupComponent], imports: [CommonModule,
768
893
  CrisprFieldDirective,
769
894
  FieldContainerComponent,
770
895
  CrisprPipesModule,
771
896
  // TODO: Does this need to be here?
772
897
  FormValidationHandlerModule], exports: [SubGroupComponent] }); }
773
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SubGroupModule, imports: [CommonModule,
898
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SubGroupModule, imports: [CommonModule,
774
899
  FieldContainerComponent,
775
900
  CrisprPipesModule,
776
901
  // TODO: Does this need to be here?
777
902
  FormValidationHandlerModule] }); }
778
903
  }
779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: SubGroupModule, decorators: [{
904
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SubGroupModule, decorators: [{
780
905
  type: NgModule,
781
906
  args: [{
782
907
  imports: [
@@ -803,8 +928,8 @@ var index = /*#__PURE__*/Object.freeze({
803
928
  });
804
929
 
805
930
  class CrisprFormsModule {
806
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
807
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormsModule, imports: [CommonModule,
931
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
932
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormsModule, imports: [CommonModule,
808
933
  ReactiveFormsModule,
809
934
  FormValidationHandlerModule,
810
935
  FormGroupListComponent,
@@ -814,7 +939,7 @@ class CrisprFormsModule {
814
939
  SubGroupModule,
815
940
  CrisprPipesModule,
816
941
  CrisprFormComponent], exports: [CrisprFormComponent, FieldContainerComponent] }); }
817
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormsModule, imports: [CommonModule,
942
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormsModule, imports: [CommonModule,
818
943
  ReactiveFormsModule,
819
944
  FormValidationHandlerModule,
820
945
  FormGroupListComponent,
@@ -823,7 +948,7 @@ class CrisprFormsModule {
823
948
  CrisprPipesModule,
824
949
  CrisprFormComponent] }); }
825
950
  }
826
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CrisprFormsModule, decorators: [{
951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CrisprFormsModule, decorators: [{
827
952
  type: NgModule,
828
953
  args: [{
829
954
  imports: [
@@ -846,5 +971,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
846
971
  * Generated bundle index. Do not edit.
847
972
  */
848
973
 
849
- export { AbstractAutocompleteComponent, ControlType, CrisprDisplayFieldComponent, CrisprFieldComponent, CrisprFormComponent, CrisprFormsModule, DEFAULT_EMPTY_OPTIONS_MESSAGE, FieldContainerComponent, FileDropzoneDirective, HeadingComponent, InfoComponent, SelectedFileComponent, allowedFileExtValidator, allowedFileType, buildFormGroupFromConfig, callOptionsIfFunction, convertBytesToMb, createControlForType, crisprControlMixin, filterOptionsByLabel, isControlConfig, maxFileSizeValidator, observablifyOptions, valueIn };
974
+ export { AbstractAutocompleteComponent, ControlType, CrisprControlComponent, CrisprDisplayFieldComponent, CrisprFieldComponent, CrisprFormComponent, CrisprFormsModule, DEFAULT_EMPTY_OPTIONS_MESSAGE, FieldContainerComponent, FileDropzoneDirective, FileUploadFieldComponent, HeadingComponent, InfoComponent, SelectedFileComponent, allowedFileExtValidator, allowedFileType, buildFormGroupFromConfig, callOptionsIfFunction, convertBytesToMb, createControlForType, filterOptionsByLabel, isControlConfig, maxFileSizeValidator, observablifyOptions, valueIn };
850
975
  //# sourceMappingURL=tft-crispr-forms.mjs.map