@seniorsistemas/angular-components 18.1.0-feature-sds-276-ea560ae6 → 18.1.0-feature-sds-276-ee045828
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.
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +1 -1
- package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +9 -8
- package/custom-fields/lib/custom-fields/custom-fields.service.d.ts +4 -3
- package/custom-fields/lib/custom-fields/models/custom-field-type.d.ts +33 -0
- package/custom-fields/lib/custom-fields/models/index.d.ts +1 -0
- package/custom-fields/public-api.d.ts +2 -1
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/field-label/field-label.component.d.ts +3 -3
- package/dynamic-form/dynamic-form/components/grid/row/row.component.d.ts +22 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/lookup.component.d.ts +19 -34
- package/dynamic-form/dynamic-form/components/structure/base-structure-component.d.ts +10 -0
- package/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.d.ts +12 -0
- package/dynamic-form/dynamic-form/components/structure/section/section.component.d.ts +14 -0
- package/dynamic-form/dynamic-form/configurations/registry.d.ts +8 -0
- package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +11 -0
- package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +21 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/configurations/structure/section.d.ts +9 -8
- package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +11 -0
- package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +19 -0
- package/dynamic-form/dynamic-form/dynamic-form.d.ts +39 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/dynamic-form.directive.d.ts +6 -12
- package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +79 -0
- package/dynamic-form/dynamic-form/form-field/configurations/field-size.d.ts +13 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +21 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +28 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +28 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +21 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +12 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +16 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +33 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +11 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +18 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/country-phone-picker-field.d.ts +6 -7
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +43 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +56 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/number-field.d.ts +9 -22
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/password-field.d.ts +8 -20
- package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +24 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/radio-button-field.d.ts +7 -9
- package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +33 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +24 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +16 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +18 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-ia-field.d.ts +19 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +31 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/autocomplete/autocomplete-field.component.d.ts +9 -6
- package/dynamic-form/dynamic-form/form-field/fields/base-field-component.d.ts +7 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/bignumber/bignumber-field.component.d.ts +8 -8
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/boolean/boolean-radio-field/boolean-field.component.d.ts +4 -4
- package/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.d.ts +10 -0
- package/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.d.ts +11 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/calendar/calendar-field.component.d.ts +10 -10
- package/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.d.ts +10 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/chips/chips-field.component.d.ts +5 -5
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/country-phone-picker/country-phone-picker-field.component.d.ts +4 -4
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/currency/currency-field.component.d.ts +10 -6
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/file-upload/file-upload-field.component.d.ts +7 -6
- package/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.d.ts +18 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/number/number-field.component.d.ts +8 -9
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/password/password-field.component.d.ts +8 -6
- package/dynamic-form/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.d.ts +10 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/radio-button/radio-button-field.component.d.ts +5 -5
- package/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.d.ts +12 -0
- package/dynamic-form/dynamic-form/form-field/fields/slider/slider-field.component.d.ts +23 -0
- package/dynamic-form/dynamic-form/form-field/fields/star-rating/star-rating-field.component.d.ts +11 -0
- package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/text/text-field.component.d.ts +8 -8
- package/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +18 -0
- package/dynamic-form/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.d.ts +15 -0
- package/dynamic-form/dynamic-form/services/form-field-utils.service.d.ts +15 -0
- package/dynamic-form/public-api.d.ts +35 -43
- package/dynamic-form/src/optional-fields/editor/editor-field/editor-field.component.d.ts +10 -0
- package/dynamic-form/src/optional-fields/editor/editor-field.d.ts +15 -0
- package/dynamic-form/src/optional-fields/editor/index.d.ts +5 -0
- package/dynamic-form/src/optional-fields/editor/public-api.d.ts +1 -0
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +8 -6
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +68 -69
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +5 -5
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +26 -1
- package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +2 -0
- package/esm2022/custom-fields/public-api.mjs +3 -2
- package/esm2022/dynamic-form/dynamic-form/components/field-label/field-label.component.mjs +21 -0
- package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +39 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +661 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/types/default-filter.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/types/label-options.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/components/structure/base-structure-component.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs +17 -0
- package/esm2022/dynamic-form/dynamic-form/components/structure/section/section.component.mjs +23 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/registry.mjs +12 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +37 -0
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.directive.mjs +74 -0
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.mjs +81 -0
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +283 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/field-size.mjs +19 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +9 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-ia-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +41 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/base-field-component.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +119 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +21 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +17 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +28 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +123 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +15 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.mjs +53 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +23 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +99 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/file-upload/file-upload-field.component.mjs +47 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +40 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +114 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +73 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +16 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +49 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +19 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/slider/slider-field.component.mjs +113 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +21 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +79 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +34 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.mjs +27 -0
- package/esm2022/dynamic-form/dynamic-form/services/form-field-utils.service.mjs +39 -0
- package/esm2022/dynamic-form/public-api.mjs +61 -44
- package/esm2022/dynamic-form/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/esm2022/dynamic-form/src/optional-fields/editor/editor-field/editor-field.component.mjs +18 -0
- package/esm2022/dynamic-form/src/optional-fields/editor/editor-field.mjs +2 -0
- package/esm2022/dynamic-form/src/optional-fields/editor/public-api.mjs +5 -0
- package/esm2022/dynamic-form/src/optional-fields/editor/seniorsistemas-angular-components-dynamic-form-src-optional-fields-editor.mjs +5 -0
- package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +5 -5
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.mjs +1 -1
- package/esm2022/select/lib/select/select.component.mjs +3 -3
- package/esm2022/table/lib/table/table-column/models/dynamic-editable-grid.interface.mjs +1 -1
- package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.component.mjs +6 -6
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +7 -5
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +95 -71
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form-src-optional-fields-editor.mjs +25 -0
- package/fesm2022/seniorsistemas-angular-components-dynamic-form-src-optional-fields-editor.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +871 -2437
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-file-upload.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +5 -5
- package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/file-upload/lib/file-upload/file-upload.component.d.ts +2 -2
- package/package.json +12 -18
- package/table/lib/table/table-column/models/dynamic-editable-grid.interface.d.ts +2 -2
- package/text-area-ia/lib/text-area-ia/text-area-ia.component.d.ts +2 -1
- package/dynamic-form/lib/dynamic-form/components/grid/row/row.component.d.ts +0 -15
- package/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.d.ts +0 -8
- package/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.d.ts +0 -12
- package/dynamic-form/lib/dynamic-form/components/structure/section/section.component.d.ts +0 -14
- package/dynamic-form/lib/dynamic-form/configurations/dynamic-config.d.ts +0 -3
- package/dynamic-form/lib/dynamic-form/configurations/dynamic-type.d.ts +0 -24
- package/dynamic-form/lib/dynamic-form/configurations/grid/grid.d.ts +0 -14
- package/dynamic-form/lib/dynamic-form/configurations/grid/row.d.ts +0 -8
- package/dynamic-form/lib/dynamic-form/configurations/grid-type.d.ts +0 -3
- package/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/configurations/structure/structure.d.ts +0 -14
- package/dynamic-form/lib/dynamic-form/configurations/structure-type.d.ts +0 -4
- package/dynamic-form/lib/dynamic-form/dynamic-form.component.d.ts +0 -19
- package/dynamic-form/lib/dynamic-form/dynamic-form.d.ts +0 -57
- package/dynamic-form/lib/dynamic-form/dynamic-form.module.d.ts +0 -83
- package/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.d.ts +0 -7
- package/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.d.ts +0 -32
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +0 -30
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +0 -38
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.d.ts +0 -43
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +0 -29
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +0 -11
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.d.ts +0 -34
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +0 -45
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +0 -9
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.d.ts +0 -24
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.d.ts +0 -9
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.d.ts +0 -14
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.d.ts +0 -18
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.d.ts +0 -96
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +0 -97
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +0 -35
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.d.ts +0 -41
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.d.ts +0 -32
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +0 -17
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +0 -24
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.d.ts +0 -26
- package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.d.ts +0 -41
- package/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.d.ts +0 -32
- package/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.d.ts +0 -9
- package/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.d.ts +0 -9
- package/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.d.ts +0 -25
- package/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.d.ts +0 -10
- package/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +0 -14
- package/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.d.ts +0 -9
- package/dynamic-form/lib/dynamic-form/form-field/form-field.d.ts +0 -192
- package/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.d.ts +0 -12
- package/esm2022/dynamic-form/lib/dynamic-form/components/field-label/field-label.component.mjs +0 -20
- package/esm2022/dynamic-form/lib/dynamic-form/components/grid/row/row.component.mjs +0 -41
- package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +0 -642
- package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/default-filter.mjs +0 -2
- package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/label-options.mjs +0 -2
- package/esm2022/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.mjs +0 -2
- package/esm2022/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.mjs +0 -27
- package/esm2022/dynamic-form/lib/dynamic-form/components/structure/section/section.component.mjs +0 -33
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-config.mjs +0 -71
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-type.mjs +0 -26
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/grid.mjs +0 -14
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/row.mjs +0 -10
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid-type.mjs +0 -5
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.mjs +0 -10
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/section.mjs +0 -31
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/structure.mjs +0 -9
- package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure-type.mjs +0 -6
- package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.component.mjs +0 -41
- package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.directive.mjs +0 -107
- package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.mjs +0 -189
- package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.module.mjs +0 -293
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/addon-config.mjs +0 -2
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.mjs +0 -13
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.mjs +0 -34
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +0 -24
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +0 -37
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.mjs +0 -31
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.mjs +0 -30
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +0 -15
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.mjs +0 -47
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.mjs +0 -56
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +0 -9
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.mjs +0 -25
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +0 -15
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.mjs +0 -14
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.mjs +0 -16
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.mjs +0 -15
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.mjs +0 -64
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.mjs +0 -66
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/number-field.mjs +0 -38
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/password-field.mjs +0 -33
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.mjs +0 -35
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +0 -27
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.mjs +0 -43
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.mjs +0 -30
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +0 -17
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.mjs +0 -30
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.mjs +0 -32
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.mjs +0 -38
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +0 -37
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.mjs +0 -22
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +0 -124
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +0 -27
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +0 -23
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.mjs +0 -31
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +0 -118
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +0 -21
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/chips/chips-field.component.mjs +0 -59
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +0 -29
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/currency/currency-field.component.mjs +0 -100
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.mjs +0 -23
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/file-upload/file-upload-field.component.mjs +0 -56
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +0 -23
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/number/number-field.component.mjs +0 -121
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/password/password-field.component.mjs +0 -75
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +0 -22
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +0 -52
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.mjs +0 -24
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.mjs +0 -103
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +0 -25
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text/text-field.component.mjs +0 -88
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +0 -29
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.mjs +0 -22
- package/esm2022/dynamic-form/lib/dynamic-form/form-field/form-field.mjs +0 -243
- package/esm2022/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.mjs +0 -150
- package/esm2022/form-dynamic/components/form-dynamic/form-dynamic.component.mjs +0 -53
- package/esm2022/form-dynamic/core/registry.mjs +0 -10
- package/esm2022/form-dynamic/fields-basic/boolean-field/boolean-field.component.mjs +0 -15
- package/esm2022/form-dynamic/fields-basic/string-field/string-field.component.mjs +0 -15
- package/esm2022/form-dynamic/optional-fields/editor/editor-field/editor-field.component.mjs +0 -30
- package/esm2022/form-dynamic/optional-fields/editor/editor-types.mjs +0 -2
- package/esm2022/form-dynamic/optional-fields/editor/public-api.mjs +0 -6
- package/esm2022/form-dynamic/optional-fields/editor/seniorsistemas-angular-components-form-dynamic-optional-fields-editor.mjs +0 -5
- package/esm2022/form-dynamic/public-api.mjs +0 -10
- package/esm2022/form-dynamic/schemas/field-dynamic.mjs +0 -2
- package/esm2022/form-dynamic/schemas/form-dynamic-schema.mjs +0 -2
- package/esm2022/form-dynamic/seniorsistemas-angular-components-form-dynamic.mjs +0 -5
- package/fesm2022/seniorsistemas-angular-components-form-dynamic-optional-fields-editor.mjs +0 -40
- package/fesm2022/seniorsistemas-angular-components-form-dynamic-optional-fields-editor.mjs.map +0 -1
- package/fesm2022/seniorsistemas-angular-components-form-dynamic.mjs +0 -94
- package/fesm2022/seniorsistemas-angular-components-form-dynamic.mjs.map +0 -1
- package/form-dynamic/components/form-dynamic/form-dynamic.component.d.ts +0 -15
- package/form-dynamic/core/registry.d.ts +0 -7
- package/form-dynamic/fields-basic/boolean-field/boolean-field.component.d.ts +0 -9
- package/form-dynamic/fields-basic/string-field/string-field.component.d.ts +0 -9
- package/form-dynamic/index.d.ts +0 -5
- package/form-dynamic/optional-fields/editor/editor-field/editor-field.component.d.ts +0 -15
- package/form-dynamic/optional-fields/editor/editor-types.d.ts +0 -8
- package/form-dynamic/optional-fields/editor/index.d.ts +0 -5
- package/form-dynamic/optional-fields/editor/public-api.d.ts +0 -8
- package/form-dynamic/public-api.d.ts +0 -4
- package/form-dynamic/schemas/field-dynamic.d.ts +0 -20
- package/form-dynamic/schemas/form-dynamic-schema.d.ts +0 -4
- /package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/types/default-filter.d.ts +0 -0
- /package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/types/label-options.d.ts +0 -0
- /package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/addon-config.d.ts +0 -0
|
@@ -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 * 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@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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"}
|
|
@@ -62,10 +62,12 @@ class BignumberInputDirective extends CurrencyMaskDirective {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
onPaste(event) {
|
|
65
|
-
const pastedText = event.clipboardData?.getData(
|
|
66
|
-
const numericText = pastedText
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
const pastedText = event.clipboardData?.getData('text') ?? '';
|
|
66
|
+
const numericText = pastedText
|
|
67
|
+
.replace(new RegExp(`\\${this.thousandsSeparator}`, 'g'), '')
|
|
68
|
+
.replace(this.decimalSeparator, '.');
|
|
69
|
+
const [intPart, decimalPart = ''] = numericText.split('.');
|
|
70
|
+
const totalDigits = intPart.replace(/\D/g, '').length + decimalPart.slice(0, this.scale).length;
|
|
69
71
|
if (totalDigits > this.precision) {
|
|
70
72
|
event.preventDefault();
|
|
71
73
|
this.pasteRejected.emit(pastedText);
|
|
@@ -153,7 +155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
153
155
|
type: Output
|
|
154
156
|
}], onPaste: [{
|
|
155
157
|
type: HostListener,
|
|
156
|
-
args: [
|
|
158
|
+
args: ['paste', ['$event']]
|
|
157
159
|
}] } });
|
|
158
160
|
|
|
159
161
|
class BignumberInputModule {
|
|
@@ -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';\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\n private readonly regex = /\\d/;\n\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\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.replace(new RegExp(`\\\\${this.thousandsSeparator}`, \"g\"), \"\").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\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","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 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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"}
|