@seniorsistemas/angular-components 19.9.15 → 19.10.0-develop-ef29acb7

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 (505) hide show
  1. package/README.md +84 -2
  2. package/accordion/README.md +5 -4
  3. package/accordion/lib/accordion/accordion.module.d.ts +7 -0
  4. package/alert/lib/alert/alert.module.d.ts +7 -0
  5. package/badge/README.md +5 -4
  6. package/badge/lib/badge/badge.module.d.ts +10 -0
  7. package/bignumber-input/README.md +5 -4
  8. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +16 -39
  9. package/bignumber-input/lib/bignumber-input/bignumber-input.module.d.ts +7 -0
  10. package/breadcrumb/README.md +5 -4
  11. package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.d.ts +5 -1
  12. package/button/lib/button/button.module.d.ts +7 -0
  13. package/calendar-mask/README.md +5 -4
  14. package/calendar-mask/lib/calendar-mask/calendar-mask.module.d.ts +7 -0
  15. package/card/README.md +6 -5
  16. package/card/lib/card/card.module.d.ts +7 -0
  17. package/chat/README.md +11 -8
  18. package/chat/lib/chat/chat.module.d.ts +7 -0
  19. package/checkbox-list/README.md +5 -4
  20. package/checkbox-list/lib/checkbox-list/checkbox-list.module.d.ts +7 -0
  21. package/chips/README.md +5 -4
  22. package/chips/lib/chips/chips.module.d.ts +7 -0
  23. package/code-editor/README.md +5 -4
  24. package/code-editor/lib/code-editor/code-editor.module.d.ts +7 -0
  25. package/collapse-link/README.md +5 -4
  26. package/collapse-link/lib/collapse-link/collapse-link.module.d.ts +7 -0
  27. package/common/lib/angular-components.module.d.ts +9 -0
  28. package/common/lib/provide-angular-components.d.ts +19 -0
  29. package/common/lib/svg-factory/svg-factory.module.d.ts +7 -0
  30. package/common/public-api.d.ts +1 -0
  31. package/content-generator/README.md +2 -2
  32. package/content-generator/lib/content-generator/content-generator.module.d.ts +7 -0
  33. package/control-errors/README.md +2 -2
  34. package/control-errors/lib/control-errors/control-errors.module.d.ts +7 -0
  35. package/country-phone-picker/README.md +2 -2
  36. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.d.ts +7 -0
  37. package/currency/README.md +1 -1
  38. package/custom-fields/README.md +14 -3
  39. package/custom-fields/lib/custom-fields/custom-fields.module.d.ts +7 -0
  40. package/custom-fields/lib/custom-fields/models/custom-field-value-parser.d.ts +21 -0
  41. package/custom-fields/lib/custom-fields/models/index.d.ts +1 -0
  42. package/dialog/README.md +1 -1
  43. package/drawer/README.md +8 -4
  44. package/drawer/lib/drawer/drawer.module.d.ts +10 -0
  45. package/dynamic-form/README.md +18 -2
  46. package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +7 -0
  47. package/dynamic-form/dynamic-form/form-field/addon-config.d.ts +10 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -15
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +8 -6
  50. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +5 -2
  51. package/dynamic-form/public-api.d.ts +0 -1
  52. package/editable-overlay/README.md +2 -2
  53. package/editable-overlay/lib/editable-overlay/editable-overlay.module.d.ts +7 -0
  54. package/empty-state/README.md +5 -2
  55. package/empty-state/lib/empty-state/empty-state.module.d.ts +7 -0
  56. package/esm2022/accordion/lib/accordion/accordion.module.mjs +8 -1
  57. package/esm2022/alert/lib/alert/alert.module.mjs +8 -1
  58. package/esm2022/badge/lib/badge/badge.module.mjs +11 -1
  59. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +19 -127
  60. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +8 -1
  61. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.mjs +6 -2
  62. package/esm2022/button/lib/button/button.module.mjs +8 -1
  63. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +8 -1
  64. package/esm2022/card/lib/card/card.module.mjs +8 -1
  65. package/esm2022/chat/lib/chat/chat.module.mjs +8 -1
  66. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +8 -1
  67. package/esm2022/chips/lib/chips/chips.module.mjs +8 -1
  68. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +10 -1
  69. package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +9 -15
  70. package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +8 -1
  71. package/esm2022/common/lib/angular-components.module.mjs +10 -1
  72. package/esm2022/common/lib/provide-angular-components.mjs +22 -0
  73. package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +8 -1
  74. package/esm2022/common/public-api.mjs +2 -1
  75. package/esm2022/content-generator/lib/content-generator/content-generator.module.mjs +8 -1
  76. package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +8 -1
  77. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +8 -1
  78. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +4 -3
  79. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -13
  80. package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +8 -1
  81. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +4 -3
  82. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +4 -2
  83. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-value-parser.mjs +46 -0
  84. package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +2 -1
  85. package/esm2022/drawer/lib/drawer/drawer.module.mjs +11 -1
  86. package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +8 -1
  87. package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +6 -2
  88. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  89. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  90. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +33 -10
  91. package/esm2022/dynamic-form/public-api.mjs +2 -7
  92. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +8 -1
  93. package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +8 -1
  94. package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +8 -1
  95. package/esm2022/file-picker/lib/file-picker/file-picker.module.mjs +8 -1
  96. package/esm2022/file-picker/lib/file-picker/file-picker.service.mjs +4 -3
  97. package/esm2022/gantt/lib/gantt/gantt.module.mjs +8 -1
  98. package/esm2022/global-search/lib/global-search/global-search.module.mjs +19 -1
  99. package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +8 -1
  100. package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +8 -1
  101. package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +12 -1
  102. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +4 -3
  103. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +8 -1
  104. package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +8 -1
  105. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +5 -5
  106. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +8 -1
  107. package/esm2022/input-group/lib/input-group/input-group.module.mjs +8 -1
  108. package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +8 -1
  109. package/esm2022/input-text/lib/input-text/input-text.module.mjs +8 -1
  110. package/esm2022/insights/lib/insights/insights.module.mjs +11 -1
  111. package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +4 -3
  112. package/esm2022/kanban/lib/kanban/kanban.module.mjs +11 -1
  113. package/esm2022/label-value/lib/label-value/label-value.module.mjs +8 -1
  114. package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +8 -1
  115. package/esm2022/locale/lib/locale/locale.module.mjs +14 -1
  116. package/esm2022/locale/lib/locale/locale.service.mjs +10 -32
  117. package/esm2022/locale/lib/locale/options/index.mjs +1 -13
  118. package/esm2022/locale/lib/locale/options/locale-presets.mjs +199 -0
  119. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
  120. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +10 -2
  121. package/esm2022/locale/lib/locale/provide-locale.mjs +42 -0
  122. package/esm2022/locale/public-api.mjs +3 -1
  123. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +5 -1
  124. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +8 -1
  125. package/esm2022/mask/lib/mask/mask-formatter.module.mjs +8 -1
  126. package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +8 -1
  127. package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +8 -1
  128. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +2 -2
  129. package/esm2022/number-input/lib/number-input/number-input.module.mjs +9 -2
  130. package/esm2022/numeric/lib/numeric.module.mjs +8 -1
  131. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +178 -15
  132. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.module.mjs +8 -1
  133. package/esm2022/object-card/lib/object-card/object-card.module.mjs +12 -1
  134. package/esm2022/panel/lib/panel/panel.module.mjs +11 -1
  135. package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +8 -1
  136. package/esm2022/picklist/lib/picklist/picklist.module.mjs +8 -1
  137. package/esm2022/pin-code-field/lib/pin-code-field.module.mjs +8 -1
  138. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +8 -1
  139. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +8 -1
  140. package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +8 -1
  141. package/esm2022/select/lib/select/select.component.mjs +16 -3
  142. package/esm2022/select-button/lib/select-button/select-button.module.mjs +8 -1
  143. package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +8 -1
  144. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.mjs +8 -1
  145. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.service.mjs +4 -3
  146. package/esm2022/slider/lib/slider/slider.module.mjs +8 -1
  147. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +8 -1
  148. package/esm2022/split-button/lib/split-button/split-button.module.mjs +8 -1
  149. package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +8 -1
  150. package/esm2022/stepper/lib/stepper/stepper.module.mjs +8 -1
  151. package/esm2022/structure/lib/structure/structure.module.mjs +8 -1
  152. package/esm2022/switch/lib/switch/switch.module.mjs +8 -1
  153. package/esm2022/table/lib/table/table.module.mjs +9 -1
  154. package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +8 -1
  155. package/esm2022/template/lib/template/template.module.mjs +8 -1
  156. package/esm2022/text-area/lib/text-area.module.mjs +8 -1
  157. package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +8 -1
  158. package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +8 -1
  159. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +8 -1
  160. package/esm2022/tile/lib/tile/tile.module.mjs +11 -1
  161. package/esm2022/timeline/lib/timeline/timeline.module.mjs +8 -1
  162. package/esm2022/toast/lib/toast/toast.module.mjs +8 -1
  163. package/esm2022/token-list/lib/token-list/token-list.module.mjs +8 -1
  164. package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +8 -1
  165. package/esm2022/topbar/lib/topbar/topbar.module.mjs +11 -1
  166. package/esm2022/tree/lib/tree/tree.module.mjs +8 -1
  167. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +8 -1
  168. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +7 -0
  169. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  170. package/fesm2022/seniorsistemas-angular-components-alert.mjs +7 -0
  171. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  172. package/fesm2022/seniorsistemas-angular-components-badge.mjs +10 -0
  173. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  174. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +25 -126
  175. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  176. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -1
  177. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  178. package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -0
  179. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  180. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -0
  181. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  182. package/fesm2022/seniorsistemas-angular-components-card.mjs +7 -0
  183. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  184. package/fesm2022/seniorsistemas-angular-components-chat.mjs +7 -0
  185. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  186. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -0
  187. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  188. package/fesm2022/seniorsistemas-angular-components-chips.mjs +7 -0
  189. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  190. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +164 -160
  191. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  192. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -0
  193. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  194. package/fesm2022/seniorsistemas-angular-components-common.mjs +38 -2
  195. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  196. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +7 -0
  197. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  198. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -0
  199. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  200. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +10 -2
  201. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  202. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +75 -15
  203. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  204. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +10 -0
  205. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  206. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +52 -208
  207. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  208. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -0
  209. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  210. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +7 -0
  211. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  212. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +7 -0
  213. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  214. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +10 -2
  215. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  216. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +7 -0
  217. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  218. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +18 -0
  219. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  220. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +7 -0
  221. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  222. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +7 -0
  223. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  224. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +14 -2
  225. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  226. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -0
  227. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  228. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +7 -0
  229. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  230. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +11 -4
  231. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  232. package/fesm2022/seniorsistemas-angular-components-input-group.mjs +7 -0
  233. package/fesm2022/seniorsistemas-angular-components-input-group.mjs.map +1 -1
  234. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +7 -0
  235. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -1
  236. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +7 -0
  237. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
  238. package/fesm2022/seniorsistemas-angular-components-insights.mjs +10 -0
  239. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  240. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +13 -2
  241. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  242. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -0
  243. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  244. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -0
  245. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  246. package/fesm2022/seniorsistemas-angular-components-locale.mjs +260 -33
  247. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  248. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +11 -0
  249. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  250. package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -0
  251. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  252. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +7 -0
  253. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  254. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +7 -0
  255. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  256. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +9 -2
  257. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  258. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +184 -14
  259. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  260. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +7 -0
  261. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  262. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +11 -0
  263. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  264. package/fesm2022/seniorsistemas-angular-components-panel.mjs +10 -0
  265. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  266. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +7 -0
  267. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  268. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -0
  269. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  270. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +7 -0
  271. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  272. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -0
  273. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  274. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +7 -0
  275. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  276. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -0
  277. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  278. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +7 -0
  279. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  280. package/fesm2022/seniorsistemas-angular-components-select.mjs +15 -2
  281. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  282. package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -0
  283. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  284. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +10 -2
  285. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  286. package/fesm2022/seniorsistemas-angular-components-slider.mjs +7 -0
  287. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  288. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +7 -0
  289. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  290. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -0
  291. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  292. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -0
  293. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +7 -0
  295. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-structure.mjs +7 -0
  297. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -0
  299. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -0
  301. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-table.mjs +8 -0
  303. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-template.mjs +7 -0
  305. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +7 -0
  307. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +7 -0
  309. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +7 -0
  311. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +7 -0
  313. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-tile.mjs +10 -0
  315. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +7 -0
  317. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-toast.mjs +7 -0
  319. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -0
  321. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +7 -0
  323. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +10 -0
  325. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-tree.mjs +7 -0
  327. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -0
  329. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  330. package/fieldset/README.md +2 -2
  331. package/fieldset/lib/fieldset/fieldset.module.d.ts +7 -0
  332. package/file-picker/README.md +2 -2
  333. package/file-picker/lib/file-picker/file-picker.module.d.ts +7 -0
  334. package/file-upload/README.md +1 -1
  335. package/gantt/README.md +2 -2
  336. package/gantt/lib/gantt/gantt.module.d.ts +7 -0
  337. package/global-search/README.md +5 -2
  338. package/global-search/lib/global-search/global-search.module.d.ts +18 -0
  339. package/grid-menu/README.md +5 -4
  340. package/grid-menu/lib/grid-menu/grid-menu.module.d.ts +7 -0
  341. package/help-popover/README.md +5 -4
  342. package/help-popover/lib/help-popover/help-popover.module.d.ts +7 -0
  343. package/ia-insight/README.md +1 -1
  344. package/image-cropper/README.md +6 -5
  345. package/image-cropper/lib/image-cropper/image-cropper.module.d.ts +11 -0
  346. package/infinite-scroll/README.md +5 -4
  347. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.d.ts +7 -0
  348. package/info-sign/README.md +5 -4
  349. package/info-sign/lib/info-sign/info-sign.module.d.ts +7 -0
  350. package/inline-edit/README.md +5 -4
  351. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +7 -0
  352. package/input-group/lib/input-group/input-group.module.d.ts +7 -0
  353. package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
  354. package/input-text/lib/input-text/input-text.module.d.ts +7 -0
  355. package/insights/README.md +6 -4
  356. package/insights/lib/insights/insights.module.d.ts +10 -0
  357. package/kanban/README.md +6 -4
  358. package/kanban/lib/kanban/kanban.module.d.ts +10 -0
  359. package/label-value/README.md +5 -4
  360. package/label-value/lib/label-value/label-value.module.d.ts +7 -0
  361. package/loading-state/README.md +9 -5
  362. package/loading-state/lib/loading-state/loading-state.module.d.ts +7 -0
  363. package/locale/lib/locale/locale.module.d.ts +13 -0
  364. package/locale/lib/locale/locale.service.d.ts +0 -3
  365. package/locale/lib/locale/options/locale-presets.d.ts +22 -0
  366. package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -2
  367. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +20 -1
  368. package/locale/lib/locale/provide-locale.d.ts +18 -0
  369. package/locale/public-api.d.ts +2 -0
  370. package/localized-number-input/README.md +32 -8
  371. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +4 -0
  372. package/localized-number-input/lib/localized-number-input/localized-number-input.module.d.ts +7 -0
  373. package/mask/lib/mask/mask-formatter.module.d.ts +7 -0
  374. package/mouse-events/README.md +5 -4
  375. package/mouse-events/lib/mouse-events/mouse-events.module.d.ts +7 -0
  376. package/navigation-button/README.md +5 -4
  377. package/navigation-button/lib/navigation-button/navigation-button.module.d.ts +7 -0
  378. package/number-input/lib/number-input/number-input.directive.d.ts +1 -1
  379. package/number-input/lib/number-input/number-input.module.d.ts +8 -1
  380. package/numeric/README.md +6 -5
  381. package/numeric/lib/numeric.module.d.ts +7 -0
  382. package/numeric-mask/README.md +44 -1
  383. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +65 -4
  384. package/numeric-mask/lib/numeric-mask/numeric-mask.module.d.ts +7 -0
  385. package/object-card/README.md +11 -4
  386. package/object-card/lib/object-card/object-card.module.d.ts +11 -0
  387. package/package.json +1 -1
  388. package/panel/README.md +8 -4
  389. package/panel/lib/panel/panel.module.d.ts +10 -0
  390. package/password-strength/README.md +6 -3
  391. package/password-strength/lib/password-strength/password-strength.module.d.ts +7 -0
  392. package/picklist/README.md +8 -5
  393. package/picklist/lib/picklist/picklist.module.d.ts +7 -0
  394. package/pin-code-field/lib/pin-code-field.module.d.ts +7 -0
  395. package/product-header/README.md +2 -2
  396. package/profile-picture-picker/README.md +6 -3
  397. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.d.ts +7 -0
  398. package/progressbar/README.md +6 -3
  399. package/progressbar/lib/progressbar/progressbar.module.d.ts +7 -0
  400. package/rating-scale/README.md +6 -3
  401. package/rating-scale/lib/rating-scale/rating-scale.module.d.ts +7 -0
  402. package/schematics/collection.json +40 -0
  403. package/schematics/migrations/migrate-app-to-standalone/index.d.ts +32 -0
  404. package/schematics/migrations/migrate-app-to-standalone/index.js +98 -0
  405. package/schematics/migrations/migrate-app-to-standalone/index.js.map +1 -0
  406. package/schematics/migrations/migrate-deprecated-apis/index.d.ts +49 -0
  407. package/schematics/migrations/migrate-deprecated-apis/index.js +660 -0
  408. package/schematics/migrations/migrate-deprecated-apis/index.js.map +1 -0
  409. package/schematics/migrations/migrate-deprecated-datepicker/index.d.ts +31 -0
  410. package/schematics/migrations/migrate-deprecated-datepicker/index.js +115 -0
  411. package/schematics/migrations/migrate-deprecated-datepicker/index.js.map +1 -0
  412. package/schematics/migrations/migrate-deprecated-dynamic-form/index.d.ts +52 -0
  413. package/schematics/migrations/migrate-deprecated-dynamic-form/index.js +661 -0
  414. package/schematics/migrations/migrate-deprecated-dynamic-form/index.js.map +1 -0
  415. package/schematics/migrations/migrate-deprecated-imports/index.d.ts +23 -0
  416. package/schematics/migrations/migrate-deprecated-imports/index.js +335 -0
  417. package/schematics/migrations/migrate-deprecated-imports/index.js.map +1 -0
  418. package/schematics/migrations/migrate-deprecated-selectors/index.d.ts +15 -0
  419. package/schematics/migrations/migrate-deprecated-selectors/index.js +76 -0
  420. package/schematics/migrations/migrate-deprecated-selectors/index.js.map +1 -0
  421. package/schematics/migrations/migrate-modules-to-standalone/index.d.ts +51 -0
  422. package/schematics/migrations/migrate-modules-to-standalone/index.js +632 -0
  423. package/schematics/migrations/migrate-modules-to-standalone/index.js.map +1 -0
  424. package/schematics/migrations/migrate-modules-to-standalone/modules-map.json +1656 -0
  425. package/schematics/migrations/migrate-v20/index.d.ts +9 -0
  426. package/schematics/migrations/migrate-v20/index.js +90 -0
  427. package/schematics/migrations/migrate-v20/index.js.map +1 -0
  428. package/schematics/migrations/migrate-v20/items.d.ts +7 -0
  429. package/schematics/migrations/migrate-v20/items.js +54 -0
  430. package/schematics/migrations/migrate-v20/items.js.map +1 -0
  431. package/schematics/migrations/migrate-v20/plan.d.ts +32 -0
  432. package/schematics/migrations/migrate-v20/plan.js +29 -0
  433. package/schematics/migrations/migrate-v20/plan.js.map +1 -0
  434. package/schematics/migrations.json +5 -1
  435. package/schematics/schema/app-standalone.schema.json +21 -0
  436. package/schematics/schema/migrate-v20.schema.json +33 -0
  437. package/schematics/schema/scope.schema.json +17 -0
  438. package/schematics/utils/ast-utils.js +16 -0
  439. package/schematics/utils/ast-utils.js.map +1 -1
  440. package/schematics/utils/eol.d.ts +5 -0
  441. package/schematics/utils/eol.js +17 -0
  442. package/schematics/utils/eol.js.map +1 -0
  443. package/schematics/utils/prompt-utils.d.ts +62 -0
  444. package/schematics/utils/prompt-utils.js +166 -0
  445. package/schematics/utils/prompt-utils.js.map +1 -0
  446. package/schematics/utils/report.d.ts +27 -0
  447. package/schematics/utils/report.js +70 -0
  448. package/schematics/utils/report.js.map +1 -0
  449. package/schematics/utils/scope.d.ts +17 -0
  450. package/schematics/utils/scope.js +55 -0
  451. package/schematics/utils/scope.js.map +1 -0
  452. package/schematics/utils/selection.d.ts +21 -0
  453. package/schematics/utils/selection.js +60 -0
  454. package/schematics/utils/selection.js.map +1 -0
  455. package/schematics/utils/symbol-utils.d.ts +31 -0
  456. package/schematics/utils/symbol-utils.js +202 -0
  457. package/schematics/utils/symbol-utils.js.map +1 -0
  458. package/schematics/utils/template-utils.d.ts +62 -0
  459. package/schematics/utils/template-utils.js +165 -0
  460. package/schematics/utils/template-utils.js.map +1 -0
  461. package/schematics/utils/tsconfig-paths.d.ts +5 -0
  462. package/schematics/utils/tsconfig-paths.js +73 -0
  463. package/schematics/utils/tsconfig-paths.js.map +1 -0
  464. package/select/lib/select/select.component.d.ts +8 -0
  465. package/select-button/README.md +6 -3
  466. package/select-button/lib/select-button/select-button.module.d.ts +7 -0
  467. package/shared/lib/shared/border-button/border-button.module.d.ts +7 -0
  468. package/sidebar/README.md +2 -2
  469. package/slide-in-bar/README.md +5 -5
  470. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.d.ts +7 -0
  471. package/slider/README.md +6 -3
  472. package/slider/lib/slider/slider.module.d.ts +7 -0
  473. package/speech-recognition/README.md +6 -3
  474. package/speech-recognition/lib/speech-recognition/speech-recognition.module.d.ts +7 -0
  475. package/split-button/README.md +6 -3
  476. package/split-button/lib/split-button/split-button.module.d.ts +7 -0
  477. package/stats-card/README.md +6 -3
  478. package/stats-card/lib/stats-card/stats-card.module.d.ts +7 -0
  479. package/stepper/README.md +6 -3
  480. package/stepper/lib/stepper/stepper.module.d.ts +7 -0
  481. package/structure/lib/structure/structure.module.d.ts +7 -0
  482. package/switch/README.md +6 -3
  483. package/switch/lib/switch/switch.module.d.ts +7 -0
  484. package/table/README.md +12 -4
  485. package/table/lib/table/table.module.d.ts +8 -0
  486. package/table-header/lib/table-header/table-header-checkox.module.d.ts +7 -0
  487. package/template/README.md +0 -11
  488. package/template/lib/template/template.module.d.ts +7 -0
  489. package/text-area/lib/text-area.module.d.ts +7 -0
  490. package/text-area-ia/README.md +1 -1
  491. package/thumbnail/lib/thumbnail/thumbnail.module.d.ts +7 -0
  492. package/thumbnails/lib/thumbnails/thumbnails.module.d.ts +7 -0
  493. package/tiered-menu/lib/tiered-menu/tiered-menu.module.d.ts +7 -0
  494. package/tile/lib/tile/tile.module.d.ts +10 -0
  495. package/timeline/lib/timeline/timeline.module.d.ts +7 -0
  496. package/toast/lib/toast/toast.module.d.ts +7 -0
  497. package/token-list/lib/token-list/token-list.module.d.ts +7 -0
  498. package/tooltip/lib/tooltip/tooltip.module.d.ts +7 -0
  499. package/topbar/lib/topbar/topbar.module.d.ts +10 -0
  500. package/tree/lib/tree/tree.module.d.ts +7 -0
  501. package/workspace-switch/lib/workspace-switch/workspace-switch.module.d.ts +7 -0
  502. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +0 -664
  503. package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +0 -29
  504. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +0 -96
  505. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +0 -124
