@seniorsistemas/angular-components 19.9.14 → 19.9.15-develop-11ab86f5
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/README.md +84 -2
- package/accordion/README.md +5 -4
- package/accordion/lib/accordion/accordion.module.d.ts +7 -0
- package/alert/lib/alert/alert.module.d.ts +7 -0
- package/badge/README.md +5 -4
- package/badge/lib/badge/badge.module.d.ts +10 -0
- package/bignumber-input/README.md +5 -4
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +16 -39
- package/bignumber-input/lib/bignumber-input/bignumber-input.module.d.ts +7 -0
- package/breadcrumb/README.md +5 -4
- package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.d.ts +5 -1
- package/button/lib/button/button.module.d.ts +7 -0
- package/calendar-mask/README.md +5 -4
- package/calendar-mask/lib/calendar-mask/calendar-mask.module.d.ts +7 -0
- package/card/README.md +6 -5
- package/card/lib/card/card.component.d.ts +2 -0
- package/card/lib/card/card.module.d.ts +7 -0
- package/chat/README.md +11 -8
- package/chat/lib/chat/chat.module.d.ts +7 -0
- package/checkbox-list/README.md +5 -4
- package/checkbox-list/lib/checkbox-list/checkbox-list.module.d.ts +7 -0
- package/chips/README.md +5 -4
- package/chips/lib/chips/chips.module.d.ts +7 -0
- package/code-editor/README.md +5 -4
- package/code-editor/lib/code-editor/code-editor.module.d.ts +7 -0
- package/collapse-link/README.md +5 -4
- package/collapse-link/lib/collapse-link/collapse-link.module.d.ts +7 -0
- package/common/lib/angular-components.module.d.ts +9 -0
- package/common/lib/provide-angular-components.d.ts +19 -0
- package/common/lib/svg-factory/svg-factory.module.d.ts +7 -0
- package/common/public-api.d.ts +1 -0
- package/content-generator/README.md +2 -2
- package/content-generator/lib/content-generator/content-generator.module.d.ts +7 -0
- package/control-errors/README.md +2 -2
- package/control-errors/lib/control-errors/control-errors.module.d.ts +7 -0
- package/country-phone-picker/README.md +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +1 -0
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.d.ts +7 -0
- package/currency/README.md +1 -1
- package/custom-fields/README.md +14 -3
- package/custom-fields/lib/custom-fields/custom-fields.module.d.ts +7 -0
- package/custom-fields/lib/custom-fields/models/custom-field-value-parser.d.ts +21 -0
- package/custom-fields/lib/custom-fields/models/index.d.ts +1 -0
- package/dialog/README.md +1 -1
- package/drawer/README.md +8 -4
- package/drawer/lib/drawer/drawer.module.d.ts +10 -0
- package/dynamic-form/README.md +18 -2
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +0 -1
- package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +7 -0
- package/dynamic-form/dynamic-form/form-field/addon-config.d.ts +10 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -15
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +8 -6
- package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +5 -2
- package/dynamic-form/public-api.d.ts +0 -1
- package/editable-overlay/README.md +2 -2
- package/editable-overlay/lib/editable-overlay/editable-overlay.module.d.ts +7 -0
- package/empty-state/README.md +5 -2
- package/empty-state/lib/empty-state/empty-state.module.d.ts +7 -0
- package/esm2022/accordion/lib/accordion/accordion.module.mjs +8 -1
- package/esm2022/alert/lib/alert/alert.module.mjs +8 -1
- package/esm2022/badge/lib/badge/badge.module.mjs +11 -1
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +19 -127
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +8 -1
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.mjs +6 -2
- package/esm2022/button/lib/button/button.module.mjs +8 -1
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +8 -1
- package/esm2022/card/lib/card/card.component.mjs +17 -3
- package/esm2022/card/lib/card/card.module.mjs +8 -1
- package/esm2022/chat/lib/chat/chat.module.mjs +8 -1
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +8 -1
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
- package/esm2022/chips/lib/chips/chips.module.mjs +8 -1
- package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +10 -1
- package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +9 -15
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +8 -1
- package/esm2022/common/lib/angular-components.module.mjs +10 -1
- package/esm2022/common/lib/provide-angular-components.mjs +22 -0
- package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +8 -1
- package/esm2022/common/public-api.mjs +2 -1
- package/esm2022/content-generator/lib/content-generator/content-generator.module.mjs +8 -1
- package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +8 -1
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +12 -7
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +8 -1
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +4 -3
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -13
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +8 -1
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +4 -3
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +4 -2
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-value-parser.mjs +46 -0
- package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +2 -1
- package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +11 -1
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -5
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +8 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +6 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +33 -10
- package/esm2022/dynamic-form/public-api.mjs +2 -7
- package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +8 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +8 -1
- package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +8 -1
- package/esm2022/file-picker/lib/file-picker/file-picker.module.mjs +8 -1
- package/esm2022/file-picker/lib/file-picker/file-picker.service.mjs +4 -3
- package/esm2022/gantt/lib/gantt/gantt.module.mjs +8 -1
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +19 -1
- package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +8 -1
- package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +8 -1
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +12 -1
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +4 -3
- package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +8 -1
- package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +8 -1
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +5 -5
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +8 -1
- package/esm2022/input-group/lib/input-group/input-group.module.mjs +8 -1
- package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +8 -1
- package/esm2022/input-text/lib/input-text/input-text.module.mjs +8 -1
- package/esm2022/insights/lib/insights/insights.module.mjs +11 -1
- package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +4 -3
- package/esm2022/kanban/lib/kanban/kanban.module.mjs +11 -1
- package/esm2022/label-value/lib/label-value/label-value.module.mjs +8 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +8 -1
- package/esm2022/locale/lib/locale/locale.module.mjs +14 -1
- package/esm2022/locale/lib/locale/locale.service.mjs +4 -3
- package/esm2022/locale/lib/locale/options/index.mjs +1 -13
- package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
- package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +10 -2
- package/esm2022/locale/lib/locale/provide-locale.mjs +42 -0
- package/esm2022/locale/public-api.mjs +2 -1
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +5 -1
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +8 -1
- package/esm2022/mask/lib/mask/mask-formatter.module.mjs +8 -1
- package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +8 -1
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +8 -1
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +2 -2
- package/esm2022/number-input/lib/number-input/number-input.module.mjs +9 -2
- package/esm2022/numeric/lib/numeric.module.mjs +8 -1
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +178 -15
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.module.mjs +8 -1
- package/esm2022/object-card/lib/object-card/object-card.module.mjs +12 -1
- package/esm2022/panel/lib/panel/panel.module.mjs +11 -1
- package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +8 -1
- package/esm2022/picklist/lib/picklist/picklist.module.mjs +8 -1
- package/esm2022/pin-code-field/lib/pin-code-field.module.mjs +8 -1
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +8 -1
- package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +8 -1
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +8 -1
- package/esm2022/select/lib/select/select.component.mjs +16 -3
- package/esm2022/select-button/lib/select-button/select-button.module.mjs +8 -1
- package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +8 -1
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.mjs +8 -1
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.service.mjs +4 -3
- package/esm2022/slider/lib/slider/slider.module.mjs +8 -1
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +8 -1
- package/esm2022/split-button/lib/split-button/split-button.module.mjs +8 -1
- package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +8 -1
- package/esm2022/stepper/lib/stepper/stepper.module.mjs +8 -1
- package/esm2022/structure/lib/structure/structure.module.mjs +8 -1
- package/esm2022/switch/lib/switch/switch.module.mjs +8 -1
- package/esm2022/table/lib/table/table.module.mjs +9 -1
- package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +8 -1
- package/esm2022/template/lib/template/template.module.mjs +8 -1
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/text-area/lib/text-area.module.mjs +8 -1
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +8 -1
- package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +8 -1
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +8 -1
- package/esm2022/tile/lib/tile/tile.module.mjs +11 -1
- package/esm2022/timeline/lib/timeline/timeline.module.mjs +8 -1
- package/esm2022/toast/lib/toast/toast.module.mjs +8 -1
- package/esm2022/token-list/lib/token-list/token-list.module.mjs +8 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +8 -1
- package/esm2022/topbar/lib/topbar/topbar.module.mjs +11 -1
- package/esm2022/tree/lib/tree/tree.module.mjs +8 -1
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +8 -1
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +25 -126
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +23 -2
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chat.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +9 -2
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +164 -160
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-common.mjs +38 -2
- package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +21 -8
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +75 -15
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +54 -212
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +10 -2
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +18 -0
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +14 -2
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +11 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-group.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-input-group.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +13 -2
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +58 -5
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +11 -0
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +9 -2
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +184 -14
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +11 -0
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +15 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +10 -2
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-structure.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +8 -0
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +9 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fieldset/README.md +2 -2
- package/fieldset/lib/fieldset/fieldset.module.d.ts +7 -0
- package/file-picker/README.md +2 -2
- package/file-picker/lib/file-picker/file-picker.module.d.ts +7 -0
- package/file-upload/README.md +1 -1
- package/gantt/README.md +2 -2
- package/gantt/lib/gantt/gantt.module.d.ts +7 -0
- package/global-search/README.md +5 -2
- package/global-search/lib/global-search/global-search.module.d.ts +18 -0
- package/grid-menu/README.md +5 -4
- package/grid-menu/lib/grid-menu/grid-menu.module.d.ts +7 -0
- package/help-popover/README.md +5 -4
- package/help-popover/lib/help-popover/help-popover.module.d.ts +7 -0
- package/ia-insight/README.md +1 -1
- package/image-cropper/README.md +6 -5
- package/image-cropper/lib/image-cropper/image-cropper.module.d.ts +11 -0
- package/infinite-scroll/README.md +5 -4
- package/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.d.ts +7 -0
- package/info-sign/README.md +5 -4
- package/info-sign/lib/info-sign/info-sign.module.d.ts +7 -0
- package/inline-edit/README.md +5 -4
- package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +7 -0
- package/input-group/lib/input-group/input-group.module.d.ts +7 -0
- package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
- package/input-text/lib/input-text/input-text.module.d.ts +7 -0
- package/insights/README.md +6 -4
- package/insights/lib/insights/insights.module.d.ts +10 -0
- package/kanban/README.md +6 -4
- package/kanban/lib/kanban/kanban.module.d.ts +10 -0
- package/label-value/README.md +5 -4
- package/label-value/lib/label-value/label-value.module.d.ts +7 -0
- package/loading-state/README.md +9 -5
- package/loading-state/lib/loading-state/loading-state.module.d.ts +7 -0
- package/locale/lib/locale/locale.module.d.ts +13 -0
- package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -2
- package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +20 -1
- package/locale/lib/locale/provide-locale.d.ts +18 -0
- package/locale/public-api.d.ts +1 -0
- package/localized-number-input/README.md +32 -8
- package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +4 -0
- package/localized-number-input/lib/localized-number-input/localized-number-input.module.d.ts +7 -0
- package/mask/lib/mask/mask-formatter.module.d.ts +7 -0
- package/mouse-events/README.md +5 -4
- package/mouse-events/lib/mouse-events/mouse-events.module.d.ts +7 -0
- package/navigation-button/README.md +5 -4
- package/navigation-button/lib/navigation-button/navigation-button.module.d.ts +7 -0
- package/number-input/lib/number-input/number-input.directive.d.ts +1 -1
- package/number-input/lib/number-input/number-input.module.d.ts +8 -1
- package/numeric/README.md +6 -5
- package/numeric/lib/numeric.module.d.ts +7 -0
- package/numeric-mask/README.md +44 -1
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +65 -4
- package/numeric-mask/lib/numeric-mask/numeric-mask.module.d.ts +7 -0
- package/object-card/README.md +11 -4
- package/object-card/lib/object-card/object-card.module.d.ts +11 -0
- package/package.json +1 -1
- package/panel/README.md +8 -4
- package/panel/lib/panel/panel.module.d.ts +10 -0
- package/password-strength/README.md +6 -3
- package/password-strength/lib/password-strength/password-strength.module.d.ts +7 -0
- package/picklist/README.md +8 -5
- package/picklist/lib/picklist/picklist.module.d.ts +7 -0
- package/pin-code-field/lib/pin-code-field.module.d.ts +7 -0
- package/product-header/README.md +2 -2
- package/profile-picture-picker/README.md +6 -3
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.d.ts +7 -0
- package/progressbar/README.md +6 -3
- package/progressbar/lib/progressbar/progressbar.module.d.ts +7 -0
- package/rating-scale/README.md +6 -3
- package/rating-scale/lib/rating-scale/rating-scale.module.d.ts +7 -0
- package/schematics/collection.json +40 -0
- package/schematics/migrations/migrate-app-to-standalone/index.d.ts +32 -0
- package/schematics/migrations/migrate-app-to-standalone/index.js +98 -0
- package/schematics/migrations/migrate-app-to-standalone/index.js.map +1 -0
- package/schematics/migrations/migrate-deprecated-apis/index.d.ts +49 -0
- package/schematics/migrations/migrate-deprecated-apis/index.js +660 -0
- package/schematics/migrations/migrate-deprecated-apis/index.js.map +1 -0
- package/schematics/migrations/migrate-deprecated-datepicker/index.d.ts +31 -0
- package/schematics/migrations/migrate-deprecated-datepicker/index.js +115 -0
- package/schematics/migrations/migrate-deprecated-datepicker/index.js.map +1 -0
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.d.ts +52 -0
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.js +661 -0
- package/schematics/migrations/migrate-deprecated-dynamic-form/index.js.map +1 -0
- package/schematics/migrations/migrate-deprecated-imports/index.d.ts +23 -0
- package/schematics/migrations/migrate-deprecated-imports/index.js +335 -0
- package/schematics/migrations/migrate-deprecated-imports/index.js.map +1 -0
- package/schematics/migrations/migrate-deprecated-selectors/index.d.ts +15 -0
- package/schematics/migrations/migrate-deprecated-selectors/index.js +76 -0
- package/schematics/migrations/migrate-deprecated-selectors/index.js.map +1 -0
- package/schematics/migrations/migrate-modules-to-standalone/index.d.ts +51 -0
- package/schematics/migrations/migrate-modules-to-standalone/index.js +632 -0
- package/schematics/migrations/migrate-modules-to-standalone/index.js.map +1 -0
- package/schematics/migrations/migrate-modules-to-standalone/modules-map.json +1656 -0
- package/schematics/migrations/migrate-v20/index.d.ts +9 -0
- package/schematics/migrations/migrate-v20/index.js +90 -0
- package/schematics/migrations/migrate-v20/index.js.map +1 -0
- package/schematics/migrations/migrate-v20/items.d.ts +7 -0
- package/schematics/migrations/migrate-v20/items.js +54 -0
- package/schematics/migrations/migrate-v20/items.js.map +1 -0
- package/schematics/migrations/migrate-v20/plan.d.ts +32 -0
- package/schematics/migrations/migrate-v20/plan.js +29 -0
- package/schematics/migrations/migrate-v20/plan.js.map +1 -0
- package/schematics/migrations.json +5 -1
- package/schematics/schema/app-standalone.schema.json +21 -0
- package/schematics/schema/migrate-v20.schema.json +33 -0
- package/schematics/schema/scope.schema.json +17 -0
- package/schematics/utils/ast-utils.js +16 -0
- package/schematics/utils/ast-utils.js.map +1 -1
- package/schematics/utils/eol.d.ts +5 -0
- package/schematics/utils/eol.js +17 -0
- package/schematics/utils/eol.js.map +1 -0
- package/schematics/utils/prompt-utils.d.ts +62 -0
- package/schematics/utils/prompt-utils.js +166 -0
- package/schematics/utils/prompt-utils.js.map +1 -0
- package/schematics/utils/report.d.ts +27 -0
- package/schematics/utils/report.js +70 -0
- package/schematics/utils/report.js.map +1 -0
- package/schematics/utils/scope.d.ts +17 -0
- package/schematics/utils/scope.js +55 -0
- package/schematics/utils/scope.js.map +1 -0
- package/schematics/utils/selection.d.ts +21 -0
- package/schematics/utils/selection.js +60 -0
- package/schematics/utils/selection.js.map +1 -0
- package/schematics/utils/symbol-utils.d.ts +31 -0
- package/schematics/utils/symbol-utils.js +202 -0
- package/schematics/utils/symbol-utils.js.map +1 -0
- package/schematics/utils/template-utils.d.ts +62 -0
- package/schematics/utils/template-utils.js +165 -0
- package/schematics/utils/template-utils.js.map +1 -0
- package/schematics/utils/tsconfig-paths.d.ts +5 -0
- package/schematics/utils/tsconfig-paths.js +73 -0
- package/schematics/utils/tsconfig-paths.js.map +1 -0
- package/select/lib/select/select.component.d.ts +8 -0
- package/select-button/README.md +6 -3
- package/select-button/lib/select-button/select-button.module.d.ts +7 -0
- package/shared/lib/shared/border-button/border-button.module.d.ts +7 -0
- package/sidebar/README.md +2 -2
- package/slide-in-bar/README.md +5 -5
- package/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.d.ts +7 -0
- package/slider/README.md +6 -3
- package/slider/lib/slider/slider.module.d.ts +7 -0
- package/speech-recognition/README.md +6 -3
- package/speech-recognition/lib/speech-recognition/speech-recognition.module.d.ts +7 -0
- package/split-button/README.md +6 -3
- package/split-button/lib/split-button/split-button.module.d.ts +7 -0
- package/stats-card/README.md +6 -3
- package/stats-card/lib/stats-card/stats-card.module.d.ts +7 -0
- package/stepper/README.md +6 -3
- package/stepper/lib/stepper/stepper.module.d.ts +7 -0
- package/structure/lib/structure/structure.module.d.ts +7 -0
- package/switch/README.md +6 -3
- package/switch/lib/switch/switch.module.d.ts +7 -0
- package/table/README.md +12 -4
- package/table/lib/table/table.module.d.ts +8 -0
- package/table-header/lib/table-header/table-header-checkox.module.d.ts +7 -0
- package/template/README.md +0 -11
- package/template/lib/template/template.module.d.ts +7 -0
- package/text-area/lib/text-area.module.d.ts +7 -0
- package/text-area-ia/README.md +1 -1
- package/thumbnail/lib/thumbnail/thumbnail.module.d.ts +7 -0
- package/thumbnails/lib/thumbnails/thumbnails.module.d.ts +7 -0
- package/tiered-menu/lib/tiered-menu/tiered-menu.module.d.ts +7 -0
- package/tile/lib/tile/tile.module.d.ts +10 -0
- package/timeline/lib/timeline/timeline.module.d.ts +7 -0
- package/toast/lib/toast/toast.module.d.ts +7 -0
- package/token-list/lib/token-list/token-list.module.d.ts +7 -0
- package/tooltip/lib/tooltip/tooltip.module.d.ts +7 -0
- package/topbar/lib/topbar/topbar.module.d.ts +10 -0
- package/tree/lib/tree/tree.module.d.ts +7 -0
- package/workspace-switch/lib/workspace-switch/workspace-switch.module.d.ts +7 -0
- package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +0 -664
- package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +0 -29
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +0 -96
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +0 -124
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-profile-picture-picker.mjs","sources":["../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.component.ts","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.component.html","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.module.ts","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/validators/validators.ts","../../projects/angular-components/profile-picture-picker/src/seniorsistemas-angular-components-profile-picture-picker.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { ConfirmationTexts, CropperLabelsConfig, FileValidationErrors, ProfilePicturePickerData } from './models/index';\r\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\r\nimport { ImageCropperService } from '@seniorsistemas/angular-components/image-cropper';\r\nimport { ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';\r\nimport { ThumbnailComponent } from '@seniorsistemas/angular-components/thumbnail';\r\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\r\n\r\n/**\r\n * @description Componente para seleção, edição e remoção de foto de perfil do usuário.\r\n * Permite ao usuário fazer upload de uma imagem, recortá-la com o {@link ImageCropperService}\r\n * e confirmar ou remover a foto atual. Implementa {@link ControlValueAccessor} para uso\r\n * em formulários reativos e template-driven do Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-profile-picture-picker\r\n * formControlName=\"avatar\"\r\n * subtitle=\"Formatos aceitos: JPG e PNG\"\r\n * [maxFileSize]=\"2097152\"\r\n * accept=\"image/jpeg,image/png\"\r\n * (imageChange)=\"onImageChange($event)\"\r\n * (removedImage)=\"onImageRemoved()\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-profile-picture-picker',\r\n templateUrl: 'profile-picture-picker.component.html',\r\n styleUrls: ['profile-picture-picker.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ProfilePicturePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [ThumbnailComponent, ButtonComponent, TranslatePipe],\r\n})\r\nexport class ProfilePicturePickerComponent implements OnInit, ControlValueAccessor {\r\n private readonly imageCropperService = inject(ImageCropperService);\r\n private readonly confirmDialogService = inject(ConfirmDialogService);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n /**\r\n * @description Título simples exibido quando nenhuma imagem está selecionada.\r\n */\r\n @Input()\r\n public simpleTitle!: string;\r\n\r\n /**\r\n * @description Título de ação exibido como label principal do botão de upload.\r\n */\r\n @Input()\r\n public actionTitle!: string;\r\n\r\n /**\r\n * @description Legenda exibida abaixo do título, descrevendo formatos suportados\r\n * ou outras orientações para o usuário. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public subtitle!: string;\r\n\r\n /**\r\n * @description Proporção (aspect ratio) do recorte da imagem.\r\n * Por exemplo, `1` para quadrado, `16/9` para widescreen.\r\n *\r\n * @default 1\r\n */\r\n @Input()\r\n public aspectRatio = 1;\r\n\r\n /**\r\n * @description Configurações de rótulos exibidos no componente de recorte de imagem (cropper).\r\n * Permite sobrescrever os textos padrão dos botões e instruções do cropper.\r\n */\r\n @Input()\r\n public cropperLabelsConfig?: CropperLabelsConfig;\r\n\r\n /**\r\n * @description Texto do botão de remoção da foto atual.\r\n * Se não informado, utiliza o label padrão de remoção.\r\n */\r\n @Input()\r\n public removeButtonLabel?: string;\r\n\r\n /**\r\n * @description Texto do botão de troca da foto atual.\r\n * Se não informado, utiliza o label padrão de alteração.\r\n */\r\n @Input()\r\n public changeButtonLabel?: string;\r\n\r\n /**\r\n * @description Textos personalizados exibidos no diálogo de confirmação\r\n * ao remover ou substituir a foto. Permite sobrescrever título, mensagem e botões.\r\n */\r\n @Input()\r\n public confirmationTexts?: ConfirmationTexts;\r\n\r\n /**\r\n * @description Tamanho máximo permitido para o arquivo de imagem, em bytes.\r\n * Quando o arquivo excede esse limite, o output `invalidFile` é emitido.\r\n */\r\n @Input()\r\n public maxFileSize?: number;\r\n\r\n /**\r\n * @description Tipos MIME aceitos pelo input de arquivo.\r\n * Exemplo: `\"image/jpeg,image/png\"`.\r\n */\r\n @Input()\r\n public accept?: string;\r\n\r\n /**\r\n * @description Lista de extensões de arquivo aceitas para validação.\r\n * Exemplo: `['.jpg', '.jpeg', '.png']`.\r\n *\r\n * @default []\r\n */\r\n @Input()\r\n public supportedExtensions: string[] = [];\r\n\r\n /**\r\n * @description Imagem atual do componente. Pode ser uma string base64, um objeto\r\n * {@link ProfilePicturePickerData} com metadados, ou `null` para sem imagem.\r\n *\r\n * @default null\r\n */\r\n @Input()\r\n public image: string | ProfilePicturePickerData | null = null;\r\n\r\n @ViewChild('uploadPicture')\r\n public uploadPicture: ElementRef | null = null;\r\n\r\n @ViewChild('info')\r\n public info: ElementRef | null = null;\r\n\r\n @ViewChild('thumbnail', { read: ElementRef })\r\n public thumbnail: ElementRef | null = null;\r\n\r\n @ViewChild('fileInput', { read: ElementRef })\r\n public fileInput: ElementRef | null = null;\r\n\r\n /**\r\n * @deprecated Use `imageChange` em vez deste output.\r\n * @description Emitido ao selecionar ou recortar uma nova imagem. Emite a string base64 da imagem.\r\n */\r\n @Output()\r\n public changedImage: EventEmitter<string> = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido ao selecionar, recortar ou alterar a imagem.\r\n * Emite a string base64 ou um objeto {@link ProfilePicturePickerData} com os dados da imagem.\r\n */\r\n @Output()\r\n public imageChange = new EventEmitter<string | ProfilePicturePickerData>();\r\n\r\n /**\r\n * @description Emitido quando o usuário confirma a remoção da foto atual.\r\n */\r\n @Output()\r\n public removedImage = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido quando o arquivo selecionado não passa na validação.\r\n * Emite um objeto {@link FileValidationErrors} descrevendo os erros encontrados\r\n * (ex.: tamanho excedido, extensão inválida).\r\n */\r\n @Output()\r\n public invalidFile: EventEmitter<FileValidationErrors> = new EventEmitter();\r\n\r\n public get imageBase64(): string {\r\n return typeof this.image === 'string' ? this.image : (this.image?.base64 ?? '');\r\n }\r\n\r\n public disabled = false;\r\n\r\n private _onChange?: (value: string | ProfilePicturePickerData) => void;\r\n private _onTouched?: () => void;\r\n\r\n public writeValue(value: string | ProfilePicturePickerData): void {\r\n this.image = value;\r\n }\r\n\r\n public registerOnChange(onChange: (value: string | ProfilePicturePickerData) => void): void {\r\n this._onChange = onChange;\r\n }\r\n\r\n public registerOnTouched(onTouched: () => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._normalizeSuportedExtensions();\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n public onDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('dragleave', ['$event'])\r\n public onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n public onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this._onTouched?.();\r\n\r\n const files: File[] = [];\r\n const dataTransferFiles = event.dataTransfer?.files;\r\n\r\n if (!isNullOrUndefined(dataTransferFiles)) {\r\n for (let i = 0; i < dataTransferFiles?.length; i++) {\r\n const item = dataTransferFiles.item(i);\r\n if (!isNullOrUndefined(item)) {\r\n files.push(item);\r\n }\r\n }\r\n }\r\n\r\n this._showImageCropper(files);\r\n }\r\n\r\n // Verificando o redimensionamento para ajustar o design para ficar responsivo.\r\n @HostListener('window:resize')\r\n public onResize(): void {\r\n if (this.uploadPicture && this.info && this.thumbnail) {\r\n const uploadPictureWidth = this._getWidthElement(this.uploadPicture);\r\n const infoWidth = this._getWidthElement(this.info);\r\n const thumbnailWidth = this._getWidthElement(this.thumbnail);\r\n\r\n if (thumbnailWidth + infoWidth > uploadPictureWidth) {\r\n this.uploadPicture.nativeElement.classList.add('upload-picture--small');\r\n } else {\r\n this.uploadPicture.nativeElement.classList.remove('upload-picture--small');\r\n }\r\n }\r\n }\r\n\r\n public selectPhoto(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const fileInputElement = this.fileInput?.nativeElement;\r\n fileInputElement.value = '';\r\n fileInputElement.click();\r\n\r\n this._onTouched?.();\r\n }\r\n\r\n public removePhoto(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.confirmDialogService.confirm({\r\n message:\r\n this.confirmationTexts?.removalMessage ??\r\n this.translateService.instant('platform.angular_components.confirmation_remove_image'),\r\n acceptLabel:\r\n this.confirmationTexts?.removalAcceptLabel ??\r\n this.translateService.instant('platform.angular_components.remove'),\r\n rejectLabel:\r\n this.confirmationTexts?.removalRejectLabel ??\r\n this.translateService.instant('platform.angular_components.cancel'),\r\n header:\r\n this.confirmationTexts?.removalHeader ??\r\n this.translateService.instant('platform.angular_components.remove_image'),\r\n accept: () => {\r\n const fileInputElement = this.fileInput?.nativeElement;\r\n fileInputElement.value = '';\r\n this.image = null;\r\n this.removedImage.emit();\r\n },\r\n });\r\n }\r\n\r\n public photoSelected(event: any): void {\r\n this._showImageCropper(event.srcElement.files);\r\n }\r\n\r\n private _showImageCropper(files: File[]): void {\r\n if (!this._validateData(files)) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onloadend = (fileEvent: any) => {\r\n this.imageCropperService.show({\r\n imageSource: fileEvent.target.result,\r\n croppedImage: (image) => {\r\n this.changedImage.emit(image);\r\n\r\n const data: ProfilePicturePickerData = { source: file, base64: image };\r\n\r\n // Se o tipo do image for string eu preciso atualizar e mandar para o imageChange uma string.\r\n // Se for ProfilePicturePickerData eu preciso mandar o data completo.\r\n if (typeof this.image === 'string') {\r\n this.image = image;\r\n this.imageChange.emit(image);\r\n } else {\r\n this.image = data;\r\n this.imageChange.emit(data);\r\n }\r\n\r\n this._onChange?.(this.image);\r\n },\r\n changeImage: () => this.selectPhoto(),\r\n allowSelectAnother: false,\r\n aspectRatio: this.aspectRatio,\r\n ...this.cropperLabelsConfig,\r\n });\r\n };\r\n }\r\n\r\n private _normalizeSuportedExtensions(): void {\r\n this.supportedExtensions = this.supportedExtensions?.map((extension) =>\r\n extension.replace('.', '').toLocaleLowerCase(),\r\n );\r\n }\r\n\r\n private _validateData(files: File[]): boolean {\r\n if (!files.length) {\r\n return false;\r\n }\r\n\r\n if (files.length > 1) {\r\n this.invalidFile.emit({ file: null, validation: 'maxFileLimit' });\r\n return false;\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (!file.type.includes('image')) {\r\n this.invalidFile.emit({ file, validation: 'typeInvalid' });\r\n return false;\r\n }\r\n\r\n if (!this._validateFileExtension(file)) {\r\n this.invalidFile.emit({ file, validation: 'unsupportedExtension' });\r\n return false;\r\n }\r\n\r\n if (!this._validateFileSize(file)) {\r\n this.invalidFile.emit({ file, validation: 'maxFileSize' });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _validateFileExtension(file: File): boolean {\r\n if (this.supportedExtensions?.length) {\r\n const extension = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n return this.supportedExtensions.includes(extension);\r\n }\r\n return true;\r\n }\r\n\r\n private _validateFileSize(file: File): boolean {\r\n if (this.maxFileSize) {\r\n return file.size <= this.maxFileSize;\r\n }\r\n return true;\r\n }\r\n\r\n private _getWidthElement(element: ElementRef): number {\r\n const { left, right } = element.nativeElement.getBoundingClientRect();\r\n return right - left;\r\n }\r\n}\r\n","<input\n #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n [class.upload-picture--disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n [disabled]=\"disabled\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n [disabled]=\"disabled\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ProfilePicturePickerComponent } from './profile-picture-picker.component';\r\nimport { ImageCropperService } from '@seniorsistemas/angular-components/image-cropper';\r\n\r\n@NgModule({\r\n imports: [ProfilePicturePickerComponent],\r\n exports: [ProfilePicturePickerComponent],\r\n providers: [ImageCropperService],\r\n})\r\nexport class ProfilePicturePickerModule {}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\n\nconst maxFileSize = (size: number): ValidatorFn => {\n return (control: AbstractControl) => {\n if (control.value?.source?.size > size) {\n return {\n maxFileSize: true,\n };\n }\n\n return null;\n };\n};\n\nconst fileExtension = (extensions: string[]) => {\n return (control: AbstractControl) => {\n if (extensions.length) {\n const extension = control.value?.source?.name?.split(\".\").pop().toLowerCase();\n if (extension?.includes(extension)) {\n return {\n fileExtension: true,\n };\n }\n }\n return null;\n };\n};\n\nexport const Validators = {\n maxFileSize,\n fileExtension,\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-profile-picture-picker.mjs","sources":["../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.component.ts","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.component.html","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/profile-picture-picker.module.ts","../../projects/angular-components/profile-picture-picker/src/lib/profile-picture-picker/validators/validators.ts","../../projects/angular-components/profile-picture-picker/src/seniorsistemas-angular-components-profile-picture-picker.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { ConfirmationTexts, CropperLabelsConfig, FileValidationErrors, ProfilePicturePickerData } from './models/index';\r\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\r\nimport { ImageCropperService } from '@seniorsistemas/angular-components/image-cropper';\r\nimport { ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';\r\nimport { ThumbnailComponent } from '@seniorsistemas/angular-components/thumbnail';\r\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\r\n\r\n/**\r\n * @description Componente para seleção, edição e remoção de foto de perfil do usuário.\r\n * Permite ao usuário fazer upload de uma imagem, recortá-la com o {@link ImageCropperService}\r\n * e confirmar ou remover a foto atual. Implementa {@link ControlValueAccessor} para uso\r\n * em formulários reativos e template-driven do Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-profile-picture-picker\r\n * formControlName=\"avatar\"\r\n * subtitle=\"Formatos aceitos: JPG e PNG\"\r\n * [maxFileSize]=\"2097152\"\r\n * accept=\"image/jpeg,image/png\"\r\n * (imageChange)=\"onImageChange($event)\"\r\n * (removedImage)=\"onImageRemoved()\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-profile-picture-picker',\r\n templateUrl: 'profile-picture-picker.component.html',\r\n styleUrls: ['profile-picture-picker.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ProfilePicturePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [ThumbnailComponent, ButtonComponent, TranslatePipe],\r\n})\r\nexport class ProfilePicturePickerComponent implements OnInit, ControlValueAccessor {\r\n private readonly imageCropperService = inject(ImageCropperService);\r\n private readonly confirmDialogService = inject(ConfirmDialogService);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n /**\r\n * @description Título simples exibido quando nenhuma imagem está selecionada.\r\n */\r\n @Input()\r\n public simpleTitle!: string;\r\n\r\n /**\r\n * @description Título de ação exibido como label principal do botão de upload.\r\n */\r\n @Input()\r\n public actionTitle!: string;\r\n\r\n /**\r\n * @description Legenda exibida abaixo do título, descrevendo formatos suportados\r\n * ou outras orientações para o usuário. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public subtitle!: string;\r\n\r\n /**\r\n * @description Proporção (aspect ratio) do recorte da imagem.\r\n * Por exemplo, `1` para quadrado, `16/9` para widescreen.\r\n *\r\n * @default 1\r\n */\r\n @Input()\r\n public aspectRatio = 1;\r\n\r\n /**\r\n * @description Configurações de rótulos exibidos no componente de recorte de imagem (cropper).\r\n * Permite sobrescrever os textos padrão dos botões e instruções do cropper.\r\n */\r\n @Input()\r\n public cropperLabelsConfig?: CropperLabelsConfig;\r\n\r\n /**\r\n * @description Texto do botão de remoção da foto atual.\r\n * Se não informado, utiliza o label padrão de remoção.\r\n */\r\n @Input()\r\n public removeButtonLabel?: string;\r\n\r\n /**\r\n * @description Texto do botão de troca da foto atual.\r\n * Se não informado, utiliza o label padrão de alteração.\r\n */\r\n @Input()\r\n public changeButtonLabel?: string;\r\n\r\n /**\r\n * @description Textos personalizados exibidos no diálogo de confirmação\r\n * ao remover ou substituir a foto. Permite sobrescrever título, mensagem e botões.\r\n */\r\n @Input()\r\n public confirmationTexts?: ConfirmationTexts;\r\n\r\n /**\r\n * @description Tamanho máximo permitido para o arquivo de imagem, em bytes.\r\n * Quando o arquivo excede esse limite, o output `invalidFile` é emitido.\r\n */\r\n @Input()\r\n public maxFileSize?: number;\r\n\r\n /**\r\n * @description Tipos MIME aceitos pelo input de arquivo.\r\n * Exemplo: `\"image/jpeg,image/png\"`.\r\n */\r\n @Input()\r\n public accept?: string;\r\n\r\n /**\r\n * @description Lista de extensões de arquivo aceitas para validação.\r\n * Exemplo: `['.jpg', '.jpeg', '.png']`.\r\n *\r\n * @default []\r\n */\r\n @Input()\r\n public supportedExtensions: string[] = [];\r\n\r\n /**\r\n * @description Imagem atual do componente. Pode ser uma string base64, um objeto\r\n * {@link ProfilePicturePickerData} com metadados, ou `null` para sem imagem.\r\n *\r\n * @default null\r\n */\r\n @Input()\r\n public image: string | ProfilePicturePickerData | null = null;\r\n\r\n @ViewChild('uploadPicture')\r\n public uploadPicture: ElementRef | null = null;\r\n\r\n @ViewChild('info')\r\n public info: ElementRef | null = null;\r\n\r\n @ViewChild('thumbnail', { read: ElementRef })\r\n public thumbnail: ElementRef | null = null;\r\n\r\n @ViewChild('fileInput', { read: ElementRef })\r\n public fileInput: ElementRef | null = null;\r\n\r\n /**\r\n * @deprecated Use `imageChange` em vez deste output.\r\n * @description Emitido ao selecionar ou recortar uma nova imagem. Emite a string base64 da imagem.\r\n */\r\n @Output()\r\n public changedImage: EventEmitter<string> = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido ao selecionar, recortar ou alterar a imagem.\r\n * Emite a string base64 ou um objeto {@link ProfilePicturePickerData} com os dados da imagem.\r\n */\r\n @Output()\r\n public imageChange = new EventEmitter<string | ProfilePicturePickerData>();\r\n\r\n /**\r\n * @description Emitido quando o usuário confirma a remoção da foto atual.\r\n */\r\n @Output()\r\n public removedImage = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido quando o arquivo selecionado não passa na validação.\r\n * Emite um objeto {@link FileValidationErrors} descrevendo os erros encontrados\r\n * (ex.: tamanho excedido, extensão inválida).\r\n */\r\n @Output()\r\n public invalidFile: EventEmitter<FileValidationErrors> = new EventEmitter();\r\n\r\n public get imageBase64(): string {\r\n return typeof this.image === 'string' ? this.image : (this.image?.base64 ?? '');\r\n }\r\n\r\n public disabled = false;\r\n\r\n private _onChange?: (value: string | ProfilePicturePickerData) => void;\r\n private _onTouched?: () => void;\r\n\r\n public writeValue(value: string | ProfilePicturePickerData): void {\r\n this.image = value;\r\n }\r\n\r\n public registerOnChange(onChange: (value: string | ProfilePicturePickerData) => void): void {\r\n this._onChange = onChange;\r\n }\r\n\r\n public registerOnTouched(onTouched: () => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._normalizeSuportedExtensions();\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n public onDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('dragleave', ['$event'])\r\n public onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n public onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this._onTouched?.();\r\n\r\n const files: File[] = [];\r\n const dataTransferFiles = event.dataTransfer?.files;\r\n\r\n if (!isNullOrUndefined(dataTransferFiles)) {\r\n for (let i = 0; i < dataTransferFiles?.length; i++) {\r\n const item = dataTransferFiles.item(i);\r\n if (!isNullOrUndefined(item)) {\r\n files.push(item);\r\n }\r\n }\r\n }\r\n\r\n this._showImageCropper(files);\r\n }\r\n\r\n // Verificando o redimensionamento para ajustar o design para ficar responsivo.\r\n @HostListener('window:resize')\r\n public onResize(): void {\r\n if (this.uploadPicture && this.info && this.thumbnail) {\r\n const uploadPictureWidth = this._getWidthElement(this.uploadPicture);\r\n const infoWidth = this._getWidthElement(this.info);\r\n const thumbnailWidth = this._getWidthElement(this.thumbnail);\r\n\r\n if (thumbnailWidth + infoWidth > uploadPictureWidth) {\r\n this.uploadPicture.nativeElement.classList.add('upload-picture--small');\r\n } else {\r\n this.uploadPicture.nativeElement.classList.remove('upload-picture--small');\r\n }\r\n }\r\n }\r\n\r\n public selectPhoto(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const fileInputElement = this.fileInput?.nativeElement;\r\n fileInputElement.value = '';\r\n fileInputElement.click();\r\n\r\n this._onTouched?.();\r\n }\r\n\r\n public removePhoto(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.confirmDialogService.confirm({\r\n message:\r\n this.confirmationTexts?.removalMessage ??\r\n this.translateService.instant('platform.angular_components.confirmation_remove_image'),\r\n acceptLabel:\r\n this.confirmationTexts?.removalAcceptLabel ??\r\n this.translateService.instant('platform.angular_components.remove'),\r\n rejectLabel:\r\n this.confirmationTexts?.removalRejectLabel ??\r\n this.translateService.instant('platform.angular_components.cancel'),\r\n header:\r\n this.confirmationTexts?.removalHeader ??\r\n this.translateService.instant('platform.angular_components.remove_image'),\r\n accept: () => {\r\n const fileInputElement = this.fileInput?.nativeElement;\r\n fileInputElement.value = '';\r\n this.image = null;\r\n this.removedImage.emit();\r\n },\r\n });\r\n }\r\n\r\n public photoSelected(event: any): void {\r\n this._showImageCropper(event.srcElement.files);\r\n }\r\n\r\n private _showImageCropper(files: File[]): void {\r\n if (!this._validateData(files)) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onloadend = (fileEvent: any) => {\r\n this.imageCropperService.show({\r\n imageSource: fileEvent.target.result,\r\n croppedImage: (image) => {\r\n this.changedImage.emit(image);\r\n\r\n const data: ProfilePicturePickerData = { source: file, base64: image };\r\n\r\n // Se o tipo do image for string eu preciso atualizar e mandar para o imageChange uma string.\r\n // Se for ProfilePicturePickerData eu preciso mandar o data completo.\r\n if (typeof this.image === 'string') {\r\n this.image = image;\r\n this.imageChange.emit(image);\r\n } else {\r\n this.image = data;\r\n this.imageChange.emit(data);\r\n }\r\n\r\n this._onChange?.(this.image);\r\n },\r\n changeImage: () => this.selectPhoto(),\r\n allowSelectAnother: false,\r\n aspectRatio: this.aspectRatio,\r\n ...this.cropperLabelsConfig,\r\n });\r\n };\r\n }\r\n\r\n private _normalizeSuportedExtensions(): void {\r\n this.supportedExtensions = this.supportedExtensions?.map((extension) =>\r\n extension.replace('.', '').toLocaleLowerCase(),\r\n );\r\n }\r\n\r\n private _validateData(files: File[]): boolean {\r\n if (!files.length) {\r\n return false;\r\n }\r\n\r\n if (files.length > 1) {\r\n this.invalidFile.emit({ file: null, validation: 'maxFileLimit' });\r\n return false;\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (!file.type.includes('image')) {\r\n this.invalidFile.emit({ file, validation: 'typeInvalid' });\r\n return false;\r\n }\r\n\r\n if (!this._validateFileExtension(file)) {\r\n this.invalidFile.emit({ file, validation: 'unsupportedExtension' });\r\n return false;\r\n }\r\n\r\n if (!this._validateFileSize(file)) {\r\n this.invalidFile.emit({ file, validation: 'maxFileSize' });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _validateFileExtension(file: File): boolean {\r\n if (this.supportedExtensions?.length) {\r\n const extension = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n return this.supportedExtensions.includes(extension);\r\n }\r\n return true;\r\n }\r\n\r\n private _validateFileSize(file: File): boolean {\r\n if (this.maxFileSize) {\r\n return file.size <= this.maxFileSize;\r\n }\r\n return true;\r\n }\r\n\r\n private _getWidthElement(element: ElementRef): number {\r\n const { left, right } = element.nativeElement.getBoundingClientRect();\r\n return right - left;\r\n }\r\n}\r\n","<input\n #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n [class.upload-picture--disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n [disabled]=\"disabled\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n [disabled]=\"disabled\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ProfilePicturePickerComponent } from './profile-picture-picker.component';\r\nimport { ImageCropperService } from '@seniorsistemas/angular-components/image-cropper';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `ProfilePicturePickerComponent` (de\r\n * `@seniorsistemas/angular-components/profile-picture-picker`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [ProfilePicturePickerComponent],\r\n exports: [ProfilePicturePickerComponent],\r\n providers: [ImageCropperService],\r\n})\r\nexport class ProfilePicturePickerModule {}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\n\nconst maxFileSize = (size: number): ValidatorFn => {\n return (control: AbstractControl) => {\n if (control.value?.source?.size > size) {\n return {\n maxFileSize: true,\n };\n }\n\n return null;\n };\n};\n\nconst fileExtension = (extensions: string[]) => {\n return (control: AbstractControl) => {\n if (extensions.length) {\n const extension = control.value?.source?.name?.split(\".\").pop().toLowerCase();\n if (extension?.includes(extension)) {\n return {\n fileExtension: true,\n };\n }\n }\n return null;\n };\n};\n\nexport const Validators = {\n maxFileSize,\n fileExtension,\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -178,6 +178,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
178
178
|
}] } });
|
|
179
179
|
|
|
180
180
|
/* eslint-disable max-len */
|
|
181
|
+
/**
|
|
182
|
+
* @deprecated Será removido na v20. Importe diretamente o standalone `ProgressBarComponent` (de
|
|
183
|
+
* `@seniorsistemas/angular-components/progressbar`) no lugar deste módulo.
|
|
184
|
+
*
|
|
185
|
+
* Migração automática (também executada pelo `ng update` na v20):
|
|
186
|
+
* `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
|
|
187
|
+
*/
|
|
181
188
|
class ProgressBarModule {
|
|
182
189
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
183
190
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ProgressBarModule, imports: [ProgressBarComponent], exports: [ProgressBarComponent] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-progressbar.mjs","sources":["../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.module.ts","../../projects/angular-components/progressbar/src/seniorsistemas-angular-components-progressbar.ts"],"sourcesContent":["import { Component, DestroyRef, Input, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { ProgressBarColors } from '../../types';\r\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\r\nimport { NgClass, NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 's-progressbar-determinate',\r\n templateUrl: './progressbar-determinate.component.html',\r\n standalone: true,\r\n imports: [NgClass, NgStyle],\r\n})\r\nexport class ProgressBarDeterminateComponent implements OnInit {\r\n private readonly localeService = inject(LocaleService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input({ required: true })\r\n public value!: number;\r\n\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n @Input()\r\n public numberFormatOptions?: Intl.NumberFormatOptions;\r\n\r\n @Input()\r\n public targetValue?: number;\r\n\r\n @Input()\r\n public targetLabel?: string;\r\n\r\n @Input()\r\n public showValue = true;\r\n\r\n public numberFormat?: Intl.NumberFormat = new Intl.NumberFormat('pt-BR');\r\n\r\n public ngOnInit() {\r\n this.validateValues();\r\n\r\n this.onGetLocale();\r\n }\r\n\r\n private onGetLocale(): void {\r\n this.localeService.getLocale().pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\r\n next: (locale) => {\r\n this.numberFormat = new Intl.NumberFormat(locale ?? 'pt-BR', this.numberFormatOptions);\r\n },\r\n error: () => {\r\n this.numberFormat = new Intl.NumberFormat('pt-BR', this.numberFormatOptions);\r\n },\r\n });\r\n }\r\n\r\n private validateValues(): void {\r\n if (this.value < 0 || this.value > 100) {\r\n throw new Error('Invalid value for value');\r\n }\r\n if (this.targetValue && (this.targetValue < 0 || this.targetValue > 100)) {\r\n throw new Error('Invalid value for targetValue');\r\n }\r\n }\r\n}\r\n","<div class=\"relative\">\n <div class=\"h-6 w-full overflow-hidden rounded-small bg-[#d8d8d8]\">\n <div\n [ngClass]=\"{\n 'bg-criticality-blue': activeColor === 'blue',\n 'bg-criticality-green': activeColor === 'green',\n 'bg-criticality-red': activeColor === 'red',\n 'bg-criticality-yellow': activeColor === 'yellow',\n }\"\n [class.text-grayscale-90]=\"activeColor === 'yellow'\"\n [class.text-grayscale-0]=\"activeColor !== 'yellow'\"\n class=\"flex h-full select-none items-center justify-center font-open-sans text-sm leading-[150%]\"\n [ngStyle]=\"{ width: value + '%' }\"\n >\n {{ showValue && value ? numberFormat?.format(value) + '%' : '' }}\n </div>\n </div>\n @if (targetValue) {\n <div\n class=\"absolute bottom-[-38px] flex flex-col\"\n [ngStyle]=\"{\n left: targetValue <= 50 ? targetValue + '%' : 'unset',\n right: targetValue > 50 ? 100 - targetValue + '%' : 'unset',\n 'align-items': targetValue > 50 ? 'flex-end' : 'flex-start',\n }\"\n >\n <span class=\"my-2 h-10 w-px bg-[#333]\"></span>\n <span\n class=\"rounded-xxbig bg-hippie-blue-700 px-3 py-0.5 font-open-sans text-xs leading-[150%] text-[#e5eaea]\"\n >\n {{ targetLabel || numberFormat?.format(value) + '%' }}\n </span>\n </div>\n }\n</div>\n\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { ProgressBarColors } from '../../types';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 's-progressbar-indeterminate',\r\n templateUrl: './progressbar-indeterminate.component.html',\r\n styles: [`\r\n @keyframes indeterminate-progress {\r\n 0% { transform: translateX(-250%); }\r\n 100% { transform: translateX(250%); }\r\n }\r\n .indeterminate-bar { animation: indeterminate-progress 5s infinite; }\r\n `],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class ProgressBarIndeterminateComponent {\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n @Input()\r\n public label?: string;\r\n}\r\n","<div class=\"flex flex-col items-center\">\n <div class=\"bg-[#d8d8d8] rounded-small h-6 my-2 overflow-hidden w-full\">\n <div\n class=\"indeterminate-bar h-full w-[40%]\"\n [ngClass]=\"{\n 'bg-criticality-blue': activeColor === 'blue',\n 'bg-criticality-green': activeColor === 'green',\n 'bg-criticality-red': activeColor === 'red',\n 'bg-criticality-yellow': activeColor === 'yellow'\n }\"\n ></div>\n </div>\n\n @if (label) {\n <span class=\"font-open-sans text-xs leading-[150%] text-grayscale-90\">{{ label }}</span>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\nimport { ProgressBarColors, ProgressBarMode } from './types';\r\nimport { ProgressBarDeterminateComponent } from './components/progressbar-determinate/progressbar-determinate.component';\r\nimport { ProgressBarIndeterminateComponent } from './components/progressbar-indeterminate/progressbar-indeterminate.component';\r\n\r\n/**\r\n * @description Componente de barra de progresso que representa visualmente o avanço de uma tarefa.\r\n * Suporta modo determinado (valor percentual) e indeterminado (progresso desconhecido),\r\n * além de um valor-alvo para comparação.\r\n *\r\n * @example\r\n * ```html\r\n * <s-progressbar\r\n * [value]=\"75\"\r\n * activeColor=\"blue\"\r\n * label=\"Upload\"\r\n * [showValue]=\"true\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-progressbar',\r\n templateUrl: './progressbar.component.html',\r\n standalone: true,\r\n imports: [ProgressBarDeterminateComponent, ProgressBarIndeterminateComponent],\r\n})\r\nexport class ProgressBarComponent implements OnInit {\r\n /**\r\n * @description Valor atual do progresso, em percentual (0 a 100).\r\n * Não utilizado quando `mode` é `'indeterminate'`.\r\n * Lança erro se o valor estiver fora do intervalo permitido.\r\n */\r\n @Input()\r\n public value!: number;\r\n\r\n /**\r\n * @description Cor ativa da barra de progresso. Campo obrigatório.\r\n * Valores aceitos: `'blue'`, `'green'`, `'red'`, `'yellow'`.\r\n */\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n /**\r\n * @description Opções de formatação numérica utilizadas para exibir o valor percentual.\r\n * Baseado na API `Intl.NumberFormat`.\r\n *\r\n * @default `{ style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2 }`\r\n */\r\n @Input()\r\n public numberFormatOptions: Intl.NumberFormatOptions = {\r\n style: 'decimal',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n roundingMode: 'trunc',\r\n };\r\n\r\n /**\r\n * @description Valor-alvo em percentual (0 a 100), exibido como marcador de referência na barra.\r\n * Não utilizado quando `mode` é `'indeterminate'`.\r\n */\r\n @Input()\r\n public targetValue?: number;\r\n\r\n /** @description Rótulo descritivo exibido ao lado da barra de progresso principal. */\r\n @Input()\r\n public label?: string;\r\n\r\n /** @description Rótulo descritivo exibido ao lado do marcador de valor-alvo. */\r\n @Input()\r\n public targetLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, exibe o valor percentual atual sobre ou próximo da barra.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showValue = true;\r\n\r\n /**\r\n * @description Modo de operação da barra de progresso.\r\n * - `'determinate'`: exibe o progresso baseado em `value` (padrão).\r\n * - `'indeterminate'`: animação contínua sem valor definido; `value`, `targetValue` e `targetLabel` não devem ser usados.\r\n *\r\n * @default 'determinate'\r\n */\r\n @Input()\r\n public mode: ProgressBarMode = 'determinate';\r\n\r\n public ngOnInit(): void {\r\n this.validateInputs();\r\n }\r\n\r\n private validateInputs(): void {\r\n if (this.value < 0 || this.value > 100) {\r\n throw new Error('Invalid value for value');\r\n }\r\n\r\n if (this.targetValue && (this.targetValue < 0 || this.targetValue > 100)) {\r\n throw new Error('Invalid value for targetValue');\r\n }\r\n\r\n if (this.mode === 'indeterminate' && (this.value || this.targetValue || this.targetLabel)) {\r\n throw new Error(\r\n 'When the mode is indeterminate, the value, targetValue and targetLabel parameters are not expected.',\r\n );\r\n }\r\n }\r\n}\r\n","@if (mode === 'determinate') {\n <s-progressbar-determinate\n [value]=\"value\"\n [numberFormatOptions]=\"numberFormatOptions\"\n [targetValue]=\"targetValue\"\n [targetLabel]=\"targetLabel\"\n [activeColor]=\"activeColor\"\n [showValue]=\"showValue\"\n >\n </s-progressbar-determinate>\n} @else {\n <s-progressbar-indeterminate\n [activeColor]=\"activeColor\"\n [label]=\"label\"\n >\n </s-progressbar-indeterminate>\n}\n","/* eslint-disable max-len */\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { ProgressBarComponent } from './progressbar.component';\r\n\r\n@NgModule({\r\n imports: [ProgressBarComponent],\r\n exports: [ProgressBarComponent],\r\n})\r\nexport class ProgressBarModule {}\r\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-progressbar.mjs","sources":["../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.component.ts","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.component.html","../../projects/angular-components/progressbar/src/lib/progressbar/progressbar.module.ts","../../projects/angular-components/progressbar/src/seniorsistemas-angular-components-progressbar.ts"],"sourcesContent":["import { Component, DestroyRef, Input, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { ProgressBarColors } from '../../types';\r\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\r\nimport { NgClass, NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 's-progressbar-determinate',\r\n templateUrl: './progressbar-determinate.component.html',\r\n standalone: true,\r\n imports: [NgClass, NgStyle],\r\n})\r\nexport class ProgressBarDeterminateComponent implements OnInit {\r\n private readonly localeService = inject(LocaleService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input({ required: true })\r\n public value!: number;\r\n\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n @Input()\r\n public numberFormatOptions?: Intl.NumberFormatOptions;\r\n\r\n @Input()\r\n public targetValue?: number;\r\n\r\n @Input()\r\n public targetLabel?: string;\r\n\r\n @Input()\r\n public showValue = true;\r\n\r\n public numberFormat?: Intl.NumberFormat = new Intl.NumberFormat('pt-BR');\r\n\r\n public ngOnInit() {\r\n this.validateValues();\r\n\r\n this.onGetLocale();\r\n }\r\n\r\n private onGetLocale(): void {\r\n this.localeService.getLocale().pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\r\n next: (locale) => {\r\n this.numberFormat = new Intl.NumberFormat(locale ?? 'pt-BR', this.numberFormatOptions);\r\n },\r\n error: () => {\r\n this.numberFormat = new Intl.NumberFormat('pt-BR', this.numberFormatOptions);\r\n },\r\n });\r\n }\r\n\r\n private validateValues(): void {\r\n if (this.value < 0 || this.value > 100) {\r\n throw new Error('Invalid value for value');\r\n }\r\n if (this.targetValue && (this.targetValue < 0 || this.targetValue > 100)) {\r\n throw new Error('Invalid value for targetValue');\r\n }\r\n }\r\n}\r\n","<div class=\"relative\">\n <div class=\"h-6 w-full overflow-hidden rounded-small bg-[#d8d8d8]\">\n <div\n [ngClass]=\"{\n 'bg-criticality-blue': activeColor === 'blue',\n 'bg-criticality-green': activeColor === 'green',\n 'bg-criticality-red': activeColor === 'red',\n 'bg-criticality-yellow': activeColor === 'yellow',\n }\"\n [class.text-grayscale-90]=\"activeColor === 'yellow'\"\n [class.text-grayscale-0]=\"activeColor !== 'yellow'\"\n class=\"flex h-full select-none items-center justify-center font-open-sans text-sm leading-[150%]\"\n [ngStyle]=\"{ width: value + '%' }\"\n >\n {{ showValue && value ? numberFormat?.format(value) + '%' : '' }}\n </div>\n </div>\n @if (targetValue) {\n <div\n class=\"absolute bottom-[-38px] flex flex-col\"\n [ngStyle]=\"{\n left: targetValue <= 50 ? targetValue + '%' : 'unset',\n right: targetValue > 50 ? 100 - targetValue + '%' : 'unset',\n 'align-items': targetValue > 50 ? 'flex-end' : 'flex-start',\n }\"\n >\n <span class=\"my-2 h-10 w-px bg-[#333]\"></span>\n <span\n class=\"rounded-xxbig bg-hippie-blue-700 px-3 py-0.5 font-open-sans text-xs leading-[150%] text-[#e5eaea]\"\n >\n {{ targetLabel || numberFormat?.format(value) + '%' }}\n </span>\n </div>\n }\n</div>\n\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { ProgressBarColors } from '../../types';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 's-progressbar-indeterminate',\r\n templateUrl: './progressbar-indeterminate.component.html',\r\n styles: [`\r\n @keyframes indeterminate-progress {\r\n 0% { transform: translateX(-250%); }\r\n 100% { transform: translateX(250%); }\r\n }\r\n .indeterminate-bar { animation: indeterminate-progress 5s infinite; }\r\n `],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class ProgressBarIndeterminateComponent {\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n @Input()\r\n public label?: string;\r\n}\r\n","<div class=\"flex flex-col items-center\">\n <div class=\"bg-[#d8d8d8] rounded-small h-6 my-2 overflow-hidden w-full\">\n <div\n class=\"indeterminate-bar h-full w-[40%]\"\n [ngClass]=\"{\n 'bg-criticality-blue': activeColor === 'blue',\n 'bg-criticality-green': activeColor === 'green',\n 'bg-criticality-red': activeColor === 'red',\n 'bg-criticality-yellow': activeColor === 'yellow'\n }\"\n ></div>\n </div>\n\n @if (label) {\n <span class=\"font-open-sans text-xs leading-[150%] text-grayscale-90\">{{ label }}</span>\n }\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\nimport { ProgressBarColors, ProgressBarMode } from './types';\r\nimport { ProgressBarDeterminateComponent } from './components/progressbar-determinate/progressbar-determinate.component';\r\nimport { ProgressBarIndeterminateComponent } from './components/progressbar-indeterminate/progressbar-indeterminate.component';\r\n\r\n/**\r\n * @description Componente de barra de progresso que representa visualmente o avanço de uma tarefa.\r\n * Suporta modo determinado (valor percentual) e indeterminado (progresso desconhecido),\r\n * além de um valor-alvo para comparação.\r\n *\r\n * @example\r\n * ```html\r\n * <s-progressbar\r\n * [value]=\"75\"\r\n * activeColor=\"blue\"\r\n * label=\"Upload\"\r\n * [showValue]=\"true\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-progressbar',\r\n templateUrl: './progressbar.component.html',\r\n standalone: true,\r\n imports: [ProgressBarDeterminateComponent, ProgressBarIndeterminateComponent],\r\n})\r\nexport class ProgressBarComponent implements OnInit {\r\n /**\r\n * @description Valor atual do progresso, em percentual (0 a 100).\r\n * Não utilizado quando `mode` é `'indeterminate'`.\r\n * Lança erro se o valor estiver fora do intervalo permitido.\r\n */\r\n @Input()\r\n public value!: number;\r\n\r\n /**\r\n * @description Cor ativa da barra de progresso. Campo obrigatório.\r\n * Valores aceitos: `'blue'`, `'green'`, `'red'`, `'yellow'`.\r\n */\r\n @Input({ required: true })\r\n public activeColor!: ProgressBarColors;\r\n\r\n /**\r\n * @description Opções de formatação numérica utilizadas para exibir o valor percentual.\r\n * Baseado na API `Intl.NumberFormat`.\r\n *\r\n * @default `{ style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 2 }`\r\n */\r\n @Input()\r\n public numberFormatOptions: Intl.NumberFormatOptions = {\r\n style: 'decimal',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2,\r\n roundingMode: 'trunc',\r\n };\r\n\r\n /**\r\n * @description Valor-alvo em percentual (0 a 100), exibido como marcador de referência na barra.\r\n * Não utilizado quando `mode` é `'indeterminate'`.\r\n */\r\n @Input()\r\n public targetValue?: number;\r\n\r\n /** @description Rótulo descritivo exibido ao lado da barra de progresso principal. */\r\n @Input()\r\n public label?: string;\r\n\r\n /** @description Rótulo descritivo exibido ao lado do marcador de valor-alvo. */\r\n @Input()\r\n public targetLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, exibe o valor percentual atual sobre ou próximo da barra.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showValue = true;\r\n\r\n /**\r\n * @description Modo de operação da barra de progresso.\r\n * - `'determinate'`: exibe o progresso baseado em `value` (padrão).\r\n * - `'indeterminate'`: animação contínua sem valor definido; `value`, `targetValue` e `targetLabel` não devem ser usados.\r\n *\r\n * @default 'determinate'\r\n */\r\n @Input()\r\n public mode: ProgressBarMode = 'determinate';\r\n\r\n public ngOnInit(): void {\r\n this.validateInputs();\r\n }\r\n\r\n private validateInputs(): void {\r\n if (this.value < 0 || this.value > 100) {\r\n throw new Error('Invalid value for value');\r\n }\r\n\r\n if (this.targetValue && (this.targetValue < 0 || this.targetValue > 100)) {\r\n throw new Error('Invalid value for targetValue');\r\n }\r\n\r\n if (this.mode === 'indeterminate' && (this.value || this.targetValue || this.targetLabel)) {\r\n throw new Error(\r\n 'When the mode is indeterminate, the value, targetValue and targetLabel parameters are not expected.',\r\n );\r\n }\r\n }\r\n}\r\n","@if (mode === 'determinate') {\n <s-progressbar-determinate\n [value]=\"value\"\n [numberFormatOptions]=\"numberFormatOptions\"\n [targetValue]=\"targetValue\"\n [targetLabel]=\"targetLabel\"\n [activeColor]=\"activeColor\"\n [showValue]=\"showValue\"\n >\n </s-progressbar-determinate>\n} @else {\n <s-progressbar-indeterminate\n [activeColor]=\"activeColor\"\n [label]=\"label\"\n >\n </s-progressbar-indeterminate>\n}\n","/* eslint-disable max-len */\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { ProgressBarComponent } from './progressbar.component';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `ProgressBarComponent` (de\r\n * `@seniorsistemas/angular-components/progressbar`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [ProgressBarComponent],\r\n exports: [ProgressBarComponent],\r\n})\r\nexport class ProgressBarModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -105,6 +105,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
105
105
|
type: Input
|
|
106
106
|
}] } });
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* @deprecated Será removido na v20. Importe diretamente o standalone `RatingScaleComponent` (de
|
|
110
|
+
* `@seniorsistemas/angular-components/rating-scale`) no lugar deste módulo.
|
|
111
|
+
*
|
|
112
|
+
* Migração automática (também executada pelo `ng update` na v20):
|
|
113
|
+
* `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
|
|
114
|
+
*/
|
|
108
115
|
class RatingScaleModule {
|
|
109
116
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingScaleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
110
117
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: RatingScaleModule, imports: [RatingScaleComponent], exports: [RatingScaleComponent] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-rating-scale.mjs","sources":["../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.ts","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.html","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.module.ts","../../projects/angular-components/rating-scale/src/seniorsistemas-angular-components-rating-scale.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges, forwardRef } from '@angular/core';\r\n\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { RatingScaleNode } from './models/rating-scale-node';\r\n\r\n/**\r\n * @description Componente de escala de avaliação que permite ao usuário selecionar um nó de uma escala visual.\r\n * Implementa `ControlValueAccessor` para integração com Reactive Forms e Template-Driven Forms.\r\n * Ideal para pesquisas de satisfação (NPS, CSAT) e questionários de feedback.\r\n *\r\n * @example\r\n * ```html\r\n * <s-rating-scale\r\n * [nodes]=\"ratingNodes\"\r\n * startLabel=\"Péssimo\"\r\n * endLabel=\"Ótimo\"\r\n * [(ngModel)]=\"rating\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-rating-scale',\r\n templateUrl: './rating-scale.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RatingScaleComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class RatingScaleComponent implements ControlValueAccessor, OnChanges {\r\n /**\r\n * @description Lista de nós que compõem a escala de avaliação. Campo obrigatório.\r\n * Cada `RatingScaleNode` define o valor, rótulo e cor do item na escala.\r\n */\r\n @Input({ required: true })\r\n public nodes!: RatingScaleNode[];\r\n\r\n /** @description Rótulo exibido no início (extremidade esquerda) da escala. */\r\n @Input()\r\n public startLabel?: string;\r\n\r\n /** @description Rótulo exibido no final (extremidade direita) da escala. */\r\n @Input()\r\n public endLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, a escala fica desabilitada e o usuário não pode selecionar nenhum nó.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n public value?: RatingScaleNode;\r\n private _onChange?: (value: RatingScaleNode) => void;\r\n private _onTouched?: (value: RatingScaleNode) => void;\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['nodes']) {\r\n this.nodes?.forEach((node) => {\r\n const hasSelectedIcon = !!node.selectedIcon;\r\n const hasUnselectedIcon = !!node.unselectedIcon;\r\n if (hasSelectedIcon !== hasUnselectedIcon) {\r\n console.warn(\r\n `s-rating-scale: o nó \"${node.id}\" informou apenas um de \"selectedIcon\"/\"unselectedIcon\" — os dois devem ser informados juntos. Nenhum ícone será exibido para esse nó até que ambos sejam informados.`,\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n public getNodeIconClass(node: RatingScaleNode): string | undefined {\r\n if (node.selectedIcon && node.unselectedIcon) {\r\n return this.value?.id === node.id ? node.selectedIcon : node.unselectedIcon;\r\n }\r\n if (node.selectedIcon || node.unselectedIcon) {\r\n return undefined;\r\n }\r\n return node.icon ? `fas ${node.icon}` : undefined;\r\n }\r\n\r\n public writeValue(value: RatingScaleNode): void {\r\n if (!this.disabled) {\r\n this.value = value;\r\n }\r\n }\r\n public registerOnChange(onChange: (value: RatingScaleNode) => void): void {\r\n this._onChange = onChange;\r\n }\r\n public registerOnTouched(onTouched: (value: RatingScaleNode) => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public onSelect(rating: RatingScaleNode) {\r\n this.value = rating;\r\n if (this._onChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [ngClass]=\"{\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[3px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]': !disabled\n }\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @let nodeIconClass = getNodeIconClass(node);\n @if (nodeIconClass) {\n <span\n class=\"m-1.5 text-base text-grayscale-60\"\n [ngClass]=\"nodeIconClass\">\n </span>\n }\n @if (node.title) {\n <span class=\"m-1.5 text-sm font-normal leading-[150%] text-grayscale-90\">{{ node.title }}</span>\n }\n </button>\n }\n </div>\n <div class=\"flex justify-between py-3\">\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ startLabel }}</span>\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ endLabel }}</span>\n </div>\n</div>","import { NgModule } from '@angular/core';\r\n\r\nimport { RatingScaleComponent } from './rating-scale.component';\r\n\r\n@NgModule({\r\n imports: [RatingScaleComponent],\r\n exports: [RatingScaleComponent],\r\n})\r\nexport class RatingScaleModule {}\r\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-rating-scale.mjs","sources":["../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.ts","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.html","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.module.ts","../../projects/angular-components/rating-scale/src/seniorsistemas-angular-components-rating-scale.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges, forwardRef } from '@angular/core';\r\n\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { RatingScaleNode } from './models/rating-scale-node';\r\n\r\n/**\r\n * @description Componente de escala de avaliação que permite ao usuário selecionar um nó de uma escala visual.\r\n * Implementa `ControlValueAccessor` para integração com Reactive Forms e Template-Driven Forms.\r\n * Ideal para pesquisas de satisfação (NPS, CSAT) e questionários de feedback.\r\n *\r\n * @example\r\n * ```html\r\n * <s-rating-scale\r\n * [nodes]=\"ratingNodes\"\r\n * startLabel=\"Péssimo\"\r\n * endLabel=\"Ótimo\"\r\n * [(ngModel)]=\"rating\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-rating-scale',\r\n templateUrl: './rating-scale.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RatingScaleComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class RatingScaleComponent implements ControlValueAccessor, OnChanges {\r\n /**\r\n * @description Lista de nós que compõem a escala de avaliação. Campo obrigatório.\r\n * Cada `RatingScaleNode` define o valor, rótulo e cor do item na escala.\r\n */\r\n @Input({ required: true })\r\n public nodes!: RatingScaleNode[];\r\n\r\n /** @description Rótulo exibido no início (extremidade esquerda) da escala. */\r\n @Input()\r\n public startLabel?: string;\r\n\r\n /** @description Rótulo exibido no final (extremidade direita) da escala. */\r\n @Input()\r\n public endLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, a escala fica desabilitada e o usuário não pode selecionar nenhum nó.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n public value?: RatingScaleNode;\r\n private _onChange?: (value: RatingScaleNode) => void;\r\n private _onTouched?: (value: RatingScaleNode) => void;\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['nodes']) {\r\n this.nodes?.forEach((node) => {\r\n const hasSelectedIcon = !!node.selectedIcon;\r\n const hasUnselectedIcon = !!node.unselectedIcon;\r\n if (hasSelectedIcon !== hasUnselectedIcon) {\r\n console.warn(\r\n `s-rating-scale: o nó \"${node.id}\" informou apenas um de \"selectedIcon\"/\"unselectedIcon\" — os dois devem ser informados juntos. Nenhum ícone será exibido para esse nó até que ambos sejam informados.`,\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n public getNodeIconClass(node: RatingScaleNode): string | undefined {\r\n if (node.selectedIcon && node.unselectedIcon) {\r\n return this.value?.id === node.id ? node.selectedIcon : node.unselectedIcon;\r\n }\r\n if (node.selectedIcon || node.unselectedIcon) {\r\n return undefined;\r\n }\r\n return node.icon ? `fas ${node.icon}` : undefined;\r\n }\r\n\r\n public writeValue(value: RatingScaleNode): void {\r\n if (!this.disabled) {\r\n this.value = value;\r\n }\r\n }\r\n public registerOnChange(onChange: (value: RatingScaleNode) => void): void {\r\n this._onChange = onChange;\r\n }\r\n public registerOnTouched(onTouched: (value: RatingScaleNode) => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public onSelect(rating: RatingScaleNode) {\r\n this.value = rating;\r\n if (this._onChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [ngClass]=\"{\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[3px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]': !disabled\n }\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @let nodeIconClass = getNodeIconClass(node);\n @if (nodeIconClass) {\n <span\n class=\"m-1.5 text-base text-grayscale-60\"\n [ngClass]=\"nodeIconClass\">\n </span>\n }\n @if (node.title) {\n <span class=\"m-1.5 text-sm font-normal leading-[150%] text-grayscale-90\">{{ node.title }}</span>\n }\n </button>\n }\n </div>\n <div class=\"flex justify-between py-3\">\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ startLabel }}</span>\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ endLabel }}</span>\n </div>\n</div>","import { NgModule } from '@angular/core';\r\n\r\nimport { RatingScaleComponent } from './rating-scale.component';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `RatingScaleComponent` (de\r\n * `@seniorsistemas/angular-components/rating-scale`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [RatingScaleComponent],\r\n exports: [RatingScaleComponent],\r\n})\r\nexport class RatingScaleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -179,6 +179,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
179
179
|
type: Output
|
|
180
180
|
}] } });
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated Será removido na v20. Importe diretamente o standalone `SelectButtonComponent` (de
|
|
184
|
+
* `@seniorsistemas/angular-components/select-button`) no lugar deste módulo.
|
|
185
|
+
*
|
|
186
|
+
* Migração automática (também executada pelo `ng update` na v20):
|
|
187
|
+
* `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
|
|
188
|
+
*/
|
|
182
189
|
class SelectButtonModule {
|
|
183
190
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
184
191
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SelectButtonModule, imports: [SelectButtonComponent], exports: [SelectButtonComponent] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-select-button.mjs","sources":["../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.ts","../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.ts","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.module.ts","../../projects/angular-components/select-button/src/seniorsistemas-angular-components-select-button.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 's-select-button-item',\r\n templateUrl: './select-button-item.component.html',\r\n styleUrls: ['./select-button-item.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class SelectButtonItemComponent {\r\n @Input({ required: true })\r\n public label!: string;\r\n\r\n @Input()\r\n public active = false;\r\n\r\n @Input()\r\n public first = false;\r\n\r\n @Input()\r\n public last = false;\r\n\r\n @Input()\r\n public disabled = false;\r\n}\r\n","<button\n class=\"select-button-item\"\n [ngClass]=\"{\n 'select-button-item--active': active,\n 'select-button-item--disabled': disabled,\n 'select-button-item--first': first,\n 'select-button-item--last': last\n }\"\n [disabled]=\"disabled\">\n <span class=\"select-button-item__label\">{{ label }}</span>\n</button>","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { SelectButtonItemComponent } from './components/select-button-item/select-button-item.component';\r\nimport { SelectButtonItem } from './models/select-button-item';\r\n\r\n/**\r\n * @description Componente de seleção por botões agrupados, onde cada opção é representada\r\n * visualmente como um botão clicável. Suporta seleção simples e múltipla. Implementa\r\n * {@link ControlValueAccessor} para integração com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-select-button\r\n * formControlName=\"visualizacao\"\r\n * [items]=\"opcoesVisualizacao\"\r\n * [multiple]=\"false\"\r\n * (itemSelected)=\"onVisualizacaoChange($event)\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-select-button',\r\n templateUrl: './select-button.component.html',\r\n styleUrls: ['./select-button.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass, SelectButtonItemComponent],\r\n})\r\nexport class SelectButtonComponent implements ControlValueAccessor {\r\n /**\r\n * @description Lista de itens exibidos como botões de seleção.\r\n * Cada item pode possuir `label`, `value` e `disabled`. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public items!: SelectButtonItem[];\r\n\r\n /**\r\n * @description Habilita a seleção de múltiplos itens ao mesmo tempo.\r\n * Quando `false`, apenas um item pode estar ativo por vez.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public multiple = false;\r\n\r\n /**\r\n * @description Emitido após a seleção de um item, com a lista completa dos itens\r\n * atualmente selecionados (array de {@link SelectButtonItem}).\r\n */\r\n @Output()\r\n public itemSelected = new EventEmitter<SelectButtonItem[]>();\r\n\r\n /**\r\n * @description Emitido no momento do clique em um item, antes da atualização\r\n * do estado de seleção. Útil para side-effects imediatos ao clique.\r\n */\r\n @Output()\r\n public itemClicked = new EventEmitter<SelectButtonItem>();\r\n\r\n public disabled = false;\r\n public activeItems = new Set<SelectButtonItem>();\r\n public onChange?: (value: SelectButtonItem[]) => void;\r\n public onTouched?: (value: SelectButtonItem[]) => void;\r\n\r\n public writeValue(value?: SelectButtonItem | SelectButtonItem[]): void {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n this.activeItems.clear();\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach((item: SelectButtonItem) => {\r\n this.items.forEach((iItem: SelectButtonItem) => {\r\n if (this._compareItems(item, iItem)) {\r\n this.activeItems.add(iItem);\r\n }\r\n });\r\n });\r\n } else {\r\n this.items.forEach((iItem: SelectButtonItem) => {\r\n if (this._compareItems(value, iItem)) {\r\n this.activeItems.add(iItem);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public registerOnChange(onChange: (value: SelectButtonItem[]) => void): void {\r\n this.onChange = onChange;\r\n }\r\n\r\n public registerOnTouched(onTouched: (value: SelectButtonItem[]) => void): void {\r\n this.onTouched = onTouched;\r\n }\r\n\r\n public setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n }\r\n\r\n public onItemSelect(item: SelectButtonItem): void {\r\n if (this.disabled || item.disabled) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(item);\r\n\r\n if (!this.multiple) {\r\n this.activeItems.clear();\r\n }\r\n this.activeItems.add(item);\r\n this.itemSelected.emit([...this.activeItems]);\r\n\r\n this.onChange?.([...this.activeItems]);\r\n this.onTouched?.([...this.activeItems]);\r\n }\r\n\r\n private _compareItems(item1: SelectButtonItem, item2: SelectButtonItem): boolean {\r\n const _compare = (a: any, b: any): boolean => {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (\r\n a === undefined ||\r\n b === undefined ||\r\n typeof a !== 'object' ||\r\n a === null ||\r\n typeof b !== 'object' ||\r\n b === null\r\n ) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(a) !== Array.isArray(b)) {\r\n return false;\r\n }\r\n\r\n let keysA = Object.keys(a);\r\n let keysB = Object.keys(b);\r\n\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n\r\n for (let key of keysA) {\r\n if (!keysB.includes(key) || !_compare(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let key in a) {\r\n if (a.hasOwnProperty(key) !== b.hasOwnProperty(key)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return _compare(item1, item2);\r\n }\r\n}\r\n","<div\n class=\"select-button\"\n [ngClass]=\"{ 'select-button--disabled': disabled }\">\n @for(item of items; track item.value; let i = $index) {\n <s-select-button-item\n [label]=\"item.label\"\n [active]=\"activeItems.has(item)\"\n [disabled]=\"disabled || (item.disabled ?? false)\"\n [first]=\"i === 0\"\n [last]=\"i === items.length - 1\"\n (click)=\"onItemSelect(item)\">\n </s-select-button-item>\n }\n</div>","import { NgModule } from '@angular/core';\r\n\r\nimport { SelectButtonComponent } from './select-button.component';\r\n\r\n@NgModule({\r\n imports: [SelectButtonComponent],\r\n exports: [SelectButtonComponent],\r\n})\r\nexport class SelectButtonModule {}\r\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-select-button.mjs","sources":["../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.ts","../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.ts","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.module.ts","../../projects/angular-components/select-button/src/seniorsistemas-angular-components-select-button.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 's-select-button-item',\r\n templateUrl: './select-button-item.component.html',\r\n styleUrls: ['./select-button-item.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class SelectButtonItemComponent {\r\n @Input({ required: true })\r\n public label!: string;\r\n\r\n @Input()\r\n public active = false;\r\n\r\n @Input()\r\n public first = false;\r\n\r\n @Input()\r\n public last = false;\r\n\r\n @Input()\r\n public disabled = false;\r\n}\r\n","<button\n class=\"select-button-item\"\n [ngClass]=\"{\n 'select-button-item--active': active,\n 'select-button-item--disabled': disabled,\n 'select-button-item--first': first,\n 'select-button-item--last': last\n }\"\n [disabled]=\"disabled\">\n <span class=\"select-button-item__label\">{{ label }}</span>\n</button>","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { SelectButtonItemComponent } from './components/select-button-item/select-button-item.component';\r\nimport { SelectButtonItem } from './models/select-button-item';\r\n\r\n/**\r\n * @description Componente de seleção por botões agrupados, onde cada opção é representada\r\n * visualmente como um botão clicável. Suporta seleção simples e múltipla. Implementa\r\n * {@link ControlValueAccessor} para integração com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-select-button\r\n * formControlName=\"visualizacao\"\r\n * [items]=\"opcoesVisualizacao\"\r\n * [multiple]=\"false\"\r\n * (itemSelected)=\"onVisualizacaoChange($event)\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-select-button',\r\n templateUrl: './select-button.component.html',\r\n styleUrls: ['./select-button.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass, SelectButtonItemComponent],\r\n})\r\nexport class SelectButtonComponent implements ControlValueAccessor {\r\n /**\r\n * @description Lista de itens exibidos como botões de seleção.\r\n * Cada item pode possuir `label`, `value` e `disabled`. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public items!: SelectButtonItem[];\r\n\r\n /**\r\n * @description Habilita a seleção de múltiplos itens ao mesmo tempo.\r\n * Quando `false`, apenas um item pode estar ativo por vez.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public multiple = false;\r\n\r\n /**\r\n * @description Emitido após a seleção de um item, com a lista completa dos itens\r\n * atualmente selecionados (array de {@link SelectButtonItem}).\r\n */\r\n @Output()\r\n public itemSelected = new EventEmitter<SelectButtonItem[]>();\r\n\r\n /**\r\n * @description Emitido no momento do clique em um item, antes da atualização\r\n * do estado de seleção. Útil para side-effects imediatos ao clique.\r\n */\r\n @Output()\r\n public itemClicked = new EventEmitter<SelectButtonItem>();\r\n\r\n public disabled = false;\r\n public activeItems = new Set<SelectButtonItem>();\r\n public onChange?: (value: SelectButtonItem[]) => void;\r\n public onTouched?: (value: SelectButtonItem[]) => void;\r\n\r\n public writeValue(value?: SelectButtonItem | SelectButtonItem[]): void {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n this.activeItems.clear();\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach((item: SelectButtonItem) => {\r\n this.items.forEach((iItem: SelectButtonItem) => {\r\n if (this._compareItems(item, iItem)) {\r\n this.activeItems.add(iItem);\r\n }\r\n });\r\n });\r\n } else {\r\n this.items.forEach((iItem: SelectButtonItem) => {\r\n if (this._compareItems(value, iItem)) {\r\n this.activeItems.add(iItem);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public registerOnChange(onChange: (value: SelectButtonItem[]) => void): void {\r\n this.onChange = onChange;\r\n }\r\n\r\n public registerOnTouched(onTouched: (value: SelectButtonItem[]) => void): void {\r\n this.onTouched = onTouched;\r\n }\r\n\r\n public setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n }\r\n\r\n public onItemSelect(item: SelectButtonItem): void {\r\n if (this.disabled || item.disabled) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(item);\r\n\r\n if (!this.multiple) {\r\n this.activeItems.clear();\r\n }\r\n this.activeItems.add(item);\r\n this.itemSelected.emit([...this.activeItems]);\r\n\r\n this.onChange?.([...this.activeItems]);\r\n this.onTouched?.([...this.activeItems]);\r\n }\r\n\r\n private _compareItems(item1: SelectButtonItem, item2: SelectButtonItem): boolean {\r\n const _compare = (a: any, b: any): boolean => {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (\r\n a === undefined ||\r\n b === undefined ||\r\n typeof a !== 'object' ||\r\n a === null ||\r\n typeof b !== 'object' ||\r\n b === null\r\n ) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(a) !== Array.isArray(b)) {\r\n return false;\r\n }\r\n\r\n let keysA = Object.keys(a);\r\n let keysB = Object.keys(b);\r\n\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n\r\n for (let key of keysA) {\r\n if (!keysB.includes(key) || !_compare(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let key in a) {\r\n if (a.hasOwnProperty(key) !== b.hasOwnProperty(key)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return _compare(item1, item2);\r\n }\r\n}\r\n","<div\n class=\"select-button\"\n [ngClass]=\"{ 'select-button--disabled': disabled }\">\n @for(item of items; track item.value; let i = $index) {\n <s-select-button-item\n [label]=\"item.label\"\n [active]=\"activeItems.has(item)\"\n [disabled]=\"disabled || (item.disabled ?? false)\"\n [first]=\"i === 0\"\n [last]=\"i === items.length - 1\"\n (click)=\"onItemSelect(item)\">\n </s-select-button-item>\n }\n</div>","import { NgModule } from '@angular/core';\r\n\r\nimport { SelectButtonComponent } from './select-button.component';\r\n\r\n/**\r\n * @deprecated Será removido na v20. Importe diretamente o standalone `SelectButtonComponent` (de\r\n * `@seniorsistemas/angular-components/select-button`) no lugar deste módulo.\r\n *\r\n * Migração automática (também executada pelo `ng update` na v20):\r\n * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`\r\n */\r\n@NgModule({\r\n imports: [SelectButtonComponent],\r\n exports: [SelectButtonComponent],\r\n})\r\nexport class SelectButtonModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -326,6 +326,13 @@ class SelectComponent {
|
|
|
326
326
|
filter: new FormControl('', { nonNullable: true }),
|
|
327
327
|
});
|
|
328
328
|
_containerDiv = viewChild('containerDiv');
|
|
329
|
+
/**
|
|
330
|
+
* Largura do painel (igual à do trigger), medida quando o overlay é anexado. Ler `offsetWidth`
|
|
331
|
+
* direto no template mede layout durante o change detection e dispara NG0100 quando a largura
|
|
332
|
+
* muda entre duas verificações. Um resize da janela fecha o painel (`onWindowResize`), então
|
|
333
|
+
* medir na abertura basta.
|
|
334
|
+
*/
|
|
335
|
+
panelWidth = signal(null);
|
|
329
336
|
_filterInput = viewChild('filterInput');
|
|
330
337
|
// `read: ElementRef` é obrigatório aqui: `#selectAllCheckbox` está num elemento de
|
|
331
338
|
// componente (`<s-checkbox>`), então sem isso o viewChild resolve pra instância do
|
|
@@ -598,6 +605,12 @@ class SelectComponent {
|
|
|
598
605
|
* Fecha o dropdown de opções caso ele esteja visível ao redimensionar a janela.
|
|
599
606
|
* @param _ Evento de redimensionamento da janela (não utilizado).
|
|
600
607
|
*/
|
|
608
|
+
_syncPanelWidth() {
|
|
609
|
+
const width = this._containerDiv()?.nativeElement.offsetWidth;
|
|
610
|
+
if (width !== undefined) {
|
|
611
|
+
this.panelWidth.set(width);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
601
614
|
onWindowResize(_) {
|
|
602
615
|
if (this.showOptions()) {
|
|
603
616
|
this._closeDropdown();
|
|
@@ -1117,7 +1130,7 @@ class SelectComponent {
|
|
|
1117
1130
|
useExisting: forwardRef(() => SelectComponent),
|
|
1118
1131
|
multi: true,
|
|
1119
1132
|
},
|
|
1120
|
-
], viewQueries: [{ propertyName: "_containerDiv", first: true, predicate: ["containerDiv"], descendants: true, isSignal: true }, { propertyName: "_filterInput", first: true, predicate: ["filterInput"], descendants: true, isSignal: true }, { propertyName: "_selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_dropdownPanel", first: true, predicate: ["dropdownPanel"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"select-container group flex h-[35px] w-full overflow-hidden rounded-medium border outline-2 outline-[var(--s-focus-ring-color,#0090ff)] outline-offset-[-2px] focus-visible:outline\"\n [class.pointer-events-none]=\"disabled()\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.bg-grayscale-5]=\"disabled()\"\n [class.pointer-events-auto]=\"!disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n [class.bg-grayscale-0]=\"!disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"showOptions()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-owns]=\"showOptions() ? componentId + '-listbox' : null\"\n [attr.aria-activedescendant]=\"showOptions() ? focusedOptionId() : null\"\n role=\"combobox\"\n [id]=\"componentId + '-combobox'\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledBy() || null\"\n>\n <span\n class=\"flex flex-grow select-none px-[10px] py-[7px]\"\n [class.text-grayscale-90]=\"!disabled() && !isClean()\"\n [class.text-grayscale-60]=\"!disabled() && isClean()\"\n [class.text-grayscale-30]=\"disabled()\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n (keydown)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"'platform.angular_components.aria_clear_selection' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <div\n class=\"dropdown-container flex w-9 shrink-0 items-center justify-center border-l group-hover:bg-grayscale-5\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n >\n <i\n class=\"fas text-base\"\n aria-hidden=\"true\"\n [class.text-grayscale-30]=\"disabled()\"\n [class.text-grayscale-90]=\"!disabled()\"\n [class.fa-caret-down]=\"!showOptions()\"\n [class.fa-caret-up]=\"showOptions()\"\n ></i>\n </div>\n</div>\n\n<ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"showOptions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"_closeDropdown()\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (detach)=\"_closeDropdown()\"\n>\n <div\n #dropdownPanel\n [id]=\"componentId + '-listbox'\"\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n (click)=\"$event.stopPropagation()\"\n [style.width.px]=\"containerDiv.offsetWidth\"\n [attr.aria-multiselectable]=\"multiple() ? true : null\"\n [@visibilityChanged]\n role=\"listbox\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n [ariaLabel]=\"selectAllCheckboxAriaLabel()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex w-full grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n #filterInput\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"onFilterKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.filter_options' | translate\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-activedescendant]=\"focusedOptionId()\"\n autocomplete=\"off\"\n />\n </form>\n <i\n class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <button\n (click)=\"clearFilter()\"\n (keydown)=\"onClearFilterButtonKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.clear_filter' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n role=\"presentation\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul\n class=\"max-h-52 overflow-auto\"\n role=\"presentation\"\n >\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">\n {{ emptyMessage() ?? 'platform.angular_components.no_records_found' | translate }}\n </span>\n }\n </div>\n</ng-template>\n\n", styles: [":host.ng-dirty.ng-invalid .select-container:not(:focus-within){&,.dropdown-container{border-color:#c13018}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: SelectOptionComponent, selector: "s-select-option", inputs: ["id", "label", "multiple", "checkmark", "isGrouper", "isFocused", "isSelected", "checkIconClass", "groupAnnouncement", "posinset", "setsize"], outputs: ["isSelectedChange", "selected"] }, { kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "checkedChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [
|
|
1133
|
+
], viewQueries: [{ propertyName: "_containerDiv", first: true, predicate: ["containerDiv"], descendants: true, isSignal: true }, { propertyName: "_filterInput", first: true, predicate: ["filterInput"], descendants: true, isSignal: true }, { propertyName: "_selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_dropdownPanel", first: true, predicate: ["dropdownPanel"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"select-container group flex h-[35px] w-full overflow-hidden rounded-medium border outline-2 outline-[var(--s-focus-ring-color,#0090ff)] outline-offset-[-2px] focus-visible:outline\"\n [class.pointer-events-none]=\"disabled()\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.bg-grayscale-5]=\"disabled()\"\n [class.pointer-events-auto]=\"!disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n [class.bg-grayscale-0]=\"!disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"showOptions()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-owns]=\"showOptions() ? componentId + '-listbox' : null\"\n [attr.aria-activedescendant]=\"showOptions() ? focusedOptionId() : null\"\n role=\"combobox\"\n [id]=\"componentId + '-combobox'\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledBy() || null\"\n>\n <span\n class=\"flex flex-grow select-none px-[10px] py-[7px]\"\n [class.text-grayscale-90]=\"!disabled() && !isClean()\"\n [class.text-grayscale-60]=\"!disabled() && isClean()\"\n [class.text-grayscale-30]=\"disabled()\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n (keydown)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"'platform.angular_components.aria_clear_selection' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <div\n class=\"dropdown-container flex w-9 shrink-0 items-center justify-center border-l group-hover:bg-grayscale-5\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n >\n <i\n class=\"fas text-base\"\n aria-hidden=\"true\"\n [class.text-grayscale-30]=\"disabled()\"\n [class.text-grayscale-90]=\"!disabled()\"\n [class.fa-caret-down]=\"!showOptions()\"\n [class.fa-caret-up]=\"showOptions()\"\n ></i>\n </div>\n</div>\n\n<ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"showOptions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"_closeDropdown()\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (attach)=\"_syncPanelWidth()\"\n (detach)=\"_closeDropdown()\"\n>\n <div\n #dropdownPanel\n [id]=\"componentId + '-listbox'\"\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n (click)=\"$event.stopPropagation()\"\n [style.width.px]=\"panelWidth()\"\n [attr.aria-multiselectable]=\"multiple() ? true : null\"\n [@visibilityChanged]\n role=\"listbox\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n [ariaLabel]=\"selectAllCheckboxAriaLabel()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex w-full grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n #filterInput\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"onFilterKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.filter_options' | translate\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-activedescendant]=\"focusedOptionId()\"\n autocomplete=\"off\"\n />\n </form>\n <i\n class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <button\n (click)=\"clearFilter()\"\n (keydown)=\"onClearFilterButtonKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.clear_filter' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n role=\"presentation\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul\n class=\"max-h-52 overflow-auto\"\n role=\"presentation\"\n >\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">\n {{ emptyMessage() ?? 'platform.angular_components.no_records_found' | translate }}\n </span>\n }\n </div>\n</ng-template>\n\n", styles: [":host.ng-dirty.ng-invalid .select-container:not(:focus-within){&,.dropdown-container{border-color:#c13018}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: SelectOptionComponent, selector: "s-select-option", inputs: ["id", "label", "multiple", "checkmark", "isGrouper", "isFocused", "isSelected", "checkIconClass", "groupAnnouncement", "posinset", "setsize"], outputs: ["isSelectedChange", "selected"] }, { kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "checkedChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [
|
|
1121
1134
|
trigger('visibilityChanged', [
|
|
1122
1135
|
state('void', style({ opacity: 0, transform: 'scale(0.95)' })),
|
|
1123
1136
|
transition(':enter', [
|
|
@@ -1156,7 +1169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1156
1169
|
animate('500ms cubic-bezier(0.4, 0, 0.2, 1)', style({ opacity: 0, transform: 'scale(0.95)' })),
|
|
1157
1170
|
]),
|
|
1158
1171
|
]),
|
|
1159
|
-
], template: "<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"select-container group flex h-[35px] w-full overflow-hidden rounded-medium border outline-2 outline-[var(--s-focus-ring-color,#0090ff)] outline-offset-[-2px] focus-visible:outline\"\n [class.pointer-events-none]=\"disabled()\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.bg-grayscale-5]=\"disabled()\"\n [class.pointer-events-auto]=\"!disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n [class.bg-grayscale-0]=\"!disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"showOptions()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-owns]=\"showOptions() ? componentId + '-listbox' : null\"\n [attr.aria-activedescendant]=\"showOptions() ? focusedOptionId() : null\"\n role=\"combobox\"\n [id]=\"componentId + '-combobox'\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledBy() || null\"\n>\n <span\n class=\"flex flex-grow select-none px-[10px] py-[7px]\"\n [class.text-grayscale-90]=\"!disabled() && !isClean()\"\n [class.text-grayscale-60]=\"!disabled() && isClean()\"\n [class.text-grayscale-30]=\"disabled()\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n (keydown)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"'platform.angular_components.aria_clear_selection' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <div\n class=\"dropdown-container flex w-9 shrink-0 items-center justify-center border-l group-hover:bg-grayscale-5\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n >\n <i\n class=\"fas text-base\"\n aria-hidden=\"true\"\n [class.text-grayscale-30]=\"disabled()\"\n [class.text-grayscale-90]=\"!disabled()\"\n [class.fa-caret-down]=\"!showOptions()\"\n [class.fa-caret-up]=\"showOptions()\"\n ></i>\n </div>\n</div>\n\n<ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"showOptions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"_closeDropdown()\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (detach)=\"_closeDropdown()\"\n>\n <div\n #dropdownPanel\n [id]=\"componentId + '-listbox'\"\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n (click)=\"$event.stopPropagation()\"\n [style.width.px]=\"
|
|
1172
|
+
], template: "<div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"select-container group flex h-[35px] w-full overflow-hidden rounded-medium border outline-2 outline-[var(--s-focus-ring-color,#0090ff)] outline-offset-[-2px] focus-visible:outline\"\n [class.pointer-events-none]=\"disabled()\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.bg-grayscale-5]=\"disabled()\"\n [class.pointer-events-auto]=\"!disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n [class.bg-grayscale-0]=\"!disabled()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"showOptions()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-owns]=\"showOptions() ? componentId + '-listbox' : null\"\n [attr.aria-activedescendant]=\"showOptions() ? focusedOptionId() : null\"\n role=\"combobox\"\n [id]=\"componentId + '-combobox'\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledBy() || null\"\n>\n <span\n class=\"flex flex-grow select-none px-[10px] py-[7px]\"\n [class.text-grayscale-90]=\"!disabled() && !isClean()\"\n [class.text-grayscale-60]=\"!disabled() && isClean()\"\n [class.text-grayscale-30]=\"disabled()\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n (keydown)=\"$event.stopPropagation()\"\n [attr.aria-label]=\"'platform.angular_components.aria_clear_selection' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <div\n class=\"dropdown-container flex w-9 shrink-0 items-center justify-center border-l group-hover:bg-grayscale-5\"\n [class.border-grayscale-20]=\"disabled()\"\n [class.border-grayscale-30]=\"!disabled()\"\n >\n <i\n class=\"fas text-base\"\n aria-hidden=\"true\"\n [class.text-grayscale-30]=\"disabled()\"\n [class.text-grayscale-90]=\"!disabled()\"\n [class.fa-caret-down]=\"!showOptions()\"\n [class.fa-caret-up]=\"showOptions()\"\n ></i>\n </div>\n</div>\n\n<ng-template\n #dropdownTemplate\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"showOptions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"_closeDropdown()\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (attach)=\"_syncPanelWidth()\"\n (detach)=\"_closeDropdown()\"\n>\n <div\n #dropdownPanel\n [id]=\"componentId + '-listbox'\"\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n (click)=\"$event.stopPropagation()\"\n [style.width.px]=\"panelWidth()\"\n [attr.aria-multiselectable]=\"multiple() ? true : null\"\n [@visibilityChanged]\n role=\"listbox\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n [ariaLabel]=\"selectAllCheckboxAriaLabel()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex w-full grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n #filterInput\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"onFilterKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.filter_options' | translate\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-activedescendant]=\"focusedOptionId()\"\n autocomplete=\"off\"\n />\n </form>\n <i\n class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <button\n (click)=\"clearFilter()\"\n (keydown)=\"onClearFilterButtonKeyDown($event)\"\n [attr.aria-label]=\"'platform.angular_components.clear_filter' | translate\"\n >\n <i\n class=\"fas fa-times flex items-center\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n role=\"presentation\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul\n class=\"max-h-52 overflow-auto\"\n role=\"presentation\"\n >\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [checkIconClass]=\"checkIconClass()\"\n [isSelected]=\"isOptionSelected(option)\"\n (selected)=\"selectItem(option)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n [groupAnnouncement]=\"groupAnnouncementFor(option.id)\"\n [posinset]=\"optionPosinsetFor(option.id)\"\n [setsize]=\"optionSetsizeFor(option.id)\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">\n {{ emptyMessage() ?? 'platform.angular_components.no_records_found' | translate }}\n </span>\n }\n </div>\n</ng-template>\n\n", styles: [":host.ng-dirty.ng-invalid .select-container:not(:focus-within){&,.dropdown-container{border-color:#c13018}}\n"] }]
|
|
1160
1173
|
}], ctorParameters: () => [] });
|
|
1161
1174
|
|
|
1162
1175
|
/**
|