@siemens/element-ng 47.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +27 -0
  3. package/application-header/index.d.ts +17 -0
  4. package/application-header/launchpad/si-launchpad-app.component.d.ts +21 -0
  5. package/application-header/launchpad/si-launchpad-factory.component.d.ts +83 -0
  6. package/application-header/launchpad/si-launchpad.model.d.ts +33 -0
  7. package/application-header/package.json +3 -0
  8. package/application-header/si-application-header.component.d.ts +60 -0
  9. package/application-header/si-header-account-item.component.d.ts +13 -0
  10. package/application-header/si-header-action-item-icon-base.directive.d.ts +26 -0
  11. package/application-header/si-header-action-item.base.d.ts +19 -0
  12. package/application-header/si-header-action-item.component.d.ts +9 -0
  13. package/application-header/si-header-actions.directive.d.ts +5 -0
  14. package/application-header/si-header-brand.directive.d.ts +5 -0
  15. package/application-header/si-header-collapsible-actions.component.d.ts +33 -0
  16. package/application-header/si-header-logo.directive.d.ts +6 -0
  17. package/application-header/si-header-navigation-item.component.d.ts +10 -0
  18. package/application-header/si-header-navigation.component.d.ts +11 -0
  19. package/application-header/si-header-selection-item.component.d.ts +12 -0
  20. package/application-header/si-header-siemens-logo.component.d.ts +20 -0
  21. package/avatar/index.d.ts +6 -0
  22. package/avatar/package.json +3 -0
  23. package/avatar/si-avatar-background-color.directive.d.ts +35 -0
  24. package/avatar/si-avatar.component.d.ts +50 -0
  25. package/common/decorators/index.d.ts +5 -0
  26. package/common/decorators/webcomponent.decorator.d.ts +6 -0
  27. package/common/helpers/animation.helpers.d.ts +10 -0
  28. package/common/helpers/global-events.helpers.d.ts +5 -0
  29. package/common/helpers/index.d.ts +10 -0
  30. package/common/helpers/overlay-helper.d.ts +24 -0
  31. package/common/helpers/positioning.helpers.d.ts +58 -0
  32. package/common/helpers/rtl.d.ts +6 -0
  33. package/common/helpers/track-by.helper.d.ts +27 -0
  34. package/common/index.d.ts +8 -0
  35. package/common/models/color-variant.model.d.ts +8 -0
  36. package/common/models/index.d.ts +8 -0
  37. package/common/models/menu.model.d.ts +85 -0
  38. package/common/models/positions.model.d.ts +18 -0
  39. package/common/models/status-type.model.d.ts +19 -0
  40. package/common/package.json +3 -0
  41. package/common/services/blink.service.d.ts +41 -0
  42. package/common/services/index.d.ts +8 -0
  43. package/common/services/scrollbar-helper.service.d.ts +17 -0
  44. package/common/services/si-uistate.service.d.ts +61 -0
  45. package/common/services/text-measure.service.d.ts +21 -0
  46. package/element-ng.scss +14 -0
  47. package/fesm2022/siemens-element-ng-application-header.mjs +747 -0
  48. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -0
  49. package/fesm2022/siemens-element-ng-avatar.mjs +185 -0
  50. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -0
  51. package/fesm2022/siemens-element-ng-common.mjs +946 -0
  52. package/fesm2022/siemens-element-ng-common.mjs.map +1 -0
  53. package/fesm2022/siemens-element-ng-header-dropdown.mjs +384 -0
  54. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -0
  55. package/fesm2022/siemens-element-ng-icon.mjs +236 -0
  56. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -0
  57. package/fesm2022/siemens-element-ng-link.mjs +233 -0
  58. package/fesm2022/siemens-element-ng-link.mjs.map +1 -0
  59. package/fesm2022/siemens-element-ng-resize-observer.mjs +332 -0
  60. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -0
  61. package/fesm2022/siemens-element-ng-theme.mjs +770 -0
  62. package/fesm2022/siemens-element-ng-theme.mjs.map +1 -0
  63. package/fesm2022/siemens-element-ng-translate.mjs +22 -0
  64. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -0
  65. package/fesm2022/siemens-element-ng.mjs +12 -0
  66. package/fesm2022/siemens-element-ng.mjs.map +1 -0
  67. package/header-dropdown/index.d.ts +9 -0
  68. package/header-dropdown/package.json +3 -0
  69. package/header-dropdown/si-header-dropdown-item.component.d.ts +23 -0
  70. package/header-dropdown/si-header-dropdown-items-factory.component.d.ts +14 -0
  71. package/header-dropdown/si-header-dropdown-trigger.directive.d.ts +57 -0
  72. package/header-dropdown/si-header-dropdown.component.d.ts +20 -0
  73. package/header-dropdown/si-header.model.d.ts +37 -0
  74. package/icon/element-icons.d.ts +12 -0
  75. package/icon/index.d.ts +9 -0
  76. package/icon/package.json +3 -0
  77. package/icon/si-icon-next.component.d.ts +68 -0
  78. package/icon/si-icon.component.d.ts +23 -0
  79. package/icon/si-icon.module.d.ts +7 -0
  80. package/icon/si-icons.d.ts +31 -0
  81. package/index.d.ts +5 -0
  82. package/link/aria-current.model.d.ts +5 -0
  83. package/link/index.d.ts +8 -0
  84. package/link/link.model.d.ts +57 -0
  85. package/link/package.json +3 -0
  86. package/link/si-link-action.service.d.ts +17 -0
  87. package/link/si-link.directive.d.ts +42 -0
  88. package/link/si-link.module.d.ts +7 -0
  89. package/package.json +86 -0
  90. package/public-api.d.ts +5 -0
  91. package/resize-observer/index.d.ts +8 -0
  92. package/resize-observer/package.json +3 -0
  93. package/resize-observer/resize-observer.service.d.ts +41 -0
  94. package/resize-observer/si-resize-observer.directive.d.ts +29 -0
  95. package/resize-observer/si-resize-observer.module.d.ts +8 -0
  96. package/resize-observer/si-responsive-container.directive.d.ts +73 -0
  97. package/theme/index.d.ts +7 -0
  98. package/theme/package.json +3 -0
  99. package/theme/si-theme-store.d.ts +82 -0
  100. package/theme/si-theme.model.d.ts +48 -0
  101. package/theme/si-theme.service.d.ts +129 -0
  102. package/translate/index.d.ts +7 -0
  103. package/translate/package.json +3 -0
  104. package/translate/si-translatable-keys.interface.d.ts +11 -0
  105. package/translate/si-translatable-overrides.provider.d.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siemens-element-ng-link.mjs","sources":["../../../../projects/element-ng/link/si-link-action.service.ts","../../../../projects/element-ng/link/si-link.directive.ts","../../../../projects/element-ng/link/si-link.module.ts","../../../../projects/element-ng/link/index.ts","../../../../projects/element-ng/link/siemens-element-ng-link.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { Link, LinkAction } from './link.model';\n\n@Injectable()\nexport class SiLinkActionService {\n private actionSubject = new Subject<LinkAction>();\n\n /**\n * Observable which emits the link and param to run the action on.\n *\n * @defaultValue this.actionSubject.asObservable()\n */\n readonly action$ = this.actionSubject.asObservable();\n\n /**\n * Emit a new link and param pair to run the action on.\n */\n emit(link: Link, param: any): void {\n this.actionSubject.next({ link, param });\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport { LocationStrategy } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n Directive,\n DoCheck,\n HostListener,\n inject,\n InjectionToken,\n input,\n OnChanges,\n OnDestroy,\n output,\n signal\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, NavigationExtras, Router, UrlTree } from '@angular/router';\nimport { SiTranslateService } from '@siemens/element-translate-ng/translate';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { AriaCurrentType } from './aria-current.model';\nimport { Link } from './link.model';\nimport { SiLinkActionService } from './si-link-action.service';\n\nexport const SI_LINK_DEFAULT_NAVIGATION_EXTRA = new InjectionToken<NavigationExtras>(\n 'SI_LINK_DEFAULT_NAVIGATION_EXTRA'\n);\n\n@Directive({\n selector: '[siLink]',\n exportAs: 'siLink',\n host: {\n '[attr.href]': 'href()',\n '[attr.target]': 'target()',\n '[attr.title]': 'title()',\n '[attr.aria-current]': 'isAriaCurrent()',\n '[class]': 'active() ? activeClass() : null'\n }\n})\nexport class SiLinkDirective implements DoCheck, OnChanges, OnDestroy {\n readonly siLink = input<Link>();\n readonly siLinkDefaultTarget = input<string>();\n readonly actionParam = input<any>();\n readonly activeClass = input<string>();\n /** @defaultValue false */\n readonly exactMatch = input(false, { transform: booleanAttribute });\n /**\n * Type for `aria-current` to set if routerLink is active.\n */\n readonly ariaCurrent = input<AriaCurrentType>();\n\n readonly activeChange = output<boolean>();\n\n protected readonly href = signal<string | undefined>(undefined);\n protected readonly target = signal<string | undefined>(undefined);\n protected readonly title = signal<string | undefined>(undefined);\n protected readonly isAriaCurrent = computed(() =>\n this.active() ? (this.ariaCurrent() ?? 'true') : undefined\n );\n\n /** @defaultValue false */\n readonly active = signal(false);\n\n private readonly destroyer = new Subject<void>();\n\n private router = inject(Router, { optional: true });\n private activatedRoute = inject(ActivatedRoute, { optional: true });\n private locationStrategy = inject(LocationStrategy, { optional: true });\n private translateService = inject(SiTranslateService);\n private actionService = inject(SiLinkActionService, { optional: true });\n private defaultNavigationExtra = inject(SI_LINK_DEFAULT_NAVIGATION_EXTRA, { optional: true });\n\n private get urlTree(): UrlTree {\n const link = this.siLink()!.link;\n return this.router!.createUrlTree(\n Array.isArray(link!) ? link! : [link!],\n this.navigationExtras\n );\n }\n\n private get navigationExtras(): NavigationExtras {\n return {\n relativeTo: this.activatedRoute,\n preserveFragment: true,\n queryParamsHandling: 'merge',\n ...this.defaultNavigationExtra,\n ...this.siLink()!.navigationExtras\n };\n }\n\n ngOnDestroy(): void {\n this.destroyer.next();\n this.destroyer.complete();\n }\n\n ngOnChanges(): void {\n const siLink = this.siLink();\n if (!siLink) {\n this.href.set(undefined);\n return;\n }\n this.destroyer.next();\n\n if (siLink.tooltip) {\n this.translateService\n .translateAsync(siLink.tooltip)\n .pipe(takeUntil(this.destroyer))\n .subscribe(text => this.title.set(text));\n }\n\n if (siLink.action) {\n this.href.set('');\n } else if (siLink.link) {\n this.subscribeRouter();\n } else if (siLink.href) {\n this.href.set(siLink.href);\n this.target.set(siLink.target ?? this.siLinkDefaultTarget());\n } else {\n // In case the siLink has no link, href or action,\n // we remove the href to avoid the mouse pointer.\n this.href.set(undefined);\n }\n }\n\n ngDoCheck(): void {\n // this deep-checks if isActive has changed. It then updates the internal state and emits the event\n // to be symmetric with the router-link case. queueMicroTask avoids \"Expression has changed after it was checked\" errors\n const siLink = this.siLink();\n if (\n siLink &&\n !siLink.link &&\n siLink.isActive !== undefined &&\n this.active() !== siLink.isActive\n ) {\n this.active.set(siLink.isActive);\n queueMicrotask(() => {\n this.activeChange.emit(this.active());\n });\n }\n }\n\n private subscribeRouter(): void {\n if (!this.router || !this.activatedRoute) {\n return;\n }\n\n // Initial check\n this.updateActiveByRouter();\n this.router.events\n .pipe(\n takeUntil(this.destroyer),\n filter(e => e instanceof NavigationEnd)\n )\n .subscribe(() => this.updateActiveByRouter());\n }\n\n private updateActiveByRouter(): void {\n const urlTree = this.urlTree;\n this.active.set(\n this.siLink()!.isActive ??\n this.router!.isActive(\n urlTree,\n this.exactMatch()\n ? {\n queryParams: 'exact',\n matrixParams: 'exact',\n paths: 'exact',\n fragment: 'exact'\n }\n : {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored'\n }\n )\n );\n this.href.set(this.locationStrategy!.prepareExternalUrl(this.router!.serializeUrl(urlTree)));\n }\n\n @HostListener('click', ['$event'])\n onClick(event: any): void {\n const siLink = this.siLink();\n if (siLink?.action) {\n event.preventDefault();\n\n const actionParam = this.actionParam();\n if (typeof siLink.action === 'string') {\n this.actionService?.emit(siLink, this.actionParam());\n } else if (actionParam === undefined) {\n siLink.action();\n } else {\n siLink.action(actionParam);\n }\n return;\n }\n\n // ignore regular links, allow user to open links in new tab or window\n if (\n !siLink ||\n siLink.href ||\n event.button > 0 ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n ) {\n return;\n }\n\n event.preventDefault();\n // We have links without any action, href or link. For example grouping navbar items that hold a\n // dropdown with links. That is why we need to check if the link property is set.\n if (siLink.link && this.router) {\n this.router.navigateByUrl(this.urlTree, this.navigationExtras);\n }\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLinkDirective } from './si-link.directive';\n\n@NgModule({\n imports: [SiLinkDirective],\n exports: [SiLinkDirective]\n})\nexport class SiLinkModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './link.model';\nexport * from './si-link-action.service';\nexport * from './si-link.directive';\nexport * from './si-link.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ import { isPlatformBrowser } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, NgZone, PLATFORM_ID, Injectable, input, output, ElementRef, Directive, signal, NgModule } from '@angular/core';
4
+ import { Observable } from 'rxjs';
5
+
6
+ /**
7
+ * Copyright Siemens 2016 - 2025.
8
+ * SPDX-License-Identifier: MIT
9
+ */
10
+ /**
11
+ * A service wrapping `ResizeObserver`. This is a service for those reasons:
12
+ * - only one `ResizeObserver` should be used for performance reason.
13
+ * - For Angular change detection to work, explicit `ngZone` calls are necessary
14
+ * - Observable stream
15
+ */
16
+ class ResizeObserverService {
17
+ listeners = new Map();
18
+ resizeObserver;
19
+ timerQueue = new Map();
20
+ zone = inject(NgZone);
21
+ constructor() {
22
+ const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
23
+ if (!isBrowser || !ResizeObserver) {
24
+ return;
25
+ }
26
+ this.resizeObserver = new ResizeObserver((entries) => entries.forEach(entry => this.handleElement(entry.target)));
27
+ }
28
+ /**
29
+ * Observe the size of an element. Returns an observable with the changes.
30
+ * @param element - The element to observe
31
+ * @param throttle - Throttle time in ms. Will emit this time after the resize
32
+ * @param emitInitial - Emit the initial size after subscribe?
33
+ * @param emitImmediate - Emit an event immediately after the size changes. Useful e.g. for visibility checks.
34
+ */
35
+ observe(element, throttle, emitInitial, emitImmediate) {
36
+ let entry = this.listeners.get(element);
37
+ if (!entry) {
38
+ entry = { element, subscribers: [] };
39
+ this.listeners.set(element, entry);
40
+ }
41
+ return new Observable(subscriber => {
42
+ const sub = {
43
+ sub: subscriber,
44
+ dim: undefined,
45
+ throttle,
46
+ blocked: false,
47
+ emitImmediate
48
+ };
49
+ this.subscriberAdded(entry, sub, emitInitial);
50
+ return () => this.subscriberRemoved(entry, sub);
51
+ });
52
+ }
53
+ subscriberAdded(entry, subscriber, emitInitial) {
54
+ entry.subscribers.push(subscriber);
55
+ if (entry.subscribers.length === 1) {
56
+ this.resizeObserver?.observe(entry.element);
57
+ }
58
+ if (emitInitial) {
59
+ this.schedule(0, entry.element, subscriber, false, true);
60
+ }
61
+ }
62
+ subscriberRemoved(entry, subscriber) {
63
+ const index = entry.subscribers.indexOf(subscriber);
64
+ if (index >= 0) {
65
+ entry.subscribers.splice(index, 1);
66
+ }
67
+ if (entry.subscribers.length === 0) {
68
+ // no more subscribers, tear down everything
69
+ this.resizeObserver?.unobserve(entry.element);
70
+ this.listeners.delete(entry.element);
71
+ }
72
+ this.unschedule(subscriber);
73
+ // close down, no re-subscription possible
74
+ subscriber.sub.complete();
75
+ }
76
+ handleElement(element) {
77
+ const entry = this.listeners.get(element);
78
+ if (!entry) {
79
+ this.resizeObserver?.unobserve(element);
80
+ return;
81
+ }
82
+ entry.subscribers.forEach(sub => this.handleResizeSubscriber(element, sub));
83
+ }
84
+ handleResizeSubscriber(element, entry) {
85
+ if (entry.blocked) {
86
+ return;
87
+ }
88
+ if (entry.emitImmediate) {
89
+ this.schedule(0, element, entry, false);
90
+ }
91
+ this.schedule(entry.throttle, element, entry, true);
92
+ }
93
+ emitSize(element, entry, force = false) {
94
+ const dimensions = { width: element.clientWidth, height: element.clientHeight };
95
+ if (!force &&
96
+ entry.dim?.width === dimensions.width &&
97
+ entry.dim?.height === dimensions.height) {
98
+ // Prevent spurious emissions. Subpixels and all..
99
+ return;
100
+ }
101
+ entry.dim = dimensions;
102
+ entry.sub.next(dimensions);
103
+ }
104
+ schedule(timeout, element, subscriber, unblock, force = false) {
105
+ if (unblock) {
106
+ subscriber.blocked = true;
107
+ }
108
+ let queue = this.timerQueue.get(timeout);
109
+ if (!queue) {
110
+ queue = [];
111
+ this.timerQueue.set(timeout, queue);
112
+ setTimeout(() => {
113
+ this.timerQueue.delete(timeout);
114
+ this.processQueue(queue);
115
+ }, timeout);
116
+ }
117
+ queue.push({ element, subscriber, unblock, force });
118
+ }
119
+ unschedule(entry) {
120
+ const queued = this.timerQueue.get(entry.throttle);
121
+ if (queued) {
122
+ const index = queued.findIndex(q => q.subscriber === entry);
123
+ if (index > -1) {
124
+ queued.splice(index, 1);
125
+ }
126
+ }
127
+ }
128
+ processQueue(queue) {
129
+ this.zone.run(() => {
130
+ queue?.forEach(q => {
131
+ if (q.unblock) {
132
+ q.subscriber.blocked = false;
133
+ }
134
+ this.emitSize(q.element, q.subscriber, q.force);
135
+ });
136
+ });
137
+ }
138
+ /**
139
+ * check size on all observed elements. Only use in testing!
140
+ */
141
+ // eslint-disable-next-line @typescript-eslint/naming-convention
142
+ _checkAll() {
143
+ this.listeners.forEach(entry => this.handleElement(entry.element));
144
+ }
145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
146
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: ResizeObserverService, decorators: [{
149
+ type: Injectable,
150
+ args: [{
151
+ providedIn: 'root'
152
+ }]
153
+ }], ctorParameters: () => [] });
154
+
155
+ /**
156
+ * Copyright Siemens 2016 - 2025.
157
+ * SPDX-License-Identifier: MIT
158
+ */
159
+ /**
160
+ * Directive to emit events on element size change. Use like this:
161
+ * `<div (siResizeObserver)="handleResize($event)">`
162
+ * When the size of the element changes, an event in the format
163
+ * `{ width: number, height: number }`
164
+ * will be emitted. Also an initial event will be emitted on init.
165
+ *
166
+ * By default, events are throttled and to an event every 100ms. To change
167
+ * this, add `[resizeThrottle]="200"` on the same element. Input in milliseconds.
168
+ */
169
+ class SiResizeObserverDirective {
170
+ /** @defaultValue 100 */
171
+ resizeThrottle = input(100);
172
+ siResizeObserver = output();
173
+ subs;
174
+ element = inject(ElementRef);
175
+ service = inject(ResizeObserverService);
176
+ ngOnInit() {
177
+ this.subs = this.service
178
+ .observe(this.element.nativeElement, this.resizeThrottle(), true)
179
+ .subscribe(value => this.siResizeObserver.emit(value));
180
+ }
181
+ ngOnDestroy() {
182
+ this.subs?.unsubscribe();
183
+ }
184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
185
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.6", type: SiResizeObserverDirective, isStandalone: true, selector: "[siResizeObserver]", inputs: { resizeThrottle: { classPropertyName: "resizeThrottle", publicName: "resizeThrottle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { siResizeObserver: "siResizeObserver" }, ngImport: i0 });
186
+ }
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverDirective, decorators: [{
188
+ type: Directive,
189
+ args: [{
190
+ selector: '[siResizeObserver]'
191
+ }]
192
+ }] });
193
+
194
+ /**
195
+ * Copyright Siemens 2016 - 2025.
196
+ * SPDX-License-Identifier: MIT
197
+ */
198
+ // keep in sync with the Bootstrap variables
199
+ const BOOTSTRAP_BREAKPOINTS = {
200
+ smMinimum: 576,
201
+ mdMinimum: 768,
202
+ lgMinimum: 992,
203
+ xlMinimum: 1200,
204
+ xxlMinimum: 1400
205
+ };
206
+ /**
207
+ * Directive to automatically set `si-container-*` classes so Bootstrap column classes work
208
+ * in the context of the container instead of viewport size.
209
+ */
210
+ class SiResponsiveContainerDirective {
211
+ /** @defaultValue false */
212
+ xs = signal(false);
213
+ /**
214
+ * @deprecated Use {@link xs} instead.
215
+ * @defaultValue false
216
+ **/
217
+ isXs = false;
218
+ /** @defaultValue false */
219
+ sm = signal(false);
220
+ /**
221
+ * @deprecated Use {@link sm} instead.
222
+ * @defaultValue false
223
+ **/
224
+ isSm = false;
225
+ /** @defaultValue false */
226
+ md = signal(false);
227
+ /**
228
+ * @deprecated Use {@link md} instead.
229
+ * @defaultValue false
230
+ **/
231
+ isMd = false;
232
+ /** @defaultValue false */
233
+ lg = signal(false);
234
+ /**
235
+ * @deprecated Use {@link lg} instead.
236
+ * @defaultValue false
237
+ **/
238
+ isLg = false;
239
+ /** @defaultValue false */
240
+ xl = signal(false);
241
+ /**
242
+ * @deprecated Use {@link xl} instead.
243
+ * @defaultValue false
244
+ **/
245
+ isXl = false;
246
+ /** @defaultValue false */
247
+ xxl = signal(false);
248
+ /**
249
+ * @deprecated Use {@link xxl} instead.
250
+ * @defaultValue false
251
+ **/
252
+ isXxl = false;
253
+ /** @defaultValue 100 */
254
+ resizeThrottle = input(100);
255
+ breakpoints = input();
256
+ subs;
257
+ element = inject(ElementRef);
258
+ service = inject(ResizeObserverService);
259
+ ngOnInit() {
260
+ this.subs = this.service
261
+ .observe(this.element.nativeElement, this.resizeThrottle(), true)
262
+ .subscribe(event => this.setResponsiveSize(event.width, event.height));
263
+ }
264
+ ngOnDestroy() {
265
+ this.subs?.unsubscribe();
266
+ }
267
+ setResponsiveSize(width, height) {
268
+ if (!width && !height) {
269
+ // element is not visible, no point in changing anything
270
+ return;
271
+ }
272
+ const breakpoints = this.breakpoints() ?? BOOTSTRAP_BREAKPOINTS;
273
+ this.xs.set(width < breakpoints.smMinimum);
274
+ this.isXs = this.xs();
275
+ this.sm.set(width >= breakpoints.smMinimum && width < breakpoints.mdMinimum);
276
+ this.isSm = this.sm();
277
+ this.md.set(width >= breakpoints.mdMinimum && width < breakpoints.lgMinimum);
278
+ this.isMd = this.md();
279
+ this.lg.set(width >= breakpoints.lgMinimum && width < breakpoints.xlMinimum);
280
+ this.isLg = this.lg();
281
+ this.xl.set(width >= breakpoints.xlMinimum && width < breakpoints.xxlMinimum);
282
+ this.isXl = this.xl();
283
+ this.xxl.set(width >= breakpoints.xxlMinimum);
284
+ this.isXxl = this.xxl();
285
+ }
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResponsiveContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
287
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.6", type: SiResponsiveContainerDirective, isStandalone: true, selector: "[siResponsiveContainer]", inputs: { resizeThrottle: { classPropertyName: "resizeThrottle", publicName: "resizeThrottle", isSignal: true, isRequired: false, transformFunction: null }, breakpoints: { classPropertyName: "breakpoints", publicName: "breakpoints", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.si-container-xs": "xs()", "class.si-container-sm": "sm()", "class.si-container-md": "md()", "class.si-container-lg": "lg()", "class.si-container-xl": "xl()", "class.si-container-xxl": "xxl()" } }, exportAs: ["siResponsiveContainer"], ngImport: i0 });
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResponsiveContainerDirective, decorators: [{
290
+ type: Directive,
291
+ args: [{
292
+ selector: '[siResponsiveContainer]',
293
+ exportAs: 'siResponsiveContainer',
294
+ host: {
295
+ '[class.si-container-xs]': 'xs()',
296
+ '[class.si-container-sm]': 'sm()',
297
+ '[class.si-container-md]': 'md()',
298
+ '[class.si-container-lg]': 'lg()',
299
+ '[class.si-container-xl]': 'xl()',
300
+ '[class.si-container-xxl]': 'xxl()'
301
+ }
302
+ }]
303
+ }] });
304
+
305
+ /**
306
+ * Copyright Siemens 2016 - 2025.
307
+ * SPDX-License-Identifier: MIT
308
+ */
309
+ class SiResizeObserverModule {
310
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
311
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverModule, imports: [SiResizeObserverDirective, SiResponsiveContainerDirective], exports: [SiResizeObserverDirective, SiResponsiveContainerDirective] });
312
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverModule });
313
+ }
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiResizeObserverModule, decorators: [{
315
+ type: NgModule,
316
+ args: [{
317
+ imports: [SiResizeObserverDirective, SiResponsiveContainerDirective],
318
+ exports: [SiResizeObserverDirective, SiResponsiveContainerDirective]
319
+ }]
320
+ }] });
321
+
322
+ /**
323
+ * Copyright Siemens 2016 - 2025.
324
+ * SPDX-License-Identifier: MIT
325
+ */
326
+
327
+ /**
328
+ * Generated bundle index. Do not edit.
329
+ */
330
+
331
+ export { BOOTSTRAP_BREAKPOINTS, ResizeObserverService, SiResizeObserverDirective, SiResizeObserverModule, SiResponsiveContainerDirective };
332
+ //# sourceMappingURL=siemens-element-ng-resize-observer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siemens-element-ng-resize-observer.mjs","sources":["../../../../projects/element-ng/resize-observer/resize-observer.service.ts","../../../../projects/element-ng/resize-observer/si-resize-observer.directive.ts","../../../../projects/element-ng/resize-observer/si-responsive-container.directive.ts","../../../../projects/element-ng/resize-observer/si-resize-observer.module.ts","../../../../projects/element-ng/resize-observer/index.ts","../../../../projects/element-ng/resize-observer/siemens-element-ng-resize-observer.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { Observable, Subscriber } from 'rxjs';\n\nexport interface ElementDimensions {\n width: number;\n height: number;\n}\n\ninterface ResizeSubscriber {\n sub: Subscriber<ElementDimensions>;\n dim?: ElementDimensions;\n throttle: number;\n blocked: boolean;\n emitImmediate?: boolean;\n}\n\ninterface Listener {\n element: Element;\n subscribers: ResizeSubscriber[];\n}\n\ninterface QueueEntry {\n element: Element;\n subscriber: ResizeSubscriber;\n unblock: boolean;\n force: boolean;\n}\n\n/**\n * A service wrapping `ResizeObserver`. This is a service for those reasons:\n * - only one `ResizeObserver` should be used for performance reason.\n * - For Angular change detection to work, explicit `ngZone` calls are necessary\n * - Observable stream\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeObserverService {\n private listeners = new Map<Element, Listener>();\n private resizeObserver?: ResizeObserver;\n private timerQueue = new Map<number, QueueEntry[]>();\n private zone = inject(NgZone);\n\n constructor() {\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n if (!isBrowser || !ResizeObserver) {\n return;\n }\n this.resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) =>\n entries.forEach(entry => this.handleElement(entry.target))\n );\n }\n\n /**\n * Observe the size of an element. Returns an observable with the changes.\n * @param element - The element to observe\n * @param throttle - Throttle time in ms. Will emit this time after the resize\n * @param emitInitial - Emit the initial size after subscribe?\n * @param emitImmediate - Emit an event immediately after the size changes. Useful e.g. for visibility checks.\n */\n observe(\n element: Element,\n throttle: number,\n emitInitial?: boolean,\n emitImmediate?: boolean\n ): Observable<ElementDimensions> {\n let entry = this.listeners.get(element);\n if (!entry) {\n entry = { element, subscribers: [] };\n this.listeners.set(element, entry);\n }\n\n return new Observable<ElementDimensions>(subscriber => {\n const sub: ResizeSubscriber = {\n sub: subscriber,\n dim: undefined,\n throttle,\n blocked: false,\n emitImmediate\n };\n this.subscriberAdded(entry!, sub, emitInitial);\n return () => this.subscriberRemoved(entry!, sub);\n });\n }\n\n private subscriberAdded(\n entry: Listener,\n subscriber: ResizeSubscriber,\n emitInitial?: boolean\n ): void {\n entry.subscribers.push(subscriber);\n if (entry.subscribers.length === 1) {\n this.resizeObserver?.observe(entry.element);\n }\n\n if (emitInitial) {\n this.schedule(0, entry.element, subscriber, false, true);\n }\n }\n\n private subscriberRemoved(entry: Listener, subscriber: ResizeSubscriber): void {\n const index = entry.subscribers.indexOf(subscriber);\n if (index >= 0) {\n entry.subscribers.splice(index, 1);\n }\n if (entry.subscribers.length === 0) {\n // no more subscribers, tear down everything\n this.resizeObserver?.unobserve(entry.element);\n this.listeners.delete(entry.element);\n }\n this.unschedule(subscriber);\n // close down, no re-subscription possible\n subscriber.sub.complete();\n }\n\n private handleElement(element: Element): void {\n const entry = this.listeners.get(element);\n if (!entry) {\n this.resizeObserver?.unobserve(element);\n return;\n }\n entry.subscribers.forEach(sub => this.handleResizeSubscriber(element, sub));\n }\n\n private handleResizeSubscriber(element: Element, entry: ResizeSubscriber): void {\n if (entry.blocked) {\n return;\n }\n if (entry.emitImmediate) {\n this.schedule(0, element, entry, false);\n }\n this.schedule(entry.throttle, element, entry, true);\n }\n\n private emitSize(element: Element, entry: ResizeSubscriber, force = false): void {\n const dimensions = { width: element.clientWidth, height: element.clientHeight };\n if (\n !force &&\n entry.dim?.width === dimensions.width &&\n entry.dim?.height === dimensions.height\n ) {\n // Prevent spurious emissions. Subpixels and all..\n return;\n }\n entry.dim = dimensions;\n entry.sub.next(dimensions);\n }\n\n private schedule(\n timeout: number,\n element: Element,\n subscriber: ResizeSubscriber,\n unblock: boolean,\n force = false\n ): void {\n if (unblock) {\n subscriber.blocked = true;\n }\n\n let queue = this.timerQueue.get(timeout);\n if (!queue) {\n queue = [];\n this.timerQueue.set(timeout, queue);\n setTimeout(() => {\n this.timerQueue.delete(timeout);\n this.processQueue(queue!);\n }, timeout);\n }\n\n queue.push({ element, subscriber, unblock, force });\n }\n\n private unschedule(entry: ResizeSubscriber): void {\n const queued = this.timerQueue.get(entry.throttle);\n if (queued) {\n const index = queued.findIndex(q => q.subscriber === entry);\n if (index > -1) {\n queued.splice(index, 1);\n }\n }\n }\n\n private processQueue(queue: QueueEntry[]): void {\n this.zone.run(() => {\n queue?.forEach(q => {\n if (q.unblock) {\n q.subscriber.blocked = false;\n }\n this.emitSize(q.element, q.subscriber, q.force);\n });\n });\n }\n\n /**\n * check size on all observed elements. Only use in testing!\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _checkAll(): void {\n this.listeners.forEach(entry => this.handleElement(entry.element));\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit, output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ElementDimensions, ResizeObserverService } from './resize-observer.service';\n\n/**\n * Directive to emit events on element size change. Use like this:\n * `<div (siResizeObserver)=\"handleResize($event)\">`\n * When the size of the element changes, an event in the format\n * `{ width: number, height: number }`\n * will be emitted. Also an initial event will be emitted on init.\n *\n * By default, events are throttled and to an event every 100ms. To change\n * this, add `[resizeThrottle]=\"200\"` on the same element. Input in milliseconds.\n */\n@Directive({\n selector: '[siResizeObserver]'\n})\nexport class SiResizeObserverDirective implements OnInit, OnDestroy {\n /** @defaultValue 100 */\n readonly resizeThrottle = input(100);\n readonly siResizeObserver = output<ElementDimensions>();\n\n private subs?: Subscription;\n private element = inject(ElementRef);\n private service = inject(ResizeObserverService);\n\n ngOnInit(): void {\n this.subs = this.service\n .observe(this.element.nativeElement, this.resizeThrottle(), true)\n .subscribe(value => this.siResizeObserver.emit(value));\n }\n\n ngOnDestroy(): void {\n this.subs?.unsubscribe();\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, inject, input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ResizeObserverService } from './resize-observer.service';\n\nexport interface Breakpoints {\n smMinimum: number;\n mdMinimum: number;\n lgMinimum: number;\n xlMinimum: number;\n xxlMinimum: number;\n}\n\n// keep in sync with the Bootstrap variables\nexport const BOOTSTRAP_BREAKPOINTS: Breakpoints = {\n smMinimum: 576,\n mdMinimum: 768,\n lgMinimum: 992,\n xlMinimum: 1200,\n xxlMinimum: 1400\n};\n\n/**\n * Directive to automatically set `si-container-*` classes so Bootstrap column classes work\n * in the context of the container instead of viewport size.\n */\n@Directive({\n selector: '[siResponsiveContainer]',\n exportAs: 'siResponsiveContainer',\n host: {\n '[class.si-container-xs]': 'xs()',\n '[class.si-container-sm]': 'sm()',\n '[class.si-container-md]': 'md()',\n '[class.si-container-lg]': 'lg()',\n '[class.si-container-xl]': 'xl()',\n '[class.si-container-xxl]': 'xxl()'\n }\n})\nexport class SiResponsiveContainerDirective implements OnInit, OnDestroy {\n /** @defaultValue false */\n readonly xs = signal(false);\n /**\n * @deprecated Use {@link xs} instead.\n * @defaultValue false\n **/\n isXs = false;\n /** @defaultValue false */\n readonly sm = signal(false);\n /**\n * @deprecated Use {@link sm} instead.\n * @defaultValue false\n **/\n isSm = false;\n /** @defaultValue false */\n readonly md = signal(false);\n /**\n * @deprecated Use {@link md} instead.\n * @defaultValue false\n **/\n isMd = false;\n /** @defaultValue false */\n readonly lg = signal(false);\n /**\n * @deprecated Use {@link lg} instead.\n * @defaultValue false\n **/\n isLg = false;\n /** @defaultValue false */\n readonly xl = signal(false);\n /**\n * @deprecated Use {@link xl} instead.\n * @defaultValue false\n **/\n isXl = false;\n /** @defaultValue false */\n readonly xxl = signal(false);\n /**\n * @deprecated Use {@link xxl} instead.\n * @defaultValue false\n **/\n isXxl = false;\n\n /** @defaultValue 100 */\n readonly resizeThrottle = input(100);\n readonly breakpoints = input<Breakpoints>();\n\n private subs?: Subscription;\n\n private element = inject(ElementRef);\n private service = inject(ResizeObserverService);\n\n ngOnInit(): void {\n this.subs = this.service\n .observe(this.element.nativeElement, this.resizeThrottle(), true)\n .subscribe(event => this.setResponsiveSize(event.width, event.height));\n }\n\n ngOnDestroy(): void {\n this.subs?.unsubscribe();\n }\n\n private setResponsiveSize(width: number, height: number): void {\n if (!width && !height) {\n // element is not visible, no point in changing anything\n return;\n }\n const breakpoints = this.breakpoints() ?? BOOTSTRAP_BREAKPOINTS;\n\n this.xs.set(width < breakpoints.smMinimum);\n this.isXs = this.xs();\n this.sm.set(width >= breakpoints.smMinimum && width < breakpoints.mdMinimum);\n this.isSm = this.sm();\n this.md.set(width >= breakpoints.mdMinimum && width < breakpoints.lgMinimum);\n this.isMd = this.md();\n this.lg.set(width >= breakpoints.lgMinimum && width < breakpoints.xlMinimum);\n this.isLg = this.lg();\n this.xl.set(width >= breakpoints.xlMinimum && width < breakpoints.xxlMinimum);\n this.isXl = this.xl();\n this.xxl.set(width >= breakpoints.xxlMinimum);\n this.isXxl = this.xxl();\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiResizeObserverDirective } from './si-resize-observer.directive';\nimport { SiResponsiveContainerDirective } from './si-responsive-container.directive';\n\n@NgModule({\n imports: [SiResizeObserverDirective, SiResponsiveContainerDirective],\n exports: [SiResizeObserverDirective, SiResponsiveContainerDirective]\n})\nexport class SiResizeObserverModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './resize-observer.service';\nexport * from './si-resize-observer.directive';\nexport * from './si-resize-observer.module';\nexport * from './si-responsive-container.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}