@@ -4,12 +4,12 @@ import { inject, Injectable, Component, Input, NgModule } from '@angular/core';
4
4
  import { ControlContainer, FormGroup, Validators, FormControl, FormArray, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
6
  import { TranslateService } from '@ngx-translate/core';
7
- import BigNumber from 'bignumber.js';
8
7
  import { Subject, of, forkJoin, throwError } from 'rxjs';
9
8
  import { takeUntil, finalize, catchError } from 'rxjs/operators';
10
9
  import { dynamicTypeToDynamicStructure, DynamicFormComponent } from '@seniorsistemas/angular-components/dynamic-form';
11
10
  import { LocaleService } from '@seniorsistemas/angular-components/locale';
12
11
  import moment from 'moment';
12
+ import BigNumber from 'bignumber.js';
13
13
 
14
14
  class CustomFieldsService {
15
15
  http = inject(HttpClient);
@@ -34,10 +34,11 @@ class CustomFieldsService {
34
34
  return this.http.get(permanentUrl, { responseType: 'blob' });
35
35
  }
36
36
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
37
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService });
37
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, providedIn: 'root' });
38
38
  }
39
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, decorators: [{
40
- type: Injectable
40
+ type: Injectable,
41
+ args: [{ providedIn: 'root' }]
41
42
  }] });
42
43
 
43
44
  var CustomFieldType;
