@siemens/element-ng 49.6.0 → 49.8.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 (123) hide show
  1. package/fesm2022/siemens-element-ng-about.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-accordion.mjs +1 -1
  4. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-action-modal.mjs +8 -8
  6. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-ag-grid.mjs +3 -3
  8. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-application-header.mjs +5 -5
  10. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-avatar.mjs +2 -2
  12. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-breadcrumb.mjs +2 -2
  14. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-card.mjs +43 -8
  16. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-chat-messages.mjs +8 -8
  18. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-circle-status.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-color-picker.mjs +2 -2
  22. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-common.mjs +4 -4
  26. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  28. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-dashboard.mjs +31 -14
  30. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-date-range-filter.mjs +16 -4
  32. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-datepicker.mjs +59 -46
  34. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +2 -2
  36. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -8
  38. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-filter-bar.mjs +4 -4
  40. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-filtered-search.mjs +12 -12
  42. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-formly.mjs +1 -1
  44. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-header-dropdown.mjs +3 -3
  46. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-loading-spinner.mjs +19 -11
  48. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-modal.mjs +25 -26
  50. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +316 -354
  52. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +4 -4
  54. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-navbar.mjs +4 -4
  56. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-notification-item.mjs +2 -2
  58. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-number-input.mjs +2 -2
  60. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-pagination.mjs +5 -2
  62. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-password-toggle.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  66. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
  68. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-popover.mjs +10 -3
  70. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-search-bar.mjs +10 -4
  72. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-select.mjs +4 -4
  74. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-side-panel.mjs +8 -5
  76. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  77. package/fesm2022/siemens-element-ng-status-bar.mjs +69 -29
  78. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  79. package/fesm2022/siemens-element-ng-summary-chip.mjs +2 -2
  80. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-summary-widget.mjs +2 -2
  82. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
  84. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  85. package/fesm2022/siemens-element-ng-tabs.mjs +10 -10
  86. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  87. package/fesm2022/siemens-element-ng-threshold.mjs +2 -2
  88. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  89. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  90. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  91. package/fesm2022/siemens-element-ng-tooltip.mjs +10 -8
  92. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  94. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  95. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  96. package/fesm2022/siemens-element-ng-wizard.mjs +88 -53
  97. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  98. package/package.json +4 -4
  99. package/schematics/migrations/data/element-migration-data.js +20 -0
  100. package/schematics/migrations/data/index.js +1 -16
  101. package/schematics/migrations/ngx-translate/index.js +1 -137
  102. package/schematics/migrations/ngx-translate/missing-translate-migration.js +141 -0
  103. package/schematics/ng-add/index.js +1 -12
  104. package/schematics/ng-add/ng-add-rule.js +16 -0
  105. package/schematics/ng-update/index.js +1 -17
  106. package/schematics/ng-update/migrate-to-v49.js +21 -0
  107. package/template-i18n.json +3 -1
  108. package/types/siemens-element-ng-card.d.ts +26 -1
  109. package/types/siemens-element-ng-common.d.ts +3 -3
  110. package/types/siemens-element-ng-dashboard.d.ts +4 -1
  111. package/types/siemens-element-ng-date-range-filter.d.ts +10 -1
  112. package/types/siemens-element-ng-file-uploader.d.ts +4 -3
  113. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  114. package/types/siemens-element-ng-loading-spinner.d.ts +4 -2
  115. package/types/siemens-element-ng-navbar-vertical-next.d.ts +167 -183
  116. package/types/siemens-element-ng-navbar.d.ts +2 -2
  117. package/types/siemens-element-ng-popover.d.ts +9 -2
  118. package/types/siemens-element-ng-search-bar.d.ts +7 -1
  119. package/types/siemens-element-ng-side-panel.d.ts +2 -0
  120. package/types/siemens-element-ng-status-bar.d.ts +19 -10
  121. package/types/siemens-element-ng-tooltip.d.ts +9 -3
  122. package/types/siemens-element-ng-translate.d.ts +2 -0
  123. package/types/siemens-element-ng-wizard.d.ts +23 -5
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-header-dropdown.mjs","sources":["../../../../projects/element-ng/header-dropdown/si-header.model.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-trigger.directive.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown.component.html","../../../../projects/element-ng/header-dropdown/si-header-dropdown-item.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-item.component.html","../../../../projects/element-ng/header-dropdown/si-header-dropdown-items-factory.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-items-factory.component.html","../../../../projects/element-ng/header-dropdown/index.ts","../../../../projects/element-ng/header-dropdown/siemens-element-ng-header-dropdown.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\n\n/** @internal */\nexport interface HeaderWithDropdowns {\n /** Called whenever an item is triggered that is not opening another dropdown. */\n onDropdownItemTriggered?(): void;\n /** Whether the dropdown should be opened inline. */\n inlineDropdown?: Observable<boolean>;\n /** The position of the dropdown if opened in an overlay. */\n overlayPosition?: ConnectedPosition[];\n /** Called whenever a dropdown is opened **/\n dropdownOpened?(trigger: SiHeaderDropdownTriggerDirective): void;\n /** Called whenever a dropdown is close **/\n dropdownClosed?(trigger: SiHeaderDropdownTriggerDirective): void;\n}\n\n/** @internal */\nexport const SI_HEADER_WITH_DROPDOWNS = new InjectionToken<HeaderWithDropdowns>(\n 'si-header.with-dropdowns'\n);\n\n/**\n * Can be used to pass context-specific options to a header-dropdown\n * that should / or cannot be provided by a consuming application.\n * @internal\n */\nexport interface HeaderDropdownOptions {\n /**\n * If the inline navbar is already wrapped in a focus trap,\n * set this property to prevent the header-dropdown from creating a focus trap.\n */\n disableRootFocusTrapForInlineMode: boolean;\n}\n\n/** @internal */\nexport const SI_HEADER_DROPDOWN_OPTIONS = new InjectionToken<HeaderDropdownOptions>(\n 'si-header-dropdown.options'\n);\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { of, Subject } from 'rxjs';\nimport { filter, skip, take, takeUntil } from 'rxjs/operators';\n\nimport { SI_HEADER_WITH_DROPDOWNS } from './si-header.model';\n\n@Component({ template: '', host: { '[attr.aria-owns]': 'ariaOwns()' } })\nclass SiHeaderAnchorComponent {\n readonly ariaOwns = input<string>();\n}\n\n/**\n * Trigger to open dropdowns in a navbar.\n * A dropdown will always be attached to the view, even if not visible.\n *\n * If a dropdown is opened in desktop mode, it will be reattached to an overlay while being opened.\n */\n@Directive({\n selector: '[siHeaderDropdownTriggerFor]',\n host: {\n class: 'dropdown-toggle'\n },\n exportAs: 'siHeaderDropdownTrigger'\n})\nexport class SiHeaderDropdownTriggerDirective implements OnChanges, OnInit, OnDestroy {\n private static idCounter = 0;\n\n /** Template that be rendered inside the dropdown. */\n readonly dropdown = input.required<TemplateRef<unknown>>({ alias: 'siHeaderDropdownTriggerFor' });\n /** Data that should be passed as template context to the dropdown. */\n readonly dropdownData = input<unknown>();\n /** Emits whenever a dropdown is opened or closed. */\n readonly openChange = output<boolean>();\n\n private readonly dropdownClose = new Subject<void>();\n\n /** Child triggers will set themselves here if they are open. */\n private openSubmenu?: SiHeaderDropdownTriggerDirective;\n\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly parent = inject(SiHeaderDropdownTriggerDirective, {\n optional: true,\n skipSelf: true\n });\n /** @internal */\n readonly navbar = inject(SI_HEADER_WITH_DROPDOWNS, { optional: true });\n\n // we need to create a new injector, so that the parent can be injected properly\n private readonly injector = Injector.create({ parent: inject(Injector), providers: [] });\n private viewRef?: EmbeddedViewRef<unknown>;\n private portal?: TemplatePortal<unknown>;\n private overlayRef?: OverlayRef;\n\n /** @internal */\n readonly level: number = this.parent ? this.parent.level + 1 : 1;\n\n // used to prevent immediate re-creation of the overlay if this trigger was clicked while overlay is open\n private destroying = false;\n\n /** @internal */\n @HostBinding('id') readonly id =\n `si-navbar-dropdown-trigger-${SiHeaderDropdownTriggerDirective.idCounter++}`;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n @HostBinding('class.show') @HostBinding('attr.aria-expanded') protected _isOpen = false;\n\n /** @internal */\n @HostBinding('attr.aria-controls') readonly ariaControls =\n `si-navbar-dropdown-${SiHeaderDropdownTriggerDirective.idCounter}`;\n\n private headerAnchorComponentRef?: ComponentRef<SiHeaderAnchorComponent>;\n\n /** Whether the dropdown is open. */\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n /** @internal */\n get isOverlay(): boolean {\n return !!this.overlayRef;\n }\n\n ngOnChanges(): void {\n if (this.portal) {\n this.portal.templateRef = this.dropdown();\n this.portal.context = this.dropdownData();\n }\n }\n\n ngOnInit(): void {\n // Always attach the dropdown, so that it can be used with routerLinkActive\n this.attachDropdownInline();\n }\n\n ngOnDestroy(): void {\n this.close();\n this.dropdownClose.complete();\n }\n\n /** Opens the dropdown. */\n open(): void {\n if (this.destroying || this._isOpen) {\n return;\n }\n\n (this.navbar?.inlineDropdown ?? of(false)).pipe(take(1)).subscribe(inline => {\n this._isOpen = true;\n if (!inline) {\n this.attachDropdownOverlay();\n }\n this.navbar?.inlineDropdown\n ?.pipe(skip(1), takeUntil(this.dropdownClose))\n .subscribe(() => this.close());\n });\n\n if (this.parent) {\n this.parent.openSubmenu = this;\n }\n\n if (this.navbar?.dropdownOpened) {\n this.navbar?.dropdownOpened(this);\n }\n this.openChange.emit(true);\n }\n\n /** Closes the dropdown. */\n close(options?: { all?: boolean }): void {\n if (!this._isOpen) {\n return;\n }\n\n if (this.openSubmenu) {\n this.openSubmenu.close();\n }\n\n this.dropdownClose.next();\n this._isOpen = false;\n if (this.overlayRef) {\n this.destroying = true;\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.viewRef?.destroy();\n this.portal = undefined;\n this.overlayRef = undefined;\n this.headerAnchorComponentRef?.destroy();\n // do not use queueMicrotask, it executed to early\n setTimeout(() => (this.destroying = false));\n this.attachDropdownInline();\n } else {\n this.viewRef?.markForCheck();\n }\n\n if (this.parent) {\n this.parent.openSubmenu = undefined;\n }\n\n if (options?.all && this.parent) {\n this.parent.close(options);\n } else {\n if (this.navbar?.dropdownClosed) {\n this.navbar?.dropdownClosed(this);\n }\n this.openChange.emit(false);\n }\n }\n\n @HostListener('click')\n protected click(): void {\n if (this._isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private attachDropdownInline(): void {\n this.viewRef = this.viewContainerRef.createEmbeddedView(this.dropdown(), this.dropdownData(), {\n injector: this.injector\n });\n this.viewRef.markForCheck();\n }\n\n private attachDropdownOverlay(): void {\n this.viewRef?.destroy();\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(\n this.navbar?.overlayPosition ??\n (this.level > 1\n ? [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 2\n }\n ]\n : [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -4\n }\n ])\n )\n });\n this.portal = new TemplatePortal(\n this.dropdown(),\n this.viewContainerRef,\n this.dropdownData(),\n this.injector\n );\n this.viewRef = this.overlayRef.attach(this.portal);\n this.headerAnchorComponentRef = this.viewContainerRef.createComponent(SiHeaderAnchorComponent);\n this.headerAnchorComponentRef.setInput('ariaOwns', this.ariaControls);\n\n this.overlayRef\n .outsidePointerEvents()\n .pipe(\n filter(event => event.type === 'click'),\n filter(() => !this.openSubmenu),\n takeUntil(this.dropdownClose),\n take(1)\n )\n .subscribe(() => this.close());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule, CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n HostListener,\n inject,\n viewChild,\n DOCUMENT\n} from '@angular/core';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SI_HEADER_DROPDOWN_OPTIONS } from './si-header.model';\n\n/**\n * Wrapper component for {@link SiHeaderDropdownItemComponent}.\n * Must only be opened using an {@link SiHeaderDropdownTriggerDirective}.\n */\n@Component({\n selector: 'si-header-dropdown',\n imports: [A11yModule],\n templateUrl: './si-header-dropdown.component.html',\n styles: ':host.sub-menu {min-inline-size: 200px}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dropdown-menu position-static',\n role: 'group',\n '[id]': 'trigger.ariaControls',\n '[attr.aria-labelledby]': 'trigger.id'\n }\n})\nexport class SiHeaderDropdownComponent {\n /** @internal */\n protected trigger = inject(SiHeaderDropdownTriggerDirective);\n\n private readonly focusTrap = viewChild.required(CdkTrapFocus);\n private previousElement: Element | null = null;\n private readonly document = inject(DOCUMENT);\n private readonly options = inject(SI_HEADER_DROPDOWN_OPTIONS, { optional: true });\n\n constructor() {\n // The autoFocus feature of the focus trap is not enough, as this component is not newly created when opened in mobile (inline).\n // But we still need autofocus in desktop mode, as the close event is never executed (component is destroyed before).\n this.trigger.openChange.subscribe(change => {\n if (!this.trigger.isOverlay && this.trapFocus && change) {\n this.previousElement = this.document.activeElement;\n this.focusTrap().focusTrap.focusFirstTabbableElementWhenReady();\n } else {\n if (\n this.previousElement &&\n 'focus' in this.previousElement &&\n typeof this.previousElement.focus === 'function'\n ) {\n this.previousElement.focus();\n }\n this.previousElement = null;\n }\n });\n }\n\n /** @internal */\n @HostBinding('class.show')\n protected get show(): boolean {\n return this.trigger.isOpen;\n }\n\n /** @internal */\n @HostBinding('class.header-dropdown-overlay') protected get overlay(): boolean {\n return this.trigger.isOverlay;\n }\n\n /** @internal */\n @HostBinding('class.sub-menu') protected get submenu(): boolean {\n return this.trigger.level > 1;\n }\n\n /** @internal */\n protected get trapFocus(): boolean {\n return (\n this.trigger.isOverlay ||\n (!this.options?.disableRootFocusTrapForInlineMode && this.trigger.level === 1)\n );\n }\n\n /** @internal */\n @HostListener('keydown.escape')\n protected escape(): void {\n this.trigger?.close();\n }\n}\n","<div [cdkTrapFocus]=\"trapFocus\" [cdkTrapFocusAutoCapture]=\"this.trigger.isOverlay\">\n <ng-content />\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, HostListener, inject, input } from '@angular/core';\nimport { elementDown2, elementOk, elementRecordFilled } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SI_HEADER_WITH_DROPDOWNS } from './si-header.model';\n\n/**\n * Creates a dropdown-item. Must be used within an {@link SiHeaderDropdownComponent}.\n */\n@Component({\n selector: 'si-header-dropdown-item, a[si-header-dropdown-item], button[si-header-dropdown-item]',\n imports: [SiIconComponent],\n templateUrl: './si-header-dropdown-item.component.html',\n styleUrl: './si-header-dropdown-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dropdown-item focus-inside'\n }\n})\nexport class SiHeaderDropdownItemComponent {\n protected readonly icons = addIcons({ elementDown2, elementOk, elementRecordFilled });\n\n /** Optional icon that will be rendered before the label. */\n readonly icon = input<string>();\n /** Badge that is rendered after the label. */\n readonly badge = input<string | number>();\n /** Badge (always red) that is attached to the icon. */\n readonly iconBadge = input<string | number>();\n /** Color of the badge (not iconBadge). */\n readonly badgeColor = input<string>();\n /** Whether the icon is checked with a radio or check mark. */\n readonly checked = input<'radio' | 'check' | ''>();\n\n protected readonly ownTrigger = inject(SiHeaderDropdownTriggerDirective, {\n self: true,\n optional: true\n });\n protected readonly parentTrigger = inject(SiHeaderDropdownTriggerDirective, { skipSelf: true });\n protected readonly navbar = inject(SI_HEADER_WITH_DROPDOWNS, { optional: true });\n\n @HostListener('click')\n protected click(): void {\n if (!this.ownTrigger) {\n this.parentTrigger.close({ all: true });\n if (this.navbar?.onDropdownItemTriggered) {\n this.navbar?.onDropdownItemTriggered();\n }\n }\n }\n}\n","@if (icon()) {\n <si-icon class=\"icon\" [icon]=\"icon()!\" />\n}\n@if (iconBadge()) {\n <div class=\"badge-text\">{{ iconBadge() }}</div>\n}\n<span class=\"item-title text-truncate\">\n <ng-content />\n</span>\n<div class=\"item-end ps-2 d-flex me-n3 ms-auto gap-1\">\n @if (badge()) {\n <span class=\"mx-0 me-1 ms-2 badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">{{\n badge()\n }}</span>\n }\n @if (checked() === 'check') {\n <si-icon class=\"icon\" [icon]=\"icons.elementOk\" />\n }\n @if (checked() === 'radio') {\n <si-icon class=\"icon-sm me-2\" [icon]=\"icons.elementRecordFilled\" />\n }\n @if (ownTrigger) {\n <si-icon class=\"dropdown-caret m-0 ps-0\" [icon]=\"icons.elementDown2\" />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, input, output } from '@angular/core';\nimport { MenuItem } from '@siemens/element-ng/common';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiHeaderDropdownItemComponent } from './si-header-dropdown-item.component';\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SiHeaderDropdownComponent } from './si-header-dropdown.component';\n\n/**\n * A factory to render multiple {@link MenuItem}.\n * Requires a wrapping {@link SiHeaderDropdownComponent}.\n *\n * @internal\n */\n@Component({\n selector: 'si-header-dropdown-items-factory',\n imports: [\n SiHeaderDropdownComponent,\n SiHeaderDropdownItemComponent,\n SiTranslatePipe,\n SiLinkDirective,\n SiHeaderDropdownTriggerDirective\n ],\n templateUrl: './si-header-dropdown-items-factory.component.html'\n})\nexport class SiHeaderDropdownItemsFactoryComponent {\n readonly items = input.required<MenuItem[]>();\n readonly activeChange = output<boolean>();\n}\n","@for (item of items(); track item) {\n @if (item.isHeading) {\n <div class=\"dropdown-item dropdown-header dropdown-item-static\">\n {{ item.title | translate }}\n </div>\n } @else {\n @if (item.title !== '-') {\n @if (item.items) {\n <button\n type=\"button\"\n si-header-dropdown-item\n [icon]=\"item.icon\"\n [badge]=\"item.badgeStyle !== 'dot' ? item.badge : undefined\"\n [badgeColor]=\"item.badgeColor\"\n [iconBadge]=\"item.badgeStyle === 'dot' ? item.badge : undefined\"\n [siHeaderDropdownTriggerFor]=\"dropdown\"\n >\n {{ item.title | translate }}\n </button>\n <ng-template #dropdown>\n <si-header-dropdown>\n <si-header-dropdown-items-factory [items]=\"item.items\" />\n </si-header-dropdown>\n </ng-template>\n } @else {\n <a\n si-header-dropdown-item\n activeClass=\"active\"\n [siLink]=\"item\"\n [icon]=\"item.icon\"\n [badge]=\"item.badgeStyle !== 'dot' ? item.badge : undefined\"\n [badgeColor]=\"item.badgeColor\"\n [iconBadge]=\"item.badgeStyle === 'dot' ? item.badge : undefined\"\n [checked]=\"item.selectionState\"\n (activeChange)=\"activeChange.emit($event)\"\n >\n {{ item.title | translate }}\n </a>\n }\n } @else {\n <div class=\"dropdown-divider\"></div>\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-header-dropdown.component';\nexport * from './si-header-dropdown-trigger.directive';\nexport * from './si-header-dropdown-item.component';\nexport * from './si-header-dropdown-items-factory.component';\nexport * from './si-header.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-header-dropdown.mjs","sources":["../../../../projects/element-ng/header-dropdown/si-header.model.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-trigger.directive.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown.component.html","../../../../projects/element-ng/header-dropdown/si-header-dropdown-item.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-item.component.html","../../../../projects/element-ng/header-dropdown/si-header-dropdown-items-factory.component.ts","../../../../projects/element-ng/header-dropdown/si-header-dropdown-items-factory.component.html","../../../../projects/element-ng/header-dropdown/index.ts","../../../../projects/element-ng/header-dropdown/siemens-element-ng-header-dropdown.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\n\n/** @internal */\nexport interface HeaderWithDropdowns {\n /** Called whenever an item is triggered that is not opening another dropdown. */\n onDropdownItemTriggered?(): void;\n /** Whether the dropdown should be opened inline. */\n inlineDropdown?: Observable<boolean>;\n /** The position of the dropdown if opened in an overlay. */\n overlayPosition?: ConnectedPosition[];\n /** Called whenever a dropdown is opened **/\n dropdownOpened?(trigger: SiHeaderDropdownTriggerDirective): void;\n /** Called whenever a dropdown is close **/\n dropdownClosed?(trigger: SiHeaderDropdownTriggerDirective): void;\n}\n\n/** @internal */\nexport const SI_HEADER_WITH_DROPDOWNS = new InjectionToken<HeaderWithDropdowns>(\n 'si-header.with-dropdowns'\n);\n\n/**\n * Can be used to pass context-specific options to a header-dropdown\n * that should / or cannot be provided by a consuming application.\n * @internal\n */\nexport interface HeaderDropdownOptions {\n /**\n * If the inline navbar is already wrapped in a focus trap,\n * set this property to prevent the header-dropdown from creating a focus trap.\n */\n disableRootFocusTrapForInlineMode: boolean;\n}\n\n/** @internal */\nexport const SI_HEADER_DROPDOWN_OPTIONS = new InjectionToken<HeaderDropdownOptions>(\n 'si-header-dropdown.options'\n);\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { of, Subject } from 'rxjs';\nimport { filter, skip, take, takeUntil } from 'rxjs/operators';\n\nimport { SI_HEADER_WITH_DROPDOWNS } from './si-header.model';\n\n@Component({ template: '', host: { '[attr.aria-owns]': 'ariaOwns()' } })\nclass SiHeaderAnchorComponent {\n readonly ariaOwns = input<string>();\n}\n\n/**\n * Trigger to open dropdowns in a navbar.\n * A dropdown will always be attached to the view, even if not visible.\n *\n * If a dropdown is opened in desktop mode, it will be reattached to an overlay while being opened.\n */\n@Directive({\n selector: '[siHeaderDropdownTriggerFor]',\n host: {\n class: 'dropdown-toggle'\n },\n exportAs: 'siHeaderDropdownTrigger'\n})\nexport class SiHeaderDropdownTriggerDirective implements OnChanges, OnInit, OnDestroy {\n private static idCounter = 0;\n\n /** Template that be rendered inside the dropdown. */\n readonly dropdown = input.required<TemplateRef<unknown>>({ alias: 'siHeaderDropdownTriggerFor' });\n /** Data that should be passed as template context to the dropdown. */\n readonly dropdownData = input<unknown>();\n /** Emits whenever a dropdown is opened or closed. */\n readonly openChange = output<boolean>();\n\n private readonly dropdownClose = new Subject<void>();\n\n /** Child triggers will set themselves here if they are open. */\n private openSubmenu?: SiHeaderDropdownTriggerDirective;\n\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly parent = inject(SiHeaderDropdownTriggerDirective, {\n optional: true,\n skipSelf: true\n });\n /** @internal */\n readonly navbar = inject(SI_HEADER_WITH_DROPDOWNS, { optional: true });\n\n // we need to create a new injector, so that the parent can be injected properly\n private readonly injector = Injector.create({ parent: inject(Injector), providers: [] });\n private viewRef?: EmbeddedViewRef<unknown>;\n private portal?: TemplatePortal<unknown>;\n private overlayRef?: OverlayRef;\n\n /** @internal */\n readonly level: number = this.parent ? this.parent.level + 1 : 1;\n\n // used to prevent immediate re-creation of the overlay if this trigger was clicked while overlay is open\n private destroying = false;\n\n /** @internal */\n @HostBinding('id') readonly id =\n `si-navbar-dropdown-trigger-${SiHeaderDropdownTriggerDirective.idCounter++}`;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n @HostBinding('class.show') @HostBinding('attr.aria-expanded') protected _isOpen = false;\n\n /** @internal */\n @HostBinding('attr.aria-controls') readonly ariaControls =\n `si-navbar-dropdown-${SiHeaderDropdownTriggerDirective.idCounter}`;\n\n private headerAnchorComponentRef?: ComponentRef<SiHeaderAnchorComponent>;\n\n /** Whether the dropdown is open. */\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n /** @internal */\n get isOverlay(): boolean {\n return !!this.overlayRef;\n }\n\n ngOnChanges(): void {\n if (this.portal) {\n this.portal.templateRef = this.dropdown();\n this.portal.context = this.dropdownData();\n }\n }\n\n ngOnInit(): void {\n // Always attach the dropdown, so that it can be used with routerLinkActive\n this.attachDropdownInline();\n }\n\n ngOnDestroy(): void {\n this.close();\n this.dropdownClose.complete();\n }\n\n /** Opens the dropdown. */\n open(): void {\n if (this.destroying || this._isOpen) {\n return;\n }\n\n (this.navbar?.inlineDropdown ?? of(false)).pipe(take(1)).subscribe(inline => {\n this._isOpen = true;\n if (!inline) {\n this.attachDropdownOverlay();\n }\n this.navbar?.inlineDropdown\n ?.pipe(skip(1), takeUntil(this.dropdownClose))\n .subscribe(() => this.close());\n });\n\n if (this.parent) {\n this.parent.openSubmenu = this;\n }\n\n if (this.navbar?.dropdownOpened) {\n this.navbar?.dropdownOpened(this);\n }\n this.openChange.emit(true);\n }\n\n /** Closes the dropdown. */\n close(options?: { all?: boolean }): void {\n if (!this._isOpen) {\n return;\n }\n\n if (this.openSubmenu) {\n this.openSubmenu.close();\n }\n\n this.dropdownClose.next();\n this._isOpen = false;\n if (this.overlayRef) {\n this.destroying = true;\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.viewRef?.destroy();\n this.portal = undefined;\n this.overlayRef = undefined;\n this.headerAnchorComponentRef?.destroy();\n // do not use queueMicrotask, it executed to early\n setTimeout(() => (this.destroying = false));\n this.attachDropdownInline();\n } else {\n this.viewRef?.markForCheck();\n }\n\n if (this.parent) {\n this.parent.openSubmenu = undefined;\n }\n\n if (this.navbar?.dropdownClosed) {\n this.navbar?.dropdownClosed(this);\n }\n\n if (options?.all && this.parent) {\n this.parent.close(options);\n } else {\n this.openChange.emit(false);\n }\n }\n\n @HostListener('click')\n protected click(): void {\n if (this._isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private attachDropdownInline(): void {\n this.viewRef = this.viewContainerRef.createEmbeddedView(this.dropdown(), this.dropdownData(), {\n injector: this.injector\n });\n this.viewRef.markForCheck();\n }\n\n private attachDropdownOverlay(): void {\n this.viewRef?.destroy();\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(\n this.navbar?.overlayPosition ??\n (this.level > 1\n ? [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 2\n }\n ]\n : [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -4\n }\n ])\n )\n });\n this.portal = new TemplatePortal(\n this.dropdown(),\n this.viewContainerRef,\n this.dropdownData(),\n this.injector\n );\n this.viewRef = this.overlayRef.attach(this.portal);\n this.headerAnchorComponentRef = this.viewContainerRef.createComponent(SiHeaderAnchorComponent);\n this.headerAnchorComponentRef.setInput('ariaOwns', this.ariaControls);\n\n this.overlayRef\n .outsidePointerEvents()\n .pipe(\n filter(event => event.type === 'click'),\n filter(() => !this.openSubmenu),\n takeUntil(this.dropdownClose),\n take(1)\n )\n .subscribe(() => this.close());\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule, CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n HostListener,\n inject,\n viewChild,\n DOCUMENT\n} from '@angular/core';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SI_HEADER_DROPDOWN_OPTIONS } from './si-header.model';\n\n/**\n * Wrapper component for {@link SiHeaderDropdownItemComponent}.\n * Must only be opened using an {@link SiHeaderDropdownTriggerDirective}.\n */\n@Component({\n selector: 'si-header-dropdown',\n imports: [A11yModule],\n templateUrl: './si-header-dropdown.component.html',\n styles: ':host.sub-menu {min-inline-size: 200px}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dropdown-menu position-static',\n role: 'group',\n '[id]': 'trigger.ariaControls',\n '[attr.aria-labelledby]': 'trigger.id'\n }\n})\nexport class SiHeaderDropdownComponent {\n /** @internal */\n protected trigger = inject(SiHeaderDropdownTriggerDirective);\n\n private readonly focusTrap = viewChild.required(CdkTrapFocus);\n private previousElement: Element | null = null;\n private readonly document = inject(DOCUMENT);\n private readonly options = inject(SI_HEADER_DROPDOWN_OPTIONS, { optional: true });\n\n constructor() {\n // The autoFocus feature of the focus trap is not enough, as this component is not newly created when opened in mobile (inline).\n // But we still need autofocus in desktop mode, as the close event is never executed (component is destroyed before).\n this.trigger.openChange.subscribe(change => {\n if (!this.trigger.isOverlay && this.trapFocus && change) {\n this.previousElement = this.document.activeElement;\n this.focusTrap().focusTrap.focusFirstTabbableElementWhenReady();\n } else {\n if (\n this.previousElement &&\n 'focus' in this.previousElement &&\n typeof this.previousElement.focus === 'function'\n ) {\n this.previousElement.focus();\n }\n this.previousElement = null;\n }\n });\n }\n\n /** @internal */\n @HostBinding('class.show')\n protected get show(): boolean {\n return this.trigger.isOpen;\n }\n\n /** @internal */\n @HostBinding('class.header-dropdown-overlay') protected get overlay(): boolean {\n return this.trigger.isOverlay;\n }\n\n /** @internal */\n @HostBinding('class.sub-menu') protected get submenu(): boolean {\n return this.trigger.level > 1;\n }\n\n /** @internal */\n protected get trapFocus(): boolean {\n return (\n this.trigger.isOverlay ||\n (!this.options?.disableRootFocusTrapForInlineMode && this.trigger.level === 1)\n );\n }\n\n /** @internal */\n @HostListener('keydown.escape')\n protected escape(): void {\n this.trigger?.close();\n }\n}\n","<div [cdkTrapFocus]=\"trapFocus\" [cdkTrapFocusAutoCapture]=\"this.trigger.isOverlay\">\n <ng-content />\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, HostListener, inject, input } from '@angular/core';\nimport { elementDown2, elementOk, elementRecordFilled } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\n\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SI_HEADER_WITH_DROPDOWNS } from './si-header.model';\n\n/**\n * Creates a dropdown-item. Must be used within an {@link SiHeaderDropdownComponent}.\n */\n@Component({\n selector: 'si-header-dropdown-item, a[si-header-dropdown-item], button[si-header-dropdown-item]',\n imports: [SiIconComponent],\n templateUrl: './si-header-dropdown-item.component.html',\n styleUrl: './si-header-dropdown-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dropdown-item focus-inside'\n }\n})\nexport class SiHeaderDropdownItemComponent {\n protected readonly icons = addIcons({ elementDown2, elementOk, elementRecordFilled });\n\n /** Optional icon that will be rendered before the label. */\n readonly icon = input<string>();\n /** Badge that is rendered after the label. */\n readonly badge = input<string | number>();\n /** Badge (always red) that is attached to the icon. */\n readonly iconBadge = input<string | number>();\n /** Color of the badge (not iconBadge). */\n readonly badgeColor = input<string>();\n /** Whether the icon is checked with a radio or check mark. */\n readonly checked = input<'radio' | 'check' | ''>();\n\n protected readonly ownTrigger = inject(SiHeaderDropdownTriggerDirective, {\n self: true,\n optional: true\n });\n protected readonly parentTrigger = inject(SiHeaderDropdownTriggerDirective, { skipSelf: true });\n protected readonly navbar = inject(SI_HEADER_WITH_DROPDOWNS, { optional: true });\n\n @HostListener('click')\n protected click(): void {\n if (!this.ownTrigger) {\n this.parentTrigger.close({ all: true });\n if (this.navbar?.onDropdownItemTriggered) {\n this.navbar?.onDropdownItemTriggered();\n }\n }\n }\n}\n","@if (icon()) {\n <si-icon class=\"icon\" [icon]=\"icon()!\" />\n}\n@if (iconBadge()) {\n <div class=\"badge-text\">{{ iconBadge() }}</div>\n}\n<span class=\"item-title text-truncate\">\n <ng-content />\n</span>\n<div class=\"item-end ps-2 d-flex me-n3 ms-auto gap-1\">\n @if (badge()) {\n <span class=\"mx-0 me-1 ms-2 badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">{{\n badge()\n }}</span>\n }\n @if (checked() === 'check') {\n <si-icon class=\"icon\" [icon]=\"icons.elementOk\" />\n }\n @if (checked() === 'radio') {\n <si-icon class=\"icon-sm me-2\" [icon]=\"icons.elementRecordFilled\" />\n }\n @if (ownTrigger) {\n <si-icon class=\"dropdown-caret m-0 ps-0\" [icon]=\"icons.elementDown2\" />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, input, output } from '@angular/core';\nimport { MenuItem } from '@siemens/element-ng/common';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiHeaderDropdownItemComponent } from './si-header-dropdown-item.component';\nimport { SiHeaderDropdownTriggerDirective } from './si-header-dropdown-trigger.directive';\nimport { SiHeaderDropdownComponent } from './si-header-dropdown.component';\n\n/**\n * A factory to render multiple {@link MenuItem}.\n * Requires a wrapping {@link SiHeaderDropdownComponent}.\n *\n * @internal\n */\n@Component({\n selector: 'si-header-dropdown-items-factory',\n imports: [\n SiHeaderDropdownComponent,\n SiHeaderDropdownItemComponent,\n SiTranslatePipe,\n SiLinkDirective,\n SiHeaderDropdownTriggerDirective\n ],\n templateUrl: './si-header-dropdown-items-factory.component.html'\n})\nexport class SiHeaderDropdownItemsFactoryComponent {\n readonly items = input.required<MenuItem[]>();\n readonly activeChange = output<boolean>();\n}\n","@for (item of items(); track item) {\n @if (item.isHeading) {\n <div class=\"dropdown-item dropdown-header dropdown-item-static\">\n {{ item.title | translate }}\n </div>\n } @else {\n @if (item.title !== '-') {\n @if (item.items) {\n <button\n type=\"button\"\n si-header-dropdown-item\n [icon]=\"item.icon\"\n [badge]=\"item.badgeStyle !== 'dot' ? item.badge : undefined\"\n [badgeColor]=\"item.badgeColor\"\n [iconBadge]=\"item.badgeStyle === 'dot' ? item.badge : undefined\"\n [siHeaderDropdownTriggerFor]=\"dropdown\"\n >\n {{ item.title | translate }}\n </button>\n <ng-template #dropdown>\n <si-header-dropdown>\n <si-header-dropdown-items-factory [items]=\"item.items\" />\n </si-header-dropdown>\n </ng-template>\n } @else {\n <a\n si-header-dropdown-item\n activeClass=\"active\"\n [siLink]=\"item\"\n [icon]=\"item.icon\"\n [badge]=\"item.badgeStyle !== 'dot' ? item.badge : undefined\"\n [badgeColor]=\"item.badgeColor\"\n [iconBadge]=\"item.badgeStyle === 'dot' ? item.badge : undefined\"\n [checked]=\"item.selectionState\"\n (activeChange)=\"activeChange.emit($event)\"\n >\n {{ item.title | translate }}\n </a>\n }\n } @else {\n <div class=\"dropdown-divider\"></div>\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-header-dropdown.component';\nexport * from './si-header-dropdown-trigger.directive';\nexport * from './si-header-dropdown-item.component';\nexport * from './si-header-dropdown-items-factory.component';\nexport * from './si-header.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -120,21 +120,15 @@ class SiLoadingSpinnerDirective {
120
120
  initialWaitTime = computed(() => (this.initialDelay() ? 500 : 0), ...(ngDevMode ? [{ debugName: "initialWaitTime" }] : []));
121
121
  minSpinTime = 500;
122
122
  portalOutlet;
123
- compPortal = new ComponentPortal(SiLoadingSpinnerComponent, this.viewRef, Injector.create({
124
- providers: [
125
- { provide: LOADING_SPINNER_BLOCKING, useFactory: () => this.blocking() },
126
- {
127
- provide: LOADING_SPINNER_OVERLAY,
128
- useValue: true
129
- }
130
- ]
131
- }));
123
+ compPortal = new ComponentPortal(SiLoadingSpinnerComponent, this.viewRef);
124
+ compPortalRef = null;
132
125
  // this makes sure the spinner only displays with a delay of 500ms and stays for 500ms so
133
126
  // that it doesn't flicker
134
127
  spinner$ = this.on$.pipe(switchMap(() => merge(timer(this.initialWaitTime()).pipe(map(() => true), takeUntil(this.off$)), combineLatest([this.off$, timer(this.initialWaitTime() + this.minSpinTime)]).pipe(map(() => false)))));
135
128
  createPortal() {
129
+ this.compPortal.injector = this.createPortalInjector();
136
130
  this.portalOutlet ??= new DomPortalOutlet(this.el.nativeElement);
137
- this.compPortal.attach(this.portalOutlet);
131
+ this.compPortalRef = this.compPortal.attach(this.portalOutlet);
138
132
  }
139
133
  ngOnInit() {
140
134
  this.sub = this.spinner$.subscribe(val => {
@@ -149,11 +143,14 @@ class SiLoadingSpinnerDirective {
149
143
  this.cdRef.markForCheck();
150
144
  });
151
145
  }
152
- ngOnChanges() {
146
+ ngOnChanges(changes) {
153
147
  const newState = !!this.siLoading();
154
148
  if (newState !== this.progressSubject.value) {
155
149
  this.progressSubject.next(newState);
156
150
  }
151
+ if (changes.blocking && this.compPortalRef) {
152
+ this.compPortalRef.setInput('isBlockingSpinner', this.blocking());
153
+ }
157
154
  }
158
155
  ngOnDestroy() {
159
156
  this.sub?.unsubscribe();
@@ -162,6 +159,17 @@ class SiLoadingSpinnerDirective {
162
159
  }
163
160
  this.portalOutlet?.dispose();
164
161
  }
162
+ createPortalInjector() {
163
+ return Injector.create({
164
+ providers: [
165
+ { provide: LOADING_SPINNER_BLOCKING, useFactory: () => this.blocking() },
166
+ {
167
+ provide: LOADING_SPINNER_OVERLAY,
168
+ useValue: true
169
+ }
170
+ ]
171
+ });
172
+ }
165
173
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiLoadingSpinnerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
166
174
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: SiLoadingSpinnerDirective, isStandalone: true, selector: "[siLoading]", inputs: { siLoading: { classPropertyName: "siLoading", publicName: "siLoading", isSignal: true, isRequired: true, transformFunction: null }, blocking: { classPropertyName: "blocking", publicName: "blocking", isSignal: true, isRequired: false, transformFunction: null }, initialDelay: { classPropertyName: "initialDelay", publicName: "initialDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "position-relative" }, usesOnChanges: true, ngImport: i0 });
167
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-loading-spinner.mjs","sources":["../../../../projects/element-ng/loading-spinner/si-loading-spinner.component.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.component.html","../../../../projects/element-ng/loading-spinner/si-loading-button.component.ts","../../../../projects/element-ng/loading-spinner/si-loading-button.component.html","../../../../projects/element-ng/loading-spinner/si-loading-spinner.directive.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.service.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.module.ts","../../../../projects/element-ng/loading-spinner/index.ts","../../../../projects/element-ng/loading-spinner/siemens-element-ng-loading-spinner.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject, InjectionToken, input } from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nexport const LOADING_SPINNER_BLOCKING = new InjectionToken<boolean>('isBlockingSpinner');\nexport const LOADING_SPINNER_OVERLAY = new InjectionToken<boolean>('isSpinnerOverlay');\n\n@Component({\n selector: 'si-loading-spinner',\n imports: [SiTranslatePipe],\n templateUrl: './si-loading-spinner.component.html',\n styleUrl: './si-loading-spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'animate.leave': 'spinner-leave'\n }\n})\nexport class SiLoadingSpinnerComponent {\n /**\n * @defaultValue\n * ```\n * inject(LOADING_SPINNER_BLOCKING, { optional: true })\n * ```\n */\n readonly isBlockingSpinner = input(inject(LOADING_SPINNER_BLOCKING, { optional: true }));\n /**\n * @defaultValue\n * ```\n * inject(LOADING_SPINNER_OVERLAY, { optional: true })\n * ```\n */\n readonly isSpinnerOverlay = input(inject(LOADING_SPINNER_OVERLAY, { optional: true }));\n /**\n * Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`)\n * ```\n */\n readonly ariaLabel = input(t(() => $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`));\n}\n","<div\n class=\"loading\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n [class.blocking-spinner]=\"isBlockingSpinner()\"\n [class.spinner-overlay]=\"isSpinnerOverlay()\"\n>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <title>{{ ariaLabel() | translate }}</title>\n <g>\n <path d=\"M256,156a16,16,0,0,1-16-16V80a16,16,0,0,1,32,0v60A16,16,0,0,1,256,156Z\" />\n <path\n d=\"M314.78,175.1a16,16,0,0,1-3.54-22.35l35.27-48.54A16,16,0,1,1,372.39,123l-35.26,48.54A16,16,0,0,1,314.78,175.1Z\"\n />\n <path\n d=\"M351.11,225.1a16,16,0,0,1,10.27-20.16l57.06-18.54a16,16,0,1,1,9.89,30.43l-57.06,18.54A16,16,0,0,1,351.11,225.1Z\"\n />\n <path\n d=\"M351.11,286.9a16,16,0,0,1,20.16-10.27l57.06,18.54a16,16,0,1,1-9.89,30.43l-57.06-18.54A16,16,0,0,1,351.11,286.9Z\"\n />\n <path\n d=\"M314.78,336.9a16,16,0,0,1,22.35,3.54L372.39,389a16,16,0,1,1-25.88,18.81l-35.27-48.54A16,16,0,0,1,314.78,336.9Z\"\n />\n <path d=\"M256,356a16,16,0,0,1,16,16v60a16,16,0,0,1-32,0V372A16,16,0,0,1,256,356Z\" />\n <path\n d=\"M197.22,336.9a16,16,0,0,1,3.54,22.35l-35.27,48.54A16,16,0,1,1,139.61,389l35.26-48.54A16,16,0,0,1,197.22,336.9Z\"\n />\n <path\n d=\"M160.89,286.9a16,16,0,0,1-10.27,20.16L93.56,325.6a16,16,0,0,1-9.89-30.43l57.06-18.54A16,16,0,0,1,160.89,286.9Z\"\n />\n <path\n d=\"M160.89,225.1a16,16,0,0,1-20.16,10.27L83.67,216.83a16,16,0,1,1,9.89-30.43l57.06,18.54A16,16,0,0,1,160.89,225.1Z\"\n />\n <path\n d=\"M197.22,175.1a16,16,0,0,1-22.35-3.54L139.61,123a16,16,0,1,1,25.88-18.81l35.27,48.54A16,16,0,0,1,197.22,175.1Z\"\n />\n </g>\n </svg>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\n\n@Component({\n selector: 'si-loading-button',\n imports: [SiLoadingSpinnerComponent, SiTranslatePipe],\n templateUrl: './si-loading-button.component.html',\n styleUrl: './si-loading-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.pe-none]': 'disabled()'\n }\n})\nexport class SiLoadingButtonComponent {\n /**\n * Whether the button is disabled.\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Whether the loading state should be displayed.\n * @defaultValue false\n */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Type of the button.\n * @defaultValue 'button'\n **/\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n /** aria-label for the button */\n readonly ariaLabel = input<TranslatableString>();\n /** aria-labelledby for the button */\n readonly ariaLabelledBy = input<string>();\n /**\n * CSS class for the button.\n * @defaultValue ''\n */\n readonly buttonClass = input('');\n\n protected handleClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.stopPropagation();\n }\n }\n}\n","<button\n [type]=\"type()\"\n [class]=\"buttonClass()\"\n [class.loading]=\"loading()\"\n [class.disabled]=\"loading()\"\n [disabled]=\"disabled()\"\n [attr.aria-disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.tabindex]=\"loading() ? '-1' : null\"\n (click)=\"handleClick($event)\"\n>\n <div class=\"button-wrapper\">\n <ng-content />\n </div>\n</button>\n@if (loading()) {\n <div class=\"spinner-wrapper\" (click)=\"$event.stopPropagation()\">\n <si-loading-spinner />\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n computed,\n Directive,\n ElementRef,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, merge, Subscription, timer } from 'rxjs';\nimport { filter, map, switchMap, takeUntil } from 'rxjs/operators';\n\nimport {\n LOADING_SPINNER_BLOCKING,\n LOADING_SPINNER_OVERLAY,\n SiLoadingSpinnerComponent\n} from './si-loading-spinner.component';\n@Directive({\n selector: '[siLoading]',\n host: {\n class: 'position-relative'\n }\n})\nexport class SiLoadingSpinnerDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * Displays the loading spinner when the value is either true or non-zero.\n */\n readonly siLoading = input.required<boolean | number>();\n\n /**\n * Displays semi-transparent backdrop for the spinner, default is false.\n *\n * @defaultValue false\n */\n readonly blocking = input(false, { transform: booleanAttribute });\n\n /**\n * Specifies if the spinner should be displayed after a delay, default is true.\n *\n * @defaultValue true\n */\n readonly initialDelay = input(true, { transform: booleanAttribute });\n\n private el = inject(ElementRef);\n private readonly viewRef = inject(ViewContainerRef);\n private cdRef = inject(ChangeDetectorRef);\n\n private sub?: Subscription;\n private progressSubject = new BehaviorSubject(false);\n private off$ = this.progressSubject.pipe(filter(val => !val));\n private on$ = this.progressSubject.pipe(filter(val => val));\n private readonly initialWaitTime = computed(() => (this.initialDelay() ? 500 : 0));\n private minSpinTime = 500;\n private portalOutlet?: DomPortalOutlet;\n private readonly compPortal = new ComponentPortal(\n SiLoadingSpinnerComponent,\n this.viewRef,\n Injector.create({\n providers: [\n { provide: LOADING_SPINNER_BLOCKING, useFactory: () => this.blocking() },\n {\n provide: LOADING_SPINNER_OVERLAY,\n useValue: true\n }\n ]\n })\n );\n\n // this makes sure the spinner only displays with a delay of 500ms and stays for 500ms so\n // that it doesn't flicker\n protected readonly spinner$ = this.on$.pipe(\n switchMap(() =>\n merge(\n timer(this.initialWaitTime()).pipe(\n map(() => true),\n takeUntil(this.off$)\n ),\n combineLatest([this.off$, timer(this.initialWaitTime() + this.minSpinTime)]).pipe(\n map(() => false)\n )\n )\n )\n );\n\n private createPortal(): void {\n this.portalOutlet ??= new DomPortalOutlet(this.el.nativeElement);\n this.compPortal.attach(this.portalOutlet);\n }\n\n ngOnInit(): void {\n this.sub = this.spinner$.subscribe(val => {\n if (val) {\n if (!this.compPortal.isAttached) {\n this.createPortal();\n }\n } else if (this.compPortal.isAttached) {\n this.compPortal.detach();\n }\n this.cdRef.markForCheck();\n });\n }\n\n ngOnChanges(): void {\n const newState = !!this.siLoading();\n if (newState !== this.progressSubject.value) {\n this.progressSubject.next(newState);\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n if (this.compPortal.isAttached) {\n this.compPortal.detach();\n }\n this.portalOutlet?.dispose();\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiLoadingService {\n /**\n * Counts the number of loads active, is `0` when all loading is finished (or hasn't started).\n */\n readonly counter: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n\n /**\n * Start the loading.\n */\n startLoad(): void {\n this.counter.next(this.counter.value + 1);\n }\n\n /**\n * Stop the loading.\n */\n stopLoad(): void {\n if (this.counter.value > 0) {\n this.counter.next(this.counter.value - 1);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\nimport { SiLoadingSpinnerDirective } from './si-loading-spinner.directive';\n\n@NgModule({\n imports: [SiLoadingSpinnerComponent, SiLoadingSpinnerDirective],\n exports: [SiLoadingSpinnerComponent, SiLoadingSpinnerDirective]\n})\nexport class SiLoadingSpinnerModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-loading-button.component';\nexport * from './si-loading-spinner.component';\nexport * from './si-loading-spinner.directive';\nexport * from './si-loading-spinner.service';\nexport * from './si-loading-spinner.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-loading-spinner.mjs","sources":["../../../../projects/element-ng/loading-spinner/si-loading-spinner.component.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.component.html","../../../../projects/element-ng/loading-spinner/si-loading-button.component.ts","../../../../projects/element-ng/loading-spinner/si-loading-button.component.html","../../../../projects/element-ng/loading-spinner/si-loading-spinner.directive.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.service.ts","../../../../projects/element-ng/loading-spinner/si-loading-spinner.module.ts","../../../../projects/element-ng/loading-spinner/index.ts","../../../../projects/element-ng/loading-spinner/siemens-element-ng-loading-spinner.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject, InjectionToken, input } from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nexport const LOADING_SPINNER_BLOCKING = new InjectionToken<boolean>('isBlockingSpinner');\nexport const LOADING_SPINNER_OVERLAY = new InjectionToken<boolean>('isSpinnerOverlay');\n\n@Component({\n selector: 'si-loading-spinner',\n imports: [SiTranslatePipe],\n templateUrl: './si-loading-spinner.component.html',\n styleUrl: './si-loading-spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'animate.leave': 'spinner-leave'\n }\n})\nexport class SiLoadingSpinnerComponent {\n /**\n * @defaultValue\n * ```\n * inject(LOADING_SPINNER_BLOCKING, { optional: true })\n * ```\n */\n readonly isBlockingSpinner = input(inject(LOADING_SPINNER_BLOCKING, { optional: true }));\n /**\n * @defaultValue\n * ```\n * inject(LOADING_SPINNER_OVERLAY, { optional: true })\n * ```\n */\n readonly isSpinnerOverlay = input(inject(LOADING_SPINNER_OVERLAY, { optional: true }));\n /**\n * Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`)\n * ```\n */\n readonly ariaLabel = input(t(() => $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`));\n}\n","<div\n class=\"loading\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n [class.blocking-spinner]=\"isBlockingSpinner()\"\n [class.spinner-overlay]=\"isSpinnerOverlay()\"\n>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <title>{{ ariaLabel() | translate }}</title>\n <g>\n <path d=\"M256,156a16,16,0,0,1-16-16V80a16,16,0,0,1,32,0v60A16,16,0,0,1,256,156Z\" />\n <path\n d=\"M314.78,175.1a16,16,0,0,1-3.54-22.35l35.27-48.54A16,16,0,1,1,372.39,123l-35.26,48.54A16,16,0,0,1,314.78,175.1Z\"\n />\n <path\n d=\"M351.11,225.1a16,16,0,0,1,10.27-20.16l57.06-18.54a16,16,0,1,1,9.89,30.43l-57.06,18.54A16,16,0,0,1,351.11,225.1Z\"\n />\n <path\n d=\"M351.11,286.9a16,16,0,0,1,20.16-10.27l57.06,18.54a16,16,0,1,1-9.89,30.43l-57.06-18.54A16,16,0,0,1,351.11,286.9Z\"\n />\n <path\n d=\"M314.78,336.9a16,16,0,0,1,22.35,3.54L372.39,389a16,16,0,1,1-25.88,18.81l-35.27-48.54A16,16,0,0,1,314.78,336.9Z\"\n />\n <path d=\"M256,356a16,16,0,0,1,16,16v60a16,16,0,0,1-32,0V372A16,16,0,0,1,256,356Z\" />\n <path\n d=\"M197.22,336.9a16,16,0,0,1,3.54,22.35l-35.27,48.54A16,16,0,1,1,139.61,389l35.26-48.54A16,16,0,0,1,197.22,336.9Z\"\n />\n <path\n d=\"M160.89,286.9a16,16,0,0,1-10.27,20.16L93.56,325.6a16,16,0,0,1-9.89-30.43l57.06-18.54A16,16,0,0,1,160.89,286.9Z\"\n />\n <path\n d=\"M160.89,225.1a16,16,0,0,1-20.16,10.27L83.67,216.83a16,16,0,1,1,9.89-30.43l57.06,18.54A16,16,0,0,1,160.89,225.1Z\"\n />\n <path\n d=\"M197.22,175.1a16,16,0,0,1-22.35-3.54L139.61,123a16,16,0,1,1,25.88-18.81l35.27,48.54A16,16,0,0,1,197.22,175.1Z\"\n />\n </g>\n </svg>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\n\n@Component({\n selector: 'si-loading-button',\n imports: [SiLoadingSpinnerComponent, SiTranslatePipe],\n templateUrl: './si-loading-button.component.html',\n styleUrl: './si-loading-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.pe-none]': 'disabled()'\n }\n})\nexport class SiLoadingButtonComponent {\n /**\n * Whether the button is disabled.\n * @defaultValue false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Whether the loading state should be displayed.\n * @defaultValue false\n */\n readonly loading = input(false, { transform: booleanAttribute });\n /**\n * Type of the button.\n * @defaultValue 'button'\n **/\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n /** aria-label for the button */\n readonly ariaLabel = input<TranslatableString>();\n /** aria-labelledby for the button */\n readonly ariaLabelledBy = input<string>();\n /**\n * CSS class for the button.\n * @defaultValue ''\n */\n readonly buttonClass = input('');\n\n protected handleClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.stopPropagation();\n }\n }\n}\n","<button\n [type]=\"type()\"\n [class]=\"buttonClass()\"\n [class.loading]=\"loading()\"\n [class.disabled]=\"loading()\"\n [disabled]=\"disabled()\"\n [attr.aria-disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.tabindex]=\"loading() ? '-1' : null\"\n (click)=\"handleClick($event)\"\n>\n <div class=\"button-wrapper\">\n <ng-content />\n </div>\n</button>\n@if (loading()) {\n <div class=\"spinner-wrapper\" (click)=\"$event.stopPropagation()\">\n <si-loading-spinner />\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n ComponentRef,\n computed,\n Directive,\n ElementRef,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, merge, Subscription, timer } from 'rxjs';\nimport { filter, map, switchMap, takeUntil } from 'rxjs/operators';\n\nimport {\n LOADING_SPINNER_BLOCKING,\n LOADING_SPINNER_OVERLAY,\n SiLoadingSpinnerComponent\n} from './si-loading-spinner.component';\n@Directive({\n selector: '[siLoading]',\n host: {\n class: 'position-relative'\n }\n})\nexport class SiLoadingSpinnerDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * Displays the loading spinner when the value is either true or non-zero.\n */\n readonly siLoading = input.required<boolean | number>();\n\n /**\n * Displays semi-transparent backdrop for the spinner, default is false.\n *\n * @defaultValue false\n */\n readonly blocking = input(false, { transform: booleanAttribute });\n\n /**\n * Specifies if the spinner should be displayed after a delay, default is true.\n *\n * @defaultValue true\n */\n readonly initialDelay = input(true, { transform: booleanAttribute });\n\n private el = inject(ElementRef);\n private readonly viewRef = inject(ViewContainerRef);\n private cdRef = inject(ChangeDetectorRef);\n\n private sub?: Subscription;\n private progressSubject = new BehaviorSubject(false);\n private off$ = this.progressSubject.pipe(filter(val => !val));\n private on$ = this.progressSubject.pipe(filter(val => val));\n private readonly initialWaitTime = computed(() => (this.initialDelay() ? 500 : 0));\n private minSpinTime = 500;\n private portalOutlet?: DomPortalOutlet;\n private readonly compPortal = new ComponentPortal(SiLoadingSpinnerComponent, this.viewRef);\n private compPortalRef: ComponentRef<SiLoadingSpinnerComponent> | null = null;\n\n // this makes sure the spinner only displays with a delay of 500ms and stays for 500ms so\n // that it doesn't flicker\n protected readonly spinner$ = this.on$.pipe(\n switchMap(() =>\n merge(\n timer(this.initialWaitTime()).pipe(\n map(() => true),\n takeUntil(this.off$)\n ),\n combineLatest([this.off$, timer(this.initialWaitTime() + this.minSpinTime)]).pipe(\n map(() => false)\n )\n )\n )\n );\n\n private createPortal(): void {\n this.compPortal.injector = this.createPortalInjector();\n this.portalOutlet ??= new DomPortalOutlet(this.el.nativeElement);\n this.compPortalRef = this.compPortal.attach(this.portalOutlet);\n }\n\n ngOnInit(): void {\n this.sub = this.spinner$.subscribe(val => {\n if (val) {\n if (!this.compPortal.isAttached) {\n this.createPortal();\n }\n } else if (this.compPortal.isAttached) {\n this.compPortal.detach();\n }\n this.cdRef.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n const newState = !!this.siLoading();\n if (newState !== this.progressSubject.value) {\n this.progressSubject.next(newState);\n }\n if (changes.blocking && this.compPortalRef) {\n this.compPortalRef.setInput('isBlockingSpinner', this.blocking());\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n if (this.compPortal.isAttached) {\n this.compPortal.detach();\n }\n this.portalOutlet?.dispose();\n }\n\n private createPortalInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: LOADING_SPINNER_BLOCKING, useFactory: () => this.blocking() },\n {\n provide: LOADING_SPINNER_OVERLAY,\n useValue: true\n }\n ]\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiLoadingService {\n /**\n * Counts the number of loads active, is `0` when all loading is finished (or hasn't started).\n */\n readonly counter: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n\n /**\n * Start the loading.\n */\n startLoad(): void {\n this.counter.next(this.counter.value + 1);\n }\n\n /**\n * Stop the loading.\n */\n stopLoad(): void {\n if (this.counter.value > 0) {\n this.counter.next(this.counter.value - 1);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\nimport { SiLoadingSpinnerDirective } from './si-loading-spinner.directive';\n\n@NgModule({\n imports: [SiLoadingSpinnerComponent, SiLoadingSpinnerDirective],\n exports: [SiLoadingSpinnerComponent, SiLoadingSpinnerDirective]\n})\nexport class SiLoadingSpinnerModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-loading-button.component';\nexport * from './si-loading-spinner.component';\nexport * from './si-loading-spinner.directive';\nexport * from './si-loading-spinner.service';\nexport * from './si-loading-spinner.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Overlay } from '@angular/cdk/overlay';
2
2
  import { ComponentPortal } from '@angular/cdk/portal';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, signal, DOCUMENT, viewChild, ChangeDetectionStrategy, Component, ApplicationRef, Injector, EnvironmentInjector, TemplateRef, createComponent, Injectable } from '@angular/core';
5
- import { areAnimationsDisabled, isRTL } from '@siemens/element-ng/common';
5
+ import { isRTL } from '@siemens/element-ng/common';
6
6
  import { SiTranslateService, SiNoTranslateService } from '@siemens/element-translate-ng/translate';
7
7
  import { Subject, ReplaySubject } from 'rxjs';
8
8
  import * as i1 from '@angular/cdk/a11y';
@@ -81,45 +81,42 @@ class ModalRef {
81
81
  */
82
82
  class SiModalComponent {
83
83
  modalRef = inject((ModalRef));
84
- isAnimated = !areAnimationsDisabled() && this.modalRef.data.animated !== false;
85
84
  dialogClass = this.modalRef.dialogClass ?? '';
86
85
  titleId = this.modalRef.data?.ariaLabelledBy ?? '';
87
- init = false;
88
- show = signal(false, ...(ngDevMode ? [{ debugName: "show" }] : []));
86
+ show = signal(true, ...(ngDevMode ? [{ debugName: "show" }] : []));
89
87
  showBackdropVisible = signal(false, ...(ngDevMode ? [{ debugName: "showBackdropVisible" }] : []));
90
88
  clickStartInDialog = false;
91
89
  origBodyOverflow;
92
- showTimer;
93
90
  backdropGhostClickPrevention = true;
91
+ detachFn;
94
92
  document = inject(DOCUMENT);
95
93
  modalContainerRef = viewChild.required('modalContainer');
96
94
  ngOnInit() {
97
- setTimeout(() => (this.backdropGhostClickPrevention = false), this.animationTime(300));
98
- this.init = true;
99
- this.showTimer = setTimeout(() => {
100
- this.show.set(true);
101
- }, this.animationTime(150));
95
+ setTimeout(() => (this.backdropGhostClickPrevention = false), 300);
102
96
  }
103
97
  ngAfterViewInit() {
104
98
  queueMicrotask(() => this.modalRef?.shown.next(this.modalContainerRef()));
105
99
  }
106
- ngOnDestroy() {
107
- this.hideBackdrop();
108
- }
109
100
  /** @internal */
110
101
  hideDialog(param) {
111
- clearTimeout(this.showTimer);
112
- this.show.set(false);
113
- // set `detach()` in modal ref to no-op so that the animation is unaffected if called
114
- const detach = this.modalRef.detach;
102
+ if (!this.show()) {
103
+ return;
104
+ }
105
+ // Capture `detach()` in modal ref to no-op so that the animation is unaffected if called
106
+ this.detachFn = this.modalRef.detach;
115
107
  this.modalRef.detach = () => { };
116
- setTimeout(() => {
117
- this.hideBackdrop();
118
- setTimeout(() => detach(), this.animationTime(150));
119
- }, this.animationTime(300));
108
+ // Check transition duration before toggling the DOM changes to avoid issues with zero-duration transitions where transitionend won't fire
109
+ const isAnimated = parseFloat(getComputedStyle(this.modalContainerRef().nativeElement).transitionDuration) > 0;
110
+ // Toggle the @if condition to trigger animate.leave on the dialog
111
+ this.show.set(false);
112
+ this.hideBackdrop();
120
113
  this.modalRef?.hidden.next(param);
121
114
  this.modalRef?.hidden.complete();
122
115
  this.modalRef?.message.complete();
116
+ // For disabled animations or test environments, transitionend won't fire (0s duration)
117
+ if (!isAnimated) {
118
+ this.detachFn?.();
119
+ }
123
120
  }
124
121
  /** @internal */
125
122
  showBackdrop() {
@@ -134,6 +131,11 @@ class SiModalComponent {
134
131
  this.origBodyOverflow = undefined;
135
132
  }
136
133
  }
134
+ onLeaveEnd(event) {
135
+ if (!this.show() && event.target === event.currentTarget) {
136
+ this.detachFn?.();
137
+ }
138
+ }
137
139
  clickStarted(event) {
138
140
  this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;
139
141
  }
@@ -158,11 +160,8 @@ class SiModalComponent {
158
160
  this.modalRef.messageOrHide(this.modalRef.closeValue);
159
161
  }
160
162
  }
161
- animationTime(millis) {
162
- return this.isAnimated ? millis : 0;
163
- }
164
163
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
165
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiModalComponent, isStandalone: true, selector: "si-modal", host: { listeners: { "mousedown": "clickStarted($event)", "mouseup": "onClickStop($event)", "window:keydown.esc": "onEsc($event)" }, properties: { "style.--element-animations-enabled": "modalRef.data.animated === false ? 0 : null" } }, viewQueries: [{ propertyName: "modalContainerRef", first: true, predicate: ["modalContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
164
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiModalComponent, isStandalone: true, selector: "si-modal", host: { listeners: { "mousedown": "clickStarted($event)", "mouseup": "onClickStop($event)", "window:keydown.esc": "onEsc($event)" }, properties: { "style.--element-animations-enabled": "modalRef.data.animated === false ? 0 : null" } }, viewQueries: [{ propertyName: "modalContainerRef", first: true, predicate: ["modalContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n<div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.dialog-leave]=\"!show()\"\n [attr.aria-labelledby]=\"titleId\"\n (transitionend)=\"onLeaveEnd($event)\"\n>\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
166
165
  }
167
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiModalComponent, decorators: [{
168
167
  type: Component,
@@ -171,7 +170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
171
170
  '(mousedown)': 'clickStarted($event)',
172
171
  '(mouseup)': 'onClickStop($event)',
173
172
  '(window:keydown.esc)': 'onEsc($event)'
174
- }, template: "@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n" }]
173
+ }, template: "@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n<div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.dialog-leave]=\"!show()\"\n [attr.aria-labelledby]=\"titleId\"\n (transitionend)=\"onLeaveEnd($event)\"\n>\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n</div>\n" }]
175
174
  }], propDecorators: { modalContainerRef: [{ type: i0.ViewChild, args: ['modalContainer', { isSignal: true }] }] } });
176
175
 
177
176
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-modal.mjs","sources":["../../../../projects/element-ng/modal/modalref.ts","../../../../projects/element-ng/modal/si-modal.component.ts","../../../../projects/element-ng/modal/si-modal.component.html","../../../../projects/element-ng/modal/si-modal.service.ts","../../../../projects/element-ng/modal/modal.helpers.ts","../../../../projects/element-ng/modal/index.ts","../../../../projects/element-ng/modal/siemens-element-ng-modal.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\nimport { ModalOptions } from './si-modal.service';\n\n/**\n * Reference to a modal dialog\n * @typeParam T - the type of the content\n * @typeParam CT - the close type\n */\nexport class ModalRef<T = never, CT = any> {\n /** Emits the close value when the modal is hidden. */\n hidden = new Subject<CT | undefined>();\n /** Allows messaging state to consumer w/o closing the dialog. */\n message = new Subject<CT | undefined>();\n /** Emits the modal element reference when it is shown. */\n shown = new ReplaySubject<ElementRef>(1);\n /**\n * The modal options passed during creation.\n *\n * @defaultValue `{}`\n * @see {@link SiModalService}\n */\n data: ModalOptions = {};\n /** @defaultValue true */\n ignoreBackdropClick = true;\n /**\n * Custom class for modal-dialog\n *\n * @defaultValue ''\n */\n dialogClass = '';\n /**\n * The layer of the modal. The modal with the highest layer will be shown on top.\n *\n * @defaultValue 0\n */\n layer = 0;\n /** The default close value of the modal. */\n closeValue?: CT;\n\n get content(): T {\n return undefined as unknown as T;\n }\n\n /** Set the input of a component shown in the modal. */\n setInput(input: string, value: unknown): void {}\n\n /**\n * @defaultValue `() => false`\n */\n isCurrent: () => boolean = () => false;\n /**\n * @defaultValue `() => {}`\n */\n detach: () => void = () => {};\n /**\n * Close the modal with a custom close value.\n *\n * @defaultValue `() => {}`\n */\n hide: (reason?: CT) => void = () => {};\n\n /**\n * When `data.disableAutoHide` is set, messages the `reason`, otherwise calls {@link hide}.\n */\n messageOrHide(reason?: CT): void {\n if (this.data.messageInsteadOfAutoHide) {\n this.message.next(reason);\n } else {\n this.hide(reason);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild,\n DOCUMENT\n} from '@angular/core';\nimport { areAnimationsDisabled } from '@siemens/element-ng/common';\n\nimport { ModalRef } from './modalref';\n\n@Component({\n selector: 'si-modal',\n imports: [A11yModule],\n templateUrl: './si-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--element-animations-enabled]': 'modalRef.data.animated === false ? 0 : null',\n '(mousedown)': 'clickStarted($event)',\n '(mouseup)': 'onClickStop($event)',\n '(window:keydown.esc)': 'onEsc($event)'\n }\n})\nexport class SiModalComponent implements OnInit, AfterViewInit, OnDestroy {\n protected readonly modalRef = inject(ModalRef<unknown, any>);\n protected readonly isAnimated = !areAnimationsDisabled() && this.modalRef.data.animated !== false;\n\n protected readonly dialogClass = this.modalRef.dialogClass ?? '';\n protected readonly titleId = this.modalRef.data?.ariaLabelledBy ?? '';\n protected init = false;\n protected readonly show = signal(false);\n protected readonly showBackdropVisible = signal(false);\n\n private clickStartInDialog = false;\n private origBodyOverflow?: string;\n private showTimer: any;\n private backdropGhostClickPrevention = true;\n private readonly document = inject(DOCUMENT);\n\n private readonly modalContainerRef = viewChild.required<ElementRef>('modalContainer');\n\n ngOnInit(): void {\n setTimeout(() => (this.backdropGhostClickPrevention = false), this.animationTime(300));\n this.init = true;\n this.showTimer = setTimeout(() => {\n this.show.set(true);\n }, this.animationTime(150));\n }\n\n ngAfterViewInit(): void {\n queueMicrotask(() => this.modalRef?.shown.next(this.modalContainerRef()));\n }\n\n ngOnDestroy(): void {\n this.hideBackdrop();\n }\n\n /** @internal */\n hideDialog(param?: any): void {\n clearTimeout(this.showTimer);\n\n this.show.set(false);\n // set `detach()` in modal ref to no-op so that the animation is unaffected if called\n const detach = this.modalRef.detach;\n this.modalRef.detach = () => {};\n\n setTimeout(() => {\n this.hideBackdrop();\n setTimeout(() => detach(), this.animationTime(150));\n }, this.animationTime(300));\n\n this.modalRef?.hidden.next(param);\n this.modalRef?.hidden.complete();\n this.modalRef?.message.complete();\n }\n\n /** @internal */\n showBackdrop(): void {\n this.showBackdropVisible.set(true);\n this.origBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private hideBackdrop(): void {\n this.showBackdropVisible.set(false);\n if (this.origBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.origBodyOverflow;\n this.origBodyOverflow = undefined;\n }\n }\n\n protected clickStarted(event: MouseEvent): void {\n this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;\n }\n\n protected onClickStop(event: MouseEvent): void {\n const clickedInBackdrop =\n event.target === this.modalContainerRef().nativeElement && !this.clickStartInDialog;\n if (this.modalRef?.ignoreBackdropClick || !clickedInBackdrop) {\n this.clickStartInDialog = false;\n return;\n }\n\n if (!this.backdropGhostClickPrevention) {\n // Called when backdrop close is allowed and user clicks on the backdrop\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n } else {\n // When in ghost click prevention mode, avoid text selection\n this.document.getSelection()?.removeAllRanges();\n }\n }\n\n protected onEsc(event: Event): void {\n if (this.modalRef?.data.keyboard && this.modalRef?.isCurrent()) {\n event.preventDefault();\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n }\n }\n\n private animationTime(millis: number): number {\n return this.isAnimated ? millis : 0;\n }\n}\n","@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n StaticProvider,\n TemplateRef,\n Type\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { SiNoTranslateService, SiTranslateService } from '@siemens/element-translate-ng/translate';\n\nimport { ModalRef } from './modalref';\nimport { SiModalComponent } from './si-modal.component';\n\nexport interface ModalDependencyInjectionOptions {\n /** Additional providers for the modal. */\n providers?: StaticProvider[];\n /** Optional element Injector. */\n injector?: Injector;\n /** Optional environment Injector. */\n environmentInjector?: EnvironmentInjector;\n}\n\nexport interface ModalOptions<T = Record<string, any>> extends ModalDependencyInjectionOptions {\n /**\n * Use this to assign values to either `@Input()` or `input()` fields of the provided component.\n * If a template is used, the values are available in the template context.\n */\n inputValues?: Record<string, unknown>;\n /** When set to true, clicking the backdrop has no effect. */\n ignoreBackdropClick?: boolean;\n /** When set to true, backdrop click or Esc don't close the modal. Instead a message will be sent. */\n messageInsteadOfAutoHide?: boolean;\n /** Handle Esc to close/message. */\n keyboard?: boolean;\n /** Whether to enable animation. */\n animated?: boolean;\n /** Additional CSS class. */\n class?: string;\n /** aria-labelled-by value. */\n ariaLabelledBy?: string;\n}\n\nclass ModalRefImpl<T = never, CT = void> extends ModalRef<T, CT> {\n contentRef: TemplateRef<any> | Type<any>;\n viewRef?: EmbeddedViewRef<any>;\n modalCompRef?: ComponentRef<SiModalComponent>;\n componentRef?: ComponentRef<T>;\n overlayRef?: OverlayRef;\n\n override get content(): T {\n return this.componentRef?.instance as T;\n }\n\n override setInput(input: string, value: unknown): void {\n this.componentRef?.setInput(input, value);\n }\n\n constructor(\n contentRef: TemplateRef<any> | Type<any>,\n layer: number,\n data: ModalOptions,\n closeValue?: CT\n ) {\n super();\n this.contentRef = contentRef;\n this.layer = layer;\n this.data = data;\n this.ignoreBackdropClick = data.ignoreBackdropClick !== false;\n this.dialogClass = data?.class ?? '';\n this.closeValue = closeValue;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SiModalService {\n private modalsCount = 0;\n private readonly overlay = inject(Overlay);\n private appRef = inject(ApplicationRef);\n private injector = inject(Injector);\n private environmentInjector = inject(EnvironmentInjector);\n\n /**\n * Shows a modal with the given content and configuration.\n * @param content - Content to be displayed in the modal can be a template reference or a component.\n * @param config - Configuration for the modal.\n * @param closeValue - Default closing value which can be overridden by calling `modalRef.hide(value)`.\n * @returns A reference to the modal.\n */\n show<T, CT = any>(\n content: TemplateRef<any> | (new (...args: any[]) => T),\n config: ModalOptions<T>,\n closeValue?: CT\n ): ModalRef<T, CT> {\n const modalRef = new ModalRefImpl<T, CT>(content, ++this.modalsCount, config, closeValue);\n const siModalRef = this.attachComponent(modalRef);\n modalRef.modalCompRef = siModalRef;\n modalRef.detach = () => this.detach(modalRef);\n modalRef.hide = (param?: CT) => siModalRef.instance.hideDialog(param);\n modalRef.isCurrent = () => modalRef.layer === this.modalsCount;\n\n if (this.modalsCount === 1) {\n siModalRef.instance.showBackdrop();\n }\n\n return modalRef;\n }\n\n private attachComponent<T, CT>(modalRef: ModalRefImpl<T, CT>): ComponentRef<SiModalComponent> {\n const providers: StaticProvider[] = [{ provide: ModalRef, useValue: modalRef }];\n modalRef.data.providers?.forEach(p => providers.push(p));\n const injector = Injector.create({\n providers,\n parent: modalRef.data.injector ?? this.buildInjector()\n });\n\n modalRef.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n direction: isRTL() ? 'rtl' : 'ltr'\n });\n const compPortal = new ComponentPortal(SiModalComponent, null, injector);\n // Ensure compatibility between Angular CDK 19 and 20 since constructor arguments have changed\n compPortal.projectableNodes = this.getContentProjectableNodes(injector, modalRef);\n return modalRef.overlayRef.attach(compPortal);\n }\n\n private getContentProjectableNodes<T, CT>(\n injector: Injector,\n modalRef: ModalRefImpl<T, CT>\n ): Node[][] {\n if (modalRef.contentRef instanceof TemplateRef) {\n modalRef.viewRef = modalRef.contentRef.createEmbeddedView({\n modalRef,\n ...modalRef.data.inputValues\n });\n this.appRef.attachView(modalRef.viewRef);\n return [modalRef.viewRef.rootNodes];\n }\n\n modalRef.componentRef = createComponent(modalRef.contentRef, {\n environmentInjector: modalRef.data.environmentInjector ?? this.environmentInjector,\n elementInjector: injector\n });\n // set initial @Input() / input()\n for (const [key, value] of Object.entries(modalRef.data?.inputValues ?? {})) {\n modalRef.componentRef?.setInput(key, value);\n }\n modalRef.componentRef.changeDetectorRef.detectChanges();\n\n this.appRef.attachView(modalRef.componentRef.hostView);\n return [[modalRef.componentRef.location.nativeElement]];\n }\n\n protected detach(modalRef: ModalRef<unknown, any>): void {\n const ref = modalRef as ModalRefImpl<unknown>;\n if (ref.modalCompRef) {\n ref.modalCompRef?.destroy();\n ref.modalCompRef = undefined;\n ref.componentRef?.destroy();\n ref.componentRef = undefined;\n ref.viewRef?.destroy();\n ref.viewRef = undefined;\n ref.overlayRef?.dispose();\n ref.shown.complete();\n this.modalsCount--;\n }\n }\n\n // TODO remove once translation must be defined at application start\n // Notification service is provided in 'root'. If no translation is defined, SiNoTranslateService is not provided\n protected buildInjector(): Injector {\n let injector = this.injector;\n if (!injector.get(SiTranslateService, null)) {\n injector = Injector.create({\n providers: [{ provide: SiTranslateService, useClass: SiNoTranslateService, deps: [] }],\n parent: this.injector\n });\n }\n return injector;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ModalOptions } from './si-modal.service';\n\nlet idCounter = 1;\n\nexport const createModalConfig = (inputs?: { [key: string]: any }): ModalOptions => {\n if (inputs) {\n Object.keys(inputs).forEach(k => inputs![k] === undefined && delete inputs![k]);\n } else {\n inputs = {};\n }\n const config: ModalOptions<any> = {\n inputValues: inputs as { [key: string]: any },\n ignoreBackdropClick: true,\n keyboard: false,\n animated: true,\n class: 'modal-dialog-centered'\n };\n const id = `__si-modal-id-${idCounter++}`;\n config.inputValues!.titleId = id;\n config.ariaLabelledBy = id;\n return config;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-modal.service';\nexport * from './modalref';\nexport * from './modal.helpers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-modal.mjs","sources":["../../../../projects/element-ng/modal/modalref.ts","../../../../projects/element-ng/modal/si-modal.component.ts","../../../../projects/element-ng/modal/si-modal.component.html","../../../../projects/element-ng/modal/si-modal.service.ts","../../../../projects/element-ng/modal/modal.helpers.ts","../../../../projects/element-ng/modal/index.ts","../../../../projects/element-ng/modal/siemens-element-ng-modal.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\nimport { ModalOptions } from './si-modal.service';\n\n/**\n * Reference to a modal dialog\n * @typeParam T - the type of the content\n * @typeParam CT - the close type\n */\nexport class ModalRef<T = never, CT = any> {\n /** Emits the close value when the modal is hidden. */\n hidden = new Subject<CT | undefined>();\n /** Allows messaging state to consumer w/o closing the dialog. */\n message = new Subject<CT | undefined>();\n /** Emits the modal element reference when it is shown. */\n shown = new ReplaySubject<ElementRef>(1);\n /**\n * The modal options passed during creation.\n *\n * @defaultValue `{}`\n * @see {@link SiModalService}\n */\n data: ModalOptions = {};\n /** @defaultValue true */\n ignoreBackdropClick = true;\n /**\n * Custom class for modal-dialog\n *\n * @defaultValue ''\n */\n dialogClass = '';\n /**\n * The layer of the modal. The modal with the highest layer will be shown on top.\n *\n * @defaultValue 0\n */\n layer = 0;\n /** The default close value of the modal. */\n closeValue?: CT;\n\n get content(): T {\n return undefined as unknown as T;\n }\n\n /** Set the input of a component shown in the modal. */\n setInput(input: string, value: unknown): void {}\n\n /**\n * @defaultValue `() => false`\n */\n isCurrent: () => boolean = () => false;\n /**\n * @defaultValue `() => {}`\n */\n detach: () => void = () => {};\n /**\n * Close the modal with a custom close value.\n *\n * @defaultValue `() => {}`\n */\n hide: (reason?: CT) => void = () => {};\n\n /**\n * When `data.disableAutoHide` is set, messages the `reason`, otherwise calls {@link hide}.\n */\n messageOrHide(reason?: CT): void {\n if (this.data.messageInsteadOfAutoHide) {\n this.message.next(reason);\n } else {\n this.hide(reason);\n }\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnInit,\n signal,\n viewChild,\n DOCUMENT\n} from '@angular/core';\n\nimport { ModalRef } from './modalref';\n\n@Component({\n selector: 'si-modal',\n imports: [A11yModule],\n templateUrl: './si-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--element-animations-enabled]': 'modalRef.data.animated === false ? 0 : null',\n '(mousedown)': 'clickStarted($event)',\n '(mouseup)': 'onClickStop($event)',\n '(window:keydown.esc)': 'onEsc($event)'\n }\n})\nexport class SiModalComponent implements OnInit, AfterViewInit {\n protected readonly modalRef = inject(ModalRef<unknown, any>);\n\n protected readonly dialogClass = this.modalRef.dialogClass ?? '';\n protected readonly titleId = this.modalRef.data?.ariaLabelledBy ?? '';\n protected readonly show = signal(true);\n protected readonly showBackdropVisible = signal(false);\n\n private clickStartInDialog = false;\n private origBodyOverflow?: string;\n private backdropGhostClickPrevention = true;\n private detachFn?: () => void;\n private readonly document = inject(DOCUMENT);\n\n private readonly modalContainerRef = viewChild.required<ElementRef>('modalContainer');\n\n ngOnInit(): void {\n setTimeout(() => (this.backdropGhostClickPrevention = false), 300);\n }\n\n ngAfterViewInit(): void {\n queueMicrotask(() => this.modalRef?.shown.next(this.modalContainerRef()));\n }\n\n /** @internal */\n hideDialog(param?: unknown): void {\n if (!this.show()) {\n return;\n }\n\n // Capture `detach()` in modal ref to no-op so that the animation is unaffected if called\n this.detachFn = this.modalRef.detach;\n this.modalRef.detach = () => {};\n\n // Check transition duration before toggling the DOM changes to avoid issues with zero-duration transitions where transitionend won't fire\n const isAnimated =\n parseFloat(getComputedStyle(this.modalContainerRef().nativeElement).transitionDuration) > 0;\n\n // Toggle the @if condition to trigger animate.leave on the dialog\n this.show.set(false);\n this.hideBackdrop();\n this.modalRef?.hidden.next(param);\n this.modalRef?.hidden.complete();\n this.modalRef?.message.complete();\n\n // For disabled animations or test environments, transitionend won't fire (0s duration)\n if (!isAnimated) {\n this.detachFn?.();\n }\n }\n\n /** @internal */\n showBackdrop(): void {\n this.showBackdropVisible.set(true);\n this.origBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private hideBackdrop(): void {\n this.showBackdropVisible.set(false);\n if (this.origBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.origBodyOverflow;\n this.origBodyOverflow = undefined;\n }\n }\n\n protected onLeaveEnd(event: TransitionEvent): void {\n if (!this.show() && event.target === event.currentTarget) {\n this.detachFn?.();\n }\n }\n\n protected clickStarted(event: MouseEvent): void {\n this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;\n }\n\n protected onClickStop(event: MouseEvent): void {\n const clickedInBackdrop =\n event.target === this.modalContainerRef().nativeElement && !this.clickStartInDialog;\n if (this.modalRef?.ignoreBackdropClick || !clickedInBackdrop) {\n this.clickStartInDialog = false;\n return;\n }\n\n if (!this.backdropGhostClickPrevention) {\n // Called when backdrop close is allowed and user clicks on the backdrop\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n } else {\n // When in ghost click prevention mode, avoid text selection\n this.document.getSelection()?.removeAllRanges();\n }\n }\n\n protected onEsc(event: Event): void {\n if (this.modalRef?.data.keyboard && this.modalRef?.isCurrent()) {\n event.preventDefault();\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n }\n }\n}\n","@if (showBackdropVisible()) {\n <div class=\"modal-backdrop\" animate.leave=\"backdrop-leave\"></div>\n}\n<div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.dialog-leave]=\"!show()\"\n [attr.aria-labelledby]=\"titleId\"\n (transitionend)=\"onLeaveEnd($event)\"\n>\n <div cdkTrapFocus cdkTrapFocusAutoCapture [class]=\"`modal-dialog ${dialogClass}`\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n StaticProvider,\n TemplateRef,\n Type\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { SiNoTranslateService, SiTranslateService } from '@siemens/element-translate-ng/translate';\n\nimport { ModalRef } from './modalref';\nimport { SiModalComponent } from './si-modal.component';\n\nexport interface ModalDependencyInjectionOptions {\n /** Additional providers for the modal. */\n providers?: StaticProvider[];\n /** Optional element Injector. */\n injector?: Injector;\n /** Optional environment Injector. */\n environmentInjector?: EnvironmentInjector;\n}\n\nexport interface ModalOptions<T = Record<string, any>> extends ModalDependencyInjectionOptions {\n /**\n * Use this to assign values to either `@Input()` or `input()` fields of the provided component.\n * If a template is used, the values are available in the template context.\n */\n inputValues?: Record<string, unknown>;\n /** When set to true, clicking the backdrop has no effect. */\n ignoreBackdropClick?: boolean;\n /** When set to true, backdrop click or Esc don't close the modal. Instead a message will be sent. */\n messageInsteadOfAutoHide?: boolean;\n /** Handle Esc to close/message. */\n keyboard?: boolean;\n /** Whether to enable animation. */\n animated?: boolean;\n /** Additional CSS class. */\n class?: string;\n /** aria-labelled-by value. */\n ariaLabelledBy?: string;\n}\n\nclass ModalRefImpl<T = never, CT = void> extends ModalRef<T, CT> {\n contentRef: TemplateRef<any> | Type<any>;\n viewRef?: EmbeddedViewRef<any>;\n modalCompRef?: ComponentRef<SiModalComponent>;\n componentRef?: ComponentRef<T>;\n overlayRef?: OverlayRef;\n\n override get content(): T {\n return this.componentRef?.instance as T;\n }\n\n override setInput(input: string, value: unknown): void {\n this.componentRef?.setInput(input, value);\n }\n\n constructor(\n contentRef: TemplateRef<any> | Type<any>,\n layer: number,\n data: ModalOptions,\n closeValue?: CT\n ) {\n super();\n this.contentRef = contentRef;\n this.layer = layer;\n this.data = data;\n this.ignoreBackdropClick = data.ignoreBackdropClick !== false;\n this.dialogClass = data?.class ?? '';\n this.closeValue = closeValue;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SiModalService {\n private modalsCount = 0;\n private readonly overlay = inject(Overlay);\n private appRef = inject(ApplicationRef);\n private injector = inject(Injector);\n private environmentInjector = inject(EnvironmentInjector);\n\n /**\n * Shows a modal with the given content and configuration.\n * @param content - Content to be displayed in the modal can be a template reference or a component.\n * @param config - Configuration for the modal.\n * @param closeValue - Default closing value which can be overridden by calling `modalRef.hide(value)`.\n * @returns A reference to the modal.\n */\n show<T, CT = any>(\n content: TemplateRef<any> | (new (...args: any[]) => T),\n config: ModalOptions<T>,\n closeValue?: CT\n ): ModalRef<T, CT> {\n const modalRef = new ModalRefImpl<T, CT>(content, ++this.modalsCount, config, closeValue);\n const siModalRef = this.attachComponent(modalRef);\n modalRef.modalCompRef = siModalRef;\n modalRef.detach = () => this.detach(modalRef);\n modalRef.hide = (param?: CT) => siModalRef.instance.hideDialog(param);\n modalRef.isCurrent = () => modalRef.layer === this.modalsCount;\n\n if (this.modalsCount === 1) {\n siModalRef.instance.showBackdrop();\n }\n\n return modalRef;\n }\n\n private attachComponent<T, CT>(modalRef: ModalRefImpl<T, CT>): ComponentRef<SiModalComponent> {\n const providers: StaticProvider[] = [{ provide: ModalRef, useValue: modalRef }];\n modalRef.data.providers?.forEach(p => providers.push(p));\n const injector = Injector.create({\n providers,\n parent: modalRef.data.injector ?? this.buildInjector()\n });\n\n modalRef.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n direction: isRTL() ? 'rtl' : 'ltr'\n });\n const compPortal = new ComponentPortal(SiModalComponent, null, injector);\n // Ensure compatibility between Angular CDK 19 and 20 since constructor arguments have changed\n compPortal.projectableNodes = this.getContentProjectableNodes(injector, modalRef);\n return modalRef.overlayRef.attach(compPortal);\n }\n\n private getContentProjectableNodes<T, CT>(\n injector: Injector,\n modalRef: ModalRefImpl<T, CT>\n ): Node[][] {\n if (modalRef.contentRef instanceof TemplateRef) {\n modalRef.viewRef = modalRef.contentRef.createEmbeddedView({\n modalRef,\n ...modalRef.data.inputValues\n });\n this.appRef.attachView(modalRef.viewRef);\n return [modalRef.viewRef.rootNodes];\n }\n\n modalRef.componentRef = createComponent(modalRef.contentRef, {\n environmentInjector: modalRef.data.environmentInjector ?? this.environmentInjector,\n elementInjector: injector\n });\n // set initial @Input() / input()\n for (const [key, value] of Object.entries(modalRef.data?.inputValues ?? {})) {\n modalRef.componentRef?.setInput(key, value);\n }\n modalRef.componentRef.changeDetectorRef.detectChanges();\n\n this.appRef.attachView(modalRef.componentRef.hostView);\n return [[modalRef.componentRef.location.nativeElement]];\n }\n\n protected detach(modalRef: ModalRef<unknown, any>): void {\n const ref = modalRef as ModalRefImpl<unknown>;\n if (ref.modalCompRef) {\n ref.modalCompRef?.destroy();\n ref.modalCompRef = undefined;\n ref.componentRef?.destroy();\n ref.componentRef = undefined;\n ref.viewRef?.destroy();\n ref.viewRef = undefined;\n ref.overlayRef?.dispose();\n ref.shown.complete();\n this.modalsCount--;\n }\n }\n\n // TODO remove once translation must be defined at application start\n // Notification service is provided in 'root'. If no translation is defined, SiNoTranslateService is not provided\n protected buildInjector(): Injector {\n let injector = this.injector;\n if (!injector.get(SiTranslateService, null)) {\n injector = Injector.create({\n providers: [{ provide: SiTranslateService, useClass: SiNoTranslateService, deps: [] }],\n parent: this.injector\n });\n }\n return injector;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ModalOptions } from './si-modal.service';\n\nlet idCounter = 1;\n\nexport const createModalConfig = (inputs?: { [key: string]: any }): ModalOptions => {\n if (inputs) {\n Object.keys(inputs).forEach(k => inputs![k] === undefined && delete inputs![k]);\n } else {\n inputs = {};\n }\n const config: ModalOptions<any> = {\n inputValues: inputs as { [key: string]: any },\n ignoreBackdropClick: true,\n keyboard: false,\n animated: true,\n class: 'modal-dialog-centered'\n };\n const id = `__si-modal-id-${idCounter++}`;\n config.inputValues!.titleId = id;\n config.ariaLabelledBy = id;\n return config;\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-modal.service';\nexport * from './modalref';\nexport * from './modal.helpers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}