@odx/angular 6.0.0 → 6.1.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 +22 -0
- package/animations/lib/expand.d.ts +44 -0
- package/animations/lib/fade.d.ts +70 -0
- package/animations/lib/slide.d.ts +21 -0
- package/animations/lib/wait-for-child-animations.d.ts +38 -0
- package/breakpoints/lib/breakpoints.config.d.ts +38 -0
- package/breakpoints/lib/breakpoints.service.d.ts +43 -0
- package/breakpoints/lib/directives/match-breakpoints.directive.d.ts +36 -0
- package/breakpoints/lib/helpers/configure-breakpoint.d.ts +19 -0
- package/cdk/a11y/lib/directives/interactive.directive.d.ts +32 -0
- package/cdk/a11y/lib/directives/list-focus-manager-option.directive.d.ts +22 -0
- package/cdk/a11y/lib/directives/list-focus-manager.directive.d.ts +17 -0
- package/cdk/active-indicator/lib/active-indicator.directive.d.ts +63 -0
- package/cdk/autocomplete-control/lib/autocomplete-control.d.ts +53 -0
- package/cdk/checkbox-control/lib/checkbox-control.directive.d.ts +3 -0
- package/cdk/connected-overlay/lib/connected-overlay.service.d.ts +44 -0
- package/cdk/connected-overlay/lib/helpers/compute-overlay-position.d.ts +10 -0
- package/cdk/connected-overlay/lib/models/connected-overlay-ref.d.ts +49 -0
- package/cdk/custom-form-control/lib/custom-form-control.d.ts +108 -0
- package/cdk/custom-form-control/lib/input-control.directive.d.ts +75 -0
- package/cdk/dynamic-view/lib/dynamic-view.directive.d.ts +25 -0
- package/cdk/dynamic-view/lib/dynamic-view.service.d.ts +30 -0
- package/cdk/dynamic-view/lib/helpers/create-projectable-nodes.d.ts +22 -0
- package/cdk/dynamic-view/lib/helpers/is-dynamic-text-content.d.ts +22 -0
- package/cdk/dynamic-view/lib/helpers/is-dynamic-view.d.ts +22 -0
- package/cdk/dynamic-view/lib/models/dynamic-component-ref.d.ts +39 -0
- package/cdk/dynamic-view/lib/models/dynamic-template-ref.d.ts +36 -0
- package/cdk/dynamic-view/lib/tokens/dynamic-view-context.d.ts +4 -0
- package/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.d.ts +10 -0
- package/cdk/event-plugins/lib/event-plugins.config.d.ts +35 -0
- package/cdk/event-plugins/lib/models/event-plugin.d.ts +57 -0
- package/cdk/event-plugins/lib/plugins/debounce-event-plugin.d.ts +32 -0
- package/cdk/event-plugins/lib/plugins/defer-event-plugin.d.ts +24 -0
- package/cdk/expandable/lib/directives/expandable-container.directive.d.ts +41 -0
- package/cdk/expandable/lib/directives/expandable-item.directive.d.ts +47 -0
- package/cdk/option-control/lib/option-control.d.ts +47 -0
- package/cdk/radio-group-control/lib/radio-control.directive.d.ts +8 -0
- package/cdk/radio-group-control/lib/radio-group-control.directive.d.ts +11 -0
- package/components/accordion/lib/accordion.component.d.ts +8 -0
- package/components/accordion/lib/components/accordion-item/accordion-item.component.d.ts +37 -1
- package/components/accordion/lib/directives/accordion-item-title.d.ts +3 -0
- package/components/action-group/action-group.component.d.ts +6 -0
- package/components/area-header/area-header.component.d.ts +8 -0
- package/components/area-header/directives/area-header-content.directive.d.ts +3 -0
- package/components/area-header/directives/area-header-subtitle.directive.d.ts +3 -0
- package/components/autocomplete/lib/autocomplete.component.d.ts +18 -0
- package/components/avatar/lib/avatar.component.d.ts +8 -0
- package/components/badge/lib/badge.component.d.ts +10 -0
- package/components/badge/lib/badge.directive.d.ts +15 -0
- package/components/bar/lib/bar.component.d.ts +7 -0
- package/components/bar/lib/directives/bar-button.directive.d.ts +3 -0
- package/components/bar/lib/directives/bar-label.directive.d.ts +3 -0
- package/components/breadcrumbs/lib/breadcrumbs.component.d.ts +3 -0
- package/components/button/lib/button.component.d.ts +10 -0
- package/components/button-group/lib/button-group.component.d.ts +15 -0
- package/components/calendar/lib/calendar.component.d.ts +48 -0
- package/components/calendar/lib/calendar.config.d.ts +17 -0
- package/components/calendar/lib/calendar.service.d.ts +48 -0
- package/components/calendar/lib/components/calendar-header/calendar-header.component.d.ts +24 -0
- package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +6 -0
- package/components/calendar/lib/components/calendar-year/calendar-year.component.d.ts +6 -0
- package/components/calendar/lib/components/calendar-years/calendar-years.component.d.ts +6 -0
- package/components/calendar/lib/daterange.service.d.ts +16 -0
- package/components/calendar/lib/directives/calendar-cell.directive.d.ts +37 -0
- package/components/calendar/lib/directives/calendar-view.directive.d.ts +41 -0
- package/components/calendar/lib/pipes/date-label.pipe.d.ts +5 -0
- package/components/calendar/lib/services/calendar-month.service.d.ts +1 -0
- package/components/calendar/lib/services/calendar-year.service.d.ts +1 -0
- package/components/calendar/lib/services/calendar-years.service.d.ts +1 -0
- package/components/calendar/lib/utils/check-cell-in-range.d.ts +1 -0
- package/components/calendar/lib/utils/check-identical-date.d.ts +1 -0
- package/components/calendar/lib/utils/get-A11y-label.d.ts +1 -0
- package/components/calendar/lib/utils/is-date-disabled.d.ts +1 -0
- package/components/calendar/lib/utils/parse-date.d.ts +1 -0
- package/components/calendar/lib/utils/validate-daterange.d.ts +1 -0
- package/components/calendar/lib/utils/validate-max-date.d.ts +1 -0
- package/components/calendar/lib/utils/validate-min-date.d.ts +1 -0
- package/components/calendar/lib/utils/validate-next-date-set.d.ts +1 -0
- package/components/calendar/lib/utils/validate-previous-date-set.d.ts +1 -0
- package/components/checkbox/lib/checkbox.component.d.ts +32 -0
- package/components/checkbox/lib/checkbox.validator.d.ts +23 -0
- package/components/chip/lib/components/chip/chip.component.d.ts +14 -0
- package/components/chip/lib/components/chip-list/chip-list.component.d.ts +3 -0
- package/components/chip/lib/components/chip-list-row/chip-list-row.component.d.ts +3 -0
- package/components/circular-progress/lib/circular-progress.component.d.ts +20 -0
- package/components/content-box/lib/content-box.component.d.ts +3 -0
- package/components/content-box/lib/directives/content-box-footer.directive.d.ts +3 -0
- package/components/content-box/lib/directives/content-box-header.directive.d.ts +3 -0
- package/components/datepicker/lib/datepicker.component.d.ts +47 -0
- package/components/datepicker/lib/datepicker.config.d.ts +19 -0
- package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +30 -0
- package/components/datepicker/lib/utils/get-datepicker-input-pattern.d.ts +2 -0
- package/components/datepicker/lib/utils/get-datepicker-input-value-as-date.d.ts +1 -0
- package/components/daterangepicker/lib/daterangepicker.component.d.ts +89 -0
- package/components/daterangepicker/lib/daterangepicker.config.d.ts +19 -0
- package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +30 -0
- package/components/daterangepicker/lib/range.validator.d.ts +15 -0
- package/components/daterangepicker/lib/required.validator.d.ts +6 -0
- package/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.d.ts +2 -0
- package/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.d.ts +1 -0
- package/components/dropdown/lib/dropdown.component.d.ts +16 -0
- package/components/dropdown/lib/dropdown.directive.d.ts +67 -0
- package/components/dropdown/lib/helpers/close-current-dropdown.d.ts +5 -0
- package/components/error-page/lib/error-page.component.d.ts +7 -0
- package/components/error-page/lib/error-page.config.d.ts +18 -0
- package/components/footer/lib/footer.component.d.ts +9 -6
- package/components/footer/lib/footer.config.d.ts +2 -0
- package/components/form-field/lib/components/form-field-info/form-field-info.component.d.ts +13 -0
- package/components/form-field/lib/components/form-group/form-group.component.d.ts +16 -0
- package/components/form-field/lib/directives/form-field-control.directive.d.ts +5 -0
- package/components/form-field/lib/directives/form-field-error.directive.d.ts +6 -0
- package/components/form-field/lib/directives/form-field-hint.directive.d.ts +3 -0
- package/components/form-field/lib/directives/form-field-label.directive.d.ts +3 -0
- package/components/form-field/lib/directives/form.directive.d.ts +13 -0
- package/components/form-field/lib/form-field.component.d.ts +20 -0
- package/components/form-field/lib/form-field.service.d.ts +42 -0
- package/components/form-field/lib/services/form-field-error.service.d.ts +24 -0
- package/components/header/lib/directives/header-avatar.directive.d.ts +4 -0
- package/components/header/lib/directives/header-title.directive.d.ts +3 -0
- package/components/header/lib/header.component.d.ts +3 -0
- package/components/header-navigation/lib/directives/header-navigation-link.directive.d.ts +3 -0
- package/components/header-navigation/lib/header-navigation.component.d.ts +6 -0
- package/components/icon/lib/helpers/unpack-icon-identifier.d.ts +14 -0
- package/components/icon/lib/icon.component.d.ts +24 -0
- package/components/icon/lib/icon.config.d.ts +26 -0
- package/components/inline-message/lib/inline-message.component.d.ts +13 -0
- package/components/link/link.directive.d.ts +3 -0
- package/components/list/lib/components/expandable-list-item/expandable-list-item.component.d.ts +6 -0
- package/components/list/lib/components/list-item/list-item.component.d.ts +17 -1
- package/components/list/lib/list.component.d.ts +5 -0
- package/components/loading-spinner/lib/loading-spinner.component.d.ts +8 -0
- package/components/loading-spinner/lib/loading-spinner.directive.d.ts +22 -0
- package/components/logo/logo.directive.d.ts +15 -0
- package/components/main-menu/lib/directives/main-menu-button.directive.d.ts +5 -1
- package/components/main-menu/lib/directives/main-menu-close.directive.d.ts +3 -0
- package/components/main-menu/lib/directives/main-menu-item.directive.d.ts +16 -0
- package/components/main-menu/lib/helpers/create-main-menu-links.d.ts +1 -0
- package/components/main-menu/lib/main-menu.component.d.ts +42 -0
- package/components/main-menu/lib/main-menu.config.d.ts +31 -0
- package/components/main-menu/lib/main-menu.service.d.ts +28 -0
- package/components/mainfilter-group/lib/mainfilter-group.component.d.ts +4 -0
- package/components/menu/lib/directives/menu-item.directive.d.ts +6 -0
- package/components/menu/lib/menu.component.d.ts +13 -1
- package/components/menu/lib/menu.directive.d.ts +31 -0
- package/components/modal/lib/components/basic-modal/basic-modal.component.d.ts +14 -0
- package/components/modal/lib/components/modal-footer/modal-footer.component.d.ts +3 -0
- package/components/modal/lib/components/modal-header/modal-header.component.d.ts +9 -0
- package/components/modal/lib/components/modal-hero/modal-hero.component.d.ts +21 -0
- package/components/modal/lib/directives/modal-close.directive.d.ts +25 -1
- package/components/modal/lib/directives/modal-content.directive.d.ts +3 -0
- package/components/modal/lib/directives/modal-dismiss.directive.d.ts +18 -1
- package/components/modal/lib/helpers/inject-modal-ref.d.ts +21 -0
- package/components/modal/lib/helpers/provide-modal-ref.d.ts +9 -0
- package/components/modal/lib/modal.component.d.ts +25 -0
- package/components/modal/lib/modal.config.d.ts +33 -0
- package/components/modal/lib/modal.directive.d.ts +29 -0
- package/components/modal/lib/modal.service.d.ts +54 -0
- package/components/modal/lib/models/modal-ref.d.ts +34 -0
- package/components/navigation-back/lib/navigation-back.component.d.ts +3 -0
- package/components/notification/lib/components/notification-center/notification-center.component.d.ts +0 -2
- package/components/notification/lib/directives/notification-center.directive.d.ts +18 -4
- package/components/notification/lib/helpers/get-notifications-by-tag.d.ts +1 -0
- package/components/notification/lib/helpers/sort-notifications.d.ts +1 -0
- package/components/notification/lib/helpers/to-notification-collection.d.ts +1 -0
- package/components/notification/lib/models/notification-feature.d.ts +15 -0
- package/components/notification/lib/notification.config.d.ts +54 -0
- package/components/notification/lib/notification.logger.d.ts +1 -0
- package/components/notification/lib/notification.service.d.ts +55 -0
- package/components/notification/lib/notification.tokens.d.ts +3 -0
- package/components/notification/lib/services/notification-center.service.d.ts +9 -0
- package/components/paginator/lib/paginator.component.d.ts +89 -0
- package/components/paginator/lib/paginator.config.d.ts +24 -2
- package/components/progress/lib/progress.component.d.ts +15 -0
- package/components/radio-group/lib/components/radio-button/radio-button.component.d.ts +18 -1
- package/components/radio-group/lib/radio-group.component.d.ts +11 -0
- package/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.d.ts +19 -0
- package/components/rail-navigation/lib/rail-navigation.component.d.ts +26 -0
- package/components/rich-list/lib/components/rich-list-content/rich-list-content.component.d.ts +4 -0
- package/components/rich-list/lib/components/rich-list-header/rich-list-header.component.d.ts +4 -0
- package/components/rich-list/lib/components/rich-list-item/rich-list-item.component.d.ts +9 -1
- package/components/rich-list/lib/rich-list.component.d.ts +9 -2
- package/components/select/lib/components/select-option/select-option.component.d.ts +39 -2
- package/components/select/lib/directives/select-input-control.directive.d.ts +11 -0
- package/components/select/lib/pipes/select-search-filter.pipe.d.ts +10 -0
- package/components/select/lib/select.component.d.ts +59 -0
- package/components/slider/lib/slider.directive.d.ts +19 -0
- package/components/spinbox/lib/spinbox.component.d.ts +16 -0
- package/components/switch/lib/switch.component.d.ts +10 -0
- package/components/switch/lib/switch.validator.d.ts +12 -0
- package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +28 -0
- package/components/tab-bar/lib/tab-bar.component.d.ts +69 -0
- package/components/table/lib/components/check-cell/check-cell.component.d.ts +18 -0
- package/components/table/lib/components/header-title/header-title.component.d.ts +33 -1
- package/components/table/lib/directives/table-cell.directive.d.ts +4 -0
- package/components/table/lib/directives/table-row.directive.d.ts +4 -0
- package/components/table/lib/table.component.d.ts +36 -0
- package/components/timepicker/lib/timepicker.component.d.ts +11 -2
- package/components/timepicker/lib/utils/generate-time-stamps.d.ts +2 -1
- package/components/timepicker/lib/utils/ngx-mask-helper.d.ts +2 -2
- package/components/toast/lib/components/toast-item/toast-item.component.d.ts +5 -4
- package/components/toast/lib/models/toast.d.ts +4 -2
- package/components/toast/lib/toast.config.d.ts +26 -0
- package/components/toast/lib/toast.service.d.ts +35 -0
- package/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.d.ts +11 -0
- package/components/toggle-button-group/lib/toggle-button-group.component.d.ts +12 -0
- package/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.d.ts +7 -0
- package/components/tooltip/lib/tooltip.component.d.ts +20 -0
- package/components/tooltip/lib/tooltip.directive.d.ts +35 -0
- package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +34 -0
- package/components/wizard/lib/wizard.component.d.ts +20 -0
- package/esm2022/animations/lib/expand.mjs +45 -1
- package/esm2022/animations/lib/fade.mjs +71 -1
- package/esm2022/animations/lib/slide.mjs +22 -1
- package/esm2022/animations/lib/wait-for-child-animations.mjs +39 -1
- package/esm2022/breakpoints/lib/breakpoints.config.mjs +39 -1
- package/esm2022/breakpoints/lib/breakpoints.service.mjs +44 -1
- package/esm2022/breakpoints/lib/directives/match-breakpoints.directive.mjs +37 -1
- package/esm2022/breakpoints/lib/helpers/configure-breakpoint.mjs +20 -1
- package/esm2022/cdk/a11y/lib/directives/interactive.directive.mjs +33 -1
- package/esm2022/cdk/a11y/lib/directives/list-focus-manager-option.directive.mjs +23 -1
- package/esm2022/cdk/a11y/lib/directives/list-focus-manager.directive.mjs +18 -1
- package/esm2022/cdk/active-indicator/lib/active-indicator.directive.mjs +64 -1
- package/esm2022/cdk/autocomplete-control/lib/autocomplete-control.mjs +40 -2
- package/esm2022/cdk/checkbox-control/lib/checkbox-control.directive.mjs +4 -1
- package/esm2022/cdk/connected-overlay/lib/connected-overlay.service.mjs +45 -1
- package/esm2022/cdk/connected-overlay/lib/helpers/compute-overlay-position.mjs +11 -1
- package/esm2022/cdk/connected-overlay/lib/models/connected-overlay-ref.mjs +50 -1
- package/esm2022/cdk/custom-form-control/lib/custom-form-control.mjs +109 -3
- package/esm2022/cdk/custom-form-control/lib/input-control.directive.mjs +76 -1
- package/esm2022/cdk/dynamic-view/lib/dynamic-view.directive.mjs +18 -1
- package/esm2022/cdk/dynamic-view/lib/dynamic-view.service.mjs +31 -1
- package/esm2022/cdk/dynamic-view/lib/helpers/create-projectable-nodes.mjs +23 -1
- package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-text-content.mjs +23 -1
- package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-view.mjs +23 -1
- package/esm2022/cdk/dynamic-view/lib/models/dynamic-component-ref.mjs +40 -1
- package/esm2022/cdk/dynamic-view/lib/models/dynamic-template-ref.mjs +37 -1
- package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-context.mjs +5 -1
- package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.mjs +11 -1
- package/esm2022/cdk/event-plugins/lib/event-plugins.config.mjs +36 -1
- package/esm2022/cdk/event-plugins/lib/models/event-plugin.mjs +45 -1
- package/esm2022/cdk/event-plugins/lib/plugins/debounce-event-plugin.mjs +33 -1
- package/esm2022/cdk/event-plugins/lib/plugins/defer-event-plugin.mjs +25 -1
- package/esm2022/cdk/expandable/lib/directives/expandable-container.directive.mjs +42 -1
- package/esm2022/cdk/expandable/lib/directives/expandable-item.directive.mjs +48 -1
- package/esm2022/cdk/option-control/lib/option-control.mjs +48 -1
- package/esm2022/cdk/radio-group-control/lib/radio-control.directive.mjs +9 -1
- package/esm2022/cdk/radio-group-control/lib/radio-group-control.directive.mjs +12 -1
- package/esm2022/components/accordion/lib/accordion.component.mjs +9 -1
- package/esm2022/components/accordion/lib/components/accordion-item/accordion-item.component.mjs +31 -1
- package/esm2022/components/accordion/lib/directives/accordion-item-title.mjs +4 -1
- package/esm2022/components/action-group/action-group.component.mjs +7 -1
- package/esm2022/components/area-header/area-header.component.mjs +9 -1
- package/esm2022/components/area-header/directives/area-header-content.directive.mjs +4 -1
- package/esm2022/components/area-header/directives/area-header-subtitle.directive.mjs +4 -1
- package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +29 -5
- package/esm2022/components/avatar/lib/avatar.component.mjs +9 -1
- package/esm2022/components/badge/lib/badge.component.mjs +11 -1
- package/esm2022/components/badge/lib/badge.directive.mjs +16 -1
- package/esm2022/components/bar/lib/bar.component.mjs +8 -1
- package/esm2022/components/bar/lib/directives/bar-button.directive.mjs +4 -1
- package/esm2022/components/bar/lib/directives/bar-label.directive.mjs +4 -1
- package/esm2022/components/breadcrumbs/lib/breadcrumbs.component.mjs +4 -1
- package/esm2022/components/button/lib/button.component.mjs +11 -1
- package/esm2022/components/button-group/lib/button-group.component.mjs +16 -1
- package/esm2022/components/calendar/lib/calendar.component.mjs +35 -1
- package/esm2022/components/calendar/lib/calendar.config.mjs +18 -1
- package/esm2022/components/calendar/lib/calendar.service.mjs +49 -1
- package/esm2022/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +19 -1
- package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +7 -1
- package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +7 -1
- package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +7 -1
- package/esm2022/components/calendar/lib/daterange.service.mjs +17 -1
- package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +26 -1
- package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +39 -1
- package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +6 -1
- package/esm2022/components/calendar/lib/services/calendar-month.service.mjs +2 -1
- package/esm2022/components/calendar/lib/services/calendar-year.service.mjs +2 -1
- package/esm2022/components/calendar/lib/services/calendar-years.service.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/check-cell-in-range.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/check-identical-date.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/get-A11y-label.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/is-date-disabled.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/parse-date.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-daterange.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-max-date.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-min-date.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-next-date-set.mjs +2 -1
- package/esm2022/components/calendar/lib/utils/validate-previous-date-set.mjs +2 -1
- package/esm2022/components/checkbox/lib/checkbox.component.mjs +33 -1
- package/esm2022/components/checkbox/lib/checkbox.validator.mjs +24 -1
- package/esm2022/components/chip/lib/components/chip/chip.component.mjs +15 -1
- package/esm2022/components/chip/lib/components/chip-list/chip-list.component.mjs +4 -1
- package/esm2022/components/chip/lib/components/chip-list-row/chip-list-row.component.mjs +4 -1
- package/esm2022/components/circular-progress/lib/circular-progress.component.mjs +21 -1
- package/esm2022/components/content-box/lib/content-box.component.mjs +4 -1
- package/esm2022/components/content-box/lib/directives/content-box-footer.directive.mjs +4 -1
- package/esm2022/components/content-box/lib/directives/content-box-header.directive.mjs +4 -1
- package/esm2022/components/datepicker/lib/datepicker.component.mjs +33 -1
- package/esm2022/components/datepicker/lib/datepicker.config.mjs +20 -1
- package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +31 -1
- package/esm2022/components/datepicker/lib/utils/get-datepicker-input-pattern.mjs +3 -1
- package/esm2022/components/datepicker/lib/utils/get-datepicker-input-value-as-date.mjs +2 -1
- package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +65 -1
- package/esm2022/components/daterangepicker/lib/daterangepicker.config.mjs +20 -1
- package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +31 -1
- package/esm2022/components/daterangepicker/lib/range.validator.mjs +16 -1
- package/esm2022/components/daterangepicker/lib/required.validator.mjs +15 -1
- package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.mjs +3 -1
- package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.mjs +2 -1
- package/esm2022/components/dropdown/lib/dropdown.component.mjs +8 -1
- package/esm2022/components/dropdown/lib/dropdown.directive.mjs +55 -1
- package/esm2022/components/dropdown/lib/helpers/close-current-dropdown.mjs +6 -1
- package/esm2022/components/error-page/lib/error-page.component.mjs +8 -1
- package/esm2022/components/error-page/lib/error-page.config.mjs +9 -1
- package/esm2022/components/footer/lib/footer.component.mjs +10 -7
- package/esm2022/components/footer/lib/footer.config.mjs +3 -1
- package/esm2022/components/form-field/lib/components/form-field-info/form-field-info.component.mjs +14 -1
- package/esm2022/components/form-field/lib/components/form-group/form-group.component.mjs +13 -1
- package/esm2022/components/form-field/lib/directives/form-field-control.directive.mjs +6 -1
- package/esm2022/components/form-field/lib/directives/form-field-error.directive.mjs +4 -1
- package/esm2022/components/form-field/lib/directives/form-field-hint.directive.mjs +4 -1
- package/esm2022/components/form-field/lib/directives/form-field-label.directive.mjs +4 -1
- package/esm2022/components/form-field/lib/directives/form.directive.mjs +14 -1
- package/esm2022/components/form-field/lib/form-field.component.mjs +14 -1
- package/esm2022/components/form-field/lib/form-field.service.mjs +43 -1
- package/esm2022/components/form-field/lib/services/form-field-error.service.mjs +25 -1
- package/esm2022/components/header/lib/directives/header-avatar.directive.mjs +5 -1
- package/esm2022/components/header/lib/directives/header-title.directive.mjs +4 -1
- package/esm2022/components/header/lib/header.component.mjs +4 -1
- package/esm2022/components/header-navigation/lib/directives/header-navigation-link.directive.mjs +4 -1
- package/esm2022/components/header-navigation/lib/header-navigation.component.mjs +4 -1
- package/esm2022/components/icon/lib/helpers/unpack-icon-identifier.mjs +15 -1
- package/esm2022/components/icon/lib/icon.component.mjs +25 -1
- package/esm2022/components/icon/lib/icon.config.mjs +20 -1
- package/esm2022/components/inline-message/lib/inline-message.component.mjs +14 -1
- package/esm2022/components/link/link.directive.mjs +4 -1
- package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +7 -1
- package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +18 -2
- package/esm2022/components/list/lib/list.component.mjs +6 -1
- package/esm2022/components/loading-spinner/lib/loading-spinner.component.mjs +10 -2
- package/esm2022/components/loading-spinner/lib/loading-spinner.directive.mjs +23 -1
- package/esm2022/components/logo/logo.directive.mjs +16 -1
- package/esm2022/components/main-menu/lib/directives/main-menu-button.directive.mjs +5 -1
- package/esm2022/components/main-menu/lib/directives/main-menu-close.directive.mjs +4 -1
- package/esm2022/components/main-menu/lib/directives/main-menu-item.directive.mjs +17 -1
- package/esm2022/components/main-menu/lib/helpers/create-main-menu-links.mjs +2 -1
- package/esm2022/components/main-menu/lib/main-menu.component.mjs +37 -1
- package/esm2022/components/main-menu/lib/main-menu.config.mjs +32 -1
- package/esm2022/components/main-menu/lib/main-menu.service.mjs +29 -1
- package/esm2022/components/mainfilter-group/lib/mainfilter-group.component.mjs +5 -1
- package/esm2022/components/menu/lib/directives/menu-item.directive.mjs +7 -1
- package/esm2022/components/menu/lib/menu.component.mjs +13 -1
- package/esm2022/components/menu/lib/menu.directive.mjs +19 -1
- package/esm2022/components/modal/lib/components/basic-modal/basic-modal.component.mjs +15 -1
- package/esm2022/components/modal/lib/components/modal-footer/modal-footer.component.mjs +4 -1
- package/esm2022/components/modal/lib/components/modal-header/modal-header.component.mjs +4 -1
- package/esm2022/components/modal/lib/components/modal-hero/modal-hero.component.mjs +12 -1
- package/esm2022/components/modal/lib/directives/modal-close.directive.mjs +25 -1
- package/esm2022/components/modal/lib/directives/modal-content.directive.mjs +4 -1
- package/esm2022/components/modal/lib/directives/modal-dismiss.directive.mjs +18 -1
- package/esm2022/components/modal/lib/helpers/inject-modal-ref.mjs +22 -1
- package/esm2022/components/modal/lib/helpers/provide-modal-ref.mjs +10 -1
- package/esm2022/components/modal/lib/modal.component.mjs +21 -2
- package/esm2022/components/modal/lib/modal.config.mjs +34 -1
- package/esm2022/components/modal/lib/modal.directive.mjs +25 -1
- package/esm2022/components/modal/lib/modal.service.mjs +39 -1
- package/esm2022/components/modal/lib/models/modal-ref.mjs +34 -1
- package/esm2022/components/navigation-back/lib/navigation-back.component.mjs +4 -1
- package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +1 -3
- package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +19 -5
- package/esm2022/components/notification/lib/helpers/get-notifications-by-tag.mjs +2 -1
- package/esm2022/components/notification/lib/helpers/sort-notifications.mjs +2 -1
- package/esm2022/components/notification/lib/helpers/to-notification-collection.mjs +2 -1
- package/esm2022/components/notification/lib/models/notification-feature.mjs +16 -1
- package/esm2022/components/notification/lib/notification.config.mjs +45 -1
- package/esm2022/components/notification/lib/notification.logger.mjs +2 -1
- package/esm2022/components/notification/lib/notification.service.mjs +56 -1
- package/esm2022/components/notification/lib/notification.tokens.mjs +4 -1
- package/esm2022/components/notification/lib/services/notification-center.service.mjs +10 -1
- package/esm2022/components/paginator/lib/paginator.component.mjs +90 -1
- package/esm2022/components/paginator/lib/paginator.config.mjs +29 -1
- package/esm2022/components/progress/lib/progress.component.mjs +16 -1
- package/esm2022/components/radio-group/lib/components/radio-button/radio-button.component.mjs +20 -3
- package/esm2022/components/radio-group/lib/radio-group.component.mjs +13 -2
- package/esm2022/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.mjs +17 -1
- package/esm2022/components/rail-navigation/lib/rail-navigation.component.mjs +27 -1
- package/esm2022/components/rich-list/lib/components/rich-list-content/rich-list-content.component.mjs +5 -1
- package/esm2022/components/rich-list/lib/components/rich-list-header/rich-list-header.component.mjs +5 -1
- package/esm2022/components/rich-list/lib/components/rich-list-item/rich-list-item.component.mjs +10 -2
- package/esm2022/components/rich-list/lib/rich-list.component.mjs +10 -3
- package/esm2022/components/select/lib/components/select-option/select-option.component.mjs +49 -7
- package/esm2022/components/select/lib/directives/select-input-control.directive.mjs +12 -2
- package/esm2022/components/select/lib/pipes/select-search-filter.pipe.mjs +11 -1
- package/esm2022/components/select/lib/select.component.mjs +59 -5
- package/esm2022/components/slider/lib/slider.directive.mjs +20 -1
- package/esm2022/components/spinbox/lib/spinbox.component.mjs +17 -1
- package/esm2022/components/switch/lib/switch.component.mjs +11 -1
- package/esm2022/components/switch/lib/switch.validator.mjs +13 -1
- package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +29 -1
- package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +71 -1
- package/esm2022/components/table/lib/components/check-cell/check-cell.component.mjs +19 -1
- package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +30 -2
- package/esm2022/components/table/lib/directives/table-cell.directive.mjs +5 -1
- package/esm2022/components/table/lib/directives/table-row.directive.mjs +5 -1
- package/esm2022/components/table/lib/table.component.mjs +30 -1
- package/esm2022/components/timepicker/lib/timepicker.component.mjs +15 -6
- package/esm2022/components/timepicker/lib/utils/generate-time-stamps.mjs +5 -3
- package/esm2022/components/timepicker/lib/utils/ngx-mask-helper.mjs +3 -3
- package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +3 -3
- package/esm2022/components/toast/lib/components/toast-item/toast-item.component.mjs +5 -3
- package/esm2022/components/toast/lib/models/toast.mjs +1 -1
- package/esm2022/components/toast/lib/toast.config.mjs +27 -1
- package/esm2022/components/toast/lib/toast.service.mjs +36 -1
- package/esm2022/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.mjs +12 -1
- package/esm2022/components/toggle-button-group/lib/toggle-button-group.component.mjs +14 -2
- package/esm2022/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.mjs +8 -1
- package/esm2022/components/tooltip/lib/tooltip.component.mjs +18 -1
- package/esm2022/components/tooltip/lib/tooltip.directive.mjs +36 -1
- package/esm2022/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +35 -1
- package/esm2022/components/wizard/lib/wizard.component.mjs +21 -1
- package/esm2022/internal/lib/helpers/decorator-property-name.mjs +9 -1
- package/esm2022/internal/translate/lib/translate.config.mjs +32 -1
- package/esm2022/internal/translate/lib/translate.service.mjs +30 -1
- package/esm2022/lib/controllers/controller.mjs +26 -1
- package/esm2022/lib/controllers/disabled.controller.mjs +60 -1
- package/esm2022/lib/controllers/readonly.controller.mjs +57 -1
- package/esm2022/lib/directives/click-outside.directive.mjs +30 -1
- package/esm2022/lib/directives/delegate-focus.directive.mjs +15 -1
- package/esm2022/lib/services/window-ref.mjs +67 -1
- package/esm2022/lib/tokens/identity-matcher.mjs +25 -1
- package/esm2022/lib/tokens/string-search-handler.mjs +25 -1
- package/esm2022/lib/tokens/stringify.mjs +26 -1
- package/esm2022/localization/lib/features/with-http-language-header.mjs +54 -1
- package/esm2022/localization/lib/features/with-http-language-query-param.mjs +52 -1
- package/esm2022/localization/lib/loaders/browser-language-loader.mjs +33 -1
- package/esm2022/localization/lib/localization.config.mjs +71 -1
- package/esm2022/localization/lib/localization.service.mjs +42 -3
- package/esm2022/localization/lib/models/localization-feature.mjs +8 -1
- package/esm2022/rxjs/index.mjs +2 -2
- package/esm2022/rxjs/lib/delay-until.mjs +23 -1
- package/esm2022/rxjs/lib/from-element-mutation.mjs +22 -1
- package/esm2022/rxjs/lib/from-element-resize.mjs +25 -1
- package/esm2022/rxjs/lib/from-events.mjs +25 -1
- package/esm2022/rxjs/lib/from-query-list.mjs +24 -0
- package/esm2022/sdk/lib/application-environment.mjs +51 -1
- package/esm2022/theming/lib/helpers/prefers-dark-theme.mjs +19 -1
- package/esm2022/theming/lib/helpers/resolve-theme.mjs +26 -1
- package/esm2022/theming/lib/helpers/theme-storage.mjs +43 -1
- package/esm2022/theming/lib/theming.config.mjs +34 -1
- package/esm2022/theming/lib/theming.service.mjs +32 -1
- package/esm2022/utils/lib/decorators/pure.mjs +52 -1
- package/esm2022/utils/lib/helpers/angular.mjs +37 -1
- package/esm2022/utils/lib/helpers/array.mjs +5 -1
- package/esm2022/utils/lib/helpers/build-url.mjs +21 -1
- package/esm2022/utils/lib/helpers/build-website-url.mjs +3 -2
- package/esm2022/utils/lib/helpers/cache-storage-client.mjs +52 -1
- package/esm2022/utils/lib/helpers/coercion.mjs +18 -1
- package/esm2022/utils/lib/helpers/debounce.mjs +28 -1
- package/esm2022/utils/lib/helpers/defer-fn.mjs +21 -1
- package/esm2022/utils/lib/helpers/dom.mjs +71 -1
- package/esm2022/utils/lib/helpers/get-axis.mjs +21 -1
- package/esm2022/utils/lib/helpers/get-language-code.mjs +18 -1
- package/esm2022/utils/lib/helpers/get-opposite-side.mjs +22 -1
- package/esm2022/utils/lib/helpers/get-side.mjs +18 -1
- package/esm2022/utils/lib/helpers/get-unique-id.mjs +34 -1
- package/esm2022/utils/lib/helpers/match-url.mjs +41 -1
- package/esm2022/utils/lib/helpers/ng-changes.mjs +30 -1
- package/esm2022/utils/lib/helpers/provide-config.mjs +57 -1
- package/esm2022/utils/lib/helpers/queue.mjs +84 -1
- package/esm2022/utils/lib/helpers/type-guards.mjs +58 -1
- package/esm2022/utils/lib/helpers/until-destroyed.mjs +39 -1
- package/fesm2022/odx-angular-animations.mjs +173 -0
- package/fesm2022/odx-angular-animations.mjs.map +1 -1
- package/fesm2022/odx-angular-breakpoints.mjs +136 -0
- package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-a11y.mjs +71 -0
- package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-active-indicator.mjs +63 -0
- package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +39 -1
- package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-checkbox-control.mjs +3 -0
- package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-connected-overlay.mjs +103 -0
- package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-custom-form-control.mjs +183 -2
- package/fesm2022/odx-angular-cdk-custom-form-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs +202 -0
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-event-plugins.mjs +135 -0
- package/fesm2022/odx-angular-cdk-event-plugins.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-expandable.mjs +88 -0
- package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-option-control.mjs +47 -0
- package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-radio-group-control.mjs +19 -0
- package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
- package/fesm2022/odx-angular-components-accordion.mjs +41 -0
- package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/odx-angular-components-action-group.mjs +6 -0
- package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-area-header.mjs +14 -0
- package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
- package/fesm2022/odx-angular-components-autocomplete.mjs +28 -4
- package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/odx-angular-components-avatar.mjs +8 -0
- package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-badge.mjs +25 -0
- package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
- package/fesm2022/odx-angular-components-bar.mjs +13 -0
- package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-breadcrumbs.mjs +3 -0
- package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/odx-angular-components-button-group.mjs +15 -0
- package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-button.mjs +10 -0
- package/fesm2022/odx-angular-components-button.mjs.map +1 -1
- package/fesm2022/odx-angular-components-calendar.mjs +232 -0
- package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-checkbox.mjs +55 -0
- package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-chip.mjs +20 -0
- package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
- package/fesm2022/odx-angular-components-circular-progress.mjs +20 -0
- package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
- package/fesm2022/odx-angular-components-content-box.mjs +9 -0
- package/fesm2022/odx-angular-components-content-box.mjs.map +1 -1
- package/fesm2022/odx-angular-components-datepicker.mjs +84 -0
- package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-daterangepicker.mjs +145 -0
- package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-dropdown.mjs +66 -0
- package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
- package/fesm2022/odx-angular-components-error-page.mjs +15 -0
- package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
- package/fesm2022/odx-angular-components-footer.mjs +11 -6
- package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
- package/fesm2022/odx-angular-components-form-field.mjs +131 -0
- package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
- package/fesm2022/odx-angular-components-header-navigation.mjs +6 -0
- package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
- package/fesm2022/odx-angular-components-header.mjs +10 -0
- package/fesm2022/odx-angular-components-header.mjs.map +1 -1
- package/fesm2022/odx-angular-components-icon.mjs +57 -0
- package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
- package/fesm2022/odx-angular-components-inline-message.mjs +13 -0
- package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
- package/fesm2022/odx-angular-components-link.mjs +3 -0
- package/fesm2022/odx-angular-components-link.mjs.map +1 -1
- package/fesm2022/odx-angular-components-list.mjs +28 -1
- package/fesm2022/odx-angular-components-list.mjs.map +1 -1
- package/fesm2022/odx-angular-components-loading-spinner.mjs +30 -0
- package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
- package/fesm2022/odx-angular-components-logo.mjs +15 -0
- package/fesm2022/odx-angular-components-logo.mjs.map +1 -1
- package/fesm2022/odx-angular-components-main-menu.mjs +119 -0
- package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
- package/fesm2022/odx-angular-components-mainfilter-group.mjs +4 -0
- package/fesm2022/odx-angular-components-mainfilter-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-menu.mjs +36 -0
- package/fesm2022/odx-angular-components-menu.mjs.map +1 -1
- package/fesm2022/odx-angular-components-modal.mjs +252 -0
- package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
- package/fesm2022/odx-angular-components-navigation-back.mjs +3 -0
- package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
- package/fesm2022/odx-angular-components-notification.mjs +148 -6
- package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
- package/fesm2022/odx-angular-components-paginator.mjs +117 -0
- package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/odx-angular-components-progress.mjs +15 -0
- package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
- package/fesm2022/odx-angular-components-radio-group.mjs +30 -2
- package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-rail-navigation.mjs +42 -0
- package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/odx-angular-components-rich-list.mjs +26 -3
- package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
- package/fesm2022/odx-angular-components-select.mjs +126 -11
- package/fesm2022/odx-angular-components-select.mjs.map +1 -1
- package/fesm2022/odx-angular-components-slider.mjs +19 -0
- package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
- package/fesm2022/odx-angular-components-spinbox.mjs +16 -0
- package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-switch.mjs +22 -0
- package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +98 -0
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-table.mjs +84 -1
- package/fesm2022/odx-angular-components-table.mjs.map +1 -1
- package/fesm2022/odx-angular-components-timepicker.mjs +20 -9
- package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toast.mjs +67 -4
- package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toggle-button-group.mjs +23 -0
- package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tooltip.mjs +59 -0
- package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/odx-angular-components-wizard.mjs +54 -0
- package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
- package/fesm2022/odx-angular-internal-translate.mjs +60 -0
- package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
- package/fesm2022/odx-angular-internal.mjs +8 -0
- package/fesm2022/odx-angular-internal.mjs.map +1 -1
- package/fesm2022/odx-angular-localization.mjs +254 -2
- package/fesm2022/odx-angular-localization.mjs.map +1 -1
- package/fesm2022/odx-angular-rxjs.mjs +115 -5
- package/fesm2022/odx-angular-rxjs.mjs.map +1 -1
- package/fesm2022/odx-angular-sdk.mjs +50 -0
- package/fesm2022/odx-angular-sdk.mjs.map +1 -1
- package/fesm2022/odx-angular-theming.mjs +149 -0
- package/fesm2022/odx-angular-theming.mjs.map +1 -1
- package/fesm2022/odx-angular-utils.mjs +709 -1
- package/fesm2022/odx-angular-utils.mjs.map +1 -1
- package/fesm2022/odx-angular.mjs +322 -0
- package/fesm2022/odx-angular.mjs.map +1 -1
- package/internal/lib/helpers/decorator-property-name.d.ts +8 -0
- package/internal/translate/lib/translate.config.d.ts +31 -0
- package/internal/translate/lib/translate.service.d.ts +29 -0
- package/lib/controllers/controller.d.ts +25 -0
- package/lib/controllers/disabled.controller.d.ts +59 -0
- package/lib/controllers/readonly.controller.d.ts +56 -0
- package/lib/directives/click-outside.directive.d.ts +29 -0
- package/lib/directives/delegate-focus.directive.d.ts +14 -0
- package/lib/services/window-ref.d.ts +66 -0
- package/lib/tokens/identity-matcher.d.ts +41 -0
- package/lib/tokens/string-search-handler.d.ts +39 -0
- package/lib/tokens/stringify.d.ts +42 -0
- package/localization/lib/features/with-http-language-header.d.ts +63 -0
- package/localization/lib/features/with-http-language-query-param.d.ts +61 -0
- package/localization/lib/loaders/browser-language-loader.d.ts +32 -0
- package/localization/lib/localization.config.d.ts +81 -0
- package/localization/lib/localization.service.d.ts +39 -0
- package/localization/lib/models/localization-feature.d.ts +7 -0
- package/package.json +1 -1
- package/rxjs/index.d.ts +1 -1
- package/rxjs/lib/delay-until.d.ts +22 -0
- package/rxjs/lib/from-element-mutation.d.ts +21 -0
- package/rxjs/lib/from-element-resize.d.ts +24 -0
- package/rxjs/lib/from-events.d.ts +24 -0
- package/rxjs/lib/from-query-list.d.ts +22 -0
- package/sdk/lib/application-environment.d.ts +59 -0
- package/theming/lib/helpers/prefers-dark-theme.d.ts +18 -0
- package/theming/lib/helpers/resolve-theme.d.ts +25 -0
- package/theming/lib/helpers/theme-storage.d.ts +42 -0
- package/theming/lib/theming.config.d.ts +46 -0
- package/theming/lib/theming.service.d.ts +31 -0
- package/utils/lib/decorators/pure.d.ts +51 -0
- package/utils/lib/helpers/angular.d.ts +36 -0
- package/utils/lib/helpers/array.d.ts +4 -0
- package/utils/lib/helpers/build-url.d.ts +20 -0
- package/utils/lib/helpers/build-website-url.d.ts +2 -1
- package/utils/lib/helpers/cache-storage-client.d.ts +51 -0
- package/utils/lib/helpers/coercion.d.ts +17 -0
- package/utils/lib/helpers/debounce.d.ts +27 -0
- package/utils/lib/helpers/defer-fn.d.ts +20 -0
- package/utils/lib/helpers/dom.d.ts +70 -0
- package/utils/lib/helpers/get-axis.d.ts +20 -0
- package/utils/lib/helpers/get-language-code.d.ts +17 -0
- package/utils/lib/helpers/get-opposite-side.d.ts +21 -0
- package/utils/lib/helpers/get-side.d.ts +17 -0
- package/utils/lib/helpers/get-unique-id.d.ts +33 -0
- package/utils/lib/helpers/match-url.d.ts +40 -0
- package/utils/lib/helpers/ng-changes.d.ts +52 -0
- package/utils/lib/helpers/provide-config.d.ts +56 -0
- package/utils/lib/helpers/queue.d.ts +83 -0
- package/utils/lib/helpers/type-guards.d.ts +57 -0
- package/utils/lib/helpers/until-destroyed.d.ts +38 -0
- package/esm2022/rxjs/lib/form-query-list.mjs +0 -5
- package/rxjs/lib/form-query-list.d.ts +0 -3
|
@@ -8,16 +8,48 @@ export class LocalizationService {
|
|
|
8
8
|
this.localizationConfig = injectLocalizationConfig();
|
|
9
9
|
this.injector = inject(Injector);
|
|
10
10
|
this.localeState$ = new BehaviorSubject(new Intl.Locale(this.localizationConfig.availableLanguages[0]));
|
|
11
|
+
/**
|
|
12
|
+
* Represents an observable stream of the active language in the localization service.
|
|
13
|
+
* The active language is determined by the locale state.
|
|
14
|
+
*
|
|
15
|
+
* @emits {string} The active language.
|
|
16
|
+
*/
|
|
11
17
|
this.activeLanguage$ = this.localeState$.pipe(filter(Boolean), map((x) => x.baseName), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
18
|
+
/**
|
|
19
|
+
* Gets the list of available languages for localization.
|
|
20
|
+
*
|
|
21
|
+
* @type {string[]} The list of available languages.
|
|
22
|
+
*/
|
|
12
23
|
this.availableLanguages = this.localizationConfig.availableLanguages;
|
|
24
|
+
/** Default language derived from the first entry in the available languages list.
|
|
25
|
+
*
|
|
26
|
+
* @type {string}
|
|
27
|
+
*/
|
|
13
28
|
this.defaultLanguage = this.availableLanguages[0];
|
|
14
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Retrieves the currently active language. Falls back to the default language if
|
|
32
|
+
* no active language is set.
|
|
33
|
+
*
|
|
34
|
+
* @returns {string} Full locale name e.g. 'en-US' or just 'en' if no region info is attached.
|
|
35
|
+
*/
|
|
15
36
|
getActiveLanguage() {
|
|
16
|
-
return this.localeState$.getValue()?.baseName ?? new Intl.Locale(this.defaultLanguage).baseName;
|
|
37
|
+
return this.localeState$.getValue()?.baseName ?? new Intl.Locale(this.defaultLanguage).baseName;
|
|
17
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Retrieves the active language subtag.
|
|
41
|
+
*
|
|
42
|
+
* @returns {string} The two-digit language subtag, e.g. 'en', 'fr'.
|
|
43
|
+
*/
|
|
18
44
|
getActiveLanguageSubtag() {
|
|
19
|
-
return this.localeState$.getValue()?.language ?? new Intl.Locale(this.defaultLanguage).language;
|
|
45
|
+
return this.localeState$.getValue()?.language ?? new Intl.Locale(this.defaultLanguage).language;
|
|
20
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Sets the active language based on the provided language code. If the language is not
|
|
49
|
+
* recognized, it logs an error and does not change the active language.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} language The language code to set as the active language.
|
|
52
|
+
*/
|
|
21
53
|
setActiveLanguage(language) {
|
|
22
54
|
try {
|
|
23
55
|
const locale = new Intl.Locale(language);
|
|
@@ -32,6 +64,13 @@ export class LocalizationService {
|
|
|
32
64
|
logger.error(error);
|
|
33
65
|
}
|
|
34
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Loads the active language for the localization service.
|
|
69
|
+
* This method runs in an injection context and sets the active language based on the result of the active language loader.
|
|
70
|
+
* If the active language loader fails, the default language is set as the active language.
|
|
71
|
+
*
|
|
72
|
+
* @returns {Promise<void>} A promise that resolves when the active language is loaded and set.
|
|
73
|
+
*/
|
|
35
74
|
async loadActiveLanguage() {
|
|
36
75
|
return runInInjectionContext(this.injector, async () => {
|
|
37
76
|
const activeLanguageLoader$ = this.createActiveLanguageLoader$();
|
|
@@ -56,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
56
95
|
type: Injectable,
|
|
57
96
|
args: [{ providedIn: 'root' }]
|
|
58
97
|
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQWMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sTUFBTSxNQUFNLHVCQUF1QixDQUFDOztBQUczQyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRW1CLHVCQUFrQixHQUFHLHdCQUF3QixFQUFFLENBQUM7UUFDaEQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUEwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3STs7Ozs7V0FLRztRQUNhLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3RELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFDdEIsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVGOzs7O1dBSUc7UUFDYSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUM7UUFFaEY7OztXQUdHO1FBQ2Esb0JBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FpRTlEO0lBL0RDOzs7OztPQUtHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbEcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNsRyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLFFBQVEsbUZBQW1GLENBQUMsQ0FBQzthQUMxSTtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDakUsTUFBTSxjQUFjLEdBQUcsTUFBTSxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7UUFDbEUsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFDRCxJQUFJLFFBQVEsWUFBWSxPQUFPLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDOytHQTdGVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBpc09ic2VydmFibGUsIG1hcCwgb2YsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICcuL2xvY2FsaXphdGlvbi5jb25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvY2FsaXphdGlvbi5sb2dnZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXphdGlvbkNvbmZpZyA9IGluamVjdExvY2FsaXphdGlvbkNvbmZpZygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGVTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGwuTG9jYWxlIHwgdW5kZWZpbmVkPihuZXcgSW50bC5Mb2NhbGUodGhpcy5sb2NhbGl6YXRpb25Db25maWcuYXZhaWxhYmxlTGFuZ3VhZ2VzWzBdKSk7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gb2JzZXJ2YWJsZSBzdHJlYW0gb2YgdGhlIGFjdGl2ZSBsYW5ndWFnZSBpbiB0aGUgbG9jYWxpemF0aW9uIHNlcnZpY2UuXG4gICAqIFRoZSBhY3RpdmUgbGFuZ3VhZ2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbG9jYWxlIHN0YXRlLlxuICAgKlxuICAgKiBAZW1pdHMge3N0cmluZ30gVGhlIGFjdGl2ZSBsYW5ndWFnZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVMYW5ndWFnZSQgPSB0aGlzLmxvY2FsZVN0YXRlJC5waXBlKFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICBtYXAoKHgpID0+IHguYmFzZU5hbWUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZvciBsb2NhbGl6YXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX0gVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLmxvY2FsaXphdGlvbkNvbmZpZy5hdmFpbGFibGVMYW5ndWFnZXM7XG5cbiAgLyoqIERlZmF1bHQgbGFuZ3VhZ2UgZGVyaXZlZCBmcm9tIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXZhaWxhYmxlIGxhbmd1YWdlcyBsaXN0LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZSA9IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzWzBdO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGFuZ3VhZ2UuIEZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaWZcbiAgICogbm8gYWN0aXZlIGxhbmd1YWdlIGlzIHNldC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gRnVsbCBsb2NhbGUgbmFtZSBlLmcuICdlbi1VUycgb3IganVzdCAnZW4nIGlmIG5vIHJlZ2lvbiBpbmZvIGlzIGF0dGFjaGVkLlxuICAgKi9cbiAgcHVibGljIGdldEFjdGl2ZUxhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlU3RhdGUkLmdldFZhbHVlKCk/LmJhc2VOYW1lID8/IG5ldyBJbnRsLkxvY2FsZSh0aGlzLmRlZmF1bHRMYW5ndWFnZSkuYmFzZU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgbGFuZ3VhZ2Ugc3VidGFnLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdHdvLWRpZ2l0IGxhbmd1YWdlIHN1YnRhZywgZS5nLiAnZW4nLCAnZnInLlxuICAgKi9cbiAgcHVibGljIGdldEFjdGl2ZUxhbmd1YWdlU3VidGFnKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlU3RhdGUkLmdldFZhbHVlKCk/Lmxhbmd1YWdlID8/IG5ldyBJbnRsLkxvY2FsZSh0aGlzLmRlZmF1bHRMYW5ndWFnZSkubGFuZ3VhZ2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIGxhbmd1YWdlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBjb2RlLiBJZiB0aGUgbGFuZ3VhZ2UgaXMgbm90XG4gICAqIHJlY29nbml6ZWQsIGl0IGxvZ3MgYW4gZXJyb3IgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgYWN0aXZlIGxhbmd1YWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGNvZGUgdG8gc2V0IGFzIHRoZSBhY3RpdmUgbGFuZ3VhZ2UuXG4gICAqL1xuICBwdWJsaWMgc2V0QWN0aXZlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSBuZXcgSW50bC5Mb2NhbGUobGFuZ3VhZ2UpO1xuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxvY2FsZS5iYXNlTmFtZSkgfHwgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuaW5jbHVkZXMobG9jYWxlLmxhbmd1YWdlKSkge1xuICAgICAgICB0aGlzLmxvY2FsZVN0YXRlJC5uZXh0KGxvY2FsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXphYmxlIGxhbmd1YWdlICcke2xhbmd1YWdlfScuIE1ha2Ugc3VyZSBpdCdzIGEgcGFydCBvZiBhdmFpbGFibGVMYW5ndWFnZXMgaW5zaWRlIExvY2FsaXphdGlvblNlcnZpY2UgY29uZmlnLmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgYWN0aXZlIGxhbmd1YWdlIGZvciB0aGUgbG9jYWxpemF0aW9uIHNlcnZpY2UuXG4gICAqIFRoaXMgbWV0aG9kIHJ1bnMgaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgYW5kIHNldHMgdGhlIGFjdGl2ZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgcmVzdWx0IG9mIHRoZSBhY3RpdmUgbGFuZ3VhZ2UgbG9hZGVyLlxuICAgKiBJZiB0aGUgYWN0aXZlIGxhbmd1YWdlIGxvYWRlciBmYWlscywgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgc2V0IGFzIHRoZSBhY3RpdmUgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhY3RpdmUgbGFuZ3VhZ2UgaXMgbG9hZGVkIGFuZCBzZXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZEFjdGl2ZUxhbmd1YWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlTGFuZ3VhZ2VMb2FkZXIkID0gdGhpcy5jcmVhdGVBY3RpdmVMYW5ndWFnZUxvYWRlciQoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUxhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oYWN0aXZlTGFuZ3VhZ2VMb2FkZXIkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTGFuZ3VhZ2UoYWN0aXZlTGFuZ3VhZ2UgPz8gdGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY3RpdmVMYW5ndWFnZUxvYWRlciQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMubG9jYWxpemF0aW9uQ29uZmlnLmFjdGl2ZUxhbmd1YWdlTG9hZGVyPy4oKTtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIGxhbmd1YWdlO1xuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gZnJvbShsYW5ndWFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvZihsYW5ndWFnZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
* Creates a feature provider for the localization module.
|
|
4
|
+
*
|
|
5
|
+
* @param {Provider[] | EnvironmentProviders} provider - The providers to be used for the localization feature.
|
|
6
|
+
* @returns {LocalizationFeature} The localization feature provider.
|
|
7
|
+
*/
|
|
1
8
|
export function makeLocalizationFeature(provider) {
|
|
2
9
|
return provider;
|
|
3
10
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWZlYXR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbW9kZWxzL2xvY2FsaXphdGlvbi1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxRQUEyQztJQUNqRixPQUFPLFFBQXdDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBMb2NhbGl6YXRpb25GZWF0dXJlID0gRW52aXJvbm1lbnRQcm92aWRlcnMgJiB7IMm1b2R4QnJhbmQ6ICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uOjpMb2NhbGl6YXRpb25GZWF0dXJlJyB9O1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ3JlYXRlcyBhIGZlYXR1cmUgcHJvdmlkZXIgZm9yIHRoZSBsb2NhbGl6YXRpb24gbW9kdWxlLlxuICpcbiAqIEBwYXJhbSB7UHJvdmlkZXJbXSB8IEVudmlyb25tZW50UHJvdmlkZXJzfSBwcm92aWRlciAtIFRoZSBwcm92aWRlcnMgdG8gYmUgdXNlZCBmb3IgdGhlIGxvY2FsaXphdGlvbiBmZWF0dXJlLlxuICogQHJldHVybnMge0xvY2FsaXphdGlvbkZlYXR1cmV9IFRoZSBsb2NhbGl6YXRpb24gZmVhdHVyZSBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlKHByb3ZpZGVyOiBQcm92aWRlcltdIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpOiBMb2NhbGl6YXRpb25GZWF0dXJlIHtcbiAgcmV0dXJuIHByb3ZpZGVyIGFzIG5ldmVyIGFzIExvY2FsaXphdGlvbkZlYXR1cmU7XG59XG4iXX0=
|
package/esm2022/rxjs/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './lib/delay-until';
|
|
2
|
-
export * from './lib/form-query-list';
|
|
3
2
|
export * from './lib/from-element-mutation';
|
|
4
3
|
export * from './lib/from-element-resize';
|
|
5
4
|
export * from './lib/from-events';
|
|
6
|
-
|
|
5
|
+
export * from './lib/from-query-list';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvcnhqcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZGVsYXktdW50aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZnJvbS1lbGVtZW50LW11dGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zyb20tZWxlbWVudC1yZXNpemUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZnJvbS1ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZnJvbS1xdWVyeS1saXN0JztcbiJdfQ==
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { map, switchMap, takeUntil, timer } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Delays the emission of each value from the source Observable by a time span determined by the `delay` function.
|
|
4
|
+
* If the `notifier` Observable emits before the delay expires, the delayed emission is cancelled.
|
|
5
|
+
*
|
|
6
|
+
* This operator is useful for postponing the observable emissions until certain conditions are met,
|
|
7
|
+
* represented by the passage of time defined by `delay`. It also allows for a way to preemptively
|
|
8
|
+
* cancel the delay in response to another observable's emission.
|
|
9
|
+
*
|
|
10
|
+
* @template T The type of items emitted by the source Observable.
|
|
11
|
+
* @param {() => number} delay A function that returns the delay (in milliseconds) before the source Observable's values are emitted.
|
|
12
|
+
* @param {Observable<unknown>} notifier An Observable that cancels the delay when it emits.
|
|
13
|
+
* @returns {MonoTypeOperatorFunction<T>} An Observable that emits the source Observable's items with a delay if not cancelled.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Delay each number emission by 1 second, unless the 'cancel' button is clicked.
|
|
17
|
+
* const delayedNumbers$ = of(1, 2, 3).pipe(
|
|
18
|
+
* delayUntil(() => 1000, fromEvent(cancelButton, 'click'))
|
|
19
|
+
* );
|
|
20
|
+
*
|
|
21
|
+
* delayedNumbers$.subscribe(console.log);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
2
24
|
export function delayUntil(delay, notifier) {
|
|
3
25
|
return (source$) => source$.pipe(switchMap((value) => timer(delay()).pipe(map(() => value), takeUntil(notifier))));
|
|
4
26
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXktdW50aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvcnhqcy9zcmMvbGliL2RlbGF5LXVudGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQXdDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFJLEtBQW1CLEVBQUUsUUFBNkI7SUFDOUUsT0FBTyxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUNoQyxPQUFPLENBQUMsSUFBSSxDQUNWLFNBQVMsQ0FBQyxDQUFDLEtBQVEsRUFBRSxFQUFFLENBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDakIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUNoQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQ3BCLENBQ0YsQ0FDRixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBEZWxheXMgdGhlIGVtaXNzaW9uIG9mIGVhY2ggdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYSB0aW1lIHNwYW4gZGV0ZXJtaW5lZCBieSB0aGUgYGRlbGF5YCBmdW5jdGlvbi5cbiAqIElmIHRoZSBgbm90aWZpZXJgIE9ic2VydmFibGUgZW1pdHMgYmVmb3JlIHRoZSBkZWxheSBleHBpcmVzLCB0aGUgZGVsYXllZCBlbWlzc2lvbiBpcyBjYW5jZWxsZWQuXG4gKlxuICogVGhpcyBvcGVyYXRvciBpcyB1c2VmdWwgZm9yIHBvc3Rwb25pbmcgdGhlIG9ic2VydmFibGUgZW1pc3Npb25zIHVudGlsIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0LFxuICogcmVwcmVzZW50ZWQgYnkgdGhlIHBhc3NhZ2Ugb2YgdGltZSBkZWZpbmVkIGJ5IGBkZWxheWAuIEl0IGFsc28gYWxsb3dzIGZvciBhIHdheSB0byBwcmVlbXB0aXZlbHlcbiAqIGNhbmNlbCB0aGUgZGVsYXkgaW4gcmVzcG9uc2UgdG8gYW5vdGhlciBvYnNlcnZhYmxlJ3MgZW1pc3Npb24uXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcGFyYW0geygpID0+IG51bWJlcn0gZGVsYXkgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIGJlZm9yZSB0aGUgc291cmNlIE9ic2VydmFibGUncyB2YWx1ZXMgYXJlIGVtaXR0ZWQuXG4gKiBAcGFyYW0ge09ic2VydmFibGU8dW5rbm93bj59IG5vdGlmaWVyIEFuIE9ic2VydmFibGUgdGhhdCBjYW5jZWxzIHRoZSBkZWxheSB3aGVuIGl0IGVtaXRzLlxuICogQHJldHVybnMge01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSdzIGl0ZW1zIHdpdGggYSBkZWxheSBpZiBub3QgY2FuY2VsbGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBEZWxheSBlYWNoIG51bWJlciBlbWlzc2lvbiBieSAxIHNlY29uZCwgdW5sZXNzIHRoZSAnY2FuY2VsJyBidXR0b24gaXMgY2xpY2tlZC5cbiAqIGNvbnN0IGRlbGF5ZWROdW1iZXJzJCA9IG9mKDEsIDIsIDMpLnBpcGUoXG4gKiAgIGRlbGF5VW50aWwoKCkgPT4gMTAwMCwgZnJvbUV2ZW50KGNhbmNlbEJ1dHRvbiwgJ2NsaWNrJykpXG4gKiApO1xuICpcbiAqIGRlbGF5ZWROdW1iZXJzJC5zdWJzY3JpYmUoY29uc29sZS5sb2cpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheVVudGlsPFQ+KGRlbGF5OiAoKSA9PiBudW1iZXIsIG5vdGlmaWVyOiBPYnNlcnZhYmxlPHVua25vd24+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KSA9PlxuICAgIHNvdXJjZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodmFsdWU6IFQpID0+XG4gICAgICAgIHRpbWVyKGRlbGF5KCkpLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHZhbHVlKSxcbiAgICAgICAgICB0YWtlVW50aWwobm90aWZpZXIpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xufVxuIl19
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { createMutationObserver } from '@odx/angular/utils';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an RxJS Observable that emits mutation records for changes in a DOM element's attributes,
|
|
5
|
+
* child list, and subtree. It uses the `MutationObserver` Web API to observe mutations on the specified
|
|
6
|
+
* element according to the options provided.
|
|
7
|
+
*
|
|
8
|
+
* @param {Element} element The DOM element to observe for mutations.
|
|
9
|
+
* @param {MutationObserverInit} options An object that specifies which DOM mutations should be reported.
|
|
10
|
+
* Options include attributes, childList, subtree, attributeOldValue, characterData, characterDataOldValue,
|
|
11
|
+
* and attributeFilter.
|
|
12
|
+
* @returns {Observable<MutationRecord>} An Observable that emits a `MutationRecord` each time a mutation
|
|
13
|
+
* matching the specified options occurs in the observed element.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Observing changes to the child list of an element
|
|
17
|
+
* const element = document.getElementById('my-element');
|
|
18
|
+
* const mutationOptions = { childList: true };
|
|
19
|
+
*
|
|
20
|
+
* fromElementMutation$(element, mutationOptions).subscribe((mutation) => console.log('Mutation detected:', mutation));
|
|
21
|
+
* ```
|
|
22
|
+
* Note: Always remember to unsubscribe from the observable to prevent memory leaks.
|
|
23
|
+
*/
|
|
3
24
|
export function fromElementMutation$(element, options) {
|
|
4
25
|
return new Observable((observer) => {
|
|
5
26
|
const mutationObserver = createMutationObserver(observer, (events) => events.length > 0);
|
|
@@ -7,4 +28,4 @@ export function fromElementMutation$(element, options) {
|
|
|
7
28
|
mutationObserver.observe(element, options);
|
|
8
29
|
});
|
|
9
30
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS1lbGVtZW50LW11dGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3J4anMvc3JjL2xpYi9mcm9tLWVsZW1lbnQtbXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBZ0IsRUFBRSxPQUE2QjtJQUNsRixPQUFPLElBQUksVUFBVSxDQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNsRCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gUnhKUyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgbXV0YXRpb24gcmVjb3JkcyBmb3IgY2hhbmdlcyBpbiBhIERPTSBlbGVtZW50J3MgYXR0cmlidXRlcyxcbiAqIGNoaWxkIGxpc3QsIGFuZCBzdWJ0cmVlLiBJdCB1c2VzIHRoZSBgTXV0YXRpb25PYnNlcnZlcmAgV2ViIEFQSSB0byBvYnNlcnZlIG11dGF0aW9ucyBvbiB0aGUgc3BlY2lmaWVkXG4gKiBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIG9ic2VydmUgZm9yIG11dGF0aW9ucy5cbiAqIEBwYXJhbSB7TXV0YXRpb25PYnNlcnZlckluaXR9IG9wdGlvbnMgQW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHdoaWNoIERPTSBtdXRhdGlvbnMgc2hvdWxkIGJlIHJlcG9ydGVkLlxuICogT3B0aW9ucyBpbmNsdWRlIGF0dHJpYnV0ZXMsIGNoaWxkTGlzdCwgc3VidHJlZSwgYXR0cmlidXRlT2xkVmFsdWUsIGNoYXJhY3RlckRhdGEsIGNoYXJhY3RlckRhdGFPbGRWYWx1ZSxcbiAqIGFuZCBhdHRyaWJ1dGVGaWx0ZXIuXG4gKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxNdXRhdGlvblJlY29yZD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIGBNdXRhdGlvblJlY29yZGAgZWFjaCB0aW1lIGEgbXV0YXRpb25cbiAqIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBvY2N1cnMgaW4gdGhlIG9ic2VydmVkIGVsZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIE9ic2VydmluZyBjaGFuZ2VzIHRvIHRoZSBjaGlsZCBsaXN0IG9mIGFuIGVsZW1lbnRcbiAqIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktZWxlbWVudCcpO1xuICogY29uc3QgbXV0YXRpb25PcHRpb25zID0geyBjaGlsZExpc3Q6IHRydWUgfTtcbiAqXG4gKiBmcm9tRWxlbWVudE11dGF0aW9uJChlbGVtZW50LCBtdXRhdGlvbk9wdGlvbnMpLnN1YnNjcmliZSgobXV0YXRpb24pID0+IGNvbnNvbGUubG9nKCdNdXRhdGlvbiBkZXRlY3RlZDonLCBtdXRhdGlvbikpO1xuICogYGBgXG4gKiBOb3RlOiBBbHdheXMgcmVtZW1iZXIgdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgb2JzZXJ2YWJsZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FbGVtZW50TXV0YXRpb24kKGVsZW1lbnQ6IEVsZW1lbnQsIG9wdGlvbnM6IE11dGF0aW9uT2JzZXJ2ZXJJbml0KTogT2JzZXJ2YWJsZTxNdXRhdGlvblJlY29yZD4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8TXV0YXRpb25SZWNvcmQ+KChvYnNlcnZlcikgPT4ge1xuICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBjcmVhdGVNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyLCAoZXZlbnRzKSA9PiBldmVudHMubGVuZ3RoID4gMCk7XG4gICAgb2JzZXJ2ZXIuYWRkKCgpID0+IG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gIH0pO1xufVxuIl19
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import { createResizeObserver } from '@odx/angular/utils';
|
|
2
2
|
import { debounceTime, Observable } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an RxJS Observable that emits an array of `ResizeObserverEntry` objects whenever
|
|
5
|
+
* the target element's size changes. This function provides a reactive way to observe
|
|
6
|
+
* and respond to changes in an element's dimensions, using the `ResizeObserver` Web API.
|
|
7
|
+
*
|
|
8
|
+
* The observable debounces the emitted values to improve performance and reduce the frequency
|
|
9
|
+
* of change detection runs in Angular applications. The debounce time can be adjusted via
|
|
10
|
+
* the `debounceDuration` parameter.
|
|
11
|
+
*
|
|
12
|
+
* @param {Element} element The DOM element to observe for size changes.
|
|
13
|
+
* @param {number} [debounceDuration=50] The time, in milliseconds, to debounce the emitted
|
|
14
|
+
* values. Defaults to 50ms.
|
|
15
|
+
* @returns {Observable<ResizeObserverEntry[]>} An Observable that emits the resize events
|
|
16
|
+
* for the observed element. Each emission is an array of `ResizeObserverEntry` objects, one
|
|
17
|
+
* for each observed element that experienced a resize.
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* // Observing resize events of an element with a 100ms debounce duration
|
|
21
|
+
* const element = document.getElementById('resizable-element');
|
|
22
|
+
* fromElementResize$(element, 100).subscribe((entries) => console.log('Element resized:', entries));
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Always unsubscribe from the observable to clean up resources and prevent memory leaks.
|
|
26
|
+
*/
|
|
3
27
|
export function fromElementResize$(element, debounceDuration = 50) {
|
|
4
28
|
return new Observable((observer) => {
|
|
5
29
|
const resizeObserver = createResizeObserver((events) => {
|
|
@@ -11,4 +35,4 @@ export function fromElementResize$(element, debounceDuration = 50) {
|
|
|
11
35
|
resizeObserver.observe(element);
|
|
12
36
|
}).pipe(debounceTime(debounceDuration));
|
|
13
37
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS1lbGVtZW50LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9yeGpzL3NyYy9saWIvZnJvbS1lbGVtZW50LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZ0IsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFO0lBQ3hFLE9BQU8sSUFBSSxVQUFVLENBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDeEQsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gUnhKUyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgYFJlc2l6ZU9ic2VydmVyRW50cnlgIG9iamVjdHMgd2hlbmV2ZXJcbiAqIHRoZSB0YXJnZXQgZWxlbWVudCdzIHNpemUgY2hhbmdlcy4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHJlYWN0aXZlIHdheSB0byBvYnNlcnZlXG4gKiBhbmQgcmVzcG9uZCB0byBjaGFuZ2VzIGluIGFuIGVsZW1lbnQncyBkaW1lbnNpb25zLCB1c2luZyB0aGUgYFJlc2l6ZU9ic2VydmVyYCBXZWIgQVBJLlxuICpcbiAqIFRoZSBvYnNlcnZhYmxlIGRlYm91bmNlcyB0aGUgZW1pdHRlZCB2YWx1ZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgcmVkdWNlIHRoZSBmcmVxdWVuY3lcbiAqIG9mIGNoYW5nZSBkZXRlY3Rpb24gcnVucyBpbiBBbmd1bGFyIGFwcGxpY2F0aW9ucy4gVGhlIGRlYm91bmNlIHRpbWUgY2FuIGJlIGFkanVzdGVkIHZpYVxuICogdGhlIGBkZWJvdW5jZUR1cmF0aW9uYCBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBET00gZWxlbWVudCB0byBvYnNlcnZlIGZvciBzaXplIGNoYW5nZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlYm91bmNlRHVyYXRpb249NTBdIFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIGRlYm91bmNlIHRoZSBlbWl0dGVkXG4gKiB2YWx1ZXMuIERlZmF1bHRzIHRvIDUwbXMuXG4gKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc2l6ZSBldmVudHNcbiAqIGZvciB0aGUgb2JzZXJ2ZWQgZWxlbWVudC4gRWFjaCBlbWlzc2lvbiBpcyBhbiBhcnJheSBvZiBgUmVzaXplT2JzZXJ2ZXJFbnRyeWAgb2JqZWN0cywgb25lXG4gKiBmb3IgZWFjaCBvYnNlcnZlZCBlbGVtZW50IHRoYXQgZXhwZXJpZW5jZWQgYSByZXNpemUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIE9ic2VydmluZyByZXNpemUgZXZlbnRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIDEwMG1zIGRlYm91bmNlIGR1cmF0aW9uXG4gKiBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2l6YWJsZS1lbGVtZW50Jyk7XG4gKiBmcm9tRWxlbWVudFJlc2l6ZSQoZWxlbWVudCwgMTAwKS5zdWJzY3JpYmUoKGVudHJpZXMpID0+IGNvbnNvbGUubG9nKCdFbGVtZW50IHJlc2l6ZWQ6JywgZW50cmllcykpO1xuICogYGBgXG4gKlxuICogQWx3YXlzIHVuc3Vic2NyaWJlIGZyb20gdGhlIG9ic2VydmFibGUgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FbGVtZW50UmVzaXplJChlbGVtZW50OiBFbGVtZW50LCBkZWJvdW5jZUR1cmF0aW9uID0gNTApOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPigob2JzZXJ2ZXIpID0+IHtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IGNyZWF0ZVJlc2l6ZU9ic2VydmVyKChldmVudHMpID0+IHtcbiAgICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBvYnNlcnZlci5uZXh0KGV2ZW50cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIuYWRkKCgpID0+IHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgfSkucGlwZShkZWJvdW5jZVRpbWUoZGVib3VuY2VEdXJhdGlvbikpO1xufVxuIl19
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import { fromEvent, merge } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an Observable that emits events of a specific type from one or multiple event targets.
|
|
4
|
+
* It listens to multiple event types on the given target(s) and emits the events through a single
|
|
5
|
+
* Observable stream, simplifying the handling of related event types.
|
|
6
|
+
*
|
|
7
|
+
* @template T The event object type that the Observable will emit.
|
|
8
|
+
* @param {HasEventTargetAddRemove<T> | HasEventTargetAddRemove<T>[]} target The DOM element(s) or event target(s) to listen on.
|
|
9
|
+
* @param {...string[]} events The names of the events to listen for on the target(s).
|
|
10
|
+
* @returns {Observable<T>} An Observable that emits an event each time one of the specified events occurs on the given target(s).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Listen to both 'click' and 'keyup' events on document
|
|
15
|
+
* fromEvents(document, 'click', 'keyup').subscribe(event => {
|
|
16
|
+
* console.log('Event occurred:', event);
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Listen to 'mousemove' event on multiple elements
|
|
20
|
+
* const elements = [document.getElementById('first'), document.getElementById('second')];
|
|
21
|
+
* fromEvents(elements, 'mousemove').subscribe(event => {
|
|
22
|
+
* console.log('Mouse moved over:', event.target);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
2
26
|
export function fromEvents(target, ...events) {
|
|
3
27
|
return merge(...events.map((event) => fromEvent(target, event)));
|
|
4
28
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS1ldmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvcnhqcy9zcmMvbGliL2Zyb20tZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR3BEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUksTUFBaUUsRUFBRSxHQUFHLE1BQWdCO0lBQ2xILE9BQU8sS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEhhc0V2ZW50VGFyZ2V0QWRkUmVtb3ZlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZXZlbnRzIG9mIGEgc3BlY2lmaWMgdHlwZSBmcm9tIG9uZSBvciBtdWx0aXBsZSBldmVudCB0YXJnZXRzLlxuICogSXQgbGlzdGVucyB0byBtdWx0aXBsZSBldmVudCB0eXBlcyBvbiB0aGUgZ2l2ZW4gdGFyZ2V0KHMpIGFuZCBlbWl0cyB0aGUgZXZlbnRzIHRocm91Z2ggYSBzaW5nbGVcbiAqIE9ic2VydmFibGUgc3RyZWFtLCBzaW1wbGlmeWluZyB0aGUgaGFuZGxpbmcgb2YgcmVsYXRlZCBldmVudCB0eXBlcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgZXZlbnQgb2JqZWN0IHR5cGUgdGhhdCB0aGUgT2JzZXJ2YWJsZSB3aWxsIGVtaXQuXG4gKiBAcGFyYW0ge0hhc0V2ZW50VGFyZ2V0QWRkUmVtb3ZlPFQ+IHwgSGFzRXZlbnRUYXJnZXRBZGRSZW1vdmU8VD5bXX0gdGFyZ2V0IFRoZSBET00gZWxlbWVudChzKSBvciBldmVudCB0YXJnZXQocykgdG8gbGlzdGVuIG9uLlxuICogQHBhcmFtIHsuLi5zdHJpbmdbXX0gZXZlbnRzIFRoZSBuYW1lcyBvZiB0aGUgZXZlbnRzIHRvIGxpc3RlbiBmb3Igb24gdGhlIHRhcmdldChzKS5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZXZlbnQgZWFjaCB0aW1lIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50cyBvY2N1cnMgb24gdGhlIGdpdmVuIHRhcmdldChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIExpc3RlbiB0byBib3RoICdjbGljaycgYW5kICdrZXl1cCcgZXZlbnRzIG9uIGRvY3VtZW50XG4gKiBmcm9tRXZlbnRzKGRvY3VtZW50LCAnY2xpY2snLCAna2V5dXAnKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICogICBjb25zb2xlLmxvZygnRXZlbnQgb2NjdXJyZWQ6JywgZXZlbnQpO1xuICogfSk7XG4gKlxuICogLy8gTGlzdGVuIHRvICdtb3VzZW1vdmUnIGV2ZW50IG9uIG11bHRpcGxlIGVsZW1lbnRzXG4gKiBjb25zdCBlbGVtZW50cyA9IFtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZCcpXTtcbiAqIGZyb21FdmVudHMoZWxlbWVudHMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICogICBjb25zb2xlLmxvZygnTW91c2UgbW92ZWQgb3ZlcjonLCBldmVudC50YXJnZXQpO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudHM8VD4odGFyZ2V0OiBIYXNFdmVudFRhcmdldEFkZFJlbW92ZTxUPiB8IEhhc0V2ZW50VGFyZ2V0QWRkUmVtb3ZlPFQ+W10sIC4uLmV2ZW50czogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgcmV0dXJuIG1lcmdlKC4uLmV2ZW50cy5tYXAoKGV2ZW50KSA9PiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudCkpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { startWith } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an Observable from an Angular QueryList. The Observable emits the initial state
|
|
4
|
+
* of the QueryList and continues to emit updates every time the QueryList changes.
|
|
5
|
+
* This utility function is useful for integrating Angular's QueryList changes into
|
|
6
|
+
* the RxJS reactive data flow, allowing developers to apply RxJS operators and
|
|
7
|
+
* subscriptions to respond to QueryList updates.
|
|
8
|
+
*
|
|
9
|
+
* @template T The type of elements contained within the QueryList.
|
|
10
|
+
* @param {QueryList<T>} queryList The QueryList instance to observe.
|
|
11
|
+
* @returns {Observable<QueryList<T>>} An Observable that emits the current state of the QueryList
|
|
12
|
+
* and updates whenever the QueryList changes.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Assuming 'items' is a QueryList of component instances or DOM elements
|
|
16
|
+
* fromQueryList(items).subscribe(queryList => {
|
|
17
|
+
* console.log('QueryList changed:', queryList);
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function fromQueryList(queryList) {
|
|
22
|
+
return queryList.changes.pipe(startWith(queryList));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS1xdWVyeS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3J4anMvc3JjL2xpYi9mcm9tLXF1ZXJ5LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBSSxTQUF1QjtJQUN0RCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSBmcm9tIGFuIEFuZ3VsYXIgUXVlcnlMaXN0LiBUaGUgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgaW5pdGlhbCBzdGF0ZVxuICogb2YgdGhlIFF1ZXJ5TGlzdCBhbmQgY29udGludWVzIHRvIGVtaXQgdXBkYXRlcyBldmVyeSB0aW1lIHRoZSBRdWVyeUxpc3QgY2hhbmdlcy5cbiAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGludGVncmF0aW5nIEFuZ3VsYXIncyBRdWVyeUxpc3QgY2hhbmdlcyBpbnRvXG4gKiB0aGUgUnhKUyByZWFjdGl2ZSBkYXRhIGZsb3csIGFsbG93aW5nIGRldmVsb3BlcnMgdG8gYXBwbHkgUnhKUyBvcGVyYXRvcnMgYW5kXG4gKiBzdWJzY3JpcHRpb25zIHRvIHJlc3BvbmQgdG8gUXVlcnlMaXN0IHVwZGF0ZXMuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgZWxlbWVudHMgY29udGFpbmVkIHdpdGhpbiB0aGUgUXVlcnlMaXN0LlxuICogQHBhcmFtIHtRdWVyeUxpc3Q8VD59IHF1ZXJ5TGlzdCBUaGUgUXVlcnlMaXN0IGluc3RhbmNlIHRvIG9ic2VydmUuXG4gKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxRdWVyeUxpc3Q8VD4+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFF1ZXJ5TGlzdFxuICogYW5kIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIFF1ZXJ5TGlzdCBjaGFuZ2VzLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBc3N1bWluZyAnaXRlbXMnIGlzIGEgUXVlcnlMaXN0IG9mIGNvbXBvbmVudCBpbnN0YW5jZXMgb3IgRE9NIGVsZW1lbnRzXG4gKiBmcm9tUXVlcnlMaXN0KGl0ZW1zKS5zdWJzY3JpYmUocXVlcnlMaXN0ID0+IHtcbiAqICAgY29uc29sZS5sb2coJ1F1ZXJ5TGlzdCBjaGFuZ2VkOicsIHF1ZXJ5TGlzdCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1ZXJ5TGlzdDxUPihxdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxUPik6IE9ic2VydmFibGU8UXVlcnlMaXN0PFQ+PiB7XG4gIHJldHVybiBxdWVyeUxpc3QuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChxdWVyeUxpc3QpKTtcbn1cbiJdfQ==
|
|
@@ -1,10 +1,60 @@
|
|
|
1
1
|
import { inject, InjectionToken } from '@angular/core';
|
|
2
2
|
import { bootstrapApplication } from '@angular/platform-browser';
|
|
3
3
|
import { CacheStorageClient } from '@odx/angular/utils';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a loader function for fetching application environment data over HTTP and caching it.
|
|
6
|
+
* Utilizes `CacheStorageClient` for caching the fetched data to optimize performance and reduce network load.
|
|
7
|
+
*
|
|
8
|
+
* @template Data The type of the data expected from the HTTP request.
|
|
9
|
+
* @param {Function} handler - A function that processes the fetched data and returns a promise resolving to the desired environment data format.
|
|
10
|
+
* @returns {ApplicationEnvironmentLoader<Data, Parameters<CacheStorageClient['request']>>} A loader function that fetches, caches, and processes environment data.
|
|
11
|
+
* @example
|
|
12
|
+
* const environmentLoader = createHttpApplicationEnvironmentLoader(async (dto) => {
|
|
13
|
+
* return { apiEndpoint: dto.apiEndpoint, featureFlags: dto.featureFlags };
|
|
14
|
+
* });
|
|
15
|
+
*/
|
|
4
16
|
export function createHttpApplicationEnvironmentLoader(handler) {
|
|
5
17
|
const cache = new CacheStorageClient('@odx/angular/sdk::ApplicationEnvironment');
|
|
6
18
|
return (...args) => cache.request(...args).then((dto) => handler(dto));
|
|
7
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* The application environment module can be used to load environment data before application startup,
|
|
22
|
+
* that can be used to load environment variables from an external URL.
|
|
23
|
+
*
|
|
24
|
+
* @template Data The type of the environment data.
|
|
25
|
+
* @template Params The types of the parameters accepted by the loader function.
|
|
26
|
+
* @param {ApplicationEnvironmentLoader<Data, Params>} loader - A loader function that asynchronously loads the environment data.
|
|
27
|
+
* @returns An object containing utilities for working with the application environment, including the InjectionToken
|
|
28
|
+
* and functions for loading and bootstrapping the application with the environment.
|
|
29
|
+
* @example
|
|
30
|
+
* To add an application environment to your Angular application, follow the following steps:
|
|
31
|
+
* 1. Create the application environment with your loader:
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { createApplicationEnvironment, createHttpApplicationEnvironmentLoader } from '@odx/angular/sdk';
|
|
34
|
+
* import { z } from 'zod';
|
|
35
|
+
*
|
|
36
|
+
* export const ApplicationConfigSchema = z.object({
|
|
37
|
+
* environment: z.enum(['dev', 'stage', 'prod']),
|
|
38
|
+
* appName: z.string().default('App'),
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* const httpEnvironmentLoader = createHttpApplicationEnvironmentLoader((res) => res.json().then(ApplicationConfigSchema.parse));
|
|
42
|
+
* export const { injectApplicationEnvironment, bootstrapApplicationWithEnvironment } = createApplicationEnvironment(httpEnvironmentLoader);
|
|
43
|
+
* ```
|
|
44
|
+
* This example creates an HTTP environment loader which parses the response as JSON and validate it against a schema
|
|
45
|
+
*
|
|
46
|
+
* 2. Provide the application environment:
|
|
47
|
+
* ```ts
|
|
48
|
+
* bootstrapApplicationWithEnvironment(['assets/config.json'], AppComponent, { providers: [] });
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* 3. Use the application environment via DI
|
|
52
|
+
* ```ts
|
|
53
|
+
* class MyService {
|
|
54
|
+
* private readonly environment = injectApplicationEnvironment();
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
8
58
|
export function createApplicationEnvironment(loader) {
|
|
9
59
|
let environment;
|
|
10
60
|
const APPLICATION_ENVIRONMENT = new InjectionToken('@odx/angular/sdk::ApplicationEnvironment', {
|
|
@@ -32,4 +82,4 @@ export function createApplicationEnvironment(loader) {
|
|
|
32
82
|
loadApplicationEnvironment,
|
|
33
83
|
};
|
|
34
84
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc2RrL3NyYy9saWIvYXBwbGljYXRpb24tZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBYXhEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUNwRCxPQUF3QztJQUV4QyxNQUFNLEtBQUssR0FBRyxJQUFJLGtCQUFrQixDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFakYsT0FBTyxDQUFDLEdBQUcsSUFBK0MsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBVSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFpQyxNQUFrRDtJQUM3SCxJQUFJLFdBQWlCLENBQUM7SUFDdEIsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBTywwQ0FBMEMsRUFBRTtRQUNuRyxVQUFVLEVBQUUsTUFBTTtRQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBbUI7S0FDbkMsQ0FBQyxDQUFDO0lBRUgsU0FBUyw0QkFBNEI7UUFDbkMsT0FBTyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxVQUFVLDBCQUEwQixDQUFDLEdBQUcsSUFBK0I7UUFDMUUsV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxVQUFVLG1DQUFtQyxDQUNoRCxNQUFpQyxFQUNqQyxHQUFHLElBQTZDO1FBRWhELE1BQU0sMEJBQTBCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUU1QyxPQUFPLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDTCx1QkFBdUI7UUFDdkIsNEJBQTRCO1FBQzVCLG1DQUFtQztRQUNuQywwQkFBMEI7S0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYm9vdHN0cmFwQXBwbGljYXRpb24gfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENhY2hlU3RvcmFnZUNsaWVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0eXBlIGRlZmluaXRpb24gZm9yIGxvYWRpbmcgZW52aXJvbm1lbnQgZGF0YSBmb3IgYW4gYXBwbGljYXRpb24uXG4gKiBJdCdzIGEgZ2VuZXJpYyBsb2FkZXIgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBQcm9taXNlIG9mIGVudmlyb25tZW50IGRhdGEuXG4gKlxuICogQHRlbXBsYXRlIEVudmlyb25tZW50RGF0YSBUaGUgdHlwZSBvZiB0aGUgZW52aXJvbm1lbnQgZGF0YSB0byBiZSBsb2FkZWQuXG4gKiBAdGVtcGxhdGUgUGFyYW1zIFRoZSB0eXBlcyBvZiB0aGUgcGFyYW1ldGVycyBhY2NlcHRlZCBieSB0aGUgbG9hZGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsuLi5QYXJhbXN9IGFyZ3MgLSBQYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgbG9hZGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8RW52aXJvbm1lbnREYXRhPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgbG9hZGVkIGVudmlyb25tZW50IGRhdGEuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcGxpY2F0aW9uRW52aXJvbm1lbnRMb2FkZXI8RW52aXJvbm1lbnREYXRhLCBQYXJhbXMgZXh0ZW5kcyB1bmtub3duW10+ID0gKC4uLmFyZ3M6IFBhcmFtcykgPT4gUHJvbWlzZTxFbnZpcm9ubWVudERhdGE+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2FkZXIgZnVuY3Rpb24gZm9yIGZldGNoaW5nIGFwcGxpY2F0aW9uIGVudmlyb25tZW50IGRhdGEgb3ZlciBIVFRQIGFuZCBjYWNoaW5nIGl0LlxuICogVXRpbGl6ZXMgYENhY2hlU3RvcmFnZUNsaWVudGAgZm9yIGNhY2hpbmcgdGhlIGZldGNoZWQgZGF0YSB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgcmVkdWNlIG5ldHdvcmsgbG9hZC5cbiAqXG4gKiBAdGVtcGxhdGUgRGF0YSBUaGUgdHlwZSBvZiB0aGUgZGF0YSBleHBlY3RlZCBmcm9tIHRoZSBIVFRQIHJlcXVlc3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBmdW5jdGlvbiB0aGF0IHByb2Nlc3NlcyB0aGUgZmV0Y2hlZCBkYXRhIGFuZCByZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgZGF0YSBmb3JtYXQuXG4gKiBAcmV0dXJucyB7QXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlcjxEYXRhLCBQYXJhbWV0ZXJzPENhY2hlU3RvcmFnZUNsaWVudFsncmVxdWVzdCddPj59IEEgbG9hZGVyIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcywgY2FjaGVzLCBhbmQgcHJvY2Vzc2VzIGVudmlyb25tZW50IGRhdGEuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZW52aXJvbm1lbnRMb2FkZXIgPSBjcmVhdGVIdHRwQXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlcihhc3luYyAoZHRvKSA9PiB7XG4gKiAgIHJldHVybiB7IGFwaUVuZHBvaW50OiBkdG8uYXBpRW5kcG9pbnQsIGZlYXR1cmVGbGFnczogZHRvLmZlYXR1cmVGbGFncyB9O1xuICogfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIdHRwQXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlcjxEYXRhPihcbiAgaGFuZGxlcjogKGR0bzogdW5rbm93bikgPT4gUHJvbWlzZTxEYXRhPixcbik6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRMb2FkZXI8RGF0YSwgUGFyYW1ldGVyczxDYWNoZVN0b3JhZ2VDbGllbnRbJ3JlcXVlc3QnXT4+IHtcbiAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGVTdG9yYWdlQ2xpZW50KCdAb2R4L2FuZ3VsYXIvc2RrOjpBcHBsaWNhdGlvbkVudmlyb25tZW50Jyk7XG5cbiAgcmV0dXJuICguLi5hcmdzOiBQYXJhbWV0ZXJzPENhY2hlU3RvcmFnZUNsaWVudFsncmVxdWVzdCddPikgPT4gY2FjaGUucmVxdWVzdDx1bmtub3duPiguLi5hcmdzKS50aGVuKChkdG8pID0+IGhhbmRsZXIoZHRvKSk7XG59XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIGVudmlyb25tZW50IG1vZHVsZSBjYW4gYmUgdXNlZCB0byBsb2FkIGVudmlyb25tZW50IGRhdGEgYmVmb3JlIGFwcGxpY2F0aW9uIHN0YXJ0dXAsXG4gKiB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gYW4gZXh0ZXJuYWwgVVJMLlxuICpcbiAqIEB0ZW1wbGF0ZSBEYXRhIFRoZSB0eXBlIG9mIHRoZSBlbnZpcm9ubWVudCBkYXRhLlxuICogQHRlbXBsYXRlIFBhcmFtcyBUaGUgdHlwZXMgb2YgdGhlIHBhcmFtZXRlcnMgYWNjZXB0ZWQgYnkgdGhlIGxvYWRlciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlcjxEYXRhLCBQYXJhbXM+fSBsb2FkZXIgLSBBIGxvYWRlciBmdW5jdGlvbiB0aGF0IGFzeW5jaHJvbm91c2x5IGxvYWRzIHRoZSBlbnZpcm9ubWVudCBkYXRhLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggdGhlIGFwcGxpY2F0aW9uIGVudmlyb25tZW50LCBpbmNsdWRpbmcgdGhlIEluamVjdGlvblRva2VuXG4gKiAgICAgICAgICBhbmQgZnVuY3Rpb25zIGZvciBsb2FkaW5nIGFuZCBib290c3RyYXBwaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBlbnZpcm9ubWVudC5cbiAqIEBleGFtcGxlXG4gKiBUbyBhZGQgYW4gYXBwbGljYXRpb24gZW52aXJvbm1lbnQgdG8geW91ciBBbmd1bGFyIGFwcGxpY2F0aW9uLCBmb2xsb3cgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAqIDEuIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZW52aXJvbm1lbnQgd2l0aCB5b3VyIGxvYWRlcjpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHBsaWNhdGlvbkVudmlyb25tZW50LCBjcmVhdGVIdHRwQXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9zZGsnO1xuICogaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG4gKlxuICogZXhwb3J0IGNvbnN0IEFwcGxpY2F0aW9uQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICogICBlbnZpcm9ubWVudDogei5lbnVtKFsnZGV2JywgJ3N0YWdlJywgJ3Byb2QnXSksXG4gKiAgIGFwcE5hbWU6IHouc3RyaW5nKCkuZGVmYXVsdCgnQXBwJyksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBodHRwRW52aXJvbm1lbnRMb2FkZXIgPSBjcmVhdGVIdHRwQXBwbGljYXRpb25FbnZpcm9ubWVudExvYWRlcigocmVzKSA9PiByZXMuanNvbigpLnRoZW4oQXBwbGljYXRpb25Db25maWdTY2hlbWEucGFyc2UpKTtcbiAqIGV4cG9ydCBjb25zdCB7IGluamVjdEFwcGxpY2F0aW9uRW52aXJvbm1lbnQsIGJvb3RzdHJhcEFwcGxpY2F0aW9uV2l0aEVudmlyb25tZW50IH0gPSBjcmVhdGVBcHBsaWNhdGlvbkVudmlyb25tZW50KGh0dHBFbnZpcm9ubWVudExvYWRlcik7XG4gKiBgYGBcbiAqIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGFuIEhUVFAgZW52aXJvbm1lbnQgbG9hZGVyIHdoaWNoIHBhcnNlcyB0aGUgcmVzcG9uc2UgYXMgSlNPTiBhbmQgdmFsaWRhdGUgaXQgYWdhaW5zdCBhIHNjaGVtYVxuICpcbiAqIDIuIFByb3ZpZGUgdGhlIGFwcGxpY2F0aW9uIGVudmlyb25tZW50OlxuICogYGBgdHNcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uV2l0aEVudmlyb25tZW50KFsnYXNzZXRzL2NvbmZpZy5qc29uJ10sIEFwcENvbXBvbmVudCwgeyBwcm92aWRlcnM6IFtdIH0pO1xuICogYGBgXG4gKlxuICogMy4gVXNlIHRoZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudCB2aWEgRElcbiAqIGBgYHRzXG4gKiBjbGFzcyBNeVNlcnZpY2Uge1xuICogICBwcml2YXRlIHJlYWRvbmx5IGVudmlyb25tZW50ID0gaW5qZWN0QXBwbGljYXRpb25FbnZpcm9ubWVudCgpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBsaWNhdGlvbkVudmlyb25tZW50PERhdGEsIFBhcmFtcyBleHRlbmRzIHVua25vd25bXT4obG9hZGVyOiBBcHBsaWNhdGlvbkVudmlyb25tZW50TG9hZGVyPERhdGEsIFBhcmFtcz4pIHtcbiAgbGV0IGVudmlyb25tZW50OiBEYXRhO1xuICBjb25zdCBBUFBMSUNBVElPTl9FTlZJUk9OTUVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhPignQG9keC9hbmd1bGFyL3Nkazo6QXBwbGljYXRpb25FbnZpcm9ubWVudCcsIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gZW52aXJvbm1lbnQgYXMgRGF0YSxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gaW5qZWN0QXBwbGljYXRpb25FbnZpcm9ubWVudCgpOiBEYXRhIHtcbiAgICByZXR1cm4gaW5qZWN0KEFQUExJQ0FUSU9OX0VOVklST05NRU5UKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRBcHBsaWNhdGlvbkVudmlyb25tZW50KC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGxvYWRlcj4pOiBQcm9taXNlPERhdGE+IHtcbiAgICBlbnZpcm9ubWVudCA9IGF3YWl0IGxvYWRlciguLi5hcmdzKTtcbiAgICBpZiAoIWVudmlyb25tZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tAb2R4L2FuZ3VsYXIvc2RrXSBGYWlsZWQgbG9hZCBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudCcpO1xuICAgIH1cbiAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBcHBsaWNhdGlvbldpdGhFbnZpcm9ubWVudChcbiAgICBwYXJhbXM6IFBhcmFtZXRlcnM8dHlwZW9mIGxvYWRlcj4sXG4gICAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgYm9vdHN0cmFwQXBwbGljYXRpb24+XG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZWY+IHtcbiAgICBhd2FpdCBsb2FkQXBwbGljYXRpb25FbnZpcm9ubWVudCguLi5wYXJhbXMpO1xuXG4gICAgcmV0dXJuIGJvb3RzdHJhcEFwcGxpY2F0aW9uKC4uLmFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBBUFBMSUNBVElPTl9FTlZJUk9OTUVOVCxcbiAgICBpbmplY3RBcHBsaWNhdGlvbkVudmlyb25tZW50LFxuICAgIGJvb3RzdHJhcEFwcGxpY2F0aW9uV2l0aEVudmlyb25tZW50LFxuICAgIGxvYWRBcHBsaWNhdGlvbkVudmlyb25tZW50LFxuICB9O1xufVxuIl19
|
|
@@ -1,4 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines whether the user's system preferences indicate a preference for dark themes.
|
|
3
|
+
* This is achieved by querying the '(prefers-color-scheme: dark)' media feature, which reflects
|
|
4
|
+
* the user's preference for a light or dark color scheme in their operating system's UI.
|
|
5
|
+
*
|
|
6
|
+
* @param {Window} view - The window object, typically `window`, from which to access the matchMedia method.
|
|
7
|
+
* @returns {boolean} `true` if the user prefers a dark theme, otherwise `false`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* Example usage in a web application to toggle themes:
|
|
11
|
+
* ```ts
|
|
12
|
+
* if (prefersDarkTheme(window)) {
|
|
13
|
+
* document.body.classList.add('dark-theme');
|
|
14
|
+
* } else {
|
|
15
|
+
* document.body.classList.remove('dark-theme');
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
1
19
|
export function prefersDarkTheme(view) {
|
|
2
20
|
return !!view.matchMedia?.('(prefers-color-scheme: dark)')?.matches;
|
|
3
21
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVycy1kYXJrLXRoZW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RoZW1pbmcvc3JjL2xpYi9oZWxwZXJzL3ByZWZlcnMtZGFyay10aGVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWTtJQUMzQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsOEJBQThCLENBQUMsRUFBRSxPQUFPLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB1c2VyJ3Mgc3lzdGVtIHByZWZlcmVuY2VzIGluZGljYXRlIGEgcHJlZmVyZW5jZSBmb3IgZGFyayB0aGVtZXMuXG4gKiBUaGlzIGlzIGFjaGlldmVkIGJ5IHF1ZXJ5aW5nIHRoZSAnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScgbWVkaWEgZmVhdHVyZSwgd2hpY2ggcmVmbGVjdHNcbiAqIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZSBmb3IgYSBsaWdodCBvciBkYXJrIGNvbG9yIHNjaGVtZSBpbiB0aGVpciBvcGVyYXRpbmcgc3lzdGVtJ3MgVUkuXG4gKlxuICogQHBhcmFtIHtXaW5kb3d9IHZpZXcgLSBUaGUgd2luZG93IG9iamVjdCwgdHlwaWNhbGx5IGB3aW5kb3dgLCBmcm9tIHdoaWNoIHRvIGFjY2VzcyB0aGUgbWF0Y2hNZWRpYSBtZXRob2QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB1c2VyIHByZWZlcnMgYSBkYXJrIHRoZW1lLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogRXhhbXBsZSB1c2FnZSBpbiBhIHdlYiBhcHBsaWNhdGlvbiB0byB0b2dnbGUgdGhlbWVzOlxuICogYGBgdHNcbiAqIGlmIChwcmVmZXJzRGFya1RoZW1lKHdpbmRvdykpIHtcbiAqICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkYXJrLXRoZW1lJyk7XG4gKiB9IGVsc2Uge1xuICogICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmstdGhlbWUnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmZXJzRGFya1RoZW1lKHZpZXc6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISF2aWV3Lm1hdGNoTWVkaWE/LignKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpPy5tYXRjaGVzO1xufVxuIl19
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import { availableThemes } from '../models';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the specified theme by checking if it exists in the predefined list of available themes.
|
|
4
|
+
* This function ensures that only valid themes are used in the application, providing a safeguard
|
|
5
|
+
* against invalid theme names and facilitating the dynamic application of themes.
|
|
6
|
+
*
|
|
7
|
+
* @param {string | null} [theme] - The name of the theme to resolve. It's optional and can be `null`.
|
|
8
|
+
* @returns {Theme | null} - Returns the resolved `Theme` object if the theme is found within the list of `availableThemes`;
|
|
9
|
+
* otherwise, returns `null` to indicate the theme is not recognized or available.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Assuming 'dark' and 'light' are in the availableThemes array
|
|
14
|
+
* console.log(resolveTheme('dark')); // Outputs the 'dark' Theme object
|
|
15
|
+
* console.log(resolveTheme('unknown')); // Outputs null
|
|
16
|
+
*
|
|
17
|
+
* // Using resolveTheme to apply a user-selected theme
|
|
18
|
+
* const userSelectedTheme = getUserSelectedTheme(); // This function gets the user's theme choice
|
|
19
|
+
* const themeToApply = resolveTheme(userSelectedTheme);
|
|
20
|
+
* if (themeToApply) {
|
|
21
|
+
* applyTheme(themeToApply); // This function applies the resolved theme to the application
|
|
22
|
+
* } else {
|
|
23
|
+
* console.warn('Selected theme is not available.');
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
2
27
|
export function resolveTheme(theme) {
|
|
3
28
|
return availableThemes.find((t) => t === theme) ?? null;
|
|
4
29
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS10aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy9yZXNvbHZlLXRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVMsTUFBTSxXQUFXLENBQUM7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBcUI7SUFDaEQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdmFpbGFibGVUaGVtZXMsIFRoZW1lIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgc3BlY2lmaWVkIHRoZW1lIGJ5IGNoZWNraW5nIGlmIGl0IGV4aXN0cyBpbiB0aGUgcHJlZGVmaW5lZCBsaXN0IG9mIGF2YWlsYWJsZSB0aGVtZXMuXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IHZhbGlkIHRoZW1lcyBhcmUgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24sIHByb3ZpZGluZyBhIHNhZmVndWFyZFxuICogYWdhaW5zdCBpbnZhbGlkIHRoZW1lIG5hbWVzIGFuZCBmYWNpbGl0YXRpbmcgdGhlIGR5bmFtaWMgYXBwbGljYXRpb24gb2YgdGhlbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW3RoZW1lXSAtIFRoZSBuYW1lIG9mIHRoZSB0aGVtZSB0byByZXNvbHZlLiBJdCdzIG9wdGlvbmFsIGFuZCBjYW4gYmUgYG51bGxgLlxuICogQHJldHVybnMge1RoZW1lIHwgbnVsbH0gLSBSZXR1cm5zIHRoZSByZXNvbHZlZCBgVGhlbWVgIG9iamVjdCBpZiB0aGUgdGhlbWUgaXMgZm91bmQgd2l0aGluIHRoZSBsaXN0IG9mIGBhdmFpbGFibGVUaGVtZXNgO1xuICogb3RoZXJ3aXNlLCByZXR1cm5zIGBudWxsYCB0byBpbmRpY2F0ZSB0aGUgdGhlbWUgaXMgbm90IHJlY29nbml6ZWQgb3IgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gQXNzdW1pbmcgJ2RhcmsnIGFuZCAnbGlnaHQnIGFyZSBpbiB0aGUgYXZhaWxhYmxlVGhlbWVzIGFycmF5XG4gKiBjb25zb2xlLmxvZyhyZXNvbHZlVGhlbWUoJ2RhcmsnKSk7IC8vIE91dHB1dHMgdGhlICdkYXJrJyBUaGVtZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVUaGVtZSgndW5rbm93bicpKTsgLy8gT3V0cHV0cyBudWxsXG4gKlxuICogLy8gVXNpbmcgcmVzb2x2ZVRoZW1lIHRvIGFwcGx5IGEgdXNlci1zZWxlY3RlZCB0aGVtZVxuICogY29uc3QgdXNlclNlbGVjdGVkVGhlbWUgPSBnZXRVc2VyU2VsZWN0ZWRUaGVtZSgpOyAvLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHVzZXIncyB0aGVtZSBjaG9pY2VcbiAqIGNvbnN0IHRoZW1lVG9BcHBseSA9IHJlc29sdmVUaGVtZSh1c2VyU2VsZWN0ZWRUaGVtZSk7XG4gKiBpZiAodGhlbWVUb0FwcGx5KSB7XG4gKiAgIGFwcGx5VGhlbWUodGhlbWVUb0FwcGx5KTsgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSByZXNvbHZlZCB0aGVtZSB0byB0aGUgYXBwbGljYXRpb25cbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUud2FybignU2VsZWN0ZWQgdGhlbWUgaXMgbm90IGF2YWlsYWJsZS4nKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHRoZW1lPzogc3RyaW5nIHwgbnVsbCk6IFRoZW1lIHwgbnVsbCB7XG4gIHJldHVybiBhdmFpbGFibGVUaGVtZXMuZmluZCgodCkgPT4gdCA9PT0gdGhlbWUpID8/IG51bGw7XG59XG4iXX0=
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { resolveTheme } from './resolve-theme';
|
|
2
|
+
/**
|
|
3
|
+
* The key used to store the selected theme in `Storage`.
|
|
4
|
+
* This constant ensures consistent access to the theme setting across the application.
|
|
5
|
+
*/
|
|
2
6
|
export const THEME_STORAGE_NAME = '@odx/angular/theming:SelectedTheme';
|
|
7
|
+
/**
|
|
8
|
+
* Saves the specified theme to storage. This function abstracts the storage interaction,
|
|
9
|
+
* providing a fail-safe mechanism to avoid exceptions if the storage is not available.
|
|
10
|
+
*
|
|
11
|
+
* @param {Storage | null | undefined} storage - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
|
|
12
|
+
* @param {Theme} theme - The theme to save. Should be a value that is recognized by the application's theming system.
|
|
13
|
+
* @throws Will silently catch and ignore any exceptions caused by storage limitations or permissions.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* // Example usage with localStorage
|
|
18
|
+
* saveTheme(localStorage, 'dark');
|
|
19
|
+
*
|
|
20
|
+
* // Using sessionStorage instead
|
|
21
|
+
* saveTheme(sessionStorage, 'light');
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
3
24
|
export function saveTheme(storage, theme) {
|
|
4
25
|
try {
|
|
5
26
|
storage?.setItem(THEME_STORAGE_NAME, theme);
|
|
@@ -8,6 +29,27 @@ export function saveTheme(storage, theme) {
|
|
|
8
29
|
//
|
|
9
30
|
}
|
|
10
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Reads the theme from storage, attempting to resolve it to a valid application theme.
|
|
34
|
+
* If the theme cannot be found or is invalid, `null` is returned. This function also provides
|
|
35
|
+
* error handling for any storage access issues, ensuring the application can gracefully handle
|
|
36
|
+
* scenarios where storage is not available or accessible.
|
|
37
|
+
*
|
|
38
|
+
* @param {Storage | null} [storage] - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
|
|
39
|
+
* @returns {Theme | null} - The resolved theme if found and valid; otherwise, `null`.
|
|
40
|
+
* @throws Will silently catch and ignore any exceptions caused by storage access, returning `null`.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* // Reading theme from localStorage
|
|
45
|
+
* const theme = readTheme(localStorage);
|
|
46
|
+
* if (theme) {
|
|
47
|
+
* applyTheme(theme); // Assuming applyTheme is a function to apply the theme
|
|
48
|
+
* } else {
|
|
49
|
+
* console.warn('No saved theme found or theme is invalid.');
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
11
53
|
export function readTheme(storage) {
|
|
12
54
|
try {
|
|
13
55
|
return resolveTheme(storage?.getItem(THEME_STORAGE_NAME)) ?? null;
|
|
@@ -16,4 +58,4 @@ export function readTheme(storage) {
|
|
|
16
58
|
return null;
|
|
17
59
|
}
|
|
18
60
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy90aGVtZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBbUMsRUFBRSxLQUFZO0lBQ3pFLElBQUk7UUFDRixPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBQUMsTUFBTTtRQUNOLEVBQUU7S0FDSDtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQXdCO0lBQ2hELElBQUk7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDbkU7SUFBQyxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyByZXNvbHZlVGhlbWUgfSBmcm9tICcuL3Jlc29sdmUtdGhlbWUnO1xuXG4vKipcbiAqIFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgc2VsZWN0ZWQgdGhlbWUgaW4gYFN0b3JhZ2VgLlxuICogVGhpcyBjb25zdGFudCBlbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSB0aGVtZSBzZXR0aW5nIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVNRV9TVE9SQUdFX05BTUUgPSAnQG9keC9hbmd1bGFyL3RoZW1pbmc6U2VsZWN0ZWRUaGVtZSc7XG5cbi8qKlxuICogU2F2ZXMgdGhlIHNwZWNpZmllZCB0aGVtZSB0byBzdG9yYWdlLiBUaGlzIGZ1bmN0aW9uIGFic3RyYWN0cyB0aGUgc3RvcmFnZSBpbnRlcmFjdGlvbixcbiAqIHByb3ZpZGluZyBhIGZhaWwtc2FmZSBtZWNoYW5pc20gdG8gYXZvaWQgZXhjZXB0aW9ucyBpZiB0aGUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSB7U3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWR9IHN0b3JhZ2UgLSBUaGUgc3RvcmFnZSBtZWNoYW5pc20gdG8gdXNlLCB0eXBpY2FsbHkgYGxvY2FsU3RvcmFnZWAgb3IgYHNlc3Npb25TdG9yYWdlYC5cbiAqIEBwYXJhbSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHNhdmUuIFNob3VsZCBiZSBhIHZhbHVlIHRoYXQgaXMgcmVjb2duaXplZCBieSB0aGUgYXBwbGljYXRpb24ncyB0aGVtaW5nIHN5c3RlbS5cbiAqIEB0aHJvd3MgV2lsbCBzaWxlbnRseSBjYXRjaCBhbmQgaWdub3JlIGFueSBleGNlcHRpb25zIGNhdXNlZCBieSBzdG9yYWdlIGxpbWl0YXRpb25zIG9yIHBlcm1pc3Npb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRXhhbXBsZSB1c2FnZSB3aXRoIGxvY2FsU3RvcmFnZVxuICogc2F2ZVRoZW1lKGxvY2FsU3RvcmFnZSwgJ2RhcmsnKTtcbiAqXG4gKiAvLyBVc2luZyBzZXNzaW9uU3RvcmFnZSBpbnN0ZWFkXG4gKiBzYXZlVGhlbWUoc2Vzc2lvblN0b3JhZ2UsICdsaWdodCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlVGhlbWUoc3RvcmFnZTogU3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWQsIHRoZW1lOiBUaGVtZSk6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2U/LnNldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FLCB0aGVtZSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgdGhlbWUgZnJvbSBzdG9yYWdlLCBhdHRlbXB0aW5nIHRvIHJlc29sdmUgaXQgdG8gYSB2YWxpZCBhcHBsaWNhdGlvbiB0aGVtZS5cbiAqIElmIHRoZSB0aGVtZSBjYW5ub3QgYmUgZm91bmQgb3IgaXMgaW52YWxpZCwgYG51bGxgIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIGFsc28gcHJvdmlkZXNcbiAqIGVycm9yIGhhbmRsaW5nIGZvciBhbnkgc3RvcmFnZSBhY2Nlc3MgaXNzdWVzLCBlbnN1cmluZyB0aGUgYXBwbGljYXRpb24gY2FuIGdyYWNlZnVsbHkgaGFuZGxlXG4gKiBzY2VuYXJpb3Mgd2hlcmUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtTdG9yYWdlIHwgbnVsbH0gW3N0b3JhZ2VdIC0gVGhlIHN0b3JhZ2UgbWVjaGFuaXNtIHRvIHVzZSwgdHlwaWNhbGx5IGBsb2NhbFN0b3JhZ2VgIG9yIGBzZXNzaW9uU3RvcmFnZWAuXG4gKiBAcmV0dXJucyB7VGhlbWUgfCBudWxsfSAtIFRoZSByZXNvbHZlZCB0aGVtZSBpZiBmb3VuZCBhbmQgdmFsaWQ7IG90aGVyd2lzZSwgYG51bGxgLlxuICogQHRocm93cyBXaWxsIHNpbGVudGx5IGNhdGNoIGFuZCBpZ25vcmUgYW55IGV4Y2VwdGlvbnMgY2F1c2VkIGJ5IHN0b3JhZ2UgYWNjZXNzLCByZXR1cm5pbmcgYG51bGxgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUmVhZGluZyB0aGVtZSBmcm9tIGxvY2FsU3RvcmFnZVxuICogY29uc3QgdGhlbWUgPSByZWFkVGhlbWUobG9jYWxTdG9yYWdlKTtcbiAqIGlmICh0aGVtZSkge1xuICogICBhcHBseVRoZW1lKHRoZW1lKTsgLy8gQXNzdW1pbmcgYXBwbHlUaGVtZSBpcyBhIGZ1bmN0aW9uIHRvIGFwcGx5IHRoZSB0aGVtZVxuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS53YXJuKCdObyBzYXZlZCB0aGVtZSBmb3VuZCBvciB0aGVtZSBpcyBpbnZhbGlkLicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGhlbWUoc3RvcmFnZT86IFN0b3JhZ2UgfCBudWxsKTogVGhlbWUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzb2x2ZVRoZW1lKHN0b3JhZ2U/LmdldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FKSkgPz8gbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|