@@ -76,12 +77,59 @@ const apiTypesToDynamicFormType = (type) => {
76
77
  case 'Boolean':
77
78
  return 'boolean';
78
79
  case 'Money':
80
+ return 'money';
79
81
  case 'Double':
82
+ return 'double';
80
83
  case 'Integer':
81
- return 'legacyNumber';
84
+ return 'integer';
82
85
  }
83
86
  };
84
87
 
88
+ /**
89
+ * Tipos de campo do dynamic-form que representam valores numéricos no custom-fields.
90
+ */
91
+ const NUMERIC_FIELD_TYPES = ['integer', 'double', 'money'];
92
+ /**
93
+ * Verifica se o tipo do campo (já mapeado para o dynamic-form) é numérico.
94
+ */
95
+ const isNumericFieldType = (type) => NUMERIC_FIELD_TYPES.includes(type);
96
+ /**
97
+ * Converte o valor numérico recebido do backend para o formato aceito pelo campo numérico
98
+ * do dynamic-form (string em formato internacional, ex.: `'1234.50'`).
99
+ *
100
+ * Valores vazios ou inválidos resultam em `null`.
101
+ */
102
+ const parseNumericValueFromApi = (value) => {
103
+ if (value === null || value === undefined || value === '') {
104
+ return null;
105
+ }
106
+ const bigNumber = new BigNumber(value);
107
+ return bigNumber.isNaN() ? null : bigNumber.toFixed();
108
+ };
109
+ /**
110
+ * Converte o valor do campo numérico (string em formato internacional) para `number`,
111
+ * que é o formato esperado pelo backend do custom-fields.
112
+ *
113
+ * - Valores vazios resultam em `null`.
114
+ * - Valores que não são numéricos (ex.: campos com máscara de texto) são devolvidos como estão.
115
+ * - Valores que não cabem em `number` sem perda de precisão são convertidos mesmo assim,
116
+ * emitindo um aviso no console.
117
+ */
118
+ const parseNumericValueToApi = (value) => {
119
+ if (value === null || value === undefined || value === '') {
120
+ return null;
121
+ }
122
+ const bigNumber = new BigNumber(value);
123
+ if (bigNumber.isNaN()) {
124
+ return value;
125
+ }
126
+ const numeric = bigNumber.toNumber();
127
+ if (!new BigNumber(numeric).isEqualTo(bigNumber)) {
128
+ console.warn(`[s-custom-fields] O valor ${bigNumber.toFixed()} perde precisão ao ser convertido para number.`);
129
+ }
130
+ return numeric;
131
+ };
132
+
85
133
  /**
86
134
  * @description Componente que carrega e renderiza campos customizados dinamicamente
87
135
  * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para
@@ -337,6 +385,10 @@ class CustomFieldsComponent {
337
385
  }
338
386
  }
339
387
  }
388
+ if (isNumericFieldType(type)) {
389
+ parsedValues[name] = parseNumericValueFromApi(value);
390
+ return;
391
+ }
340
392
  if (!value) {
341
393
  return;
342
394
  }
@@ -381,13 +433,12 @@ class CustomFieldsComponent {
381
433
  const { type } = field;
382
434
  const name = field.name;
383
435
  let value = this.formGroup.get(name)?.value;
436
+ if (isNumericFieldType(type)) {
437
+ parsedValues[name] = parseNumericValueToApi(value);
438
+ return;
439
+ }
384
440
  if (value) {
385
441
  switch (type) {
386
- case 'number':
387
- const { mask, scale } = field;
388
- if (mask)
389
- value = new BigNumber(value).toFixed(scale).toString();
390
- break;
391
442
  case 'date':
392
443
  value = moment(value).format('YYYY-MM-DD');
393
444
  break;
@@ -404,7 +455,7 @@ class CustomFieldsComponent {
404
455
  break;
405
456
  }
406
457
  }
407
- if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {
458
+ if ((value === null || value === undefined) && type === 'enum') {
408
459
  const isMultiple = field.multiple;
409
460
  parsedValues[name] = isMultiple ? [] : null;
410
461
  }
@@ -433,9 +484,10 @@ class CustomFieldsComponent {
433
484
  break;
434
485
  case CustomFieldType.Money:
435
486
  parameters = {
436
- type: 'legacyNumber',
487
+ type: 'money',
437
488
  precision: 15,
438
489
  scale: 2,
490
+ allowNegative: true,
439
491
  leftAddon: {
440
492
  label: localeOptions?.number?.currencySymbol ?? 'R$',
441
493
  },
@@ -443,17 +495,18 @@ class CustomFieldsComponent {
443
495
  break;
444
496
  case CustomFieldType.Double:
445
497
  parameters = {
446
- type: 'legacyNumber',
498
+ type: 'double',
447
499
  precision: 15,
448
500
  scale: 2,
449
- localizedNumber: true,
501
+ allowNegative: true,
450
502
  };
451
503
  break;
452
504
  case CustomFieldType.Integer:
453
505
  parameters = {
454
- type: 'legacyNumber',
506
+ type: 'integer',
455
507
  precision: 15,
456
508
  scale: 0,
509
+ allowNegative: true,
457
510
  };
458
511
  break;
459
512
  case CustomFieldType.Any:
@@ -774,6 +827,13 @@ function errorOnUpload(file) {
774
827
  return () => (file.error ? { uploadError: true } : null);
775
828
  }
776
829
 
830
+ /**
831
+ * @deprecated Será removido na v20. Importe diretamente o standalone `CustomFieldsComponent` (de
832
+ * `@seniorsistemas/angular-components/custom-fields`) no lugar deste módulo.
833
+ *
834
+ * Migração automática (também executada pelo `ng update` na v20):
835
+ * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
836
+ */
777
837
  class CustomFieldsModule {
778
838
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
779
839
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, imports: [CustomFieldsComponent], exports: [CustomFieldsComponent] });
@@ -792,5 +852,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
792
852
  * Generated bundle index. Do not edit.
793
853
  */
794
854
 
