@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
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import { availableThemes } from '../models';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the specified theme by checking if it exists in the predefined list of available themes.
|
|
4
|
+
* This function ensures that only valid themes are used in the application, providing a safeguard
|
|
5
|
+
* against invalid theme names and facilitating the dynamic application of themes.
|
|
6
|
+
*
|
|
7
|
+
* @param {string | null} [theme] - The name of the theme to resolve. It's optional and can be `null`.
|
|
8
|
+
* @returns {Theme | null} - Returns the resolved `Theme` object if the theme is found within the list of `availableThemes`;
|
|
9
|
+
* otherwise, returns `null` to indicate the theme is not recognized or available.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Assuming 'dark' and 'light' are in the availableThemes array
|
|
14
|
+
* console.log(resolveTheme('dark')); // Outputs the 'dark' Theme object
|
|
15
|
+
* console.log(resolveTheme('unknown')); // Outputs null
|
|
16
|
+
*
|
|
17
|
+
* // Using resolveTheme to apply a user-selected theme
|
|
18
|
+
* const userSelectedTheme = getUserSelectedTheme(); // This function gets the user's theme choice
|
|
19
|
+
* const themeToApply = resolveTheme(userSelectedTheme);
|
|
20
|
+
* if (themeToApply) {
|
|
21
|
+
* applyTheme(themeToApply); // This function applies the resolved theme to the application
|
|
22
|
+
* } else {
|
|
23
|
+
* console.warn('Selected theme is not available.');
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
2
27
|
export function resolveTheme(theme) {
|
|
3
28
|
return availableThemes.find((t) => t === theme) ?? null;
|
|
4
29
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS10aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy9yZXNvbHZlLXRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVMsTUFBTSxXQUFXLENBQUM7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBcUI7SUFDaEQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdmFpbGFibGVUaGVtZXMsIFRoZW1lIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgc3BlY2lmaWVkIHRoZW1lIGJ5IGNoZWNraW5nIGlmIGl0IGV4aXN0cyBpbiB0aGUgcHJlZGVmaW5lZCBsaXN0IG9mIGF2YWlsYWJsZSB0aGVtZXMuXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IHZhbGlkIHRoZW1lcyBhcmUgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24sIHByb3ZpZGluZyBhIHNhZmVndWFyZFxuICogYWdhaW5zdCBpbnZhbGlkIHRoZW1lIG5hbWVzIGFuZCBmYWNpbGl0YXRpbmcgdGhlIGR5bmFtaWMgYXBwbGljYXRpb24gb2YgdGhlbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW3RoZW1lXSAtIFRoZSBuYW1lIG9mIHRoZSB0aGVtZSB0byByZXNvbHZlLiBJdCdzIG9wdGlvbmFsIGFuZCBjYW4gYmUgYG51bGxgLlxuICogQHJldHVybnMge1RoZW1lIHwgbnVsbH0gLSBSZXR1cm5zIHRoZSByZXNvbHZlZCBgVGhlbWVgIG9iamVjdCBpZiB0aGUgdGhlbWUgaXMgZm91bmQgd2l0aGluIHRoZSBsaXN0IG9mIGBhdmFpbGFibGVUaGVtZXNgO1xuICogb3RoZXJ3aXNlLCByZXR1cm5zIGBudWxsYCB0byBpbmRpY2F0ZSB0aGUgdGhlbWUgaXMgbm90IHJlY29nbml6ZWQgb3IgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gQXNzdW1pbmcgJ2RhcmsnIGFuZCAnbGlnaHQnIGFyZSBpbiB0aGUgYXZhaWxhYmxlVGhlbWVzIGFycmF5XG4gKiBjb25zb2xlLmxvZyhyZXNvbHZlVGhlbWUoJ2RhcmsnKSk7IC8vIE91dHB1dHMgdGhlICdkYXJrJyBUaGVtZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVUaGVtZSgndW5rbm93bicpKTsgLy8gT3V0cHV0cyBudWxsXG4gKlxuICogLy8gVXNpbmcgcmVzb2x2ZVRoZW1lIHRvIGFwcGx5IGEgdXNlci1zZWxlY3RlZCB0aGVtZVxuICogY29uc3QgdXNlclNlbGVjdGVkVGhlbWUgPSBnZXRVc2VyU2VsZWN0ZWRUaGVtZSgpOyAvLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHVzZXIncyB0aGVtZSBjaG9pY2VcbiAqIGNvbnN0IHRoZW1lVG9BcHBseSA9IHJlc29sdmVUaGVtZSh1c2VyU2VsZWN0ZWRUaGVtZSk7XG4gKiBpZiAodGhlbWVUb0FwcGx5KSB7XG4gKiAgIGFwcGx5VGhlbWUodGhlbWVUb0FwcGx5KTsgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSByZXNvbHZlZCB0aGVtZSB0byB0aGUgYXBwbGljYXRpb25cbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUud2FybignU2VsZWN0ZWQgdGhlbWUgaXMgbm90IGF2YWlsYWJsZS4nKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHRoZW1lPzogc3RyaW5nIHwgbnVsbCk6IFRoZW1lIHwgbnVsbCB7XG4gIHJldHVybiBhdmFpbGFibGVUaGVtZXMuZmluZCgodCkgPT4gdCA9PT0gdGhlbWUpID8/IG51bGw7XG59XG4iXX0=
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { resolveTheme } from './resolve-theme';
|
|
2
|
+
/**
|
|
3
|
+
* The key used to store the selected theme in `Storage`.
|
|
4
|
+
* This constant ensures consistent access to the theme setting across the application.
|
|
5
|
+
*/
|
|
2
6
|
export const THEME_STORAGE_NAME = '@odx/angular/theming:SelectedTheme';
|
|
7
|
+
/**
|
|
8
|
+
* Saves the specified theme to storage. This function abstracts the storage interaction,
|
|
9
|
+
* providing a fail-safe mechanism to avoid exceptions if the storage is not available.
|
|
10
|
+
*
|
|
11
|
+
* @param {Storage | null | undefined} storage - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
|
|
12
|
+
* @param {Theme} theme - The theme to save. Should be a value that is recognized by the application's theming system.
|
|
13
|
+
* @throws Will silently catch and ignore any exceptions caused by storage limitations or permissions.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* // Example usage with localStorage
|
|
18
|
+
* saveTheme(localStorage, 'dark');
|
|
19
|
+
*
|
|
20
|
+
* // Using sessionStorage instead
|
|
21
|
+
* saveTheme(sessionStorage, 'light');
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
3
24
|
export function saveTheme(storage, theme) {
|
|
4
25
|
try {
|
|
5
26
|
storage?.setItem(THEME_STORAGE_NAME, theme);
|
|
@@ -8,6 +29,27 @@ export function saveTheme(storage, theme) {
|
|
|
8
29
|
//
|
|
9
30
|
}
|
|
10
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Reads the theme from storage, attempting to resolve it to a valid application theme.
|
|
34
|
+
* If the theme cannot be found or is invalid, `null` is returned. This function also provides
|
|
35
|
+
* error handling for any storage access issues, ensuring the application can gracefully handle
|
|
36
|
+
* scenarios where storage is not available or accessible.
|
|
37
|
+
*
|
|
38
|
+
* @param {Storage | null} [storage] - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
|
|
39
|
+
* @returns {Theme | null} - The resolved theme if found and valid; otherwise, `null`.
|
|
40
|
+
* @throws Will silently catch and ignore any exceptions caused by storage access, returning `null`.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* // Reading theme from localStorage
|
|
45
|
+
* const theme = readTheme(localStorage);
|
|
46
|
+
* if (theme) {
|
|
47
|
+
* applyTheme(theme); // Assuming applyTheme is a function to apply the theme
|
|
48
|
+
* } else {
|
|
49
|
+
* console.warn('No saved theme found or theme is invalid.');
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
11
53
|
export function readTheme(storage) {
|
|
12
54
|
try {
|
|
13
55
|
return resolveTheme(storage?.getItem(THEME_STORAGE_NAME)) ?? null;
|
|
@@ -16,4 +58,4 @@ export function readTheme(storage) {
|
|
|
16
58
|
return null;
|
|
17
59
|
}
|
|
18
60
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy90aGVtZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBbUMsRUFBRSxLQUFZO0lBQ3pFLElBQUk7UUFDRixPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBQUMsTUFBTTtRQUNOLEVBQUU7S0FDSDtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQXdCO0lBQ2hELElBQUk7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDbkU7SUFBQyxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyByZXNvbHZlVGhlbWUgfSBmcm9tICcuL3Jlc29sdmUtdGhlbWUnO1xuXG4vKipcbiAqIFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgc2VsZWN0ZWQgdGhlbWUgaW4gYFN0b3JhZ2VgLlxuICogVGhpcyBjb25zdGFudCBlbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSB0aGVtZSBzZXR0aW5nIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVNRV9TVE9SQUdFX05BTUUgPSAnQG9keC9hbmd1bGFyL3RoZW1pbmc6U2VsZWN0ZWRUaGVtZSc7XG5cbi8qKlxuICogU2F2ZXMgdGhlIHNwZWNpZmllZCB0aGVtZSB0byBzdG9yYWdlLiBUaGlzIGZ1bmN0aW9uIGFic3RyYWN0cyB0aGUgc3RvcmFnZSBpbnRlcmFjdGlvbixcbiAqIHByb3ZpZGluZyBhIGZhaWwtc2FmZSBtZWNoYW5pc20gdG8gYXZvaWQgZXhjZXB0aW9ucyBpZiB0aGUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSB7U3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWR9IHN0b3JhZ2UgLSBUaGUgc3RvcmFnZSBtZWNoYW5pc20gdG8gdXNlLCB0eXBpY2FsbHkgYGxvY2FsU3RvcmFnZWAgb3IgYHNlc3Npb25TdG9yYWdlYC5cbiAqIEBwYXJhbSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHNhdmUuIFNob3VsZCBiZSBhIHZhbHVlIHRoYXQgaXMgcmVjb2duaXplZCBieSB0aGUgYXBwbGljYXRpb24ncyB0aGVtaW5nIHN5c3RlbS5cbiAqIEB0aHJvd3MgV2lsbCBzaWxlbnRseSBjYXRjaCBhbmQgaWdub3JlIGFueSBleGNlcHRpb25zIGNhdXNlZCBieSBzdG9yYWdlIGxpbWl0YXRpb25zIG9yIHBlcm1pc3Npb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRXhhbXBsZSB1c2FnZSB3aXRoIGxvY2FsU3RvcmFnZVxuICogc2F2ZVRoZW1lKGxvY2FsU3RvcmFnZSwgJ2RhcmsnKTtcbiAqXG4gKiAvLyBVc2luZyBzZXNzaW9uU3RvcmFnZSBpbnN0ZWFkXG4gKiBzYXZlVGhlbWUoc2Vzc2lvblN0b3JhZ2UsICdsaWdodCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlVGhlbWUoc3RvcmFnZTogU3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWQsIHRoZW1lOiBUaGVtZSk6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2U/LnNldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FLCB0aGVtZSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgdGhlbWUgZnJvbSBzdG9yYWdlLCBhdHRlbXB0aW5nIHRvIHJlc29sdmUgaXQgdG8gYSB2YWxpZCBhcHBsaWNhdGlvbiB0aGVtZS5cbiAqIElmIHRoZSB0aGVtZSBjYW5ub3QgYmUgZm91bmQgb3IgaXMgaW52YWxpZCwgYG51bGxgIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIGFsc28gcHJvdmlkZXNcbiAqIGVycm9yIGhhbmRsaW5nIGZvciBhbnkgc3RvcmFnZSBhY2Nlc3MgaXNzdWVzLCBlbnN1cmluZyB0aGUgYXBwbGljYXRpb24gY2FuIGdyYWNlZnVsbHkgaGFuZGxlXG4gKiBzY2VuYXJpb3Mgd2hlcmUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtTdG9yYWdlIHwgbnVsbH0gW3N0b3JhZ2VdIC0gVGhlIHN0b3JhZ2UgbWVjaGFuaXNtIHRvIHVzZSwgdHlwaWNhbGx5IGBsb2NhbFN0b3JhZ2VgIG9yIGBzZXNzaW9uU3RvcmFnZWAuXG4gKiBAcmV0dXJucyB7VGhlbWUgfCBudWxsfSAtIFRoZSByZXNvbHZlZCB0aGVtZSBpZiBmb3VuZCBhbmQgdmFsaWQ7IG90aGVyd2lzZSwgYG51bGxgLlxuICogQHRocm93cyBXaWxsIHNpbGVudGx5IGNhdGNoIGFuZCBpZ25vcmUgYW55IGV4Y2VwdGlvbnMgY2F1c2VkIGJ5IHN0b3JhZ2UgYWNjZXNzLCByZXR1cm5pbmcgYG51bGxgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUmVhZGluZyB0aGVtZSBmcm9tIGxvY2FsU3RvcmFnZVxuICogY29uc3QgdGhlbWUgPSByZWFkVGhlbWUobG9jYWxTdG9yYWdlKTtcbiAqIGlmICh0aGVtZSkge1xuICogICBhcHBseVRoZW1lKHRoZW1lKTsgLy8gQXNzdW1pbmcgYXBwbHlUaGVtZSBpcyBhIGZ1bmN0aW9uIHRvIGFwcGx5IHRoZSB0aGVtZVxuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS53YXJuKCdObyBzYXZlZCB0aGVtZSBmb3VuZCBvciB0aGVtZSBpcyBpbnZhbGlkLicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGhlbWUoc3RvcmFnZT86IFN0b3JhZ2UgfCBudWxsKTogVGhlbWUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzb2x2ZVRoZW1lKHN0b3JhZ2U/LmdldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FKSkgPz8gbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,11 +2,44 @@ import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angu
|
|
|
2
2
|
import { createConfigTokens } from '@odx/angular/utils';
|
|
3
3
|
import { Theme } from './models';
|
|
4
4
|
import { ThemingService } from './theming.service';
|
|
5
|
+
/**
|
|
6
|
+
* Utility created by `createConfigTokens` for managing theming configuration tokens and functions.
|
|
7
|
+
* Provides easy access to theming configuration, default values, and dependency injection utilities.
|
|
8
|
+
*/
|
|
5
9
|
export const { ThemingConfig, injectThemingConfig, provideThemingConfig } = createConfigTokens('Theming', '@odx/angular/theme', {
|
|
6
10
|
autoDetect: false,
|
|
7
11
|
defaultTheme: Theme.LIGHT,
|
|
8
12
|
storage: null,
|
|
9
13
|
});
|
|
14
|
+
/**
|
|
15
|
+
* Provides the theming configuration to the application and initializes the `ThemingService`
|
|
16
|
+
* based on the provided configuration. This function simplifies the setup of a dynamic theming
|
|
17
|
+
* system, integrating with Angular's environment initializers to ensure proper initialization.
|
|
18
|
+
*
|
|
19
|
+
* @template D - The dependencies required by the theming configuration, if any.
|
|
20
|
+
* @param {ConfigProvider<Partial<ThemingConfig>, D>} config - The theming configuration or a configuration factory provider.
|
|
21
|
+
* @returns {EnvironmentProviders} An array of providers for setting up theming in the application.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* // Providing a simple theming configuration
|
|
26
|
+
* provideTheming({
|
|
27
|
+
* autoDetect: true,
|
|
28
|
+
* defaultTheme: Theme.DARK,
|
|
29
|
+
* storage: localStorage,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Providing a theming configuration with dependencies
|
|
33
|
+
* provideTheming({
|
|
34
|
+
* useFactory: (deps: Dependencies) => ({
|
|
35
|
+
* autoDetect: deps.setting,
|
|
36
|
+
* defaultTheme: Theme.DARK,
|
|
37
|
+
* storage: localStorage,
|
|
38
|
+
* }),
|
|
39
|
+
* deps: [SomeDependency],
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
10
43
|
export function provideTheming(config) {
|
|
11
44
|
return makeEnvironmentProviders([
|
|
12
45
|
provideThemingConfig(config),
|
|
@@ -18,4 +51,4 @@ export function provideTheming(config) {
|
|
|
18
51
|
},
|
|
19
52
|
]);
|
|
20
53
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdGhlbWluZy9zcmMvbGliL3RoZW1pbmcuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBd0IsTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBc0Msa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXVCbkQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDOUgsVUFBVSxFQUFFLEtBQUs7SUFDakIsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLO0lBQ3pCLE9BQU8sRUFBRSxJQUFJO0NBQ0csQ0FBQyxDQUFDO0FBRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBaUQ7SUFFakQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QixvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDNUI7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQzlDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBFbnZpcm9ubWVudFByb3ZpZGVycywgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGNyZWF0ZUNvbmZpZ1Rva2VucyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFRoZW1pbmdTZXJ2aWNlIH0gZnJvbSAnLi90aGVtaW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgdGhlbWluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1pbmdDb25maWcge1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0aGVtZSBzaG91bGQgYmUgYXV0by1kZXRlY3RlZCBiYXNlZCBvbiBzeXN0ZW0gcHJlZmVyZW5jZXMuXG4gICAqL1xuICBhdXRvRGV0ZWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgdGhlbWUgdG8gYmUgdXNlZCBpZiBhdXRvLWRldGVjdGlvbiBpcyBub3QgZW5hYmxlZCBvciBmYWlscy5cbiAgICovXG4gIGRlZmF1bHRUaGVtZTogVGhlbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdG9yYWdlIG1lY2hhbmlzbSAobGlrZSBgbG9jYWxTdG9yYWdlYCBvciBgc2Vzc2lvblN0b3JhZ2VgKSB0byBwZXJzaXN0IHRoZW1lIHNldHRpbmdzLFxuICAgKiBvciBgbnVsbGAgdG8gZGlzYWJsZSBwZXJzaXN0ZW5jZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBTdG9yYWdlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGNyZWF0ZWQgYnkgYGNyZWF0ZUNvbmZpZ1Rva2Vuc2AgZm9yIG1hbmFnaW5nIHRoZW1pbmcgY29uZmlndXJhdGlvbiB0b2tlbnMgYW5kIGZ1bmN0aW9ucy5cbiAqIFByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZW1pbmcgY29uZmlndXJhdGlvbiwgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmN5IGluamVjdGlvbiB1dGlsaXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB7IFRoZW1pbmdDb25maWcsIGluamVjdFRoZW1pbmdDb25maWcsIHByb3ZpZGVUaGVtaW5nQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoJ1RoZW1pbmcnLCAnQG9keC9hbmd1bGFyL3RoZW1lJywge1xuICBhdXRvRGV0ZWN0OiBmYWxzZSxcbiAgZGVmYXVsdFRoZW1lOiBUaGVtZS5MSUdIVCxcbiAgc3RvcmFnZTogbnVsbCxcbn0gYXMgVGhlbWluZ0NvbmZpZyk7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiB0byB0aGUgYXBwbGljYXRpb24gYW5kIGluaXRpYWxpemVzIHRoZSBgVGhlbWluZ1NlcnZpY2VgXG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi4gVGhpcyBmdW5jdGlvbiBzaW1wbGlmaWVzIHRoZSBzZXR1cCBvZiBhIGR5bmFtaWMgdGhlbWluZ1xuICogc3lzdGVtLCBpbnRlZ3JhdGluZyB3aXRoIEFuZ3VsYXIncyBlbnZpcm9ubWVudCBpbml0aWFsaXplcnMgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgRCAtIFRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiwgaWYgYW55LlxuICogQHBhcmFtIHtDb25maWdQcm92aWRlcjxQYXJ0aWFsPFRoZW1pbmdDb25maWc+LCBEPn0gY29uZmlnIC0gVGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiBvciBhIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSBwcm92aWRlci5cbiAqIEByZXR1cm5zIHtFbnZpcm9ubWVudFByb3ZpZGVyc30gQW4gYXJyYXkgb2YgcHJvdmlkZXJzIGZvciBzZXR0aW5nIHVwIHRoZW1pbmcgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgc2ltcGxlIHRoZW1pbmcgY29uZmlndXJhdGlvblxuICogcHJvdmlkZVRoZW1pbmcoe1xuICogICBhdXRvRGV0ZWN0OiB0cnVlLFxuICogICBkZWZhdWx0VGhlbWU6IFRoZW1lLkRBUkssXG4gKiAgIHN0b3JhZ2U6IGxvY2FsU3RvcmFnZSxcbiAqIH0pO1xuICpcbiAqIC8vIFByb3ZpZGluZyBhIHRoZW1pbmcgY29uZmlndXJhdGlvbiB3aXRoIGRlcGVuZGVuY2llc1xuICogcHJvdmlkZVRoZW1pbmcoe1xuICogICB1c2VGYWN0b3J5OiAoZGVwczogRGVwZW5kZW5jaWVzKSA9PiAoe1xuICogICAgIGF1dG9EZXRlY3Q6IGRlcHMuc2V0dGluZyxcbiAqICAgICBkZWZhdWx0VGhlbWU6IFRoZW1lLkRBUkssXG4gKiAgICAgc3RvcmFnZTogbG9jYWxTdG9yYWdlLFxuICogICB9KSxcbiAqICAgZGVwczogW1NvbWVEZXBlbmRlbmN5XSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGhlbWluZzxEIGV4dGVuZHMgQ29uZmlnRGVwZW5kZW5jaWVzID0gQ29uZmlnRGVwZW5kZW5jaWVzPFRoZW1pbmdDb25maWc+PihcbiAgY29uZmlnOiBDb25maWdQcm92aWRlcjxQYXJ0aWFsPFRoZW1pbmdDb25maWc+LCBEPixcbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgcHJvdmlkZVRoZW1pbmdDb25maWcoY29uZmlnKSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+ICgpID0+IGluamVjdChUaGVtaW5nU2VydmljZSksXG4gICAgICBkZXBzOiBbVGhlbWluZ0NvbmZpZ10sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==
|
|
@@ -7,24 +7,49 @@ import { Theme } from './models';
|
|
|
7
7
|
import { injectThemingConfig } from './theming.config';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export const THEME_ATTRIBUTE_NAME = 'odxTheme';
|
|
10
|
+
/**
|
|
11
|
+
* Manages theming for the application. It allows for dynamic theme selection, automatically saves theme preferences,
|
|
12
|
+
* and applies the user's preferred theme or the default theme based on configuration settings.
|
|
13
|
+
*
|
|
14
|
+
* The service leverages the BehaviorSubject pattern to reactively handle theme changes across the application,
|
|
15
|
+
* ensuring that subscribers are notified whenever the theme changes. It also interacts with the DOM directly
|
|
16
|
+
* to apply the current theme and with the provided storage mechanism to persist theme preferences.
|
|
17
|
+
*/
|
|
10
18
|
export class ThemingService {
|
|
11
19
|
constructor() {
|
|
12
20
|
this.config = injectThemingConfig();
|
|
13
21
|
this.document = inject(DOCUMENT);
|
|
14
22
|
this.windowRef = inject(WindowRef);
|
|
15
23
|
this.theme$$ = new BehaviorSubject(this.getInitialTheme());
|
|
24
|
+
/**
|
|
25
|
+
* An observable stream of the current theme, emitting values whenever the theme changes.
|
|
26
|
+
* Subscribers to this observable can react to theme changes in real-time.
|
|
27
|
+
*/
|
|
16
28
|
this.theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
17
29
|
this.theme$.subscribe((theme) => {
|
|
18
30
|
this.document.body.setAttribute(THEME_ATTRIBUTE_NAME, theme);
|
|
19
31
|
saveTheme(this.config.storage, theme);
|
|
20
32
|
});
|
|
21
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Selects and applies a given theme by updating the BehaviorSubject and persisting the preference.
|
|
36
|
+
*
|
|
37
|
+
* @param {Theme} theme - The theme to apply.
|
|
38
|
+
*/
|
|
22
39
|
selectTheme(theme) {
|
|
23
40
|
this.theme$$.next(theme);
|
|
24
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Retrieves the currently selected theme.
|
|
44
|
+
*
|
|
45
|
+
* @returns {Theme} The currently selected theme.
|
|
46
|
+
*/
|
|
25
47
|
getSelectedTheme() {
|
|
26
48
|
return this.theme$$.getValue();
|
|
27
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Toggles between dark and light themes, depending on the current theme.
|
|
52
|
+
*/
|
|
28
53
|
toggleDarkMode() {
|
|
29
54
|
const currentTheme = this.getSelectedTheme();
|
|
30
55
|
if (currentTheme === Theme.DARK) {
|
|
@@ -34,9 +59,15 @@ export class ThemingService {
|
|
|
34
59
|
this.enableDarkMode();
|
|
35
60
|
}
|
|
36
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Enables the dark mode theme.
|
|
64
|
+
*/
|
|
37
65
|
enableDarkMode() {
|
|
38
66
|
this.selectTheme(Theme.DARK);
|
|
39
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Enables the light mode theme.
|
|
70
|
+
*/
|
|
40
71
|
enableLightMode() {
|
|
41
72
|
this.selectTheme(Theme.LIGHT);
|
|
42
73
|
}
|
|
@@ -54,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
54
85
|
type: Injectable,
|
|
55
86
|
args: [{ providedIn: 'root' }]
|
|
56
87
|
}], ctorParameters: function () { return []; } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RoZW1pbmcvc3JjL2xpYi90aGVtaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFdkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0FBRS9DOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sY0FBYztJQVl6QjtRQVhpQixXQUFNLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFRLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRTlFOzs7V0FHRztRQUNhLFdBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUdqSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxLQUFZO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdGLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBRUQsT0FBTyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbkQsQ0FBQzsrR0F2RVUsY0FBYzttSEFBZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHByZWZlcnNEYXJrVGhlbWUsIHJlYWRUaGVtZSwgc2F2ZVRoZW1lIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0VGhlbWluZ0NvbmZpZyB9IGZyb20gJy4vdGhlbWluZy5jb25maWcnO1xuXG5leHBvcnQgY29uc3QgVEhFTUVfQVRUUklCVVRFX05BTUUgPSAnb2R4VGhlbWUnO1xuXG4vKipcbiAqIE1hbmFnZXMgdGhlbWluZyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgdGhlbWUgc2VsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IHNhdmVzIHRoZW1lIHByZWZlcmVuY2VzLFxuICogYW5kIGFwcGxpZXMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGhlbWUgb3IgdGhlIGRlZmF1bHQgdGhlbWUgYmFzZWQgb24gY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbiAqXG4gKiBUaGUgc2VydmljZSBsZXZlcmFnZXMgdGhlIEJlaGF2aW9yU3ViamVjdCBwYXR0ZXJuIHRvIHJlYWN0aXZlbHkgaGFuZGxlIHRoZW1lIGNoYW5nZXMgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbixcbiAqIGVuc3VyaW5nIHRoYXQgc3Vic2NyaWJlcnMgYXJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoZSB0aGVtZSBjaGFuZ2VzLiBJdCBhbHNvIGludGVyYWN0cyB3aXRoIHRoZSBET00gZGlyZWN0bHlcbiAqIHRvIGFwcGx5IHRoZSBjdXJyZW50IHRoZW1lIGFuZCB3aXRoIHRoZSBwcm92aWRlZCBzdG9yYWdlIG1lY2hhbmlzbSB0byBwZXJzaXN0IHRoZW1lIHByZWZlcmVuY2VzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoZW1pbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3RUaGVtaW5nQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZW1lPih0aGlzLmdldEluaXRpYWxUaGVtZSgpKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgdGhlbWUsIGVtaXR0aW5nIHZhbHVlcyB3aGVuZXZlciB0aGUgdGhlbWUgY2hhbmdlcy5cbiAgICogU3Vic2NyaWJlcnMgdG8gdGhpcyBvYnNlcnZhYmxlIGNhbiByZWFjdCB0byB0aGVtZSBjaGFuZ2VzIGluIHJlYWwtdGltZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0aGVtZSQgPSB0aGlzLnRoZW1lJCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRoZW1lJC5zdWJzY3JpYmUoKHRoZW1lKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKFRIRU1FX0FUVFJJQlVURV9OQU1FLCB0aGVtZSk7XG4gICAgICBzYXZlVGhlbWUodGhpcy5jb25maWcuc3RvcmFnZSwgdGhlbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYW5kIGFwcGxpZXMgYSBnaXZlbiB0aGVtZSBieSB1cGRhdGluZyB0aGUgQmVoYXZpb3JTdWJqZWN0IGFuZCBwZXJzaXN0aW5nIHRoZSBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSB0byBhcHBseS5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RUaGVtZSh0aGVtZTogVGhlbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRoZW1lJCQubmV4dCh0aGVtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUaGVtZX0gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFRoZW1lKCk6IFRoZW1lIHtcbiAgICByZXR1cm4gdGhpcy50aGVtZSQkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBiZXR3ZWVuIGRhcmsgYW5kIGxpZ2h0IHRoZW1lcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHRoZW1lLlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuZ2V0U2VsZWN0ZWRUaGVtZSgpO1xuICAgIGlmIChjdXJyZW50VGhlbWUgPT09IFRoZW1lLkRBUkspIHtcbiAgICAgIHRoaXMuZW5hYmxlTGlnaHRNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgZGFyayBtb2RlIHRoZW1lLlxuICAgKi9cbiAgcHVibGljIGVuYWJsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0VGhlbWUoVGhlbWUuREFSSyk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgbGlnaHQgbW9kZSB0aGVtZS5cbiAgICovXG4gIHB1YmxpYyBlbmFibGVMaWdodE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RUaGVtZShUaGVtZS5MSUdIVCk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxUaGVtZSgpOiBUaGVtZSB7XG4gICAgbGV0IHNlbGVjdGVkVGhlbWUgPSByZWFkVGhlbWUodGhpcy5jb25maWcuc3RvcmFnZSk7XG5cbiAgICBpZiAoIXNlbGVjdGVkVGhlbWUgJiYgdGhpcy5jb25maWcuYXV0b0RldGVjdCAmJiBwcmVmZXJzRGFya1RoZW1lKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdykpIHtcbiAgICAgIHNlbGVjdGVkVGhlbWUgPSBUaGVtZS5EQVJLO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFRoZW1lID8/IHRoaXMuY29uZmlnLmRlZmF1bHRUaGVtZTtcbiAgfVxufVxuIl19
|
|
@@ -1,3 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A decorator that transforms a class method or getter into a pure function. For methods, it caches the result
|
|
3
|
+
* of the first invocation with a given set of arguments and returns the cached result on subsequent invocations
|
|
4
|
+
* with the same arguments. For getters, it caches the result of the first access and returns the cached value
|
|
5
|
+
* on subsequent accesses.
|
|
6
|
+
*
|
|
7
|
+
* This decorator is intended to improve performance by avoiding unnecessary recalculations or processing
|
|
8
|
+
* when the inputs have not changed.
|
|
9
|
+
*
|
|
10
|
+
* @template T The type of the property being decorated.
|
|
11
|
+
* @param {object} _target The prototype of the class.
|
|
12
|
+
* @param {string} propertyKey The name of the method or getter.
|
|
13
|
+
* @param {TypedPropertyDescriptor<T>} descriptor The property descriptor for the method or getter.
|
|
14
|
+
* @throws {Error} Throws an error if applied to non-function properties.
|
|
15
|
+
* @returns {TypedPropertyDescriptor<T>} A new descriptor with the getter or method patched for pure behavior.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* Usage with a getter:
|
|
19
|
+
* ```ts
|
|
20
|
+
* class ExampleClass {
|
|
21
|
+
* private _value: number = Math.random();
|
|
22
|
+
*
|
|
23
|
+
* @Pure
|
|
24
|
+
* get value(): number {
|
|
25
|
+
* console.log('Getter called');
|
|
26
|
+
* return this._value;
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* const example = new ExampleClass();
|
|
31
|
+
* console.log(example.value); // Logs 'Getter called' and the value
|
|
32
|
+
* console.log(example.value); // Logs only the value, without calling the getter again
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Usage with a method:
|
|
36
|
+
* ```ts
|
|
37
|
+
* class Counter {
|
|
38
|
+
* private count = 0;
|
|
39
|
+
*
|
|
40
|
+
* @Pure
|
|
41
|
+
* increment(step: number) {
|
|
42
|
+
* console.log('Increment called');
|
|
43
|
+
* return (this.count += step);
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* const counter = new Counter();
|
|
48
|
+
* console.log(counter.increment(1)); // Logs 'Increment called' and 1
|
|
49
|
+
* console.log(counter.increment(1)); // Logs 1 without calling increment again
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
1
52
|
export function Pure(_target, propertyKey, { get, enumerable, value }) {
|
|
2
53
|
if (get) {
|
|
3
54
|
return {
|
|
@@ -34,4 +85,4 @@ export function Pure(_target, propertyKey, { get, enumerable, value }) {
|
|
|
34
85
|
},
|
|
35
86
|
};
|
|
36
87
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2RlY29yYXRvcnMvcHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFJLE9BQWUsRUFBRSxXQUFtQixFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQThCO0lBQ2xILElBQUksR0FBRyxFQUFFO1FBQ1AsT0FBTztZQUNMLFVBQVU7WUFDVixHQUFHO2dCQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDO0tBQ0g7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDakY7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFNUIsT0FBTztRQUNMLFVBQVU7UUFDVixHQUFHO1lBQ0QsSUFBSSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxTQUFrQixDQUFDO1lBRXZCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQVcsRUFBRTtnQkFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUUzSCxJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLFNBQVMsQ0FBQztpQkFDbEI7Z0JBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUVqQixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU3RCxPQUFPLE9BQXVCLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIGRlY29yYXRvciB0aGF0IHRyYW5zZm9ybXMgYSBjbGFzcyBtZXRob2Qgb3IgZ2V0dGVyIGludG8gYSBwdXJlIGZ1bmN0aW9uLiBGb3IgbWV0aG9kcywgaXQgY2FjaGVzIHRoZSByZXN1bHRcbiAqIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uIHdpdGggYSBnaXZlbiBzZXQgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBjYWNoZWQgcmVzdWx0IG9uIHN1YnNlcXVlbnQgaW52b2NhdGlvbnNcbiAqIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLiBGb3IgZ2V0dGVycywgaXQgY2FjaGVzIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IGFjY2VzcyBhbmQgcmV0dXJucyB0aGUgY2FjaGVkIHZhbHVlXG4gKiBvbiBzdWJzZXF1ZW50IGFjY2Vzc2VzLlxuICpcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVjYWxjdWxhdGlvbnMgb3IgcHJvY2Vzc2luZ1xuICogd2hlbiB0aGUgaW5wdXRzIGhhdmUgbm90IGNoYW5nZWQuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGRlY29yYXRlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IFRoZSBwcm90b3R5cGUgb2YgdGhlIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5S2V5IFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb3IgZ2V0dGVyLlxuICogQHBhcmFtIHtUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPn0gZGVzY3JpcHRvciBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIG1ldGhvZCBvciBnZXR0ZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIGFwcGxpZWQgdG8gbm9uLWZ1bmN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7VHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD59IEEgbmV3IGRlc2NyaXB0b3Igd2l0aCB0aGUgZ2V0dGVyIG9yIG1ldGhvZCBwYXRjaGVkIGZvciBwdXJlIGJlaGF2aW9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBVc2FnZSB3aXRoIGEgZ2V0dGVyOlxuICogYGBgdHNcbiAqIGNsYXNzIEV4YW1wbGVDbGFzcyB7XG4gKiAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgPSBNYXRoLnJhbmRvbSgpO1xuICpcbiAqICAgQFB1cmVcbiAqICAgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gKiAgICAgY29uc29sZS5sb2coJ0dldHRlciBjYWxsZWQnKTtcbiAqICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBleGFtcGxlID0gbmV3IEV4YW1wbGVDbGFzcygpO1xuICogY29uc29sZS5sb2coZXhhbXBsZS52YWx1ZSk7IC8vIExvZ3MgJ0dldHRlciBjYWxsZWQnIGFuZCB0aGUgdmFsdWVcbiAqIGNvbnNvbGUubG9nKGV4YW1wbGUudmFsdWUpOyAvLyBMb2dzIG9ubHkgdGhlIHZhbHVlLCB3aXRob3V0IGNhbGxpbmcgdGhlIGdldHRlciBhZ2FpblxuICogYGBgXG4gKlxuICogVXNhZ2Ugd2l0aCBhIG1ldGhvZDpcbiAqIGBgYHRzXG4gKiBjbGFzcyBDb3VudGVyIHtcbiAqICAgcHJpdmF0ZSBjb3VudCA9IDA7XG4gKlxuICogICBAUHVyZVxuICogICBpbmNyZW1lbnQoc3RlcDogbnVtYmVyKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0luY3JlbWVudCBjYWxsZWQnKTtcbiAqICAgICByZXR1cm4gKHRoaXMuY291bnQgKz0gc3RlcCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBjb3VudGVyID0gbmV3IENvdW50ZXIoKTtcbiAqIGNvbnNvbGUubG9nKGNvdW50ZXIuaW5jcmVtZW50KDEpKTsgLy8gTG9ncyAnSW5jcmVtZW50IGNhbGxlZCcgYW5kIDFcbiAqIGNvbnNvbGUubG9nKGNvdW50ZXIuaW5jcmVtZW50KDEpKTsgLy8gTG9ncyAxIHdpdGhvdXQgY2FsbGluZyBpbmNyZW1lbnQgYWdhaW5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZTxUPihfdGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHsgZ2V0LCBlbnVtZXJhYmxlLCB2YWx1ZSB9OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+IHtcbiAgaWYgKGdldCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnVtZXJhYmxlLFxuICAgICAgZ2V0KCk6IFQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldC5jYWxsKHRoaXMpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwgeyBlbnVtZXJhYmxlLCB2YWx1ZSB9KTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAUHVyZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBmdW5jdGlvbnMgb3IgZ2V0dGVycyEnKTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUsXG4gICAgZ2V0KCk6IFQge1xuICAgICAgbGV0IHByZXZpb3VzQXJnczogcmVhZG9ubHkgdW5rbm93bltdID0gW107XG4gICAgICBsZXQgd2FzQ2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcHVyZVZhbHVlOiB1bmtub3duO1xuXG4gICAgICBjb25zdCBwYXRjaGVkID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24gPT4ge1xuICAgICAgICBjb25zdCBpc1B1cmUgPSB3YXNDYWxsZWQgJiYgcHJldmlvdXNBcmdzLmxlbmd0aCA9PT0gYXJncy5sZW5ndGggJiYgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gYXJnID09PSBwcmV2aW91c0FyZ3NbaW5kZXhdKTtcblxuICAgICAgICBpZiAoaXNQdXJlKSB7XG4gICAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzQXJncyA9IGFyZ3M7XG4gICAgICAgIHB1cmVWYWx1ZSA9IG9yaWdpbmFsVmFsdWUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHdhc0NhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwgeyB2YWx1ZTogcGF0Y2hlZCB9KTtcblxuICAgICAgcmV0dXJuIHBhdGNoZWQgYXMgdW5rbm93biBhcyBUO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
@@ -6,12 +6,28 @@ function reactiveBinding(updateFn) {
|
|
|
6
6
|
const takeUntilDestroyed = untilDestroyed();
|
|
7
7
|
return (source$) => source$.pipe(tap((state) => updateFn(state)), takeUntilDestroyed());
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Binds an observable to toggle a CSS class on the host element based on the truthiness of the emitted values.
|
|
11
|
+
* The subscription automatically ends when the component is destroyed.
|
|
12
|
+
*
|
|
13
|
+
* @template T The type of items emitted by the source observable.
|
|
14
|
+
* @param {Observable<T> | null | undefined} source$ The observable source emitting truthy or falsy values.
|
|
15
|
+
* @param {string} cssClass The CSS class to toggle based on the emitted values.
|
|
16
|
+
*/
|
|
9
17
|
export function reactiveClassBinding(source$, cssClass) {
|
|
10
18
|
const { nativeElement } = injectElement();
|
|
11
19
|
if (source$) {
|
|
12
20
|
source$.pipe(reactiveBinding((state) => nativeElement.classList.toggle(cssClass, !!state))).subscribe();
|
|
13
21
|
}
|
|
14
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Binds an observable to update attributes on the host element with the emitted values.
|
|
25
|
+
* The subscription automatically ends when the component is destroyed.
|
|
26
|
+
*
|
|
27
|
+
* @template T The type of items emitted by the source observable.
|
|
28
|
+
* @param {Observable<T> | null | undefined} source$ The observable source.
|
|
29
|
+
* @param {...string[]} attributes The attributes to set on the host element based on the emitted values.
|
|
30
|
+
*/
|
|
15
31
|
export function reactiveAttributeBinding(source$, ...attributes) {
|
|
16
32
|
const { nativeElement } = injectElement();
|
|
17
33
|
if (source$) {
|
|
@@ -24,13 +40,33 @@ export function reactiveAttributeBinding(source$, ...attributes) {
|
|
|
24
40
|
.subscribe();
|
|
25
41
|
}
|
|
26
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Injects the ElementRef of the host element in an Angular component or directive.
|
|
45
|
+
*
|
|
46
|
+
* @template T The expected type of the native element.
|
|
47
|
+
* @returns {ElementRef<T>} The injected ElementRef instance.
|
|
48
|
+
*/
|
|
27
49
|
export function injectElement() {
|
|
28
50
|
return inject(ElementRef);
|
|
29
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Tracking function for use with `*ngFor` that tracks items by their index.
|
|
54
|
+
*
|
|
55
|
+
* @param {number} index The index of the item in the iterable.
|
|
56
|
+
* @returns {number} The index, used as the trackBy identity.
|
|
57
|
+
*/
|
|
30
58
|
export function trackByIndex(index) {
|
|
31
59
|
return index;
|
|
32
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Tracking function for use with `*ngFor` that tracks items by their unique ID.
|
|
63
|
+
*
|
|
64
|
+
* @template T The type of the items in the iterable, must have an 'id' property.
|
|
65
|
+
* @param {number} _ The index of the item in the iterable, not used.
|
|
66
|
+
* @param {T} item The item in the iterable.
|
|
67
|
+
* @returns {T['id']} The item's ID, used as the trackBy identity.
|
|
68
|
+
*/
|
|
33
69
|
export function trackById(_, { id }) {
|
|
34
70
|
return id;
|
|
35
71
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2hlbHBlcnMvYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXdDLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxTQUFTLGVBQWUsQ0FBSSxRQUFrQztJQUM1RCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRTVDLE9BQU8sQ0FBQyxPQUFzQixFQUFFLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvQixrQkFBa0IsRUFBRSxDQUNyQixDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUksT0FBeUMsRUFBRSxRQUFnQjtJQUNqRyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFMUMsSUFBSSxPQUFPLEVBQUU7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDekc7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBSSxPQUF5QyxFQUFFLEdBQUcsVUFBb0I7SUFDNUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRTFDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTzthQUNKLElBQUksQ0FDSCxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtnQkFDbEMsWUFBWSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxNQUFNLENBQWdCLFVBQVUsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN4QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBNkMsQ0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFLO0lBQ3hGLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNldEF0dHJpYnV0ZSB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnLi91bnRpbC1kZXN0cm95ZWQnO1xuXG5mdW5jdGlvbiByZWFjdGl2ZUJpbmRpbmc8VD4odXBkYXRlRm46IChzdGF0ZTogdW5rbm93bikgPT4gdm9pZCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIGNvbnN0IHRha2VVbnRpbERlc3Ryb3llZCA9IHVudGlsRGVzdHJveWVkKCk7XG5cbiAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KSA9PlxuICAgIHNvdXJjZSQucGlwZShcbiAgICAgIHRhcCgoc3RhdGUpID0+IHVwZGF0ZUZuKHN0YXRlKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApO1xufVxuXG4vKipcbiAqIEJpbmRzIGFuIG9ic2VydmFibGUgdG8gdG9nZ2xlIGEgQ1NTIGNsYXNzIG9uIHRoZSBob3N0IGVsZW1lbnQgYmFzZWQgb24gdGhlIHRydXRoaW5lc3Mgb2YgdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICogVGhlIHN1YnNjcmlwdGlvbiBhdXRvbWF0aWNhbGx5IGVuZHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IHNvdXJjZSQgVGhlIG9ic2VydmFibGUgc291cmNlIGVtaXR0aW5nIHRydXRoeSBvciBmYWxzeSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MgVGhlIENTUyBjbGFzcyB0byB0b2dnbGUgYmFzZWQgb24gdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhY3RpdmVDbGFzc0JpbmRpbmc8VD4oc291cmNlJDogT2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWQsIGNzc0NsYXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgaWYgKHNvdXJjZSQpIHtcbiAgICBzb3VyY2UkLnBpcGUocmVhY3RpdmVCaW5kaW5nKChzdGF0ZSkgPT4gbmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNzc0NsYXNzLCAhIXN0YXRlKSkpLnN1YnNjcmliZSgpO1xuICB9XG59XG5cbi8qKlxuICogQmluZHMgYW4gb2JzZXJ2YWJsZSB0byB1cGRhdGUgYXR0cmlidXRlcyBvbiB0aGUgaG9zdCBlbGVtZW50IHdpdGggdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICogVGhlIHN1YnNjcmlwdGlvbiBhdXRvbWF0aWNhbGx5IGVuZHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IHNvdXJjZSQgVGhlIG9ic2VydmFibGUgc291cmNlLlxuICogQHBhcmFtIHsuLi5zdHJpbmdbXX0gYXR0cmlidXRlcyBUaGUgYXR0cmlidXRlcyB0byBzZXQgb24gdGhlIGhvc3QgZWxlbWVudCBiYXNlZCBvbiB0aGUgZW1pdHRlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmc8VD4oc291cmNlJDogT2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIGlmIChzb3VyY2UkKSB7XG4gICAgc291cmNlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHJlYWN0aXZlQmluZGluZygodmFsdWUpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdHMgdGhlIEVsZW1lbnRSZWYgb2YgdGhlIGhvc3QgZWxlbWVudCBpbiBhbiBBbmd1bGFyIGNvbXBvbmVudCBvciBkaXJlY3RpdmUuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIG5hdGl2ZSBlbGVtZW50LlxuICogQHJldHVybnMge0VsZW1lbnRSZWY8VD59IFRoZSBpbmplY3RlZCBFbGVtZW50UmVmIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0RWxlbWVudDxUID0gSFRNTEVsZW1lbnQ+KCk6IEVsZW1lbnRSZWY8VD4ge1xuICByZXR1cm4gaW5qZWN0PEVsZW1lbnRSZWY8VD4+KEVsZW1lbnRSZWYpO1xufVxuXG4vKipcbiAqIFRyYWNraW5nIGZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBgKm5nRm9yYCB0aGF0IHRyYWNrcyBpdGVtcyBieSB0aGVpciBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBpdGVyYWJsZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBpbmRleCwgdXNlZCBhcyB0aGUgdHJhY2tCeSBpZGVudGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyYWNraW5nIGZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBgKm5nRm9yYCB0aGF0IHRyYWNrcyBpdGVtcyBieSB0aGVpciB1bmlxdWUgSUQuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBpdGVyYWJsZSwgbXVzdCBoYXZlIGFuICdpZCcgcHJvcGVydHkuXG4gKiBAcGFyYW0ge251bWJlcn0gXyBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlLCBub3QgdXNlZC5cbiAqIEBwYXJhbSB7VH0gaXRlbSBUaGUgaXRlbSBpbiB0aGUgaXRlcmFibGUuXG4gKiBAcmV0dXJucyB7VFsnaWQnXX0gVGhlIGl0ZW0ncyBJRCwgdXNlZCBhcyB0aGUgdHJhY2tCeSBpZGVudGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQnlJZDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIH0+KF86IG51bWJlciwgeyBpZCB9OiBUKTogVFsnaWQnXSB7XG4gIHJldHVybiBpZDtcbn1cbiJdfQ==
|
|
@@ -8,8 +8,10 @@ import { isNumber, isString } from './type-guards';
|
|
|
8
8
|
* @param {K} key - The key whose values are to be plucked from each object in the array.
|
|
9
9
|
* @returns {Array<T[K]>} An array of values corresponding to the specified key from each object.
|
|
10
10
|
* @example
|
|
11
|
+
* ```ts
|
|
11
12
|
* const users = [{ name: 'Alice' }, { name: 'Bob' }];
|
|
12
13
|
* const names = pluckFromArray(users, 'name'); // ['Alice', 'Bob']
|
|
14
|
+
* ```
|
|
13
15
|
*/
|
|
14
16
|
export function pluckFromArray(arr, key) {
|
|
15
17
|
return arr.map((value) => value[key]);
|
|
@@ -22,8 +24,10 @@ export function pluckFromArray(arr, key) {
|
|
|
22
24
|
* @param {OrderByDirection} [direction='ASC'] - The direction to sort ('ASC' for ascending, 'DESC' for descending).
|
|
23
25
|
* @returns {(a: T, b: T) => number} A compare function that can be used in the array sort method.
|
|
24
26
|
* @example
|
|
27
|
+
* ```ts
|
|
25
28
|
* const items = [{ value: 10 }, { value: 5 }, { value: 7 }];
|
|
26
29
|
* const sortedItems = items.sort(orderBy('value', 'ASC')); // Sorted by value in ascending order
|
|
30
|
+
* ```
|
|
27
31
|
*/
|
|
28
32
|
export function orderBy(key, direction = 'ASC') {
|
|
29
33
|
return (a, b) => {
|
|
@@ -44,4 +48,4 @@ export function orderBy(key, direction = 'ASC') {
|
|
|
44
48
|
return 0;
|
|
45
49
|
};
|
|
46
50
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUF1QixHQUFRLEVBQUUsR0FBTTtJQUNuRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFJRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFJLEdBQVksRUFBRSxZQUE4QixLQUFLO0lBQzFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLFNBQVMsR0FBRyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQyxPQUFPLFNBQVMsR0FBRyxVQUFVLENBQUM7U0FDL0I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi90eXBlLWd1YXJkcyc7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhbHVlcyBvZiBhIHNwZWNpZmllZCBrZXkgZnJvbSBlYWNoIG9iamVjdCBpbiBhbiBhcnJheS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGluIHRoZSBhcnJheS5cbiAqIEB0ZW1wbGF0ZSBLIC0gVGhlIHR5cGUgb2YgdGhlIGtleXMgb2YgYFRgLlxuICogQHBhcmFtIHtUW119IGFyciAtIFRoZSBhcnJheSBvZiBvYmplY3RzIHRvIHBsdWNrIHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtLfSBrZXkgLSBUaGUga2V5IHdob3NlIHZhbHVlcyBhcmUgdG8gYmUgcGx1Y2tlZCBmcm9tIGVhY2ggb2JqZWN0IGluIHRoZSBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxUW0tdPn0gQW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBrZXkgZnJvbSBlYWNoIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgdXNlcnMgPSBbeyBuYW1lOiAnQWxpY2UnIH0sIHsgbmFtZTogJ0JvYicgfV07XG4gKiBjb25zdCBuYW1lcyA9IHBsdWNrRnJvbUFycmF5KHVzZXJzLCAnbmFtZScpOyAvLyBbJ0FsaWNlJywgJ0JvYiddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWNrRnJvbUFycmF5PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPihhcnI6IFRbXSwga2V5OiBLKTogQXJyYXk8VFtLXT4ge1xuICByZXR1cm4gYXJyLm1hcCgodmFsdWUpID0+IHZhbHVlW2tleV0pO1xufVxuXG5leHBvcnQgdHlwZSBPcmRlckJ5RGlyZWN0aW9uID0gJ0FTQycgfCAnREVTQyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBiYXNlZCBvbiBhIHNwZWNpZmllZCBrZXkgYW5kIGRpcmVjdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGluIHRoZSBhcnJheS5cbiAqIEBwYXJhbSB7a2V5b2YgVH0ga2V5IC0gVGhlIGtleSB0byBzb3J0IGJ5LlxuICogQHBhcmFtIHtPcmRlckJ5RGlyZWN0aW9ufSBbZGlyZWN0aW9uPSdBU0MnXSAtIFRoZSBkaXJlY3Rpb24gdG8gc29ydCAoJ0FTQycgZm9yIGFzY2VuZGluZywgJ0RFU0MnIGZvciBkZXNjZW5kaW5nKS5cbiAqIEByZXR1cm5zIHsoYTogVCwgYjogVCkgPT4gbnVtYmVyfSBBIGNvbXBhcmUgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgYXJyYXkgc29ydCBtZXRob2QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGl0ZW1zID0gW3sgdmFsdWU6IDEwIH0sIHsgdmFsdWU6IDUgfSwgeyB2YWx1ZTogNyB9XTtcbiAqIGNvbnN0IHNvcnRlZEl0ZW1zID0gaXRlbXMuc29ydChvcmRlckJ5KCd2YWx1ZScsICdBU0MnKSk7IC8vIFNvcnRlZCBieSB2YWx1ZSBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJCeTxUPihrZXk6IGtleW9mIFQsIGRpcmVjdGlvbjogT3JkZXJCeURpcmVjdGlvbiA9ICdBU0MnKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIHJldHVybiAoYSwgYikgPT4ge1xuICAgIGNvbnN0IGxlZnRWYWx1ZSA9IGRpcmVjdGlvbiA9PT0gJ0FTQycgPyBhW2tleV0gOiBiW2tleV07XG4gICAgY29uc3QgcmlnaHRWYWx1ZSA9IGRpcmVjdGlvbiA9PT0gJ0FTQycgPyBiW2tleV0gOiBhW2tleV07XG4gICAgaWYgKGxlZnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChyaWdodFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKGxlZnRWYWx1ZSkgJiYgaXNOdW1iZXIocmlnaHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBsZWZ0VmFsdWUgLSByaWdodFZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcobGVmdFZhbHVlKSAmJiBpc1N0cmluZyhyaWdodFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGxlZnRWYWx1ZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUocmlnaHRWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constructs a URL string from provided segments, ensuring proper slash separation without duplications.
|
|
3
|
+
* It gracefully handles `null`, `undefined`, and symbol values by omitting them from the final URL.
|
|
4
|
+
* Additionally, the function preserves the protocol part of the URL, if specified.
|
|
5
|
+
*
|
|
6
|
+
* @param {...Array<string | number | symbol | null | undefined>} args - The segments to concatenate into a URL.
|
|
7
|
+
* Can be a mix of strings, numbers, symbols (converted to strings), or `null`/`undefined` (which are omitted).
|
|
8
|
+
* @returns {string} The constructed URL string with correctly formatted slashes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Basic usage
|
|
13
|
+
* console.log(buildUrl('http://example.com', 'path', 'to', 'resource'));
|
|
14
|
+
* // Outputs: "http://example.com/path/to/resource"
|
|
15
|
+
*
|
|
16
|
+
* // Removing duplicate slashes
|
|
17
|
+
* console.log(buildUrl('http://example.com/', '/path/', '//to', '/resource/'));
|
|
18
|
+
* // Outputs: "http://example.com/path/to/resource/"
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
1
21
|
export function buildUrl(...args) {
|
|
2
22
|
return args.join('/').replace(/(^.*)(https?:\/\/)|(\/)+/g, '$2$3');
|
|
3
23
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvaGVscGVycy9idWlsZC11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUcsSUFBd0Q7SUFDbEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25zdHJ1Y3RzIGEgVVJMIHN0cmluZyBmcm9tIHByb3ZpZGVkIHNlZ21lbnRzLCBlbnN1cmluZyBwcm9wZXIgc2xhc2ggc2VwYXJhdGlvbiB3aXRob3V0IGR1cGxpY2F0aW9ucy5cbiAqIEl0IGdyYWNlZnVsbHkgaGFuZGxlcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBhbmQgc3ltYm9sIHZhbHVlcyBieSBvbWl0dGluZyB0aGVtIGZyb20gdGhlIGZpbmFsIFVSTC5cbiAqIEFkZGl0aW9uYWxseSwgdGhlIGZ1bmN0aW9uIHByZXNlcnZlcyB0aGUgcHJvdG9jb2wgcGFydCBvZiB0aGUgVVJMLCBpZiBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIHsuLi5BcnJheTxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wgfCBudWxsIHwgdW5kZWZpbmVkPn0gYXJncyAtIFRoZSBzZWdtZW50cyB0byBjb25jYXRlbmF0ZSBpbnRvIGEgVVJMLlxuICogQ2FuIGJlIGEgbWl4IG9mIHN0cmluZ3MsIG51bWJlcnMsIHN5bWJvbHMgKGNvbnZlcnRlZCB0byBzdHJpbmdzKSwgb3IgYG51bGxgL2B1bmRlZmluZWRgICh3aGljaCBhcmUgb21pdHRlZCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29uc3RydWN0ZWQgVVJMIHN0cmluZyB3aXRoIGNvcnJlY3RseSBmb3JtYXR0ZWQgc2xhc2hlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEJhc2ljIHVzYWdlXG4gKiBjb25zb2xlLmxvZyhidWlsZFVybCgnaHR0cDovL2V4YW1wbGUuY29tJywgJ3BhdGgnLCAndG8nLCAncmVzb3VyY2UnKSk7XG4gKiAvLyBPdXRwdXRzOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlXCJcbiAqXG4gKiAvLyBSZW1vdmluZyBkdXBsaWNhdGUgc2xhc2hlc1xuICogY29uc29sZS5sb2coYnVpbGRVcmwoJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLCAnL3BhdGgvJywgJy8vdG8nLCAnL3Jlc291cmNlLycpKTtcbiAqIC8vIE91dHB1dHM6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVcmwoLi4uYXJnczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5qb2luKCcvJykucmVwbGFjZSgvKF4uKikoaHR0cHM/OlxcL1xcLyl8KFxcLykrL2csICckMiQzJyk7XG59XG4iXX0=
|
|
@@ -16,14 +16,15 @@ export const DRAEGER_WEBSITE_URL = 'https://www.draeger.com';
|
|
|
16
16
|
* @returns {string} The fully constructed URL, including the base URL and all provided path segments.
|
|
17
17
|
*
|
|
18
18
|
* @example
|
|
19
|
+
* ```ts
|
|
19
20
|
* // Returns 'https://www.draeger.com/about-us'
|
|
20
21
|
* const url = buildWebsiteUrl('about-us');
|
|
21
22
|
*
|
|
22
|
-
* @example
|
|
23
23
|
* // Can also handle multiple segments, returning 'https://www.draeger.com/products/search/123'
|
|
24
24
|
* const productUrl = buildWebsiteUrl('products', 'search', 123);
|
|
25
|
+
* ```
|
|
25
26
|
*/
|
|
26
27
|
export function buildWebsiteUrl(...segments) {
|
|
27
28
|
return buildUrl(DRAEGER_WEBSITE_URL, ...segments);
|
|
28
29
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd2Vic2l0ZS11cmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2J1aWxkLXdlYnNpdGUtdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQUcsUUFBNEQ7SUFDN0YsT0FBTyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRVcmwgfSBmcm9tICcuL2J1aWxkLXVybCc7XG5cbi8qKlxuICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgdGhlIGJhc2UgVVJMIGZvciB0aGUgRHJhZWdlciB3ZWJzaXRlLlxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGRlZmF1bHQgJ2h0dHBzOi8vd3d3LmRyYWVnZXIuY29tJ1xuICovXG5leHBvcnQgY29uc3QgRFJBRUdFUl9XRUJTSVRFX1VSTCA9ICdodHRwczovL3d3dy5kcmFlZ2VyLmNvbSc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIGZ1bGwgVVJMIGZvciB0aGUgRHJhZWdlciB3ZWJzaXRlIGJ5IGFwcGVuZGluZyB0aGUgcHJvdmlkZWQgcGF0aCBzZWdtZW50cyB0byB0aGUgYmFzZSBVUkwuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgdXRpbGl0eSBmb3IgY3JlYXRpbmcgZnVsbHkgcXVhbGlmaWVkIFVSTHMgdG8gdmFyaW91cyByZXNvdXJjZXMgb3IgcGFnZXMgd2l0aGluIHRoZSBEcmFlZ2VyIHdlYnNpdGUuXG4gKlxuICogQGZ1bmN0aW9uIGJ1aWxkV2Vic2l0ZVVybFxuICogQHBhcmFtIHsuLi4oc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZCl9IHNlZ21lbnRzIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gYXBwZW5kIHRvIHRoZSBiYXNlIFVSTC5cbiAqIFRoZXNlIGNhbiBpbmNsdWRlIHN0cmluZ3MsIG51bWJlcnMsIHN5bWJvbHMsIG9yIG51bGwvdW5kZWZpbmVkIHZhbHVlcyAodGhlIGxhdHRlciB0d28gYXJlIGlnbm9yZWQpLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGx5IGNvbnN0cnVjdGVkIFVSTCwgaW5jbHVkaW5nIHRoZSBiYXNlIFVSTCBhbmQgYWxsIHByb3ZpZGVkIHBhdGggc2VnbWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBSZXR1cm5zICdodHRwczovL3d3dy5kcmFlZ2VyLmNvbS9hYm91dC11cydcbiAqIGNvbnN0IHVybCA9IGJ1aWxkV2Vic2l0ZVVybCgnYWJvdXQtdXMnKTtcbiAqXG4gKiAvLyBDYW4gYWxzbyBoYW5kbGUgbXVsdGlwbGUgc2VnbWVudHMsIHJldHVybmluZyAnaHR0cHM6Ly93d3cuZHJhZWdlci5jb20vcHJvZHVjdHMvc2VhcmNoLzEyMydcbiAqIGNvbnN0IHByb2R1Y3RVcmwgPSBidWlsZFdlYnNpdGVVcmwoJ3Byb2R1Y3RzJywgJ3NlYXJjaCcsIDEyMyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV2Vic2l0ZVVybCguLi5zZWdtZW50czogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRVcmwoRFJBRUdFUl9XRUJTSVRFX1VSTCwgLi4uc2VnbWVudHMpO1xufVxuIl19
|