@odx/angular 5.2.3 → 5.3.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.
Files changed (127) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/cdk/a11y/lib/directives/list-focus-manager-option.directive.d.ts +1 -1
  3. package/components/breadcrumbs/lib/breadcrumbs.component.d.ts +2 -13
  4. package/components/icon/index.d.ts +1 -0
  5. package/components/icon/lib/helpers/index.d.ts +1 -0
  6. package/components/icon/lib/helpers/unpack-icon-identifier.d.ts +1 -0
  7. package/components/icon/lib/icon.component.d.ts +2 -1
  8. package/components/list/lib/components/list-item/list-item.component.d.ts +8 -2
  9. package/components/loading-spinner/lib/loading-spinner.directive.d.ts +0 -2
  10. package/esm2022/breakpoints/lib/breakpoints.service.mjs +2 -2
  11. package/esm2022/cdk/a11y/lib/directives/interactive.directive.mjs +4 -4
  12. package/esm2022/cdk/a11y/lib/directives/list-focus-manager-option.directive.mjs +3 -3
  13. package/esm2022/cdk/connected-overlay/lib/helpers/compute-overlay-position.mjs +7 -8
  14. package/esm2022/components/accordion/lib/components/accordion-item/accordion-item.component.mjs +2 -2
  15. package/esm2022/components/breadcrumbs/lib/breadcrumbs.component.mjs +5 -34
  16. package/esm2022/components/calendar/lib/calendar.service.mjs +5 -5
  17. package/esm2022/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +1 -1
  18. package/esm2022/components/card/lib/card.component.mjs +2 -2
  19. package/esm2022/components/checkbox/lib/checkbox.component.mjs +2 -2
  20. package/esm2022/components/chip/lib/components/chip/chip.component.mjs +1 -1
  21. package/esm2022/components/datepicker/lib/datepicker.component.mjs +1 -1
  22. package/esm2022/components/error-page/lib/error-page.component.mjs +2 -2
  23. package/esm2022/components/form-field/lib/form-field.service.mjs +8 -8
  24. package/esm2022/components/form-field/lib/services/form-field-error.service.mjs +2 -2
  25. package/esm2022/components/icon/index.mjs +2 -1
  26. package/esm2022/components/icon/lib/helpers/index.mjs +2 -0
  27. package/esm2022/components/icon/lib/helpers/unpack-icon-identifier.mjs +7 -0
  28. package/esm2022/components/icon/lib/icon.component.mjs +10 -2
  29. package/esm2022/components/inline-message/lib/inline-message.component.mjs +1 -1
  30. package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +2 -2
  31. package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +18 -4
  32. package/esm2022/components/loading-spinner/lib/loading-spinner.directive.mjs +10 -9
  33. package/esm2022/components/main-menu/lib/main-menu.component.mjs +2 -2
  34. package/esm2022/components/main-menu/lib/main-menu.service.mjs +2 -2
  35. package/esm2022/components/modal/lib/components/modal-header/modal-header.component.mjs +2 -2
  36. package/esm2022/components/modal/lib/components/modal-hero/modal-hero.component.mjs +2 -2
  37. package/esm2022/components/navigation-back/lib/navigation-back.component.mjs +1 -1
  38. package/esm2022/components/paginator/lib/paginator.component.mjs +2 -2
  39. package/esm2022/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.mjs +1 -1
  40. package/esm2022/components/rich-list/lib/components/rich-list-header/rich-list-header.component.mjs +2 -2
  41. package/esm2022/components/select/lib/select.component.mjs +2 -2
  42. package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +1 -1
  43. package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +2 -2
  44. package/esm2022/components/toast/lib/components/toast-item/toast-item.component.mjs +2 -2
  45. package/esm2022/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +1 -1
  46. package/esm2022/internal/translate/lib/pipes/translate.pipe.mjs +1 -1
  47. package/esm2022/internal/translate/lib/translate.service.mjs +2 -2
  48. package/esm2022/lib/controllers/controller.mjs +2 -2
  49. package/esm2022/lib/controllers/disabled.controller.mjs +2 -2
  50. package/esm2022/lib/controllers/readonly.controller.mjs +2 -2
  51. package/esm2022/lib/directives/with-tabindex.directive.mjs +14 -13
  52. package/esm2022/lib/services/window-ref.mjs +3 -3
  53. package/esm2022/localization/lib/localization.service.mjs +2 -2
  54. package/esm2022/sdk/lib/application-environment.mjs +1 -1
  55. package/esm2022/theming/lib/theming.service.mjs +2 -2
  56. package/esm2022/utils/lib/helpers/array.mjs +21 -1
  57. package/esm2022/utils/lib/helpers/dom.mjs +3 -3
  58. package/esm2022/utils/lib/helpers/queue.mjs +59 -23
  59. package/fesm2022/odx-angular-breakpoints.mjs +1 -1
  60. package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
  61. package/fesm2022/odx-angular-cdk-a11y.mjs +5 -5
  62. package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
  63. package/fesm2022/odx-angular-cdk-connected-overlay.mjs +6 -7
  64. package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
  65. package/fesm2022/odx-angular-components-accordion.mjs +1 -1
  66. package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
  67. package/fesm2022/odx-angular-components-breadcrumbs.mjs +4 -33
  68. package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
  69. package/fesm2022/odx-angular-components-calendar.mjs +4 -4
  70. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  71. package/fesm2022/odx-angular-components-card.mjs +1 -1
  72. package/fesm2022/odx-angular-components-card.mjs.map +1 -1
  73. package/fesm2022/odx-angular-components-checkbox.mjs +1 -1
  74. package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
  75. package/fesm2022/odx-angular-components-chip.mjs +1 -1
  76. package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
  77. package/fesm2022/odx-angular-components-datepicker.mjs +1 -1
  78. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  79. package/fesm2022/odx-angular-components-error-page.mjs +1 -1
  80. package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
  81. package/fesm2022/odx-angular-components-form-field.mjs +7 -7
  82. package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
  83. package/fesm2022/odx-angular-components-icon.mjs +16 -2
  84. package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
  85. package/fesm2022/odx-angular-components-inline-message.mjs +1 -1
  86. package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
  87. package/fesm2022/odx-angular-components-list.mjs +18 -4
  88. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  89. package/fesm2022/odx-angular-components-loading-spinner.mjs +9 -8
  90. package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
  91. package/fesm2022/odx-angular-components-main-menu.mjs +2 -2
  92. package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
  93. package/fesm2022/odx-angular-components-modal.mjs +2 -2
  94. package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
  95. package/fesm2022/odx-angular-components-navigation-back.mjs +1 -1
  96. package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
  97. package/fesm2022/odx-angular-components-paginator.mjs +1 -1
  98. package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
  99. package/fesm2022/odx-angular-components-rail-navigation.mjs +1 -1
  100. package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
  101. package/fesm2022/odx-angular-components-rich-list.mjs +1 -1
  102. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  103. package/fesm2022/odx-angular-components-select.mjs +1 -1
  104. package/fesm2022/odx-angular-components-select.mjs.map +1 -1
  105. package/fesm2022/odx-angular-components-tab-bar.mjs +2 -2
  106. package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
  107. package/fesm2022/odx-angular-components-toast.mjs +1 -1
  108. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  109. package/fesm2022/odx-angular-components-wizard.mjs +1 -1
  110. package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
  111. package/fesm2022/odx-angular-internal-translate.mjs +1 -1
  112. package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
  113. package/fesm2022/odx-angular-localization.mjs +1 -1
  114. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  115. package/fesm2022/odx-angular-sdk.mjs.map +1 -1
  116. package/fesm2022/odx-angular-theming.mjs +1 -1
  117. package/fesm2022/odx-angular-theming.mjs.map +1 -1
  118. package/fesm2022/odx-angular-utils.mjs +80 -25
  119. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  120. package/fesm2022/odx-angular.mjs +18 -19
  121. package/fesm2022/odx-angular.mjs.map +1 -1
  122. package/internal/translate/lib/pipes/translate.pipe.d.ts +1 -1
  123. package/internal/translate/lib/translate.service.d.ts +1 -1
  124. package/lib/directives/with-tabindex.directive.d.ts +5 -2
  125. package/package.json +1 -1
  126. package/utils/lib/helpers/array.d.ts +2 -0
  127. package/utils/lib/helpers/queue.d.ts +14 -6
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-localization.mjs","sources":["../../../../libs/angular/localization/src/lib/localization.config.ts","../../../../libs/angular/localization/src/lib/localization.service.ts","../../../../libs/angular/localization/src/lib/models/localization-feature.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-header.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-query-param.ts","../../../../libs/angular/localization/src/lib/loaders/browser-language-loader.ts","../../../../libs/angular/localization/src/odx-angular-localization.ts"],"sourcesContent":["import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { LocalizationService } from './localization.service';\nimport { LanguageLoaderFn, LocalizationFeature } from './models';\n\nexport const DEFAULT_AVAILABLE_LANGUAGES = ['en', 'de', 'es', 'fr', 'ja'];\n\nexport interface LocalizationConfig {\n activeLanguageLoader?: LanguageLoaderFn;\n availableLanguages: string[];\n}\n\nexport const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens(\n 'Localization',\n '@odx/angular/internal/translate',\n {\n availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,\n availableLocales: DEFAULT_AVAILABLE_LANGUAGES,\n } as LocalizationConfig,\n);\n\nexport function provideLocalization(config: Partial<LocalizationConfig>, ...features: LocalizationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideLocalizationConfig(config),\n {\n provide: APP_INITIALIZER,\n useFactory: (localizationService: LocalizationService) => () => localizationService.loadActiveLanguage(),\n deps: [LocalizationService],\n multi: true,\n },\n features,\n ]);\n}\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { BehaviorSubject, Observable, distinctUntilChanged, filter, firstValueFrom, from, isObservable, of, shareReplay } from 'rxjs';\nimport { injectLocalizationConfig } from './localization.config';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalizationService {\n private readonly injector = inject(Injector);\n private readonly localizationConfig = injectLocalizationConfig();\n private readonly availableLanguageSet = new Set(this.localizationConfig.availableLanguages);\n private readonly activeLanguage$$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly activeLanguage$ = this.activeLanguage$$.pipe(filter(Boolean), distinctUntilChanged(), shareReplay({ refCount: true }));\n public readonly availableLanguages = Array.from(this.availableLanguageSet);\n public readonly defaultLanguage = this.availableLanguages[0];\n\n public getActiveLanguage(): string {\n return this.activeLanguage$$.getValue() ?? this.defaultLanguage;\n }\n\n public setActiveLanguage(language: string): void {\n if (this.availableLanguageSet.has(language)) {\n this.activeLanguage$$.next(language);\n return;\n }\n const languageCode = getLanguageCode(language);\n if (this.availableLanguageSet.has(languageCode)) {\n this.activeLanguage$$.next(languageCode);\n return;\n }\n this.activeLanguage$$.next(this.defaultLanguage);\n }\n\n public async loadActiveLanguage(): Promise<void> {\n return runInInjectionContext(this.injector, async () => {\n const activeLanguageLoader$ = this.createActiveLanguageLoader$();\n const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);\n this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);\n });\n }\n\n private createActiveLanguageLoader$(): Observable<string | undefined> {\n const language = this.localizationConfig.activeLanguageLoader?.();\n if (isObservable(language)) {\n return language;\n }\n if (language instanceof Promise) {\n return from(language);\n }\n return of(language);\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type LocalizationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/localization::LocalizationFeature' };\n\nexport function makeLocalizationFeature(provider: Provider[] | EnvironmentProviders): LocalizationFeature {\n return provider as never as LocalizationFeature;\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_HEADER = 'Accept-Language';\n\nexport interface HttpLanguageHeaderInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n headerName?: string;\n}\n\nexport function httpLanguageHeaderInterceptor({ allowedUrls, headerName }: HttpLanguageHeaderInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setHeaders: { [headerName ?? HTTP_LANGUAGE_HEADER]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageHeader(config: HttpLanguageHeaderInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_QUERY = 'language';\n\nexport interface HttpLanguageQueryParamInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n queryParamName?: string;\n}\n\nexport function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }: HttpLanguageQueryParamInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setParams: { [queryParamName ?? HTTP_LANGUAGE_QUERY]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageQueryParam(config: HttpLanguageQueryParamInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { inject } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { LanguageLoaderFn } from '../models';\n\nexport const browserLanguageLoader: LanguageLoaderFn = async () => {\n return inject(WindowRef).getLanguage();\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-localization.mjs","sources":["../../../../libs/angular/localization/src/lib/localization.config.ts","../../../../libs/angular/localization/src/lib/localization.service.ts","../../../../libs/angular/localization/src/lib/models/localization-feature.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-header.ts","../../../../libs/angular/localization/src/lib/features/with-http-language-query-param.ts","../../../../libs/angular/localization/src/lib/loaders/browser-language-loader.ts","../../../../libs/angular/localization/src/odx-angular-localization.ts"],"sourcesContent":["import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { LocalizationService } from './localization.service';\nimport { LanguageLoaderFn, LocalizationFeature } from './models';\n\nexport const DEFAULT_AVAILABLE_LANGUAGES = ['en', 'de', 'es', 'fr', 'ja'];\n\nexport interface LocalizationConfig {\n activeLanguageLoader?: LanguageLoaderFn;\n availableLanguages: string[];\n}\n\nexport const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens(\n 'Localization',\n '@odx/angular/internal/translate',\n {\n availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,\n availableLocales: DEFAULT_AVAILABLE_LANGUAGES,\n } as LocalizationConfig,\n);\n\nexport function provideLocalization(config: Partial<LocalizationConfig>, ...features: LocalizationFeature[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideLocalizationConfig(config),\n {\n provide: APP_INITIALIZER,\n useFactory: (localizationService: LocalizationService) => () => localizationService.loadActiveLanguage(),\n deps: [LocalizationService],\n multi: true,\n },\n features,\n ]);\n}\n","import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { BehaviorSubject, Observable, distinctUntilChanged, filter, firstValueFrom, from, isObservable, of, shareReplay } from 'rxjs';\nimport { injectLocalizationConfig } from './localization.config';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalizationService {\n private readonly injector = inject(Injector);\n private readonly localizationConfig = injectLocalizationConfig();\n private readonly availableLanguageSet = new Set(this.localizationConfig.availableLanguages);\n private readonly activeLanguage$$ = new BehaviorSubject<string | undefined>(undefined);\n\n public readonly activeLanguage$ = this.activeLanguage$$.pipe(filter(Boolean), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n public readonly availableLanguages = Array.from(this.availableLanguageSet);\n public readonly defaultLanguage = this.availableLanguages[0];\n\n public getActiveLanguage(): string {\n return this.activeLanguage$$.getValue() ?? this.defaultLanguage;\n }\n\n public setActiveLanguage(language: string): void {\n if (this.availableLanguageSet.has(language)) {\n this.activeLanguage$$.next(language);\n return;\n }\n const languageCode = getLanguageCode(language);\n if (this.availableLanguageSet.has(languageCode)) {\n this.activeLanguage$$.next(languageCode);\n return;\n }\n this.activeLanguage$$.next(this.defaultLanguage);\n }\n\n public async loadActiveLanguage(): Promise<void> {\n return runInInjectionContext(this.injector, async () => {\n const activeLanguageLoader$ = this.createActiveLanguageLoader$();\n const activeLanguage = await firstValueFrom(activeLanguageLoader$).catch(() => null);\n this.setActiveLanguage(activeLanguage ?? this.defaultLanguage);\n });\n }\n\n private createActiveLanguageLoader$(): Observable<string | undefined> {\n const language = this.localizationConfig.activeLanguageLoader?.();\n if (isObservable(language)) {\n return language;\n }\n if (language instanceof Promise) {\n return from(language);\n }\n return of(language);\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport type LocalizationFeature = EnvironmentProviders & { ɵodxBrand: '@odx/angular/localization::LocalizationFeature' };\n\nexport function makeLocalizationFeature(provider: Provider[] | EnvironmentProviders): LocalizationFeature {\n return provider as never as LocalizationFeature;\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_HEADER = 'Accept-Language';\n\nexport interface HttpLanguageHeaderInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n headerName?: string;\n}\n\nexport function httpLanguageHeaderInterceptor({ allowedUrls, headerName }: HttpLanguageHeaderInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setHeaders: { [headerName ?? HTTP_LANGUAGE_HEADER]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageHeader(config: HttpLanguageHeaderInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { HttpInterceptorFn, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { switchMap, take } from 'rxjs';\nimport { LocalizationService } from '../localization.service';\nimport { LocalizationFeature, makeLocalizationFeature } from '../models';\n\nexport const HTTP_LANGUAGE_QUERY = 'language';\n\nexport interface HttpLanguageQueryParamInterceptorConfig {\n allowedUrls: Array<string | RegExp>;\n queryParamName?: string;\n}\n\nexport function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }: HttpLanguageQueryParamInterceptorConfig): HttpInterceptorFn {\n return (req, next) => {\n const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));\n for (const allowedUrl of allowedUrls) {\n if (!matchUrl(req.url, allowedUrl)) continue;\n return language$.pipe(switchMap((language) => next(req.clone({ setParams: { [queryParamName ?? HTTP_LANGUAGE_QUERY]: language } }))));\n }\n return next(req);\n };\n}\n\nexport function withHttpLanguageQueryParam(config: HttpLanguageQueryParamInterceptorConfig): LocalizationFeature {\n const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));\n\n return makeLocalizationFeature(providers);\n}\n","import { inject } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { LanguageLoaderFn } from '../models';\n\nexport const browserLanguageLoader: LanguageLoaderFn = async () => {\n return inject(WindowRef).getLanguage();\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-sdk.mjs","sources":["../../../../libs/angular/sdk/src/lib/application-environment.ts","../../../../libs/angular/sdk/src/odx-angular-sdk.ts"],"sourcesContent":["import { ApplicationRef, inject, InjectionToken } from '@angular/core';\nimport { bootstrapApplication } from '@angular/platform-browser';\nimport { CacheStorageClient } from '@odx/angular/utils';\n\nexport type ApplicationEnvironmentLoader<EnvironmentData, Params extends unknown[]> = (...args: Params) => Promise<EnvironmentData>;\n\nexport function createHttpApplicationEnvironmentLoader<Data>(\n handler: (dto: unknown) => Promise<Data>,\n): ApplicationEnvironmentLoader<Data, Parameters<CacheStorageClient['request']>> {\n const cache = new CacheStorageClient('@odx/angular/sdk::ApplicationEnvironment');\n\n return (...args: Parameters<CacheStorageClient['request']>) => cache.request<unknown>(...args).then((dto) => handler(dto!));\n}\n\nexport function createApplicationEnvironment<Data, Params extends unknown[]>(loader: ApplicationEnvironmentLoader<Data, Params>) {\n let environment: Data;\n const APPLICATION_ENVIRONMENT = new InjectionToken<Data>('@odx/angular/sdk::ApplicationEnvironment', {\n providedIn: 'root',\n factory: () => environment as Data,\n });\n\n function injectApplicationEnvironment(): Data {\n return inject(APPLICATION_ENVIRONMENT);\n }\n\n async function loadApplicationEnvironment(...args: Parameters<typeof loader>): Promise<Data> {\n environment = await loader(...args);\n if (!environment) {\n throw new Error('[@odx/angular/sdk] Failed load application environment');\n }\n return environment;\n }\n\n async function bootstrapApplicationWithEnvironment(\n params: Parameters<typeof loader>,\n ...args: Parameters<typeof bootstrapApplication>\n ): Promise<ApplicationRef> {\n await loadApplicationEnvironment(...params);\n\n return bootstrapApplication(...args);\n }\n\n return {\n APPLICATION_ENVIRONMENT,\n injectApplicationEnvironment,\n bootstrapApplicationWithEnvironment,\n loadApplicationEnvironment,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAMM,SAAU,sCAAsC,CACpD,OAAwC,EAAA;AAExC,IAAA,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,0CAA0C,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,IAA+C,KAAK,KAAK,CAAC,OAAO,CAAU,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC;AAC9H,CAAC;AAEK,SAAU,4BAA4B,CAAiC,MAAkD,EAAA;AAC7H,IAAA,IAAI,WAAiB,CAAC;AACtB,IAAA,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAO,0CAA0C,EAAE;AACnG,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,OAAO,EAAE,MAAM,WAAmB;AACnC,KAAA,CAAC,CAAC;AAEH,IAAA,SAAS,4BAA4B,GAAA;AACnC,QAAA,OAAO,MAAM,CAAC,uBAAuB,CAAC,CAAC;KACxC;AAED,IAAA,eAAe,0BAA0B,CAAC,GAAG,IAA+B,EAAA;AAC1E,QAAA,WAAW,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC3E,SAAA;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,eAAe,mCAAmC,CAChD,MAAiC,EACjC,GAAG,IAA6C,EAAA;AAEhD,QAAA,MAAM,0BAA0B,CAAC,GAAG,MAAM,CAAC,CAAC;AAE5C,QAAA,OAAO,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;KACtC;IAED,OAAO;QACL,uBAAuB;QACvB,4BAA4B;QAC5B,mCAAmC;QACnC,0BAA0B;KAC3B,CAAC;AACJ;;AChDA;;AAEG;;;;"}
1
+ {"version":3,"file":"odx-angular-sdk.mjs","sources":["../../../../libs/angular/sdk/src/lib/application-environment.ts","../../../../libs/angular/sdk/src/odx-angular-sdk.ts"],"sourcesContent":["import { ApplicationRef, inject, InjectionToken } from '@angular/core';\nimport { bootstrapApplication } from '@angular/platform-browser';\nimport { CacheStorageClient } from '@odx/angular/utils';\n\nexport type ApplicationEnvironmentLoader<EnvironmentData, Params extends unknown[]> = (...args: Params) => Promise<EnvironmentData>;\n\nexport function createHttpApplicationEnvironmentLoader<Data>(\n handler: (dto: unknown) => Promise<Data>,\n): ApplicationEnvironmentLoader<Data, Parameters<CacheStorageClient['request']>> {\n const cache = new CacheStorageClient('@odx/angular/sdk::ApplicationEnvironment');\n\n return (...args: Parameters<CacheStorageClient['request']>) => cache.request<unknown>(...args).then((dto) => handler(dto));\n}\n\nexport function createApplicationEnvironment<Data, Params extends unknown[]>(loader: ApplicationEnvironmentLoader<Data, Params>) {\n let environment: Data;\n const APPLICATION_ENVIRONMENT = new InjectionToken<Data>('@odx/angular/sdk::ApplicationEnvironment', {\n providedIn: 'root',\n factory: () => environment as Data,\n });\n\n function injectApplicationEnvironment(): Data {\n return inject(APPLICATION_ENVIRONMENT);\n }\n\n async function loadApplicationEnvironment(...args: Parameters<typeof loader>): Promise<Data> {\n environment = await loader(...args);\n if (!environment) {\n throw new Error('[@odx/angular/sdk] Failed load application environment');\n }\n return environment;\n }\n\n async function bootstrapApplicationWithEnvironment(\n params: Parameters<typeof loader>,\n ...args: Parameters<typeof bootstrapApplication>\n ): Promise<ApplicationRef> {\n await loadApplicationEnvironment(...params);\n\n return bootstrapApplication(...args);\n }\n\n return {\n APPLICATION_ENVIRONMENT,\n injectApplicationEnvironment,\n bootstrapApplicationWithEnvironment,\n loadApplicationEnvironment,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAMM,SAAU,sCAAsC,CACpD,OAAwC,EAAA;AAExC,IAAA,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,0CAA0C,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,IAA+C,KAAK,KAAK,CAAC,OAAO,CAAU,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7H,CAAC;AAEK,SAAU,4BAA4B,CAAiC,MAAkD,EAAA;AAC7H,IAAA,IAAI,WAAiB,CAAC;AACtB,IAAA,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAO,0CAA0C,EAAE;AACnG,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,OAAO,EAAE,MAAM,WAAmB;AACnC,KAAA,CAAC,CAAC;AAEH,IAAA,SAAS,4BAA4B,GAAA;AACnC,QAAA,OAAO,MAAM,CAAC,uBAAuB,CAAC,CAAC;KACxC;AAED,IAAA,eAAe,0BAA0B,CAAC,GAAG,IAA+B,EAAA;AAC1E,QAAA,WAAW,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC3E,SAAA;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,eAAe,mCAAmC,CAChD,MAAiC,EACjC,GAAG,IAA6C,EAAA;AAEhD,QAAA,MAAM,0BAA0B,CAAC,GAAG,MAAM,CAAC,CAAC;AAE5C,QAAA,OAAO,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;KACtC;IAED,OAAO;QACL,uBAAuB;QACvB,4BAA4B;QAC5B,mCAAmC;QACnC,0BAA0B;KAC3B,CAAC;AACJ;;AChDA;;AAEG;;;;"}
@@ -44,7 +44,7 @@ class ThemingService {
44
44
  this.document = inject(DOCUMENT);
45
45
  this.windowRef = inject(WindowRef);
46
46
  this.theme$$ = new BehaviorSubject(this.getInitialTheme());
47
- this.theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ refCount: true }));
47
+ this.theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
48
48
  this.theme$.subscribe((theme) => {
49
49
  this.document.body.setAttribute(THEME_ATTRIBUTE_NAME, theme);
50
50
  saveTheme(this.config.storage, theme);
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-theming.mjs","sources":["../../../../libs/angular/theming/src/lib/helpers/prefers-dark-theme.ts","../../../../libs/angular/theming/src/lib/models/theme.ts","../../../../libs/angular/theming/src/lib/helpers/resolve-theme.ts","../../../../libs/angular/theming/src/lib/helpers/theme-storage.ts","../../../../libs/angular/theming/src/lib/theming.service.ts","../../../../libs/angular/theming/src/lib/theming.config.ts","../../../../libs/angular/theming/src/odx-angular-theming.ts"],"sourcesContent":["export function prefersDarkTheme(view: Window): boolean {\n return !!view.matchMedia?.('(prefers-color-scheme: dark)')?.matches;\n}\n","export type Theme = (typeof Theme)[keyof typeof Theme];\nexport const Theme = {\n DARK: 'dark',\n LIGHT: 'light',\n} as const;\n\nexport const availableThemes = Object.values(Theme);\n","import { availableThemes, Theme } from '../models';\n\nexport function resolveTheme(theme?: string | null): Theme | null {\n return availableThemes.find((t) => t === theme) ?? null;\n}\n","import { Theme } from '../models';\nimport { resolveTheme } from './resolve-theme';\n\nexport const THEME_STORAGE_NAME = '@odx/angular/theming:SelectedTheme';\n\nexport function saveTheme(storage: Storage | null | undefined, theme: Theme): void {\n try {\n storage?.setItem(THEME_STORAGE_NAME, theme);\n } catch {\n //\n }\n}\n\nexport function readTheme(storage?: Storage | null): Theme | null {\n try {\n return resolveTheme(storage?.getItem(THEME_STORAGE_NAME)) ?? null;\n } catch {\n return null;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { BehaviorSubject, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { prefersDarkTheme, readTheme, saveTheme } from './helpers';\nimport { Theme } from './models';\nimport { injectThemingConfig } from './theming.config';\n\nexport const THEME_ATTRIBUTE_NAME = 'odxTheme';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemingService {\n private readonly config = injectThemingConfig();\n private readonly document = inject(DOCUMENT);\n private readonly windowRef = inject(WindowRef);\n private readonly theme$$ = new BehaviorSubject<Theme>(this.getInitialTheme());\n\n public readonly theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ refCount: true }));\n\n constructor() {\n this.theme$.subscribe((theme) => {\n this.document.body.setAttribute(THEME_ATTRIBUTE_NAME, theme);\n saveTheme(this.config.storage, theme);\n });\n }\n\n public selectTheme(theme: Theme): void {\n this.theme$$.next(theme);\n }\n\n public getSelectedTheme(): Theme {\n return this.theme$$.getValue();\n }\n\n public toggleDarkMode(): void {\n const currentTheme = this.getSelectedTheme();\n if (currentTheme === Theme.DARK) {\n this.enableLightMode();\n } else {\n this.enableDarkMode();\n }\n }\n\n public enableDarkMode(): void {\n this.selectTheme(Theme.DARK);\n }\n\n public enableLightMode(): void {\n this.selectTheme(Theme.LIGHT);\n }\n\n private getInitialTheme(): Theme {\n let selectedTheme = readTheme(this.config.storage);\n\n if (!selectedTheme && this.config.autoDetect && prefersDarkTheme(this.windowRef.nativeWindow)) {\n selectedTheme = Theme.DARK;\n }\n\n return selectedTheme ?? this.config.defaultTheme;\n }\n}\n","import { EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { ConfigDependencies, ConfigProvider, createConfigTokens } from '@odx/angular/utils';\nimport { Theme } from './models';\nimport { ThemingService } from './theming.service';\n\nexport interface ThemingConfig {\n autoDetect: boolean;\n defaultTheme: Theme;\n storage?: Storage | null;\n}\n\nexport const { ThemingConfig, injectThemingConfig, provideThemingConfig } = createConfigTokens('Theming', '@odx/angular/theme', {\n autoDetect: false,\n defaultTheme: Theme.LIGHT,\n storage: null,\n} as ThemingConfig);\n\nexport function provideTheming<D extends ConfigDependencies = ConfigDependencies<ThemingConfig>>(\n config: ConfigProvider<Partial<ThemingConfig>, D>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideThemingConfig(config),\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => () => inject(ThemingService),\n deps: [ThemingConfig],\n multi: true,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-theming.mjs","sources":["../../../../libs/angular/theming/src/lib/helpers/prefers-dark-theme.ts","../../../../libs/angular/theming/src/lib/models/theme.ts","../../../../libs/angular/theming/src/lib/helpers/resolve-theme.ts","../../../../libs/angular/theming/src/lib/helpers/theme-storage.ts","../../../../libs/angular/theming/src/lib/theming.service.ts","../../../../libs/angular/theming/src/lib/theming.config.ts","../../../../libs/angular/theming/src/odx-angular-theming.ts"],"sourcesContent":["export function prefersDarkTheme(view: Window): boolean {\n return !!view.matchMedia?.('(prefers-color-scheme: dark)')?.matches;\n}\n","export type Theme = (typeof Theme)[keyof typeof Theme];\nexport const Theme = {\n DARK: 'dark',\n LIGHT: 'light',\n} as const;\n\nexport const availableThemes = Object.values(Theme);\n","import { availableThemes, Theme } from '../models';\n\nexport function resolveTheme(theme?: string | null): Theme | null {\n return availableThemes.find((t) => t === theme) ?? null;\n}\n","import { Theme } from '../models';\nimport { resolveTheme } from './resolve-theme';\n\nexport const THEME_STORAGE_NAME = '@odx/angular/theming:SelectedTheme';\n\nexport function saveTheme(storage: Storage | null | undefined, theme: Theme): void {\n try {\n storage?.setItem(THEME_STORAGE_NAME, theme);\n } catch {\n //\n }\n}\n\nexport function readTheme(storage?: Storage | null): Theme | null {\n try {\n return resolveTheme(storage?.getItem(THEME_STORAGE_NAME)) ?? null;\n } catch {\n return null;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { BehaviorSubject, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { prefersDarkTheme, readTheme, saveTheme } from './helpers';\nimport { Theme } from './models';\nimport { injectThemingConfig } from './theming.config';\n\nexport const THEME_ATTRIBUTE_NAME = 'odxTheme';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemingService {\n private readonly config = injectThemingConfig();\n private readonly document = inject(DOCUMENT);\n private readonly windowRef = inject(WindowRef);\n private readonly theme$$ = new BehaviorSubject<Theme>(this.getInitialTheme());\n\n public readonly theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n\n constructor() {\n this.theme$.subscribe((theme) => {\n this.document.body.setAttribute(THEME_ATTRIBUTE_NAME, theme);\n saveTheme(this.config.storage, theme);\n });\n }\n\n public selectTheme(theme: Theme): void {\n this.theme$$.next(theme);\n }\n\n public getSelectedTheme(): Theme {\n return this.theme$$.getValue();\n }\n\n public toggleDarkMode(): void {\n const currentTheme = this.getSelectedTheme();\n if (currentTheme === Theme.DARK) {\n this.enableLightMode();\n } else {\n this.enableDarkMode();\n }\n }\n\n public enableDarkMode(): void {\n this.selectTheme(Theme.DARK);\n }\n\n public enableLightMode(): void {\n this.selectTheme(Theme.LIGHT);\n }\n\n private getInitialTheme(): Theme {\n let selectedTheme = readTheme(this.config.storage);\n\n if (!selectedTheme && this.config.autoDetect && prefersDarkTheme(this.windowRef.nativeWindow)) {\n selectedTheme = Theme.DARK;\n }\n\n return selectedTheme ?? this.config.defaultTheme;\n }\n}\n","import { EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { ConfigDependencies, ConfigProvider, createConfigTokens } from '@odx/angular/utils';\nimport { Theme } from './models';\nimport { ThemingService } from './theming.service';\n\nexport interface ThemingConfig {\n autoDetect: boolean;\n defaultTheme: Theme;\n storage?: Storage | null;\n}\n\nexport const { ThemingConfig, injectThemingConfig, provideThemingConfig } = createConfigTokens('Theming', '@odx/angular/theme', {\n autoDetect: false,\n defaultTheme: Theme.LIGHT,\n storage: null,\n} as ThemingConfig);\n\nexport function provideTheming<D extends ConfigDependencies = ConfigDependencies<ThemingConfig>>(\n config: ConfigProvider<Partial<ThemingConfig>, D>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideThemingConfig(config),\n {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => () => inject(ThemingService),\n deps: [ThemingConfig],\n multi: true,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, inject, DestroyRef, ElementRef, Renderer2, Injectable, InjectionToken } from '@angular/core';
3
- import { tap, BehaviorSubject } from 'rxjs';
3
+ import { tap, Subject } from 'rxjs';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { coerceArray } from '@angular/cdk/coercion';
6
6
  export { coerceArray, coerceCssPixelValue, coerceElement, coerceStringArray } from '@angular/cdk/coercion';
7
7
  import { deepmerge } from '@odx/angular/internal';
8
- import { map, shareReplay } from 'rxjs/operators';
8
+ import { startWith, map, shareReplay, distinctUntilChanged, filter, concatAll, share } from 'rxjs/operators';
9
9
 
10
10
  function Pure(_target, propertyKey, { get, enumerable, value }) {
11
11
  if (get) {
@@ -100,8 +100,8 @@ function forceLayoutReflow(element) {
100
100
  element.offsetHeight;
101
101
  }
102
102
  function setAttribute(element, attribute, value) {
103
- if (isString(value)) {
104
- element.setAttribute(attribute, value);
103
+ if (isString(value) || isNumber(value)) {
104
+ element.setAttribute(attribute, value.toString());
105
105
  }
106
106
  else {
107
107
  element.toggleAttribute(attribute, !!value);
@@ -175,6 +175,25 @@ function trackById(_, { id }) {
175
175
  function pluckFromArray(arr, key) {
176
176
  return arr.map((value) => value[key]);
177
177
  }
178
+ function orderBy(key, direction = 'ASC') {
179
+ return (a, b) => {
180
+ const leftValue = direction === 'ASC' ? a[key] : b[key];
181
+ const rightValue = direction === 'ASC' ? b[key] : a[key];
182
+ if (leftValue === undefined) {
183
+ return -1;
184
+ }
185
+ if (rightValue === undefined) {
186
+ return -1;
187
+ }
188
+ if (isNumber(leftValue) && isNumber(rightValue)) {
189
+ return leftValue - rightValue;
190
+ }
191
+ if (isString(leftValue) && isString(rightValue)) {
192
+ return leftValue.toLowerCase().localeCompare(rightValue.toLowerCase());
193
+ }
194
+ return 0;
195
+ };
196
+ }
178
197
 
179
198
  function buildUrl(...args) {
180
199
  return args.join('/').replace(/(^.*)(https?:\/\/)|(\/)+/g, '$2$3');
@@ -426,11 +445,15 @@ function isQueueItemId(value) {
426
445
  class Queue {
427
446
  constructor() {
428
447
  this.queue = new Map();
429
- this.update$$ = new BehaviorSubject(undefined);
448
+ this.events$$ = new Subject();
430
449
  this.values = [];
431
450
  this.firstItem = null;
432
451
  this.lastItem = null;
433
- this.value$ = this.update$$.pipe(map(() => this.values), shareReplay({ bufferSize: 1, refCount: true }));
452
+ this.onAdd$ = this.createEventObserver('add');
453
+ this.onUpdate$ = this.createEventObserver('update');
454
+ this.onRemove$ = this.createEventObserver('remove');
455
+ this.value$ = this.events$$.pipe(startWith(() => void 0), map(() => this.values), shareReplay({ bufferSize: 1, refCount: true }));
456
+ this.size$ = this.value$.pipe(map(() => this.size), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
434
457
  }
435
458
  get size() {
436
459
  return this.queue.size;
@@ -441,35 +464,67 @@ class Queue {
441
464
  isLast({ id }) {
442
465
  return this.lastItem?.id === id;
443
466
  }
444
- get(id) {
445
- return this.queue.get(id.toString()) ?? null;
467
+ get(itemOrId) {
468
+ const id = isQueueItemId(itemOrId) ? itemOrId.toString() : itemOrId.id.toString();
469
+ return this.queue.get(id) ?? null;
446
470
  }
447
- add(item) {
448
- this.remove(item);
449
- this.queue.set(item.id.toString(), item);
450
- this.notify();
451
- return item;
471
+ add(item, emitEvent = true) {
472
+ this.remove(item, false);
473
+ return this.addMany([item], emitEvent)[0];
452
474
  }
453
- remove(itemOrId) {
454
- const item = isQueueItemId(itemOrId) ? this.get(itemOrId) : itemOrId;
455
- if (!item)
456
- return null;
457
- this.queue.delete(item.id.toString());
458
- this.notify();
459
- return item;
475
+ addMany(items, emitEvent = true) {
476
+ const addedItems = [];
477
+ const updatedItems = [];
478
+ for (const item of items) {
479
+ if (this.get(item)) {
480
+ addedItems.push(item);
481
+ }
482
+ else {
483
+ updatedItems.push(item);
484
+ }
485
+ this.queue.set(item.id.toString(), item);
486
+ }
487
+ if (addedItems.length) {
488
+ this.notify({ type: 'add', items: addedItems }, emitEvent);
489
+ }
490
+ if (updatedItems.length) {
491
+ this.notify({ type: 'update', items: updatedItems }, emitEvent);
492
+ }
493
+ return items;
494
+ }
495
+ remove(itemOrId, emitEvent = true) {
496
+ return this.removeMany([itemOrId], emitEvent)[0];
497
+ }
498
+ removeMany(itemOrIds, emitEvent = true) {
499
+ const items = itemOrIds.map((itemOrId) => this.get(itemOrId)).filter(Boolean);
500
+ const removedItems = [];
501
+ for (const item of items) {
502
+ const itemRemoved = this.queue.delete(item.id.toString());
503
+ if (!itemRemoved)
504
+ continue;
505
+ removedItems.push(item);
506
+ }
507
+ this.notify({ type: 'remove', items: removedItems }, emitEvent);
508
+ return items;
460
509
  }
461
- clear() {
510
+ clear(emitEvent = true) {
511
+ const items = this.toArray();
462
512
  this.queue.clear();
463
- this.notify();
513
+ this.notify({ type: 'remove', items }, emitEvent);
464
514
  }
465
515
  toArray() {
466
516
  return this.values;
467
517
  }
468
- notify() {
518
+ notify(event, emitEvent = true) {
469
519
  this.values = Array.from(this.queue, ([_, item]) => item).reverse();
470
520
  this.firstItem = this.values[0] ?? null;
471
521
  this.lastItem = this.values[this.values.length - 1] ?? null;
472
- this.update$$.next(undefined);
522
+ if (!emitEvent)
523
+ return;
524
+ this.events$$.next(event);
525
+ }
526
+ createEventObserver(type) {
527
+ return this.events$$.pipe(filter((event) => event.type === type), map(({ items }) => items), concatAll(), share());
473
528
  }
474
529
  }
475
530
 
@@ -477,5 +532,5 @@ class Queue {
477
532
  * Generated bundle index. Do not edit.
478
533
  */
479
534
 
480
- export { Axis, CacheStorageClient, DRAEGER_WEBSITE_URL, EventManager, HTTP_CACHE_CONTROL_HEADER, HTTP_ETAG_HEADER, HTTP_IF_NONE_MATCH_HEADER, Position, Pure, Queue, Side, applyStyles, arrayAttribute, booleanToAttributeString, booleanToOptionalAttributeString, buildUrl, buildWebsiteUrl, clearUniqueIdCache, containsElement, createConfigTokens, createMutationObserver, createResizeObserver, cssTranslate, debounce, deferFn, disableCSSTransitions, forceLayoutReflow, getAxis, getLanguageCode, getOppositeSide, getSide, getUniqueId, hasChanged, injectElement, isBoolean, isComponent, isFunction, isNonEmptyString, isNumber, isPresent, isString, isTemplateRef, isUrlMatcher, isViewContainer, matchUrl, pluckFromArray, provideConfig, px, reactiveAttributeBinding, reactiveClassBinding, setAttribute, trackById, trackByIndex, untilDestroyed };
535
+ export { Axis, CacheStorageClient, DRAEGER_WEBSITE_URL, EventManager, HTTP_CACHE_CONTROL_HEADER, HTTP_ETAG_HEADER, HTTP_IF_NONE_MATCH_HEADER, Position, Pure, Queue, Side, applyStyles, arrayAttribute, booleanToAttributeString, booleanToOptionalAttributeString, buildUrl, buildWebsiteUrl, clearUniqueIdCache, containsElement, createConfigTokens, createMutationObserver, createResizeObserver, cssTranslate, debounce, deferFn, disableCSSTransitions, forceLayoutReflow, getAxis, getLanguageCode, getOppositeSide, getSide, getUniqueId, hasChanged, injectElement, isBoolean, isComponent, isFunction, isNonEmptyString, isNumber, isPresent, isString, isTemplateRef, isUrlMatcher, isViewContainer, matchUrl, orderBy, pluckFromArray, provideConfig, px, reactiveAttributeBinding, reactiveClassBinding, setAttribute, trackById, trackByIndex, untilDestroyed };
481
536
  //# sourceMappingURL=odx-angular-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-utils.mjs","sources":["../../../../libs/angular/utils/src/lib/decorators/pure.ts","../../../../libs/angular/utils/src/lib/helpers/type-guards.ts","../../../../libs/angular/utils/src/lib/helpers/dom.ts","../../../../libs/angular/utils/src/lib/helpers/until-destroyed.ts","../../../../libs/angular/utils/src/lib/helpers/angular.ts","../../../../libs/angular/utils/src/lib/helpers/array.ts","../../../../libs/angular/utils/src/lib/helpers/build-url.ts","../../../../libs/angular/utils/src/lib/helpers/build-website-url.ts","../../../../libs/angular/utils/src/lib/helpers/cache-storage-client.ts","../../../../libs/angular/utils/src/lib/helpers/coercion.ts","../../../../libs/angular/utils/src/lib/helpers/debounce.ts","../../../../libs/angular/utils/src/lib/helpers/defer-fn.ts","../../../../libs/angular/utils/src/lib/helpers/event-manager.ts","../../../../libs/angular/utils/src/lib/types/axis.ts","../../../../libs/angular/utils/src/lib/types/position.ts","../../../../libs/angular/utils/src/lib/types/side.ts","../../../../libs/angular/utils/src/lib/helpers/get-side.ts","../../../../libs/angular/utils/src/lib/helpers/get-axis.ts","../../../../libs/angular/utils/src/lib/helpers/get-language-code.ts","../../../../libs/angular/utils/src/lib/helpers/get-opposite-side.ts","../../../../libs/angular/utils/src/lib/helpers/get-unique-id.ts","../../../../libs/angular/utils/src/lib/helpers/match-url.ts","../../../../libs/angular/utils/src/lib/helpers/ng-changes.ts","../../../../libs/angular/utils/src/lib/helpers/provide-config.ts","../../../../libs/angular/utils/src/lib/helpers/queue.ts","../../../../libs/angular/utils/src/odx-angular-utils.ts"],"sourcesContent":["export function Pure<T>(_target: object, propertyKey: string, { get, enumerable, value }: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> {\n if (get) {\n return {\n enumerable,\n get(): T {\n const value = get.call(this);\n\n Object.defineProperty(this, propertyKey, { enumerable, value });\n\n return value;\n },\n };\n }\n\n if (typeof value !== 'function') {\n throw new Error('@Pure decorator can only be applied to functions or getters!');\n }\n\n const originalValue = value;\n\n return {\n enumerable,\n get(): T {\n let previousArgs: readonly unknown[] = [];\n let wasCalled = false;\n let pureValue: unknown;\n\n const patched = (...args: unknown[]): unknown => {\n const isPure = wasCalled && previousArgs.length === args.length && args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = originalValue.apply(this, args);\n wasCalled = true;\n\n return pureValue;\n };\n\n Object.defineProperty(this, propertyKey, { value: patched });\n\n return patched as unknown as T;\n },\n };\n}\n","import { TemplateRef, Type, ViewContainerRef } from '@angular/core';\n\nexport function isViewContainer(value: unknown): value is ViewContainerRef {\n return isFunction((value as ViewContainerRef)?.createComponent);\n}\n\nexport function isTemplateRef<T = unknown>(value: unknown): value is TemplateRef<T> {\n return value instanceof TemplateRef;\n}\n\nexport function isComponent<T = unknown>(value: unknown): value is Type<T> {\n return isFunction(value);\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0;\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return value === true || value === false;\n}\n\nexport function isFunction(value: unknown): value is CallableFunction {\n return typeof value === 'function';\n}\n\nexport function isPresent<T>(value: T | null | undefined): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","import { Subscriber } from 'rxjs';\nimport { isNumber, isString } from './type-guards';\n\nexport function applyStyles(element: HTMLElement, styles: Partial<CSSStyleDeclaration | Record<keyof CSSStyleDeclaration, string | null>>): void {\n Object.assign(element.style, styles);\n}\n\nexport function booleanToAttributeString(state: boolean): string {\n return booleanToOptionalAttributeString(state) ?? 'false';\n}\n\nexport function booleanToOptionalAttributeString(state: boolean): string | null {\n return state ? 'true' : null;\n}\n\nexport function px(value: unknown): `${number}px` {\n return isNumber(value) ? `${value}px` : '0px';\n}\n\nexport function cssTranslate(x: string | 0, y: string | 0): `translate3d(${string | 0}, ${string | 0}, 0)` {\n return `translate3d(${x}, ${y}, 0)`;\n}\n\nexport function disableCSSTransitions(element: HTMLElement, disabled: boolean): void {\n if (disabled) {\n applyStyles(element, { transition: 'none' });\n } else {\n forceLayoutReflow(element);\n applyStyles(element, { transition: null });\n }\n}\n\nexport function forceLayoutReflow(element: HTMLElement): void {\n element.offsetHeight;\n}\n\nexport function setAttribute(element: HTMLElement, attribute: string, value?: unknown) {\n if (isString(value)) {\n element.setAttribute(attribute, value);\n } else {\n element.toggleAttribute(attribute, !!value);\n }\n}\n\nexport function createResizeObserver(callback: ResizeObserverCallback): ResizeObserver {\n try {\n return new ResizeObserver(callback);\n } catch {\n return { observe: () => void 0, disconnect: () => void 0, unobserve: () => void 0 };\n }\n}\n\nexport function createMutationObserver(observer: Subscriber<MutationRecord>, callback: (mutations: MutationRecord[]) => boolean): MutationObserver {\n try {\n return new MutationObserver((mutations) => {\n if (callback(mutations)) {\n observer.next(mutations[0]);\n }\n });\n } catch (error) {\n return { disconnect: () => void 0, observe: () => void 0, takeRecords: () => [] };\n }\n}\n\nexport function containsElement(parent?: Element | null, other?: Element | null, inclusive = true): boolean {\n if (!parent || !other) return false;\n if (!inclusive && parent === other) return false;\n return parent.contains(other);\n}\n","import { DestroyRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MonoTypeOperatorFunction } from 'rxjs';\n\nexport function untilDestroyed(): <T>() => MonoTypeOperatorFunction<T> {\n const destroyRef = inject(DestroyRef);\n\n return () => takeUntilDestroyed(destroyRef);\n}\n","import { ElementRef, inject } from '@angular/core';\nimport { MonoTypeOperatorFunction, Observable, tap } from 'rxjs';\nimport { setAttribute } from './dom';\nimport { untilDestroyed } from './until-destroyed';\n\nfunction reactiveBinding<T>(updateFn: (state: unknown) => void): MonoTypeOperatorFunction<T> {\n const takeUntilDestroyed = untilDestroyed();\n\n return (source$: Observable<T>) =>\n source$.pipe(\n tap((state) => updateFn(state)),\n takeUntilDestroyed(),\n );\n}\n\nexport function reactiveClassBinding<T>(source$: Observable<T> | null | undefined, cssClass: string): void {\n const { nativeElement } = injectElement();\n\n if (source$) {\n source$.pipe(reactiveBinding((state) => nativeElement.classList.toggle(cssClass, !!state))).subscribe();\n }\n}\n\nexport function reactiveAttributeBinding<T>(source$: Observable<T> | null | undefined, ...attributes: string[]): void {\n const { nativeElement } = injectElement();\n\n if (source$) {\n source$\n .pipe(\n reactiveBinding((value) => {\n for (const attribute of attributes) {\n setAttribute(nativeElement, attribute, value);\n }\n }),\n )\n .subscribe();\n }\n}\n\nexport function injectElement<T = HTMLElement>(): ElementRef<T> {\n return inject<ElementRef<T>>(ElementRef);\n}\n\nexport function trackByIndex(index: number): number {\n return index;\n}\n\nexport function trackById<T extends { id: string | number | symbol }>(_: number, { id }: T): T['id'] {\n return id;\n}\n","export function pluckFromArray<T, K extends keyof T>(arr: T[], key: K): Array<T[K]> {\n return arr.map((value) => value[key]);\n}\n","export function buildUrl(...args: Array<string | number | symbol | null | undefined>): string {\n return args.join('/').replace(/(^.*)(https?:\\/\\/)|(\\/)+/g, '$2$3');\n}\n","import { buildUrl } from './build-url';\n\nexport const DRAEGER_WEBSITE_URL = 'https://www.draeger.com';\n\nexport function buildWebsiteUrl(...segments: Array<string | number | symbol | null | undefined>): string {\n return buildUrl(DRAEGER_WEBSITE_URL, ...segments);\n}\n","export const HTTP_ETAG_HEADER = 'Etag';\nexport const HTTP_IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const HTTP_CACHE_CONTROL_HEADER = 'Cache-Control';\n\nexport class CacheStorageClient {\n constructor(\n private readonly cacheKey: string,\n private readonly cacheStorage = window.caches,\n ) {}\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.getCache();\n\n return cache.delete(request);\n }\n\n public async deleteAll(): Promise<void> {\n const cache = await this.getCache();\n for (const key of await cache.keys()) {\n await cache.delete(key);\n }\n }\n\n public async request<T>(requestInfo: RequestInfo | URL, shouldDelete = ({ status }: Response) => status >= 400 && status < 500): Promise<T | null> {\n const cache = await this.getCache();\n const request = await this.prepareRequest(cache, requestInfo);\n const response = await this.sendRequest(cache, request);\n if (response && shouldDelete?.(response)) {\n await cache.delete(request);\n }\n return response?.json() ?? null;\n }\n\n protected async getCache(): Promise<Cache> {\n return this.cacheStorage.open(this.cacheKey);\n }\n\n protected async prepareRequest(cache: Cache, requestInfo: RequestInfo | URL): Promise<Request> {\n const cachedResponse = await cache.match(requestInfo);\n const etag = cachedResponse?.headers?.get(HTTP_ETAG_HEADER) ?? null;\n const request = new Request(requestInfo);\n if (etag) {\n request.headers.set(HTTP_IF_NONE_MATCH_HEADER, etag);\n }\n\n return request;\n }\n\n protected async sendRequest(cache: Cache, request: Request): Promise<Response | null> {\n const response = await fetch(request).catch(() => null);\n const cacheControl = response?.headers?.get(HTTP_CACHE_CONTROL_HEADER);\n if (cacheControl === 'no-cache') {\n await cache.delete(request);\n\n return response;\n }\n if (response?.ok) {\n await cache.put(request, response).catch(() => null);\n }\n\n return cache.match(request).then((res) => res ?? null);\n }\n}\n","import { coerceArray } from '@angular/cdk/coercion';\n\nexport function arrayAttribute(value: string | string[]): string[] {\n return coerceArray<string>(value);\n}\n\nexport { coerceArray, coerceCssPixelValue, coerceElement, coerceStringArray } from '@angular/cdk/coercion';\n","export function debounce<Args extends unknown[]>(func: (...args: Args) => void, delay: number, immediate = false): (...args: Args) => void {\n let timeout: number | null = null;\n\n return function (this: unknown, ...args: Args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const context = this;\n const callImmediately = immediate && timeout === null;\n if (timeout !== null) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(function () {\n timeout = null;\n if (!callImmediately) {\n func.apply(context, args);\n }\n }, delay) as unknown as number;\n if (callImmediately) {\n func.apply(context, args);\n }\n };\n}\n","export function deferFn(fn: () => void): void {\n setTimeout(fn, 0);\n}\n","import { inject, Injectable, OnDestroy, Renderer2 } from '@angular/core';\nimport { injectElement } from './angular';\n\n@Injectable()\nexport class EventManager implements OnDestroy {\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly listeners: Array<() => void> = [];\n\n public destroyListeners(): void {\n while (this.listeners.length) this.listeners.pop()?.();\n }\n\n public register<T extends Event = Event>(\n eventNames: Array<string | null>,\n callback: (event?: T) => void,\n target?: 'document' | 'window' | EventTarget | null\n ): void {\n for (const eventName of eventNames) {\n if (eventName) {\n this.listeners.push(this.renderer.listen(target ?? this.element.nativeElement, eventName, (event) => callback(event)));\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroyListeners();\n }\n}\n","export type Axis = (typeof Axis)[keyof typeof Axis];\n\nexport const Axis = {\n X: 'x',\n Y: 'y',\n} as const;\n","export type Position = (typeof Position)[keyof typeof Position];\n\nexport const Position = {\n TOP: 'top',\n TOP_START: 'top-start',\n TOP_END: 'top-end',\n\n RIGHT: 'right',\n RIGHT_START: 'right-start',\n RIGHT_END: 'right-end',\n\n BOTTOM: 'bottom',\n BOTTOM_START: 'bottom-start',\n BOTTOM_END: 'bottom-end',\n\n LEFT: 'left',\n LEFT_START: 'left-start',\n LEFT_END: 'left-end',\n} as const;\n","export type Side = (typeof Side)[keyof typeof Side];\n\nexport const Side = {\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left',\n} as const;\n","import { Position, Side } from '../types';\n\nexport function getSide(position: Position): Side {\n return position.split('-')[0] as Side;\n}\n","import { Axis, Position, Side } from '../types';\nimport { getSide } from './get-side';\n\nexport function getAxis(position: Position): Axis {\n const side = getSide(position);\n\n switch (side) {\n case Side.TOP:\n case Side.BOTTOM:\n return Axis.Y;\n case Side.LEFT:\n case Side.RIGHT:\n return Axis.X;\n }\n}\n","export function getLanguageCode(language: string): string {\n const [languageCode] = language.split(/-|_/);\n\n return languageCode?.toLowerCase();\n}\n","import { Position, Side } from '../types';\nimport { getSide } from './get-side';\n\nexport function getOppositeSide(position: Position): Side {\n switch (getSide(position)) {\n case Side.TOP:\n return Side.BOTTOM;\n case Side.RIGHT:\n return Side.LEFT;\n case Side.BOTTOM:\n return Side.TOP;\n case Side.LEFT:\n return Side.RIGHT;\n }\n}\n","let uniqueIdCache: { [key: string]: number } = {};\n\nexport function getUniqueId(key: string): string {\n uniqueIdCache[key] = (uniqueIdCache[key] ?? 0) + 1;\n\n return `${key}-${uniqueIdCache[key]}`;\n}\n\nexport function clearUniqueIdCache(): void {\n uniqueIdCache = {};\n}\n","import { isString } from './type-guards';\n\nexport function isUrlMatcher(value: unknown): value is string | RegExp {\n return isString(value) || value instanceof RegExp;\n}\n\nexport function matchUrl(url: string, filter: string | RegExp): boolean {\n return isString(filter) ? url.startsWith(filter) : !!url.match(filter);\n}\n","import { GetProperties } from '../types';\n\nexport type NgChanges<C, Properties = GetProperties<C>> = {\n [Key in keyof Properties]: {\n previousValue: Properties[Key];\n currentValue: Properties[Key];\n firstChange: boolean;\n isFirstChange(): boolean;\n };\n};\n\nexport function hasChanged<U extends Record<string, unknown>, T extends NgChanges<U>, K extends keyof T>(\n changes: T,\n keyOrKeys: K | K[],\n ignoreFirstChange = true,\n): boolean {\n if (Array.isArray(keyOrKeys)) {\n for (const key of keyOrKeys) {\n if (hasChanged(changes, key, ignoreFirstChange)) {\n return true;\n }\n }\n return false;\n } else {\n return keyOrKeys in changes && (!ignoreFirstChange || !changes[keyOrKeys]?.isFirstChange());\n }\n}\n","import { FactoryProvider, inject, InjectionToken, Type, ValueProvider } from '@angular/core';\n\nimport { deepmerge } from '@odx/angular/internal';\n\ninterface ConfigFactoryProvider<T, D extends ConfigDependencies> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...args: { [I in keyof D]: D[I] extends Type<unknown> ? InstanceType<D[I]> : D[I] extends InjectionToken<unknown> ? any : never }) => T;\n deps?: [...D];\n}\n\nexport type ConfigDependencies<T = unknown> = ReadonlyArray<Type<T> | InjectionToken<T>>;\nexport type ConfigProvider<T = unknown, D extends ConfigDependencies = []> = ConfigFactoryProvider<T, D> | T;\nexport type ConfigTransformFn<T = unknown> = (config: Partial<T>) => Partial<T>;\n\nexport function provideConfig<T extends object, D extends ConfigDependencies = ConfigDependencies>(\n token: InjectionToken<T> | string,\n config: ConfigProvider<T, D>,\n transform: ConfigTransformFn<T> = () => ({}),\n): FactoryProvider | ValueProvider {\n const prepareConfig = (value: Partial<T>) => deepmerge(value, transform(value));\n if ('useFactory' in config) {\n return {\n provide: token,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...args: unknown[]) => prepareConfig(config.useFactory(...(args as any))),\n deps: config.deps,\n };\n }\n\n return {\n provide: token,\n useFactory: () => prepareConfig(config),\n };\n}\n\nfunction mergeConfig<T>(token: InjectionToken<Partial<T>>, defaultValue: T): Partial<T> {\n const config = inject(token);\n const parentConfig = inject(token, { skipSelf: true, optional: true }) ?? {};\n\n return deepmerge(defaultValue, parentConfig, config) as T;\n}\n\nexport function createConfigTokens<T, N extends string>(name: N, prefix: string, defaultValue: T, transform?: ConfigTransformFn<T>) {\n type ConfigProviderFn = <D extends ConfigDependencies = ConfigDependencies<Partial<T>>>(\n config: ConfigProvider<Partial<T>, D>,\n ) => FactoryProvider | ValueProvider;\n const configName = `${name}Config` as const;\n const defaultConfigName = `${name}DefaultConfig` as const;\n const injectConfigName = `inject${name}Config` as const;\n const provideConfigName = `provide${name}Config` as const;\n const tokenName = `${prefix}::${configName}`;\n const token = new InjectionToken<Partial<T>>(tokenName, { providedIn: 'root', factory: () => defaultValue });\n\n return {\n [configName]: token,\n [defaultConfigName]: defaultValue,\n [injectConfigName]: () => mergeConfig(token, defaultValue),\n [provideConfigName]: ((config) => provideConfig(token, config, transform)) as ConfigProviderFn,\n } as Record<typeof configName, InjectionToken<Partial<T>>> &\n Record<typeof defaultConfigName, T> &\n Record<typeof injectConfigName, () => T> &\n Record<typeof provideConfigName, ConfigProviderFn>;\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { isNumber, isString } from './type-guards';\n\ntype QueueItemId = string | number;\ntype QueueItem<T> = T & { id: QueueItemId };\n\nfunction isQueueItemId(value: unknown): value is QueueItemId {\n return isString(value) || isNumber(value);\n}\n\nexport class Queue<T> {\n private readonly queue = new Map<string, QueueItem<T>>();\n private readonly update$$ = new BehaviorSubject<void>(undefined);\n private values: QueueItem<T>[] = [];\n private firstItem: QueueItem<T> | null = null;\n private lastItem: QueueItem<T> | null = null;\n\n public readonly value$ = this.update$$.pipe(\n map(() => this.values),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public get size(): number {\n return this.queue.size;\n }\n\n public isFirst({ id }: QueueItem<T>): boolean {\n return this.firstItem?.id === id;\n }\n\n public isLast({ id }: QueueItem<T>): boolean {\n return this.lastItem?.id === id;\n }\n\n public get(id: QueueItemId): QueueItem<T> | null {\n return this.queue.get(id.toString()) ?? null;\n }\n\n public add(item: QueueItem<T>): QueueItem<T> {\n this.remove(item);\n this.queue.set(item.id.toString(), item);\n this.notify();\n\n return item;\n }\n\n public remove(itemOrId: QueueItem<T> | QueueItemId): QueueItem<T> | null {\n const item = isQueueItemId(itemOrId) ? this.get(itemOrId) : itemOrId;\n if (!item) return null;\n this.queue.delete(item.id.toString());\n this.notify();\n\n return item;\n }\n\n public clear(): void {\n this.queue.clear();\n this.notify();\n }\n\n public toArray(): QueueItem<T>[] {\n return this.values;\n }\n\n private notify(): void {\n this.values = Array.from(this.queue, ([_, item]) => item).reverse();\n this.firstItem = this.values[0] ?? null;\n this.lastItem = this.values[this.values.length - 1] ?? null;\n this.update$$.next(undefined);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-utils.mjs","sources":["../../../../libs/angular/utils/src/lib/decorators/pure.ts","../../../../libs/angular/utils/src/lib/helpers/type-guards.ts","../../../../libs/angular/utils/src/lib/helpers/dom.ts","../../../../libs/angular/utils/src/lib/helpers/until-destroyed.ts","../../../../libs/angular/utils/src/lib/helpers/angular.ts","../../../../libs/angular/utils/src/lib/helpers/array.ts","../../../../libs/angular/utils/src/lib/helpers/build-url.ts","../../../../libs/angular/utils/src/lib/helpers/build-website-url.ts","../../../../libs/angular/utils/src/lib/helpers/cache-storage-client.ts","../../../../libs/angular/utils/src/lib/helpers/coercion.ts","../../../../libs/angular/utils/src/lib/helpers/debounce.ts","../../../../libs/angular/utils/src/lib/helpers/defer-fn.ts","../../../../libs/angular/utils/src/lib/helpers/event-manager.ts","../../../../libs/angular/utils/src/lib/types/axis.ts","../../../../libs/angular/utils/src/lib/types/position.ts","../../../../libs/angular/utils/src/lib/types/side.ts","../../../../libs/angular/utils/src/lib/helpers/get-side.ts","../../../../libs/angular/utils/src/lib/helpers/get-axis.ts","../../../../libs/angular/utils/src/lib/helpers/get-language-code.ts","../../../../libs/angular/utils/src/lib/helpers/get-opposite-side.ts","../../../../libs/angular/utils/src/lib/helpers/get-unique-id.ts","../../../../libs/angular/utils/src/lib/helpers/match-url.ts","../../../../libs/angular/utils/src/lib/helpers/ng-changes.ts","../../../../libs/angular/utils/src/lib/helpers/provide-config.ts","../../../../libs/angular/utils/src/lib/helpers/queue.ts","../../../../libs/angular/utils/src/odx-angular-utils.ts"],"sourcesContent":["export function Pure<T>(_target: object, propertyKey: string, { get, enumerable, value }: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> {\n if (get) {\n return {\n enumerable,\n get(): T {\n const value = get.call(this);\n\n Object.defineProperty(this, propertyKey, { enumerable, value });\n\n return value;\n },\n };\n }\n\n if (typeof value !== 'function') {\n throw new Error('@Pure decorator can only be applied to functions or getters!');\n }\n\n const originalValue = value;\n\n return {\n enumerable,\n get(): T {\n let previousArgs: readonly unknown[] = [];\n let wasCalled = false;\n let pureValue: unknown;\n\n const patched = (...args: unknown[]): unknown => {\n const isPure = wasCalled && previousArgs.length === args.length && args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = originalValue.apply(this, args);\n wasCalled = true;\n\n return pureValue;\n };\n\n Object.defineProperty(this, propertyKey, { value: patched });\n\n return patched as unknown as T;\n },\n };\n}\n","import { TemplateRef, Type, ViewContainerRef } from '@angular/core';\n\nexport function isViewContainer(value: unknown): value is ViewContainerRef {\n return isFunction((value as ViewContainerRef)?.createComponent);\n}\n\nexport function isTemplateRef<T = unknown>(value: unknown): value is TemplateRef<T> {\n return value instanceof TemplateRef;\n}\n\nexport function isComponent<T = unknown>(value: unknown): value is Type<T> {\n return isFunction(value);\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0;\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n return value === true || value === false;\n}\n\nexport function isFunction(value: unknown): value is CallableFunction {\n return typeof value === 'function';\n}\n\nexport function isPresent<T>(value: T | null | undefined): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","import { Subscriber } from 'rxjs';\nimport { isNumber, isString } from './type-guards';\n\nexport function applyStyles(element: HTMLElement, styles: Partial<CSSStyleDeclaration | Record<keyof CSSStyleDeclaration, string | null>>): void {\n Object.assign(element.style, styles);\n}\n\nexport function booleanToAttributeString(state: boolean): string {\n return booleanToOptionalAttributeString(state) ?? 'false';\n}\n\nexport function booleanToOptionalAttributeString(state: boolean): string | null {\n return state ? 'true' : null;\n}\n\nexport function px(value: unknown): `${number}px` {\n return isNumber(value) ? `${value}px` : '0px';\n}\n\nexport function cssTranslate(x: string | 0, y: string | 0): `translate3d(${string | 0}, ${string | 0}, 0)` {\n return `translate3d(${x}, ${y}, 0)`;\n}\n\nexport function disableCSSTransitions(element: HTMLElement, disabled: boolean): void {\n if (disabled) {\n applyStyles(element, { transition: 'none' });\n } else {\n forceLayoutReflow(element);\n applyStyles(element, { transition: null });\n }\n}\n\nexport function forceLayoutReflow(element: HTMLElement): void {\n element.offsetHeight;\n}\n\nexport function setAttribute(element: HTMLElement, attribute: string, value?: unknown) {\n if (isString(value) || isNumber(value)) {\n element.setAttribute(attribute, value.toString());\n } else {\n element.toggleAttribute(attribute, !!value);\n }\n}\n\nexport function createResizeObserver(callback: ResizeObserverCallback): ResizeObserver {\n try {\n return new ResizeObserver(callback);\n } catch {\n return { observe: () => void 0, disconnect: () => void 0, unobserve: () => void 0 };\n }\n}\n\nexport function createMutationObserver(observer: Subscriber<MutationRecord>, callback: (mutations: MutationRecord[]) => boolean): MutationObserver {\n try {\n return new MutationObserver((mutations) => {\n if (callback(mutations)) {\n observer.next(mutations[0]);\n }\n });\n } catch (error) {\n return { disconnect: () => void 0, observe: () => void 0, takeRecords: () => [] };\n }\n}\n\nexport function containsElement(parent?: Element | null, other?: Element | null, inclusive = true): boolean {\n if (!parent || !other) return false;\n if (!inclusive && parent === other) return false;\n return parent.contains(other);\n}\n","import { DestroyRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MonoTypeOperatorFunction } from 'rxjs';\n\nexport function untilDestroyed(): <T>() => MonoTypeOperatorFunction<T> {\n const destroyRef = inject(DestroyRef);\n\n return () => takeUntilDestroyed(destroyRef);\n}\n","import { ElementRef, inject } from '@angular/core';\nimport { MonoTypeOperatorFunction, Observable, tap } from 'rxjs';\nimport { setAttribute } from './dom';\nimport { untilDestroyed } from './until-destroyed';\n\nfunction reactiveBinding<T>(updateFn: (state: unknown) => void): MonoTypeOperatorFunction<T> {\n const takeUntilDestroyed = untilDestroyed();\n\n return (source$: Observable<T>) =>\n source$.pipe(\n tap((state) => updateFn(state)),\n takeUntilDestroyed(),\n );\n}\n\nexport function reactiveClassBinding<T>(source$: Observable<T> | null | undefined, cssClass: string): void {\n const { nativeElement } = injectElement();\n\n if (source$) {\n source$.pipe(reactiveBinding((state) => nativeElement.classList.toggle(cssClass, !!state))).subscribe();\n }\n}\n\nexport function reactiveAttributeBinding<T>(source$: Observable<T> | null | undefined, ...attributes: string[]): void {\n const { nativeElement } = injectElement();\n\n if (source$) {\n source$\n .pipe(\n reactiveBinding((value) => {\n for (const attribute of attributes) {\n setAttribute(nativeElement, attribute, value);\n }\n }),\n )\n .subscribe();\n }\n}\n\nexport function injectElement<T = HTMLElement>(): ElementRef<T> {\n return inject<ElementRef<T>>(ElementRef);\n}\n\nexport function trackByIndex(index: number): number {\n return index;\n}\n\nexport function trackById<T extends { id: string | number | symbol }>(_: number, { id }: T): T['id'] {\n return id;\n}\n","import { isNumber, isString } from './type-guards';\n\nexport function pluckFromArray<T, K extends keyof T>(arr: T[], key: K): Array<T[K]> {\n return arr.map((value) => value[key]);\n}\n\nexport type OrderByDirection = 'ASC' | 'DESC';\n\nexport function orderBy<T>(key: keyof T, direction: OrderByDirection = 'ASC'): (a: T, b: T) => number {\n return (a, b) => {\n const leftValue = direction === 'ASC' ? a[key] : b[key];\n const rightValue = direction === 'ASC' ? b[key] : a[key];\n if (leftValue === undefined) {\n return -1;\n }\n if (rightValue === undefined) {\n return -1;\n }\n if (isNumber(leftValue) && isNumber(rightValue)) {\n return leftValue - rightValue;\n }\n if (isString(leftValue) && isString(rightValue)) {\n return leftValue.toLowerCase().localeCompare(rightValue.toLowerCase());\n }\n return 0;\n };\n}\n","export function buildUrl(...args: Array<string | number | symbol | null | undefined>): string {\n return args.join('/').replace(/(^.*)(https?:\\/\\/)|(\\/)+/g, '$2$3');\n}\n","import { buildUrl } from './build-url';\n\nexport const DRAEGER_WEBSITE_URL = 'https://www.draeger.com';\n\nexport function buildWebsiteUrl(...segments: Array<string | number | symbol | null | undefined>): string {\n return buildUrl(DRAEGER_WEBSITE_URL, ...segments);\n}\n","export const HTTP_ETAG_HEADER = 'Etag';\nexport const HTTP_IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const HTTP_CACHE_CONTROL_HEADER = 'Cache-Control';\n\nexport class CacheStorageClient {\n constructor(\n private readonly cacheKey: string,\n private readonly cacheStorage = window.caches,\n ) {}\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.getCache();\n\n return cache.delete(request);\n }\n\n public async deleteAll(): Promise<void> {\n const cache = await this.getCache();\n for (const key of await cache.keys()) {\n await cache.delete(key);\n }\n }\n\n public async request<T>(requestInfo: RequestInfo | URL, shouldDelete = ({ status }: Response) => status >= 400 && status < 500): Promise<T | null> {\n const cache = await this.getCache();\n const request = await this.prepareRequest(cache, requestInfo);\n const response = await this.sendRequest(cache, request);\n if (response && shouldDelete?.(response)) {\n await cache.delete(request);\n }\n return response?.json() ?? null;\n }\n\n protected async getCache(): Promise<Cache> {\n return this.cacheStorage.open(this.cacheKey);\n }\n\n protected async prepareRequest(cache: Cache, requestInfo: RequestInfo | URL): Promise<Request> {\n const cachedResponse = await cache.match(requestInfo);\n const etag = cachedResponse?.headers?.get(HTTP_ETAG_HEADER) ?? null;\n const request = new Request(requestInfo);\n if (etag) {\n request.headers.set(HTTP_IF_NONE_MATCH_HEADER, etag);\n }\n\n return request;\n }\n\n protected async sendRequest(cache: Cache, request: Request): Promise<Response | null> {\n const response = await fetch(request).catch(() => null);\n const cacheControl = response?.headers?.get(HTTP_CACHE_CONTROL_HEADER);\n if (cacheControl === 'no-cache') {\n await cache.delete(request);\n\n return response;\n }\n if (response?.ok) {\n await cache.put(request, response).catch(() => null);\n }\n\n return cache.match(request).then((res) => res ?? null);\n }\n}\n","import { coerceArray } from '@angular/cdk/coercion';\n\nexport function arrayAttribute(value: string | string[]): string[] {\n return coerceArray<string>(value);\n}\n\nexport { coerceArray, coerceCssPixelValue, coerceElement, coerceStringArray } from '@angular/cdk/coercion';\n","export function debounce<Args extends unknown[]>(func: (...args: Args) => void, delay: number, immediate = false): (...args: Args) => void {\n let timeout: number | null = null;\n\n return function (this: unknown, ...args: Args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const context = this;\n const callImmediately = immediate && timeout === null;\n if (timeout !== null) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(function () {\n timeout = null;\n if (!callImmediately) {\n func.apply(context, args);\n }\n }, delay) as unknown as number;\n if (callImmediately) {\n func.apply(context, args);\n }\n };\n}\n","export function deferFn(fn: () => void): void {\n setTimeout(fn, 0);\n}\n","import { inject, Injectable, OnDestroy, Renderer2 } from '@angular/core';\nimport { injectElement } from './angular';\n\n@Injectable()\nexport class EventManager implements OnDestroy {\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly listeners: Array<() => void> = [];\n\n public destroyListeners(): void {\n while (this.listeners.length) this.listeners.pop()?.();\n }\n\n public register<T extends Event = Event>(\n eventNames: Array<string | null>,\n callback: (event?: T) => void,\n target?: 'document' | 'window' | EventTarget | null\n ): void {\n for (const eventName of eventNames) {\n if (eventName) {\n this.listeners.push(this.renderer.listen(target ?? this.element.nativeElement, eventName, (event) => callback(event)));\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroyListeners();\n }\n}\n","export type Axis = (typeof Axis)[keyof typeof Axis];\n\nexport const Axis = {\n X: 'x',\n Y: 'y',\n} as const;\n","export type Position = (typeof Position)[keyof typeof Position];\n\nexport const Position = {\n TOP: 'top',\n TOP_START: 'top-start',\n TOP_END: 'top-end',\n\n RIGHT: 'right',\n RIGHT_START: 'right-start',\n RIGHT_END: 'right-end',\n\n BOTTOM: 'bottom',\n BOTTOM_START: 'bottom-start',\n BOTTOM_END: 'bottom-end',\n\n LEFT: 'left',\n LEFT_START: 'left-start',\n LEFT_END: 'left-end',\n} as const;\n","export type Side = (typeof Side)[keyof typeof Side];\n\nexport const Side = {\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left',\n} as const;\n","import { Position, Side } from '../types';\n\nexport function getSide(position: Position): Side {\n return position.split('-')[0] as Side;\n}\n","import { Axis, Position, Side } from '../types';\nimport { getSide } from './get-side';\n\nexport function getAxis(position: Position): Axis {\n const side = getSide(position);\n\n switch (side) {\n case Side.TOP:\n case Side.BOTTOM:\n return Axis.Y;\n case Side.LEFT:\n case Side.RIGHT:\n return Axis.X;\n }\n}\n","export function getLanguageCode(language: string): string {\n const [languageCode] = language.split(/-|_/);\n\n return languageCode?.toLowerCase();\n}\n","import { Position, Side } from '../types';\nimport { getSide } from './get-side';\n\nexport function getOppositeSide(position: Position): Side {\n switch (getSide(position)) {\n case Side.TOP:\n return Side.BOTTOM;\n case Side.RIGHT:\n return Side.LEFT;\n case Side.BOTTOM:\n return Side.TOP;\n case Side.LEFT:\n return Side.RIGHT;\n }\n}\n","let uniqueIdCache: { [key: string]: number } = {};\n\nexport function getUniqueId(key: string): string {\n uniqueIdCache[key] = (uniqueIdCache[key] ?? 0) + 1;\n\n return `${key}-${uniqueIdCache[key]}`;\n}\n\nexport function clearUniqueIdCache(): void {\n uniqueIdCache = {};\n}\n","import { isString } from './type-guards';\n\nexport function isUrlMatcher(value: unknown): value is string | RegExp {\n return isString(value) || value instanceof RegExp;\n}\n\nexport function matchUrl(url: string, filter: string | RegExp): boolean {\n return isString(filter) ? url.startsWith(filter) : !!url.match(filter);\n}\n","import { GetProperties } from '../types';\n\nexport type NgChanges<C, Properties = GetProperties<C>> = {\n [Key in keyof Properties]: {\n previousValue: Properties[Key];\n currentValue: Properties[Key];\n firstChange: boolean;\n isFirstChange(): boolean;\n };\n};\n\nexport function hasChanged<U extends Record<string, unknown>, T extends NgChanges<U>, K extends keyof T>(\n changes: T,\n keyOrKeys: K | K[],\n ignoreFirstChange = true,\n): boolean {\n if (Array.isArray(keyOrKeys)) {\n for (const key of keyOrKeys) {\n if (hasChanged(changes, key, ignoreFirstChange)) {\n return true;\n }\n }\n return false;\n } else {\n return keyOrKeys in changes && (!ignoreFirstChange || !changes[keyOrKeys]?.isFirstChange());\n }\n}\n","import { FactoryProvider, inject, InjectionToken, Type, ValueProvider } from '@angular/core';\n\nimport { deepmerge } from '@odx/angular/internal';\n\ninterface ConfigFactoryProvider<T, D extends ConfigDependencies> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...args: { [I in keyof D]: D[I] extends Type<unknown> ? InstanceType<D[I]> : D[I] extends InjectionToken<unknown> ? any : never }) => T;\n deps?: [...D];\n}\n\nexport type ConfigDependencies<T = unknown> = ReadonlyArray<Type<T> | InjectionToken<T>>;\nexport type ConfigProvider<T = unknown, D extends ConfigDependencies = []> = ConfigFactoryProvider<T, D> | T;\nexport type ConfigTransformFn<T = unknown> = (config: Partial<T>) => Partial<T>;\n\nexport function provideConfig<T extends object, D extends ConfigDependencies = ConfigDependencies>(\n token: InjectionToken<T> | string,\n config: ConfigProvider<T, D>,\n transform: ConfigTransformFn<T> = () => ({}),\n): FactoryProvider | ValueProvider {\n const prepareConfig = (value: Partial<T>) => deepmerge(value, transform(value));\n if ('useFactory' in config) {\n return {\n provide: token,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useFactory: (...args: unknown[]) => prepareConfig(config.useFactory(...(args as any))),\n deps: config.deps,\n };\n }\n\n return {\n provide: token,\n useFactory: () => prepareConfig(config),\n };\n}\n\nfunction mergeConfig<T>(token: InjectionToken<Partial<T>>, defaultValue: T): Partial<T> {\n const config = inject(token);\n const parentConfig = inject(token, { skipSelf: true, optional: true }) ?? {};\n\n return deepmerge(defaultValue, parentConfig, config) as T;\n}\n\nexport function createConfigTokens<T, N extends string>(name: N, prefix: string, defaultValue: T, transform?: ConfigTransformFn<T>) {\n type ConfigProviderFn = <D extends ConfigDependencies = ConfigDependencies<Partial<T>>>(\n config: ConfigProvider<Partial<T>, D>,\n ) => FactoryProvider | ValueProvider;\n const configName = `${name}Config` as const;\n const defaultConfigName = `${name}DefaultConfig` as const;\n const injectConfigName = `inject${name}Config` as const;\n const provideConfigName = `provide${name}Config` as const;\n const tokenName = `${prefix}::${configName}`;\n const token = new InjectionToken<Partial<T>>(tokenName, { providedIn: 'root', factory: () => defaultValue });\n\n return {\n [configName]: token,\n [defaultConfigName]: defaultValue,\n [injectConfigName]: () => mergeConfig(token, defaultValue),\n [provideConfigName]: ((config) => provideConfig(token, config, transform)) as ConfigProviderFn,\n } as Record<typeof configName, InjectionToken<Partial<T>>> &\n Record<typeof defaultConfigName, T> &\n Record<typeof injectConfigName, () => T> &\n Record<typeof provideConfigName, ConfigProviderFn>;\n}\n","import { Observable, Subject } from 'rxjs';\nimport { concatAll, distinctUntilChanged, filter, map, share, shareReplay, startWith } from 'rxjs/operators';\nimport { isNumber, isString } from './type-guards';\n\ntype QueueItemId = string | number;\ntype QueueItem<T> = T & { id: QueueItemId };\ntype QueueEventType = 'remove' | 'add' | 'update';\ntype QueueEvent<T> = { items: QueueItem<T>[]; type: QueueEventType };\n\nfunction isQueueItemId(value: unknown): value is QueueItemId {\n return isString(value) || isNumber(value);\n}\n\nexport class Queue<T> {\n private readonly queue = new Map<string, QueueItem<T>>();\n private readonly events$$ = new Subject<QueueEvent<T>>();\n private values: QueueItem<T>[] = [];\n private firstItem: QueueItem<T> | null = null;\n private lastItem: QueueItem<T> | null = null;\n\n public readonly onAdd$ = this.createEventObserver('add');\n public readonly onUpdate$ = this.createEventObserver('update');\n public readonly onRemove$ = this.createEventObserver('remove');\n public readonly value$ = this.events$$.pipe(\n startWith(() => void 0),\n map(() => this.values),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly size$ = this.value$.pipe(\n map(() => this.size),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n public get size(): number {\n return this.queue.size;\n }\n\n public isFirst({ id }: QueueItem<T>): boolean {\n return this.firstItem?.id === id;\n }\n\n public isLast({ id }: QueueItem<T>): boolean {\n return this.lastItem?.id === id;\n }\n\n public get(itemOrId: QueueItem<T> | QueueItemId): QueueItem<T> | null {\n const id = isQueueItemId(itemOrId) ? itemOrId.toString() : itemOrId.id.toString();\n\n return this.queue.get(id) ?? null;\n }\n\n public add(item: QueueItem<T>, emitEvent = true): QueueItem<T> {\n this.remove(item, false);\n\n return this.addMany([item], emitEvent)[0];\n }\n\n public addMany(items: Array<QueueItem<T>>, emitEvent = true): Array<QueueItem<T>> {\n const addedItems = [];\n const updatedItems = [];\n for (const item of items) {\n if (this.get(item)) {\n addedItems.push(item);\n } else {\n updatedItems.push(item);\n }\n this.queue.set(item.id.toString(), item);\n }\n if (addedItems.length) {\n this.notify({ type: 'add', items: addedItems }, emitEvent);\n }\n if (updatedItems.length) {\n this.notify({ type: 'update', items: updatedItems }, emitEvent);\n }\n\n return items;\n }\n\n public remove(itemOrId: QueueItem<T> | QueueItemId, emitEvent = true): QueueItem<T> | null {\n return this.removeMany([itemOrId], emitEvent)[0];\n }\n\n public removeMany(itemOrIds: Array<QueueItem<T> | QueueItemId>, emitEvent = true): Array<QueueItem<T> | null> {\n const items = itemOrIds.map((itemOrId) => this.get(itemOrId)).filter(Boolean) as QueueItem<T>[];\n const removedItems = [];\n for (const item of items) {\n const itemRemoved = this.queue.delete(item.id.toString());\n if (!itemRemoved) continue;\n removedItems.push(item);\n }\n this.notify({ type: 'remove', items: removedItems }, emitEvent);\n\n return items;\n }\n\n public clear(emitEvent = true): void {\n const items = this.toArray();\n this.queue.clear();\n this.notify({ type: 'remove', items }, emitEvent);\n }\n\n public toArray(): QueueItem<T>[] {\n return this.values;\n }\n\n private notify(event: QueueEvent<T>, emitEvent = true): void {\n this.values = Array.from(this.queue, ([_, item]) => item).reverse();\n this.firstItem = this.values[0] ?? null;\n this.lastItem = this.values[this.values.length - 1] ?? null;\n if (!emitEvent) return;\n this.events$$.next(event);\n }\n\n private createEventObserver(type: QueueEventType): Observable<T> {\n return this.events$$.pipe(\n filter((event) => event.type === type),\n map(({ items }) => items),\n concatAll(),\n share(),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, Directive, InjectionToken, Optional, Host, booleanAttribute, forwardRef, Input, ElementRef, Renderer2, EventEmitter, Output, HostListener, NgModule, reflectComponentType, Injectable } from '@angular/core';
3
- import { pluckFromArray, isPresent, injectElement, hasChanged, deferFn, booleanToOptionalAttributeString, getLanguageCode } from '@odx/angular/utils';
4
- import { merge, EMPTY, tap, Subject, shareReplay, map, distinctUntilChanged, switchMap, NEVER, debounceTime, Observable, startWith, filter } from 'rxjs';
2
+ import { inject, ChangeDetectorRef, Directive, InjectionToken, Optional, Host, booleanAttribute, forwardRef, Input, ElementRef, Renderer2, EventEmitter, Output, HostListener, signal, NgModule, reflectComponentType, Injectable } from '@angular/core';
3
+ import { pluckFromArray, isPresent, injectElement, hasChanged, deferFn, booleanToOptionalAttributeString, reactiveAttributeBinding, getLanguageCode } from '@odx/angular/utils';
4
+ import { merge, EMPTY, tap, Subject, shareReplay, map, distinctUntilChanged, switchMap, NEVER, debounceTime, Observable, startWith, of, combineLatest, filter } from 'rxjs';
5
5
  import { CommonModule, DOCUMENT } from '@angular/common';
6
6
  import { LetModule } from '@ngrx/component';
7
+ import { toObservable } from '@angular/core/rxjs-interop';
7
8
  import { Title } from '@angular/platform-browser';
8
9
  import { Router, NavigationEnd } from '@angular/router';
9
10
  import { fromEvents } from '@odx/angular/rxjs';
@@ -19,7 +20,7 @@ function detectControllerChanges(...controllers) {
19
20
  class Controller {
20
21
  constructor() {
21
22
  this.change$$ = new Subject();
22
- this.change$ = this.change$$.pipe(shareReplay({ refCount: true }));
23
+ this.change$ = this.change$$.pipe(shareReplay({ bufferSize: 1, refCount: true }));
23
24
  }
24
25
  static setup(controller, changeDetector) {
25
26
  controllerChanges([controller])
@@ -50,7 +51,7 @@ class DisabledController extends Controller {
50
51
  super(...arguments);
51
52
  this.parentController = inject(DISABLED_CONTROLLER, { optional: true, skipSelf: true });
52
53
  this.isDisabled = false;
53
- this.isDisabled$ = this.change$.pipe(map(() => this.disabled), distinctUntilChanged(), shareReplay({ refCount: true }));
54
+ this.isDisabled$ = this.change$.pipe(map(() => this.disabled), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
54
55
  }
55
56
  set disabled(value) {
56
57
  this.isDisabled = value;
@@ -128,7 +129,7 @@ class ReadonlyController extends Controller {
128
129
  this.parentController = inject(READONLY_CONTROLLER, { optional: true, skipSelf: true });
129
130
  this.isReadonly = false;
130
131
  this.hasReadonlyAttribute = false;
131
- this.isReadonly$ = this.change$.pipe(map(() => this.isReadonly), distinctUntilChanged(), shareReplay({ refCount: true }));
132
+ this.isReadonly$ = this.change$.pipe(map(() => this.isReadonly), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
132
133
  this.nodeName = element?.nativeElement.nodeName.toLowerCase() ?? '';
133
134
  }
134
135
  static inject() {
@@ -324,23 +325,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
324
325
 
325
326
  class WithTabIndex {
326
327
  constructor() {
327
- this.disabledController = DisabledController.inject();
328
+ this.isDisabled$ = DisabledController.inject()?.isDisabled$.pipe(startWith(false)) ?? of(false);
329
+ this.tabindex = signal(0);
330
+ this.tabindex$ = combineLatest([toObservable(this.tabindex), this.isDisabled$]).pipe(map(([tabindex, isDisabled]) => (isDisabled ? -1 : tabindex)), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
331
+ reactiveAttributeBinding(this.tabindex$, 'tabindex');
328
332
  }
329
- get isDisabled() {
330
- return !!this.disabledController?.disabled;
333
+ setTabindex(value) {
334
+ this.tabindex.set(value ?? 0);
331
335
  }
332
336
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithTabIndex, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
333
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WithTabIndex, isStandalone: true, host: { properties: { "attr.tabindex": "isDisabled ? -1 : 0" } }, ngImport: i0 }); }
337
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WithTabIndex, isStandalone: true, ngImport: i0 }); }
334
338
  }
335
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithTabIndex, decorators: [{
336
340
  type: Directive,
337
- args: [{
338
- standalone: true,
339
- host: {
340
- '[attr.tabindex]': 'isDisabled ? -1 : 0',
341
- },
342
- }]
343
- }] });
341
+ args: [{ standalone: true }]
342
+ }], ctorParameters: function () { return []; } });
344
343
 
345
344
  const controllers = [DisabledController, ReadonlyController];
346
345
  const modules = [ClickOutsideDirective];
@@ -368,8 +367,8 @@ class WindowRef {
368
367
  this.title = inject(Title);
369
368
  this.document = inject(DOCUMENT);
370
369
  this.nativeWindow = this.document.defaultView ?? window;
371
- this.isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(startWith(null), map(() => this.isOnline()), distinctUntilChanged(), shareReplay({ refCount: true }));
372
- this.pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(filter((event) => event instanceof NavigationEnd), startWith(null), debounceTime(0), map(() => this.title.getTitle()), shareReplay({ refCount: true }));
370
+ this.isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(startWith(null), map(() => this.isOnline()), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
371
+ this.pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(filter((event) => event instanceof NavigationEnd), startWith(null), debounceTime(0), map(() => this.title.getTitle()), shareReplay({ bufferSize: 1, refCount: true }));
373
372
  }
374
373
  get location() {
375
374
  return this.nativeWindow.location;