795
- export { CustomFieldType, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, apiTypesToDynamicFormType };
855
+ export { CustomFieldType, CustomFieldsComponent, CustomFieldsModule, CustomFieldsService, apiTypesToDynamicFormType, isNumericFieldType, parseNumericValueFromApi, parseNumericValueToApi };
796
856
  //# sourceMappingURL=seniorsistemas-angular-components-custom-fields.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-custom-fields.mjs","sources":["../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.service.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-type.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.html","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.module.ts","../../projects/angular-components/custom-fields/src/seniorsistemas-angular-components-custom-fields.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomFieldsResponse } from './models';\n\n@Injectable()\nexport class CustomFieldsService {\n private http = inject(HttpClient);\n\n\n public getCustomFields(\n domain: string,\n service: string,\n entity: string,\n endpoint: string,\n ): Observable<CustomFieldsResponse> {\n const entityDto = { entityId: { domain_: domain, service_: service, id: entity } };\n return this.http.post<CustomFieldsResponse>(endpoint, entityDto);\n }\n\n public getFileLocationUrl(\n dto: {\n domain: string;\n service: string;\n entityName: string;\n field: string;\n fileName: string;\n },\n endpoint: string,\n ): Observable<any> {\n return this.http.post(endpoint, dto);\n }\n\n public uploadTempFile(location: string, file: File) {\n return this.http.put(location, file, {\n reportProgress: true,\n observe: 'events',\n headers: { 'Content-Type': file.type },\n });\n }\n\n public requestAccess(objectId: string, endpoint: string) {\n return this.http.post(endpoint, { objectId });\n }\n\n public getFile(permanentUrl: string) {\n return this.http.get(permanentUrl, { responseType: 'blob' });\n }\n}\n\n","import { FieldType } from '@seniorsistemas/angular-components/dynamic-form';\n\nexport enum CustomFieldType {\n String = 'String',\n Boolean = 'Boolean',\n Integer = 'Integer',\n Double = 'Double',\n Date = 'Date',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Time = 'Time',\n Money = 'Money',\n Blob = 'Blob',\n Binary = 'Binary',\n Any = 'Any',\n Enum = 'Enum',\n}\n\nexport type CustomFieldsTypeAPI = 'Enumeration' | keyof typeof CustomFieldType;\n\nexport const apiTypesToDynamicFormType = (type: CustomFieldsTypeAPI): FieldType => {\n switch (type) {\n case 'String':\n case 'Any':\n return 'string';\n case 'Binary':\n return 'binary';\n case 'Blob':\n return 'blob';\n case 'DateTime':\n case 'Time':\n case 'Date':\n case 'LocalDateTime':\n return 'date';\n case 'Enumeration':\n case 'Enum':\n return 'enum';\n case 'Boolean':\n return 'boolean';\n case 'Money':\n case 'Double':\n case 'Integer':\n return 'legacyNumber';\n }\n};\n\nexport interface FieldFromAPI {\n id: string;\n type: CustomFieldsTypeAPI;\n customizable: boolean;\n customization: FieldCustomization;\n}\n\nexport interface FieldCustomization {\n active: boolean;\n label: string;\n tooltip: string;\n mask?: string;\n validationRegex?: string;\n customEnumeration?: CustomEnumeration;\n infoSign?: string;\n mandatory?: boolean;\n}\n\nexport interface CustomEnumeration {\n multiple?: boolean;\n values: EnumValue[];\n}\n\nexport interface EnumValue {\n key: string;\n value: string;\n}\n\nexport interface CustomFieldsResponse {\n entity_: {\n active: boolean;\n fields: FieldFromAPI[];\n };\n}\n\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport BigNumber from 'bignumber.js';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { catchError, finalize, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n BlobFieldConfig,\r\n BooleanFieldConfig,\r\n DynamicStructure,\r\n DynamicType,\r\n dynamicTypeToDynamicStructure,\r\n ExpandedDynamicType,\r\n NumberFieldConfig,\r\n SelectFieldConfig,\r\n StructureType,\r\n} from '@seniorsistemas/angular-components/dynamic-form';\r\nimport { FileDto } from '@seniorsistemas/angular-components/file-upload';\r\nimport {\r\n CalendarLocaleOptions,\r\n LocaleOptions,\r\n LocaleService,\r\n NumberLocaleOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport moment from 'moment';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport {\r\n apiTypesToDynamicFormType,\r\n CustomFieldsResponse,\r\n CustomFieldsTypeAPI,\r\n CustomFieldType,\r\n FieldFromAPI,\r\n} from './models';\r\nimport { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';\r\n\r\n/**\r\n * @description Componente que carrega e renderiza campos customizados dinamicamente\r\n * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para\r\n * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}\r\n * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa\r\n * com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-custom-fields\r\n * formControlName=\"camposCustomizados\"\r\n * domain=\"plataforma\"\r\n * service=\"servico\"\r\n * entity=\"entidade\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-custom-fields',\r\n templateUrl: './custom-fields.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [DynamicFormComponent_1],\r\n})\r\nexport class CustomFieldsComponent\r\n implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit\r\n{\r\n private readonly customFieldsService = inject(CustomFieldsService);\r\n private readonly localeService = inject(LocaleService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */\r\n @Input({ required: true })\r\n public domain!: string;\r\n\r\n /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public service!: string;\r\n\r\n /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public entity!: string;\r\n\r\n /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */\r\n @Input()\r\n public invalidErrorLabel = '';\r\n\r\n /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */\r\n @Input()\r\n public entityObject?: CustomFieldsResponse;\r\n\r\n /** @description Endpoint para buscar a configuração dos campos customizados. */\r\n @Input()\r\n public customFieldsEndpoint = 'platform/field_customization/queries/getEntity';\r\n\r\n /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */\r\n @Input()\r\n public fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';\r\n\r\n /** @description Endpoint para solicitar acesso a arquivos já enviados. */\r\n @Input()\r\n public requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';\r\n\r\n /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */\r\n @Input()\r\n public requiredErrorMessage = '';\r\n\r\n /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */\r\n @Input()\r\n public displayTimeInfoSign = 0;\r\n\r\n /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */\r\n @Input()\r\n public showFileUploadDate = false;\r\n\r\n /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */\r\n @Input()\r\n public ready$: BehaviorSubject<boolean> | null = null;\r\n\r\n /** @description Quando `true`, todos os campos customizados são desabilitados. */\r\n @Input()\r\n public disableFields: boolean | undefined;\r\n\r\n protected rowType: StructureType = 'row';\r\n\r\n public fields: DynamicType[] = [];\r\n public formGroup: FormGroup = new FormGroup({});\r\n\r\n protected dynamicStructure: DynamicStructure[] = [];\r\n\r\n private ready = false;\r\n private onChange: any;\r\n private onTouched: any;\r\n private value: any;\r\n private readonly ngUsubscribe: Subject<void> = new Subject();\r\n private uploadCanceled: boolean | undefined;\r\n private hasBlob: boolean | undefined;\r\n private hasUploaded: boolean | undefined;\r\n\r\n constructor() {\r\n this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');\r\n }\r\n\r\n public get hasCustomFields(): boolean {\r\n return !!this.fields?.length;\r\n }\r\n\r\n public get parentForm(): FormGroup {\r\n return this.controlContainer!.control as FormGroup;\r\n }\r\n\r\n public get parentControl(): FormControl {\r\n return this.parentForm.get('custom') as FormControl;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._validateInputs();\r\n this._createForm();\r\n this.addDisplayTimeInfoSignToFields();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.enableOrDisableFields(!!this.disableFields);\r\n\r\n this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const _disableFields = changes['disableFields'];\r\n if (_disableFields) {\r\n this.enableOrDisableFields(_disableFields.currentValue);\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.ngUsubscribe.next();\r\n this.ngUsubscribe.complete();\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: Function) {\r\n this.onTouched = fn;\r\n }\r\n\r\n public writeValue(value: any) {\r\n if (this.ready) {\r\n const newValue = this.parseValuesForFields(value);\r\n this.formGroup.patchValue(newValue);\r\n this.value = newValue;\r\n this.createFilesIfSetFormValuesAfterInit();\r\n } else {\r\n this.formGroup.patchValue(value || {});\r\n this.value = value;\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formGroup.disable({ emitEvent: false });\r\n } else {\r\n this.formGroup.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n public getCustomFields(): Observable<CustomFieldsResponse> {\r\n if (this.entityObject?.entity_) {\r\n return of(this.entityObject);\r\n }\r\n return this.customFieldsService.getCustomFields(\r\n this.domain,\r\n this.service,\r\n this.entity,\r\n this.customFieldsEndpoint,\r\n );\r\n }\r\n\r\n public validate() {\r\n const errors: any = {};\r\n Object.keys(this.formGroup.controls).forEach((field) => {\r\n const { errors: controlErrors } = this.formGroup.get(field) as FormGroup;\r\n if (controlErrors) {\r\n errors[field] = controlErrors;\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n public cleanFields() {\r\n this.formGroup.reset();\r\n }\r\n\r\n private enableOrDisableFields(disabled: boolean): void {\r\n if (!this.formGroup) {\r\n return;\r\n }\r\n\r\n for (const controlName of Object.keys(this.formGroup.value)) {\r\n disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();\r\n }\r\n }\r\n\r\n private _validateInputs(): void {\r\n if (!this.domain) {\r\n throw new Error('You need to specify the custom-fields domain!');\r\n }\r\n if (!this.service) {\r\n throw new Error('You need to specify the custom-fields service!');\r\n }\r\n if (!this.entity) {\r\n throw new Error('You need to specify the custom-fields entity!');\r\n }\r\n }\r\n\r\n private _createForm(): void {\r\n this.formGroup = new FormGroup({});\r\n const observables = [this.getCustomFields(), this.localeService.get()];\r\n forkJoin(observables)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n finalize(() => {\r\n this.formGroup.markAsPristine();\r\n this.parentControl?.markAsPristine();\r\n\r\n if (this.ready$) {\r\n this.ready$.next(true);\r\n }\r\n }),\r\n )\r\n .subscribe((response) => {\r\n const [customFieldsResponse, localeOptions] = response as [CustomFieldsResponse, LocaleOptions];\r\n const defaults: { [key in string]: { defaultValue?: boolean; defaultMask?: string } } = {};\r\n defaults[CustomFieldType.String] = {};\r\n defaults[CustomFieldType.Boolean] = { defaultValue: false };\r\n defaults[CustomFieldType.Integer] = {};\r\n defaults[CustomFieldType.Double] = { defaultMask: '' };\r\n defaults[CustomFieldType.Money] = {};\r\n defaults[CustomFieldType.Date] = {};\r\n defaults[CustomFieldType.DateTime] = {};\r\n defaults[CustomFieldType.LocalDateTime] = {};\r\n defaults[CustomFieldType.Time] = {};\r\n defaults[CustomFieldType.Blob] = {};\r\n defaults[CustomFieldType.Enum] = {};\r\n defaults[CustomFieldType.Binary] = {};\r\n defaults[CustomFieldType.Any] = {};\r\n\r\n if (!customFieldsResponse || !customFieldsResponse.entity_) {\r\n return;\r\n }\r\n const { active, fields } = customFieldsResponse.entity_;\r\n if (!active) {\r\n return;\r\n }\r\n\r\n fields\r\n .filter((field) => field.customizable && field.customization?.active)\r\n .forEach((field) => {\r\n const dynamicType = this.getDynamicType(field, localeOptions);\r\n\r\n const fieldType = field.type;\r\n\r\n if (field.type === CustomFieldType.Blob && this.value && this.value[dynamicType.name]) {\r\n this.createBlobToFileUpload(dynamicType as BlobFieldConfig);\r\n }\r\n\r\n const { validationRegex } = field.customization;\r\n\r\n const asIsTypes: CustomFieldsTypeAPI[] = [\r\n CustomFieldType.Boolean,\r\n CustomFieldType.Money,\r\n CustomFieldType.Date,\r\n CustomFieldType.DateTime,\r\n CustomFieldType.LocalDateTime,\r\n CustomFieldType.Time,\r\n ];\r\n\r\n const validators = [];\r\n if (validationRegex && !asIsTypes.includes(fieldType)) {\r\n validators.push(Validators.pattern(validationRegex));\r\n }\r\n if (fieldType === CustomFieldType.Integer && !(dynamicType as NumberFieldConfig).mask) {\r\n validators.push(Validators.pattern(/^\\-?\\d*$/));\r\n }\r\n\r\n if (dynamicType.required?.()) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n const control = new FormControl(\r\n { value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled },\r\n validators,\r\n );\r\n\r\n this.formGroup.addControl(dynamicType.name, control);\r\n\r\n this.fields.push(dynamicType);\r\n });\r\n this.dynamicStructure = dynamicTypeToDynamicStructure(this.fields);\r\n\r\n this.createFieldCustomization(fields);\r\n this.formGroup.patchValue(this.parseValuesForFields(this.value));\r\n this.ready = true;\r\n });\r\n }\r\n\r\n private parseValuesForFields(values: any) {\r\n const parsedValues = { ...values };\r\n\r\n this.fields.forEach((field) => {\r\n const type = field.type;\r\n const name = field.name;\r\n const value = values?.[name];\r\n\r\n /**\r\n * Tratamento exclusivo para campos boolean que tem o status Empty\r\n * Essa condicional necessita estar antes do if (!value) return;\r\n * Pois ela tem um status que usa null no valor do campo radio boolean\r\n */\r\n if (type === 'boolean') {\r\n const isString = typeof value === 'string';\r\n const notValid = !isString && typeof value !== 'boolean';\r\n if (notValid) {\r\n parsedValues[name] = null;\r\n } else {\r\n // Condicional para campos que retornam string de boolen do backand\r\n if (isString) {\r\n parsedValues[name] = value === 'true' ? true : false;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n }\r\n }\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case 'date':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'dateTime':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'localDateTime':\r\n parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();\r\n break;\r\n case 'time':\r\n parsedValues[name] = moment(value, 'HH:mm:ss').toDate();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n return parsedValues;\r\n }\r\n\r\n /**\r\n * Algumas equipes só setam valor no formulário, após o carregamento da tela\r\n * Como é bem padrão isso, foi necessário criar esse método para gerar o file\r\n * após setar o valor no formulário\r\n */\r\n private createFilesIfSetFormValuesAfterInit() {\r\n if (!this.hasUploaded) {\r\n this.fields\r\n .filter((field) => field.type === 'blob')\r\n .forEach((field) => {\r\n if (this.formGroup.get(field.name)?.value) {\r\n this.createBlobToFileUpload(field);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private parseFieldsValues() {\r\n const parsedValues: any = {};\r\n\r\n this.fields.forEach((field) => {\r\n const { type } = field;\r\n const name = field.name;\r\n let value = this.formGroup.get(name)?.value;\r\n\r\n if (value) {\r\n switch (type) {\r\n case 'number':\r\n const { mask, scale } = field;\r\n if (mask) value = new BigNumber(value).toFixed(scale as number).toString();\r\n break;\r\n case 'date':\r\n value = moment(value).format('YYYY-MM-DD');\r\n break;\r\n case 'dateTime':\r\n value = moment(value).format();\r\n break;\r\n case 'localDateTime':\r\n value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');\r\n break;\r\n case 'time':\r\n value = moment(value).format('HH:mm:ss');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {\r\n const isMultiple = (field as SelectFieldConfig).multiple;\r\n parsedValues[name] = isMultiple ? [] : null;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n });\r\n\r\n if (this.hasBlob) {\r\n parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;\r\n }\r\n return parsedValues;\r\n }\r\n\r\n private getDynamicType(field: FieldFromAPI, localeOptions: LocaleOptions): DynamicType {\r\n let parameters: Partial<DynamicType> = {};\r\n\r\n switch (field.type) {\r\n case CustomFieldType.Blob:\r\n parameters = this.getBlobParameters();\r\n break;\r\n case CustomFieldType.Boolean:\r\n parameters = this.getBooleanParameters();\r\n break;\r\n case 'Enumeration':\r\n case CustomFieldType.Enum:\r\n field.type = 'Enum';\r\n parameters = this.getSelectParameters(field);\r\n break;\r\n case CustomFieldType.Money:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 2,\r\n leftAddon: {\r\n label: localeOptions?.number?.currencySymbol ?? 'R$',\r\n },\r\n };\r\n break;\r\n case CustomFieldType.Double:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 2,\r\n localizedNumber: true,\r\n };\r\n break;\r\n case CustomFieldType.Integer:\r\n parameters = {\r\n type: 'legacyNumber',\r\n precision: 15,\r\n scale: 0,\r\n };\r\n break;\r\n case CustomFieldType.Any:\r\n field.type = 'String';\r\n parameters = {\r\n type: 'string',\r\n };\r\n break;\r\n }\r\n\r\n const dynamicType: DynamicType & {\r\n calendarOptions: CalendarLocaleOptions;\r\n currencyOptions: NumberLocaleOptions;\r\n } = {\r\n ...parameters,\r\n name: field.id,\r\n label: field.customization.label,\r\n tooltip: field.customization.tooltip,\r\n infoSign: field.customization.infoSign,\r\n type: apiTypesToDynamicFormType(field.type),\r\n mask: field.customization.mask,\r\n required: () => field.customization.mandatory ?? false,\r\n calendarOptions: localeOptions.calendar,\r\n currencyOptions: localeOptions.number,\r\n } as DynamicType & { calendarOptions: CalendarLocaleOptions; currencyOptions: NumberLocaleOptions };\r\n return dynamicType;\r\n }\r\n\r\n private getSelectParameters(field: any): Partial<SelectFieldConfig> {\r\n return {\r\n type: 'enum',\r\n showClear: true,\r\n multiple: field.customization.customEnumeration.multiple,\r\n options: field.customization.customEnumeration.values.map((e: any) => ({ label: e.value, value: e.key })),\r\n };\r\n }\r\n\r\n private getBooleanParameters(): Partial<BooleanFieldConfig> {\r\n return {\r\n type: 'boolean',\r\n optionsLabel: {\r\n true: this.getTranslateLabel(`true_label`),\r\n false: this.getTranslateLabel(`false_label`),\r\n empty: this.getTranslateLabel(`empty_label`),\r\n },\r\n };\r\n }\r\n\r\n private getBlobParameters(): Partial<ExpandedDynamicType> {\r\n return {\r\n type: 'blob',\r\n size: {\r\n sm: 12,\r\n md: 12,\r\n lg: 12,\r\n xl: 12,\r\n }, // Como vai ser filho de Row, faz sentido habilitar o tipo expandido.\r\n accept: 'image/*, application/*, text/*',\r\n chooseLabel: this.getTranslateLabel(`choose_label`),\r\n removeLabel: this.getTranslateLabel(`remove_label`),\r\n cancelLabel: this.getTranslateLabel(`cancel_label`),\r\n successTooltip: this.getTranslateLabel(`success_tooltip`),\r\n multiple: false,\r\n onUploadFile: (event: { files: FileDto[] }, blobField: BlobFieldConfig) => {\r\n this.hasUploaded = true;\r\n this.uploadFile(event, blobField);\r\n },\r\n onRemoveFile: (event: FileDto, blobField: BlobFieldConfig) => {\r\n this.removeFile({ file: event }, blobField);\r\n },\r\n onCancelUpload: (event: number, blobField: BlobFieldConfig) => {\r\n this.cancelUpload(event, blobField);\r\n },\r\n onDownloadFile: (event: { index: number; anchor: ElementRef }, blobField: BlobFieldConfig) => {\r\n this.downloadFile(event, blobField);\r\n },\r\n showFileUploadDate: this.showFileUploadDate,\r\n };\r\n }\r\n\r\n /**\r\n * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o\r\n * com os fields inseridos e deletados.\r\n */\r\n private createFieldCustomization(fields: FieldFromAPI[]): void {\r\n this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;\r\n if (this.hasBlob) {\r\n this.formGroup.addControl(\r\n 'fieldCustomization',\r\n new FormArray([\r\n new FormGroup({\r\n domain: new FormControl(this.domain),\r\n service: new FormControl(this.service),\r\n entity: new FormControl(this.entity),\r\n toDelete: new FormControl({ value: {}, disabled: false }),\r\n toInsert: new FormControl({ value: {}, disabled: false }),\r\n }),\r\n ]),\r\n );\r\n }\r\n }\r\n\r\n private createBlobToFileUpload(field: BlobFieldConfig) {\r\n const _name = field.name;\r\n const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;\r\n const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);\r\n const file: Partial<FileDto> = { objectId, name: fileName, savedFile: true };\r\n field.files = [file as FileDto];\r\n }\r\n\r\n private downloadFile(event: { index: number; anchor: ElementRef }, field: BlobFieldConfig) {\r\n const { index, anchor } = event;\r\n const _files = field.files || [];\r\n if (!_files.length) {\r\n return;\r\n }\r\n const currentFile = _files[index];\r\n if (currentFile.objectURL) {\r\n anchor.nativeElement.click();\r\n } else {\r\n const _objectId = currentFile.objectId as string;\r\n this.customFieldsService\r\n .requestAccess(_objectId, this.requestAccessEndpoint)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((data: any) => {\r\n const { fileName, uri } = data;\r\n this.customFieldsService\r\n .getFile(uri)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((blob: any) => {\r\n const newFile = new File([blob], fileName) as FileDto;\r\n newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);\r\n anchor.nativeElement.setAttribute('href', uri);\r\n newFile.objectId = currentFile.objectId;\r\n newFile.savedFile = true;\r\n _files[index] = newFile;\r\n field.files = [..._files];\r\n anchor.nativeElement.click();\r\n });\r\n });\r\n }\r\n }\r\n\r\n private uploadFile(event: { files: FileDto[] }, formField: BlobFieldConfig): void {\r\n const { files } = event;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n\r\n // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.\r\n if (field?.files?.length) {\r\n this.removeFile({ file: field.files[0] }, field);\r\n }\r\n field.files = files;\r\n const _name = field.name;\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (!file.savedFile && !file.progress) {\r\n file.isUploading = true;\r\n this.formGroup.get(_name)?.setValidators(isUploading(file));\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n this.customFieldsService\r\n .getFileLocationUrl(\r\n {\r\n domain: this.domain,\r\n service: this.service,\r\n entityName: this.entity,\r\n field: _name,\r\n fileName: file.name,\r\n },\r\n this.fileLocationEndpoint,\r\n )\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n )\r\n .subscribe((data: any) => {\r\n const { location, version, objectId } = data;\r\n file.version = version;\r\n file.objectId = objectId;\r\n file.uploadSubscribe = this.customFieldsService\r\n .uploadTempFile(location, file)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n finalize(() => {\r\n file.isUploading = false;\r\n }),\r\n )\r\n .subscribe((response: any) => {\r\n const { type } = response;\r\n if (!this.uploadCanceled) {\r\n if (type === HttpEventType.UploadProgress) {\r\n file.progress = Math.round(response.loaded / response.total) * 100;\r\n } else if (type === HttpEventType.Response) {\r\n file.objectURL = this.sanitizer.bypassSecurityTrustUrl(\r\n URL.createObjectURL(file),\r\n );\r\n\r\n const value = { objectId, name: file.name, version: file.version };\r\n const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;\r\n if (fieldCustomization?.value?.[0]) {\r\n fieldCustomization.value[0].toInsert = {\r\n ...toInsert,\r\n [_name]: value,\r\n };\r\n }\r\n this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n field.files = [file];\r\n }\r\n } else if (this.uploadCanceled && type === HttpEventType.Response) {\r\n this.uploadCanceled = false;\r\n }\r\n });\r\n field.files = [file];\r\n });\r\n }\r\n }\r\n }\r\n\r\n private removeFile(event: { file: FileDto }, blobField: BlobFieldConfig): void {\r\n const { file } = event;\r\n\r\n const field = this.fields.find((record) => record.name === blobField.name) as BlobFieldConfig;\r\n\r\n field!.files = [];\r\n\r\n if (file.objectId) {\r\n // Quando é um arquivo já salvo o objectId já é no formato \"objectId/name\"\r\n const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;\r\n const toDelete = this.formGroup.get('fieldCustomization')!.value[0].toDelete;\r\n delete this.formGroup.get('fieldCustomization')!.value[0].toInsert[field!.name];\r\n this.formGroup.get('fieldCustomization')!.value[0].toDelete = {\r\n ...toDelete,\r\n [field!.name]: [...(toDelete[field!.name] || []), value],\r\n };\r\n }\r\n\r\n this.formGroup.get(field!.name)!.clearValidators();\r\n this.formGroup.get(field!.name)!.setValue('');\r\n this.formGroup.get(field!.name)!.updateValueAndValidity();\r\n }\r\n\r\n private cancelUpload(index: number, formField: BlobFieldConfig): void {\r\n this.uploadCanceled = true;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n const _name = field.name;\r\n const _files = field.files || [];\r\n _files[index]?.uploadSubscribe?.unsubscribe();\r\n field.files = [];\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];\r\n delete fieldCustomization.toInsert[_name];\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.setValue('');\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n }\r\n\r\n private defaltCatchError(field: BlobFieldConfig, err: HttpErrorResponse, index: number): Observable<never> {\r\n const { files } = field;\r\n if (files) {\r\n files[index].error = err;\r\n files[index].isUploading = false;\r\n field.files = [...files];\r\n const _name = field.name;\r\n this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n } else {\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n }\r\n }\r\n\r\n private getTranslateLabel(label: string): string {\r\n return this.translateService.instant(`${this.domain}.${this.service}.${label}`);\r\n }\r\n\r\n private addDisplayTimeInfoSignToFields(): void {\r\n this.fields.forEach((field) => {\r\n field.displayTimeInfoSign = this.displayTimeInfoSign;\r\n });\r\n }\r\n}\r\n\r\nfunction isUploading(file: FileDto): ValidatorFn {\r\n return () => (file.isUploading ? { isUploading: true } : null);\r\n}\r\n\r\nfunction errorOnUpload(file: FileDto): ValidatorFn {\r\n return () => (file.error ? { uploadError: true } : null);\r\n}\r\n","@let errorMessages =\n {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage,\n };\n\n<s-dynamic-form\n [configs]=\"dynamicStructure\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n>\n</s-dynamic-form>\n\n","import { NgModule } from '@angular/core';\r\nimport { CustomFieldsComponent } from './custom-fields.component';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@NgModule({\r\n imports: [CustomFieldsComponent],\r\n exports: [CustomFieldsComponent],\r\n providers: [CustomFieldsService, TranslateService],\r\n})\r\nexport class CustomFieldsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DynamicFormComponent_1"],"mappings":"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"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-custom-fields.mjs","sources":["../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.service.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-type.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-value-parser.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.html","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.module.ts","../../projects/angular-components/custom-fields/src/seniorsistemas-angular-components-custom-fields.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomFieldsResponse } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomFieldsService {\n private http = inject(HttpClient);\n\n\n public getCustomFields(\n domain: string,\n service: string,\n entity: string,\n endpoint: string,\n ): Observable<CustomFieldsResponse> {\n const entityDto = { entityId: { domain_: domain, service_: service, id: entity } };\n return this.http.post<CustomFieldsResponse>(endpoint, entityDto);\n }\n\n public getFileLocationUrl(\n dto: {\n domain: string;\n service: string;\n entityName: string;\n field: string;\n fileName: string;\n },\n endpoint: string,\n ): Observable<any> {\n return this.http.post(endpoint, dto);\n }\n\n public uploadTempFile(location: string, file: File) {\n return this.http.put(location, file, {\n reportProgress: true,\n observe: 'events',\n headers: { 'Content-Type': file.type },\n });\n }\n\n public requestAccess(objectId: string, endpoint: string) {\n return this.http.post(endpoint, { objectId });\n }\n\n public getFile(permanentUrl: string) {\n return this.http.get(permanentUrl, { responseType: 'blob' });\n }\n}\n\n","import { FieldType } from '@seniorsistemas/angular-components/dynamic-form';\n\nexport enum CustomFieldType {\n String = 'String',\n Boolean = 'Boolean',\n Integer = 'Integer',\n Double = 'Double',\n Date = 'Date',\n DateTime = 'DateTime',\n LocalDateTime = 'LocalDateTime',\n Time = 'Time',\n Money = 'Money',\n Blob = 'Blob',\n Binary = 'Binary',\n Any = 'Any',\n Enum = 'Enum',\n}\n\nexport type CustomFieldsTypeAPI = 'Enumeration' | keyof typeof CustomFieldType;\n\nexport const apiTypesToDynamicFormType = (type: CustomFieldsTypeAPI): FieldType => {\n switch (type) {\n case 'String':\n case 'Any':\n return 'string';\n case 'Binary':\n return 'binary';\n case 'Blob':\n return 'blob';\n case 'DateTime':\n case 'Time':\n case 'Date':\n case 'LocalDateTime':\n return 'date';\n case 'Enumeration':\n case 'Enum':\n return 'enum';\n case 'Boolean':\n return 'boolean';\n case 'Money':\n return 'money';\n case 'Double':\n return 'double';\n case 'Integer':\n return 'integer';\n }\n};\n\nexport interface FieldFromAPI {\n id: string;\n type: CustomFieldsTypeAPI;\n customizable: boolean;\n customization: FieldCustomization;\n}\n\nexport interface FieldCustomization {\n active: boolean;\n label: string;\n tooltip: string;\n mask?: string;\n validationRegex?: string;\n customEnumeration?: CustomEnumeration;\n infoSign?: string;\n mandatory?: boolean;\n}\n\nexport interface CustomEnumeration {\n multiple?: boolean;\n values: EnumValue[];\n}\n\nexport interface EnumValue {\n key: string;\n value: string;\n}\n\nexport interface CustomFieldsResponse {\n entity_: {\n active: boolean;\n fields: FieldFromAPI[];\n };\n}\n\n","import BigNumber from 'bignumber.js';\n\n/**\n * Tipos de campo do dynamic-form que representam valores numéricos no custom-fields.\n */\nconst NUMERIC_FIELD_TYPES: readonly string[] = ['integer', 'double', 'money'];\n\n/**\n * Verifica se o tipo do campo (já mapeado para o dynamic-form) é numérico.\n */\nexport const isNumericFieldType = (type: string): boolean => NUMERIC_FIELD_TYPES.includes(type);\n\n/**\n * Converte o valor numérico recebido do backend para o formato aceito pelo campo numérico\n * do dynamic-form (string em formato internacional, ex.: `'1234.50'`).\n *\n * Valores vazios ou inválidos resultam em `null`.\n */\nexport const parseNumericValueFromApi = (value: unknown): string | null => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const bigNumber = new BigNumber(value as BigNumber.Value);\n return bigNumber.isNaN() ? null : bigNumber.toFixed();\n};\n\n/**\n * Converte o valor do campo numérico (string em formato internacional) para `number`,\n * que é o formato esperado pelo backend do custom-fields.\n *\n * - Valores vazios resultam em `null`.\n * - Valores que não são numéricos (ex.: campos com máscara de texto) são devolvidos como estão.\n * - Valores que não cabem em `number` sem perda de precisão são convertidos mesmo assim,\n * emitindo um aviso no console.\n */\nexport const parseNumericValueToApi = (value: unknown): number | string | null => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const bigNumber = new BigNumber(value as BigNumber.Value);\n if (bigNumber.isNaN()) {\n return value as string;\n }\n\n const numeric = bigNumber.toNumber();\n if (!new BigNumber(numeric).isEqualTo(bigNumber)) {\n console.warn(`[s-custom-fields] O valor ${bigNumber.toFixed()} perde precisão ao ser convertido para number.`);\n }\n return numeric;\n};\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ControlContainer,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { catchError, finalize, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n BignumberFieldConfig,\r\n BlobFieldConfig,\r\n BooleanFieldConfig,\r\n DynamicStructure,\r\n DynamicType,\r\n dynamicTypeToDynamicStructure,\r\n ExpandedDynamicType,\r\n SelectFieldConfig,\r\n StructureType,\r\n} from '@seniorsistemas/angular-components/dynamic-form';\r\nimport { FileDto } from '@seniorsistemas/angular-components/file-upload';\r\nimport {\r\n CalendarLocaleOptions,\r\n LocaleOptions,\r\n LocaleService,\r\n NumberLocaleOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport moment from 'moment';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport {\r\n apiTypesToDynamicFormType,\r\n CustomFieldsResponse,\r\n CustomFieldsTypeAPI,\r\n CustomFieldType,\r\n FieldFromAPI,\r\n isNumericFieldType,\r\n parseNumericValueFromApi,\r\n parseNumericValueToApi,\r\n} from './models';\r\nimport { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';\r\n\r\n/**\r\n * @description Componente que carrega e renderiza campos customizados dinamicamente\r\n * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para\r\n * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}\r\n * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa\r\n * com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-custom-fields\r\n * formControlName=\"camposCustomizados\"\r\n * domain=\"plataforma\"\r\n * service=\"servico\"\r\n * entity=\"entidade\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-custom-fields',\r\n templateUrl: './custom-fields.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: CustomFieldsComponent,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [DynamicFormComponent_1],\r\n})\r\nexport class CustomFieldsComponent\r\n implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit\r\n{\r\n private readonly customFieldsService = inject(CustomFieldsService);\r\n private readonly localeService = inject(LocaleService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */\r\n @Input({ required: true })\r\n public domain!: string;\r\n\r\n /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public service!: string;\r\n\r\n /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */\r\n @Input({ required: true })\r\n public entity!: string;\r\n\r\n /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */\r\n @Input()\r\n public invalidErrorLabel = '';\r\n\r\n /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */\r\n @Input()\r\n public entityObject?: CustomFieldsResponse;\r\n\r\n /** @description Endpoint para buscar a configuração dos campos customizados. */\r\n @Input()\r\n public customFieldsEndpoint = 'platform/field_customization/queries/getEntity';\r\n\r\n /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */\r\n @Input()\r\n public fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';\r\n\r\n /** @description Endpoint para solicitar acesso a arquivos já enviados. */\r\n @Input()\r\n public requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';\r\n\r\n /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */\r\n @Input()\r\n public requiredErrorMessage = '';\r\n\r\n /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */\r\n @Input()\r\n public displayTimeInfoSign = 0;\r\n\r\n /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */\r\n @Input()\r\n public showFileUploadDate = false;\r\n\r\n /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */\r\n @Input()\r\n public ready$: BehaviorSubject<boolean> | null = null;\r\n\r\n /** @description Quando `true`, todos os campos customizados são desabilitados. */\r\n @Input()\r\n public disableFields: boolean | undefined;\r\n\r\n protected rowType: StructureType = 'row';\r\n\r\n public fields: DynamicType[] = [];\r\n public formGroup: FormGroup = new FormGroup({});\r\n\r\n protected dynamicStructure: DynamicStructure[] = [];\r\n\r\n private ready = false;\r\n private onChange: any;\r\n private onTouched: any;\r\n private value: any;\r\n private readonly ngUsubscribe: Subject<void> = new Subject();\r\n private uploadCanceled: boolean | undefined;\r\n private hasBlob: boolean | undefined;\r\n private hasUploaded: boolean | undefined;\r\n\r\n constructor() {\r\n this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');\r\n }\r\n\r\n public get hasCustomFields(): boolean {\r\n return !!this.fields?.length;\r\n }\r\n\r\n public get parentForm(): FormGroup {\r\n return this.controlContainer!.control as FormGroup;\r\n }\r\n\r\n public get parentControl(): FormControl {\r\n return this.parentForm.get('custom') as FormControl;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._validateInputs();\r\n this._createForm();\r\n this.addDisplayTimeInfoSignToFields();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.enableOrDisableFields(!!this.disableFields);\r\n\r\n this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const _disableFields = changes['disableFields'];\r\n if (_disableFields) {\r\n this.enableOrDisableFields(_disableFields.currentValue);\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.ngUsubscribe.next();\r\n this.ngUsubscribe.complete();\r\n }\r\n\r\n public registerOnChange(fn: Function) {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: Function) {\r\n this.onTouched = fn;\r\n }\r\n\r\n public writeValue(value: any) {\r\n if (this.ready) {\r\n const newValue = this.parseValuesForFields(value);\r\n this.formGroup.patchValue(newValue);\r\n this.value = newValue;\r\n this.createFilesIfSetFormValuesAfterInit();\r\n } else {\r\n this.formGroup.patchValue(value || {});\r\n this.value = value;\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formGroup.disable({ emitEvent: false });\r\n } else {\r\n this.formGroup.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n public getCustomFields(): Observable<CustomFieldsResponse> {\r\n if (this.entityObject?.entity_) {\r\n return of(this.entityObject);\r\n }\r\n return this.customFieldsService.getCustomFields(\r\n this.domain,\r\n this.service,\r\n this.entity,\r\n this.customFieldsEndpoint,\r\n );\r\n }\r\n\r\n public validate() {\r\n const errors: any = {};\r\n Object.keys(this.formGroup.controls).forEach((field) => {\r\n const { errors: controlErrors } = this.formGroup.get(field) as FormGroup;\r\n if (controlErrors) {\r\n errors[field] = controlErrors;\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n public cleanFields() {\r\n this.formGroup.reset();\r\n }\r\n\r\n private enableOrDisableFields(disabled: boolean): void {\r\n if (!this.formGroup) {\r\n return;\r\n }\r\n\r\n for (const controlName of Object.keys(this.formGroup.value)) {\r\n disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();\r\n }\r\n }\r\n\r\n private _validateInputs(): void {\r\n if (!this.domain) {\r\n throw new Error('You need to specify the custom-fields domain!');\r\n }\r\n if (!this.service) {\r\n throw new Error('You need to specify the custom-fields service!');\r\n }\r\n if (!this.entity) {\r\n throw new Error('You need to specify the custom-fields entity!');\r\n }\r\n }\r\n\r\n private _createForm(): void {\r\n this.formGroup = new FormGroup({});\r\n const observables = [this.getCustomFields(), this.localeService.get()];\r\n forkJoin(observables)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n finalize(() => {\r\n this.formGroup.markAsPristine();\r\n this.parentControl?.markAsPristine();\r\n\r\n if (this.ready$) {\r\n this.ready$.next(true);\r\n }\r\n }),\r\n )\r\n .subscribe((response) => {\r\n const [customFieldsResponse, localeOptions] = response as [CustomFieldsResponse, LocaleOptions];\r\n const defaults: { [key in string]: { defaultValue?: boolean; defaultMask?: string } } = {};\r\n defaults[CustomFieldType.String] = {};\r\n defaults[CustomFieldType.Boolean] = { defaultValue: false };\r\n defaults[CustomFieldType.Integer] = {};\r\n defaults[CustomFieldType.Double] = { defaultMask: '' };\r\n defaults[CustomFieldType.Money] = {};\r\n defaults[CustomFieldType.Date] = {};\r\n defaults[CustomFieldType.DateTime] = {};\r\n defaults[CustomFieldType.LocalDateTime] = {};\r\n defaults[CustomFieldType.Time] = {};\r\n defaults[CustomFieldType.Blob] = {};\r\n defaults[CustomFieldType.Enum] = {};\r\n defaults[CustomFieldType.Binary] = {};\r\n defaults[CustomFieldType.Any] = {};\r\n\r\n if (!customFieldsResponse || !customFieldsResponse.entity_) {\r\n return;\r\n }\r\n const { active, fields } = customFieldsResponse.entity_;\r\n if (!active) {\r\n return;\r\n }\r\n\r\n fields\r\n .filter((field) => field.customizable && field.customization?.active)\r\n .forEach((field) => {\r\n const dynamicType = this.getDynamicType(field, localeOptions);\r\n\r\n const fieldType = field.type;\r\n\r\n if (field.type === CustomFieldType.Blob && this.value && this.value[dynamicType.name]) {\r\n this.createBlobToFileUpload(dynamicType as BlobFieldConfig);\r\n }\r\n\r\n const { validationRegex } = field.customization;\r\n\r\n const asIsTypes: CustomFieldsTypeAPI[] = [\r\n CustomFieldType.Boolean,\r\n CustomFieldType.Money,\r\n CustomFieldType.Date,\r\n CustomFieldType.DateTime,\r\n CustomFieldType.LocalDateTime,\r\n CustomFieldType.Time,\r\n ];\r\n\r\n const validators = [];\r\n if (validationRegex && !asIsTypes.includes(fieldType)) {\r\n validators.push(Validators.pattern(validationRegex));\r\n }\r\n if (fieldType === CustomFieldType.Integer && !(dynamicType as BignumberFieldConfig).mask) {\r\n validators.push(Validators.pattern(/^\\-?\\d*$/));\r\n }\r\n\r\n if (dynamicType.required?.()) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n const control = new FormControl(\r\n { value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled },\r\n validators,\r\n );\r\n\r\n this.formGroup.addControl(dynamicType.name, control);\r\n\r\n this.fields.push(dynamicType);\r\n });\r\n this.dynamicStructure = dynamicTypeToDynamicStructure(this.fields);\r\n\r\n this.createFieldCustomization(fields);\r\n this.formGroup.patchValue(this.parseValuesForFields(this.value));\r\n this.ready = true;\r\n });\r\n }\r\n\r\n private parseValuesForFields(values: any) {\r\n const parsedValues = { ...values };\r\n\r\n this.fields.forEach((field) => {\r\n const type = field.type;\r\n const name = field.name;\r\n const value = values?.[name];\r\n\r\n /**\r\n * Tratamento exclusivo para campos boolean que tem o status Empty\r\n * Essa condicional necessita estar antes do if (!value) return;\r\n * Pois ela tem um status que usa null no valor do campo radio boolean\r\n */\r\n if (type === 'boolean') {\r\n const isString = typeof value === 'string';\r\n const notValid = !isString && typeof value !== 'boolean';\r\n if (notValid) {\r\n parsedValues[name] = null;\r\n } else {\r\n // Condicional para campos que retornam string de boolen do backand\r\n if (isString) {\r\n parsedValues[name] = value === 'true' ? true : false;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n }\r\n }\r\n\r\n if (isNumericFieldType(type)) {\r\n parsedValues[name] = parseNumericValueFromApi(value);\r\n return;\r\n }\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case 'date':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'dateTime':\r\n parsedValues[name] = moment(value).toDate();\r\n break;\r\n case 'localDateTime':\r\n parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();\r\n break;\r\n case 'time':\r\n parsedValues[name] = moment(value, 'HH:mm:ss').toDate();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n return parsedValues;\r\n }\r\n\r\n /**\r\n * Algumas equipes só setam valor no formulário, após o carregamento da tela\r\n * Como é bem padrão isso, foi necessário criar esse método para gerar o file\r\n * após setar o valor no formulário\r\n */\r\n private createFilesIfSetFormValuesAfterInit() {\r\n if (!this.hasUploaded) {\r\n this.fields\r\n .filter((field) => field.type === 'blob')\r\n .forEach((field) => {\r\n if (this.formGroup.get(field.name)?.value) {\r\n this.createBlobToFileUpload(field);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private parseFieldsValues() {\r\n const parsedValues: any = {};\r\n\r\n this.fields.forEach((field) => {\r\n const { type } = field;\r\n const name = field.name;\r\n let value = this.formGroup.get(name)?.value;\r\n\r\n if (isNumericFieldType(type)) {\r\n parsedValues[name] = parseNumericValueToApi(value);\r\n return;\r\n }\r\n\r\n if (value) {\r\n switch (type) {\r\n case 'date':\r\n value = moment(value).format('YYYY-MM-DD');\r\n break;\r\n case 'dateTime':\r\n value = moment(value).format();\r\n break;\r\n case 'localDateTime':\r\n value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');\r\n break;\r\n case 'time':\r\n value = moment(value).format('HH:mm:ss');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n if ((value === null || value === undefined) && type === 'enum') {\r\n const isMultiple = (field as SelectFieldConfig).multiple;\r\n parsedValues[name] = isMultiple ? [] : null;\r\n } else {\r\n parsedValues[name] = value;\r\n }\r\n });\r\n\r\n if (this.hasBlob) {\r\n parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;\r\n }\r\n return parsedValues;\r\n }\r\n\r\n private getDynamicType(field: FieldFromAPI, localeOptions: LocaleOptions): DynamicType {\r\n let parameters: Partial<DynamicType> = {};\r\n\r\n switch (field.type) {\r\n case CustomFieldType.Blob:\r\n parameters = this.getBlobParameters();\r\n break;\r\n case CustomFieldType.Boolean:\r\n parameters = this.getBooleanParameters();\r\n break;\r\n case 'Enumeration':\r\n case CustomFieldType.Enum:\r\n field.type = 'Enum';\r\n parameters = this.getSelectParameters(field);\r\n break;\r\n case CustomFieldType.Money:\r\n parameters = {\r\n type: 'money',\r\n precision: 15,\r\n scale: 2,\r\n allowNegative: true,\r\n leftAddon: {\r\n label: localeOptions?.number?.currencySymbol ?? 'R$',\r\n },\r\n };\r\n break;\r\n case CustomFieldType.Double:\r\n parameters = {\r\n type: 'double',\r\n precision: 15,\r\n scale: 2,\r\n allowNegative: true,\r\n };\r\n break;\r\n case CustomFieldType.Integer:\r\n parameters = {\r\n type: 'integer',\r\n precision: 15,\r\n scale: 0,\r\n allowNegative: true,\r\n };\r\n break;\r\n case CustomFieldType.Any:\r\n field.type = 'String';\r\n parameters = {\r\n type: 'string',\r\n };\r\n break;\r\n }\r\n\r\n const dynamicType: DynamicType & {\r\n calendarOptions: CalendarLocaleOptions;\r\n currencyOptions: NumberLocaleOptions;\r\n } = {\r\n ...parameters,\r\n name: field.id,\r\n label: field.customization.label,\r\n tooltip: field.customization.tooltip,\r\n infoSign: field.customization.infoSign,\r\n type: apiTypesToDynamicFormType(field.type),\r\n mask: field.customization.mask,\r\n required: () => field.customization.mandatory ?? false,\r\n calendarOptions: localeOptions.calendar,\r\n currencyOptions: localeOptions.number,\r\n } as DynamicType & { calendarOptions: CalendarLocaleOptions; currencyOptions: NumberLocaleOptions };\r\n return dynamicType;\r\n }\r\n\r\n private getSelectParameters(field: any): Partial<SelectFieldConfig> {\r\n return {\r\n type: 'enum',\r\n showClear: true,\r\n multiple: field.customization.customEnumeration.multiple,\r\n options: field.customization.customEnumeration.values.map((e: any) => ({ label: e.value, value: e.key })),\r\n };\r\n }\r\n\r\n private getBooleanParameters(): Partial<BooleanFieldConfig> {\r\n return {\r\n type: 'boolean',\r\n optionsLabel: {\r\n true: this.getTranslateLabel(`true_label`),\r\n false: this.getTranslateLabel(`false_label`),\r\n empty: this.getTranslateLabel(`empty_label`),\r\n },\r\n };\r\n }\r\n\r\n private getBlobParameters(): Partial<ExpandedDynamicType> {\r\n return {\r\n type: 'blob',\r\n size: {\r\n sm: 12,\r\n md: 12,\r\n lg: 12,\r\n xl: 12,\r\n }, // Como vai ser filho de Row, faz sentido habilitar o tipo expandido.\r\n accept: 'image/*, application/*, text/*',\r\n chooseLabel: this.getTranslateLabel(`choose_label`),\r\n removeLabel: this.getTranslateLabel(`remove_label`),\r\n cancelLabel: this.getTranslateLabel(`cancel_label`),\r\n successTooltip: this.getTranslateLabel(`success_tooltip`),\r\n multiple: false,\r\n onUploadFile: (event: { files: FileDto[] }, blobField: BlobFieldConfig) => {\r\n this.hasUploaded = true;\r\n this.uploadFile(event, blobField);\r\n },\r\n onRemoveFile: (event: FileDto, blobField: BlobFieldConfig) => {\r\n this.removeFile({ file: event }, blobField);\r\n },\r\n onCancelUpload: (event: number, blobField: BlobFieldConfig) => {\r\n this.cancelUpload(event, blobField);\r\n },\r\n onDownloadFile: (event: { index: number; anchor: ElementRef }, blobField: BlobFieldConfig) => {\r\n this.downloadFile(event, blobField);\r\n },\r\n showFileUploadDate: this.showFileUploadDate,\r\n };\r\n }\r\n\r\n /**\r\n * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o\r\n * com os fields inseridos e deletados.\r\n */\r\n private createFieldCustomization(fields: FieldFromAPI[]): void {\r\n this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;\r\n if (this.hasBlob) {\r\n this.formGroup.addControl(\r\n 'fieldCustomization',\r\n new FormArray([\r\n new FormGroup({\r\n domain: new FormControl(this.domain),\r\n service: new FormControl(this.service),\r\n entity: new FormControl(this.entity),\r\n toDelete: new FormControl({ value: {}, disabled: false }),\r\n toInsert: new FormControl({ value: {}, disabled: false }),\r\n }),\r\n ]),\r\n );\r\n }\r\n }\r\n\r\n private createBlobToFileUpload(field: BlobFieldConfig) {\r\n const _name = field.name;\r\n const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;\r\n const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);\r\n const file: Partial<FileDto> = { objectId, name: fileName, savedFile: true };\r\n field.files = [file as FileDto];\r\n }\r\n\r\n private downloadFile(event: { index: number; anchor: ElementRef }, field: BlobFieldConfig) {\r\n const { index, anchor } = event;\r\n const _files = field.files || [];\r\n if (!_files.length) {\r\n return;\r\n }\r\n const currentFile = _files[index];\r\n if (currentFile.objectURL) {\r\n anchor.nativeElement.click();\r\n } else {\r\n const _objectId = currentFile.objectId as string;\r\n this.customFieldsService\r\n .requestAccess(_objectId, this.requestAccessEndpoint)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((data: any) => {\r\n const { fileName, uri } = data;\r\n this.customFieldsService\r\n .getFile(uri)\r\n .pipe(takeUntil(this.ngUsubscribe))\r\n .subscribe((blob: any) => {\r\n const newFile = new File([blob], fileName) as FileDto;\r\n newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);\r\n anchor.nativeElement.setAttribute('href', uri);\r\n newFile.objectId = currentFile.objectId;\r\n newFile.savedFile = true;\r\n _files[index] = newFile;\r\n field.files = [..._files];\r\n anchor.nativeElement.click();\r\n });\r\n });\r\n }\r\n }\r\n\r\n private uploadFile(event: { files: FileDto[] }, formField: BlobFieldConfig): void {\r\n const { files } = event;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n\r\n // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.\r\n if (field?.files?.length) {\r\n this.removeFile({ file: field.files[0] }, field);\r\n }\r\n field.files = files;\r\n const _name = field.name;\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n if (!file.savedFile && !file.progress) {\r\n file.isUploading = true;\r\n this.formGroup.get(_name)?.setValidators(isUploading(file));\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n this.customFieldsService\r\n .getFileLocationUrl(\r\n {\r\n domain: this.domain,\r\n service: this.service,\r\n entityName: this.entity,\r\n field: _name,\r\n fileName: file.name,\r\n },\r\n this.fileLocationEndpoint,\r\n )\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n )\r\n .subscribe((data: any) => {\r\n const { location, version, objectId } = data;\r\n file.version = version;\r\n file.objectId = objectId;\r\n file.uploadSubscribe = this.customFieldsService\r\n .uploadTempFile(location, file)\r\n .pipe(\r\n takeUntil(this.ngUsubscribe),\r\n catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n finalize(() => {\r\n file.isUploading = false;\r\n }),\r\n )\r\n .subscribe((response: any) => {\r\n const { type } = response;\r\n if (!this.uploadCanceled) {\r\n if (type === HttpEventType.UploadProgress) {\r\n file.progress = Math.round(response.loaded / response.total) * 100;\r\n } else if (type === HttpEventType.Response) {\r\n file.objectURL = this.sanitizer.bypassSecurityTrustUrl(\r\n URL.createObjectURL(file),\r\n );\r\n\r\n const value = { objectId, name: file.name, version: file.version };\r\n const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;\r\n if (fieldCustomization?.value?.[0]) {\r\n fieldCustomization.value[0].toInsert = {\r\n ...toInsert,\r\n [_name]: value,\r\n };\r\n }\r\n this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n field.files = [file];\r\n }\r\n } else if (this.uploadCanceled && type === HttpEventType.Response) {\r\n this.uploadCanceled = false;\r\n }\r\n });\r\n field.files = [file];\r\n });\r\n }\r\n }\r\n }\r\n\r\n private removeFile(event: { file: FileDto }, blobField: BlobFieldConfig): void {\r\n const { file } = event;\r\n\r\n const field = this.fields.find((record) => record.name === blobField.name) as BlobFieldConfig;\r\n\r\n field!.files = [];\r\n\r\n if (file.objectId) {\r\n // Quando é um arquivo já salvo o objectId já é no formato \"objectId/name\"\r\n const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;\r\n const toDelete = this.formGroup.get('fieldCustomization')!.value[0].toDelete;\r\n delete this.formGroup.get('fieldCustomization')!.value[0].toInsert[field!.name];\r\n this.formGroup.get('fieldCustomization')!.value[0].toDelete = {\r\n ...toDelete,\r\n [field!.name]: [...(toDelete[field!.name] || []), value],\r\n };\r\n }\r\n\r\n this.formGroup.get(field!.name)!.clearValidators();\r\n this.formGroup.get(field!.name)!.setValue('');\r\n this.formGroup.get(field!.name)!.updateValueAndValidity();\r\n }\r\n\r\n private cancelUpload(index: number, formField: BlobFieldConfig): void {\r\n this.uploadCanceled = true;\r\n const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n if (!field) {\r\n return;\r\n }\r\n const _name = field.name;\r\n const _files = field.files || [];\r\n _files[index]?.uploadSubscribe?.unsubscribe();\r\n field.files = [];\r\n const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];\r\n delete fieldCustomization.toInsert[_name];\r\n this.formGroup.get(_name)?.clearValidators();\r\n this.formGroup.get(_name)?.setValue('');\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n }\r\n\r\n private defaltCatchError(field: BlobFieldConfig, err: HttpErrorResponse, index: number): Observable<never> {\r\n const { files } = field;\r\n if (files) {\r\n files[index].error = err;\r\n files[index].isUploading = false;\r\n field.files = [...files];\r\n const _name = field.name;\r\n this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);\r\n this.formGroup.get(_name)?.updateValueAndValidity();\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n } else {\r\n return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n }\r\n }\r\n\r\n private getTranslateLabel(label: string): string {\r\n return this.translateService.instant(`${this.domain}.${this.service}.${label}`);\r\n }\r\n\r\n private addDisplayTimeInfoSignToFields(): void {\r\n this.fields.forEach((field) => {\r\n field.displayTimeInfoSign = this.displayTimeInfoSign;\r\n });\r\n }\r\n}\r\n\r\nfunction isUploading(file: FileDto): ValidatorFn {\r\n return () => (file.isUploading ? { isUploading: true } : null);\r\n}\r\n\r\nfunction errorOnUpload(file: FileDto): ValidatorFn {\r\n return () => (file.error ? { uploadError: true } : null);\r\n}\r\n","@let errorMessages =\n {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage,\n };\n\n<s-dynamic-form\n [configs]=\"dynamicStructure\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n>\n</s-dynamic-form>\n\n","import { NgModule } from '@angular/core';\r\nimport { CustomFieldsComponent } from './custom-fields.component';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `CustomFieldsComponent` (de\r\n * `@seniorsistemas/angular-components/custom-fields`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [CustomFieldsComponent],\r\n exports: [CustomFieldsComponent],\r\n providers: [CustomFieldsService, TranslateService],\r\n})\r\nexport class CustomFieldsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DynamicFormComponent_1"],"mappings":"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"}
