@odx/angular 6.1.0 → 6.2.0
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/CHANGELOG.md +15 -0
- package/cdk/checkbox-control/lib/checkbox-control.directive.d.ts +19 -1
- package/cdk/connected-overlay/lib/models/connected-overlay-ref.d.ts +1 -1
- package/cdk/dynamic-view/lib/dynamic-view.directive.d.ts +9 -1
- package/cdk/expandable/lib/directives/expandable-container.directive.d.ts +9 -5
- package/cdk/expandable/lib/directives/expandable-item.directive.d.ts +4 -1
- package/cdk/option-control/lib/option-control.d.ts +2 -0
- package/cdk/radio-group-control/lib/radio-control.directive.d.ts +18 -0
- package/cdk/radio-group-control/lib/radio-group-control.directive.d.ts +3 -1
- package/components/accordion/lib/components/accordion-item/accordion-item.component.d.ts +9 -5
- package/components/action-group/action-group.component.d.ts +3 -0
- package/components/area-header/area-header.component.d.ts +2 -1
- package/components/autocomplete/lib/autocomplete.component.d.ts +17 -4
- package/components/autocomplete/lib/components/option/autocomplete-option.component.d.ts +8 -0
- package/components/autocomplete/lib/directives/autocomplete-input-control.directive.d.ts +4 -0
- package/components/avatar/lib/avatar.component.d.ts +6 -2
- package/components/badge/lib/badge.component.d.ts +12 -1
- package/components/badge/lib/badge.directive.d.ts +18 -3
- package/components/bar/lib/directives/bar-button.directive.d.ts +6 -0
- package/components/button/lib/button.component.d.ts +9 -1
- package/components/button-group/lib/button-group.component.d.ts +12 -0
- package/components/calendar/lib/calendar.component.d.ts +11 -0
- package/components/calendar/lib/calendar.config.d.ts +6 -0
- package/components/calendar/lib/calendar.service.d.ts +13 -1
- package/components/calendar/lib/components/calendar-header/calendar-header.component.d.ts +16 -0
- package/components/calendar/lib/daterange.service.d.ts +3 -0
- package/components/calendar/lib/directives/calendar-cell.directive.d.ts +4 -0
- package/components/calendar/lib/directives/calendar-view.directive.d.ts +18 -0
- package/components/calendar/lib/pipes/date-label.pipe.d.ts +4 -0
- package/components/card/lib/card.component.d.ts +26 -2
- package/components/card/lib/components/card-footer/card-footer.component.d.ts +3 -0
- package/components/card/lib/components/launch-card-subtitle/launch-card-subtitle.component.d.ts +3 -0
- package/components/card/lib/directives/card-content.directive.d.ts +3 -0
- package/components/card/lib/directives/card-title.directive.d.ts +3 -0
- package/components/checkbox/lib/checkbox.component.d.ts +9 -2
- package/components/chip/lib/components/chip/chip.component.d.ts +15 -3
- package/components/circular-progress/lib/circular-progress.component.d.ts +15 -2
- package/components/datepicker/lib/datepicker.component.d.ts +28 -1
- package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +7 -1
- package/components/daterangepicker/lib/daterangepicker.component.d.ts +4 -0
- package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +3 -1
- package/components/daterangepicker/lib/required.validator.d.ts +8 -0
- package/components/dropdown/lib/dropdown.component.d.ts +6 -4
- package/components/dropdown/lib/dropdown.directive.d.ts +38 -3
- package/components/dropdown/lib/helpers/close-current-dropdown.d.ts +2 -1
- package/components/error-page/lib/error-page.component.d.ts +2 -0
- package/components/footer/lib/footer.component.d.ts +6 -2
- package/components/footer/lib/helpers/create-footer-links.d.ts +1 -2
- package/components/form-field/lib/components/form-field-info/form-field-info.component.d.ts +2 -1
- package/components/form-field/lib/components/form-group/form-group.component.d.ts +7 -2
- package/components/form-field/lib/directives/form-field-error.directive.d.ts +2 -0
- package/components/form-field/lib/directives/form.directive.d.ts +4 -0
- package/components/form-field/lib/form-field.component.d.ts +17 -2
- package/components/form-field/lib/form-field.service.d.ts +27 -6
- package/components/form-field/lib/services/form-field-error.service.d.ts +11 -3
- package/components/header-navigation/lib/header-navigation.component.d.ts +3 -0
- package/components/icon/lib/helpers/unpack-icon-identifier.d.ts +2 -2
- package/components/icon/lib/icon.component.d.ts +13 -1
- package/components/inline-message/lib/inline-message.component.d.ts +5 -1
- package/components/list/lib/components/expandable-list-item/expandable-list-item.component.d.ts +1 -0
- package/components/list/lib/components/list-item/list-item.component.d.ts +10 -1
- package/components/list/lib/list.component.d.ts +1 -0
- package/components/loading-spinner/lib/loading-spinner.component.d.ts +3 -0
- package/components/loading-spinner/lib/loading-spinner.directive.d.ts +7 -0
- package/components/modal/lib/components/modal-header/modal-header.component.d.ts +0 -1
- package/components/modal/lib/components/modal-hero/modal-hero.component.d.ts +3 -0
- package/components/modal/lib/directives/index.d.ts +2 -0
- package/components/modal/lib/directives/prevent-form-method-dialog.directive.d.ts +9 -0
- package/components/modal/lib/directives/prevent-method-dialog.directive.d.ts +9 -0
- package/components/modal/lib/modal.component.d.ts +11 -3
- package/components/modal/lib/modal.module.d.ts +5 -3
- package/components/modal/lib/modal.service.d.ts +7 -5
- package/components/modal/lib/models/modal-ref.d.ts +18 -4
- package/components/notification/lib/components/notification-item/notification-item.component.d.ts +4 -4
- package/components/notification/lib/directives/notification-center.directive.d.ts +6 -3
- package/components/notification/lib/features/with-browser-notifications.d.ts +1 -1
- package/components/notification/lib/features/with-load-notifications.d.ts +2 -1
- package/components/notification/lib/features/with-notification-transformer.d.ts +2 -2
- package/components/notification/lib/features/with-peristent-notifications.d.ts +6 -8
- package/components/notification/lib/features/with-save-notifications.d.ts +1 -1
- package/components/paginator/lib/paginator.component.d.ts +50 -0
- package/components/progress/lib/progress.component.d.ts +6 -1
- package/components/radio-group/lib/components/radio-button/radio-button.component.d.ts +7 -0
- package/components/radio-group/lib/radio-group.component.d.ts +6 -0
- package/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.d.ts +9 -0
- package/components/rail-navigation/lib/rail-navigation.component.d.ts +10 -2
- package/components/rich-list/lib/components/rich-list-item/rich-list-item.component.d.ts +8 -10
- package/components/rich-list/lib/rich-list.component.d.ts +3 -0
- package/components/select/lib/components/select-option/select-option.component.d.ts +1 -0
- package/components/select/lib/directives/select-input-control.directive.d.ts +4 -1
- package/components/select/lib/select.component.d.ts +7 -1
- package/components/slider/lib/slider.directive.d.ts +7 -4
- package/components/spinbox/lib/spinbox.component.d.ts +9 -0
- package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +4 -1
- package/components/table/lib/components/check-cell/check-cell.component.d.ts +4 -1
- package/components/table/lib/components/header-title/header-title.component.d.ts +12 -1
- package/components/table/lib/table.component.d.ts +18 -1
- package/components/timepicker/lib/components/timepicker-option.component.d.ts +9 -1
- package/components/timepicker/lib/directives/timepicker-input-control.directive.d.ts +2 -0
- package/components/timepicker/lib/timepicker.component.d.ts +18 -3
- package/components/timepicker/lib/timepicker.service.d.ts +0 -7
- package/components/toast/lib/components/toast-container/toast-container.component.d.ts +19 -0
- package/components/toast/lib/components/toast-item/toast-item.component.d.ts +57 -1
- package/components/toast/lib/toast.service.d.ts +12 -0
- package/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.d.ts +3 -0
- package/components/toggle-button-group/lib/toggle-button-group.component.d.ts +2 -0
- package/components/tooltip/lib/tooltip.component.d.ts +7 -1
- package/components/tooltip/lib/tooltip.directive.d.ts +15 -2
- package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +17 -0
- package/components/wizard/lib/wizard.component.d.ts +13 -1
- package/esm2022/cdk/checkbox-control/lib/checkbox-control.directive.mjs +20 -2
- package/esm2022/cdk/connected-overlay/lib/models/connected-overlay-ref.mjs +2 -2
- package/esm2022/cdk/dynamic-view/lib/dynamic-view.directive.mjs +4 -1
- package/esm2022/cdk/expandable/lib/directives/expandable-container.directive.mjs +10 -6
- package/esm2022/cdk/expandable/lib/directives/expandable-item.directive.mjs +5 -2
- package/esm2022/cdk/option-control/lib/option-control.mjs +3 -1
- package/esm2022/cdk/radio-group-control/lib/radio-control.directive.mjs +19 -1
- package/esm2022/cdk/radio-group-control/lib/radio-group-control.directive.mjs +3 -1
- package/esm2022/components/accordion/lib/components/accordion-item/accordion-item.component.mjs +9 -4
- package/esm2022/components/action-group/action-group.component.mjs +4 -1
- package/esm2022/components/area-header/area-header.component.mjs +3 -2
- package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +8 -5
- package/esm2022/components/autocomplete/lib/components/option/autocomplete-option.component.mjs +9 -1
- package/esm2022/components/autocomplete/lib/directives/autocomplete-input-control.directive.mjs +5 -1
- package/esm2022/components/avatar/lib/avatar.component.mjs +7 -3
- package/esm2022/components/badge/lib/badge.component.mjs +7 -2
- package/esm2022/components/badge/lib/badge.directive.mjs +19 -4
- package/esm2022/components/bar/lib/directives/bar-button.directive.mjs +7 -1
- package/esm2022/components/button/lib/button.component.mjs +10 -2
- package/esm2022/components/button-group/lib/button-group.component.mjs +13 -1
- package/esm2022/components/calendar/lib/calendar.component.mjs +12 -1
- package/esm2022/components/calendar/lib/calendar.config.mjs +1 -1
- package/esm2022/components/calendar/lib/calendar.service.mjs +14 -2
- package/esm2022/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +13 -1
- package/esm2022/components/calendar/lib/daterange.service.mjs +4 -1
- package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +5 -1
- package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +17 -1
- package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +5 -1
- package/esm2022/components/card/lib/card.component.mjs +25 -1
- package/esm2022/components/card/lib/components/card-footer/card-footer.component.mjs +4 -1
- package/esm2022/components/card/lib/components/launch-card-subtitle/launch-card-subtitle.component.mjs +4 -1
- package/esm2022/components/card/lib/directives/card-content.directive.mjs +4 -1
- package/esm2022/components/card/lib/directives/card-title.directive.mjs +4 -1
- package/esm2022/components/checkbox/lib/checkbox.component.mjs +10 -3
- package/esm2022/components/chip/lib/components/chip/chip.component.mjs +15 -3
- package/esm2022/components/circular-progress/lib/circular-progress.component.mjs +16 -3
- package/esm2022/components/datepicker/lib/datepicker.component.mjs +29 -2
- package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +8 -2
- package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +5 -1
- package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +4 -2
- package/esm2022/components/daterangepicker/lib/required.validator.mjs +9 -9
- package/esm2022/components/dropdown/lib/dropdown.component.mjs +1 -5
- package/esm2022/components/dropdown/lib/dropdown.directive.mjs +31 -4
- package/esm2022/components/dropdown/lib/helpers/close-current-dropdown.mjs +3 -2
- package/esm2022/components/error-page/lib/error-page.component.mjs +3 -1
- package/esm2022/components/footer/lib/footer.component.mjs +7 -3
- package/esm2022/components/footer/lib/helpers/create-footer-links.mjs +2 -3
- package/esm2022/components/form-field/lib/components/form-field-info/form-field-info.component.mjs +3 -2
- package/esm2022/components/form-field/lib/components/form-group/form-group.component.mjs +6 -3
- package/esm2022/components/form-field/lib/directives/form-field-error.directive.mjs +1 -1
- package/esm2022/components/form-field/lib/directives/form.directive.mjs +5 -1
- package/esm2022/components/form-field/lib/form-field.component.mjs +14 -2
- package/esm2022/components/form-field/lib/form-field.service.mjs +28 -7
- package/esm2022/components/form-field/lib/services/form-field-error.service.mjs +12 -4
- package/esm2022/components/header-navigation/lib/header-navigation.component.mjs +1 -1
- package/esm2022/components/icon/lib/helpers/unpack-icon-identifier.mjs +3 -3
- package/esm2022/components/icon/lib/icon.component.mjs +14 -2
- package/esm2022/components/inline-message/lib/inline-message.component.mjs +6 -2
- package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +2 -1
- package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +11 -2
- package/esm2022/components/list/lib/list.component.mjs +2 -1
- package/esm2022/components/loading-spinner/lib/loading-spinner.component.mjs +4 -1
- package/esm2022/components/loading-spinner/lib/loading-spinner.directive.mjs +8 -1
- package/esm2022/components/modal/lib/components/modal-header/modal-header.component.mjs +1 -1
- package/esm2022/components/modal/lib/components/modal-hero/modal-hero.component.mjs +4 -1
- package/esm2022/components/modal/lib/directives/index.mjs +3 -1
- package/esm2022/components/modal/lib/directives/prevent-form-method-dialog.directive.mjs +23 -0
- package/esm2022/components/modal/lib/directives/prevent-method-dialog.directive.mjs +23 -0
- package/esm2022/components/modal/lib/modal.component.mjs +36 -17
- package/esm2022/components/modal/lib/modal.module.mjs +10 -4
- package/esm2022/components/modal/lib/modal.service.mjs +4 -3
- package/esm2022/components/modal/lib/models/modal-ref.mjs +19 -5
- package/esm2022/components/notification/lib/components/notification-item/notification-item.component.mjs +5 -5
- package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +7 -4
- package/esm2022/components/notification/lib/features/with-browser-notifications.mjs +4 -5
- package/esm2022/components/notification/lib/features/with-load-notifications.mjs +3 -3
- package/esm2022/components/notification/lib/features/with-notification-transformer.mjs +3 -3
- package/esm2022/components/notification/lib/features/with-peristent-notifications.mjs +7 -9
- package/esm2022/components/notification/lib/features/with-save-notifications.mjs +3 -4
- package/esm2022/components/paginator/lib/paginator.component.mjs +51 -1
- package/esm2022/components/progress/lib/progress.component.mjs +7 -2
- package/esm2022/components/radio-group/lib/components/radio-button/radio-button.component.mjs +3 -1
- package/esm2022/components/radio-group/lib/radio-group.component.mjs +7 -1
- package/esm2022/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.mjs +7 -1
- package/esm2022/components/rail-navigation/lib/rail-navigation.component.mjs +11 -3
- package/esm2022/components/rich-list/lib/components/rich-list-item/rich-list-item.component.mjs +4 -6
- package/esm2022/components/rich-list/lib/rich-list.component.mjs +4 -1
- package/esm2022/components/select/lib/components/select-option/select-option.component.mjs +2 -1
- package/esm2022/components/select/lib/directives/select-input-control.directive.mjs +4 -1
- package/esm2022/components/select/lib/select.component.mjs +8 -2
- package/esm2022/components/slider/lib/slider.directive.mjs +7 -4
- package/esm2022/components/spinbox/lib/spinbox.component.mjs +10 -1
- package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +5 -2
- package/esm2022/components/table/lib/components/check-cell/check-cell.component.mjs +5 -2
- package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +11 -1
- package/esm2022/components/table/lib/table.component.mjs +15 -1
- package/esm2022/components/timepicker/lib/components/timepicker-option.component.mjs +10 -2
- package/esm2022/components/timepicker/lib/directives/timepicker-input-control.directive.mjs +3 -1
- package/esm2022/components/timepicker/lib/timepicker.component.mjs +14 -4
- package/esm2022/components/timepicker/lib/timepicker.service.mjs +1 -8
- package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +20 -1
- package/esm2022/components/toast/lib/components/toast-item/toast-item.component.mjs +24 -1
- package/esm2022/components/toast/lib/toast.service.mjs +13 -1
- package/esm2022/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.mjs +4 -1
- package/esm2022/components/toggle-button-group/lib/toggle-button-group.component.mjs +3 -1
- package/esm2022/components/tooltip/lib/tooltip.component.mjs +6 -2
- package/esm2022/components/tooltip/lib/tooltip.directive.mjs +16 -3
- package/esm2022/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +18 -1
- package/esm2022/components/wizard/lib/wizard.component.mjs +22 -4
- package/esm2022/lib/controllers/disabled.controller.mjs +9 -1
- package/esm2022/lib/controllers/readonly.controller.mjs +3 -1
- package/esm2022/lib/directives/click-outside.directive.mjs +2 -1
- package/esm2022/lib/services/window-ref.mjs +22 -4
- package/esm2022/theming/lib/helpers/prefers-dark-theme.mjs +1 -1
- package/esm2022/theming/lib/theming.service.mjs +3 -1
- package/esm2022/utils/lib/helpers/queue.mjs +24 -14
- package/fesm2022/odx-angular-cdk-checkbox-control.mjs +19 -1
- package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-connected-overlay.mjs +1 -1
- package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs +3 -0
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-expandable.mjs +13 -6
- package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-option-control.mjs +2 -0
- package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-radio-group-control.mjs +20 -0
- package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
- package/fesm2022/odx-angular-components-accordion.mjs +8 -3
- package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/odx-angular-components-action-group.mjs +3 -0
- package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-area-header.mjs +2 -1
- package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
- package/fesm2022/odx-angular-components-autocomplete.mjs +19 -4
- package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/odx-angular-components-avatar.mjs +6 -2
- package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-badge.mjs +24 -4
- package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
- package/fesm2022/odx-angular-components-bar.mjs +6 -0
- package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-button-group.mjs +12 -0
- package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-button.mjs +9 -1
- package/fesm2022/odx-angular-components-button.mjs.map +1 -1
- package/fesm2022/odx-angular-components-calendar.mjs +63 -1
- package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-card.mjs +36 -0
- package/fesm2022/odx-angular-components-card.mjs.map +1 -1
- package/fesm2022/odx-angular-components-checkbox.mjs +9 -2
- package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-chip.mjs +14 -2
- package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
- package/fesm2022/odx-angular-components-circular-progress.mjs +15 -2
- package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
- package/fesm2022/odx-angular-components-datepicker.mjs +35 -2
- package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-daterangepicker.mjs +15 -9
- package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-dropdown.mjs +32 -8
- package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
- package/fesm2022/odx-angular-components-error-page.mjs +2 -0
- package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
- package/fesm2022/odx-angular-components-footer.mjs +7 -4
- package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
- package/fesm2022/odx-angular-components-form-field.mjs +62 -13
- package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
- package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
- package/fesm2022/odx-angular-components-icon.mjs +15 -3
- package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
- package/fesm2022/odx-angular-components-inline-message.mjs +5 -1
- package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
- package/fesm2022/odx-angular-components-list.mjs +12 -1
- package/fesm2022/odx-angular-components-list.mjs.map +1 -1
- package/fesm2022/odx-angular-components-loading-spinner.mjs +10 -0
- package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
- package/fesm2022/odx-angular-components-modal.mjs +110 -25
- package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
- package/fesm2022/odx-angular-components-notification.mjs +25 -26
- package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
- package/fesm2022/odx-angular-components-paginator.mjs +50 -0
- package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/odx-angular-components-progress.mjs +6 -1
- package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
- package/fesm2022/odx-angular-components-radio-group.mjs +8 -0
- package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-rail-navigation.mjs +16 -2
- package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/odx-angular-components-rich-list.mjs +6 -5
- package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
- package/fesm2022/odx-angular-components-select.mjs +11 -1
- package/fesm2022/odx-angular-components-select.mjs.map +1 -1
- package/fesm2022/odx-angular-components-slider.mjs +6 -3
- package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
- package/fesm2022/odx-angular-components-spinbox.mjs +9 -0
- package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +4 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-table.mjs +28 -1
- package/fesm2022/odx-angular-components-table.mjs.map +1 -1
- package/fesm2022/odx-angular-components-timepicker.mjs +24 -11
- package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toast.mjs +54 -0
- package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toggle-button-group.mjs +5 -0
- package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tooltip.mjs +20 -3
- package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/odx-angular-components-wizard.mjs +38 -3
- package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
- package/fesm2022/odx-angular-theming.mjs +2 -0
- package/fesm2022/odx-angular-theming.mjs.map +1 -1
- package/fesm2022/odx-angular-utils.mjs +23 -13
- package/fesm2022/odx-angular-utils.mjs.map +1 -1
- package/fesm2022/odx-angular.mjs +32 -3
- package/fesm2022/odx-angular.mjs.map +1 -1
- package/lib/controllers/disabled.controller.d.ts +8 -0
- package/lib/controllers/readonly.controller.d.ts +2 -0
- package/lib/directives/click-outside.directive.d.ts +1 -0
- package/lib/services/window-ref.d.ts +21 -3
- package/package.json +1 -1
- package/theming/lib/theming.service.d.ts +2 -0
- package/utils/lib/helpers/queue.d.ts +23 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-select.mjs","sources":["../../../../libs/angular/components/select/src/lib/select.tokens.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.html","../../../../libs/angular/components/select/src/lib/directives/select-input-control.directive.ts","../../../../libs/angular/components/select/src/lib/pipes/select-search-filter.pipe.ts","../../../../libs/angular/components/select/src/lib/select.component.ts","../../../../libs/angular/components/select/src/lib/select.component.html","../../../../libs/angular/components/select/src/lib/select.module.ts","../../../../libs/angular/components/select/src/odx-angular-components-select.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SelectComponent } from './select.component';\n\nexport const SELECT_CONTROL = new InjectionToken<SelectComponent>('@odx/angular/components/select::SelectComponent');\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, detectControllerChanges } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { OptionControl } from '@odx/angular/cdk/option-control';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { SELECT_CONTROL } from '../../select.tokens';\n\n/**\n * SelectOptionComponent is a customizable option element for use within a SelectComponent.\n * It supports complex data structures, integration with checkbox components for multi-select,\n * and can be disabled as needed.\n * It extends OptionControl to provide additional behavior specific to select components.\n *\n * @see {OptionControl}\n */\n@CSSComponent('select-option')\n@Component({\n standalone: true,\n selector: 'odx-select-option, odx-option',\n imports: [CoreModule, DynamicViewDirective, CheckboxComponent],\n templateUrl: './select-option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled || null',\n '[class.is-disabled]': 'disabled',\n },\n})\nexport class SelectOptionComponent<T = unknown> extends OptionControl<T> implements OnInit {\n private _isDisabled = false;\n\n protected readonly selectControl = inject(SELECT_CONTROL);\n\n /**\n * Indicates whether the option is currently selected.\n *\n * @type {boolean}\n */\n public isSelected = false;\n\n /**\n * Indicates whether a not found message should be displayed, used typically for search results.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public notFoundMessage = false;\n\n /**\n * Setter for the disabled state of the select option.\n *\n * @param value - The new value for the disabled state.\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this._isDisabled = value;\n }\n\n /**\n * Getter for the disabled state of the select option.\n *\n * @returns {boolean} The current disabled state of the option.\n */\n public get disabled(): boolean {\n return this._isDisabled;\n }\n\n constructor() {\n super();\n\n detectControllerChanges(this.selectControl)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.isSelected = this.selectControl.isOptionSelected(this);\n });\n }\n\n public ngOnInit(): void {\n this.isSelected = this.selectControl.isOptionSelected(this);\n }\n\n /**\n * Sets active styles for the option when it becomes the target of keyboard navigation or mouse hover.\n */\n public override setActiveStyles(): void {\n if (this.disabled) return;\n\n this.isActive = true;\n\n if (this.selectControl.isOpen) {\n this.selectControl.scrollOptionIntoView(this);\n } else {\n this.selectControl.selectOption(this);\n }\n }\n\n /**\n * Toggles the selection state of the option when it is part of a multi-select control.\n */\n public switchCheckbox(): void {\n if (this.selectControl.multiple) {\n this.isSelected = !this.isSelected;\n this.cdr.markForCheck();\n }\n }\n\n protected selectOption(): void {\n this.selectControl.selectOption(this);\n }\n}\n","<odx-checkbox [checked]=\"isSelected\" [disabled]=\"disabled\" *ngIf=\"selectControl.multiple && !notFoundMessage; else single\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</odx-checkbox>\n\n<ng-template #single>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SelectInputControlDirective extends InputControlDirective to provide additional behavior\n * specific to select components with search functionality. This directive manages interactions\n * within the search input field, such as resetting the field content upon specific key events.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('select__control')\n@Directive({\n standalone: true,\n selector: 'input[odxSelectSearchField]',\n})\nexport class SelectInputControlDirective extends InputControlDirective {\n /**\n * Dynamic content to be displayed when no matching search results are found.\n * This can be specified as HTML content or a string.\n */\n @Input('odxSelectSearchField')\n public notFoundContent: DynamicContent | null = null;\n\n @HostListener('keydown.delete')\n public handleDelete(): void {\n this.reset();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BaseSearchFilterPipe } from '@odx/angular/cdk/autocomplete-control';\n/**\n * SelectSearchFilterPipe extends BaseSearchFilterPipe to provide search filtering functionality\n * specifically for select components. It filters options based on the input query, supporting\n * complex filtering logic as defined in the BaseSearchFilterPipe.\n *\n * This pipe is not pure, meaning it updates and reevaluates when inputs change or when\n * impure actions occur in the application.\n *\n * @see {BaseSearchFilterPipe}\n */\n@Pipe({\n pure: false,\n name: 'odxSelectSearchFilter',\n standalone: true,\n})\nexport class SelectSearchFilterPipe extends BaseSearchFilterPipe implements PipeTransform {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n HostListener,\n inject,\n Input,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CoreModule, IdentityMatcher, ODX_IDENTITY_MATCHER } from '@odx/angular';\nimport { AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromQueryList } from '@odx/angular/rxjs';\nimport { deferFn } from '@odx/angular/utils';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SELECT_CONTROL } from './select.tokens';\n\n/**\n * SelectComponent provides an advanced dropdown list that supports autocomplete, multiple selection,\n * and accessibility features. It extends AutocompleteControl for seamless integration with Angular forms.\n *\n * @see {AutocompleteControl}\n */\n@CSSComponent('select')\n@Component({\n standalone: true,\n selector: 'odx-select',\n imports: [CoreModule, DropdownDirective, IconComponent, DynamicViewDirective, SelectOptionComponent, LoadingSpinnerModule],\n templateUrl: './select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SELECT_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n {\n provide: ODX_SEARCH_FILTER_HOST,\n useExisting: SELECT_CONTROL,\n },\n ],\n host: {\n '[tabindex]': 'searchFieldEnabled || isDisabled ? -1 : 0',\n '[attr.aria-multiselectable]': 'multiple',\n },\n})\nexport class SelectComponent<T = unknown> extends AutocompleteControl<T | null> implements AfterViewInit {\n protected searchFieldEnabled = false;\n protected selectedOption: SelectOptionComponent<T> | null = null;\n protected selectedOptionText: string | null = null;\n\n @ContentChildren(SelectOptionComponent, { descendants: true, emitDistinctChangesOnly: true })\n protected options?: QueryList<SelectOptionComponent<T>>;\n\n /**\n * Directive managing the search input field within the select.\n *\n * @type {SelectInputControlDirective}\n */\n @ContentChild(SelectInputControlDirective)\n public searchField?: SelectInputControlDirective;\n\n /**\n * Returns the content of the selected option for display. This can be a template or plain text.\n *\n * @type {TemplateRef<{ $implicit: T | null }> | string | null}\n */\n public get selectedOptionContent(): TemplateRef<{ $implicit: T | null }> | string | null {\n return this.selectedOption ? this.selectedOptionTemplate ?? this.selectedOptionText : null;\n }\n\n /**\n * Placeholder text for the select input when no option is selected.\n *\n * @type {string}\n */\n @Input()\n public placeholder = '';\n\n /**\n * Sets whether multiple options can be selected.\n *\n * @type {boolean}\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public multiple = false;\n\n /**\n * Custom template for displaying the selected option.\n *\n * @type {TemplateRef<{ $implicit: T }> | null}\n */\n @Input()\n public selectedOptionTemplate?: TemplateRef<{ $implicit: T }> | null = null;\n\n /**\n * Function to determine if two options are identical, useful for detecting changes in selection.\n *\n * @type {IdentityMatcher<T | null>}\n *\n * @example\n * ```ts\n * (item1, item2) => item1.id === item2.id\n * ```\n */\n @Input()\n public identityMatcher: IdentityMatcher<T | null> = inject(ODX_IDENTITY_MATCHER);\n\n public override ngAfterViewInit(): void {\n if (!this.options) return;\n\n this.initKeyManager(this.options);\n this.handleQueryListOption(this.options);\n this.handleSearchFieldChanges();\n }\n\n /**\n * Registers a function to be called when the value of the select changes.\n *\n * @param {Function} fn The function to be called when the value changes.\n * @returns {void}\n */\n public override registerOnChange(fn: (value: T | null) => void): void {\n super.registerOnChange((value) => {\n this.updateSelectedOption();\n fn(value);\n });\n }\n\n /**\n * Selects a given option and updates the component's value accordingly.\n *\n * @param {SelectOptionComponent<T | T[]> | null} option The option to select.\n * @returns {void}\n */\n public selectOption(option?: SelectOptionComponent<T | T[]> | null): void {\n if (option && !option.disabled) {\n this.optionSelected.emit();\n option.switchCheckbox();\n const value = this.multiple ? this.multipleSelectValueResolver(option as SelectOptionComponent<T>) : option.value;\n this.updateValue((value as T) ?? null);\n }\n\n !this.multiple && !option?.disabled && this.closeDropdown();\n }\n\n /**\n * Checks whether a given option is selected.\n *\n * @param {SelectOptionComponent<T | T[]>} option The option to check.\n * @returns {boolean} Whether the option is selected.\n */\n public isOptionSelected(option: SelectOptionComponent<T | T[]>): boolean {\n if (option && !option.disabled) {\n if (this.multiple && Array.isArray(this.value)) {\n return (this.value as T[]).some((val) => this.identityMatcher(option.value as T, val));\n }\n return this.identityMatcher(option.value as T, this.value);\n }\n return false;\n }\n\n protected override initKeyManager(options: QueryList<SelectOptionComponent<T>>): void {\n this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd().skipPredicate((item) => item.disabled);\n }\n\n protected handleQueryListOption(options: QueryList<SelectOptionComponent<T>>): void {\n fromQueryList(options)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.updateSelectedOption();\n if (this.isOpen) {\n deferFn(() => this.activateSelectedOption());\n }\n });\n }\n\n protected handleSearchFieldChanges(): void {\n this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.triggerControllerChange());\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown', ['$event'])\n protected handleControllerEvent(event: KeyboardEvent) {\n if (this.isLoading || this.readonlyController?.readonly || !this.isOpen) return;\n if (this.hasOptions) {\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.selectOption(this.keyManager?.activeItem as SelectOptionComponent<T> | undefined);\n return;\n }\n }\n this.keyManager?.onKeydown(event);\n }\n\n protected activateSelectedOption(): void {\n let activeIndex = this.options?.toArray().findIndex((option) => option.isSelected && !option.disabled);\n if (!activeIndex || activeIndex === -1) {\n activeIndex = this.options?.toArray().findIndex((option) => !option.disabled) ?? -1;\n }\n this.keyManager?.setActiveItem(activeIndex);\n }\n\n protected onDropdownOpen(): void {\n this.activateSelectedOption();\n if (!this.searchFieldEnabled) {\n deferFn(() => this.focusSelectSearchField());\n }\n }\n\n protected onDropdownClose(): void {\n this.disableSmoothScroll();\n this.element.nativeElement.blur();\n if (this.searchFieldEnabled) {\n this.searchFieldEnabled = false;\n this.element.nativeElement?.focus();\n }\n }\n\n protected onDropdownClosed(): void {\n this.searchField?.reset();\n }\n\n private updateSelectedOption(): void {\n const options = this.options?.toArray();\n this.selectedOption = options?.find((option) => option.isSelected) ?? null;\n\n if (this.multiple) {\n this.options?.forEach((option) => (option.isSelected = this.isOptionSelected(option)));\n this.selectedOptionText =\n options\n ?.filter(({ isSelected }) => isSelected)\n .map((option) => this.stringify?.(option.value) ?? option.getLabel())\n .join(', ') ?? null;\n\n this.changeDetector.detectChanges();\n return;\n }\n this.selectedOptionText = this.selectedOption ? this.stringify?.(this.selectedOption?.value) ?? this.selectedOption.getLabel() : null;\n this.changeDetector.detectChanges();\n }\n\n private focusSelectSearchField(): void {\n this.searchFieldEnabled = !!this.searchField;\n deferFn(() => this.searchField?.focus());\n this.changeDetector.detectChanges();\n }\n\n private multipleSelectValueResolver(option: SelectOptionComponent<T>): T {\n let value = Array.isArray(this.value) ? (this.value as T[]) : [];\n if (option.isSelected) {\n (value as T[]).push(option.value as T);\n } else {\n value = value.filter((val) => !this.identityMatcher(option.value as T, val));\n }\n return value as T;\n }\n}\n","<div\n aria-haspopup=\"listbox\"\n class=\"odx-select__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n>\n <ng-template [ngIf]=\"!searchFieldEnabled\" [ngIfElse]=\"searchFieldTemplate\">\n <div class=\"odx-select__value\" *ngIf=\"selectedOptionContent; else placeholderTemplate\">\n <ng-template [odxDynamicView]=\"selectedOptionContent\" [odxDynamicViewContext]=\"{ $implicit: value }\"></ng-template>\n </div>\n </ng-template>\n <ng-template #placeholderTemplate>\n <div class=\"odx-select__placeholder\">\n {{ placeholder }}\n </div>\n </ng-template>\n <ng-template #searchFieldTemplate>\n <ng-content select=\"[odxSelectSearchField]\"></ng-content>\n </ng-template>\n <odx-icon class=\"odx-select__indicator\" name=\"chevron-down\" iconSet=\"core\"></odx-icon>\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\" [ngIfElse]=\"noOptionsTemplate\">\n <ng-content></ng-content>\n </ng-template>\n <ng-template #noOptionsTemplate>\n <odx-select-option disabled notFoundMessage>\n <ng-template [odxDynamicView]=\"searchField?.notFoundContent\"></ng-template>\n </odx-select-option>\n </ng-template>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SelectSearchFilterPipe } from './pipes';\nimport { SelectComponent } from './select.component';\n\nconst modules = [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-select.mjs","sources":["../../../../libs/angular/components/select/src/lib/select.tokens.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.html","../../../../libs/angular/components/select/src/lib/directives/select-input-control.directive.ts","../../../../libs/angular/components/select/src/lib/pipes/select-search-filter.pipe.ts","../../../../libs/angular/components/select/src/lib/select.component.ts","../../../../libs/angular/components/select/src/lib/select.component.html","../../../../libs/angular/components/select/src/lib/select.module.ts","../../../../libs/angular/components/select/src/odx-angular-components-select.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SelectComponent } from './select.component';\n\nexport const SELECT_CONTROL = new InjectionToken<SelectComponent>('@odx/angular/components/select::SelectComponent');\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, detectControllerChanges } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { OptionControl } from '@odx/angular/cdk/option-control';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { SELECT_CONTROL } from '../../select.tokens';\n\n/**\n * SelectOptionComponent is a customizable option element for use within a SelectComponent.\n * It supports complex data structures, integration with checkbox components for multi-select,\n * and can be disabled as needed.\n * It extends OptionControl to provide additional behavior specific to select components.\n *\n * @template T - The type of the value selected in the option.\n * @see {OptionControl}\n */\n@CSSComponent('select-option')\n@Component({\n standalone: true,\n selector: 'odx-select-option, odx-option',\n imports: [CoreModule, DynamicViewDirective, CheckboxComponent],\n templateUrl: './select-option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled || null',\n '[class.is-disabled]': 'disabled',\n },\n})\nexport class SelectOptionComponent<T = unknown> extends OptionControl<T> implements OnInit {\n private _isDisabled = false;\n\n protected readonly selectControl = inject(SELECT_CONTROL);\n\n /**\n * Indicates whether the option is currently selected.\n *\n * @type {boolean}\n */\n public isSelected = false;\n\n /**\n * Indicates whether a not found message should be displayed, used typically for search results.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public notFoundMessage = false;\n\n /**\n * Setter for the disabled state of the select option.\n *\n * @param value - The new value for the disabled state.\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this._isDisabled = value;\n }\n\n /**\n * Getter for the disabled state of the select option.\n *\n * @returns {boolean} The current disabled state of the option.\n */\n public get disabled(): boolean {\n return this._isDisabled;\n }\n\n constructor() {\n super();\n\n detectControllerChanges(this.selectControl)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.isSelected = this.selectControl.isOptionSelected(this);\n });\n }\n\n public ngOnInit(): void {\n this.isSelected = this.selectControl.isOptionSelected(this);\n }\n\n /**\n * Sets active styles for the option when it becomes the target of keyboard navigation or mouse hover.\n */\n public override setActiveStyles(): void {\n if (this.disabled) return;\n\n this.isActive = true;\n\n if (this.selectControl.isOpen) {\n this.selectControl.scrollOptionIntoView(this);\n } else {\n this.selectControl.selectOption(this);\n }\n }\n\n /**\n * Toggles the selection state of the option when it is part of a multi-select control.\n */\n public switchCheckbox(): void {\n if (this.selectControl.multiple) {\n this.isSelected = !this.isSelected;\n this.cdr.markForCheck();\n }\n }\n\n protected selectOption(): void {\n this.selectControl.selectOption(this);\n }\n}\n","<odx-checkbox [checked]=\"isSelected\" [disabled]=\"disabled\" *ngIf=\"selectControl.multiple && !notFoundMessage; else single\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</odx-checkbox>\n\n<ng-template #single>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SelectInputControlDirective extends InputControlDirective to provide additional behavior\n * specific to select components with search functionality. This directive manages interactions\n * within the search input field, such as resetting the field content upon specific key events.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('select__control')\n@Directive({\n standalone: true,\n selector: 'input[odxSelectSearchField]',\n})\nexport class SelectInputControlDirective extends InputControlDirective {\n /**\n * Dynamic content to be displayed when no matching search results are found.\n * This can be specified as HTML content or a string.\n *\n * @type {DynamicContent | null}\n * @default null\n */\n @Input('odxSelectSearchField')\n public notFoundContent: DynamicContent | null = null;\n\n @HostListener('keydown.delete')\n protected handleDelete(): void {\n this.reset();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BaseSearchFilterPipe } from '@odx/angular/cdk/autocomplete-control';\n/**\n * SelectSearchFilterPipe extends BaseSearchFilterPipe to provide search filtering functionality\n * specifically for select components. It filters options based on the input query, supporting\n * complex filtering logic as defined in the BaseSearchFilterPipe.\n *\n * This pipe is not pure, meaning it updates and reevaluates when inputs change or when\n * impure actions occur in the application.\n *\n * @see {BaseSearchFilterPipe}\n */\n@Pipe({\n pure: false,\n name: 'odxSelectSearchFilter',\n standalone: true,\n})\nexport class SelectSearchFilterPipe extends BaseSearchFilterPipe implements PipeTransform {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n HostListener,\n inject,\n Input,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CoreModule, IdentityMatcher, ODX_IDENTITY_MATCHER } from '@odx/angular';\nimport { AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromQueryList } from '@odx/angular/rxjs';\nimport { deferFn } from '@odx/angular/utils';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SELECT_CONTROL } from './select.tokens';\n\n/**\n * SelectComponent provides an advanced dropdown list that supports autocomplete, multiple selection,\n * and accessibility features. It extends AutocompleteControl for seamless integration with Angular forms.\n *\n * @template T - The type of the value selected in the select.\n *\n * @see {AutocompleteControl}\n */\n@CSSComponent('select')\n@Component({\n standalone: true,\n selector: 'odx-select',\n imports: [CoreModule, DropdownDirective, IconComponent, DynamicViewDirective, SelectOptionComponent, LoadingSpinnerModule],\n templateUrl: './select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SELECT_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n {\n provide: ODX_SEARCH_FILTER_HOST,\n useExisting: SELECT_CONTROL,\n },\n ],\n host: {\n '[tabindex]': 'searchFieldEnabled || isDisabled ? -1 : 0',\n '[attr.aria-multiselectable]': 'multiple',\n },\n})\nexport class SelectComponent<T = unknown> extends AutocompleteControl<T | null> implements AfterViewInit {\n protected searchFieldEnabled = false;\n protected selectedOption: SelectOptionComponent<T> | null = null;\n protected selectedOptionText: string | null = null;\n\n @ContentChildren(SelectOptionComponent, { descendants: true, emitDistinctChangesOnly: true })\n protected options?: QueryList<SelectOptionComponent<T>>;\n\n /**\n * Directive managing the search input field within the select.\n *\n * @type {SelectInputControlDirective | undefined}\n */\n @ContentChild(SelectInputControlDirective)\n public searchField?: SelectInputControlDirective;\n\n /**\n * Returns the content of the selected option for display. This can be a template or plain text.\n *\n * @type {TemplateRef<{ $implicit: T | null }> | string | null}\n */\n public get selectedOptionContent(): TemplateRef<{ $implicit: T | null }> | string | null {\n return this.selectedOption ? this.selectedOptionTemplate ?? this.selectedOptionText : null;\n }\n\n /**\n * Placeholder text for the select input when no option is selected.\n *\n * @type {string}\n * @default ''\n */\n @Input()\n public placeholder = '';\n\n /**\n * Sets whether multiple options can be selected.\n *\n * @type {boolean}\n * @default false\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public multiple = false;\n\n /**\n * Custom template for displaying the selected option.\n *\n * @type {TemplateRef<{ $implicit: T }> | null}\n * @default null\n */\n @Input()\n public selectedOptionTemplate?: TemplateRef<{ $implicit: T }> | null = null;\n\n /**\n * Function to determine if two options are identical, useful for detecting changes in selection.\n *\n * @type {IdentityMatcher<T | null>}\n * @default ODX_DEFAULT_IDENTITY_MATCHER\n *\n * @example\n * ```ts\n * (item1, item2) => item1.id === item2.id\n * ```\n */\n @Input()\n public identityMatcher: IdentityMatcher<T | null> = inject(ODX_IDENTITY_MATCHER);\n\n public override ngAfterViewInit(): void {\n if (!this.options) return;\n\n this.initKeyManager(this.options);\n this.handleQueryListOption(this.options);\n this.handleSearchFieldChanges();\n }\n\n /**\n * Registers a function to be called when the value of the select changes.\n *\n * @param {Function} fn The function to be called when the value changes.\n * @returns {void}\n */\n public override registerOnChange(fn: (value: T | null) => void): void {\n super.registerOnChange((value) => {\n this.updateSelectedOption();\n fn(value);\n });\n }\n\n /**\n * Selects a given option and updates the component's value accordingly.\n *\n * @param {SelectOptionComponent<T | T[]> | null} option The option to select.\n * @returns {void}\n */\n public selectOption(option?: SelectOptionComponent<T | T[]> | null): void {\n if (option && !option.disabled) {\n this.optionSelected.emit();\n option.switchCheckbox();\n const value = this.multiple ? this.multipleSelectValueResolver(option as SelectOptionComponent<T>) : option.value;\n this.updateValue((value as T) ?? null);\n }\n\n !this.multiple && !option?.disabled && this.closeDropdown();\n }\n\n /**\n * Checks whether a given option is selected.\n *\n * @param {SelectOptionComponent<T | T[]>} option The option to check.\n * @returns {boolean} Whether the option is selected.\n */\n public isOptionSelected(option: SelectOptionComponent<T | T[]>): boolean {\n if (option) {\n if (this.multiple && Array.isArray(this.value)) {\n return (this.value as T[]).some((val) => this.identityMatcher(option.value as T, val));\n }\n return this.identityMatcher(option.value as T, this.value);\n }\n return false;\n }\n\n protected override initKeyManager(options: QueryList<SelectOptionComponent<T>>): void {\n this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd().skipPredicate((item) => item.disabled);\n }\n\n protected handleQueryListOption(options: QueryList<SelectOptionComponent<T>>): void {\n fromQueryList(options)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.updateSelectedOption();\n if (this.isOpen) {\n deferFn(() => this.activateSelectedOption());\n }\n });\n }\n\n protected handleSearchFieldChanges(): void {\n this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.triggerControllerChange());\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown', ['$event'])\n protected handleControllerEvent(event: KeyboardEvent) {\n if (this.isLoading || this.readonlyController?.readonly || !this.isOpen) return;\n if (this.hasOptions) {\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.selectOption(this.keyManager?.activeItem as SelectOptionComponent<T> | undefined);\n return;\n }\n }\n this.keyManager?.onKeydown(event);\n }\n\n protected activateSelectedOption(): void {\n let activeIndex = this.options?.toArray().findIndex((option) => option.isSelected && !option.disabled);\n if (!activeIndex || activeIndex === -1) {\n activeIndex = this.options?.toArray().findIndex((option) => !option.disabled) ?? -1;\n }\n this.keyManager?.setActiveItem(activeIndex);\n }\n\n protected onDropdownOpen(): void {\n this.activateSelectedOption();\n if (!this.searchFieldEnabled) {\n deferFn(() => this.focusSelectSearchField());\n }\n }\n\n protected onDropdownClose(): void {\n this.disableSmoothScroll();\n this.element.nativeElement.blur();\n if (this.searchFieldEnabled) {\n this.searchFieldEnabled = false;\n this.element.nativeElement?.focus();\n }\n }\n\n protected onDropdownClosed(): void {\n this.searchField?.reset();\n }\n\n private updateSelectedOption(): void {\n const options = this.options?.toArray();\n this.selectedOption = options?.find((option) => option.isSelected) ?? null;\n\n if (this.multiple) {\n this.options?.forEach((option) => (option.isSelected = this.isOptionSelected(option)));\n this.selectedOptionText =\n options\n ?.filter(({ isSelected }) => isSelected)\n .map((option) => this.stringify?.(option.value) ?? option.getLabel())\n .join(', ') ?? null;\n\n this.changeDetector.detectChanges();\n return;\n }\n this.selectedOptionText = this.selectedOption ? this.stringify?.(this.selectedOption?.value) ?? this.selectedOption.getLabel() : null;\n this.changeDetector.detectChanges();\n }\n\n private focusSelectSearchField(): void {\n this.searchFieldEnabled = !!this.searchField;\n deferFn(() => this.searchField?.focus());\n this.changeDetector.detectChanges();\n }\n\n private multipleSelectValueResolver(option: SelectOptionComponent<T>): T {\n let value = Array.isArray(this.value) ? (this.value as T[]) : [];\n if (option.isSelected) {\n (value as T[]).push(option.value as T);\n } else {\n value = value.filter((val) => !this.identityMatcher(option.value as T, val));\n }\n return value as T;\n }\n}\n","<div\n aria-haspopup=\"listbox\"\n class=\"odx-select__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n>\n <ng-template [ngIf]=\"!searchFieldEnabled\" [ngIfElse]=\"searchFieldTemplate\">\n <div class=\"odx-select__value\" *ngIf=\"selectedOptionContent; else placeholderTemplate\">\n <ng-template [odxDynamicView]=\"selectedOptionContent\" [odxDynamicViewContext]=\"{ $implicit: value }\"></ng-template>\n </div>\n </ng-template>\n <ng-template #placeholderTemplate>\n <div class=\"odx-select__placeholder\">\n {{ placeholder }}\n </div>\n </ng-template>\n <ng-template #searchFieldTemplate>\n <ng-content select=\"[odxSelectSearchField]\"></ng-content>\n </ng-template>\n <odx-icon class=\"odx-select__indicator\" name=\"chevron-down\" iconSet=\"core\"></odx-icon>\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\" [ngIfElse]=\"noOptionsTemplate\">\n <ng-content></ng-content>\n </ng-template>\n <ng-template #noOptionsTemplate>\n <odx-select-option disabled notFoundMessage>\n <ng-template [odxDynamicView]=\"searchField?.notFoundContent\"></ng-template>\n </odx-select-option>\n </ng-template>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SelectSearchFilterPipe } from './pipes';\nimport { SelectComponent } from './select.component';\n\nconst modules = [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -19,25 +19,28 @@ let SliderDirective = class SliderDirective {
|
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Retrieves the current value of the slider.
|
|
22
|
+
*
|
|
23
|
+
* @returns {number}
|
|
22
24
|
*/
|
|
23
25
|
get value() {
|
|
24
26
|
return Number(this.element.nativeElement.value);
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Retrieves the maximum value of the slider. Defaults to 100 if not specified.
|
|
30
|
+
*
|
|
31
|
+
* @returns {number}
|
|
28
32
|
*/
|
|
29
33
|
get max() {
|
|
30
34
|
return Number(this.element.nativeElement.max) || 100;
|
|
31
35
|
}
|
|
32
36
|
/**
|
|
33
37
|
* Retrieves the minimum value of the slider. Defaults to the native minimum if not specified.
|
|
38
|
+
*
|
|
39
|
+
* @returns {number}
|
|
34
40
|
*/
|
|
35
41
|
get min() {
|
|
36
42
|
return Number(this.element.nativeElement.min);
|
|
37
43
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Computes the percentage of the slider.
|
|
40
|
-
*/
|
|
41
44
|
get valuePercentage() {
|
|
42
45
|
return (100 * (this.value - this.min)) / (this.max - this.min) || 0;
|
|
43
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-slider.mjs","sources":["../../../../libs/angular/components/slider/src/lib/slider.directive.ts","../../../../libs/angular/components/slider/src/odx-angular-components-slider.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding } from '@angular/core';\nimport { WithDisabledState } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * SliderDirective enhances an HTML input of type range by integrating custom slider functionality.\n * It incorporates disabled state handling and custom style binding for visual feedback based on the slider's value.\n * Has host directives for disabled state handling.\n *\n * @see {WithDisabledState}\n */\n@CSSComponent('slider')\n@Directive({\n standalone: true,\n selector: 'input[type=range][odxSlider]',\n hostDirectives: [WithDisabledState],\n})\nexport class SliderDirective {\n public readonly element: ElementRef<HTMLInputElement> = injectElement();\n\n /**\n * Retrieves the current value of the slider.\n */\n public get value(): number {\n return Number(this.element.nativeElement.value);\n }\n\n /**\n * Retrieves the maximum value of the slider. Defaults to 100 if not specified.\n */\n public get max(): number {\n return Number(this.element.nativeElement.max) || 100;\n }\n\n /**\n * Retrieves the minimum value of the slider. Defaults to the native minimum if not specified.\n */\n public get min(): number {\n return Number(this.element.nativeElement.min);\n }\n\n
|
|
1
|
+
{"version":3,"file":"odx-angular-components-slider.mjs","sources":["../../../../libs/angular/components/slider/src/lib/slider.directive.ts","../../../../libs/angular/components/slider/src/odx-angular-components-slider.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding } from '@angular/core';\nimport { WithDisabledState } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * SliderDirective enhances an HTML input of type range by integrating custom slider functionality.\n * It incorporates disabled state handling and custom style binding for visual feedback based on the slider's value.\n * Has host directives for disabled state handling.\n *\n * @see {WithDisabledState}\n */\n@CSSComponent('slider')\n@Directive({\n standalone: true,\n selector: 'input[type=range][odxSlider]',\n hostDirectives: [WithDisabledState],\n})\nexport class SliderDirective {\n public readonly element: ElementRef<HTMLInputElement> = injectElement();\n\n /**\n * Retrieves the current value of the slider.\n *\n * @returns {number}\n */\n public get value(): number {\n return Number(this.element.nativeElement.value);\n }\n\n /**\n * Retrieves the maximum value of the slider. Defaults to 100 if not specified.\n *\n * @returns {number}\n */\n public get max(): number {\n return Number(this.element.nativeElement.max) || 100;\n }\n\n /**\n * Retrieves the minimum value of the slider. Defaults to the native minimum if not specified.\n *\n * @returns {number}\n */\n public get min(): number {\n return Number(this.element.nativeElement.min);\n }\n\n @HostBinding(`style.--odx-slider-filled.%`)\n protected get valuePercentage(): number {\n return (100 * (this.value - this.min)) / (this.max - this.min) || 0;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAKA;;;;;;AAMG;AAOU,IAAA,eAAe,GAArB,MAAM,eAAe,CAAA;AAArB,IAAA,WAAA,GAAA;QACW,IAAO,CAAA,OAAA,GAAiC,aAAa,EAAE,CAAC;AAiCzE,KAAA;AA/BC;;;;AAIG;AACH,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACjD;AAED;;;;AAIG;AACH,IAAA,IAAW,GAAG,GAAA;AACZ,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;KACtD;AAED;;;;AAIG;AACH,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KAC/C;AAED,IAAA,IACc,eAAe,GAAA;QAC3B,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACrE;+GAjCU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;AAAf,eAAe,GAAA,UAAA,CAAA;IAN3B,YAAY,CAAC,QAAQ,CAAC;AAMV,CAAA,EAAA,eAAe,CAkC3B,CAAA;4FAlCY,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,8BAA8B;oBACxC,cAAc,EAAE,CAAC,iBAAiB,CAAC;AACpC,iBAAA,CAAA;8BAgCe,eAAe,EAAA,CAAA;sBAD5B,WAAW;uBAAC,CAA6B,2BAAA,CAAA,CAAA;;;AChD5C;;AAEG;;;;"}
|
|
@@ -25,14 +25,23 @@ let SpinboxComponent = class SpinboxComponent extends CustomFormControl {
|
|
|
25
25
|
this.element = injectElement();
|
|
26
26
|
/**
|
|
27
27
|
* The maximum allowable value for the spinbox.
|
|
28
|
+
*
|
|
29
|
+
* @type {number}
|
|
30
|
+
* @default Infinity
|
|
28
31
|
*/
|
|
29
32
|
this.max = Infinity;
|
|
30
33
|
/**
|
|
31
34
|
* The minimum allowable value for the spinbox.
|
|
35
|
+
*
|
|
36
|
+
* @type {number}
|
|
37
|
+
* @default -Infinity
|
|
32
38
|
*/
|
|
33
39
|
this.min = -Infinity;
|
|
34
40
|
/**
|
|
35
41
|
* The value increment or decrement step for the spinbox.
|
|
42
|
+
*
|
|
43
|
+
* @type {number}
|
|
44
|
+
* @default 1
|
|
36
45
|
*/
|
|
37
46
|
this.step = 1;
|
|
38
47
|
detectControllerChanges(this).subscribe();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-spinbox.mjs","sources":["../../../../libs/angular/components/spinbox/src/lib/spinbox.component.ts","../../../../libs/angular/components/spinbox/src/lib/spinbox.component.html","../../../../libs/angular/components/spinbox/src/odx-angular-components-spinbox.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, numberAttribute, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { detectControllerChanges, DisabledController, ReadonlyController } from '@odx/angular';\nimport { ControlDirective, CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { filter, NEVER, Observable, startWith, switchMap, tap, timer } from 'rxjs';\n\n/**\n * SpinboxComponent is a custom form control for numeric input which allows users to increment and decrement\n * the value using corresponding buttons. It supports keyboard navigation and automatic boundary checks for the values.\n * Extends CustomFormControl to provide additional behavior.\n *\n * @see {CustomFormControl}\n */\n@CSSComponent('spinbox')\n@Component({\n standalone: true,\n selector: 'odx-spinbox',\n templateUrl: 'spinbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ControlDirective],\n providers: [DisabledController.connect(), ReadonlyController.connect()],\n})\nexport class SpinboxComponent extends CustomFormControl<number> implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n private get inputElement(): HTMLInputElement {\n return this.control?.element.nativeElement as HTMLInputElement;\n }\n\n @ViewChild('decrementButton')\n protected decrementButton!: ElementRef<HTMLButtonElement>;\n\n @ViewChild('incrementButton')\n protected incrementButton!: ElementRef<HTMLButtonElement>;\n\n public readonly element = injectElement();\n\n /**\n * The maximum allowable value for the spinbox.\n */\n @Input({ transform: numberAttribute })\n public max = Infinity;\n\n /**\n * The minimum allowable value for the spinbox.\n */\n @Input({ transform: numberAttribute })\n public min = -Infinity;\n\n /**\n * The value increment or decrement step for the spinbox.\n */\n @Input({ transform: numberAttribute })\n public step = 1;\n\n constructor() {\n super(0);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.registerPressHold(this.decrementButton).subscribe(() => {\n this.inputElement?.stepDown();\n this.onInputChange();\n });\n this.registerPressHold(this.incrementButton).subscribe(() => {\n this.inputElement?.stepUp();\n this.onInputChange();\n });\n }\n\n protected maxSteps({ code }: KeyboardEvent) {\n if (code === 'End' && this.min !== -Infinity) {\n this.updateValue(this.min);\n } else if (code === 'Home' && this.max !== Infinity) {\n this.updateValue(this.max);\n }\n }\n\n protected checkValue(): void {\n const value = numberAttribute(this.inputElement.value);\n this.updateValue(value < this.min ? this.min : value > this.max ? this.max : value);\n }\n\n protected onInputChange(): void {\n this.updateValue(numberAttribute(this.inputElement.value));\n }\n\n private registerPressHold(target: ElementRef<HTMLElement>): Observable<unknown> {\n return fromEvents(target.nativeElement, 'keydown', 'mousedown', 'mouseup', 'keyup').pipe(\n filter((event) => event?.type !== 'keydown' || ['Space', 'Enter'].includes((event as KeyboardEvent).code)),\n tap((event) => {\n event.preventDefault();\n event.stopPropagation();\n }),\n switchMap(({ type }) => (['mouseup', 'keyup'].includes(type) ? NEVER : timer(500, 100).pipe(startWith(undefined)))),\n this.takeUntilDestroyed(),\n );\n }\n}\n","<button\n [disabled]=\"isDisabled || isReadonly\"\n type=\"button\"\n class=\"odx-spinbox__action odx-icon\"\n data-icon-set=\"core\"\n data-icon-name=\"minus\"\n #decrementButton\n></button>\n<input\n odxControl\n class=\"odx-spinbox__input\"\n [disabled]=\"isDisabled\"\n [readonly]=\"isReadonly\"\n type=\"number\"\n [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n (keydown)=\"maxSteps($event)\"\n (change)=\"onInputChange()\"\n (blur)=\"checkValue()\"\n/>\n<button\n [disabled]=\"isDisabled || isReadonly\"\n type=\"button\"\n data-icon-set=\"core\"\n data-icon-name=\"plus\"\n class=\"odx-spinbox__action odx-icon\"\n #incrementButton\n></button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAQA;;;;;;AAMG;AAWI,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,iBAAyB,CAAA;AAG7D,IAAA,IAAY,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,aAAiC,CAAC;KAChE;
|
|
1
|
+
{"version":3,"file":"odx-angular-components-spinbox.mjs","sources":["../../../../libs/angular/components/spinbox/src/lib/spinbox.component.ts","../../../../libs/angular/components/spinbox/src/lib/spinbox.component.html","../../../../libs/angular/components/spinbox/src/odx-angular-components-spinbox.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, numberAttribute, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { detectControllerChanges, DisabledController, ReadonlyController } from '@odx/angular';\nimport { ControlDirective, CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { filter, NEVER, Observable, startWith, switchMap, tap, timer } from 'rxjs';\n\n/**\n * SpinboxComponent is a custom form control for numeric input which allows users to increment and decrement\n * the value using corresponding buttons. It supports keyboard navigation and automatic boundary checks for the values.\n * Extends CustomFormControl to provide additional behavior.\n *\n * @see {CustomFormControl}\n */\n@CSSComponent('spinbox')\n@Component({\n standalone: true,\n selector: 'odx-spinbox',\n templateUrl: 'spinbox.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [ControlDirective],\n providers: [DisabledController.connect(), ReadonlyController.connect()],\n})\nexport class SpinboxComponent extends CustomFormControl<number> implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n private get inputElement(): HTMLInputElement {\n return this.control?.element.nativeElement as HTMLInputElement;\n }\n\n @ViewChild('decrementButton')\n protected decrementButton!: ElementRef<HTMLButtonElement>;\n\n @ViewChild('incrementButton')\n protected incrementButton!: ElementRef<HTMLButtonElement>;\n\n public readonly element = injectElement();\n\n /**\n * The maximum allowable value for the spinbox.\n *\n * @type {number}\n * @default Infinity\n */\n @Input({ transform: numberAttribute })\n public max = Infinity;\n\n /**\n * The minimum allowable value for the spinbox.\n *\n * @type {number}\n * @default -Infinity\n */\n @Input({ transform: numberAttribute })\n public min = -Infinity;\n\n /**\n * The value increment or decrement step for the spinbox.\n *\n * @type {number}\n * @default 1\n */\n @Input({ transform: numberAttribute })\n public step = 1;\n\n constructor() {\n super(0);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.registerPressHold(this.decrementButton).subscribe(() => {\n this.inputElement?.stepDown();\n this.onInputChange();\n });\n this.registerPressHold(this.incrementButton).subscribe(() => {\n this.inputElement?.stepUp();\n this.onInputChange();\n });\n }\n\n protected maxSteps({ code }: KeyboardEvent) {\n if (code === 'End' && this.min !== -Infinity) {\n this.updateValue(this.min);\n } else if (code === 'Home' && this.max !== Infinity) {\n this.updateValue(this.max);\n }\n }\n\n protected checkValue(): void {\n const value = numberAttribute(this.inputElement.value);\n this.updateValue(value < this.min ? this.min : value > this.max ? this.max : value);\n }\n\n protected onInputChange(): void {\n this.updateValue(numberAttribute(this.inputElement.value));\n }\n\n private registerPressHold(target: ElementRef<HTMLElement>): Observable<unknown> {\n return fromEvents(target.nativeElement, 'keydown', 'mousedown', 'mouseup', 'keyup').pipe(\n filter((event) => event?.type !== 'keydown' || ['Space', 'Enter'].includes((event as KeyboardEvent).code)),\n tap((event) => {\n event.preventDefault();\n event.stopPropagation();\n }),\n switchMap(({ type }) => (['mouseup', 'keyup'].includes(type) ? NEVER : timer(500, 100).pipe(startWith(undefined)))),\n this.takeUntilDestroyed(),\n );\n }\n}\n","<button\n [disabled]=\"isDisabled || isReadonly\"\n type=\"button\"\n class=\"odx-spinbox__action odx-icon\"\n data-icon-set=\"core\"\n data-icon-name=\"minus\"\n #decrementButton\n></button>\n<input\n odxControl\n class=\"odx-spinbox__input\"\n [disabled]=\"isDisabled\"\n [readonly]=\"isReadonly\"\n type=\"number\"\n [value]=\"value\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n (keydown)=\"maxSteps($event)\"\n (change)=\"onInputChange()\"\n (blur)=\"checkValue()\"\n/>\n<button\n [disabled]=\"isDisabled || isReadonly\"\n type=\"button\"\n data-icon-set=\"core\"\n data-icon-name=\"plus\"\n class=\"odx-spinbox__action odx-icon\"\n #incrementButton\n></button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -37,12 +37,15 @@ let TabBarItemComponent = class TabBarItemComponent {
|
|
|
37
37
|
/**
|
|
38
38
|
* Indicates if the tab can be closed. This controls the visibility of the close button
|
|
39
39
|
* and enables the emission of the `tabClose` event when the tab is closed.
|
|
40
|
+
*
|
|
40
41
|
* @type {boolean}
|
|
42
|
+
* @default false
|
|
41
43
|
*/
|
|
42
44
|
this.closable = false;
|
|
43
45
|
/**
|
|
44
46
|
* Event emitter that fires when the tab is closed. It emits the instance of the tab item component.
|
|
45
|
-
*
|
|
47
|
+
*
|
|
48
|
+
* @emits {TabBarItemComponent}
|
|
46
49
|
*/
|
|
47
50
|
this.tabClose = new EventEmitter();
|
|
48
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable',\n role: 'tab',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n * @type {boolean}\n */\n @Input({ transform: booleanAttribute })\n public closable = false;\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n * @type {EventEmitter<TabBarItemComponent>}\n */\n @Output()\n public tabClose = new EventEmitter<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<ng-content select=\"odx-icon\"></ng-content>\n<ng-content></ng-content>\n<odx-icon name=\"close\" iconSet=\"core\" size=\"small\" *ngIf=\"closable\" (click)=\"handleClose($event)\"></odx-icon>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromElementResize$, fromQueryList } from '@odx/angular/rxjs';\nimport { applyStyles, cssTranslate, deferFn, injectElement, px, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n },\n})\nexport class TabBarComponent implements AfterViewInit {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly selectedIndex$$ = new BehaviorSubject(0);\n\n protected activeItem: TabBarItemComponent | null = null;\n\n protected keyManager?: ActiveDescendantKeyManager<TabBarItemComponent>;\n\n @ViewChild('tabBarPanel')\n protected tabBarPanelElement!: ElementRef<HTMLElement>;\n\n @ViewChildren('tabAction')\n protected tabActionElements!: QueryList<ElementRef<HTMLElement>>;\n\n @ContentChildren(TabBarItemComponent)\n protected tabs!: QueryList<TabBarItemComponent>;\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the tab bar has overflowed to the left.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowLeft = false;\n\n /**\n * Indicates whether the tab bar has overflowed to the right.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowRight = false;\n\n /**\n * Gets or sets the index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n @Input({ transform: numberAttribute })\n public set selectedIndex(value: number) {\n this.selectedIndex$$.next(value);\n }\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n @Output()\n public selectedTabChanged = new EventEmitter<TabChangeEvent>();\n\n public ngAfterViewInit(): void {\n this.keyManager = new ActiveDescendantKeyManager(this.tabs).withWrap().withHomeAndEnd().withHorizontalOrientation('ltr').withVerticalOrientation(false);\n const updatePanelPosition$ = merge(this.selectedTabChanged, fromQueryList(this.tabs), fromElementResize$(this.element.nativeElement)).pipe(\n debounceTime(0),\n tap(() => this.updatePanelPosition()),\n );\n const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(\n tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()),\n );\n const activeItemChange$ = merge(\n this.keyManager.change.pipe(tap(() => this.activeItemChange())),\n this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))),\n );\n merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();\n this.tabs.changes.pipe(this.takeUntilDestroyed()).subscribe(() => this.selectedIndex$$.next(this.selectedIndex$$.value));\n }\n\n /**\n * Activates the specified tab item.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate. If not provided or null, the active item will be cleared.\n *\n * @example\n * ```ts\n * // Activate the first tab item\n * tabBar.activateItem(tabItems[0]);\n *\n * // Clear the active item\n * tabBar.activateItem(null);\n * ```\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.activeItem) return;\n const selectedIndex = item ? this.tabs.toArray().indexOf(item) : -1;\n this.keyManager?.setActiveItem(selectedIndex);\n }\n\n /**\n * Removes the specified item from the tab bar.\n * If the removed item is the active item, it sets the previous item as the new active item.\n *\n * @param {TabBarItemComponent} item - The item to be removed from the tab bar.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.activeItem !== item) return;\n deferFn(() => this.keyManager?.setPreviousItemActive());\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n private updatePanelPosition(): void {\n const activeElement = this.activeItem?.element.nativeElement;\n if (!activeElement) return;\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n const maxPanelPositionX = Math.floor(tabBarRect.width - panelRect.width);\n const panelPositionX = tabBarRect.width / 2 - activeElement.offsetLeft - activeElement.offsetWidth / 2;\n const positionX = Math.min(0, Math.max(panelPositionX, maxPanelPositionX));\n applyStyles(this.tabBarPanelElement.nativeElement, {\n transform: cssTranslate(px(positionX), 0),\n });\n this.updateActionVisbility();\n }\n\n private updateActionVisbility(): void {\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n this.overflowLeft = panelRect.left < tabBarRect.left;\n this.overflowRight = panelRect.right > tabBarRect.right;\n this.changeDetector.detectChanges();\n }\n\n private activeItemChange(): void {\n const { activeItemIndex, activeItem } = this.keyManager ?? {};\n this.activeItem = activeItem ?? null;\n this.selectedTabChanged.emit({ selectedIndex: activeItemIndex ?? -1, selectedTab: this.keyManager?.activeItem ?? null });\n }\n}\n","<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--prev\"\n [class.is-active]=\"overflowLeft\"\n (click)=\"keyManager?.setPreviousItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\"></odx-icon>\n</button>\n<div class=\"odx-tab-bar__inner\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content></ng-content>\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--next\"\n [class.is-active]=\"overflowRight\"\n (click)=\"keyManager?.setNextItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\"></odx-icon>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable',\n role: 'tab',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public closable = false;\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n *\n * @emits {TabBarItemComponent}\n */\n @Output()\n public tabClose = new EventEmitter<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<ng-content select=\"odx-icon\"></ng-content>\n<ng-content></ng-content>\n<odx-icon name=\"close\" iconSet=\"core\" size=\"small\" *ngIf=\"closable\" (click)=\"handleClose($event)\"></odx-icon>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromElementResize$, fromQueryList } from '@odx/angular/rxjs';\nimport { applyStyles, cssTranslate, deferFn, injectElement, px, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n },\n})\nexport class TabBarComponent implements AfterViewInit {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly selectedIndex$$ = new BehaviorSubject(0);\n\n protected activeItem: TabBarItemComponent | null = null;\n\n protected keyManager?: ActiveDescendantKeyManager<TabBarItemComponent>;\n\n @ViewChild('tabBarPanel')\n protected tabBarPanelElement!: ElementRef<HTMLElement>;\n\n @ViewChildren('tabAction')\n protected tabActionElements!: QueryList<ElementRef<HTMLElement>>;\n\n @ContentChildren(TabBarItemComponent)\n protected tabs!: QueryList<TabBarItemComponent>;\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the tab bar has overflowed to the left.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowLeft = false;\n\n /**\n * Indicates whether the tab bar has overflowed to the right.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowRight = false;\n\n /**\n * Gets or sets the index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n @Input({ transform: numberAttribute })\n public set selectedIndex(value: number) {\n this.selectedIndex$$.next(value);\n }\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n @Output()\n public selectedTabChanged = new EventEmitter<TabChangeEvent>();\n\n public ngAfterViewInit(): void {\n this.keyManager = new ActiveDescendantKeyManager(this.tabs).withWrap().withHomeAndEnd().withHorizontalOrientation('ltr').withVerticalOrientation(false);\n const updatePanelPosition$ = merge(this.selectedTabChanged, fromQueryList(this.tabs), fromElementResize$(this.element.nativeElement)).pipe(\n debounceTime(0),\n tap(() => this.updatePanelPosition()),\n );\n const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(\n tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()),\n );\n const activeItemChange$ = merge(\n this.keyManager.change.pipe(tap(() => this.activeItemChange())),\n this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))),\n );\n merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();\n this.tabs.changes.pipe(this.takeUntilDestroyed()).subscribe(() => this.selectedIndex$$.next(this.selectedIndex$$.value));\n }\n\n /**\n * Activates the specified tab item.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate. If not provided or null, the active item will be cleared.\n *\n * @example\n * ```ts\n * // Activate the first tab item\n * tabBar.activateItem(tabItems[0]);\n *\n * // Clear the active item\n * tabBar.activateItem(null);\n * ```\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.activeItem) return;\n const selectedIndex = item ? this.tabs.toArray().indexOf(item) : -1;\n this.keyManager?.setActiveItem(selectedIndex);\n }\n\n /**\n * Removes the specified item from the tab bar.\n * If the removed item is the active item, it sets the previous item as the new active item.\n *\n * @param {TabBarItemComponent} item - The item to be removed from the tab bar.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.activeItem !== item) return;\n deferFn(() => this.keyManager?.setPreviousItemActive());\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n private updatePanelPosition(): void {\n const activeElement = this.activeItem?.element.nativeElement;\n if (!activeElement) return;\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n const maxPanelPositionX = Math.floor(tabBarRect.width - panelRect.width);\n const panelPositionX = tabBarRect.width / 2 - activeElement.offsetLeft - activeElement.offsetWidth / 2;\n const positionX = Math.min(0, Math.max(panelPositionX, maxPanelPositionX));\n applyStyles(this.tabBarPanelElement.nativeElement, {\n transform: cssTranslate(px(positionX), 0),\n });\n this.updateActionVisbility();\n }\n\n private updateActionVisbility(): void {\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n this.overflowLeft = panelRect.left < tabBarRect.left;\n this.overflowRight = panelRect.right > tabBarRect.right;\n this.changeDetector.detectChanges();\n }\n\n private activeItemChange(): void {\n const { activeItemIndex, activeItem } = this.keyManager ?? {};\n this.activeItem = activeItem ?? null;\n this.selectedTabChanged.emit({ selectedIndex: activeItemIndex ?? -1, selectedTab: this.keyManager?.activeItem ?? null });\n }\n}\n","<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--prev\"\n [class.is-active]=\"overflowLeft\"\n (click)=\"keyManager?.setPreviousItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\"></odx-icon>\n</button>\n<div class=\"odx-tab-bar__inner\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content></ng-content>\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--next\"\n [class.is-active]=\"overflowRight\"\n (click)=\"keyManager?.setNextItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\"></odx-icon>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -27,12 +27,15 @@ class CheckCellComponent {
|
|
|
27
27
|
this.element = injectElement();
|
|
28
28
|
/**
|
|
29
29
|
* Indicates whether the checkbox within the table cell is checked.
|
|
30
|
+
*
|
|
30
31
|
* @type {boolean}
|
|
32
|
+
* @default false
|
|
31
33
|
*/
|
|
32
34
|
this.checked = false;
|
|
33
35
|
/**
|
|
34
36
|
* Event emitter that triggers when the checked state changes. It emits the new state of the checkbox.
|
|
35
|
-
*
|
|
37
|
+
*
|
|
38
|
+
* @emits {boolean}
|
|
36
39
|
*/
|
|
37
40
|
this.checkedChange = new EventEmitter();
|
|
38
41
|
}
|
|
@@ -77,17 +80,23 @@ class HeaderTitleComponent {
|
|
|
77
80
|
this.sortStatus = this.getSortStatus;
|
|
78
81
|
/**
|
|
79
82
|
* FormGroup to manage the checkbox state within the header.
|
|
83
|
+
*
|
|
84
|
+
* @type {FormGroup}
|
|
80
85
|
*/
|
|
81
86
|
this.checkForm = new FormGroup({ check: new FormControl(false) });
|
|
82
87
|
}
|
|
83
88
|
/**
|
|
84
89
|
* Computes and returns the current sort status of the column associated with this header.
|
|
90
|
+
*
|
|
91
|
+
* @returns {SortStatus}
|
|
85
92
|
*/
|
|
86
93
|
get getSortStatus() {
|
|
87
94
|
return { column: this.item?.name, sortVariant: TableSortVariant.UNSORTED };
|
|
88
95
|
}
|
|
89
96
|
/**
|
|
90
97
|
* Returns the icon or indicator for the current sorting status (ascending, descending, unsorted).
|
|
98
|
+
*
|
|
99
|
+
* @returns {TableSortVariant}
|
|
91
100
|
*/
|
|
92
101
|
get sortIcon() {
|
|
93
102
|
return this.sortStatus.sortVariant;
|
|
@@ -120,6 +129,8 @@ class HeaderTitleComponent {
|
|
|
120
129
|
}
|
|
121
130
|
/**
|
|
122
131
|
* Returns the number of selected items in the column, used to determine checkbox state.
|
|
132
|
+
*
|
|
133
|
+
* @returns {number}
|
|
123
134
|
*/
|
|
124
135
|
get selected() {
|
|
125
136
|
return this.table.data.filter((d) => d[this.item.name]).length;
|
|
@@ -132,6 +143,8 @@ class HeaderTitleComponent {
|
|
|
132
143
|
}
|
|
133
144
|
/**
|
|
134
145
|
* Determines whether the checkbox should be marked as checked.
|
|
146
|
+
*
|
|
147
|
+
* @returns {boolean}
|
|
135
148
|
*/
|
|
136
149
|
get checked() {
|
|
137
150
|
const column = this.table.headerData.find((h) => h.check)?.name;
|
|
@@ -228,6 +241,8 @@ var TableComponent_1;
|
|
|
228
241
|
*
|
|
229
242
|
* This component is highly modular, integrating with other components such as `HeaderTitleComponent` for header
|
|
230
243
|
* management, and using Angular forms for dynamic data filtering.
|
|
244
|
+
*
|
|
245
|
+
* @template T - The type of data that the table displays.
|
|
231
246
|
*/
|
|
232
247
|
let TableComponent = class TableComponent {
|
|
233
248
|
constructor() {
|
|
@@ -235,10 +250,16 @@ let TableComponent = class TableComponent {
|
|
|
235
250
|
this.element = injectElement();
|
|
236
251
|
/**
|
|
237
252
|
* Data array of type T that the table displays.
|
|
253
|
+
*
|
|
254
|
+
* @type {T[]}
|
|
255
|
+
* @default []
|
|
238
256
|
*/
|
|
239
257
|
this.data = [];
|
|
240
258
|
/**
|
|
241
259
|
* Configuration for table header data which controls sorting, filtering, and additional metadata.
|
|
260
|
+
*
|
|
261
|
+
* @type {TableHeaderCell[]}
|
|
262
|
+
* @default []
|
|
242
263
|
*/
|
|
243
264
|
this.headerData = [];
|
|
244
265
|
/**
|
|
@@ -247,14 +268,20 @@ let TableComponent = class TableComponent {
|
|
|
247
268
|
this.form = new FormGroup({});
|
|
248
269
|
/**
|
|
249
270
|
* Event emitter for when a column's sorting status changes.
|
|
271
|
+
*
|
|
272
|
+
* @emits {SortStatus}
|
|
250
273
|
*/
|
|
251
274
|
this.sorted = new EventEmitter();
|
|
252
275
|
/**
|
|
253
276
|
* Event emitter for when the table's filtering conditions change.
|
|
277
|
+
*
|
|
278
|
+
* @emits {{ [key: string]: string }}
|
|
254
279
|
*/
|
|
255
280
|
this.filtered = new EventEmitter();
|
|
256
281
|
/**
|
|
257
282
|
* Event emitter for when a checkbox column's checked state changes.
|
|
283
|
+
*
|
|
284
|
+
* @emits {{ column: string; check: boolean }}
|
|
258
285
|
*/
|
|
259
286
|
this.checked = new EventEmitter();
|
|
260
287
|
}
|