@ldquocc/dynamic-form 0.0.9 → 0.0.11

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 (298) hide show
  1. package/fesm2022/ldquocc-dynamic-form.mjs +4928 -0
  2. package/fesm2022/ldquocc-dynamic-form.mjs.map +1 -0
  3. package/index.d.ts +5 -0
  4. package/lib/dynamic-form.component.d.ts +67 -0
  5. package/lib/shared/base/base-select.component.d.ts +19 -0
  6. package/lib/shared/base/base-value-accessor.d.ts +69 -0
  7. package/{src/lib/shared/components/component.ts → lib/shared/components/component.d.ts} +14 -34
  8. package/lib/shared/components/dynamic-field/dynamic-field.component.d.ts +23 -0
  9. package/lib/shared/components/field-user-config/field-user-config.component.d.ts +10 -0
  10. package/lib/shared/components/fields/components/suffix/suffix.component.d.ts +12 -0
  11. package/lib/shared/components/fields/date/date-picker/date-picker.component.d.ts +17 -0
  12. package/lib/shared/components/fields/date/date-range/date-range.component.d.ts +17 -0
  13. package/lib/shared/components/fields/input/input-formatted/input-formatted.component.d.ts +20 -0
  14. package/lib/shared/components/fields/input/input-password/input-password.component.d.ts +12 -0
  15. package/lib/shared/components/fields/input/input-text/input-text.component.d.ts +14 -0
  16. package/lib/shared/components/fields/select/multi-select/multi-select.component.d.ts +21 -0
  17. package/lib/shared/components/fields/select/single-select/single-select.component.d.ts +22 -0
  18. package/lib/shared/components/fields/select/tree-select/tree-select.component.d.ts +28 -0
  19. package/lib/shared/components/fields/textarea/textarea.component.d.ts +14 -0
  20. package/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.d.ts +25 -0
  21. package/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.d.ts +76 -0
  22. package/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.d.ts +27 -0
  23. package/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.d.ts +29 -0
  24. package/lib/shared/config/dynamic-form.config.d.ts +9 -0
  25. package/lib/shared/consts/common/common.const.d.ts +5 -0
  26. package/lib/shared/consts/common/field-dependency.const.d.ts +1 -0
  27. package/lib/shared/consts/common/file.const.d.ts +148 -0
  28. package/{src/lib/shared/consts/common/index.ts → lib/shared/consts/common/index.d.ts} +4 -4
  29. package/lib/shared/consts/common/standalone-import.const.d.ts +7 -0
  30. package/lib/shared/consts/controls/control.const.d.ts +1 -0
  31. package/{src/lib/shared/consts/controls/index.ts → lib/shared/consts/controls/index.d.ts} +1 -1
  32. package/lib/shared/consts/fields/date-field.const.d.ts +7 -0
  33. package/lib/shared/consts/fields/field.const.d.ts +4 -0
  34. package/{src/lib/shared/consts/fields/index.ts → lib/shared/consts/fields/index.d.ts} +5 -5
  35. package/lib/shared/consts/fields/input-field.const.d.ts +4 -0
  36. package/lib/shared/consts/fields/input-formatted-field.const.d.ts +4 -0
  37. package/lib/shared/consts/fields/radio-field.const.d.ts +10 -0
  38. package/lib/shared/consts/fields/select-field.const.d.ts +6 -0
  39. package/lib/shared/consts/fields/upload-field.const.d.ts +1 -0
  40. package/lib/shared/consts/validators/pattern.const.d.ts +2 -0
  41. package/lib/shared/enums/common/field-dependency.enum.d.ts +9 -0
  42. package/lib/shared/enums/common/file-size-type.enum.d.ts +6 -0
  43. package/{src/lib/shared/enums/common/index.ts → lib/shared/enums/common/index.d.ts} +4 -4
  44. package/lib/shared/enums/common/output-value-type.enum.d.ts +19 -0
  45. package/lib/shared/enums/common/view-mode.enum.d.ts +4 -0
  46. package/lib/shared/enums/controls/control.enum.d.ts +11 -0
  47. package/{src/lib/shared/enums/controls/index.ts → lib/shared/enums/controls/index.d.ts} +1 -1
  48. package/lib/shared/enums/fields/date-field.enum.d.ts +4 -0
  49. package/lib/shared/enums/fields/field.enum.d.ts +20 -0
  50. package/{src/lib/shared/enums/fields/index.ts → lib/shared/enums/fields/index.d.ts} +6 -6
  51. package/lib/shared/enums/fields/input-field.enum.d.ts +6 -0
  52. package/lib/shared/enums/fields/input-formatted-field.enum.d.ts +6 -0
  53. package/lib/shared/enums/fields/select-field.enum.d.ts +4 -0
  54. package/lib/shared/enums/fields/upload-field.enum.d.ts +5 -0
  55. package/lib/shared/enums/form/dynamic-form.enum.d.ts +6 -0
  56. package/{src/lib/shared/enums/form/index.ts → lib/shared/enums/form/index.d.ts} +1 -1
  57. package/{src/lib/shared/enums/validators/index.ts → lib/shared/enums/validators/index.d.ts} +2 -2
  58. package/lib/shared/enums/validators/regex.enum.d.ts +38 -0
  59. package/lib/shared/enums/validators/validators.enum.d.ts +14 -0
  60. package/lib/shared/factories/auto-numeric-options.factory.d.ts +5 -0
  61. package/lib/shared/models/common/api-config.model.d.ts +4 -0
  62. package/lib/shared/models/common/api-response.model.d.ts +19 -0
  63. package/lib/shared/models/common/common.model.d.ts +29 -0
  64. package/lib/shared/models/common/field-dependency.model.d.ts +16 -0
  65. package/lib/shared/models/common/file-config.model.d.ts +11 -0
  66. package/{src/lib/shared/models/common/index.ts → lib/shared/models/common/index.d.ts} +7 -7
  67. package/lib/shared/models/common/obj-field.model.d.ts +59 -0
  68. package/lib/shared/models/common/object-storage.model.d.ts +15 -0
  69. package/{src/lib/shared/models/common/output-value-type.model.ts → lib/shared/models/common/output-value-type.model.d.ts} +4 -4
  70. package/lib/shared/models/common/table-models.d.ts +15 -0
  71. package/{src/lib/shared/models/common/view-mode.model.ts → lib/shared/models/common/view-mode.model.d.ts} +1 -1
  72. package/{src/lib/shared/models/controls/control.model.ts → lib/shared/models/controls/control.model.d.ts} +2 -3
  73. package/{src/lib/shared/models/controls/index.ts → lib/shared/models/controls/index.d.ts} +1 -1
  74. package/lib/shared/models/fields/date/base-date-field.model.d.ts +19 -0
  75. package/lib/shared/models/fields/date/date-picker-field.model.d.ts +12 -0
  76. package/lib/shared/models/fields/date/date-range-field.model.d.ts +12 -0
  77. package/{src/lib/shared/models/fields/date/index.ts → lib/shared/models/fields/date/index.d.ts} +3 -3
  78. package/lib/shared/models/fields/field-grid.model.d.ts +9 -0
  79. package/lib/shared/models/fields/field-group.model.d.ts +21 -0
  80. package/lib/shared/models/fields/field-user-config.model.d.ts +3 -0
  81. package/lib/shared/models/fields/field.model.d.ts +57 -0
  82. package/{src/lib/shared/models/fields/index.ts → lib/shared/models/fields/index.d.ts} +2 -2
  83. package/{src/lib/shared/models/fields/input/index.ts → lib/shared/models/fields/input/index.d.ts} +4 -4
  84. package/lib/shared/models/fields/input/input-field.model.d.ts +31 -0
  85. package/lib/shared/models/fields/input/input-formatted-field.model.d.ts +13 -0
  86. package/lib/shared/models/fields/input/input-password-field.model.d.ts +11 -0
  87. package/lib/shared/models/fields/input/input-text-field.model.d.ts +9 -0
  88. package/lib/shared/models/fields/radio/radio-base-field.model.d.ts +26 -0
  89. package/lib/shared/models/fields/select/multi-select-field.model.d.ts +11 -0
  90. package/lib/shared/models/fields/select/select-base-field.model.d.ts +40 -0
  91. package/lib/shared/models/fields/select/single-select-field.model.d.ts +9 -0
  92. package/lib/shared/models/fields/select/tree-select-field.model.d.ts +10 -0
  93. package/lib/shared/models/fields/textarea/textarea-field.model.d.ts +20 -0
  94. package/lib/shared/models/fields/upload/avatar-upload-field.model.d.ts +9 -0
  95. package/lib/shared/models/fields/upload/base-upload-field.model.d.ts +25 -0
  96. package/{src/lib/shared/models/fields/upload/index.ts → lib/shared/models/fields/upload/index.d.ts} +5 -5
  97. package/lib/shared/models/fields/upload/multi-file-upload-field.model.d.ts +10 -0
  98. package/lib/shared/models/fields/upload/multi-image-upload-field.model.d.ts +12 -0
  99. package/lib/shared/models/fields/upload/single-file-upload-field.model.d.ts +11 -0
  100. package/{src/lib/shared/models/form/dynamic-form.model.ts → lib/shared/models/form/dynamic-form.model.d.ts} +1 -1
  101. package/{src/lib/shared/models/form/index.ts → lib/shared/models/form/index.d.ts} +1 -1
  102. package/lib/shared/services/dynamic-form.service.d.ts +48 -0
  103. package/lib/shared/services/field.service.d.ts +41 -0
  104. package/lib/shared/services/file.service.d.ts +20 -0
  105. package/lib/shared/services/form-config.service.d.ts +10 -0
  106. package/lib/shared/services/form-data.service.d.ts +53 -0
  107. package/lib/shared/services/form-utils.d.ts +5 -0
  108. package/lib/shared/services/suffix.service.d.ts +12 -0
  109. package/lib/shared/services/validation.service.d.ts +10 -0
  110. package/lib/shared/utils/common/common.utils.d.ts +7 -0
  111. package/{src/lib/shared/utils/common/index.ts → lib/shared/utils/common/index.d.ts} +1 -1
  112. package/lib/shared/utils/date/date.utils.d.ts +6 -0
  113. package/{src/lib/shared/utils/date/index.ts → lib/shared/utils/date/index.d.ts} +1 -1
  114. package/lib/shared/utils/dynamic-form/dynamic-form.d.ts +11 -0
  115. package/lib/shared/utils/fields/fields.d.ts +20 -0
  116. package/{src/lib/shared/utils/fields/index.ts → lib/shared/utils/fields/index.d.ts} +1 -1
  117. package/lib/shared/utils/file/file.utils.d.ts +4 -0
  118. package/{src/lib/shared/utils/file/index.ts → lib/shared/utils/file/index.d.ts} +1 -1
  119. package/lib/shared/utils/validators/custom-validators.d.ts +11 -0
  120. package/lib/shared/utils/validators/default-error-message.d.ts +6 -0
  121. package/{src/lib/shared/utils/validators/index.ts → lib/shared/utils/validators/index.d.ts} +3 -3
  122. package/lib/shared/utils/validators/pattern.d.ts +4 -0
  123. package/package.json +31 -20
  124. package/{src/public-api.ts → public-api.d.ts} +29 -68
  125. package/ng-package.json +0 -15
  126. package/src/lib/dynamic-form.component.html +0 -121
  127. package/src/lib/dynamic-form.component.scss +0 -7
  128. package/src/lib/dynamic-form.component.spec.ts +0 -21
  129. package/src/lib/dynamic-form.component.ts +0 -237
  130. package/src/lib/dynamic-form.service.spec.ts +0 -16
  131. package/src/lib/dynamic-form.service.ts +0 -9
  132. package/src/lib/shared/base/base-select.component.ts +0 -183
  133. package/src/lib/shared/base/base-value-accessor.ts +0 -192
  134. package/src/lib/shared/components/d-form-testing/d-form-testing.component.html +0 -197
  135. package/src/lib/shared/components/d-form-testing/d-form-testing.component.less +0 -12
  136. package/src/lib/shared/components/d-form-testing/d-form-testing.component.spec.ts +0 -22
  137. package/src/lib/shared/components/d-form-testing/d-form-testing.component.ts +0 -197
  138. package/src/lib/shared/components/dynamic-field/dynamic-field.component.html +0 -218
  139. package/src/lib/shared/components/dynamic-field/dynamic-field.component.scss +0 -28
  140. package/src/lib/shared/components/dynamic-field/dynamic-field.component.spec.ts +0 -21
  141. package/src/lib/shared/components/dynamic-field/dynamic-field.component.ts +0 -67
  142. package/src/lib/shared/components/field-user-config/field-user-config.component.html +0 -38
  143. package/src/lib/shared/components/field-user-config/field-user-config.component.scss +0 -29
  144. package/src/lib/shared/components/field-user-config/field-user-config.component.ts +0 -33
  145. package/src/lib/shared/components/fields/components/suffix/suffix.component.html +0 -42
  146. package/src/lib/shared/components/fields/components/suffix/suffix.component.scss +0 -3
  147. package/src/lib/shared/components/fields/components/suffix/suffix.component.spec.ts +0 -22
  148. package/src/lib/shared/components/fields/components/suffix/suffix.component.ts +0 -32
  149. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.html +0 -20
  150. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.scss +0 -5
  151. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.spec.ts +0 -21
  152. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.ts +0 -148
  153. package/src/lib/shared/components/fields/date/date-range/date-range.component.html +0 -33
  154. package/src/lib/shared/components/fields/date/date-range/date-range.component.scss +0 -22
  155. package/src/lib/shared/components/fields/date/date-range/date-range.component.spec.ts +0 -21
  156. package/src/lib/shared/components/fields/date/date-range/date-range.component.ts +0 -133
  157. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.html +0 -31
  158. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.scss +0 -3
  159. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.spec.ts +0 -21
  160. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.ts +0 -148
  161. package/src/lib/shared/components/fields/input/input-password/input-password.component.html +0 -18
  162. package/src/lib/shared/components/fields/input/input-password/input-password.component.scss +0 -0
  163. package/src/lib/shared/components/fields/input/input-password/input-password.component.spec.ts +0 -21
  164. package/src/lib/shared/components/fields/input/input-password/input-password.component.ts +0 -56
  165. package/src/lib/shared/components/fields/input/input-text/input-text.component.html +0 -73
  166. package/src/lib/shared/components/fields/input/input-text/input-text.component.scss +0 -0
  167. package/src/lib/shared/components/fields/input/input-text/input-text.component.spec.ts +0 -21
  168. package/src/lib/shared/components/fields/input/input-text/input-text.component.ts +0 -98
  169. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.html +0 -73
  170. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.scss +0 -21
  171. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.spec.ts +0 -21
  172. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.ts +0 -212
  173. package/src/lib/shared/components/fields/select/single-select/single-select.component.html +0 -55
  174. package/src/lib/shared/components/fields/select/single-select/single-select.component.scss +0 -1
  175. package/src/lib/shared/components/fields/select/single-select/single-select.component.spec.ts +0 -21
  176. package/src/lib/shared/components/fields/select/single-select/single-select.component.ts +0 -217
  177. package/src/lib/shared/components/fields/select/single-select/sl.component.old.txt +0 -337
  178. package/src/lib/shared/components/fields/select/single-select/sl.component.old2.txt +0 -340
  179. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.html +0 -38
  180. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.scss +0 -1
  181. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.spec.ts +0 -21
  182. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.ts +0 -401
  183. package/src/lib/shared/components/fields/textarea/textarea.component.html +0 -29
  184. package/src/lib/shared/components/fields/textarea/textarea.component.scss +0 -17
  185. package/src/lib/shared/components/fields/textarea/textarea.component.spec.ts +0 -21
  186. package/src/lib/shared/components/fields/textarea/textarea.component.ts +0 -76
  187. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.html +0 -30
  188. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.scss +0 -22
  189. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.spec.ts +0 -22
  190. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.ts +0 -217
  191. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.html +0 -101
  192. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.scss +0 -117
  193. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.spec.ts +0 -22
  194. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.ts +0 -480
  195. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.html +0 -82
  196. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.less +0 -80
  197. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.spec.ts +0 -22
  198. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.ts +0 -288
  199. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.html +0 -104
  200. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.scss +0 -37
  201. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.spec.ts +0 -21
  202. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.ts +0 -317
  203. package/src/lib/shared/config/dynamic-form.config.ts +0 -11
  204. package/src/lib/shared/consts/common/common.const.ts +0 -5
  205. package/src/lib/shared/consts/common/field-dependency.const.ts +0 -1
  206. package/src/lib/shared/consts/common/file.const.ts +0 -130
  207. package/src/lib/shared/consts/common/sample-test.const.ts +0 -1648
  208. package/src/lib/shared/consts/common/standalone-import.const.ts +0 -51
  209. package/src/lib/shared/consts/controls/control.const.ts +0 -11
  210. package/src/lib/shared/consts/fields/date-field.const.ts +0 -12
  211. package/src/lib/shared/consts/fields/field.const.ts +0 -23
  212. package/src/lib/shared/consts/fields/input-field.const.ts +0 -4
  213. package/src/lib/shared/consts/fields/input-formatted-field.const.ts +0 -35
  214. package/src/lib/shared/consts/fields/radio-field.const.ts +0 -31
  215. package/src/lib/shared/consts/fields/select-field.const.ts +0 -7
  216. package/src/lib/shared/consts/fields/upload-field.const.ts +0 -1
  217. package/src/lib/shared/consts/validators/index.ts +0 -0
  218. package/src/lib/shared/consts/validators/pattern.const.ts +0 -117
  219. package/src/lib/shared/enums/common/component-ui.enum.ts +0 -8
  220. package/src/lib/shared/enums/common/field-dependency.enum.ts +0 -10
  221. package/src/lib/shared/enums/common/file-size-type.enum.ts +0 -6
  222. package/src/lib/shared/enums/common/output-value-type.enum.ts +0 -22
  223. package/src/lib/shared/enums/common/view-mode.enum.ts +0 -4
  224. package/src/lib/shared/enums/controls/control.enum.ts +0 -12
  225. package/src/lib/shared/enums/fields/date-field.enum.ts +0 -4
  226. package/src/lib/shared/enums/fields/field.enum.ts +0 -21
  227. package/src/lib/shared/enums/fields/input-field.enum.ts +0 -6
  228. package/src/lib/shared/enums/fields/input-formatted-field.enum.ts +0 -6
  229. package/src/lib/shared/enums/fields/select-field.enum.ts +0 -4
  230. package/src/lib/shared/enums/fields/upload-field.enum.ts +0 -5
  231. package/src/lib/shared/enums/form/dynamic-form.enum.ts +0 -6
  232. package/src/lib/shared/enums/validators/regex.enum.ts +0 -47
  233. package/src/lib/shared/enums/validators/validators.enum.ts +0 -17
  234. package/src/lib/shared/factories/auto-numeric-options.factory.ts +0 -14
  235. package/src/lib/shared/models/common/api-config.model.ts +0 -7
  236. package/src/lib/shared/models/common/api-response.model.ts +0 -20
  237. package/src/lib/shared/models/common/common.model.ts +0 -39
  238. package/src/lib/shared/models/common/field-dependency.model.ts +0 -27
  239. package/src/lib/shared/models/common/file-config.model.ts +0 -22
  240. package/src/lib/shared/models/common/obj-field.model.ts +0 -68
  241. package/src/lib/shared/models/common/object-storage.model.ts +0 -15
  242. package/src/lib/shared/models/common/table-models.ts +0 -16
  243. package/src/lib/shared/models/fields/date/base-date-field.model.ts +0 -52
  244. package/src/lib/shared/models/fields/date/date-picker-field.model.ts +0 -43
  245. package/src/lib/shared/models/fields/date/date-range-field.model.ts +0 -52
  246. package/src/lib/shared/models/fields/field-grid.model.ts +0 -10
  247. package/src/lib/shared/models/fields/field-group.model.ts +0 -50
  248. package/src/lib/shared/models/fields/field-user-config.model.ts +0 -8
  249. package/src/lib/shared/models/fields/field.model.ts +0 -184
  250. package/src/lib/shared/models/fields/input/input-field.model.ts +0 -111
  251. package/src/lib/shared/models/fields/input/input-formatted-field.model.ts +0 -38
  252. package/src/lib/shared/models/fields/input/input-password-field.model.ts +0 -38
  253. package/src/lib/shared/models/fields/input/input-text-field.model.ts +0 -26
  254. package/src/lib/shared/models/fields/radio/index.ts +0 -0
  255. package/src/lib/shared/models/fields/radio/radio-base-field.model.ts +0 -84
  256. package/src/lib/shared/models/fields/select/index.ts +0 -0
  257. package/src/lib/shared/models/fields/select/multi-select-field.model.ts +0 -46
  258. package/src/lib/shared/models/fields/select/select-base-field.model.ts +0 -125
  259. package/src/lib/shared/models/fields/select/single-select-field.model.ts +0 -43
  260. package/src/lib/shared/models/fields/select/tree-select-field.model.ts +0 -44
  261. package/src/lib/shared/models/fields/textarea/index.ts +0 -0
  262. package/src/lib/shared/models/fields/textarea/textarea-field.model.ts +0 -97
  263. package/src/lib/shared/models/fields/upload/avatar-upload-field.model.ts +0 -33
  264. package/src/lib/shared/models/fields/upload/base-upload-field.model.ts +0 -105
  265. package/src/lib/shared/models/fields/upload/multi-file-upload-field.model.ts +0 -34
  266. package/src/lib/shared/models/fields/upload/multi-image-upload-field.model.ts +0 -42
  267. package/src/lib/shared/models/fields/upload/single-file-upload-field.model.ts +0 -33
  268. package/src/lib/shared/models/validations/index.ts +0 -1
  269. package/src/lib/shared/models/validations/validations.model.ts +0 -14
  270. package/src/lib/shared/services/dynamic-form.service.spec.ts +0 -16
  271. package/src/lib/shared/services/dynamic-form.service.ts +0 -251
  272. package/src/lib/shared/services/field.service.spec.ts +0 -16
  273. package/src/lib/shared/services/field.service.ts +0 -152
  274. package/src/lib/shared/services/file.service.spec.ts +0 -16
  275. package/src/lib/shared/services/file.service.ts +0 -53
  276. package/src/lib/shared/services/form-config.service.ts +0 -53
  277. package/src/lib/shared/services/form-data.service.spec.ts +0 -16
  278. package/src/lib/shared/services/form-data.service.ts +0 -114
  279. package/src/lib/shared/services/form-utils.ts +0 -52
  280. package/src/lib/shared/services/suffix.service.spec.ts +0 -16
  281. package/src/lib/shared/services/suffix.service.ts +0 -16
  282. package/src/lib/shared/services/validation.service.spec.ts +0 -16
  283. package/src/lib/shared/services/validation.service.ts +0 -38
  284. package/src/lib/shared/utils/common/common.utils.ts +0 -52
  285. package/src/lib/shared/utils/date/date.utils.ts +0 -129
  286. package/src/lib/shared/utils/dynamic-field/dynamic-field.ts +0 -0
  287. package/src/lib/shared/utils/dynamic-field/index.ts +0 -0
  288. package/src/lib/shared/utils/dynamic-form/dynamic-form.ts +0 -114
  289. package/src/lib/shared/utils/dynamic-form/index.ts +0 -0
  290. package/src/lib/shared/utils/fields/fields.ts +0 -78
  291. package/src/lib/shared/utils/file/file.utils.ts +0 -37
  292. package/src/lib/shared/utils/validators/custom-validators.ts +0 -158
  293. package/src/lib/shared/utils/validators/default-error-message.ts +0 -42
  294. package/src/lib/shared/utils/validators/pattern.ts +0 -26
  295. package/tsconfig.lib.json +0 -15
  296. package/tsconfig.lib.prod.json +0 -11
  297. package/tsconfig.spec.json +0 -15
  298. /package/{src/lib/shared/styles → styles}/_common-form.scss +0 -0
