@seniorsistemas/angular-components 19.0.5 → 19.0.6

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +12 -12
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -29,36 +29,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
29
29
  args: [{ selector: 's-autocomplete-chip', standalone: true, template: "<div class=\"flex items-center gap-2 rounded-[4px] border border-grayscale-50 bg-grayscale-10 px-2\">\n <span class=\"text-nowrap\">{{ suggestionLabel() ? suggestion()[suggestionLabel()!] : suggestion() }}</span>\n <button (click)=\"removeSuggestion()\">\n <i class=\"far fa-times\"></i>\n </button>\n</div>\n" }]
30
30
  }] });
31
31
 
32
+ /**
33
+ * @description Componente de autocompletar com sugestões dinâmicas, suportando seleção simples
34
+ * e múltipla. Implementa {@link ControlValueAccessor} para integração com formulários Angular.
35
+ * Oferece carregamento lazy de sugestões via output `lazyLoad`, virtualização de lista,
36
+ * seleção com chips no modo múltiplo e acessibilidade ARIA completa (combobox role).
37
+ *
38
+ * @example
39
+ * ```html
40
+ * <s-autocomplete
41
+ * formControlName="cidade"
42
+ * placeholder="Buscar cidade..."
43
+ * [suggestions]="cidades"
44
+ * suggestionLabel="nome"
45
+ * [delay]="400"
46
+ * (completeMethod)="buscar($event)" />
47
+ * ```
48
+ *
49
+ * @category Inputs
50
+ */
32
51
  class AutocompleteComponent {
33
52
  static nextId = 0;
53
+ /** @description Lista estática de sugestões exibidas no dropdown. No modo lazy, prefira usar o output `lazyLoad`. @default [] */
34
54
  suggestions = input([]);
55
+ /** @description Texto exibido no input quando nenhum valor está selecionado. */
35
56
  placeholder = input();
57
+ /** @description Chave do objeto de sugestão cujo valor será emitido ao formulário. */
36
58
  suggestionValue = input();
59
+ /** @description Chave do objeto de sugestão usada como texto de exibição no dropdown. */
37
60
  suggestionLabel = input();
61
+ /** @description Torna o campo somente leitura, impedindo digitação e seleção. @default false */
38
62
  readonly = input(false);
63
+ /** @description Mensagem exibida no dropdown quando nenhuma sugestão é encontrada. */
39
64
  emptyMessage = input();
65
+ /** @description Tempo de espera em ms após a última tecla antes de acionar a busca por sugestões. @default 300 */
40
66
  delay = input(300);
67
+ /** @description Exibe estado de erro visual no campo de input. @default false */
41
68
  invalid = input(false);
69
+ /** @description Habilita virtualização da lista de sugestões para melhor performance com grandes volumes de dados. @default false */
42
70
  virtualScroll = input(false);
71
+ /** @description Altura fixa em pixels de cada item no virtual scroll. @default 37 */
43
72
  virtualScrollItemSize = input(37);
73
+ /** @description Ativa o carregamento assíncrono de sugestões via o output `lazyLoad`. @default false */
44
74
  lazy = input(false);
75
+ /** @description Exibe um botão de dropdown para abrir a lista sem necessidade de digitação. @default false */
45
76
  dropdown = input(false);
77
+ /** @description Quando `true`, o valor do campo deve ser obrigatoriamente uma das opções sugeridas. @default false */
46
78
  forceSelection = input(false);
79
+ /** @description Exibe ícone de checkmark ao lado da opção selecionada no dropdown. @default false */
47
80
  checkmark = input(false);
81
+ /** @description Habilita seleção de múltiplos itens exibidos como chips no campo. @default false */
48
82
  multiple = input(false);
83
+ /** @description Quantidade mínima de caracteres necessária para acionar a busca por sugestões. @default 1 */
49
84
  minLengthToSearch = input(1);
85
+ /** @description Classe CSS adicional aplicada ao elemento `<input>` interno. @default '' */
50
86
  inputClass = input('');
87
+ /** @description Chave do objeto usada para comparação de identidade entre opções, evitando duplicatas na seleção múltipla. */
51
88
  dataKey = input();
89
+ /** @description Valor atualmente selecionado no modo simples, via two-way binding. */
52
90
  value = model();
91
+ /** @description Lista de valores selecionados no modo múltiplo, via two-way binding. @default [] */
53
92
  values = model([]);
93
+ /** @description Controla o estado desabilitado do componente via two-way binding. @default false */
54
94
  disabled = model(false);
95
+ /**
96
+ * @description Emitido no modo lazy quando o usuário digita e o componente está pronto para receber novas sugestões.
97
+ * O evento contém `query` (texto digitado) e `response` (função callback para fornecer os dados).
98
+ */
55
99
  lazyLoad = output();
100
+ /** @description Emitido quando o usuário seleciona uma sugestão do dropdown. */
56
101
  selected = output();
102
+ /** @description Emitido quando o usuário remove uma sugestão selecionada (modo múltiplo). */
57
103
  unselected = output();
104
+ /** @description Emitido quando o campo perde o foco. */
58
105
  blurred = output();
106
+ /** @description Emitido quando o campo é limpo pelo usuário. */
59
107
  cleared = output();
108
+ /** @description Emitido a cada pressionamento de tecla no campo de input. */
60
109
  keyUp = output();
110
+ /** @description Emitido quando o campo recebe foco. */
61
111
  focused = output();
112
+ /** @description Emitido quando o usuário digita no campo, fornecendo o texto atual para filtragem de sugestões. */
62
113
  completeMethod = output();
63
114
  focusedIndex = signal(-1);
64
115
  isOpen = signal(false);
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-autocomplete.mjs","sources":["../../projects/angular-components/autocomplete/src/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.ts","../../projects/angular-components/autocomplete/src/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.html","../../projects/angular-components/autocomplete/src/lib/autocomplete/autocomplete.component.ts","../../projects/angular-components/autocomplete/src/lib/autocomplete/autocomplete.component.html","../../projects/angular-components/autocomplete/src/seniorsistemas-angular-components-autocomplete.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-autocomplete-chip',\n templateUrl: './autocomplete-chip.component.html',\n standalone: true,\n})\nexport class AutocompleteChipComponent<T> {\n public suggestion = input.required<T>();\n public suggestionLabel = input<keyof T>();\n\n public suggestionRemoved = output<T>();\n\n public removeSuggestion() {\n this.suggestionRemoved.emit(this.suggestion());\n }\n}\n","<div class=\"flex items-center gap-2 rounded-[4px] border border-grayscale-50 bg-grayscale-10 px-2\">\n <span class=\"text-nowrap\">{{ suggestionLabel() ? suggestion()[suggestionLabel()!] : suggestion() }}</span>\n <button (click)=\"removeSuggestion()\">\n <i class=\"far fa-times\"></i>\n </button>\n</div>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, switchMap } from 'rxjs/operators';\n\nimport { AutocompleteChipComponent } from './components/autocomplete-chip/autocomplete-chip.component';\n\n/**\n * Representa um item de sugestão encapsulado, utilizado em componentes de autocomplete.\n * @template T Tipo dos dados associados à sugestão.\n * @property data Os dados da sugestão.\n * @property id Identificador único da sugestão.\n * @property [isSelected] Indica se a sugestão está selecionada.\n */\ninterface SuggestionWrapper<T> {\n data: T;\n id: string;\n isSelected?: boolean;\n}\n\n@Component({\n selector: 's-autocomplete',\n standalone: true,\n templateUrl: './autocomplete.component.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n OverlayModule,\n ScrollingModule,\n TranslateModule,\n AutocompleteChipComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutocompleteComponent),\n multi: true,\n },\n ],\n host: {\n role: 'combobox',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"listbox\"',\n '[attr.aria-owns]': 'isOpen() ? \"dropdown-container-\" + componentId : null',\n '(window:resize)': 'onWindowResize()',\n },\n})\nexport class AutocompleteComponent<T> implements ControlValueAccessor {\n private static nextId = 0;\n\n public suggestions = input<T[]>([]);\n public placeholder = input<string>();\n public suggestionValue = input<keyof T>();\n public suggestionLabel = input<keyof T>();\n public readonly = input(false);\n public emptyMessage = input<string>();\n public delay = input(300);\n public invalid = input(false);\n public virtualScroll = input(false);\n public virtualScrollItemSize = input(37);\n public lazy = input(false);\n public dropdown = input(false);\n public forceSelection = input(false);\n public checkmark = input(false);\n public multiple = input(false);\n public minLengthToSearch = input(1);\n public inputClass = input<string>('');\n public dataKey = input<keyof T>();\n\n public value = model<T | null>();\n public values = model<T[]>([]);\n public disabled = model(false);\n\n public lazyLoad = output<{ query: string; response: (data: T[]) => void }>();\n public selected = output<T>();\n public unselected = output<T>();\n public blurred = output<Event>();\n public cleared = output();\n public keyUp = output<Event>();\n public focused = output<any>();\n public completeMethod = output<{ query: string }>();\n\n public focusedIndex = signal(-1);\n public isOpen = signal(false);\n public filteredSuggestions = signal<SuggestionWrapper<T>[]>([]);\n public showEmptyMessage = signal(false);\n public filterText = signal('');\n public inputValue = signal('');\n public loading = signal(false);\n\n public componentId = `autocomplete_${AutocompleteComponent.nextId++}`;\n public inputEl = viewChild<ElementRef>('inputEl');\n\n private _inputSubject$ = new Subject<string>();\n private _lazyLoadSubject$ = new Subject<string>();\n private _destroyRef = inject(DestroyRef);\n private _onChange?: (value: any | any[]) => void;\n private _onTouched?: () => void;\n\n /**\n * Computed que retorna uma lista de sugestões do tipo `SuggestionWrapper<T>`,\n * adicionando um identificador único a cada sugestão.\n * @returns Uma lista de sugestões processadas com identificadores únicos.\n */\n public internalSuggestion = computed<SuggestionWrapper<T>[]>(() => {\n const opts = this.suggestions();\n return this._addIdToSuggestions(opts);\n });\n\n /**\n * Retorna um conjunto (`Set`) com os IDs das sugestões selecionadas.\n */\n public selectedSuggestionIds = computed(() => {\n if (!this.multiple()) {\n return new Set<string>();\n }\n\n const currentValues = this.values();\n\n return new Set(\n currentValues.map((value) => {\n return this.internalSuggestion().find((s) => JSON.stringify(s.data) === JSON.stringify(value))?.id;\n }),\n );\n });\n\n /**\n * Retorna uma lista de sugestões filtradas, enriquecidas com a propriedade `isSelected`.\n * Cada sugestão recebe um campo booleano `isSelected` indicando se ela está selecionada,\n * com base nos IDs das sugestões selecionadas e no valor da sugestão.\n * @returns Uma lista de sugestões filtradas, cada uma com a propriedade adicional `isSelected`.\n */\n public enrichedFilteredSuggestions = computed(() => {\n const filtered = this.filteredSuggestions();\n const selectedIds = this.selectedSuggestionIds();\n\n return filtered.map((suggestion) => ({\n ...suggestion,\n isSelected: selectedIds.has(suggestion.id),\n }));\n });\n\n constructor() {\n this._validateInputs();\n this._setupInputDebounce();\n this._setupLazyLoadDebounce();\n }\n\n /**\n * Define o valor do autocomplete.\n * @param value Valor a ser definido, único ou array, conforme seleção múltipla.\n * @throws Se múltiplo for falso e value for array.\n */\n public writeValue(value: T | T[]): void {\n const suggestionLabel = this.suggestionLabel();\n\n if (value && this.multiple()) {\n if (Array.isArray(value)) {\n this.values.set(value);\n } else {\n this.values.set([value]);\n }\n } else {\n if (Array.isArray(value)) {\n throw new Error('The value must not be an array when multiple is false.');\n } else {\n this.value.set(value);\n }\n\n this.inputValue.set(!value ? '' : suggestionLabel ? String(value[suggestionLabel]) : String(value));\n }\n }\n\n /**\n * Registra uma função de callback que será chamada sempre que o valor do componente mudar.\n * @param onChange Função a ser chamada quando o valor mudar. Recebe o novo valor como argumento, que pode ser um único valor ou um array de valores.\n */\n public registerOnChange(onChange: (value: any | any[]) => void): void {\n this._onChange = onChange;\n }\n\n /**\n * Registra uma função de callback que será chamada quando o componente for tocado (perder o foco).\n * @param onTouched Função de callback a ser chamada quando o componente for tocado.\n */\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n /**\n * Define o estado de desabilitado do componente.\n * @param disabled Indica se o componente deve ser desabilitado (`true`) ou habilitado (`false`).\n */\n public setDisabledState?(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n\n /**\n * Manipula o evento de entrada do usuário no campo de texto do autocomplete.\n * Este método é chamado sempre que o usuário digita algo no campo de entrada.\n * Ele executa as seguintes ações:\n * - Dispara o callback de \"touched\" para controle de formulários.\n * - Obtém o valor atual do campo de entrada.\n * - Se o modo lazy estiver ativado, emite o evento de lazyLoad com a consulta e abre o painel de sugestões.\n * - Caso contrário, atualiza o texto de filtro, notifica os observadores e abre o painel de sugestões se houver sugestões disponíveis.\n * @param event Evento de entrada do tipo `Event` proveniente do campo de texto.\n */\n public onInput(event: Event): void {\n this._onTouched?.();\n\n const value = (event.target as HTMLInputElement).value;\n\n if (this.lazy()) {\n this._lazyLoadSubject$.next(value);\n this.isOpen.set(true);\n return;\n }\n\n this.filterText.set(value);\n\n this.completeMethod.emit({ query: value });\n\n this._inputSubject$.next(value);\n\n if (this.suggestions()) {\n this.isOpen.set(true);\n }\n }\n\n /**\n * Manipula o evento de perda de foco (blur) do campo de entrada do autocomplete.\n * Este método verifica se o valor digitado pelo usuário corresponde exatamente a algum dos itens sugeridos.\n * - Se houver correspondência:\n * - No modo múltiplo (`multiple`), adiciona o item selecionado à lista de valores, caso ainda não esteja presente.\n * - No modo simples, seleciona o item correspondente se ainda não estiver selecionado.\n * - Se não houver correspondência, limpa o campo de entrada.\n */\n public onInputBlur(event: Event): void {\n const inputValue = String(this.inputValue()).toLowerCase();\n const suggestions = this.internalSuggestion();\n\n const match = suggestions.find(({ data }) => {\n const label = this.suggestionLabel() ? data[this.suggestionLabel()!] : data;\n return String(label).toLowerCase() === inputValue;\n });\n\n if (match) {\n if (this.multiple()) {\n const currentValues = this.values();\n const exists = currentValues.some(\n (value) =>\n (this.suggestionValue() ? value[this.suggestionValue()!] : value) ===\n (this.suggestionValue() ? match.data[this.suggestionValue()!] : match.data),\n );\n if (!exists) {\n this.values.set([...currentValues, match.data]);\n this._onChange?.(this.values());\n }\n this.inputValue.set('');\n } else {\n if (this.value() !== match.data) {\n this.selectSuggestion(match.data);\n }\n }\n } else {\n this.inputValue.set('');\n }\n }\n\n /**\n * Dispara o evento de foco quando o campo de entrada recebe foco.\n * @param event O evento de foco disparado pelo elemento de entrada.\n */\n public onInputFocus(event: Event): void {\n this.focused.emit(event);\n }\n\n /**\n * Manipula eventos de teclado no componente de autocomplete.\n * Este método gerencia a navegação e seleção de sugestões usando as teclas do teclado.\n * - 'ArrowDown': Move o foco para a próxima sugestão.\n * - 'ArrowUp': Move o foco para a sugestão anterior.\n * - 'Enter' ou 'Tab': Seleciona a sugestão atualmente focada e fecha a lista de sugestões.\n * - 'Escape': Fecha a lista de sugestões sem selecionar nenhum item.\n * @param event O evento de teclado disparado pelo usuário.\n */\n public onKeyDown(event: KeyboardEvent): void {\n const suggestions = this.filteredSuggestions();\n\n this._onTouched?.();\n\n const _selectSuggestion = () => {\n if (this.focusedIndex() >= 0 && this.focusedIndex() < suggestions.length) {\n event.preventDefault();\n this.selectSuggestion(suggestions[this.focusedIndex()].data);\n }\n };\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._focusNextSuggestion(suggestions);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this._focusPreviousSuggestion();\n break;\n case 'Enter':\n case 'Tab':\n _selectSuggestion();\n this.isOpen.set(false);\n break;\n case 'Escape':\n this.isOpen.set(false);\n break;\n }\n }\n\n /**\n * Emite um evento quando uma tecla é liberada no componente. *\n * @param event O evento de teclado associado à tecla liberada.\n */\n public onKeyUp(event: Event): void {\n this.keyUp.emit(event);\n }\n\n /**\n * Fecha o dropdown em eventos de redimensionamento de janela.\n */\n public onWindowResize(): void {\n if (this.isOpen()) {\n this.isOpen.set(false);\n }\n }\n\n /**\n * Seleciona uma sugestão da lista de sugestões.\n * Se o modo múltiplo estiver ativado (`multiple()` retorna true), adiciona a sugestão à lista de suggestões selecionadas,\n * caso ela ainda não esteja presente. Em seguida, limpa o valor do campo de entrada.\n * Se o modo múltiplo não estiver ativado, define a sugestão como valor selecionado e atualiza o campo de entrada\n * com o rótulo correspondente.\n * Em ambos os casos, dispara o callback `_onChange` com o novo valor e fecha o painel de sugestões.\n * @param suggestion - A sugestão a ser selecionada.\n */\n public selectSuggestion(suggestion: T): void {\n if (this.multiple()) {\n const currentValues = this.values();\n const exists = currentValues.some(\n (value) =>\n (this.suggestionValue() ? value[this.suggestionValue()!] : value) ===\n (this.suggestionValue() ? suggestion[this.suggestionValue()!] : suggestion),\n );\n\n if (!exists) {\n this.values.set([...currentValues, suggestion]);\n this._onChange?.(this.values());\n }\n\n this.inputValue.set('');\n } else {\n this.value.set(suggestion);\n const _value = this.suggestionValue() ? suggestion[this.suggestionValue()!] : suggestion;\n const _inputValue = String(this.suggestionLabel() ? suggestion[this.suggestionLabel()!] : suggestion);\n\n this.inputValue.set(_inputValue);\n this._onChange?.(_value);\n }\n\n this.selected.emit(suggestion);\n this.isOpen.set(false);\n }\n\n /**\n * Limpa o valor selecionado no componente de autocomplete.\n * Se o modo múltiplo estiver ativado, remove todos os valores selecionados.\n * Caso contrário, define o valor como nulo.\n * Também limpa as sugestões filtradas, fecha o painel de sugestões\n * e limpa o valor do campo de entrada.\n */\n public clear(): void {\n if (this.multiple()) {\n this.values.set([]);\n this._onChange?.(this.values());\n } else {\n this.value.set(null);\n this._onChange?.(this.value());\n }\n\n this.filteredSuggestions.set([]);\n this.isOpen.set(false);\n this.inputValue.set('');\n this.cleared.emit();\n }\n\n /**\n * Alterna a exibição do dropdown de sugestões do autocomplete.\n * Este método configura o debounce do input, verifica se há sugestões filtradas\n * e, caso não haja sugestões e o texto do filtro esteja vazio, redefine as sugestões filtradas.\n * Por fim, alterna o estado de abertura do dropdown.\n */\n public toggleDropdown(): void {\n this._setupInputDebounce();\n\n if (this.filterText() === '') {\n if (this.lazy()) {\n this._lazyLoadSubject$.next('');\n } else {\n this.resetFilteredSuggestions();\n }\n }\n\n this.isOpen.set(!this.isOpen());\n }\n\n /**\n * Função utilizada para otimizar a renderização de listas no Angular, permitindo que o framework\n * identifique cada item de forma única pelo seu `id`. Deve ser utilizada como função de `trackBy`\n * em diretivas como `*ngFor`.\n * @param _ - Índice do item na lista (não utilizado).\n * @param item - Objeto do tipo `SuggestionWrapper<T>` que representa o item atual.\n * @returns O identificador único (`id`) do item.\n */\n public trackById(_: number, item: SuggestionWrapper<T>): string {\n return item.id;\n }\n\n /**\n * Remove uma sugestão da lista de valores selecionados.\n * @param suggestion O item a ser removido da lista de sugestões.\n */\n public removeSuggestion(suggestion: T): void {\n const suggestionValue = this.suggestionValue();\n\n this.values.set(\n this.values().filter((value) => {\n if (suggestionValue) {\n return value[suggestionValue] !== suggestion[suggestionValue];\n }\n return value !== suggestion;\n }),\n );\n this._onChange?.(this.values());\n this.unselected.emit(suggestion);\n }\n\n /**\n * Reinicia a lista de sugestões filtradas.\n * Se o modo lazy estiver ativado, emite um evento para carregar sugestões com uma consulta vazia.\n * Em seguida, redefine as sugestões filtradas para o valor retornado por `internalSuggestion()`.\n * @private\n */\n private resetFilteredSuggestions(): void {\n if (this.lazy()) {\n this._lazyLoadSubject$.next('');\n } else {\n this.filteredSuggestions.set(this.internalSuggestion());\n }\n }\n\n /**\n * Move o foco para a próxima sugestão na lista de sugestões, se houver.\n * @private\n * @param suggestions Lista de sugestões disponíveis.\n */\n private _focusNextSuggestion(suggestions: SuggestionWrapper<T>[]): void {\n let nextIndex = this.focusedIndex() + 1;\n\n if (nextIndex < suggestions.length) {\n this.focusedIndex.set(nextIndex);\n this._scrollToFocusedSuggestion();\n }\n }\n\n /**\n * Move o foco para a sugestão anterior na lista de sugestões, se houver.\n * @private\n */\n private _focusPreviousSuggestion(): void {\n let prevIndex = this.focusedIndex() - 1;\n\n if (prevIndex >= 0) {\n this.focusedIndex.set(prevIndex);\n this._scrollToFocusedSuggestion();\n }\n }\n\n /**\n * Rola a lista de sugestões para garantir que a sugestão atualmente focada esteja visível.\n * @private\n */\n private _scrollToFocusedSuggestion(): void {\n const id = this.filteredSuggestions()[this.focusedIndex()]?.id;\n\n if (!id) {\n return;\n }\n\n const el = document.getElementById(id);\n el?.scrollIntoView({ block: 'nearest' });\n }\n\n /**\n * Adiciona um identificador único a cada sugestão fornecida.\n * @private\n * @param suggestions - Um array de sugestões do tipo T.\n * @returns Um array de objetos `SuggestionWrapper<T>`, cada um contendo a sugestão original e um identificador único.\n */\n private _addIdToSuggestions(suggestions: T[]): SuggestionWrapper<T>[] {\n return (\n suggestions?.map((suggestion) => {\n return {\n data: suggestion,\n id: this.dataKey()\n ? String(suggestion[this.dataKey()!])\n : ((typeof suggestion !== 'object'\n ? suggestion?.toString()\n : Object.values(suggestion as Object).join('_')) ?? ''),\n };\n }) ?? []\n );\n }\n\n /**\n * Configura o debounce e switchMap para lazy loading, resolvendo race conditions.\n * Este método utiliza switchMap para cancelar requisições anteriores automaticamente\n * quando uma nova busca é iniciada, evitando que resultados antigos sobrescrevam\n * resultados mais recentes.\n * @private\n */\n private _setupLazyLoadDebounce(): void {\n this._lazyLoadSubject$\n .pipe(\n debounceTime(this.delay()),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading.set(true);\n // TODO: Manter fechado o dropdownd até a busca estiver concluída\n return new Observable<T[]>((subscriber) => {\n const timeoutId = setTimeout(() => {\n if (!subscriber.closed) {\n subscriber.error(new Error('Lazy load timeout'));\n }\n }, 30000);\n\n const responseCallback = (data: T[]) => {\n clearTimeout(timeoutId);\n if (!subscriber.closed) {\n subscriber.next(data);\n subscriber.complete();\n }\n };\n\n this.lazyLoad.emit({ query, response: responseCallback });\n });\n }),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe({\n next: (data: T[]) => {\n this.loading.set(false);\n // TODO: Abrir o dropdown somente aqui\n const wrappedSuggestions = this._addIdToSuggestions(data);\n this.filteredSuggestions.set(wrappedSuggestions);\n this.showEmptyMessage.set(wrappedSuggestions.length === 0);\n },\n error: (error) => {\n this.loading.set(false);\n // TODO: Abrir o dropdown somente aqui\n console.error('Lazy load error:', error);\n this.filteredSuggestions.set([]);\n this.showEmptyMessage.set(true);\n },\n });\n }\n\n /**\n * Configura o debounce para o input do autocomplete.\n * Este método utiliza um Subject para escutar as mudanças no valor do input,\n * aplicando um debounce com o tempo definido por `this.delay()`. Quando um novo valor é emitido:\n * - Se houver valor, filtra as sugestões com base no texto digitado e atualiza a lista de sugestões filtradas.\n * - Se não houver valor e o dropdown estiver ativo, reseta as sugestões filtradas.\n * - Caso contrário, limpa a lista de sugestões filtradas.\n * Também atualiza o estado da mensagem de lista vazia e, se a seleção for livre (`forceSelection` for falso),\n * propaga a mudança de valor para o formulário.\n * @private\n */\n private _setupInputDebounce(): void {\n this._inputSubject$\n .pipe(\n debounceTime(this.delay()),\n distinctUntilChanged(),\n filter((value) => value.length >= this.minLengthToSearch() || value.length === 0),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe((value) => {\n if (value) {\n this.filteredSuggestions.set(\n this.internalSuggestion().filter(({ data }) => {\n const label = String(this.suggestionLabel() ? data[this.suggestionLabel()!] : data);\n return label.toLowerCase().includes(value.toLowerCase());\n }),\n );\n this.showEmptyMessage.set(this.filteredSuggestions().length === 0);\n } else if (this.dropdown()) {\n this.resetFilteredSuggestions();\n } else {\n this.filteredSuggestions.set([]);\n }\n\n if (!this.forceSelection()) {\n this._onChange?.(value);\n }\n });\n }\n\n /**\n * Valida as entradas do componente de autocomplete.\n * @private\n * @throws {Error} Se as sugestões forem objetos e `suggestionLabel` não for fornecido.\n */\n private _validateInputs(): void {\n const suggestions = this.suggestions();\n\n if (!suggestions.length) {\n return;\n }\n\n const hasObjectSuggestions = suggestions.some(\n (suggestion) => typeof suggestion === 'object' && suggestion !== null,\n );\n\n if (hasObjectSuggestions) {\n if (!this.suggestionLabel()) {\n throw new Error('The suggestionLabel input must be provided when suggestions are objects.');\n }\n }\n }\n}\n","<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"flex h-[35px] w-full items-center overflow-hidden rounded-[4px] border focus-within:border-2 focus-within:border-primary hover:bg-grayscale-10\"\n [class]=\"inputClass()\"\n [ngClass]=\"{\n 'pointer-events-none border-grayscale-20 bg-grayscale-5 text-grayscale-30': disabled(),\n 'pointer-events-auto border-grayscale-30 bg-grayscale-0 text-grayscale-90': !disabled(),\n 'border-criticality-red': invalid(),\n }\"\n>\n <div\n class=\"flex flex-grow gap-2 px-2\"\n [ngClass]=\"{\n 'border-r': dropdown(),\n 'border-grayscale-20': dropdown() && disabled(),\n 'border-grayscale-30 focus-within:border-r-2 focus-within:border-r-primary': dropdown() && !disabled(),\n 'bg-grayscale-5': disabled(),\n 'bg-grayscale-0': !disabled(),\n }\"\n >\n @if (multiple() && values().length > 0) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (suggestion of values(); track suggestion) {\n <s-autocomplete-chip\n [suggestion]=\"suggestion\"\n [suggestionLabel]=\"suggestionLabel()\"\n (suggestionRemoved)=\"removeSuggestion($event)\"\n ></s-autocomplete-chip>\n }\n </div>\n }\n <input\n #inputEl\n class=\"min-h-[35px] grow outline-none\"\n type=\"text\"\n [placeholder]=\"placeholder() ?? 'platform.angular_components.type_to_search' | translate\"\n [readOnly]=\"readonly()\"\n [(ngModel)]=\"inputValue\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-autocomplete]=\"multiple() ? 'list' : 'both'\"\n [attr.aria-activedescendant]=\"focusedIndex() >= 0 ? filteredSuggestions()[focusedIndex()].id : null\"\n role=\"searchbox\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keyUp)=\"onKeyUp($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\"\n />\n\n @if (loading()) {\n <div class=\"flex items-center justify-center\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"animate-spin\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"#428bca\"\n stroke-width=\"2\"\n fill=\"none\"\n stroke-dasharray=\"56.5\"\n stroke-dashoffset=\"10\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n } @else {\n @if (value() && !this.disabled()) {\n <button\n class=\"px-2\"\n (click)=\"clear()\"\n tabindex=\"-1\"\n >\n <i class=\"far fa-times text-grayscale-60\"></i>\n </button>\n }\n }\n </div>\n\n @if (dropdown()) {\n <button\n class=\"flex h-full w-[35px] flex-shrink-0 flex-grow-0 items-center justify-center hover:bg-grayscale-10\"\n (click)=\"toggleDropdown()\"\n >\n <i\n class=\"fas text-grayscale-90\"\n [class.fa-caret-down]=\"!isOpen()\"\n [class.fa-caret-up]=\"isOpen()\"\n ></i>\n </button>\n }\n</div>\n\n@if (showEmptyMessage() || (filteredSuggestions().length > 0 && !readonly())) {\n <ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"isOpen.set(false)\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (detach)=\"isOpen.set(false)\"\n >\n <div\n [id]=\"'dropdown-container-' + componentId\"\n class=\"mt-0.5 rounded-[4px] bg-grayscale-0 py-1 shadow\"\n [style.width.px]=\"containerDiv.offsetWidth\"\n >\n <ul\n class=\"max-h-52 overflow-auto\"\n role=\"listbox\"\n >\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredSuggestions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let suggestion of enrichedFilteredSuggestions();\n let i = $index;\n trackBy: trackById\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"suggestionItemTemplate\"\n [ngTemplateOutletContext]=\"{ suggestion, i }\"\n ></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredSuggestions().length <= 10) {\n @for (suggestion of enrichedFilteredSuggestions(); track suggestion.id; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"suggestionItemTemplate\"\n [ngTemplateOutletContext]=\"{ suggestion, i }\"\n ></ng-container>\n }\n }\n\n @if (showEmptyMessage()) {\n <span class=\"p-3 text-grayscale-60\">{{\n emptyMessage() ?? 'platform.angular_components.no_records_found' | translate\n }}</span>\n }\n </ul>\n </div>\n </ng-template>\n}\n\n<ng-template\n #suggestionItemTemplate\n let-suggestion=\"suggestion\"\n let-i=\"i\"\n>\n <li\n [id]=\"suggestion.id\"\n class=\"rounded-sm flex cursor-pointer items-center gap-2 px-3 py-2 text-grayscale-70\"\n [class.bg-grayscale-10]=\"i === focusedIndex()\"\n [class.bg-grayscale-20]=\"suggestion.isSelected\"\n [attr.aria-selected]=\"suggestion.isSelected\"\n role=\"option\"\n (click)=\"selectSuggestion(suggestion.data)\"\n >\n @if (checkmark() && multiple() && suggestion.isSelected) {\n <i class=\"far fa-check\"></i>\n }\n {{ suggestionLabel() ? suggestion.data[suggestionLabel()!] : suggestion.data }}\n </li>\n</ng-template>\n\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-autocomplete.mjs","sources":["../../projects/angular-components/autocomplete/src/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.ts","../../projects/angular-components/autocomplete/src/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.html","../../projects/angular-components/autocomplete/src/lib/autocomplete/autocomplete.component.ts","../../projects/angular-components/autocomplete/src/lib/autocomplete/autocomplete.component.html","../../projects/angular-components/autocomplete/src/seniorsistemas-angular-components-autocomplete.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-autocomplete-chip',\n templateUrl: './autocomplete-chip.component.html',\n standalone: true,\n})\nexport class AutocompleteChipComponent<T> {\n public suggestion = input.required<T>();\n public suggestionLabel = input<keyof T>();\n\n public suggestionRemoved = output<T>();\n\n public removeSuggestion() {\n this.suggestionRemoved.emit(this.suggestion());\n }\n}\n","<div class=\"flex items-center gap-2 rounded-[4px] border border-grayscale-50 bg-grayscale-10 px-2\">\n <span class=\"text-nowrap\">{{ suggestionLabel() ? suggestion()[suggestionLabel()!] : suggestion() }}</span>\n <button (click)=\"removeSuggestion()\">\n <i class=\"far fa-times\"></i>\n </button>\n</div>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, switchMap } from 'rxjs/operators';\n\nimport { AutocompleteChipComponent } from './components/autocomplete-chip/autocomplete-chip.component';\n\n/**\n * Representa um item de sugestão encapsulado, utilizado em componentes de autocomplete.\n * @template T Tipo dos dados associados à sugestão.\n * @property data Os dados da sugestão.\n * @property id Identificador único da sugestão.\n * @property [isSelected] Indica se a sugestão está selecionada.\n */\ninterface SuggestionWrapper<T> {\n data: T;\n id: string;\n isSelected?: boolean;\n}\n\n/**\n * @description Componente de autocompletar com sugestões dinâmicas, suportando seleção simples\n * e múltipla. Implementa {@link ControlValueAccessor} para integração com formulários Angular.\n * Oferece carregamento lazy de sugestões via output `lazyLoad`, virtualização de lista,\n * seleção com chips no modo múltiplo e acessibilidade ARIA completa (combobox role).\n *\n * @example\n * ```html\n * <s-autocomplete\n * formControlName=\"cidade\"\n * placeholder=\"Buscar cidade...\"\n * [suggestions]=\"cidades\"\n * suggestionLabel=\"nome\"\n * [delay]=\"400\"\n * (completeMethod)=\"buscar($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-autocomplete',\n standalone: true,\n templateUrl: './autocomplete.component.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n OverlayModule,\n ScrollingModule,\n TranslateModule,\n AutocompleteChipComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutocompleteComponent),\n multi: true,\n },\n ],\n host: {\n role: 'combobox',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-haspopup]': '\"listbox\"',\n '[attr.aria-owns]': 'isOpen() ? \"dropdown-container-\" + componentId : null',\n '(window:resize)': 'onWindowResize()',\n },\n})\nexport class AutocompleteComponent<T> implements ControlValueAccessor {\n private static nextId = 0;\n\n /** @description Lista estática de sugestões exibidas no dropdown. No modo lazy, prefira usar o output `lazyLoad`. @default [] */\n public suggestions = input<T[]>([]);\n\n /** @description Texto exibido no input quando nenhum valor está selecionado. */\n public placeholder = input<string>();\n\n /** @description Chave do objeto de sugestão cujo valor será emitido ao formulário. */\n public suggestionValue = input<keyof T>();\n\n /** @description Chave do objeto de sugestão usada como texto de exibição no dropdown. */\n public suggestionLabel = input<keyof T>();\n\n /** @description Torna o campo somente leitura, impedindo digitação e seleção. @default false */\n public readonly = input(false);\n\n /** @description Mensagem exibida no dropdown quando nenhuma sugestão é encontrada. */\n public emptyMessage = input<string>();\n\n /** @description Tempo de espera em ms após a última tecla antes de acionar a busca por sugestões. @default 300 */\n public delay = input(300);\n\n /** @description Exibe estado de erro visual no campo de input. @default false */\n public invalid = input(false);\n\n /** @description Habilita virtualização da lista de sugestões para melhor performance com grandes volumes de dados. @default false */\n public virtualScroll = input(false);\n\n /** @description Altura fixa em pixels de cada item no virtual scroll. @default 37 */\n public virtualScrollItemSize = input(37);\n\n /** @description Ativa o carregamento assíncrono de sugestões via o output `lazyLoad`. @default false */\n public lazy = input(false);\n\n /** @description Exibe um botão de dropdown para abrir a lista sem necessidade de digitação. @default false */\n public dropdown = input(false);\n\n /** @description Quando `true`, o valor do campo deve ser obrigatoriamente uma das opções sugeridas. @default false */\n public forceSelection = input(false);\n\n /** @description Exibe ícone de checkmark ao lado da opção selecionada no dropdown. @default false */\n public checkmark = input(false);\n\n /** @description Habilita seleção de múltiplos itens exibidos como chips no campo. @default false */\n public multiple = input(false);\n\n /** @description Quantidade mínima de caracteres necessária para acionar a busca por sugestões. @default 1 */\n public minLengthToSearch = input(1);\n\n /** @description Classe CSS adicional aplicada ao elemento `<input>` interno. @default '' */\n public inputClass = input<string>('');\n\n /** @description Chave do objeto usada para comparação de identidade entre opções, evitando duplicatas na seleção múltipla. */\n public dataKey = input<keyof T>();\n\n /** @description Valor atualmente selecionado no modo simples, via two-way binding. */\n public value = model<T | null>();\n\n /** @description Lista de valores selecionados no modo múltiplo, via two-way binding. @default [] */\n public values = model<T[]>([]);\n\n /** @description Controla o estado desabilitado do componente via two-way binding. @default false */\n public disabled = model(false);\n\n /**\n * @description Emitido no modo lazy quando o usuário digita e o componente está pronto para receber novas sugestões.\n * O evento contém `query` (texto digitado) e `response` (função callback para fornecer os dados).\n */\n public lazyLoad = output<{ query: string; response: (data: T[]) => void }>();\n\n /** @description Emitido quando o usuário seleciona uma sugestão do dropdown. */\n public selected = output<T>();\n\n /** @description Emitido quando o usuário remove uma sugestão selecionada (modo múltiplo). */\n public unselected = output<T>();\n\n /** @description Emitido quando o campo perde o foco. */\n public blurred = output<Event>();\n\n /** @description Emitido quando o campo é limpo pelo usuário. */\n public cleared = output();\n\n /** @description Emitido a cada pressionamento de tecla no campo de input. */\n public keyUp = output<Event>();\n\n /** @description Emitido quando o campo recebe foco. */\n public focused = output<any>();\n\n /** @description Emitido quando o usuário digita no campo, fornecendo o texto atual para filtragem de sugestões. */\n public completeMethod = output<{ query: string }>();\n\n public focusedIndex = signal(-1);\n public isOpen = signal(false);\n public filteredSuggestions = signal<SuggestionWrapper<T>[]>([]);\n public showEmptyMessage = signal(false);\n public filterText = signal('');\n public inputValue = signal('');\n public loading = signal(false);\n\n public componentId = `autocomplete_${AutocompleteComponent.nextId++}`;\n public inputEl = viewChild<ElementRef>('inputEl');\n\n private _inputSubject$ = new Subject<string>();\n private _lazyLoadSubject$ = new Subject<string>();\n private _destroyRef = inject(DestroyRef);\n private _onChange?: (value: any | any[]) => void;\n private _onTouched?: () => void;\n\n /**\n * Computed que retorna uma lista de sugestões do tipo `SuggestionWrapper<T>`,\n * adicionando um identificador único a cada sugestão.\n * @returns Uma lista de sugestões processadas com identificadores únicos.\n */\n public internalSuggestion = computed<SuggestionWrapper<T>[]>(() => {\n const opts = this.suggestions();\n return this._addIdToSuggestions(opts);\n });\n\n /**\n * Retorna um conjunto (`Set`) com os IDs das sugestões selecionadas.\n */\n public selectedSuggestionIds = computed(() => {\n if (!this.multiple()) {\n return new Set<string>();\n }\n\n const currentValues = this.values();\n\n return new Set(\n currentValues.map((value) => {\n return this.internalSuggestion().find((s) => JSON.stringify(s.data) === JSON.stringify(value))?.id;\n }),\n );\n });\n\n /**\n * Retorna uma lista de sugestões filtradas, enriquecidas com a propriedade `isSelected`.\n * Cada sugestão recebe um campo booleano `isSelected` indicando se ela está selecionada,\n * com base nos IDs das sugestões selecionadas e no valor da sugestão.\n * @returns Uma lista de sugestões filtradas, cada uma com a propriedade adicional `isSelected`.\n */\n public enrichedFilteredSuggestions = computed(() => {\n const filtered = this.filteredSuggestions();\n const selectedIds = this.selectedSuggestionIds();\n\n return filtered.map((suggestion) => ({\n ...suggestion,\n isSelected: selectedIds.has(suggestion.id),\n }));\n });\n\n constructor() {\n this._validateInputs();\n this._setupInputDebounce();\n this._setupLazyLoadDebounce();\n }\n\n /**\n * Define o valor do autocomplete.\n * @param value Valor a ser definido, único ou array, conforme seleção múltipla.\n * @throws Se múltiplo for falso e value for array.\n */\n public writeValue(value: T | T[]): void {\n const suggestionLabel = this.suggestionLabel();\n\n if (value && this.multiple()) {\n if (Array.isArray(value)) {\n this.values.set(value);\n } else {\n this.values.set([value]);\n }\n } else {\n if (Array.isArray(value)) {\n throw new Error('The value must not be an array when multiple is false.');\n } else {\n this.value.set(value);\n }\n\n this.inputValue.set(!value ? '' : suggestionLabel ? String(value[suggestionLabel]) : String(value));\n }\n }\n\n /**\n * Registra uma função de callback que será chamada sempre que o valor do componente mudar.\n * @param onChange Função a ser chamada quando o valor mudar. Recebe o novo valor como argumento, que pode ser um único valor ou um array de valores.\n */\n public registerOnChange(onChange: (value: any | any[]) => void): void {\n this._onChange = onChange;\n }\n\n /**\n * Registra uma função de callback que será chamada quando o componente for tocado (perder o foco).\n * @param onTouched Função de callback a ser chamada quando o componente for tocado.\n */\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n /**\n * Define o estado de desabilitado do componente.\n * @param disabled Indica se o componente deve ser desabilitado (`true`) ou habilitado (`false`).\n */\n public setDisabledState?(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n\n /**\n * Manipula o evento de entrada do usuário no campo de texto do autocomplete.\n * Este método é chamado sempre que o usuário digita algo no campo de entrada.\n * Ele executa as seguintes ações:\n * - Dispara o callback de \"touched\" para controle de formulários.\n * - Obtém o valor atual do campo de entrada.\n * - Se o modo lazy estiver ativado, emite o evento de lazyLoad com a consulta e abre o painel de sugestões.\n * - Caso contrário, atualiza o texto de filtro, notifica os observadores e abre o painel de sugestões se houver sugestões disponíveis.\n * @param event Evento de entrada do tipo `Event` proveniente do campo de texto.\n */\n public onInput(event: Event): void {\n this._onTouched?.();\n\n const value = (event.target as HTMLInputElement).value;\n\n if (this.lazy()) {\n this._lazyLoadSubject$.next(value);\n this.isOpen.set(true);\n return;\n }\n\n this.filterText.set(value);\n\n this.completeMethod.emit({ query: value });\n\n this._inputSubject$.next(value);\n\n if (this.suggestions()) {\n this.isOpen.set(true);\n }\n }\n\n /**\n * Manipula o evento de perda de foco (blur) do campo de entrada do autocomplete.\n * Este método verifica se o valor digitado pelo usuário corresponde exatamente a algum dos itens sugeridos.\n * - Se houver correspondência:\n * - No modo múltiplo (`multiple`), adiciona o item selecionado à lista de valores, caso ainda não esteja presente.\n * - No modo simples, seleciona o item correspondente se ainda não estiver selecionado.\n * - Se não houver correspondência, limpa o campo de entrada.\n */\n public onInputBlur(event: Event): void {\n const inputValue = String(this.inputValue()).toLowerCase();\n const suggestions = this.internalSuggestion();\n\n const match = suggestions.find(({ data }) => {\n const label = this.suggestionLabel() ? data[this.suggestionLabel()!] : data;\n return String(label).toLowerCase() === inputValue;\n });\n\n if (match) {\n if (this.multiple()) {\n const currentValues = this.values();\n const exists = currentValues.some(\n (value) =>\n (this.suggestionValue() ? value[this.suggestionValue()!] : value) ===\n (this.suggestionValue() ? match.data[this.suggestionValue()!] : match.data),\n );\n if (!exists) {\n this.values.set([...currentValues, match.data]);\n this._onChange?.(this.values());\n }\n this.inputValue.set('');\n } else {\n if (this.value() !== match.data) {\n this.selectSuggestion(match.data);\n }\n }\n } else {\n this.inputValue.set('');\n }\n }\n\n /**\n * Dispara o evento de foco quando o campo de entrada recebe foco.\n * @param event O evento de foco disparado pelo elemento de entrada.\n */\n public onInputFocus(event: Event): void {\n this.focused.emit(event);\n }\n\n /**\n * Manipula eventos de teclado no componente de autocomplete.\n * Este método gerencia a navegação e seleção de sugestões usando as teclas do teclado.\n * - 'ArrowDown': Move o foco para a próxima sugestão.\n * - 'ArrowUp': Move o foco para a sugestão anterior.\n * - 'Enter' ou 'Tab': Seleciona a sugestão atualmente focada e fecha a lista de sugestões.\n * - 'Escape': Fecha a lista de sugestões sem selecionar nenhum item.\n * @param event O evento de teclado disparado pelo usuário.\n */\n public onKeyDown(event: KeyboardEvent): void {\n const suggestions = this.filteredSuggestions();\n\n this._onTouched?.();\n\n const _selectSuggestion = () => {\n if (this.focusedIndex() >= 0 && this.focusedIndex() < suggestions.length) {\n event.preventDefault();\n this.selectSuggestion(suggestions[this.focusedIndex()].data);\n }\n };\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._focusNextSuggestion(suggestions);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this._focusPreviousSuggestion();\n break;\n case 'Enter':\n case 'Tab':\n _selectSuggestion();\n this.isOpen.set(false);\n break;\n case 'Escape':\n this.isOpen.set(false);\n break;\n }\n }\n\n /**\n * Emite um evento quando uma tecla é liberada no componente. *\n * @param event O evento de teclado associado à tecla liberada.\n */\n public onKeyUp(event: Event): void {\n this.keyUp.emit(event);\n }\n\n /**\n * Fecha o dropdown em eventos de redimensionamento de janela.\n */\n public onWindowResize(): void {\n if (this.isOpen()) {\n this.isOpen.set(false);\n }\n }\n\n /**\n * Seleciona uma sugestão da lista de sugestões.\n * Se o modo múltiplo estiver ativado (`multiple()` retorna true), adiciona a sugestão à lista de suggestões selecionadas,\n * caso ela ainda não esteja presente. Em seguida, limpa o valor do campo de entrada.\n * Se o modo múltiplo não estiver ativado, define a sugestão como valor selecionado e atualiza o campo de entrada\n * com o rótulo correspondente.\n * Em ambos os casos, dispara o callback `_onChange` com o novo valor e fecha o painel de sugestões.\n * @param suggestion - A sugestão a ser selecionada.\n */\n public selectSuggestion(suggestion: T): void {\n if (this.multiple()) {\n const currentValues = this.values();\n const exists = currentValues.some(\n (value) =>\n (this.suggestionValue() ? value[this.suggestionValue()!] : value) ===\n (this.suggestionValue() ? suggestion[this.suggestionValue()!] : suggestion),\n );\n\n if (!exists) {\n this.values.set([...currentValues, suggestion]);\n this._onChange?.(this.values());\n }\n\n this.inputValue.set('');\n } else {\n this.value.set(suggestion);\n const _value = this.suggestionValue() ? suggestion[this.suggestionValue()!] : suggestion;\n const _inputValue = String(this.suggestionLabel() ? suggestion[this.suggestionLabel()!] : suggestion);\n\n this.inputValue.set(_inputValue);\n this._onChange?.(_value);\n }\n\n this.selected.emit(suggestion);\n this.isOpen.set(false);\n }\n\n /**\n * Limpa o valor selecionado no componente de autocomplete.\n * Se o modo múltiplo estiver ativado, remove todos os valores selecionados.\n * Caso contrário, define o valor como nulo.\n * Também limpa as sugestões filtradas, fecha o painel de sugestões\n * e limpa o valor do campo de entrada.\n */\n public clear(): void {\n if (this.multiple()) {\n this.values.set([]);\n this._onChange?.(this.values());\n } else {\n this.value.set(null);\n this._onChange?.(this.value());\n }\n\n this.filteredSuggestions.set([]);\n this.isOpen.set(false);\n this.inputValue.set('');\n this.cleared.emit();\n }\n\n /**\n * Alterna a exibição do dropdown de sugestões do autocomplete.\n * Este método configura o debounce do input, verifica se há sugestões filtradas\n * e, caso não haja sugestões e o texto do filtro esteja vazio, redefine as sugestões filtradas.\n * Por fim, alterna o estado de abertura do dropdown.\n */\n public toggleDropdown(): void {\n this._setupInputDebounce();\n\n if (this.filterText() === '') {\n if (this.lazy()) {\n this._lazyLoadSubject$.next('');\n } else {\n this.resetFilteredSuggestions();\n }\n }\n\n this.isOpen.set(!this.isOpen());\n }\n\n /**\n * Função utilizada para otimizar a renderização de listas no Angular, permitindo que o framework\n * identifique cada item de forma única pelo seu `id`. Deve ser utilizada como função de `trackBy`\n * em diretivas como `*ngFor`.\n * @param _ - Índice do item na lista (não utilizado).\n * @param item - Objeto do tipo `SuggestionWrapper<T>` que representa o item atual.\n * @returns O identificador único (`id`) do item.\n */\n public trackById(_: number, item: SuggestionWrapper<T>): string {\n return item.id;\n }\n\n /**\n * Remove uma sugestão da lista de valores selecionados.\n * @param suggestion O item a ser removido da lista de sugestões.\n */\n public removeSuggestion(suggestion: T): void {\n const suggestionValue = this.suggestionValue();\n\n this.values.set(\n this.values().filter((value) => {\n if (suggestionValue) {\n return value[suggestionValue] !== suggestion[suggestionValue];\n }\n return value !== suggestion;\n }),\n );\n this._onChange?.(this.values());\n this.unselected.emit(suggestion);\n }\n\n /**\n * Reinicia a lista de sugestões filtradas.\n * Se o modo lazy estiver ativado, emite um evento para carregar sugestões com uma consulta vazia.\n * Em seguida, redefine as sugestões filtradas para o valor retornado por `internalSuggestion()`.\n * @private\n */\n private resetFilteredSuggestions(): void {\n if (this.lazy()) {\n this._lazyLoadSubject$.next('');\n } else {\n this.filteredSuggestions.set(this.internalSuggestion());\n }\n }\n\n /**\n * Move o foco para a próxima sugestão na lista de sugestões, se houver.\n * @private\n * @param suggestions Lista de sugestões disponíveis.\n */\n private _focusNextSuggestion(suggestions: SuggestionWrapper<T>[]): void {\n let nextIndex = this.focusedIndex() + 1;\n\n if (nextIndex < suggestions.length) {\n this.focusedIndex.set(nextIndex);\n this._scrollToFocusedSuggestion();\n }\n }\n\n /**\n * Move o foco para a sugestão anterior na lista de sugestões, se houver.\n * @private\n */\n private _focusPreviousSuggestion(): void {\n let prevIndex = this.focusedIndex() - 1;\n\n if (prevIndex >= 0) {\n this.focusedIndex.set(prevIndex);\n this._scrollToFocusedSuggestion();\n }\n }\n\n /**\n * Rola a lista de sugestões para garantir que a sugestão atualmente focada esteja visível.\n * @private\n */\n private _scrollToFocusedSuggestion(): void {\n const id = this.filteredSuggestions()[this.focusedIndex()]?.id;\n\n if (!id) {\n return;\n }\n\n const el = document.getElementById(id);\n el?.scrollIntoView({ block: 'nearest' });\n }\n\n /**\n * Adiciona um identificador único a cada sugestão fornecida.\n * @private\n * @param suggestions - Um array de sugestões do tipo T.\n * @returns Um array de objetos `SuggestionWrapper<T>`, cada um contendo a sugestão original e um identificador único.\n */\n private _addIdToSuggestions(suggestions: T[]): SuggestionWrapper<T>[] {\n return (\n suggestions?.map((suggestion) => {\n return {\n data: suggestion,\n id: this.dataKey()\n ? String(suggestion[this.dataKey()!])\n : ((typeof suggestion !== 'object'\n ? suggestion?.toString()\n : Object.values(suggestion as Object).join('_')) ?? ''),\n };\n }) ?? []\n );\n }\n\n /**\n * Configura o debounce e switchMap para lazy loading, resolvendo race conditions.\n * Este método utiliza switchMap para cancelar requisições anteriores automaticamente\n * quando uma nova busca é iniciada, evitando que resultados antigos sobrescrevam\n * resultados mais recentes.\n * @private\n */\n private _setupLazyLoadDebounce(): void {\n this._lazyLoadSubject$\n .pipe(\n debounceTime(this.delay()),\n distinctUntilChanged(),\n switchMap((query) => {\n this.loading.set(true);\n // TODO: Manter fechado o dropdownd até a busca estiver concluída\n return new Observable<T[]>((subscriber) => {\n const timeoutId = setTimeout(() => {\n if (!subscriber.closed) {\n subscriber.error(new Error('Lazy load timeout'));\n }\n }, 30000);\n\n const responseCallback = (data: T[]) => {\n clearTimeout(timeoutId);\n if (!subscriber.closed) {\n subscriber.next(data);\n subscriber.complete();\n }\n };\n\n this.lazyLoad.emit({ query, response: responseCallback });\n });\n }),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe({\n next: (data: T[]) => {\n this.loading.set(false);\n // TODO: Abrir o dropdown somente aqui\n const wrappedSuggestions = this._addIdToSuggestions(data);\n this.filteredSuggestions.set(wrappedSuggestions);\n this.showEmptyMessage.set(wrappedSuggestions.length === 0);\n },\n error: (error) => {\n this.loading.set(false);\n // TODO: Abrir o dropdown somente aqui\n console.error('Lazy load error:', error);\n this.filteredSuggestions.set([]);\n this.showEmptyMessage.set(true);\n },\n });\n }\n\n /**\n * Configura o debounce para o input do autocomplete.\n * Este método utiliza um Subject para escutar as mudanças no valor do input,\n * aplicando um debounce com o tempo definido por `this.delay()`. Quando um novo valor é emitido:\n * - Se houver valor, filtra as sugestões com base no texto digitado e atualiza a lista de sugestões filtradas.\n * - Se não houver valor e o dropdown estiver ativo, reseta as sugestões filtradas.\n * - Caso contrário, limpa a lista de sugestões filtradas.\n * Também atualiza o estado da mensagem de lista vazia e, se a seleção for livre (`forceSelection` for falso),\n * propaga a mudança de valor para o formulário.\n * @private\n */\n private _setupInputDebounce(): void {\n this._inputSubject$\n .pipe(\n debounceTime(this.delay()),\n distinctUntilChanged(),\n filter((value) => value.length >= this.minLengthToSearch() || value.length === 0),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe((value) => {\n if (value) {\n this.filteredSuggestions.set(\n this.internalSuggestion().filter(({ data }) => {\n const label = String(this.suggestionLabel() ? data[this.suggestionLabel()!] : data);\n return label.toLowerCase().includes(value.toLowerCase());\n }),\n );\n this.showEmptyMessage.set(this.filteredSuggestions().length === 0);\n } else if (this.dropdown()) {\n this.resetFilteredSuggestions();\n } else {\n this.filteredSuggestions.set([]);\n }\n\n if (!this.forceSelection()) {\n this._onChange?.(value);\n }\n });\n }\n\n /**\n * Valida as entradas do componente de autocomplete.\n * @private\n * @throws {Error} Se as sugestões forem objetos e `suggestionLabel` não for fornecido.\n */\n private _validateInputs(): void {\n const suggestions = this.suggestions();\n\n if (!suggestions.length) {\n return;\n }\n\n const hasObjectSuggestions = suggestions.some(\n (suggestion) => typeof suggestion === 'object' && suggestion !== null,\n );\n\n if (hasObjectSuggestions) {\n if (!this.suggestionLabel()) {\n throw new Error('The suggestionLabel input must be provided when suggestions are objects.');\n }\n }\n }\n}\n\n","<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"flex h-[35px] w-full items-center overflow-hidden rounded-[4px] border focus-within:border-2 focus-within:border-primary hover:bg-grayscale-10\"\n [class]=\"inputClass()\"\n [ngClass]=\"{\n 'pointer-events-none border-grayscale-20 bg-grayscale-5 text-grayscale-30': disabled(),\n 'pointer-events-auto border-grayscale-30 bg-grayscale-0 text-grayscale-90': !disabled(),\n 'border-criticality-red': invalid(),\n }\"\n>\n <div\n class=\"flex flex-grow gap-2 px-2\"\n [ngClass]=\"{\n 'border-r': dropdown(),\n 'border-grayscale-20': dropdown() && disabled(),\n 'border-grayscale-30 focus-within:border-r-2 focus-within:border-r-primary': dropdown() && !disabled(),\n 'bg-grayscale-5': disabled(),\n 'bg-grayscale-0': !disabled(),\n }\"\n >\n @if (multiple() && values().length > 0) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (suggestion of values(); track suggestion) {\n <s-autocomplete-chip\n [suggestion]=\"suggestion\"\n [suggestionLabel]=\"suggestionLabel()\"\n (suggestionRemoved)=\"removeSuggestion($event)\"\n ></s-autocomplete-chip>\n }\n </div>\n }\n <input\n #inputEl\n class=\"min-h-[35px] grow outline-none\"\n type=\"text\"\n [placeholder]=\"placeholder() ?? 'platform.angular_components.type_to_search' | translate\"\n [readOnly]=\"readonly()\"\n [(ngModel)]=\"inputValue\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-autocomplete]=\"multiple() ? 'list' : 'both'\"\n [attr.aria-activedescendant]=\"focusedIndex() >= 0 ? filteredSuggestions()[focusedIndex()].id : null\"\n role=\"searchbox\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keyUp)=\"onKeyUp($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\"\n />\n\n @if (loading()) {\n <div class=\"flex items-center justify-center\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"animate-spin\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"#428bca\"\n stroke-width=\"2\"\n fill=\"none\"\n stroke-dasharray=\"56.5\"\n stroke-dashoffset=\"10\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n } @else {\n @if (value() && !this.disabled()) {\n <button\n class=\"px-2\"\n (click)=\"clear()\"\n tabindex=\"-1\"\n >\n <i class=\"far fa-times text-grayscale-60\"></i>\n </button>\n }\n }\n </div>\n\n @if (dropdown()) {\n <button\n class=\"flex h-full w-[35px] flex-shrink-0 flex-grow-0 items-center justify-center hover:bg-grayscale-10\"\n (click)=\"toggleDropdown()\"\n >\n <i\n class=\"fas text-grayscale-90\"\n [class.fa-caret-down]=\"!isOpen()\"\n [class.fa-caret-up]=\"isOpen()\"\n ></i>\n </button>\n }\n</div>\n\n@if (showEmptyMessage() || (filteredSuggestions().length > 0 && !readonly())) {\n <ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"isOpen.set(false)\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (detach)=\"isOpen.set(false)\"\n >\n <div\n [id]=\"'dropdown-container-' + componentId\"\n class=\"mt-0.5 rounded-[4px] bg-grayscale-0 py-1 shadow\"\n [style.width.px]=\"containerDiv.offsetWidth\"\n >\n <ul\n class=\"max-h-52 overflow-auto\"\n role=\"listbox\"\n >\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredSuggestions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n >\n <ng-container\n *cdkVirtualFor=\"\n let suggestion of enrichedFilteredSuggestions();\n let i = $index;\n trackBy: trackById\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"suggestionItemTemplate\"\n [ngTemplateOutletContext]=\"{ suggestion, i }\"\n ></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredSuggestions().length <= 10) {\n @for (suggestion of enrichedFilteredSuggestions(); track suggestion.id; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"suggestionItemTemplate\"\n [ngTemplateOutletContext]=\"{ suggestion, i }\"\n ></ng-container>\n }\n }\n\n @if (showEmptyMessage()) {\n <span class=\"p-3 text-grayscale-60\">{{\n emptyMessage() ?? 'platform.angular_components.no_records_found' | translate\n }}</span>\n }\n </ul>\n </div>\n </ng-template>\n}\n\n<ng-template\n #suggestionItemTemplate\n let-suggestion=\"suggestion\"\n let-i=\"i\"\n>\n <li\n [id]=\"suggestion.id\"\n class=\"rounded-sm flex cursor-pointer items-center gap-2 px-3 py-2 text-grayscale-70\"\n [class.bg-grayscale-10]=\"i === focusedIndex()\"\n [class.bg-grayscale-20]=\"suggestion.isSelected\"\n [attr.aria-selected]=\"suggestion.isSelected\"\n role=\"option\"\n (click)=\"selectSuggestion(suggestion.data)\"\n >\n @if (checkmark() && multiple() && suggestion.isSelected) {\n <i class=\"far fa-check\"></i>\n }\n {{ suggestionLabel() ? suggestion.data[suggestionLabel()!] : suggestion.data }}\n </li>\n</ng-template>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -9,15 +9,35 @@ import * as i3 from '@seniorsistemas/angular-components/tooltip';
9
9
  import { TooltipModule } from '@seniorsistemas/angular-components/tooltip';
10
10
  import { TemplateModule } from '@seniorsistemas/angular-components/template';
11
11
 
12
+ /**
13
+ * @description Componente de badge (etiqueta) para exibir rótulos coloridos e clicáveis,
14
+ * com suporte a ícones, variantes visuais (pill, tag) e estado selecionável.
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <s-badge color="blue" type="pill" text="Ativo" />
19
+ * ```
20
+ *
21
+ * @category Feedback
22
+ */
12
23
  class BadgeComponent {
24
+ /** @description Variante visual do badge. @default 'pill' */
13
25
  type = 'pill';
26
+ /** @description Cor do badge. @default 'blue' */
14
27
  color = 'blue';
28
+ /** @description Texto de título exibido no badge. */
15
29
  title;
30
+ /** @description Texto principal exibido dentro do badge. */
16
31
  text;
32
+ /** @description Habilita o modo selecionável, emitindo o evento `selected` ao clicar. @default false */
17
33
  selectable = false;
34
+ /** @description Classe CSS do ícone exibido no badge (ex.: `'fa fa-check'`). */
18
35
  iconClass;
36
+ /** @description Posição do ícone em relação ao texto. @default 'left' */
19
37
  iconPosition = 'left';
38
+ /** @description Configuração do info-sign exibido no badge, com texto e tempo de exibição opcional. */
20
39
  infoSign;
40
+ /** @description Emitido ao clicar no badge, enviando o valor de `text`. */
21
41
  selected = new EventEmitter();
22
42
  onClick() {
23
43
  this.selected.emit(this.text);
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-badge.mjs","sources":["../../projects/angular-components/badge/src/lib/badge/badge.component.ts","../../projects/angular-components/badge/src/lib/badge/badge.component.html","../../projects/angular-components/badge/src/lib/badge/badge.module.ts","../../projects/angular-components/badge/src/seniorsistemas-angular-components-badge.ts"],"sourcesContent":["import { Component, EventEmitter, HostListener, input, Input, Output } from '@angular/core';\n\nimport { BadgeColors } from './types/badge-colors';\nimport { BadgeTypes } from './types/badge-types';\n\n@Component({\n selector: 's-badge',\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss'],\n})\nexport class BadgeComponent {\n @Input()\n public type?: BadgeTypes = 'pill';\n\n @Input()\n public color?: BadgeColors = 'blue';\n\n @Input()\n public title?: string;\n\n @Input()\n public text?: string;\n\n @Input()\n public selectable = false;\n\n @Input()\n public iconClass?: string;\n\n @Input()\n public iconPosition?: 'left' | 'right' = 'left';\n\n @Input() infoSign!: { text: string; displayTime?: number };\n\n @Output()\n public selected = new EventEmitter<string>();\n\n @HostListener('click')\n public onClick(): void {\n this.selected.emit(this.text);\n }\n\n enableTruncateText = input(false);\n}\n\n","<span\n class=\"badge\"\n [ngClass]=\"{\n 'badge--pill': type === 'pill',\n 'badge--chip': type === 'chip',\n 'badge--red': color === 'red',\n 'badge--orange': color === 'orange',\n 'badge--yellow': color === 'yellow',\n 'badge--blue': color === 'blue',\n 'badge--green': color === 'green',\n 'badge--gray': color === 'gray',\n 'badge--selectable': selectable,\n }\"\n>\n <div class=\"flex items-center gap-2\">\n @if (infoSign) {\n <span *sInfoSign=\"infoSign.text; displayTime: infoSign.displayTime ?? 0\"></span>\n }\n @if (iconClass) {\n <span\n [class.pr-2]=\"text\"\n [class]=\"'badge-icon ' + iconClass\"\n [ngClass]=\"{\n 'badge-icon--left': iconPosition === 'left' && text,\n 'badge-icon--right': iconPosition === 'right' && text,\n }\"\n >\n </span>\n }\n </div>\n @if (title) {\n <span class=\"badge-title\">{{ title }}:</span>\n }\n <span\n class=\"badge-text\"\n [class.badge-text-truncated]=\"enableTruncateText()\"\n [sTooltip]=\"text\"\n [visible]=\"enableTruncateText()\"\n [checkTruncatedText]=\"enableTruncateText()\"\n >{{ text }}</span\n >\n</span>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { BadgeComponent } from './badge.component';\nimport { InfoSignModule } from '@seniorsistemas/angular-components/info-sign';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@NgModule({\n imports: [CommonModule, RouterModule, InfoSignModule, TooltipModule, TemplateModule],\n declarations: [BadgeComponent],\n exports: [BadgeComponent, RouterModule],\n})\nexport class BadgeModule {}\n\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-badge.mjs","sources":["../../projects/angular-components/badge/src/lib/badge/badge.component.ts","../../projects/angular-components/badge/src/lib/badge/badge.component.html","../../projects/angular-components/badge/src/lib/badge/badge.module.ts","../../projects/angular-components/badge/src/seniorsistemas-angular-components-badge.ts"],"sourcesContent":["import { Component, EventEmitter, HostListener, input, Input, Output } from '@angular/core';\n\nimport { BadgeColors } from './types/badge-colors';\nimport { BadgeTypes } from './types/badge-types';\n\n/**\n * @description Componente de badge (etiqueta) para exibir rótulos coloridos e clicáveis,\n * com suporte a ícones, variantes visuais (pill, tag) e estado selecionável.\n *\n * @example\n * ```html\n * <s-badge color=\"blue\" type=\"pill\" text=\"Ativo\" />\n * ```\n *\n * @category Feedback\n */\n@Component({\n selector: 's-badge',\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss'],\n})\nexport class BadgeComponent {\n /** @description Variante visual do badge. @default 'pill' */\n @Input()\n public type?: BadgeTypes = 'pill';\n\n /** @description Cor do badge. @default 'blue' */\n @Input()\n public color?: BadgeColors = 'blue';\n\n /** @description Texto de título exibido no badge. */\n @Input()\n public title?: string;\n\n /** @description Texto principal exibido dentro do badge. */\n @Input()\n public text?: string;\n\n /** @description Habilita o modo selecionável, emitindo o evento `selected` ao clicar. @default false */\n @Input()\n public selectable = false;\n\n /** @description Classe CSS do ícone exibido no badge (ex.: `'fa fa-check'`). */\n @Input()\n public iconClass?: string;\n\n /** @description Posição do ícone em relação ao texto. @default 'left' */\n @Input()\n public iconPosition?: 'left' | 'right' = 'left';\n\n /** @description Configuração do info-sign exibido no badge, com texto e tempo de exibição opcional. */\n @Input() infoSign!: { text: string; displayTime?: number };\n\n /** @description Emitido ao clicar no badge, enviando o valor de `text`. */\n @Output()\n public selected = new EventEmitter<string>();\n\n @HostListener('click')\n public onClick(): void {\n this.selected.emit(this.text);\n }\n\n enableTruncateText = input(false);\n}\n\n","<span\n class=\"badge\"\n [ngClass]=\"{\n 'badge--pill': type === 'pill',\n 'badge--chip': type === 'chip',\n 'badge--red': color === 'red',\n 'badge--orange': color === 'orange',\n 'badge--yellow': color === 'yellow',\n 'badge--blue': color === 'blue',\n 'badge--green': color === 'green',\n 'badge--gray': color === 'gray',\n 'badge--selectable': selectable,\n }\"\n>\n <div class=\"flex items-center gap-2\">\n @if (infoSign) {\n <span *sInfoSign=\"infoSign.text; displayTime: infoSign.displayTime ?? 0\"></span>\n }\n @if (iconClass) {\n <span\n [class.pr-2]=\"text\"\n [class]=\"'badge-icon ' + iconClass\"\n [ngClass]=\"{\n 'badge-icon--left': iconPosition === 'left' && text,\n 'badge-icon--right': iconPosition === 'right' && text,\n }\"\n >\n </span>\n }\n </div>\n @if (title) {\n <span class=\"badge-title\">{{ title }}:</span>\n }\n <span\n class=\"badge-text\"\n [class.badge-text-truncated]=\"enableTruncateText()\"\n [sTooltip]=\"text\"\n [visible]=\"enableTruncateText()\"\n [checkTruncatedText]=\"enableTruncateText()\"\n >{{ text }}</span\n >\n</span>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { BadgeComponent } from './badge.component';\nimport { InfoSignModule } from '@seniorsistemas/angular-components/info-sign';\nimport { TooltipModule } from '@seniorsistemas/angular-components/tooltip';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@NgModule({\n imports: [CommonModule, RouterModule, InfoSignModule, TooltipModule, TemplateModule],\n declarations: [BadgeComponent],\n exports: [BadgeComponent, RouterModule],\n})\nexport class BadgeModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -15,18 +15,63 @@ var BignumberAlignmentOption;
15
15
  BignumberAlignmentOption["LEFT"] = "left";
16
16
  })(BignumberAlignmentOption || (BignumberAlignmentOption = {}));
17
17
  /**
18
- * @deprecated Should use BigNumberInput directive instead
18
+ * @deprecated Utilize a diretiva `BigNumberInput` ao invés desta.
19
+ * @description Diretiva de máscara para campos de entrada de números de grande precisão,
20
+ * adaptada do `CurrencyMaskDirective`. Permite configurar precisão, escala,
21
+ * separadores decimais e de milhar de acordo com o locale da aplicação.
22
+ *
23
+ * @example
24
+ * ```html
25
+ * <input sBignumberInput [precision]="15" [scale]="2" [allowNegative]="false" />
26
+ * ```
27
+ *
28
+ * @category Inputs
19
29
  */
20
30
  class BignumberInputDirective extends CurrencyMaskDirective {
21
31
  localeService;
32
+ /**
33
+ * @description Número total de dígitos significativos aceitos pelo campo.
34
+ *
35
+ * @default 15
36
+ */
22
37
  precision = 15;
38
+ /**
39
+ * @description Número de casas decimais exibidas e aceitas pelo campo.
40
+ *
41
+ * @default 0
42
+ */
23
43
  scale = 0;
44
+ /**
45
+ * @description Separador decimal personalizado. Quando não informado,
46
+ * utiliza o separador definido pelo locale ativo da aplicação.
47
+ */
24
48
  decimalSeparator;
49
+ /**
50
+ * @description Separador de milhar personalizado. Quando não informado,
51
+ * utiliza o separador definido pelo locale ativo da aplicação.
52
+ */
25
53
  thousandsSeparator;
54
+ /**
55
+ * @description Alinhamento do conteúdo do campo. Aceita `'left'` ou `'right'`.
56
+ *
57
+ * @default 'left'
58
+ */
26
59
  alignTo = 'left';
60
+ /**
61
+ * @description Permite a entrada de valores negativos.
62
+ *
63
+ * @default true
64
+ */
27
65
  allowNegative = true;
66
+ /**
67
+ * @description Texto de placeholder exibido quando o campo está vazio.
68
+ */
28
69
  placeholder;
29
70
  maxLength;
71
+ /**
72
+ * @description Emitido quando uma colé (paste) é rejeitada pela validação do campo.
73
+ * Emite a string colada que foi recusada.
74
+ */
30
75
  pasteRejected = new EventEmitter();
31
76
  regex = /\d/;
32
77
  //TODO: Ajuste no ng2-currency-mask para utilizar esse Código (aplicado na tarefa: SDS-305)
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-bignumber-input.mjs","sources":["../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.directive.ts","../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.module.ts","../../projects/angular-components/bignumber-input/src/seniorsistemas-angular-components-bignumber-input.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n KeyValueDiffers,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { CurrencyMaskDirective } from 'ng2-currency-mask';\nimport { first } from 'rxjs/operators';\nimport { AlignmentOptions } from '@seniorsistemas/ng2-currency-mask';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\n\n/**\n * @deprecated Should use 'AlignmentOptions' from @seniorsistemas/ng2-currency-mask instead\n */\nexport enum BignumberAlignmentOption {\n RIGHT = 'right',\n LEFT = 'left',\n}\n\n/**\n * @deprecated Should use BigNumberInput directive instead\n */\n@Directive({\n selector: 'input[sBignumberInput]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n useExisting: forwardRef(() => BignumberInputDirective),\n multi: true,\n },\n ],\n})\nexport class BignumberInputDirective extends CurrencyMaskDirective implements OnInit, OnChanges {\n @Input()\n public precision = 15;\n\n @Input()\n public scale = 0;\n\n @Input()\n public decimalSeparator?: string;\n\n @Input()\n public thousandsSeparator?: string;\n\n @Input()\n public alignTo: 'left' | 'right' = 'left';\n\n @Input()\n public allowNegative = true;\n\n @Input()\n @HostBinding('attr.placeholder')\n public placeholder?: string;\n\n @HostBinding('attr.maxLength')\n public maxLength?: number;\n\n @Output()\n public pasteRejected = new EventEmitter<string>();\n\n private readonly regex = /\\d/;\n\n //TODO: Ajuste no ng2-currency-mask para utilizar esse Código (aplicado na tarefa: SDS-305)\n // private readonly _angularComponentsLocaleService: LocaleService;\n\n // constructor(injector: Injector) {\n // super(injector);\n\n // this._angularComponentsLocaleService = injector.get(LocaleService);\n // this.onLocaleService();\n // }\n\n //TODO: Remover esse constructor\n constructor(\n _elementRef: ElementRef,\n _keyValueDiffers: KeyValueDiffers,\n private readonly localeService: LocaleService,\n ) {\n super(\n { align: '', allowNegative: true, decimal: '', precision: 0, prefix: '', suffix: '', thousands: '' },\n _elementRef,\n _keyValueDiffers,\n );\n\n this.onLocaleService();\n }\n\n public override ngOnInit(): void {\n this.updateVariables();\n\n super.ngOnInit();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n const placeholderChange = changes['placeholder']?.currentValue;\n if (!placeholderChange && this.scale) {\n this.placeholder = `0${this.decimalSeparator}${''.padEnd(this.scale, '0')}`;\n }\n\n const configChanged =\n changes['scale'] ||\n changes['decimalSeparator'] ||\n changes['thousandsSeparator'] ||\n changes['alignTo'] ||\n changes['precision'] ||\n changes['allowNegative'];\n\n if (configChanged) {\n this.updateVariables();\n }\n }\n\n @HostListener('paste', ['$event'])\n public onPaste(event: ClipboardEvent): void {\n const pastedText = event.clipboardData?.getData('text') ?? '';\n const numericText = pastedText\n .replace(new RegExp(`\\\\${this.thousandsSeparator}`, 'g'), '')\n .replace(this.decimalSeparator as string, '.');\n const [intPart, decimalPart = ''] = numericText.split('.');\n const totalDigits = intPart.replace(/\\D/g, '').length + decimalPart.slice(0, this.scale).length;\n\n if (totalDigits > this.precision) {\n event.preventDefault();\n this.pasteRejected.emit(pastedText);\n }\n }\n\n /**\n * Update the options values according to the directive input values.\n */\n private updateVariables(): void {\n this.options = {\n align: this.alignTo,\n decimal: this.decimalSeparator,\n thousands: this.thousandsSeparator,\n precision: this.scale || 0,\n prefix: '',\n suffix: '',\n allowNegative: this.allowNegative,\n };\n this.calculateMaxLength();\n }\n\n /**\n * Responsible to calculate the field maximum length considering the separators.\n */\n private calculateMaxLength(): void {\n const decSepLength = this.decimalSeparator?.length ?? 0;\n const thoSepLength = this.thousandsSeparator?.length ?? 0;\n\n const DIGITS_GROUP_SIZE = 3;\n\n let maxLength = this.precision + (this.scale ? decSepLength : 0);\n maxLength += Math.ceil((this.precision - (this.scale ? this.scale : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;\n\n this.maxLength = maxLength;\n }\n\n private onLocaleService(): void {\n this.localeService\n .getLocale()\n .pipe(first())\n .subscribe(() => {\n this.decimalSeparator = this.decimalSeparator ?? this.localeService.getDecimalSeparator();\n this.thousandsSeparator = this.thousandsSeparator ?? this.localeService.getGroupingSeparator();\n });\n }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n// NOSONAR - 'BignumberInputDirective' is deprecated.\nimport { BignumberInputDirective } from './bignumber-input.directive';\n\n@NgModule({\n imports: [CommonModule],\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n declarations: [BignumberInputDirective],\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n exports: [BignumberInputDirective],\n})\nexport class BignumberInputModule { }\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-bignumber-input.mjs","sources":["../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.directive.ts","../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.module.ts","../../projects/angular-components/bignumber-input/src/seniorsistemas-angular-components-bignumber-input.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n KeyValueDiffers,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { CurrencyMaskDirective } from 'ng2-currency-mask';\nimport { first } from 'rxjs/operators';\nimport { AlignmentOptions } from '@seniorsistemas/ng2-currency-mask';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\n\n/**\n * @deprecated Should use 'AlignmentOptions' from @seniorsistemas/ng2-currency-mask instead\n */\nexport enum BignumberAlignmentOption {\n RIGHT = 'right',\n LEFT = 'left',\n}\n\n/**\n * @deprecated Utilize a diretiva `BigNumberInput` ao invés desta.\n * @description Diretiva de máscara para campos de entrada de números de grande precisão,\n * adaptada do `CurrencyMaskDirective`. Permite configurar precisão, escala,\n * separadores decimais e de milhar de acordo com o locale da aplicação.\n *\n * @example\n * ```html\n * <input sBignumberInput [precision]=\"15\" [scale]=\"2\" [allowNegative]=\"false\" />\n * ```\n *\n * @category Inputs\n */\n@Directive({\n selector: 'input[sBignumberInput]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n useExisting: forwardRef(() => BignumberInputDirective),\n multi: true,\n },\n ],\n})\nexport class BignumberInputDirective extends CurrencyMaskDirective implements OnInit, OnChanges {\n /**\n * @description Número total de dígitos significativos aceitos pelo campo.\n *\n * @default 15\n */\n @Input()\n public precision = 15;\n\n /**\n * @description Número de casas decimais exibidas e aceitas pelo campo.\n *\n * @default 0\n */\n @Input()\n public scale = 0;\n\n /**\n * @description Separador decimal personalizado. Quando não informado,\n * utiliza o separador definido pelo locale ativo da aplicação.\n */\n @Input()\n public decimalSeparator?: string;\n\n /**\n * @description Separador de milhar personalizado. Quando não informado,\n * utiliza o separador definido pelo locale ativo da aplicação.\n */\n @Input()\n public thousandsSeparator?: string;\n\n /**\n * @description Alinhamento do conteúdo do campo. Aceita `'left'` ou `'right'`.\n *\n * @default 'left'\n */\n @Input()\n public alignTo: 'left' | 'right' = 'left';\n\n /**\n * @description Permite a entrada de valores negativos.\n *\n * @default true\n */\n @Input()\n public allowNegative = true;\n\n /**\n * @description Texto de placeholder exibido quando o campo está vazio.\n */\n @Input()\n @HostBinding('attr.placeholder')\n public placeholder?: string;\n\n @HostBinding('attr.maxLength')\n public maxLength?: number;\n\n /**\n * @description Emitido quando uma colé (paste) é rejeitada pela validação do campo.\n * Emite a string colada que foi recusada.\n */\n @Output()\n public pasteRejected = new EventEmitter<string>();\n\n private readonly regex = /\\d/;\n\n //TODO: Ajuste no ng2-currency-mask para utilizar esse Código (aplicado na tarefa: SDS-305)\n // private readonly _angularComponentsLocaleService: LocaleService;\n\n // constructor(injector: Injector) {\n // super(injector);\n\n // this._angularComponentsLocaleService = injector.get(LocaleService);\n // this.onLocaleService();\n // }\n\n //TODO: Remover esse constructor\n constructor(\n _elementRef: ElementRef,\n _keyValueDiffers: KeyValueDiffers,\n private readonly localeService: LocaleService,\n ) {\n super(\n { align: '', allowNegative: true, decimal: '', precision: 0, prefix: '', suffix: '', thousands: '' },\n _elementRef,\n _keyValueDiffers,\n );\n\n this.onLocaleService();\n }\n\n public override ngOnInit(): void {\n this.updateVariables();\n\n super.ngOnInit();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n const placeholderChange = changes['placeholder']?.currentValue;\n if (!placeholderChange && this.scale) {\n this.placeholder = `0${this.decimalSeparator}${''.padEnd(this.scale, '0')}`;\n }\n\n const configChanged =\n changes['scale'] ||\n changes['decimalSeparator'] ||\n changes['thousandsSeparator'] ||\n changes['alignTo'] ||\n changes['precision'] ||\n changes['allowNegative'];\n\n if (configChanged) {\n this.updateVariables();\n }\n }\n\n @HostListener('paste', ['$event'])\n public onPaste(event: ClipboardEvent): void {\n const pastedText = event.clipboardData?.getData('text') ?? '';\n const numericText = pastedText\n .replace(new RegExp(`\\\\${this.thousandsSeparator}`, 'g'), '')\n .replace(this.decimalSeparator as string, '.');\n const [intPart, decimalPart = ''] = numericText.split('.');\n const totalDigits = intPart.replace(/\\D/g, '').length + decimalPart.slice(0, this.scale).length;\n\n if (totalDigits > this.precision) {\n event.preventDefault();\n this.pasteRejected.emit(pastedText);\n }\n }\n\n /**\n * Update the options values according to the directive input values.\n */\n private updateVariables(): void {\n this.options = {\n align: this.alignTo,\n decimal: this.decimalSeparator,\n thousands: this.thousandsSeparator,\n precision: this.scale || 0,\n prefix: '',\n suffix: '',\n allowNegative: this.allowNegative,\n };\n this.calculateMaxLength();\n }\n\n /**\n * Responsible to calculate the field maximum length considering the separators.\n */\n private calculateMaxLength(): void {\n const decSepLength = this.decimalSeparator?.length ?? 0;\n const thoSepLength = this.thousandsSeparator?.length ?? 0;\n\n const DIGITS_GROUP_SIZE = 3;\n\n let maxLength = this.precision + (this.scale ? decSepLength : 0);\n maxLength += Math.ceil((this.precision - (this.scale ? this.scale : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;\n\n this.maxLength = maxLength;\n }\n\n private onLocaleService(): void {\n this.localeService\n .getLocale()\n .pipe(first())\n .subscribe(() => {\n this.decimalSeparator = this.decimalSeparator ?? this.localeService.getDecimalSeparator();\n this.thousandsSeparator = this.thousandsSeparator ?? this.localeService.getGroupingSeparator();\n });\n }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n// NOSONAR - 'BignumberInputDirective' is deprecated.\nimport { BignumberInputDirective } from './bignumber-input.directive';\n\n@NgModule({\n imports: [CommonModule],\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n declarations: [BignumberInputDirective],\n // NOSONAR - 'BignumberInputDirective' is deprecated.\n exports: [BignumberInputDirective],\n})\nexport class BignumberInputModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -12,6 +12,18 @@ import * as i2 from '@ngx-translate/core';
12
12
  import { TranslateModule } from '@ngx-translate/core';
13
13
  import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
14
14
 
15
+ /**
16
+ * @description Componente de trilha de navegação (breadcrumb) que detecta automaticamente
17
+ * a rota ativa do Angular Router e constrói o caminho hierárquico de páginas.
18
+ * Cada segmento da rota precisa ter a propriedade `routeTitle` definida nos `data` da rota.
19
+ *
20
+ * @example
21
+ * ```html
22
+ * <s-breadcrumb homeUrl="/home" targetHomeUrl="_self" />
23
+ * ```
24
+ *
25
+ * @category Navegação
26
+ */
15
27
  class BreadcrumbListComponent {
16
28
  items = input.required();
17
29
  router = inject(Router);