@@ -213,6 +213,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
213
213
  type: Input
214
214
  }] } });
215
215
 
216
+ /**
217
+ * @deprecated Será removido na v20. Importe diretamente o standalone `DrawerComponent` (de
218
+ * `@seniorsistemas/angular-components/drawer`) no lugar deste módulo.
219
+ *
220
+ * Este módulo também reexportava `TemplateDirective` (`@seniorsistemas/angular-components/template`, usado em
221
+ * templates por `[sTemplate]`). Se o seu template usa algum deles, importe-o diretamente.
222
+ *
223
+ * Migração automática (também executada pelo `ng update` na v20):
224
+ * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
225
+ */
216
226
  class DrawerModule {
217
227
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DrawerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
218
228
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: DrawerModule, imports: [DrawerComponent], exports: [DrawerComponent, TemplateModule] });
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-drawer.mjs","sources":["../../projects/angular-components/drawer/src/lib/drawer/drawer.component.ts","../../projects/angular-components/drawer/src/lib/drawer/drawer.component.html","../../projects/angular-components/drawer/src/lib/drawer/drawer.module.ts","../../projects/angular-components/drawer/src/seniorsistemas-angular-components-drawer.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n contentChild,\n ContentChildren,\n effect,\n Input,\n model,\n OnDestroy,\n QueryList,\n TemplateRef,\n} from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DEPRECATED_CONFIG, DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { FooterComponent } from '@seniorsistemas/angular-components/structure';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de painel lateral deslizante (drawer) que aparece sobre o conteúdo\n * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé\n * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.\n *\n * Também responde ao seletor legado `s-sidebar`.\n *\n * @example\n * ```html\n * <s-drawer [(visible)]=\"drawerOpen\" header=\"Filtros\" [closable]=\"true\">\n * <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n * </s-drawer>\n * ```\n *\n * @category Overlay\n */\n@Component({\n selector: 's-drawer, s-sidebar',\n templateUrl: './drawer.component.html',\n styleUrls: ['./drawer.component.scss'],\n host: {\n '(document:keydown.escape)': 'handleEscape()',\n },\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-sidebar',\n newSelector: 's-drawer',\n removalVersion: '20.0.0',\n },\n },\n ],\n animations: [\n trigger('visibilityChanged', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('300ms', style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('300ms', style({ transform: 'translateX(100%)' })),\n ]),\n ]),\n ],\n standalone: true,\n imports: [CdkTrapFocus, NgTemplateOutlet, TranslateModule],\n})\nexport class DrawerComponent implements AfterContentInit, OnDestroy {\n @ContentChildren(TemplateDirective)\n public templates: QueryList<TemplateDirective> | null = null;\n\n /**\n * @description Controla a visibilidade do drawer. Suporta two-way binding via `[(visible)]`.\n *\n * @default false\n */\n public visible = model<boolean>(false);\n\n /**\n * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do drawer.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Quando `true`, clicar no backdrop (área escurecida fora do drawer) fecha o painel.\n *\n * @default true\n */\n @Input()\n public dismissible = true;\n\n /**\n * @description Quando `true`, pressionar a tecla Escape fecha o drawer.\n *\n * @default true\n */\n @Input()\n public closeOnEscape = true;\n\n /**\n * @description Texto exibido no cabeçalho padrão do drawer.\n * Pode ser substituído por um template customizado via `sTemplate=\"header\"`.\n */\n @Input()\n public header?: string;\n\n /**\n * @description Nome acessível do drawer, usado quando o cabeçalho é um template\n * customizado via `sTemplate=\"header\"` (nesse caso não há `header` para associar\n * via `aria-labelledby`). Ignorado quando `header` está definido.\n */\n @Input()\n public ariaLabel?: string;\n\n /**\n * @description Quando `true`, aumenta a largura do drawer para acomodar mais conteúdo.\n *\n * @default false\n */\n @Input()\n public largeSized = false;\n\n /**\n * @description Quando `true`, mantém o conteúdo do drawer no DOM mesmo quando oculto,\n * preservando o estado interno dos componentes filhos.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Função de confirmação chamada antes de fechar o drawer.\n * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.\n */\n @Input()\n public set registerConfirmClose(fn: () => boolean) {\n this._confirmClose = fn;\n }\n\n /** @description Id único usado para associar o título ao painel via `aria-labelledby`. */\n protected readonly titleId = randomHash('drawer-title');\n\n public headerTemplate: TemplateRef<unknown> | null = null;\n public bodyTemplate: TemplateRef<unknown> | null = null;\n public footerTemplate: TemplateRef<unknown> | null = null;\n\n protected readonly footerComponent = contentChild(FooterComponent);\n\n private _confirmClose = () => true;\n\n private _elementToRefocus: HTMLElement | null = null;\n\n private readonly _scrollLock = createScrollLock();\n\n private readonly visibleEffect = effect(() => {\n const visible = this.visible();\n if (visible) {\n this._scrollLock.lock();\n this._elementToRefocus = document.activeElement as HTMLElement | null;\n } else {\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n });\n\n public ngAfterContentInit(): void {\n this._getTemplates();\n }\n\n public ngOnDestroy(): void {\n this.visibleEffect.destroy();\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n\n public closeDrawer(): void {\n if (this._confirmClose()) {\n this.visible.set(false);\n }\n }\n\n public handleEscape(): void {\n if (!this.visible() || !this.closeOnEscape) {\n return;\n }\n\n this.closeDrawer();\n }\n\n private _restoreFocus(): void {\n this._elementToRefocus?.focus();\n this._elementToRefocus = null;\n }\n\n private _getCustomTemplate(type: string): TemplateRef<any> | null {\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\n }\n\n private getHeaderTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('header') ?? null;\n }\n\n private getBodyTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('body') ?? null;\n }\n\n private getFooterTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('footer') ?? null;\n }\n\n private _getTemplates(): void {\n this.headerTemplate = this.getHeaderTemplate();\n this.bodyTemplate = this.getBodyTemplate();\n this.footerTemplate = this.getFooterTemplate();\n }\n}\n","@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeDrawer()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n [cdkTrapFocus]=\"visible()\"\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"drawer\"\n [class.drawer--open]=\"visible()\"\n [class.drawer--large-size]=\"largeSized\"\n [attr.role]=\"visible() ? 'dialog' : null\"\n [attr.aria-modal]=\"visible() ? true : null\"\n [attr.aria-labelledby]=\"headerTemplate ? null : titleId\"\n [attr.aria-label]=\"headerTemplate ? ariaLabel : null\"\n [attr.inert]=\"visible() ? null : ''\"\n [attr.aria-hidden]=\"visible() ? null : 'true'\"\n >\n <div class=\"drawer__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <h2\n [id]=\"titleId\"\n tabindex=\"-1\"\n class=\"drawer__header__title\"\n >\n {{ header }}\n </h2>\n }\n @if (closable) {\n <button\n type=\"button\"\n class=\"drawer__header__close\"\n [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n (click)=\"closeDrawer()\"\n >\n <i\n class=\"fas fa-times\"\n [attr.aria-hidden]=\"true\"\n ></i>\n </button>\n }\n </div>\n <div class=\"drawer__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"drawer__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\nimport { DrawerComponent } from './drawer.component';\n\n@NgModule({\n imports: [DrawerComponent],\n exports: [DrawerComponent, TemplateModule],\n})\nexport class DrawerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-drawer.mjs","sources":["../../projects/angular-components/drawer/src/lib/drawer/drawer.component.ts","../../projects/angular-components/drawer/src/lib/drawer/drawer.component.html","../../projects/angular-components/drawer/src/lib/drawer/drawer.module.ts","../../projects/angular-components/drawer/src/seniorsistemas-angular-components-drawer.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n contentChild,\n ContentChildren,\n effect,\n Input,\n model,\n OnDestroy,\n QueryList,\n TemplateRef,\n} from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DEPRECATED_CONFIG, DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { FooterComponent } from '@seniorsistemas/angular-components/structure';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de painel lateral deslizante (drawer) que aparece sobre o conteúdo\n * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé\n * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.\n *\n * Também responde ao seletor legado `s-sidebar`.\n *\n * @example\n * ```html\n * <s-drawer [(visible)]=\"drawerOpen\" header=\"Filtros\" [closable]=\"true\">\n * <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n * </s-drawer>\n * ```\n *\n * @category Overlay\n */\n@Component({\n selector: 's-drawer, s-sidebar',\n templateUrl: './drawer.component.html',\n styleUrls: ['./drawer.component.scss'],\n host: {\n '(document:keydown.escape)': 'handleEscape()',\n },\n hostDirectives: [DeprecatedSelectorDirective],\n providers: [\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-sidebar',\n newSelector: 's-drawer',\n removalVersion: '20.0.0',\n },\n },\n ],\n animations: [\n trigger('visibilityChanged', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('300ms', style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate('300ms', style({ transform: 'translateX(100%)' })),\n ]),\n ]),\n ],\n standalone: true,\n imports: [CdkTrapFocus, NgTemplateOutlet, TranslateModule],\n})\nexport class DrawerComponent implements AfterContentInit, OnDestroy {\n @ContentChildren(TemplateDirective)\n public templates: QueryList<TemplateDirective> | null = null;\n\n /**\n * @description Controla a visibilidade do drawer. Suporta two-way binding via `[(visible)]`.\n *\n * @default false\n */\n public visible = model<boolean>(false);\n\n /**\n * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do drawer.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Quando `true`, clicar no backdrop (área escurecida fora do drawer) fecha o painel.\n *\n * @default true\n */\n @Input()\n public dismissible = true;\n\n /**\n * @description Quando `true`, pressionar a tecla Escape fecha o drawer.\n *\n * @default true\n */\n @Input()\n public closeOnEscape = true;\n\n /**\n * @description Texto exibido no cabeçalho padrão do drawer.\n * Pode ser substituído por um template customizado via `sTemplate=\"header\"`.\n */\n @Input()\n public header?: string;\n\n /**\n * @description Nome acessível do drawer, usado quando o cabeçalho é um template\n * customizado via `sTemplate=\"header\"` (nesse caso não há `header` para associar\n * via `aria-labelledby`). Ignorado quando `header` está definido.\n */\n @Input()\n public ariaLabel?: string;\n\n /**\n * @description Quando `true`, aumenta a largura do drawer para acomodar mais conteúdo.\n *\n * @default false\n */\n @Input()\n public largeSized = false;\n\n /**\n * @description Quando `true`, mantém o conteúdo do drawer no DOM mesmo quando oculto,\n * preservando o estado interno dos componentes filhos.\n *\n * @default false\n */\n @Input()\n public cache = false;\n\n /**\n * @description Função de confirmação chamada antes de fechar o drawer.\n * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.\n */\n @Input()\n public set registerConfirmClose(fn: () => boolean) {\n this._confirmClose = fn;\n }\n\n /** @description Id único usado para associar o título ao painel via `aria-labelledby`. */\n protected readonly titleId = randomHash('drawer-title');\n\n public headerTemplate: TemplateRef<unknown> | null = null;\n public bodyTemplate: TemplateRef<unknown> | null = null;\n public footerTemplate: TemplateRef<unknown> | null = null;\n\n protected readonly footerComponent = contentChild(FooterComponent);\n\n private _confirmClose = () => true;\n\n private _elementToRefocus: HTMLElement | null = null;\n\n private readonly _scrollLock = createScrollLock();\n\n private readonly visibleEffect = effect(() => {\n const visible = this.visible();\n if (visible) {\n this._scrollLock.lock();\n this._elementToRefocus = document.activeElement as HTMLElement | null;\n } else {\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n });\n\n public ngAfterContentInit(): void {\n this._getTemplates();\n }\n\n public ngOnDestroy(): void {\n this.visibleEffect.destroy();\n this._scrollLock.unlock();\n this._restoreFocus();\n }\n\n public closeDrawer(): void {\n if (this._confirmClose()) {\n this.visible.set(false);\n }\n }\n\n public handleEscape(): void {\n if (!this.visible() || !this.closeOnEscape) {\n return;\n }\n\n this.closeDrawer();\n }\n\n private _restoreFocus(): void {\n this._elementToRefocus?.focus();\n this._elementToRefocus = null;\n }\n\n private _getCustomTemplate(type: string): TemplateRef<any> | null {\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\n }\n\n private getHeaderTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('header') ?? null;\n }\n\n private getBodyTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('body') ?? null;\n }\n\n private getFooterTemplate(): TemplateRef<unknown> | null {\n return this._getCustomTemplate('footer') ?? null;\n }\n\n private _getTemplates(): void {\n this.headerTemplate = this.getHeaderTemplate();\n this.bodyTemplate = this.getBodyTemplate();\n this.footerTemplate = this.getFooterTemplate();\n }\n}\n","@if (visible()) {\n <div\n class=\"backdrop\"\n (click)=\"dismissible && closeDrawer()\"\n ></div>\n}\n\n@if (cache || visible()) {\n <div\n [cdkTrapFocus]=\"visible()\"\n [cdkTrapFocusAutoCapture]=\"visible()\"\n [@visibilityChanged]\n class=\"drawer\"\n [class.drawer--open]=\"visible()\"\n [class.drawer--large-size]=\"largeSized\"\n [attr.role]=\"visible() ? 'dialog' : null\"\n [attr.aria-modal]=\"visible() ? true : null\"\n [attr.aria-labelledby]=\"headerTemplate ? null : titleId\"\n [attr.aria-label]=\"headerTemplate ? ariaLabel : null\"\n [attr.inert]=\"visible() ? null : ''\"\n [attr.aria-hidden]=\"visible() ? null : 'true'\"\n >\n <div class=\"drawer__header\">\n @if (headerTemplate) {\n <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n } @else {\n <h2\n [id]=\"titleId\"\n tabindex=\"-1\"\n class=\"drawer__header__title\"\n >\n {{ header }}\n </h2>\n }\n @if (closable) {\n <button\n type=\"button\"\n class=\"drawer__header__close\"\n [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n (click)=\"closeDrawer()\"\n >\n <i\n class=\"fas fa-times\"\n [attr.aria-hidden]=\"true\"\n ></i>\n </button>\n }\n </div>\n <div class=\"drawer__body\">\n @if (bodyTemplate) {\n <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n } @else {\n <ng-content select=\":not(s-footer)\"></ng-content>\n }\n </div>\n @if (footerTemplate || footerComponent()) {\n <div class=\"drawer__footer\">\n @if (footerTemplate) {\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n } @else {\n <ng-content select=\"s-footer\"></ng-content>\n }\n </div>\n }\n </div>\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\nimport { DrawerComponent } from './drawer.component';\n\n/**\n * @deprecated Será removido na v20. Importe diretamente o standalone `DrawerComponent` (de\n * `@seniorsistemas/angular-components/drawer`) no lugar deste módulo.\n *\n * Este módulo também reexportava `TemplateDirective` (`@seniorsistemas/angular-components/template`, usado em\n * templates por `[sTemplate]`). Se o seu template usa algum deles, importe-o diretamente.\n *\n * Migração automática (também executada pelo `ng update` na v20):\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\n */\n@NgModule({\n imports: [DrawerComponent],\n exports: [DrawerComponent, TemplateModule],\n})\nexport class DrawerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}