@@ -1,38 +0,0 @@
1
- <div class="d-flex">
2
- @if (modeSignal() === formModeEnum.View) {
3
- @if (viewMode() === viewModeEnum.form) {
4
- <input nz-input [value]="displayValue" class="modeView" />
5
- }
6
- @if (viewMode() === viewModeEnum.text) {
7
- <span class="modeView break-work">{{ displayValue }}</span>
8
- }
9
- } @else {
10
- <nz-tree-select
11
- [nzId]="fieldKey()"
12
- nzShowSearch
13
- nzAllowClear
14
- [nzDisabled]="isDisabled"
15
- [nzPlaceHolder]="displayPlaceholder()"
16
- [title]="field().tooltip || ''"
17
- [nzDropdownMatchSelectWidth]="field().matchSelectWidth"
18
- [ngModel]="value"
19
- [nzNodes]="options"
20
- class="flex-1 min-w-0"
21
- (ngModelChange)="handleChangeOptions($event)"
22
- >
23
- </nz-tree-select>
24
-
25
- <ng-template #loadingIcon>
26
- <nz-spin nzSimple [nzSize]="'small'"></nz-spin>
27
- </ng-template>
28
- }
29
-
30
- <!-- Suffixes -->
31
- @if (field().suffixes.length > 0) {
32
- @for (suffix of field().suffixes; track $index) {
33
- @if (suffix.visibleOn?.includes(this.modeSignal())) {
34
- <app-suffix [suffixConfig]="suffix" [formId]="formId"> </app-suffix>
35
- }
36
- }
37
- }
38
- </div>
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { TreeSelectComponent } from './tree-select.component';
4
-
5
- describe('TreeSelectComponent', () => {
6
- let component: TreeSelectComponent;
7
- let fixture: ComponentFixture<TreeSelectComponent>;
8
-
9
- beforeEach(() => {
10
- TestBed.configureTestingModule({
11
- imports: [TreeSelectComponent],
12
- });
13
- fixture = TestBed.createComponent(TreeSelectComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,401 +0,0 @@
1
- import {
2
- Component,
3
- computed,
4
- effect,
5
- forwardRef,
6
- Input,
7
- signal,
8
- untracked,
9
- } from "@angular/core";
10
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
11
- import { BaseValueAccessor } from "../../../../base/base-value-accessor";
12
- import { TreeSelectField } from "../../../../models/fields/select/tree-select-field.model";
13
- import {
14
- createSelectPlaceholder,
15
- createSingleSelectPlaceholder,
16
- } from "../../../../utils/dynamic-form/dynamic-form";
17
- import { FORM_MODULES } from "../../../../consts/common/standalone-import.const";
18
- import { NO_INFO_TEXT } from "../../../../consts/common/common.const";
19
- import { SelectOutputValueTypeEnum } from "../../../../enums/common";
20
- import { ApiResponse } from "../../../../models/common/api-response.model";
21
- import { FieldTypeEnum } from "../../../../enums/fields";
22
- import { ControlTypeEnum } from "../../../../enums/controls";
23
- import { SuffixComponent } from "../../components/suffix/suffix.component";
24
- import { NzTreeSelectModule } from "ng-zorro-antd/tree-select";
25
- import { NzSpinModule } from "ng-zorro-antd/spin";
26
- import { NzInputModule } from "ng-zorro-antd/input";
27
-
28
- const ZORRO_MODULES = [NzTreeSelectModule, NzSpinModule, NzInputModule];
29
- const COMPONENTS = [SuffixComponent];
30
-
31
- interface FlatItem {
32
- code: string;
33
- name: string;
34
- [key: string]: any;
35
- }
36
-
37
- interface TreeNode {
38
- key: any;
39
- title: string;
40
- children?: TreeNode[];
41
- selectable?: boolean;
42
- isLeaf?: boolean;
43
- [key: string]: any;
44
- }
45
-
46
- @Component({
47
- selector: "app-tree-select",
48
- standalone: true,
49
- imports: [...FORM_MODULES, ...ZORRO_MODULES, ...COMPONENTS],
50
- templateUrl: "./tree-select.component.html",
51
- styleUrls: ["./tree-select.component.scss"],
52
- providers: [
53
- {
54
- provide: NG_VALUE_ACCESSOR,
55
- useExisting: forwardRef(() => TreeSelectComponent),
56
- multi: true,
57
- },
58
- ],
59
- })
60
- export class TreeSelectComponent extends BaseValueAccessor<
61
- string | Record<string, unknown>
62
- > {
63
- @Input() isCustomInputText!: boolean;
64
- readonly field = computed(() => {
65
- const base = this.fieldInput();
66
- if (
67
- !(base instanceof TreeSelectField) ||
68
- (base.type !== FieldTypeEnum.TreeSelect &&
69
- base.controlType !== ControlTypeEnum.Select)
70
- ) {
71
- throw new Error("Expected TreeSelectField");
72
- }
73
- return base;
74
- });
75
-
76
- // Giá trị dùng hiển thị ở chế độ View.
77
- displayValue: string | number = "";
78
-
79
- loadingSignal = signal(false);
80
- isDisabledSignal = signal(false);
81
- disabled = computed(() => this.loadingSignal() || this.isDisabledSignal());
82
-
83
- options: any[] = [];
84
- queryParams: Record<string, unknown> = {};
85
-
86
- constructor() {
87
- super();
88
-
89
- // 1. Effect chung Add + Edit
90
- effect(() => {
91
- if (this.isAddOrEdit()) {
92
- const field = untracked(() => this.field());
93
- const { placeholder } = field;
94
-
95
- if (!placeholder) field.placeholder = createSelectPlaceholder(field);
96
- }
97
- });
98
-
99
- // Trigger reset từ bên ngoài form.
100
- effect(() => {
101
- const reset = this.dFormService.resetTrigger();
102
- if (reset?.formId === this.formId) {
103
- this.reset();
104
- }
105
- });
106
-
107
- effect(() => {
108
- if (untracked(() => this.isView())) return;
109
-
110
- const { key, dependsOn, isParent, dependType } = untracked(() =>
111
- this.field(),
112
- );
113
-
114
- // Không dính dáng gì đến isParent và dependsOn.
115
- if (!isParent && dependsOn!.length === 0) {
116
- this.getOptions();
117
- return;
118
- }
119
-
120
- const dependValuesMap = this.fieldService.getDependValuesMap();
121
-
122
- const dependValues = dependsOn?.map((depend) => {
123
- const dependFunc = dependValuesMap.get(depend.fieldKey);
124
- const value =
125
- typeof dependFunc === "function" ? dependFunc() : dependFunc;
126
- return [depend.paramKey, value];
127
- });
128
-
129
- // console.log(`${key} dependValue`, dependValues);
130
-
131
- const params = Object.fromEntries(dependValues as any);
132
-
133
- this.queryParams = {
134
- ...this.queryParams,
135
- ...params,
136
- };
137
-
138
- // console.log(`${key} queryParams`, this.queryParams);
139
-
140
- // Nếu tất cả các phụ thuộc có value thì mới gọi API.
141
- const allDependHasValues = dependValues?.every(
142
- ([fieldKey, value]) => value,
143
- );
144
- // console.log(`${key} allDependHasValues`, allDependHasValues);
145
-
146
- if (allDependHasValues) {
147
- // this.isDisabledSignal.set(false);
148
- this.control?.enable();
149
- this.getOptions();
150
- } else {
151
- // Ngược lại reset và disabled.
152
- this.control?.reset();
153
- // this.isDisabledSignal.set(true);
154
- this.control?.disable();
155
- }
156
- });
157
- }
158
-
159
- // Xử lý tạo placeholder text tự động nếu chưa truyền placeholder vào config của field
160
- override resolvePlaceholderText(): string {
161
- return createSingleSelectPlaceholder(this.field());
162
- }
163
-
164
- // Chạy khi value form được gán bởi các hàm reset, patchValue, setValue.
165
- protected override writeValueToView(value: string | null): void {
166
- if (this.isView()) {
167
- this.displayValue = this.getDisplayValue(
168
- this.field().modelValue as string | Record<string, unknown>,
169
- );
170
- return;
171
- }
172
-
173
- if (!this.isAddOrEdit()) return;
174
-
175
- this.fieldService.updateDependValuesMap(this.fieldKey(), value ?? "");
176
- // const signal = untracked(() => this.fieldService.getDependValuesMap().get(this.fieldKey()))
177
- // console.log("DependValuesMap SET", untracked(() => signal!()));
178
-
179
- // Gán data vào đầu ra của form.
180
- const newOutputValue = value && this.getValueByOutputAs(value);
181
- this.patchFormData(this.fieldKey(), newOutputValue);
182
- }
183
-
184
- // Xử lý phụ thuộc khi change value
185
- protected override handleValueChange(value: string): void {
186
- const { isParent } = this.field();
187
- if (isParent) {
188
- this.fieldService.updateDependValuesMap(this.fieldKey(), value);
189
- // const signal = untracked(() => this.fieldService.getDependValuesMap().get(this.fieldKey()))
190
- // console.log("DependValuesMap UI", untracked(() => signal!()));
191
- }
192
-
193
- // Gán data vào đầu ra của form.
194
- const newOutputValue = value && this.getValueByOutputAs(value);
195
- this.patchFormData(this.fieldKey(), newOutputValue);
196
- }
197
-
198
- private createFullApiUrl(): string {
199
- const field = untracked(() => this.field());
200
- let fullApiUrl = field?.apiConfig?.baseUrl || "";
201
- const params = field?.apiConfig?.params || {};
202
- this.queryParams = {
203
- ...this.queryParams,
204
- ...params,
205
- };
206
- return fullApiUrl;
207
- }
208
-
209
- private buildTree(items: FlatItem[], groupBy?: string): any[] {
210
- if (!groupBy) return items;
211
- const map = new Map<string, TreeNode>();
212
- const roots: TreeNode[] = [];
213
-
214
- // Step 1: Transform & store in map
215
- for (const item of items) {
216
- map.set(item.code, {
217
- key: this.transformOptionValue(item),
218
- title: this.getOptionLabel(item),
219
- parentCode: item[groupBy],
220
- isLeaf: true,
221
- });
222
- }
223
-
224
- // Step 2: Build parent-child relation
225
- for (const node of map.values()) {
226
- if (node["parentCode"]) {
227
- const parent = map.get(node["parentCode"]);
228
- if (parent) {
229
- if (!parent.children) parent.children = [];
230
- parent.children.push(node);
231
- parent.isLeaf = false;
232
- } else {
233
- roots.push(node);
234
- }
235
- } else {
236
- roots.push(node);
237
- }
238
- }
239
-
240
- return roots;
241
- }
242
-
243
- // Lấy danh sách options từ GET api.
244
- private getOptions(): void {
245
- const field = untracked(() => this.field());
246
- const { optionsToPrepend, optionsToAppend, exceptOptions } = field;
247
- const fullApiUrl = this.createFullApiUrl();
248
-
249
- if (!fullApiUrl) {
250
- const options = [
251
- ...optionsToPrepend,
252
- ...field.options,
253
- ...optionsToAppend,
254
- ].filter(
255
- (options) =>
256
- !exceptOptions.some(
257
- (opts) => opts[field.bindValue] === options[field.bindValue],
258
- ),
259
- ) as any;
260
- this.options = this.buildTree(options, field.groupBy);
261
- return;
262
- }
263
-
264
- this.loadingSignal.set(true);
265
- this.control?.disable();
266
- this.fieldService
267
- .getAllOptions(fullApiUrl, this.queryParams)
268
- .pipe(this.takeUntilDestroy())
269
- .subscribe({
270
- next: (res: ApiResponse<Record<string, unknown>[]>) => {
271
- this.loadingSignal.set(false);
272
- if (!this.field().isDisabled) this.control?.enable();
273
-
274
- if (res?.code === 0) {
275
- const options = [
276
- ...optionsToPrepend,
277
- ...(res?.data ?? []),
278
- ...optionsToAppend,
279
- ].filter(
280
- (options) =>
281
- !exceptOptions.some(
282
- (opts) => opts[field.bindValue] === options[field.bindValue],
283
- ),
284
- ) as any;
285
- this.options = this.buildTree(options, field.groupBy);
286
-
287
- // Nếu outputAs là dạng sourceObject đồng bộ sau khi load xong list.
288
- if (field.outputAs === SelectOutputValueTypeEnum.SourceObject) {
289
- const newOutputValue = this.options.find(
290
- (option) => option.key === this.value,
291
- ) ?? {
292
- [field.bindValue]: this.value,
293
- };
294
- this.patchFormData(this.fieldKey(), newOutputValue);
295
- }
296
- }
297
- },
298
- error: (error: Error) => {
299
- this.loadingSignal.set(false);
300
- if (!this.field().isDisabled) this.control?.enable();
301
- },
302
- });
303
- }
304
-
305
- handleChangeOptions(optionValue: string): void {
306
- const { enableFieldChange, bindValue } = untracked(() => this.field());
307
-
308
- if (enableFieldChange) {
309
- const option = this.options.find(
310
- (option) => option[bindValue] === optionValue,
311
- );
312
- this.fieldService.onFieldChange(this.fieldKey(), option);
313
- }
314
-
315
- this.propagateValue(optionValue);
316
- }
317
-
318
- // Xử lý output value đầu ra theo outputAs mà người dùng mong muốn.
319
- private getValueByOutputAs(
320
- singleValue: string,
321
- ): string | Record<string, unknown> {
322
- const field = this.field();
323
-
324
- if (singleValue) {
325
- // Nếu outputAs là dạng single.
326
- let value: string | Record<string, unknown> = singleValue;
327
-
328
- // Nếu outputAs là dạng object.
329
- if (field.outputAs === SelectOutputValueTypeEnum.Object) {
330
- value = {
331
- [field.bindValue]: singleValue,
332
- };
333
- }
334
-
335
- // Nếu outputAs là dạng sourceObject.
336
- if (field.outputAs === SelectOutputValueTypeEnum.SourceObject) {
337
- value = this.options.find(
338
- (option) => option[field.bindValue] === singleValue,
339
- ) ?? {
340
- [field.bindValue]: singleValue,
341
- };
342
- }
343
-
344
- return value;
345
- }
346
- return singleValue;
347
- }
348
-
349
- // Làm phẳng giá trị để hiện thị ở chế độ View.
350
- protected getDisplayValue(value: string | Record<string, unknown>): string {
351
- if (!value) return NO_INFO_TEXT;
352
-
353
- if (typeof value === "object") {
354
- return this.getCustomLabel(value);
355
- }
356
- return value as string;
357
- }
358
-
359
- // Lấy value ở option tag.
360
- protected transformOptionValue(option: Record<string, unknown>): unknown {
361
- const field = this.field()!;
362
-
363
- let optionValue: unknown;
364
-
365
- optionValue = option[field.bindValue];
366
-
367
- return optionValue;
368
- }
369
-
370
- // Lấy label.
371
- protected getOptionLabel(option: Record<string, unknown>): string {
372
- return this.getCustomLabel(option);
373
- }
374
-
375
- // Biến đổi label nếu có thuộc tính hàm biến đổi transformLabel.
376
- private getCustomLabel(option: Record<string, unknown>): string {
377
- const field = this.field();
378
-
379
- if (
380
- typeof option[field.bindLabel] === "function" ||
381
- !option[field.bindLabel]
382
- ) {
383
- let warnMessage =
384
- "Giá trị label lấy theo bindLabel hiện đang là dạng object, array hoặc các dạng còn lại của complex data";
385
- if (!option[field.bindLabel])
386
- warnMessage = "Không tồn tại giá trị label khi lấy theo bindLabel";
387
- // console.warn(warnMessage);
388
-
389
- return NO_INFO_TEXT;
390
- }
391
-
392
- let optionLabel = option[field.bindLabel] as string;
393
-
394
- if (field.transformLabel) {
395
- const tranformLabelValue = field.transformLabel(option);
396
- if (tranformLabelValue) optionLabel = tranformLabelValue;
397
- }
398
-
399
- return optionLabel;
400
- }
401
- }
@@ -1,29 +0,0 @@
1
- @if (modeSignal() === formModeEnum.View) {
2
- @if (viewMode() === viewModeEnum.form) {
3
- @if (viewDisplayValue(); as displayValue) {
4
- <p
5
- [innerHTML]="displayValue"
6
- class="disabled-textarea break-work mb0"
7
- ></p>
8
- } @else {
9
- <input nz-input [value]="displayNoValueText" class="modeView" />
10
- }
11
- }
12
- @if (viewMode() === viewModeEnum.text) {
13
- @if (viewDisplayValue(); as displayValue) {
14
- <p [innerHTML]="displayValue" class="mode-view mb-0 break-work mb0"></p>
15
- } @else {
16
- <span class="modeView">{{ displayNoValueText }}</span>
17
- }
18
- }
19
- } @else {
20
- <textarea
21
- nz-input
22
- [nzAutosize]="{ minRows: 1, maxRows: 8 }"
23
- [value]="value"
24
- [disabled]="isDisabled"
25
- [placeholder]="displayPlaceholder()"
26
- (input)="handleChangeTextarea($event)"
27
- >
28
- </textarea>
29
- }
@@ -1,17 +0,0 @@
1
- // @use "../../../styles/common-form" as *;
2
-
3
- .disabled-textarea {
4
- padding: 4px 8px;
5
- // // background-color: #f5f5f5;
6
- border: 1px solid #cbd5e1;
7
- // border-radius: 4px;
8
- color: #575757 !important;
9
- cursor: not-allowed;
10
- pointer-events: none;
11
- // font-size: 12px;
12
- }
13
- .mode-view {
14
- pointer-events: none;
15
- color: #575757;
16
- font-size: 12px;
17
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { TextareaComponent } from './textarea.component';
4
-
5
- describe('TextareaComponent', () => {
6
- let component: TextareaComponent;
7
- let fixture: ComponentFixture<TextareaComponent>;
8
-
9
- beforeEach(() => {
10
- TestBed.configureTestingModule({
11
- imports: [TextareaComponent],
12
- });
13
- fixture = TestBed.createComponent(TextareaComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,76 +0,0 @@
1
- import { Component, computed, effect, forwardRef } from "@angular/core";
2
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
- import { BaseValueAccessor } from "../../../base/base-value-accessor";
4
- import { TextareaField } from "../../../models/fields/textarea/textarea-field.model";
5
- import { createInputPlaceholder } from "../../../utils/dynamic-form/dynamic-form";
6
- import { NO_INFO_TEXT } from "../../../consts/common/common.const";
7
- import { FieldTypeEnum } from "../../../enums/fields";
8
- import { NzInputModule } from "ng-zorro-antd/input";
9
-
10
- const ZORRO_MODULES = [NzInputModule];
11
-
12
- @Component({
13
- selector: "app-textarea",
14
- standalone: true,
15
- imports: [...ZORRO_MODULES],
16
- templateUrl: "./textarea.component.html",
17
- styleUrls: ["./textarea.component.scss"],
18
- providers: [
19
- {
20
- provide: NG_VALUE_ACCESSOR,
21
- useExisting: forwardRef(() => TextareaComponent),
22
- multi: true,
23
- },
24
- ],
25
- })
26
- export class TextareaComponent extends BaseValueAccessor<string> {
27
- readonly field = computed(() => {
28
- const base = this.fieldInput();
29
- if (
30
- !(base instanceof TextareaField) ||
31
- base.type !== FieldTypeEnum.Textarea
32
- ) {
33
- throw new Error("Expected TextareaField");
34
- }
35
- return base;
36
- });
37
-
38
- displayNoValueText = NO_INFO_TEXT;
39
-
40
- readonly viewDisplayValue = computed(() => {
41
- // 1. Nếu không phải View thì không cần quan tâm text này
42
- if (!this.isView()) return "";
43
-
44
- // 2. Lấy giá trị từ valueSignal
45
- const val = this.valueSignal();
46
- return val ? val : NO_INFO_TEXT;
47
- });
48
-
49
- constructor() {
50
- super();
51
- }
52
-
53
- // Xử lý tạo placeholder text tự động nếu chưa truyền placeholder vào config của field
54
- override resolvePlaceholderText(): string {
55
- return createInputPlaceholder(this.field());
56
- }
57
-
58
- handleChangeTextarea(event: Event): void {
59
- const textareaValue = (event.target as HTMLInputElement).value;
60
- this.propagateValue(textareaValue);
61
-
62
- // Gán data vào đầu ra của form.
63
- this.patchFormData(
64
- this.fieldKey(),
65
- textareaValue &&
66
- textareaValue.replace(/\n+/g, "br_enter").replace(/br_enter+/g, "\n"),
67
- );
68
- }
69
-
70
- protected override writeValueToView(value: string): void {
71
- if (!this.isAddOrEdit()) return;
72
-
73
- // Gán data vào đầu ra của form.
74
- this.patchFormData(this.fieldKey(), value);
75
- }
76
- }
@@ -1,30 +0,0 @@
1
- <nz-upload
2
- [nzDisabled]="disabledSignal() || isView()"
3
- [nzShowUploadList]="false"
4
- [nzMultiple]="false"
5
- [nzBeforeUpload]="beforeUpload"
6
- [nzCustomRequest]="customRequest"
7
- >
8
- <ng-container *ngTemplateOutlet="renderAvatarTpl"></ng-container>
9
- </nz-upload>
10
-
11
- <!-- Template custom hiển thị avatar -->
12
- <ng-template #renderAvatarTpl>
13
- <div
14
- class="avatar-wrapper"
15
- [ngStyle]="{ width: size + 'px', height: size + 'px' }"
16
- >
17
- @if (uploading()) {
18
- <span
19
- nz-icon
20
- nzType="loading"
21
- nzTheme="outline"
22
- class="upload-icon"
23
- ></span>
24
- } @else if (!avatarUrl() && isAddOrEdit()) {
25
- <span nz-icon nzType="plus" nzTheme="outline" class="upload-icon"></span>
26
- } @else if (avatarUrl()) {
27
- <img [src]="avatarUrl()" alt="" class="avatar-img" />
28
- }
29
- </div>
30
- </ng-template>
@@ -1,22 +0,0 @@
1
- // Add or edit.
2
- .avatar-wrapper {
3
- display: flex;
4
- align-items: center;
5
- justify-content: center;
6
- border: 1px dashed #d9d9d9;
7
- border-radius: 8px;
8
- background-color: #fafafa;
9
- cursor: pointer;
10
- overflow: hidden;
11
-
12
- .upload-icon {
13
- font-size: 24px;
14
- color: #999;
15
- }
16
-
17
- .avatar-img {
18
- width: 100%;
19
- height: 100%;
20
- object-fit: cover;
21
- }
22
- }
@@ -1,22 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { AvatarUploadComponent } from './avatar-upload.component';
4
-
5
- describe('AvatarUploadComponent', () => {
6
- let component: AvatarUploadComponent;
7
- let fixture: ComponentFixture<AvatarUploadComponent>;
8
-
9
- beforeEach(async () => {
10
- await TestBed.configureTestingModule({
11
- imports: [AvatarUploadComponent],
12
- }).compileComponents();
13
-
14
- fixture = TestBed.createComponent(AvatarUploadComponent);
15
- component = fixture.componentInstance;
16
- fixture.detectChanges();
17
- });
18
-
19
- it('should create', () => {
20
- expect(component).toBeTruthy();
21
- });
22
- });