@odx/angular 5.7.4 → 6.0.1
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 +17 -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/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 +17 -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 +41 -93
- 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 -9
- package/components/calendar/lib/directives/calendar-view.directive.d.ts +41 -9
- package/components/calendar/lib/pipes/date-label.pipe.d.ts +12 -21
- 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 +2 -2
- 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/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/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/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 +39 -1
- 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/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 +18 -1
- 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 -12
- 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 +9 -3
- package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +9 -3
- package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +9 -3
- package/esm2022/components/calendar/lib/daterange.service.mjs +17 -1
- package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +27 -2
- package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +39 -1
- package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +27 -9
- 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 +11 -8
- 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/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 +47 -6
- 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 +56 -2
- 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 +70 -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/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/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/fast-equals.mjs +3 -0
- package/esm2022/internal/lib/helpers/index.mjs +2 -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 +73 -5
- package/esm2022/localization/lib/localization.logger.mjs +3 -0
- package/esm2022/localization/lib/localization.service.mjs +59 -29
- 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 +38 -0
- 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 +188 -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 +17 -0
- 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 +270 -33
- 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 +11 -0
- 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 +122 -7
- 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 +97 -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 +61 -0
- 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 +52 -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 +4 -1
- package/fesm2022/odx-angular-internal.mjs.map +1 -1
- package/fesm2022/odx-angular-localization.mjs +269 -32
- 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/fast-equals.d.ts +1 -0
- package/internal/lib/helpers/index.d.ts +1 -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 -2
- package/localization/lib/localization.logger.d.ts +3 -0
- package/localization/lib/localization.service.d.ts +42 -7
- package/package.json +8 -7
- 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
|
@@ -6,43 +6,109 @@ import { fromEvents } from '@odx/angular/rxjs';
|
|
|
6
6
|
import { getLanguageCode } from '@odx/angular/utils';
|
|
7
7
|
import { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* A service that wraps window and document functionalities, providing Angular-friendly ways to interact with the browser's window object,
|
|
11
|
+
* manage the document and its title, listen to online/offline events, and perform other browser-related operations.
|
|
12
|
+
*/
|
|
9
13
|
export class WindowRef {
|
|
10
14
|
constructor() {
|
|
11
15
|
this.title = inject(Title);
|
|
16
|
+
/**
|
|
17
|
+
* Accesses the document object, ensuring Angular compatibility and potential SSR friendliness.
|
|
18
|
+
*/
|
|
12
19
|
this.document = inject(DOCUMENT);
|
|
20
|
+
/**
|
|
21
|
+
* Retrieves the native window object, with a fallback to the global window if necessary.
|
|
22
|
+
* This approach helps ensure compatibility with Angular's SSR features.
|
|
23
|
+
*/
|
|
13
24
|
this.nativeWindow = this.document.defaultView ?? window;
|
|
25
|
+
/**
|
|
26
|
+
* An observable that emits the online status of the browser, updating when the browser transitions between online and offline states.
|
|
27
|
+
*/
|
|
14
28
|
this.isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(startWith(null), map(() => this.isOnline()), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
29
|
+
/**
|
|
30
|
+
* An observable that emits the current page title upon navigation ends, useful for updating document titles in SPA applications.
|
|
31
|
+
*/
|
|
15
32
|
this.pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(filter((event) => event instanceof NavigationEnd), startWith(null), debounceTime(0), map(() => this.title.getTitle()), shareReplay({ bufferSize: 1, refCount: true }));
|
|
16
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Gets the location object of the window.
|
|
36
|
+
* @returns The location object of the window.
|
|
37
|
+
*/
|
|
17
38
|
get location() {
|
|
18
39
|
return this.nativeWindow.location;
|
|
19
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Determines if the browser is currently online.
|
|
43
|
+
* @returns {boolean} True if the browser is online; otherwise, false.
|
|
44
|
+
*/
|
|
20
45
|
isOnline() {
|
|
21
46
|
return this.nativeWindow.navigator.onLine;
|
|
22
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Retrieves the browser's current language setting, falling back through several browser-specific properties.
|
|
50
|
+
* @returns {string} The current language setting of the browser.
|
|
51
|
+
*/
|
|
23
52
|
getLanguage() {
|
|
24
53
|
const { language, languages, userLanguage } = this.nativeWindow.navigator;
|
|
25
54
|
return languages?.[0] ?? userLanguage ?? language;
|
|
26
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Extracts the language code from the browser's current language setting.
|
|
58
|
+
* @returns {string} The language code part of the browser's language setting.
|
|
59
|
+
*/
|
|
27
60
|
getLanguageCode() {
|
|
28
61
|
return getLanguageCode(this.getLanguage());
|
|
29
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns the origin of the current window location.
|
|
65
|
+
*
|
|
66
|
+
* @returns The origin of the current window location.
|
|
67
|
+
*/
|
|
30
68
|
getOrigin() {
|
|
31
69
|
return this.location.origin;
|
|
32
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Opens a new browser tab or window and navigates to the specified URL.
|
|
73
|
+
* @param {string | URL} [url] - The URL to open.
|
|
74
|
+
* @param {string} [target] - The target window or tab.
|
|
75
|
+
* @param {string} [features] - String that specifies the window features.
|
|
76
|
+
* @returns {WindowProxy | null} A reference to the newly opened window or null if the call failed.
|
|
77
|
+
*/
|
|
33
78
|
openPage(url, target, features) {
|
|
34
79
|
return this.nativeWindow.open(url, target, features);
|
|
35
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Reloads the current page.
|
|
83
|
+
*/
|
|
36
84
|
reloadPage() {
|
|
37
85
|
return this.location.reload();
|
|
38
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Queries the DOM for an element associated with a specific Angular component type.
|
|
89
|
+
* @template T The component type to query for.
|
|
90
|
+
* @param {Type<T>} type - The Angular component type.
|
|
91
|
+
* @returns {HTMLElement | null} The HTML element associated with the component, or null if not found.
|
|
92
|
+
*/
|
|
39
93
|
queryByComponent(type) {
|
|
40
94
|
const componentType = reflectComponentType(type);
|
|
41
95
|
return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;
|
|
42
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Retrieves the value of a CSS variable on a specified element.
|
|
99
|
+
* @param {string} name - The name of the CSS variable.
|
|
100
|
+
* @param {HTMLElement} [element=this.document.body] - The element from which to retrieve the CSS variable.
|
|
101
|
+
* @returns {string} The value of the CSS variable.
|
|
102
|
+
*/
|
|
43
103
|
getCSSVariable(name, element = this.document.body) {
|
|
44
104
|
return this.nativeWindow.getComputedStyle(element).getPropertyValue(`--${name}`).trim();
|
|
45
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Extracts CSS color styles that match a specific filter from the document's stylesheets.
|
|
108
|
+
* @param {string} filter - The filter to apply to CSS variable names.
|
|
109
|
+
* @param {string} [selector=':root'] - The CSS selector to filter by.
|
|
110
|
+
* @returns {Record<string, string>} A record containing the filtered CSS color styles.
|
|
111
|
+
*/
|
|
46
112
|
getCSSColorStyles(filter, selector = ':root') {
|
|
47
113
|
const selectorFilter = new RegExp(`^${selector}$`);
|
|
48
114
|
const nameFilter = new RegExp(`^--${filter}`);
|
|
@@ -71,4 +137,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
71
137
|
providedIn: 'root',
|
|
72
138
|
}]
|
|
73
139
|
}] });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3dpbmRvdy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0RyxNQUFNLE9BQU8sU0FBUztJQUh0QjtRQUltQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsaUJBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7UUFDbkQsY0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ2pGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQzFCLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxF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ZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgcmVmbGVjdENvbXBvbmVudFR5cGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZnJvbUV2ZW50cyB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBFTVBUWSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdpbmRvd1JlZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0aXZlV2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyA/PyB3aW5kb3c7XG4gIHB1YmxpYyByZWFkb25seSBpc09ubGluZSQgPSBmcm9tRXZlbnRzKHRoaXMubmF0aXZlV2luZG93LCAnb2ZmbGluZScsICdvbmxpbmUnKS5waXBlKFxuICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5pc09ubGluZSgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlVGl0bGUkID0gKGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk/LmV2ZW50cyA/PyBFTVBUWSkucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgbWFwKCgpID0+IHRoaXMudGl0bGUuZ2V0VGl0bGUoKSksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCk6IExvY2F0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgaXNPbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm5hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGxhbmd1YWdlLCBsYW5ndWFnZXMsIHVzZXJMYW5ndWFnZSB9ID0gdGhpcy5uYXRpdmVXaW5kb3cubmF2aWdhdG9yIGFzIE5hdmlnYXRvciAmIHsgdXNlckxhbmd1YWdlPzogc3RyaW5nIH07XG5cbiAgICByZXR1cm4gbGFuZ3VhZ2VzPy5bMF0gPz8gdXNlckxhbmd1YWdlID8/IGxhbmd1YWdlO1xuICB9XG5cbiAgcHVibGljIGdldExhbmd1YWdlQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRMYW5ndWFnZUNvZGUodGhpcy5nZXRMYW5ndWFnZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcmlnaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxuICBwdWJsaWMgb3BlblBhZ2UodXJsPzogc3RyaW5nIHwgVVJMLCB0YXJnZXQ/OiBzdHJpbmcsIGZlYXR1cmVzPzogc3RyaW5nKTogV2luZG93UHJveHkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cub3Blbih1cmwsIHRhcmdldCwgZmVhdHVyZXMpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZFBhZ2UoKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubG9jYXRpb24ucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlCeUNvbXBvbmVudDxUPih0eXBlOiBUeXBlPFQ+KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gcmVmbGVjdENvbXBvbmVudFR5cGUodHlwZSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50VHlwZSA/IHRoaXMubmF0aXZlV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29tcG9uZW50VHlwZS5zZWxlY3RvcikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldENTU1ZhcmlhYmxlKG5hbWU6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmJvZHkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZVdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoYC0tJHtuYW1lfWApLnRyaW0oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDU1NDb2xvclN0eWxlcyhmaWx0ZXI6IHN0cmluZywgc2VsZWN0b3IgPSAnOnJvb3QnKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgc2VsZWN0b3JGaWx0ZXIgPSBuZXcgUmVnRXhwKGBeJHtzZWxlY3Rvcn0kYCk7XG4gICAgY29uc3QgbmFtZUZpbHRlciA9IG5ldyBSZWdFeHAoYF4tLSR7ZmlsdGVyfWApO1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20odGhpcy5kb2N1bWVudC5zdHlsZVNoZWV0cylcbiAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiAhaHJlZiB8fCBocmVmLnN0YXJ0c1dpdGgodGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb24ub3JpZ2luKSlcbiAgICAgIC5tYXAoKHsgY3NzUnVsZXMgfSkgPT4gQXJyYXkuZnJvbShjc3NSdWxlcylbMF0pXG4gICAgICAuZmlsdGVyKChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHNlbGVjdG9yRmlsdGVyLnRlc3QocnVsZS5zZWxlY3RvclRleHQudHJpbSgpKSlcbiAgICAgIC5yZWR1Y2UoKGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcnVsZSkgPT4ge1xuICAgICAgICBPYmplY3QudmFsdWVzKChydWxlIGFzIENTU1N0eWxlUnVsZSkuc3R5bGUpXG4gICAgICAgICAgLm1hcCgoc3R5bGUpID0+IHN0eWxlLnRvU3RyaW5nKCkudHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIoKG5hbWUpID0+IEJvb2xlYW4obmFtZSkgJiYgbmFtZUZpbHRlci50ZXN0KG5hbWUpKVxuICAgICAgICAgIC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuYW1lLnJlcGxhY2UoJy0tJywgJycpO1xuICAgICAgICAgICAgY29sb3JzW2tleV0gPSB0aGlzLmdldENTU1ZhcmlhYmxlKGtleSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgICB9LCB7fSk7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxufVxuIl19
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3dpbmRvdy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUV0Rzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sU0FBUztJQUh0QjtRQUltQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDOztXQUVHO1FBQ2EsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1Qzs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQztRQUVuRTs7V0FFRztRQUNhLGNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNqRixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFR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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOytHQTlJVSxTQUFTO21IQUFULFNBQVMsY0FGUixNQUFNOzs0RkFFUCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgcmVmbGVjdENvbXBvbmVudFR5cGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZnJvbUV2ZW50cyB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBFTVBUWSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCB3cmFwcyB3aW5kb3cgYW5kIGRvY3VtZW50IGZ1bmN0aW9uYWxpdGllcywgcHJvdmlkaW5nIEFuZ3VsYXItZnJpZW5kbHkgd2F5cyB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyJ3Mgd2luZG93IG9iamVjdCxcbiAqIG1hbmFnZSB0aGUgZG9jdW1lbnQgYW5kIGl0cyB0aXRsZSwgbGlzdGVuIHRvIG9ubGluZS9vZmZsaW5lIGV2ZW50cywgYW5kIHBlcmZvcm0gb3RoZXIgYnJvd3Nlci1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXaW5kb3dSZWYge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlID0gaW5qZWN0KFRpdGxlKTtcblxuICAvKipcbiAgICogQWNjZXNzZXMgdGhlIGRvY3VtZW50IG9iamVjdCwgZW5zdXJpbmcgQW5ndWxhciBjb21wYXRpYmlsaXR5IGFuZCBwb3RlbnRpYWwgU1NSIGZyaWVuZGxpbmVzcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbmF0aXZlIHdpbmRvdyBvYmplY3QsIHdpdGggYSBmYWxsYmFjayB0byB0aGUgZ2xvYmFsIHdpbmRvdyBpZiBuZWNlc3NhcnkuXG4gICAqIFRoaXMgYXBwcm9hY2ggaGVscHMgZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBBbmd1bGFyJ3MgU1NSIGZlYXR1cmVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZVdpbmRvdyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gd2luZG93O1xuXG4gIC8qKlxuICAgKiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIG9ubGluZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXIsIHVwZGF0aW5nIHdoZW4gdGhlIGJyb3dzZXIgdHJhbnNpdGlvbnMgYmV0d2VlbiBvbmxpbmUgYW5kIG9mZmxpbmUgc3RhdGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzT25saW5lJCA9IGZyb21FdmVudHModGhpcy5uYXRpdmVXaW5kb3csICdvZmZsaW5lJywgJ29ubGluZScpLnBpcGUoXG4gICAgc3RhcnRXaXRoKG51bGwpLFxuICAgIG1hcCgoKSA9PiB0aGlzLmlzT25saW5lKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjdXJyZW50IHBhZ2UgdGl0bGUgdXBvbiBuYXZpZ2F0aW9uIGVuZHMsIHVzZWZ1bCBmb3IgdXBkYXRpbmcgZG9jdW1lbnQgdGl0bGVzIGluIFNQQSBhcHBsaWNhdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZVRpdGxlJCA9IChpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pPy5ldmVudHMgPz8gRU1QVFkpLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICBzdGFydFdpdGgobnVsbCksXG4gICAgZGVib3VuY2VUaW1lKDApLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpdGxlLmdldFRpdGxlKCkpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxvY2F0aW9uIG9iamVjdCBvZiB0aGUgd2luZG93LlxuICAgKiBAcmV0dXJucyBUaGUgbG9jYXRpb24gb2JqZWN0IG9mIHRoZSB3aW5kb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCk6IExvY2F0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBvbmxpbmU7IG90aGVyd2lzZSwgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgaXNPbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm5hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBicm93c2VyJ3MgY3VycmVudCBsYW5ndWFnZSBzZXR0aW5nLCBmYWxsaW5nIGJhY2sgdGhyb3VnaCBzZXZlcmFsIGJyb3dzZXItc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZyBvZiB0aGUgYnJvd3Nlci5cbiAgICovXG4gIHB1YmxpYyBnZXRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2UsIGxhbmd1YWdlcywgdXNlckxhbmd1YWdlIH0gPSB0aGlzLm5hdGl2ZVdpbmRvdy5uYXZpZ2F0b3IgYXMgTmF2aWdhdG9yICYgeyB1c2VyTGFuZ3VhZ2U/OiBzdHJpbmcgfTtcblxuICAgIHJldHVybiBsYW5ndWFnZXM/LlswXSA/PyB1c2VyTGFuZ3VhZ2UgPz8gbGFuZ3VhZ2U7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGxhbmd1YWdlIGNvZGUgZnJvbSB0aGUgYnJvd3NlcidzIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZy5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgcGFydCBvZiB0aGUgYnJvd3NlcidzIGxhbmd1YWdlIHNldHRpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldExhbmd1YWdlQ29kZSh0aGlzLmdldExhbmd1YWdlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbiBvZiB0aGUgY3VycmVudCB3aW5kb3cgbG9jYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgd2luZG93IGxvY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldE9yaWdpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLm9yaWdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG5ldyBicm93c2VyIHRhYiBvciB3aW5kb3cgYW5kIG5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVUkx9IFt1cmxdIC0gVGhlIFVSTCB0byBvcGVuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gLSBUaGUgdGFyZ2V0IHdpbmRvdyBvciB0YWIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZXNdIC0gU3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSB3aW5kb3cgZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIHtXaW5kb3dQcm94eSB8IG51bGx9IEEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBvcGVuZWQgd2luZG93IG9yIG51bGwgaWYgdGhlIGNhbGwgZmFpbGVkLlxuICAgKi9cbiAgcHVibGljIG9wZW5QYWdlKHVybD86IHN0cmluZyB8IFVSTCwgdGFyZ2V0Pzogc3RyaW5nLCBmZWF0dXJlcz86IHN0cmluZyk6IFdpbmRvd1Byb3h5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm9wZW4odXJsLCB0YXJnZXQsIGZlYXR1cmVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWRzIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVsb2FkUGFnZSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBET00gZm9yIGFuIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQW5ndWxhciBjb21wb25lbnQgdHlwZS5cbiAgICogQHRlbXBsYXRlIFQgVGhlIGNvbXBvbmVudCB0eXBlIHRvIHF1ZXJ5IGZvci5cbiAgICogQHBhcmFtIHtUeXBlPFQ+fSB0eXBlIC0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IHR5cGUuXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9IFRoZSBIVE1MIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHF1ZXJ5QnlDb21wb25lbnQ8VD4odHlwZTogVHlwZTxUPik6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHJlZmxlY3RDb21wb25lbnRUeXBlKHR5cGUpO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFR5cGUgPyB0aGlzLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbXBvbmVudFR5cGUuc2VsZWN0b3IpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgQ1NTIHZhcmlhYmxlIG9uIGEgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIENTUyB2YXJpYWJsZS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2VsZW1lbnQ9dGhpcy5kb2N1bWVudC5ib2R5XSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmV0cmlldmUgdGhlIENTUyB2YXJpYWJsZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBDU1MgdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q1NTVmFyaWFibGUobmFtZTogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuYm9keSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCkudHJpbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIENTUyBjb2xvciBzdHlsZXMgdGhhdCBtYXRjaCBhIHNwZWNpZmljIGZpbHRlciBmcm9tIHRoZSBkb2N1bWVudCdzIHN0eWxlc2hlZXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyIC0gVGhlIGZpbHRlciB0byBhcHBseSB0byBDU1MgdmFyaWFibGUgbmFtZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9Jzpyb290J10gLSBUaGUgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBieS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IEEgcmVjb3JkIGNvbnRhaW5pbmcgdGhlIGZpbHRlcmVkIENTUyBjb2xvciBzdHlsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q1NTQ29sb3JTdHlsZXMoZmlsdGVyOiBzdHJpbmcsIHNlbGVjdG9yID0gJzpyb290Jyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHNlbGVjdG9yRmlsdGVyID0gbmV3IFJlZ0V4cChgXiR7c2VsZWN0b3J9JGApO1xuICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSBuZXcgUmVnRXhwKGBeLS0ke2ZpbHRlcn1gKTtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHRoaXMuZG9jdW1lbnQuc3R5bGVTaGVldHMpXG4gICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gIWhyZWYgfHwgaHJlZi5zdGFydHNXaXRoKHRoaXMubmF0aXZlV2luZG93LmxvY2F0aW9uLm9yaWdpbikpXG4gICAgICAubWFwKCh7IGNzc1J1bGVzIH0pID0+IEFycmF5LmZyb20oY3NzUnVsZXMpWzBdKVxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gcnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiBzZWxlY3RvckZpbHRlci50ZXN0KHJ1bGUuc2VsZWN0b3JUZXh0LnRyaW0oKSkpXG4gICAgICAucmVkdWNlKChjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJ1bGUpID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcygocnVsZSBhcyBDU1NTdHlsZVJ1bGUpLnN0eWxlKVxuICAgICAgICAgIC5tYXAoKHN0eWxlKSA9PiBzdHlsZS50b1N0cmluZygpLnRyaW0oKSlcbiAgICAgICAgICAuZmlsdGVyKChuYW1lKSA9PiBCb29sZWFuKG5hbWUpICYmIG5hbWVGaWx0ZXIudGVzdChuYW1lKSlcbiAgICAgICAgICAuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmFtZS5yZXBsYWNlKCctLScsICcnKTtcbiAgICAgICAgICAgIGNvbG9yc1trZXldID0gdGhpcy5nZXRDU1NWYXJpYWJsZShrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sb3JzO1xuICAgICAgfSwge30pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
const ODX_DEFAULT_IDENTITY_MATCHER = (item1, item2) => item1 === item2;
|
|
3
|
+
/**
|
|
4
|
+
* An Angular `InjectionToken` for the `IdentityMatcher` function, allowing for the provision
|
|
5
|
+
* and injection of custom identity matching logic throughout the application. The token is
|
|
6
|
+
* provided with a default factory function that returns the `ODX_DEFAULT_IDENTITY_MATCHER`,
|
|
7
|
+
* which can be overridden with custom logic as needed.
|
|
8
|
+
*
|
|
9
|
+
* @type {InjectionToken<IdentityMatcher<unknown>>}
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Providing a custom identity matcher in an Angular module
|
|
14
|
+
* @NgModule({
|
|
15
|
+
* providers: [
|
|
16
|
+
* { provide: ODX_IDENTITY_MATCHER, useValue: (item1, item2) => item1.id === item2.id }
|
|
17
|
+
* ]
|
|
18
|
+
* })
|
|
19
|
+
* class AppModule {}
|
|
20
|
+
*
|
|
21
|
+
* // Injecting and using the custom provided identity matcher
|
|
22
|
+
* constructor(@Inject(ODX_IDENTITY_MATCHER) private identityMatcher: IdentityMatcher<MyType>) {
|
|
23
|
+
* console.log(this.identityMatcher({ id: 1 }, { id: 1 })); // Depends on the custom logic provided
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
3
27
|
export const ODX_IDENTITY_MATCHER = new InjectionToken('@odx/angular::StringHandler', {
|
|
4
28
|
providedIn: 'root',
|
|
5
29
|
factory: () => ODX_DEFAULT_IDENTITY_MATCHER,
|
|
6
30
|
});
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktbWF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3Rva2Vucy9pZGVudGl0eS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxQi9DLE1BQU0sNEJBQTRCLEdBQTZCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztBQUVqRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBMkIsNkJBQTZCLEVBQUU7SUFDOUcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLDRCQUE0QjtDQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdHlwZSB0aGF0IGRlZmluZXMgdGhlIGxvZ2ljIHRvIGNvbXBhcmUgdHdvIGl0ZW1zIGZvciBpZGVudGl0eS5cbiAqIEl0IHNob3VsZCByZXR1cm4gYHRydWVgIGlmIHRoZSBpdGVtcyBhcmUgY29uc2lkZXJlZCBpZGVudGljYWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyB0byBiZSBjb21wYXJlZC5cbiAqIEBwYXJhbSB7VH0gaXRlbTEgVGhlIGZpcnN0IGl0ZW0gdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7VH0gaXRlbTIgVGhlIHNlY29uZCBpdGVtIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpdGVtcyBhcmUgaWRlbnRpY2FsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEEgc2ltcGxlIGlkZW50aXR5IG1hdGNoZXIgZm9yIG51bWJlciB0eXBlc1xuICogY29uc3QgbnVtYmVyTWF0Y2hlcjogSWRlbnRpdHlNYXRjaGVyPG51bWJlcj4gPSAobjEsIG4yKSA9PiBuMSA9PT0gbjI7XG4gKiBjb25zb2xlLmxvZyhudW1iZXJNYXRjaGVyKDEsIDEpKTsgLy8gT3V0cHV0czogdHJ1ZVxuICogY29uc29sZS5sb2cobnVtYmVyTWF0Y2hlcigxLCAyKSk7IC8vIE91dHB1dHM6IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlNYXRjaGVyPFQ+ID0gKGl0ZW0xOiBULCBpdGVtMjogVCkgPT4gYm9vbGVhbjtcblxuY29uc3QgT0RYX0RFRkFVTFRfSURFTlRJVFlfTUFUQ0hFUjogSWRlbnRpdHlNYXRjaGVyPHVua25vd24+ID0gKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEgPT09IGl0ZW0yO1xuXG4vKipcbiAqIEFuIEFuZ3VsYXIgYEluamVjdGlvblRva2VuYCBmb3IgdGhlIGBJZGVudGl0eU1hdGNoZXJgIGZ1bmN0aW9uLCBhbGxvd2luZyBmb3IgdGhlIHByb3Zpc2lvblxuICogYW5kIGluamVjdGlvbiBvZiBjdXN0b20gaWRlbnRpdHkgbWF0Y2hpbmcgbG9naWMgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uIFRoZSB0b2tlbiBpc1xuICogcHJvdmlkZWQgd2l0aCBhIGRlZmF1bHQgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGBPRFhfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSYCxcbiAqIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggY3VzdG9tIGxvZ2ljIGFzIG5lZWRlZC5cbiAqXG4gKiBAdHlwZSB7SW5qZWN0aW9uVG9rZW48SWRlbnRpdHlNYXRjaGVyPHVua25vd24+Pn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFByb3ZpZGluZyBhIGN1c3RvbSBpZGVudGl0eSBtYXRjaGVyIGluIGFuIEFuZ3VsYXIgbW9kdWxlXG4gKiBATmdNb2R1bGUoe1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7IHByb3ZpZGU6IE9EWF9JREVOVElUWV9NQVRDSEVSLCB1c2VWYWx1ZTogKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEuaWQgPT09IGl0ZW0yLmlkIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBpZGVudGl0eSBtYXRjaGVyXG4gKiBjb25zdHJ1Y3RvcihASW5qZWN0KE9EWF9JREVOVElUWV9NQVRDSEVSKSBwcml2YXRlIGlkZW50aXR5TWF0Y2hlcjogSWRlbnRpdHlNYXRjaGVyPE15VHlwZT4pIHtcbiAqICAgY29uc29sZS5sb2codGhpcy5pZGVudGl0eU1hdGNoZXIoeyBpZDogMSB9LCB7IGlkOiAxIH0pKTsgLy8gRGVwZW5kcyBvbiB0aGUgY3VzdG9tIGxvZ2ljIHByb3ZpZGVkXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE9EWF9JREVOVElUWV9NQVRDSEVSID0gbmV3IEluamVjdGlvblRva2VuPElkZW50aXR5TWF0Y2hlcjx1bmtub3duPj4oJ0BvZHgvYW5ndWxhcjo6U3RyaW5nSGFuZGxlcicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxufSk7XG4iXX0=
|
|
@@ -2,8 +2,32 @@ import { InjectionToken } from '@angular/core';
|
|
|
2
2
|
const ODX_DEFAULT_STRING_SEARCH_HANDLER = (item, query) => {
|
|
3
3
|
return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());
|
|
4
4
|
};
|
|
5
|
+
/**
|
|
6
|
+
* An Angular `InjectionToken` for the `StringSearchHandler` function, allowing for the provision
|
|
7
|
+
* and injection of custom string search logic throughout the application. This token is provided with
|
|
8
|
+
* a default factory function that returns the `ODX_DEFAULT_STRING_SEARCH_HANDLER`, which can be overridden
|
|
9
|
+
* with custom logic as needed.
|
|
10
|
+
*
|
|
11
|
+
* @type {InjectionToken<StringSearchHandler>}
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Providing a custom string search handler in an Angular module
|
|
16
|
+
* @NgModule({
|
|
17
|
+
* providers: [
|
|
18
|
+
* { provide: ODX_STRING_SEARCH_HANDLER, useValue: (item, query) => item.startsWith(query) }
|
|
19
|
+
* ]
|
|
20
|
+
* })
|
|
21
|
+
* class AppModule {}
|
|
22
|
+
*
|
|
23
|
+
* // Injecting and using the custom provided string search handler
|
|
24
|
+
* constructor(@Inject(ODX_STRING_SEARCH_HANDLER) private searchHandler: StringSearchHandler) {
|
|
25
|
+
* console.log(this.searchHandler('Angular', 'A')); // Depends on the custom logic provided
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
5
29
|
export const ODX_STRING_SEARCH_HANDLER = new InjectionToken('@odx/angular::StringHandler', {
|
|
6
30
|
providedIn: 'root',
|
|
7
31
|
factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,
|
|
8
32
|
});
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNlYXJjaC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZy1zZWFyY2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBbUIvQyxNQUFNLGlDQUFpQyxHQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM3RSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFzQiw2QkFBNkIsRUFBRTtJQUM5RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsaUNBQWlDO0NBQ2pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0eXBlIHRoYXQgZGVmaW5lcyB0aGUgbG9naWMgdG8gc2VhcmNoIHdpdGhpbiBhIHN0cmluZyBpdGVtIHVzaW5nIGEgcXVlcnkgc3RyaW5nLlxuICogSXQgc2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgdGhlIGl0ZW0gbWF0Y2hlcyB0aGUgcXVlcnkgYWNjb3JkaW5nIHRvIHRoZSBpbXBsZW1lbnRlZCBsb2dpYywgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW0gLSBUaGUgc3RyaW5nIGl0ZW0gdG8gc2VhcmNoIHdpdGhpbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHF1ZXJ5IG1hdGNoZXMgdGhlIGl0ZW0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gQSBzaW1wbGUgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hcbiAqIGNvbnN0IHNlYXJjaEhhbmRsZXI6IFN0cmluZ1NlYXJjaEhhbmRsZXIgPSAoaXRlbSwgcXVlcnkpID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAqIGNvbnNvbGUubG9nKHNlYXJjaEhhbmRsZXIoJ0hlbGxvIFdvcmxkJywgJ3dvcmxkJykpOyAvLyBPdXRwdXRzOiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbmNvbnN0IE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUjogU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtLCBxdWVyeSkgPT4ge1xuICByZXR1cm4gaXRlbS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufTtcblxuLyoqXG4gKiBBbiBBbmd1bGFyIGBJbmplY3Rpb25Ub2tlbmAgZm9yIHRoZSBgU3RyaW5nU2VhcmNoSGFuZGxlcmAgZnVuY3Rpb24sIGFsbG93aW5nIGZvciB0aGUgcHJvdmlzaW9uXG4gKiBhbmQgaW5qZWN0aW9uIG9mIGN1c3RvbSBzdHJpbmcgc2VhcmNoIGxvZ2ljIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIHRva2VuIGlzIHByb3ZpZGVkIHdpdGhcbiAqIGEgZGVmYXVsdCBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUmAsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuXG4gKiB3aXRoIGN1c3RvbSBsb2dpYyBhcyBuZWVkZWQuXG4gKlxuICogQHR5cGUge0luamVjdGlvblRva2VuPFN0cmluZ1NlYXJjaEhhbmRsZXI+fVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgY3VzdG9tIHN0cmluZyBzZWFyY2ggaGFuZGxlciBpbiBhbiBBbmd1bGFyIG1vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBPRFhfU1RSSU5HX1NFQVJDSF9IQU5ETEVSLCB1c2VWYWx1ZTogKGl0ZW0sIHF1ZXJ5KSA9PiBpdGVtLnN0YXJ0c1dpdGgocXVlcnkpIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBzdHJpbmcgc2VhcmNoIGhhbmRsZXJcbiAqIGNvbnN0cnVjdG9yKEBJbmplY3QoT0RYX1NUUklOR19TRUFSQ0hfSEFORExFUikgcHJpdmF0ZSBzZWFyY2hIYW5kbGVyOiBTdHJpbmdTZWFyY2hIYW5kbGVyKSB7XG4gKiAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoSGFuZGxlcignQW5ndWxhcicsICdBJykpOyAvLyBEZXBlbmRzIG9uIHRoZSBjdXN0b20gbG9naWMgcHJvdmlkZWRcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgT0RYX1NUUklOR19TRUFSQ0hfSEFORExFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdHJpbmdTZWFyY2hIYW5kbGVyPignQG9keC9hbmd1bGFyOjpTdHJpbmdIYW5kbGVyJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUixcbn0pO1xuIl19
|
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
import { isPresent } from '@odx/angular/utils';
|
|
3
3
|
const ODX_DEFAULT_STRINGIFY = (item) => (isPresent(item) ? String(item) : '');
|
|
4
|
+
/**
|
|
5
|
+
* An Angular `InjectionToken` for the `StringifyFn` function, allowing the injection of custom
|
|
6
|
+
* stringification logic throughout an application. By default, it is provided with a factory
|
|
7
|
+
* function that returns `ODX_DEFAULT_STRINGIFY`. This setup permits easy customization of
|
|
8
|
+
* how items are converted to strings, facilitating different stringification strategies
|
|
9
|
+
* for various application needs.
|
|
10
|
+
*
|
|
11
|
+
* @type {InjectionToken<StringifyFn<unknown>>}
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Providing a custom stringify function in an Angular module
|
|
16
|
+
* @NgModule({
|
|
17
|
+
* providers: [
|
|
18
|
+
* { provide: ODX_STRINGIFY, useValue: (item) => JSON.stringify(item) }
|
|
19
|
+
* ]
|
|
20
|
+
* })
|
|
21
|
+
* class AppModule {}
|
|
22
|
+
*
|
|
23
|
+
* // Injecting and using the custom provided stringify function
|
|
24
|
+
* constructor(@Inject(ODX_STRINGIFY) private stringify: StringifyFn<unknown>) {
|
|
25
|
+
* console.log(this.stringify({ key: 'value' })); // Outputs: '{"key":"value"}'
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
4
29
|
export const ODX_STRINGIFY = new InjectionToken('@odx/angular::Stringify', {
|
|
5
30
|
providedIn: 'root',
|
|
6
31
|
factory: () => ODX_DEFAULT_STRINGIFY,
|
|
7
32
|
});
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQXFCL0MsTUFBTSxxQkFBcUIsR0FBeUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXVCLHlCQUF5QixFQUFFO0lBQy9GLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUI7Q0FDckMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUHJlc2VudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0eXBlIHRoYXQgZGVmaW5lcyB0aGUgbG9naWMgdG8gY29udmVydCBhbiBpdGVtIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKiBUaGUgZnVuY3Rpb24gc2hvdWxkIGhhbmRsZSB2YXJpb3VzIHR5cGVzIGdyYWNlZnVsbHksIHJldHVybmluZyBhIG1lYW5pbmdmdWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBmb3IgZWFjaC4gSWYgdGhlIGl0ZW0gaXMgbm90IHByZXNlbnQgKG51bGwgb3IgdW5kZWZpbmVkKSwgYW4gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgaXRlbSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7VH0gaXRlbSAtIFRoZSBpdGVtIHRvIHN0cmluZ2lmeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGl0ZW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBIHNpbXBsZSBzdHJpbmdpZnkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG51bGwgYW5kIHVuZGVmaW5lZFxuICogY29uc3Qgc3RyaW5naWZ5OiBTdHJpbmdpZnlGbjx1bmtub3duPiA9IChpdGVtKSA9PiAoaXNQcmVzZW50KGl0ZW0pID8gU3RyaW5nKGl0ZW0pIDogJycpO1xuICogY29uc29sZS5sb2coc3RyaW5naWZ5KDEyMykpOyAvLyBPdXRwdXRzOiBcIjEyM1wiXG4gKiBjb25zb2xlLmxvZyhzdHJpbmdpZnkobnVsbCkpOyAvLyBPdXRwdXRzOiBcIlwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5naWZ5Rm48VD4gPSAoaXRlbTogVCkgPT4gc3RyaW5nO1xuXG5jb25zdCBPRFhfREVGQVVMVF9TVFJJTkdJRlk6IFN0cmluZ2lmeUZuPHVua25vd24+ID0gKGl0ZW0pID0+IChpc1ByZXNlbnQoaXRlbSkgPyBTdHJpbmcoaXRlbSkgOiAnJyk7XG5cbi8qKlxuICogQW4gQW5ndWxhciBgSW5qZWN0aW9uVG9rZW5gIGZvciB0aGUgYFN0cmluZ2lmeUZuYCBmdW5jdGlvbiwgYWxsb3dpbmcgdGhlIGluamVjdGlvbiBvZiBjdXN0b21cbiAqIHN0cmluZ2lmaWNhdGlvbiBsb2dpYyB0aHJvdWdob3V0IGFuIGFwcGxpY2F0aW9uLiBCeSBkZWZhdWx0LCBpdCBpcyBwcm92aWRlZCB3aXRoIGEgZmFjdG9yeVxuICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGBPRFhfREVGQVVMVF9TVFJJTkdJRllgLiBUaGlzIHNldHVwIHBlcm1pdHMgZWFzeSBjdXN0b21pemF0aW9uIG9mXG4gKiBob3cgaXRlbXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzLCBmYWNpbGl0YXRpbmcgZGlmZmVyZW50IHN0cmluZ2lmaWNhdGlvbiBzdHJhdGVnaWVzXG4gKiBmb3IgdmFyaW91cyBhcHBsaWNhdGlvbiBuZWVkcy5cbiAqXG4gKiBAdHlwZSB7SW5qZWN0aW9uVG9rZW48U3RyaW5naWZ5Rm48dW5rbm93bj4+fVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgY3VzdG9tIHN0cmluZ2lmeSBmdW5jdGlvbiBpbiBhbiBBbmd1bGFyIG1vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBPRFhfU1RSSU5HSUZZLCB1c2VWYWx1ZTogKGl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBzdHJpbmdpZnkgZnVuY3Rpb25cbiAqIGNvbnN0cnVjdG9yKEBJbmplY3QoT0RYX1NUUklOR0lGWSkgcHJpdmF0ZSBzdHJpbmdpZnk6IFN0cmluZ2lmeUZuPHVua25vd24+KSB7XG4gKiAgIGNvbnNvbGUubG9nKHRoaXMuc3RyaW5naWZ5KHsga2V5OiAndmFsdWUnIH0pKTsgLy8gT3V0cHV0czogJ3tcImtleVwiOlwidmFsdWVcIn0nXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE9EWF9TVFJJTkdJRlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RyaW5naWZ5Rm48dW5rbm93bj4+KCdAb2R4L2FuZ3VsYXI6OlN0cmluZ2lmeScsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9TVFJJTkdJRlksXG59KTtcbiJdfQ==
|
|
@@ -5,6 +5,33 @@ import { switchMap, take } from 'rxjs';
|
|
|
5
5
|
import { LocalizationService } from '../localization.service';
|
|
6
6
|
import { makeLocalizationFeature } from '../models';
|
|
7
7
|
export const HTTP_LANGUAGE_HEADER = 'Accept-Language';
|
|
8
|
+
/**
|
|
9
|
+
* Creates an HTTP interceptor function that adds a language header to outgoing HTTP requests,
|
|
10
|
+
* but only for URLs matching the provided criteria. This allows the server to respond with
|
|
11
|
+
* resources localized in the user's current language.
|
|
12
|
+
*
|
|
13
|
+
* @param {HttpLanguageHeaderInterceptorConfig} config - The configuration for the interceptor,
|
|
14
|
+
* including the list of allowed URLs and optionally a custom header name.
|
|
15
|
+
* @returns {HttpInterceptorFn} An Angular HTTP interceptor function that conditionally adds
|
|
16
|
+
* the current language as an HTTP header based on the request URL.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* // Use in HTTP client module setup
|
|
21
|
+
* import { HttpClientModule } from '@angular/common/http';
|
|
22
|
+
* import { httpLanguageHeaderInterceptor, HTTP_LANGUAGE_HEADER } from '@odx/angular/localization';
|
|
23
|
+
*
|
|
24
|
+
* @NgModule({
|
|
25
|
+
* imports: [HttpClientModule],
|
|
26
|
+
* providers: [
|
|
27
|
+
* provideHttpClient(withInterceptors([
|
|
28
|
+
* httpLanguageHeaderInterceptor({ allowedUrls: ['/api'], headerName: HTTP_LANGUAGE_HEADER })
|
|
29
|
+
* ]))
|
|
30
|
+
* ]
|
|
31
|
+
* })
|
|
32
|
+
* export class AppModule {}
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
8
35
|
export function httpLanguageHeaderInterceptor({ allowedUrls, headerName }) {
|
|
9
36
|
return (req, next) => {
|
|
10
37
|
const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));
|
|
@@ -16,8 +43,34 @@ export function httpLanguageHeaderInterceptor({ allowedUrls, headerName }) {
|
|
|
16
43
|
return next(req);
|
|
17
44
|
};
|
|
18
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Provides a localization feature that automatically adds a language header to HTTP requests
|
|
48
|
+
* for specified URLs, using the current active language. This function simplifies setting up
|
|
49
|
+
* the HTTP language header interceptor by wrapping it into a LocalizationFeature, making it easy
|
|
50
|
+
* to integrate with the application's localization infrastructure.
|
|
51
|
+
*
|
|
52
|
+
* @param {HttpLanguageHeaderInterceptorConfig} config - The configuration for the language header
|
|
53
|
+
* interceptor, specifying which URLs should include the language header and optionally defining a
|
|
54
|
+
* custom header name.
|
|
55
|
+
* @returns {LocalizationFeature} A localization feature object that can be used to configure
|
|
56
|
+
* the application's localization settings to include automatic language header addition for HTTP requests.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* // Example usage with the localization provider
|
|
61
|
+
* import { provideLocalization, LocalizationModule, withHttpLanguageHeader } from '@odx/angular/localization';
|
|
62
|
+
*
|
|
63
|
+
* @NgModule({
|
|
64
|
+
* imports: [LocalizationModule],
|
|
65
|
+
* providers: [
|
|
66
|
+
* provideLocalization({}, withHttpLanguageHeader({ allowedUrls: ['/api'] }))
|
|
67
|
+
* ]
|
|
68
|
+
* })
|
|
69
|
+
* export class AppModule {}
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
19
72
|
export function withHttpLanguageHeader(config) {
|
|
20
73
|
const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));
|
|
21
74
|
return makeLocalizationFeature(providers);
|
|
22
75
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWh0dHAtbGFuZ3VhZ2UtaGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBaUJ0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUF1QztJQUM1RyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztnQkFBRSxTQUFTO1lBQzdDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLElBQUksb0JBQW9CLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckk7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBMkM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUvRixPQUFPLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkZlYXR1cmUsIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEhUVFBfTEFOR1VBR0VfSEVBREVSID0gJ0FjY2VwdC1MYW5ndWFnZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBIVFRQIGxhbmd1YWdlIGhlYWRlciBpbnRlcmNlcHRvci4gSXQgc3BlY2lmaWVzIHdoaWNoIFVSTHNcbiAqIHRoZSBpbnRlcmNlcHRvciBzaG91bGQgYXBwbHkgdG8gYW5kIGFsbG93cyBjdXN0b21pemluZyB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIHVzZWQgdG8gdHJhbnNtaXRcbiAqIHRoZSBjdXJyZW50IGxhbmd1YWdlIHNldHRpbmcuXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBSZWdFeHA+fSBhbGxvd2VkVXJscyAtIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgUmVnRXhwIHBhdHRlcm5zXG4gKiBpbmRpY2F0aW5nIHRoZSBVUkxzIHRvIHdoaWNoIHRoZSBsYW5ndWFnZSBoZWFkZXIgc2hvdWxkIGJlIGFkZGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtoZWFkZXJOYW1lPUhUVFBfTEFOR1VBR0VfSEVBREVSXSAtIE9wdGlvbmFsLiBUaGUgbmFtZSBvZiB0aGUgSFRUUCBoZWFkZXJcbiAqIHRocm91Z2ggd2hpY2ggdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZyB3aWxsIGJlIHRyYW5zbWl0dGVkLiBEZWZhdWx0cyB0byAnQWNjZXB0LUxhbmd1YWdlJy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvckNvbmZpZyB7XG4gIGFsbG93ZWRVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSFRUUCBpbnRlcmNlcHRvciBmdW5jdGlvbiB0aGF0IGFkZHMgYSBsYW5ndWFnZSBoZWFkZXIgdG8gb3V0Z29pbmcgSFRUUCByZXF1ZXN0cyxcbiAqIGJ1dCBvbmx5IGZvciBVUkxzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBjcml0ZXJpYS4gVGhpcyBhbGxvd3MgdGhlIHNlcnZlciB0byByZXNwb25kIHdpdGhcbiAqIHJlc291cmNlcyBsb2NhbGl6ZWQgaW4gdGhlIHVzZXIncyBjdXJyZW50IGxhbmd1YWdlLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgaW50ZXJjZXB0b3IsXG4gKiBpbmNsdWRpbmcgdGhlIGxpc3Qgb2YgYWxsb3dlZCBVUkxzIGFuZCBvcHRpb25hbGx5IGEgY3VzdG9tIGhlYWRlciBuYW1lLlxuICogQHJldHVybnMge0h0dHBJbnRlcmNlcHRvckZufSBBbiBBbmd1bGFyIEhUVFAgaW50ZXJjZXB0b3IgZnVuY3Rpb24gdGhhdCBjb25kaXRpb25hbGx5IGFkZHNcbiAqIHRoZSBjdXJyZW50IGxhbmd1YWdlIGFzIGFuIEhUVFAgaGVhZGVyIGJhc2VkIG9uIHRoZSByZXF1ZXN0IFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFVzZSBpbiBIVFRQIGNsaWVudCBtb2R1bGUgc2V0dXBcbiAqIGltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyBodHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvciwgSFRUUF9MQU5HVUFHRV9IRUFERVIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV0sXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW1xuICogICAgICAgaHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3IoeyBhbGxvd2VkVXJsczogWycvYXBpJ10sIGhlYWRlck5hbWU6IEhUVFBfTEFOR1VBR0VfSEVBREVSIH0pXG4gKiAgICAgXSkpXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBMYW5ndWFnZUhlYWRlckludGVyY2VwdG9yKHsgYWxsb3dlZFVybHMsIGhlYWRlck5hbWUgfTogSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7IFtoZWFkZXJOYW1lID8/IEhUVFBfTEFOR1VBR0VfSEVBREVSXTogbGFuZ3VhZ2UgfSB9KSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBhIGxvY2FsaXphdGlvbiBmZWF0dXJlIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIGEgbGFuZ3VhZ2UgaGVhZGVyIHRvIEhUVFAgcmVxdWVzdHNcbiAqIGZvciBzcGVjaWZpZWQgVVJMcywgdXNpbmcgdGhlIGN1cnJlbnQgYWN0aXZlIGxhbmd1YWdlLiBUaGlzIGZ1bmN0aW9uIHNpbXBsaWZpZXMgc2V0dGluZyB1cFxuICogdGhlIEhUVFAgbGFuZ3VhZ2UgaGVhZGVyIGludGVyY2VwdG9yIGJ5IHdyYXBwaW5nIGl0IGludG8gYSBMb2NhbGl6YXRpb25GZWF0dXJlLCBtYWtpbmcgaXQgZWFzeVxuICogdG8gaW50ZWdyYXRlIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgbG9jYWxpemF0aW9uIGluZnJhc3RydWN0dXJlLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2UgaGVhZGVyXG4gKiBpbnRlcmNlcHRvciwgc3BlY2lmeWluZyB3aGljaCBVUkxzIHNob3VsZCBpbmNsdWRlIHRoZSBsYW5ndWFnZSBoZWFkZXIgYW5kIG9wdGlvbmFsbHkgZGVmaW5pbmcgYVxuICogY3VzdG9tIGhlYWRlciBuYW1lLlxuICogQHJldHVybnMge0xvY2FsaXphdGlvbkZlYXR1cmV9IEEgbG9jYWxpemF0aW9uIGZlYXR1cmUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlXG4gKiB0aGUgYXBwbGljYXRpb24ncyBsb2NhbGl6YXRpb24gc2V0dGluZ3MgdG8gaW5jbHVkZSBhdXRvbWF0aWMgbGFuZ3VhZ2UgaGVhZGVyIGFkZGl0aW9uIGZvciBIVFRQIHJlcXVlc3RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRXhhbXBsZSB1c2FnZSB3aXRoIHRoZSBsb2NhbGl6YXRpb24gcHJvdmlkZXJcbiAqIGltcG9ydCB7IHByb3ZpZGVMb2NhbGl6YXRpb24sIExvY2FsaXphdGlvbk1vZHVsZSwgd2l0aEh0dHBMYW5ndWFnZUhlYWRlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9sb2NhbGl6YXRpb24nO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtMb2NhbGl6YXRpb25Nb2R1bGVdLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlTG9jYWxpemF0aW9uKHt9LCB3aXRoSHR0cExhbmd1YWdlSGVhZGVyKHsgYWxsb3dlZFVybHM6IFsnL2FwaSddIH0pKVxuICogICBdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoSHR0cExhbmd1YWdlSGVhZGVyKGNvbmZpZzogSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcpOiBMb2NhbGl6YXRpb25GZWF0dXJlIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbaHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3IoY29uZmlnKV0pKTtcblxuICByZXR1cm4gbWFrZUxvY2FsaXphdGlvbkZlYXR1cmUocHJvdmlkZXJzKTtcbn1cbiJdfQ==
|
|
@@ -5,6 +5,32 @@ import { switchMap, take } from 'rxjs';
|
|
|
5
5
|
import { LocalizationService } from '../localization.service';
|
|
6
6
|
import { makeLocalizationFeature } from '../models';
|
|
7
7
|
export const HTTP_LANGUAGE_QUERY = 'language';
|
|
8
|
+
/**
|
|
9
|
+
* Creates an HTTP interceptor function that appends the current language as a query parameter
|
|
10
|
+
* to outgoing HTTP requests that match specified URLs. This interceptor enables dynamic content
|
|
11
|
+
* localization by informing the backend of the user's preferred language.
|
|
12
|
+
*
|
|
13
|
+
* @param {HttpLanguageQueryParamInterceptorConfig} config - Configuration for the interceptor,
|
|
14
|
+
* including allowed URLs and an optional custom name for the query parameter.
|
|
15
|
+
* @returns {HttpInterceptorFn} The interceptor function ready to be applied to the HTTP client.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Applying the interceptor in an Angular module
|
|
20
|
+
* import { HttpClientModule } from '@angular/common/http';
|
|
21
|
+
* import { withHttpLanguageQueryParam } from '@odx/angular/localization';
|
|
22
|
+
*
|
|
23
|
+
* @NgModule({
|
|
24
|
+
* imports: [HttpClientModule],
|
|
25
|
+
* providers: [
|
|
26
|
+
* provideHttpClient(withInterceptors([
|
|
27
|
+
* withHttpLanguageQueryParam({ allowedUrls: ['/api/resources'] })
|
|
28
|
+
* ]))
|
|
29
|
+
* ]
|
|
30
|
+
* })
|
|
31
|
+
* export class ApiModule {}
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
8
34
|
export function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }) {
|
|
9
35
|
return (req, next) => {
|
|
10
36
|
const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));
|
|
@@ -16,8 +42,33 @@ export function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamN
|
|
|
16
42
|
return next(req);
|
|
17
43
|
};
|
|
18
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Registers the HTTP interceptor that appends the current language as a query parameter to
|
|
47
|
+
* outgoing requests for configured URLs as a localization feature. This utility function
|
|
48
|
+
* simplifies the setup by bundling the interceptor into a feature that can be easily integrated
|
|
49
|
+
* with localization configurations.
|
|
50
|
+
*
|
|
51
|
+
* @param {HttpLanguageQueryParamInterceptorConfig} config - Configuration for appending the
|
|
52
|
+
* language query parameter, including allowed URLs and an optional parameter name.
|
|
53
|
+
* @returns {LocalizationFeature} A localization feature encapsulating the interceptor, ready
|
|
54
|
+
* for integration with the application's localization setup.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Integrating the localization feature in an Angular module
|
|
59
|
+
* import { provideLocalization } from '@angular/core';
|
|
60
|
+
* import { withHttpLanguageQueryParam } from '@odx/angular/localization';
|
|
61
|
+
*
|
|
62
|
+
* @NgModule({
|
|
63
|
+
* providers: [
|
|
64
|
+
* provideLocalization({}, withHttpLanguageQueryParam({ allowedUrls: ['/api'] }))
|
|
65
|
+
* ]
|
|
66
|
+
* })
|
|
67
|
+
* export class AppModule {}
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
19
70
|
export function withHttpLanguageQueryParam(config) {
|
|
20
71
|
const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));
|
|
21
72
|
return makeLocalizationFeature(providers);
|
|
22
73
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLXF1ZXJ5LXBhcmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvY2FsaXphdGlvbi9zcmMvbGliL2ZlYXR1cmVzL3dpdGgtaHR0cC1sYW5ndWFnZS1xdWVyeS1wYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFpQjlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBMkM7SUFDNUgsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQUUsU0FBUztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZJO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBK0M7SUFDeEYsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RyxPQUFPLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkZlYXR1cmUsIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEhUVFBfTEFOR1VBR0VfUVVFUlkgPSAnbGFuZ3VhZ2UnO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEhUVFAgaW50ZXJjZXB0b3IgdGhhdCBhcHBlbmRzIHRoZSBjdXJyZW50XG4gKiBsYW5ndWFnZSBzZXR0aW5nIGFzIGEgcXVlcnkgcGFyYW1ldGVyIHRvIG91dGdvaW5nIHJlcXVlc3RzLiBUaGlzIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzXG4gKiB3aGljaCByZXF1ZXN0cyBzaG91bGQgaGF2ZSB0aGUgbGFuZ3VhZ2UgcGFyYW1ldGVyIGFwcGVuZGVkIGJhc2VkIG9uIHRoZWlyIFVSTHMuXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBSZWdFeHA+fSBhbGxvd2VkVXJscyAtIFVSTHMgKG9yIHBhdHRlcm5zIG1hdGNoaW5nIFVSTHMpIHRvIHdoaWNoXG4gKiB0aGUgbGFuZ3VhZ2UgcXVlcnkgcGFyYW1ldGVyIHNob3VsZCBiZSBhcHBlbmRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcXVlcnlQYXJhbU5hbWU9SFRUUF9MQU5HVUFHRV9RVUVSWV0gLSBUaGUgbmFtZSBvZiB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gKiB1c2VkIHRvIHRyYW5zbWl0IHRoZSBjdXJyZW50IGxhbmd1YWdlLiBEZWZhdWx0cyB0byAnbGFuZ3VhZ2UnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvckNvbmZpZyB7XG4gIGFsbG93ZWRVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICBxdWVyeVBhcmFtTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEhUVFAgaW50ZXJjZXB0b3IgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoZSBjdXJyZW50IGxhbmd1YWdlIGFzIGEgcXVlcnkgcGFyYW1ldGVyXG4gKiB0byBvdXRnb2luZyBIVFRQIHJlcXVlc3RzIHRoYXQgbWF0Y2ggc3BlY2lmaWVkIFVSTHMuIFRoaXMgaW50ZXJjZXB0b3IgZW5hYmxlcyBkeW5hbWljIGNvbnRlbnRcbiAqIGxvY2FsaXphdGlvbiBieSBpbmZvcm1pbmcgdGhlIGJhY2tlbmQgb2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UuXG4gKlxuICogQHBhcmFtIHtIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnRlcmNlcHRvcixcbiAqIGluY2x1ZGluZyBhbGxvd2VkIFVSTHMgYW5kIGFuIG9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgcXVlcnkgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0h0dHBJbnRlcmNlcHRvckZufSBUaGUgaW50ZXJjZXB0b3IgZnVuY3Rpb24gcmVhZHkgdG8gYmUgYXBwbGllZCB0byB0aGUgSFRUUCBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBcHBseWluZyB0aGUgaW50ZXJjZXB0b3IgaW4gYW4gQW5ndWxhciBtb2R1bGVcbiAqIGltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyB3aXRoSHR0cExhbmd1YWdlUXVlcnlQYXJhbSB9IGZyb20gJ0BvZHgvYW5ndWxhci9sb2NhbGl6YXRpb24nO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXSxcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbXG4gKiAgICAgICB3aXRoSHR0cExhbmd1YWdlUXVlcnlQYXJhbSh7IGFsbG93ZWRVcmxzOiBbJy9hcGkvcmVzb3VyY2VzJ10gfSlcbiAqICAgICBdKSlcbiAqICAgXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcGlNb2R1bGUge31cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvcih7IGFsbG93ZWRVcmxzLCBxdWVyeVBhcmFtTmFtZSB9OiBIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRQYXJhbXM6IHsgW3F1ZXJ5UGFyYW1OYW1lID8/IEhUVFBfTEFOR1VBR0VfUVVFUlldOiBsYW5ndWFnZSB9IH0pKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgSFRUUCBpbnRlcmNlcHRvciB0aGF0IGFwcGVuZHMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYXMgYSBxdWVyeSBwYXJhbWV0ZXIgdG9cbiAqIG91dGdvaW5nIHJlcXVlc3RzIGZvciBjb25maWd1cmVkIFVSTHMgYXMgYSBsb2NhbGl6YXRpb24gZmVhdHVyZS4gVGhpcyB1dGlsaXR5IGZ1bmN0aW9uXG4gKiBzaW1wbGlmaWVzIHRoZSBzZXR1cCBieSBidW5kbGluZyB0aGUgaW50ZXJjZXB0b3IgaW50byBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgZWFzaWx5IGludGVncmF0ZWRcbiAqIHdpdGggbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlUXVlcnlQYXJhbUludGVyY2VwdG9yQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIGZvciBhcHBlbmRpbmcgdGhlXG4gKiBsYW5ndWFnZSBxdWVyeSBwYXJhbWV0ZXIsIGluY2x1ZGluZyBhbGxvd2VkIFVSTHMgYW5kIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBuYW1lLlxuICogQHJldHVybnMge0xvY2FsaXphdGlvbkZlYXR1cmV9IEEgbG9jYWxpemF0aW9uIGZlYXR1cmUgZW5jYXBzdWxhdGluZyB0aGUgaW50ZXJjZXB0b3IsIHJlYWR5XG4gKiBmb3IgaW50ZWdyYXRpb24gd2l0aCB0aGUgYXBwbGljYXRpb24ncyBsb2NhbGl6YXRpb24gc2V0dXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlZ3JhdGluZyB0aGUgbG9jYWxpemF0aW9uIGZlYXR1cmUgaW4gYW4gQW5ndWxhciBtb2R1bGVcbiAqIGltcG9ydCB7IHByb3ZpZGVMb2NhbGl6YXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqIGltcG9ydCB7IHdpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtIH0gZnJvbSAnQG9keC9hbmd1bGFyL2xvY2FsaXphdGlvbic7XG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZUxvY2FsaXphdGlvbih7fSwgd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW0oeyBhbGxvd2VkVXJsczogWycvYXBpJ10gfSkpXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtKGNvbmZpZzogSHR0cExhbmd1YWdlUXVlcnlQYXJhbUludGVyY2VwdG9yQ29uZmlnKTogTG9jYWxpemF0aW9uRmVhdHVyZSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW3dpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3IoY29uZmlnKV0pKTtcblxuICByZXR1cm4gbWFrZUxvY2FsaXphdGlvbkZlYXR1cmUocHJvdmlkZXJzKTtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { WindowRef } from '@odx/angular';
|
|
3
|
+
/**
|
|
4
|
+
* Asynchronously loads the browser's current language setting by utilizing the `WindowRef` service.
|
|
5
|
+
* This function is intended to be used as a dynamic language loader within a localization configuration,
|
|
6
|
+
* allowing applications to automatically adapt to the user's preferred language as specified in their
|
|
7
|
+
* browser settings.
|
|
8
|
+
*
|
|
9
|
+
* The `WindowRef` service abstracts window-related operations, making it easier to interact with global
|
|
10
|
+
* browser properties and methods in a testable and platform-agnostic way. This function makes use of
|
|
11
|
+
* `WindowRef` to access the navigator's language setting in a safe and Angular-friendly manner.
|
|
12
|
+
*
|
|
13
|
+
* @returns {Promise<string>} A promise that resolves to the language code (e.g., 'en', 'fr') of the
|
|
14
|
+
* browser's currently configured language. This can then be used to set the active language in a
|
|
15
|
+
* localization configuration.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Example usage in a localization configuration
|
|
20
|
+
* import { provideLocalization } from '@odx/angular/utils';
|
|
21
|
+
* import { browserLanguageLoader } from '@odx/angular/localization';
|
|
22
|
+
*
|
|
23
|
+
* @NgModule({
|
|
24
|
+
* providers: [
|
|
25
|
+
* provideLocalization({
|
|
26
|
+
* activeLanguageLoader: browserLanguageLoader,
|
|
27
|
+
* availableLanguages: ['en', 'es', 'fr'],
|
|
28
|
+
* availableLocales: ['en-US', 'es-ES', 'fr-FR']
|
|
29
|
+
* })
|
|
30
|
+
* ]
|
|
31
|
+
* })
|
|
32
|
+
* export class AppModule { }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
3
35
|
export const browserLanguageLoader = async () => {
|
|
4
36
|
return inject(WindowRef).getLanguage();
|
|
5
37
|
};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9hZGVycy9icm93c2VyLWxhbmd1YWdlLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBcUIsS0FBSyxJQUFJLEVBQUU7SUFDaEUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgTGFuZ3VhZ2VMb2FkZXJGbiB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxhbmd1YWdlIHNldHRpbmcgYnkgdXRpbGl6aW5nIHRoZSBgV2luZG93UmVmYCBzZXJ2aWNlLlxuICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgZHluYW1pYyBsYW5ndWFnZSBsb2FkZXIgd2l0aGluIGEgbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24sXG4gKiBhbGxvd2luZyBhcHBsaWNhdGlvbnMgdG8gYXV0b21hdGljYWxseSBhZGFwdCB0byB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBhcyBzcGVjaWZpZWQgaW4gdGhlaXJcbiAqIGJyb3dzZXIgc2V0dGluZ3MuXG4gKlxuICogVGhlIGBXaW5kb3dSZWZgIHNlcnZpY2UgYWJzdHJhY3RzIHdpbmRvdy1yZWxhdGVkIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aCBnbG9iYWxcbiAqIGJyb3dzZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiBhIHRlc3RhYmxlIGFuZCBwbGF0Zm9ybS1hZ25vc3RpYyB3YXkuIFRoaXMgZnVuY3Rpb24gbWFrZXMgdXNlIG9mXG4gKiBgV2luZG93UmVmYCB0byBhY2Nlc3MgdGhlIG5hdmlnYXRvcidzIGxhbmd1YWdlIHNldHRpbmcgaW4gYSBzYWZlIGFuZCBBbmd1bGFyLWZyaWVuZGx5IG1hbm5lci5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgJ2VuJywgJ2ZyJykgb2YgdGhlXG4gKiBicm93c2VyJ3MgY3VycmVudGx5IGNvbmZpZ3VyZWQgbGFuZ3VhZ2UuIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBzZXQgdGhlIGFjdGl2ZSBsYW5ndWFnZSBpbiBhXG4gKiBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEV4YW1wbGUgdXNhZ2UgaW4gYSBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvblxuICogaW1wb3J0IHsgcHJvdmlkZUxvY2FsaXphdGlvbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG4gKiBpbXBvcnQgeyBicm93c2VyTGFuZ3VhZ2VMb2FkZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlTG9jYWxpemF0aW9uKHtcbiAqICAgICAgIGFjdGl2ZUxhbmd1YWdlTG9hZGVyOiBicm93c2VyTGFuZ3VhZ2VMb2FkZXIsXG4gKiAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM6IFsnZW4nLCAnZXMnLCAnZnInXSxcbiAqICAgICAgIGF2YWlsYWJsZUxvY2FsZXM6IFsnZW4tVVMnLCAnZXMtRVMnLCAnZnItRlInXVxuICogICAgIH0pXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBicm93c2VyTGFuZ3VhZ2VMb2FkZXI6IExhbmd1YWdlTG9hZGVyRm4gPSBhc3luYyAoKSA9PiB7XG4gIHJldHVybiBpbmplY3QoV2luZG93UmVmKS5nZXRMYW5ndWFnZSgpO1xufTtcbiJdfQ==
|