@siemens/element-ng 47.4.0 → 47.6.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 (198) hide show
  1. package/breadcrumb-router/index.d.ts +8 -0
  2. package/breadcrumb-router/package.json +3 -0
  3. package/breadcrumb-router/si-breadcrumb-default-resolver.service.d.ts +23 -0
  4. package/breadcrumb-router/si-breadcrumb-router.component.d.ts +30 -0
  5. package/breadcrumb-router/si-breadcrumb-router.model.d.ts +53 -0
  6. package/breadcrumb-router/si-breadcrumb-router.module.d.ts +7 -0
  7. package/common/models/status-type.model.d.ts +2 -0
  8. package/datatable/index.d.ts +42 -0
  9. package/datatable/package.json +3 -0
  10. package/datatable/si-datatable-interaction.directive.d.ts +34 -0
  11. package/datatable/si-datatable.module.d.ts +7 -0
  12. package/date-range-filter/si-date-range-filter.component.d.ts +5 -1
  13. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +263 -0
  14. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -0
  15. package/fesm2022/siemens-element-ng-breadcrumb.mjs +1 -1
  16. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  18. package/fesm2022/siemens-element-ng-datatable.mjs +173 -0
  19. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -0
  20. package/fesm2022/siemens-element-ng-date-range-filter.mjs +26 -5
  21. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-filtered-search.mjs +1139 -0
  23. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -0
  24. package/fesm2022/siemens-element-ng-formly.mjs +935 -0
  25. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -0
  26. package/fesm2022/siemens-element-ng-icon.mjs +29 -15
  27. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-list-details.mjs +390 -0
  29. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -0
  30. package/fesm2022/siemens-element-ng-loading-spinner.mjs +15 -12
  31. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  32. package/fesm2022/siemens-element-ng-main-detail-container.mjs +269 -0
  33. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -0
  34. package/fesm2022/siemens-element-ng-modal.mjs +5 -2
  35. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +802 -0
  37. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -0
  38. package/fesm2022/siemens-element-ng-password-strength.mjs +22 -16
  39. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
  40. package/fesm2022/siemens-element-ng-phone-number.mjs +426 -0
  41. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -0
  42. package/fesm2022/siemens-element-ng-resize-observer.mjs +6 -3
  43. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  44. package/fesm2022/siemens-element-ng-result-details-list.mjs +74 -0
  45. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -0
  46. package/fesm2022/siemens-element-ng-shadow-root.mjs +70 -0
  47. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -0
  48. package/fesm2022/siemens-element-ng-side-panel.mjs +554 -0
  49. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -0
  50. package/fesm2022/siemens-element-ng-status-bar.mjs +348 -0
  51. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -0
  52. package/fesm2022/siemens-element-ng-tabs-next.mjs +356 -0
  53. package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -0
  54. package/fesm2022/siemens-element-ng-tabs.mjs +1 -1
  55. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  56. package/fesm2022/siemens-element-ng-threshold.mjs +319 -0
  57. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -0
  58. package/fesm2022/siemens-element-ng-tour.mjs +384 -0
  59. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -0
  60. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-tree-view.mjs +2936 -0
  62. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -0
  63. package/fesm2022/siemens-element-ng-wizard.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  65. package/filtered-search/index.d.ts +7 -0
  66. package/filtered-search/package.json +3 -0
  67. package/filtered-search/si-filtered-search-helper.d.ts +22 -0
  68. package/filtered-search/si-filtered-search-value.component.d.ts +53 -0
  69. package/filtered-search/si-filtered-search.component.d.ts +329 -0
  70. package/filtered-search/si-filtered-search.model.d.ts +139 -0
  71. package/filtered-search/si-filtered-search.module.d.ts +7 -0
  72. package/filtered-search/values/date-value/si-filtered-search-date-value.component.d.ts +57 -0
  73. package/filtered-search/values/si-filtered-search-value.base.d.ts +27 -0
  74. package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +45 -0
  75. package/formly/fields/button/si-formly-button.component.d.ts +7 -0
  76. package/formly/fields/date-range/si-formly-date-range.component.d.ts +6 -0
  77. package/formly/fields/datetime/si-formly-datetime.component.d.ts +13 -0
  78. package/formly/fields/email/si-formly-email.component.d.ts +6 -0
  79. package/formly/fields/ip-input/si-formly-ip-input.component.d.ts +6 -0
  80. package/formly/fields/number/si-formly-number.component.d.ts +6 -0
  81. package/formly/fields/password/si-formly-password.component.d.ts +6 -0
  82. package/formly/fields/select/si-formly-select.component.d.ts +6 -0
  83. package/formly/fields/text/si-formly-text-display.component.d.ts +7 -0
  84. package/formly/fields/textarea/si-formly-textarea.component.d.ts +18 -0
  85. package/formly/fields/time/si-formly-time.component.d.ts +13 -0
  86. package/formly/index.d.ts +6 -0
  87. package/formly/package.json +3 -0
  88. package/formly/si-formly-translate.extension.d.ts +11 -0
  89. package/formly/si-formly.component.d.ts +62 -0
  90. package/formly/si-formly.module.d.ts +35 -0
  91. package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +13 -0
  92. package/formly/structural/si-formly-array/si-formly-array.component.d.ts +6 -0
  93. package/formly/structural/si-formly-object/si-formly-object.component.d.ts +6 -0
  94. package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +22 -0
  95. package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +21 -0
  96. package/formly/structural/si-formly-object-plain/si-formly-object-plain.component.d.ts +6 -0
  97. package/formly/structural/si-formly-tabset/si-formly-object-tabset.component.d.ts +7 -0
  98. package/formly/utils.d.ts +6 -0
  99. package/formly/wrapper/si-formly-fieldset.component.d.ts +8 -0
  100. package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +19 -0
  101. package/formly/wrapper/si-formly-horizontal-wrapper.component.d.ts +6 -0
  102. package/formly/wrapper/si-formly-icon-wrapper.component.d.ts +6 -0
  103. package/formly/wrapper/si-formly-wrapper.component.d.ts +8 -0
  104. package/icon/element-icons.d.ts +5 -0
  105. package/list-details/index.d.ts +12 -0
  106. package/list-details/package.json +3 -0
  107. package/list-details/si-details-pane/si-details-pane.component.d.ts +8 -0
  108. package/list-details/si-details-pane-body/si-details-pane-body.component.d.ts +6 -0
  109. package/list-details/si-details-pane-footer/si-details-pane-footer.component.d.ts +6 -0
  110. package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +38 -0
  111. package/list-details/si-list-details.component.d.ts +100 -0
  112. package/list-details/si-list-pane/si-list-pane.component.d.ts +10 -0
  113. package/list-details/si-list-pane-body/si-list-pane-body.component.d.ts +6 -0
  114. package/list-details/si-list-pane-header/si-list-pane-header.component.d.ts +6 -0
  115. package/loading-spinner/si-loading-spinner.directive.d.ts +3 -2
  116. package/main-detail-container/index.d.ts +6 -0
  117. package/main-detail-container/package.json +3 -0
  118. package/main-detail-container/si-main-detail-container.component.d.ts +151 -0
  119. package/main-detail-container/si-main-detail-container.module.d.ts +7 -0
  120. package/navbar-vertical/index.d.ts +7 -0
  121. package/navbar-vertical/package.json +3 -0
  122. package/navbar-vertical/si-navbar-vertical-divider.component.d.ts +5 -0
  123. package/navbar-vertical/si-navbar-vertical-group-trigger.directive.d.ts +38 -0
  124. package/navbar-vertical/si-navbar-vertical-group.component.d.ts +16 -0
  125. package/navbar-vertical/si-navbar-vertical-header.component.d.ts +6 -0
  126. package/navbar-vertical/si-navbar-vertical-item-legacy.component.d.ts +17 -0
  127. package/navbar-vertical/si-navbar-vertical-item.component.d.ts +21 -0
  128. package/navbar-vertical/si-navbar-vertical.component.d.ts +148 -0
  129. package/navbar-vertical/si-navbar-vertical.model.d.ts +77 -0
  130. package/navbar-vertical/si-navbar-vertical.module.d.ts +7 -0
  131. package/navbar-vertical/si-navbar-vertical.provider.d.ts +7 -0
  132. package/package.json +93 -9
  133. package/password-strength/si-password-strength.directive.d.ts +11 -0
  134. package/phone-number/index.d.ts +7 -0
  135. package/phone-number/package.json +3 -0
  136. package/phone-number/si-phone-number-input-select.directive.d.ts +10 -0
  137. package/phone-number/si-phone-number-input.component.d.ts +137 -0
  138. package/phone-number/si-phone-number-input.models.d.ts +48 -0
  139. package/phone-number/si-phone-number-input.module.d.ts +7 -0
  140. package/resize-observer/si-resize-observer.directive.d.ts +3 -1
  141. package/result-details-list/index.d.ts +7 -0
  142. package/result-details-list/package.json +3 -0
  143. package/result-details-list/si-result-details-list.component.d.ts +14 -0
  144. package/result-details-list/si-result-details-list.datamodel.d.ts +48 -0
  145. package/result-details-list/si-result-details-list.module.d.ts +7 -0
  146. package/shadow-root/index.d.ts +5 -0
  147. package/shadow-root/package.json +3 -0
  148. package/shadow-root/si-shadow-root.directive.d.ts +39 -0
  149. package/side-panel/index.d.ts +9 -0
  150. package/side-panel/package.json +3 -0
  151. package/side-panel/si-side-panel-content.component.d.ts +105 -0
  152. package/side-panel/si-side-panel.component.d.ts +108 -0
  153. package/side-panel/si-side-panel.module.d.ts +8 -0
  154. package/side-panel/si-side-panel.service.d.ts +45 -0
  155. package/side-panel/side-panel.model.d.ts +16 -0
  156. package/status-bar/index.d.ts +7 -0
  157. package/status-bar/package.json +3 -0
  158. package/status-bar/si-status-bar-item/index.d.ts +6 -0
  159. package/status-bar/si-status-bar-item/si-status-bar-item.component.d.ts +22 -0
  160. package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +33 -0
  161. package/status-bar/si-status-bar.component.d.ts +116 -0
  162. package/status-bar/si-status-bar.module.d.ts +7 -0
  163. package/tabs-next/index.d.ts +7 -0
  164. package/tabs-next/package.json +3 -0
  165. package/tabs-next/si-tab-next-base.directive.d.ts +63 -0
  166. package/tabs-next/si-tab-next-link.component.d.ts +16 -0
  167. package/tabs-next/si-tab-next.component.d.ts +16 -0
  168. package/tabs-next/si-tabs-tokens.d.ts +7 -0
  169. package/tabs-next/si-tabset-next.component.d.ts +57 -0
  170. package/template-i18n.json +45 -0
  171. package/threshold/index.d.ts +6 -0
  172. package/threshold/package.json +3 -0
  173. package/threshold/si-readonly-threshold-option.component.d.ts +11 -0
  174. package/threshold/si-threshold.component.d.ts +147 -0
  175. package/threshold/si-threshold.module.d.ts +7 -0
  176. package/tour/index.d.ts +6 -0
  177. package/tour/package.json +3 -0
  178. package/tour/si-tour-highlight.component.d.ts +15 -0
  179. package/tour/si-tour-token.model.d.ts +27 -0
  180. package/tour/si-tour.component.d.ts +31 -0
  181. package/tour/si-tour.model.d.ts +51 -0
  182. package/tour/si-tour.service.d.ts +62 -0
  183. package/translate/si-translatable-keys.interface.d.ts +45 -0
  184. package/tree-view/drag-drop.util.d.ts +32 -0
  185. package/tree-view/index.d.ts +12 -0
  186. package/tree-view/package.json +3 -0
  187. package/tree-view/si-tree-view-converter.service.d.ts +41 -0
  188. package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +105 -0
  189. package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +24 -0
  190. package/tree-view/si-tree-view-item-context.d.ts +11 -0
  191. package/tree-view/si-tree-view-item-height.service.d.ts +49 -0
  192. package/tree-view/si-tree-view-item-template.directive.d.ts +18 -0
  193. package/tree-view/si-tree-view-virtualization.service.d.ts +150 -0
  194. package/tree-view/si-tree-view.component.d.ts +466 -0
  195. package/tree-view/si-tree-view.model.d.ts +146 -0
  196. package/tree-view/si-tree-view.module.d.ts +10 -0
  197. package/tree-view/si-tree-view.service.d.ts +55 -0
  198. package/tree-view/si-tree-view.utils.d.ts +46 -0
@@ -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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n inject,\n InjectionToken,\n input\n} from '@angular/core';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\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 templateUrl: './si-loading-spinner.component.html',\n styleUrl: './si-loading-spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('fadeAnimation', [\n transition(':enter', [style({ opacity: 0 }), animate('200ms ease-in')]),\n transition(':leave', animate('200ms ease-out', style({ opacity: 0 })))\n ])\n ],\n imports: [SiTranslateModule]\n})\nexport class SiLoadingSpinnerComponent {\n @HostBinding('@fadeAnimation') protected fadeAnimation = '';\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 * $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`\n * ```\n */\n readonly ariaLabel = input($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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslateModule, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\n\n@Component({\n selector: 'si-loading-button',\n templateUrl: './si-loading-button.component.html',\n styleUrl: './si-loading-button.component.scss',\n imports: [SiLoadingSpinnerComponent, NgClass, SiTranslateModule],\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 [ngClass]=\"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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n Injector,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n StaticProvider\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 appRef = inject(ApplicationRef);\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 compPortal = new ComponentPortal(SiLoadingSpinnerComponent);\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 const providers: StaticProvider[] = [\n { provide: LOADING_SPINNER_BLOCKING, useValue: this.blocking() },\n {\n provide: LOADING_SPINNER_OVERLAY,\n useValue: true\n }\n ];\n const outlet = new DomPortalOutlet(\n this.el.nativeElement,\n undefined,\n this.appRef,\n Injector.create({ providers })\n );\n this.compPortal.attach(outlet);\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 });\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 }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n inject,\n InjectionToken,\n input\n} from '@angular/core';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\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 templateUrl: './si-loading-spinner.component.html',\n styleUrl: './si-loading-spinner.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('fadeAnimation', [\n transition(':enter', [style({ opacity: 0 }), animate('200ms ease-in')]),\n transition(':leave', animate('200ms ease-out', style({ opacity: 0 })))\n ])\n ],\n imports: [SiTranslateModule]\n})\nexport class SiLoadingSpinnerComponent {\n @HostBinding('@fadeAnimation') protected fadeAnimation = '';\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 * $localize`:@@SI_LOADING_SPINNER.LABEL:Loading`\n * ```\n */\n readonly ariaLabel = input($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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslateModule, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLoadingSpinnerComponent } from './si-loading-spinner.component';\n\n@Component({\n selector: 'si-loading-button',\n templateUrl: './si-loading-button.component.html',\n styleUrl: './si-loading-button.component.scss',\n imports: [SiLoadingSpinnerComponent, NgClass, SiTranslateModule],\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 [ngClass]=\"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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\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\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 });\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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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"}
@@ -0,0 +1,269 @@
1
+ import { NgClass, NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, ElementRef, ChangeDetectorRef, input, output, model, booleanAttribute, computed, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
4
+ import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
5
+ import { SiSplitComponent, SiSplitPartComponent } from '@siemens/element-ng/split';
6
+ import * as i1 from '@siemens/element-translate-ng/translate';
7
+ import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
8
+
9
+ /**
10
+ * Copyright Siemens 2016 - 2025.
11
+ * SPDX-License-Identifier: MIT
12
+ */
13
+ class SiMainDetailContainerComponent {
14
+ animationDuration = 500;
15
+ resizeSubs;
16
+ elementRef = inject(ElementRef);
17
+ resizeObserver = inject(ResizeObserverService);
18
+ changeDetectorRef = inject(ChangeDetectorRef);
19
+ /**
20
+ * A numeric value defining the minimum width in px, which the container needs
21
+ * to be displayed in its large layout. Whenever smaller than
22
+ * this threshold, the small layout will be used. Default is
23
+ * value is BOOTSTRAP_BREAKPOINTS.mdMinimum.
24
+ *
25
+ * @defaultValue BOOTSTRAP_BREAKPOINTS.mdMinimum
26
+ */
27
+ largeLayoutBreakpoint = input(BOOTSTRAP_BREAKPOINTS.mdMinimum);
28
+ /**
29
+ * Whether the main-detail layout component has a large size or not,
30
+ * `true` if the container´s width matches or exceeds the `largeLayoutBreakpoint`.
31
+ */
32
+ hasLargeSize;
33
+ /**
34
+ * Emits whether the components size is large enough to display
35
+ * main and details views next to each other or not.
36
+ */
37
+ hasLargeSizeChange = output();
38
+ /**
39
+ * Whether the details are currently active or not, mostly relevant in the
40
+ * responsive scenario when the viewport only shows either the main or the detail.
41
+ *
42
+ * @defaultValue false
43
+ */
44
+ detailsActive = model(false);
45
+ /**
46
+ * The heading of the main-detail layout component, usually a page heading.
47
+ *
48
+ * @defaultValue ''
49
+ */
50
+ heading = input('');
51
+ /**
52
+ * Whether the heading should be truncated (single line) or not.
53
+ * Default value is `false`.
54
+ *
55
+ * @defaultValue false
56
+ */
57
+ truncateHeading = input(false, { transform: booleanAttribute });
58
+ /**
59
+ * The heading of the detail area.
60
+ *
61
+ * @defaultValue ''
62
+ */
63
+ detailsHeading = input('');
64
+ /**
65
+ * Whether the main and detail parts should be resizable by a splitter or not.
66
+ * This is only supported in the 'large' scenario (when `hasLargeSize` is `true`).
67
+ * Default value is `false`.
68
+ *
69
+ * @defaultValue false
70
+ */
71
+ resizableParts = input(false, { transform: booleanAttribute });
72
+ /**
73
+ * You can hide the back button in the mobile view by setting true. Required
74
+ * in add, edit workflows on mobile sizes. During add or edit, the back button
75
+ * should be hidden. Default value is `false`.
76
+ *
77
+ * @defaultValue false
78
+ */
79
+ hideBackButton = input(false, { transform: booleanAttribute });
80
+ /**
81
+ * Details back button text. Required for a11y.
82
+ *
83
+ * @defaultValue
84
+ * ```
85
+ * $localize`:@@SI_MAIN_DETAIL_CONTAINER.BACK:Back`
86
+ * ```
87
+ */
88
+ detailsBackButtonText = input($localize `:@@SI_MAIN_DETAIL_CONTAINER.BACK:Back`);
89
+ /**
90
+ * CSS class(es) applied to the outermost container. Per default, Bootstrap classes
91
+ * to handle responsive paddings are applied: `px-6 pt-6 px-md-9`.
92
+ *
93
+ * @defaultValue 'px-6 pt-6 px-md-9'
94
+ */
95
+ containerClass = input('px-6 pt-6 px-md-9');
96
+ /**
97
+ * CSS class(es) applied to the main container. In combination with `containerClass`,
98
+ * this allows for settings individual padding and margin values on the individual containers.
99
+ *
100
+ * @defaultValue 'pb-6'
101
+ */
102
+ mainContainerClass = input('pb-6');
103
+ /**
104
+ * CSS class(es) applied to the detail container. In combination with `containerClass`,
105
+ * this allows for settings individual padding and margin values on the individual containers.
106
+ *
107
+ * @defaultValue 'pb-6'
108
+ */
109
+ detailContainerClass = input('pb-6');
110
+ /**
111
+ * The percentage width of the main container from the overall component width.
112
+ * Can be a number or `'default'`, which is 32% when {@link resizableParts} is active, otherwise 50%.
113
+ *
114
+ * @defaultValue 'default'
115
+ */
116
+ mainContainerWidth = model('default');
117
+ /**
118
+ * Sets the minimal width of the main container in pixel.
119
+ *
120
+ * @defaultValue 300
121
+ */
122
+ minMainSize = input(300);
123
+ /**
124
+ * Sets the minimal width of the detail container in pixel.
125
+ *
126
+ * @defaultValue 300
127
+ */
128
+ minDetailSize = input(300);
129
+ /**
130
+ * An optional stateId to uniquely identify a component instance.
131
+ * Required for persistence of ui state.
132
+ */
133
+ stateId = input();
134
+ /**
135
+ * The attribute is set to true when the detail area is not visible to ensure that the user
136
+ * can't tab to details area when it is hidden.
137
+ */
138
+ preventFocusDetails = false;
139
+ actualMainContainerWidth = computed(() => {
140
+ const mainContainerWidth = this.mainContainerWidth();
141
+ return mainContainerWidth === 'default'
142
+ ? this.resizableParts()
143
+ ? 32
144
+ : 50
145
+ : mainContainerWidth;
146
+ });
147
+ splitSizes = [
148
+ this.actualMainContainerWidth(),
149
+ 100 - this.actualMainContainerWidth()
150
+ ];
151
+ // The max size to limit the main container in the static flex layout (if less than 50%), otherwise not set.
152
+ maxMainSize = this.getMaxSize(0);
153
+ // The max size to limit the detail container in the static flex layout (if less than 50%), otherwise not set.
154
+ maxDetailSize = this.getMaxSize(1);
155
+ mainStateId = computed(() => {
156
+ const stateId = this.stateId();
157
+ return stateId ? `${stateId}-main` : undefined;
158
+ });
159
+ detailStateId = computed(() => {
160
+ const stateId = this.stateId();
161
+ return stateId ? `${stateId}-detail` : undefined;
162
+ });
163
+ animate = false;
164
+ opacity = '0';
165
+ ngOnChanges(changes) {
166
+ if (changes.detailsActive) {
167
+ this.updateDetailsFocusable();
168
+ this.doAnimation(changes.detailsActive.currentValue);
169
+ }
170
+ if (changes.mainContainerWidth || changes.resizableParts) {
171
+ this.splitSizes = [this.actualMainContainerWidth(), 100 - this.actualMainContainerWidth()];
172
+ this.maxMainSize = this.getMaxSize(0);
173
+ this.maxDetailSize = this.getMaxSize(1);
174
+ }
175
+ }
176
+ ngOnInit() {
177
+ this.resizeSubs = this.resizeObserver
178
+ .observe(this.elementRef.nativeElement, 100, true)
179
+ .subscribe(dimensions => this.determineLayout(dimensions));
180
+ }
181
+ ngOnDestroy() {
182
+ this.resizeSubs?.unsubscribe();
183
+ }
184
+ onSplitSizesChange(sizes) {
185
+ this.mainContainerWidth.set(sizes[0]);
186
+ }
187
+ detailsBackClicked() {
188
+ this.detailsActive.set(false);
189
+ this.doAnimation(false);
190
+ }
191
+ /**
192
+ * Get the max size to limit in the static flex layout (if less than 50%), otherwise not set
193
+ */
194
+ getMaxSize(part) {
195
+ return this.resizableParts() ||
196
+ this.mainContainerWidth() === 'default' ||
197
+ !this.hasLargeSize ||
198
+ this.splitSizes[part] > 50
199
+ ? ''
200
+ : this.splitSizes[part] + '%';
201
+ }
202
+ determineLayout(dimensions) {
203
+ const newHasLargeSize = dimensions.width >= this.largeLayoutBreakpoint();
204
+ if (this.hasLargeSize !== newHasLargeSize) {
205
+ this.hasLargeSize = newHasLargeSize;
206
+ this.maxMainSize = this.getMaxSize(0);
207
+ this.maxDetailSize = this.getMaxSize(1);
208
+ this.updateDetailsFocusable();
209
+ this.hasLargeSizeChange.emit(this.hasLargeSize);
210
+ this.changeDetectorRef.markForCheck();
211
+ }
212
+ if (this.opacity === '0') {
213
+ this.opacity = '';
214
+ this.changeDetectorRef.markForCheck();
215
+ }
216
+ }
217
+ doAnimation(detailsActive) {
218
+ this.animate = true;
219
+ setTimeout(() => {
220
+ this.animate = false;
221
+ this.changeDetectorRef.markForCheck();
222
+ }, this.animationDuration);
223
+ this.detailsActive.set(detailsActive);
224
+ }
225
+ updateDetailsFocusable() {
226
+ this.preventFocusDetails = !this.hasLargeSize && !this.detailsActive();
227
+ }
228
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiMainDetailContainerComponent, isStandalone: true, selector: "si-main-detail-container", inputs: { largeLayoutBreakpoint: { classPropertyName: "largeLayoutBreakpoint", publicName: "largeLayoutBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, detailsActive: { classPropertyName: "detailsActive", publicName: "detailsActive", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, truncateHeading: { classPropertyName: "truncateHeading", publicName: "truncateHeading", isSignal: true, isRequired: false, transformFunction: null }, detailsHeading: { classPropertyName: "detailsHeading", publicName: "detailsHeading", isSignal: true, isRequired: false, transformFunction: null }, resizableParts: { classPropertyName: "resizableParts", publicName: "resizableParts", isSignal: true, isRequired: false, transformFunction: null }, hideBackButton: { classPropertyName: "hideBackButton", publicName: "hideBackButton", isSignal: true, isRequired: false, transformFunction: null }, detailsBackButtonText: { classPropertyName: "detailsBackButtonText", publicName: "detailsBackButtonText", isSignal: true, isRequired: false, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: true, isRequired: false, transformFunction: null }, mainContainerClass: { classPropertyName: "mainContainerClass", publicName: "mainContainerClass", isSignal: true, isRequired: false, transformFunction: null }, detailContainerClass: { classPropertyName: "detailContainerClass", publicName: "detailContainerClass", isSignal: true, isRequired: false, transformFunction: null }, mainContainerWidth: { classPropertyName: "mainContainerWidth", publicName: "mainContainerWidth", isSignal: true, isRequired: false, transformFunction: null }, minMainSize: { classPropertyName: "minMainSize", publicName: "minMainSize", isSignal: true, isRequired: false, transformFunction: null }, minDetailSize: { classPropertyName: "minDetailSize", publicName: "minDetailSize", isSignal: true, isRequired: false, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { hasLargeSizeChange: "hasLargeSizeChange", detailsActive: "detailsActiveChange", mainContainerWidth: "mainContainerWidthChange" }, host: { properties: { "class.animate": "this.animate", "style.opacity": "this.opacity" }, classAttribute: "si-layout-inner" }, usesOnChanges: true, ngImport: i0, template: "@if (resizableParts() && hasLargeSize) {\n <div class=\"main-detail-layout d-flex flex-column\" [ngClass]=\"containerClass()\">\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <si-split\n class=\"w-100 flex-grow-1\"\n orientation=\"horizontal\"\n [stateId]=\"stateId()\"\n [sizes]=\"splitSizes\"\n (sizesChange)=\"onSplitSizesChange($event)\"\n >\n <si-split-part\n scale=\"none\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minMainSize()\"\n [stateId]=\"mainStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"mainTemplate\" />\n </si-split-part>\n <si-split-part\n scale=\"auto\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minDetailSize()\"\n [stateId]=\"detailStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"detailTemplate\" />\n </si-split-part>\n </si-split>\n </div>\n} @else {\n <div\n class=\"main-detail-layout d-flex flex-column\"\n [ngClass]=\"containerClass()\"\n [class.large-size]=\"hasLargeSize\"\n >\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <div\n class=\"main-detail-container d-flex flex-grow-1\"\n [class.details-active]=\"detailsActive() && !hasLargeSize\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n mainTemplate;\n context: { customClass: hasLargeSize ? 'col-3 ps-0 pe-4' : 'col-6 px-0' }\n \"\n />\n <ng-container\n *ngTemplateOutlet=\"\n detailTemplate;\n context: { customClass: hasLargeSize ? 'col-9 ps-4 pe-0' : 'col-6 px-0' }\n \"\n />\n </div>\n </div>\n}\n\n<!-- Templates -->\n<ng-template #headingTemplate>\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\" [class.text-truncate]=\"truncateHeading()\">{{\n heading() | translate\n }}</h2>\n </div>\n }\n</ng-template>\n\n<ng-template #mainTemplate let-customClass=\"customClass\">\n <div\n class=\"main-container d-flex flex-column\"\n [ngClass]=\"[mainContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxMainSize\"\n >\n <div class=\"main-search-actions d-flex align-items-center\">\n <ng-content select=\"[slot=mainSearch]\" />\n <ng-content select=\"[slot=mainActions]\" />\n </div>\n <div class=\"main-data-container d-flex\">\n <ng-content select=\"[slot=mainData]\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #detailTemplate let-customClass=\"customClass\">\n <div\n class=\"detail-container d-flex flex-column\"\n [ngClass]=\"[detailContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxDetailSize\"\n [attr.inert]=\"preventFocusDetails ? '' : null\"\n >\n <div class=\"detail-heading-actions d-flex align-items-center\">\n @if (!this.hasLargeSize && !this.hideBackButton()) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-secondary element-back\"\n (click)=\"detailsBackClicked()\"\n ><span class=\"visually-hidden\">{{ detailsBackButtonText() | translate }}</span></button\n >\n }\n @if (detailsHeading()) {\n <span class=\"detail-heading si-title-1 me-auto ms-6 my-auto text-truncate\">{{\n detailsHeading() | translate\n }}</span>\n }\n <ng-content select=\"[slot=detailActions]\" />\n </div>\n <ng-content select=\"[slot=details]\" />\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;overflow-x:hidden;overflow-y:auto}:host ::ng-deep [slot=mainSearch]{flex:1 1 0}:host ::ng-deep [slot=mainSearch]+[slot=mainActions]{margin-inline-start:12px}:host ::ng-deep [slot=mainActions]{margin-inline-start:auto}:host ::ng-deep [slot=mainData],:host ::ng-deep [slot=details]{flex:1 1 0;min-block-size:0}:host ::ng-deep [slot=detailActions]{margin-inline-start:auto}:host ::ng-deep .detail-heading+[slot=detailActions]{margin-inline-start:12px}:host ::ng-deep si-split{--si-split-gutter-background: transparent;min-block-size:0}:host ::ng-deep si-split si-split-part,:host ::ng-deep si-split .si-split-container,:host ::ng-deep si-split .si-split-part-content{overflow:visible}:host.animate{--si-main-detail-animation-duration: calc(.5s * var(--element-animations-enabled, 1))}.main-detail-layout{overflow-x:hidden;position:relative}.main-detail-layout.large-size{--si-main-detail-container-width: 100%;--si-main-detail-container-transition: none;--si-main-detail-container-transform: none;--si-main-detail-transition: none;--si-main-detail-opacity: 1;--si-main-detail-pointer-events: auto}.main-detail-container{--si-main-detail-transition: opacity var(--si-main-detail-animation-duration, 0) ease-in-out;--si-main-detail-detail-opacity: 0;--si-main-detail-detail-pointer-events: none;inline-size:var(--si-main-detail-container-width, 200%);transform:var(--si-main-detail-container-transform, none);transform-origin:top left;transition:var(--si-main-detail-container-transition, transform var(--si-main-detail-animation-duration, 0) ease-in-out)}.main-detail-container.details-active{--si-main-detail-container-transform: translateX(-50%);--si-main-detail-main-opacity: 0;--si-main-detail-detail-opacity: 1;--si-main-detail-main-pointer-events: none;--si-main-detail-detail-pointer-events: auto}.main-detail-layout,.main-detail-container,.main-container,.detail-container,.main-data-container{flex:1 1 0;min-block-size:0}.main-container,.detail-container{transition:var(--si-main-detail-transition, none)}.main-container{opacity:var(--si-main-detail-opacity, var(--si-main-detail-main-opacity, 1));pointer-events:var(--si-main-detail-pointer-events, var(--si-main-detail-main-pointer-events, auto))}.detail-container{opacity:var(--si-main-detail-opacity, var(--si-main-detail-detail-opacity, 1));pointer-events:var(--si-main-detail-pointer-events, var(--si-main-detail-detail-pointer-events, auto))}.main-search-actions:not(:empty){min-block-size:32px;margin-block-end:16px}.detail-heading-actions:not(:empty){min-block-size:32px;margin-block-end:16px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiSplitComponent, selector: "si-split", inputs: ["gutterSize", "orientation", "sizes", "stateId"], outputs: ["sizesChange"] }, { kind: "component", type: SiSplitPartComponent, selector: "si-split-part", inputs: ["actions", "collapseDirection", "collapseIconClass", "collapseToMinSize", "headerStatusColor", "headerStatusIconClass", "headerTemplate", "heading", "minSize", "removeContentOnCollapse", "scale", "showCollapseButton", "showHeader", "collapseLabel", "stateId", "size", "collapseOthers", "expanded"], outputs: ["collapseChanged", "stateChange"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
230
+ }
231
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerComponent, decorators: [{
232
+ type: Component,
233
+ args: [{ selector: 'si-main-detail-container', host: { class: 'si-layout-inner' }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, NgTemplateOutlet, SiSplitComponent, SiSplitPartComponent, SiTranslateModule], template: "@if (resizableParts() && hasLargeSize) {\n <div class=\"main-detail-layout d-flex flex-column\" [ngClass]=\"containerClass()\">\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <si-split\n class=\"w-100 flex-grow-1\"\n orientation=\"horizontal\"\n [stateId]=\"stateId()\"\n [sizes]=\"splitSizes\"\n (sizesChange)=\"onSplitSizesChange($event)\"\n >\n <si-split-part\n scale=\"none\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minMainSize()\"\n [stateId]=\"mainStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"mainTemplate\" />\n </si-split-part>\n <si-split-part\n scale=\"auto\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minDetailSize()\"\n [stateId]=\"detailStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"detailTemplate\" />\n </si-split-part>\n </si-split>\n </div>\n} @else {\n <div\n class=\"main-detail-layout d-flex flex-column\"\n [ngClass]=\"containerClass()\"\n [class.large-size]=\"hasLargeSize\"\n >\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <div\n class=\"main-detail-container d-flex flex-grow-1\"\n [class.details-active]=\"detailsActive() && !hasLargeSize\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n mainTemplate;\n context: { customClass: hasLargeSize ? 'col-3 ps-0 pe-4' : 'col-6 px-0' }\n \"\n />\n <ng-container\n *ngTemplateOutlet=\"\n detailTemplate;\n context: { customClass: hasLargeSize ? 'col-9 ps-4 pe-0' : 'col-6 px-0' }\n \"\n />\n </div>\n </div>\n}\n\n<!-- Templates -->\n<ng-template #headingTemplate>\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\" [class.text-truncate]=\"truncateHeading()\">{{\n heading() | translate\n }}</h2>\n </div>\n }\n</ng-template>\n\n<ng-template #mainTemplate let-customClass=\"customClass\">\n <div\n class=\"main-container d-flex flex-column\"\n [ngClass]=\"[mainContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxMainSize\"\n >\n <div class=\"main-search-actions d-flex align-items-center\">\n <ng-content select=\"[slot=mainSearch]\" />\n <ng-content select=\"[slot=mainActions]\" />\n </div>\n <div class=\"main-data-container d-flex\">\n <ng-content select=\"[slot=mainData]\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #detailTemplate let-customClass=\"customClass\">\n <div\n class=\"detail-container d-flex flex-column\"\n [ngClass]=\"[detailContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxDetailSize\"\n [attr.inert]=\"preventFocusDetails ? '' : null\"\n >\n <div class=\"detail-heading-actions d-flex align-items-center\">\n @if (!this.hasLargeSize && !this.hideBackButton()) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-secondary element-back\"\n (click)=\"detailsBackClicked()\"\n ><span class=\"visually-hidden\">{{ detailsBackButtonText() | translate }}</span></button\n >\n }\n @if (detailsHeading()) {\n <span class=\"detail-heading si-title-1 me-auto ms-6 my-auto text-truncate\">{{\n detailsHeading() | translate\n }}</span>\n }\n <ng-content select=\"[slot=detailActions]\" />\n </div>\n <ng-content select=\"[slot=details]\" />\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;overflow-x:hidden;overflow-y:auto}:host ::ng-deep [slot=mainSearch]{flex:1 1 0}:host ::ng-deep [slot=mainSearch]+[slot=mainActions]{margin-inline-start:12px}:host ::ng-deep [slot=mainActions]{margin-inline-start:auto}:host ::ng-deep [slot=mainData],:host ::ng-deep [slot=details]{flex:1 1 0;min-block-size:0}:host ::ng-deep [slot=detailActions]{margin-inline-start:auto}:host ::ng-deep .detail-heading+[slot=detailActions]{margin-inline-start:12px}:host ::ng-deep si-split{--si-split-gutter-background: transparent;min-block-size:0}:host ::ng-deep si-split si-split-part,:host ::ng-deep si-split .si-split-container,:host ::ng-deep si-split .si-split-part-content{overflow:visible}:host.animate{--si-main-detail-animation-duration: calc(.5s * var(--element-animations-enabled, 1))}.main-detail-layout{overflow-x:hidden;position:relative}.main-detail-layout.large-size{--si-main-detail-container-width: 100%;--si-main-detail-container-transition: none;--si-main-detail-container-transform: none;--si-main-detail-transition: none;--si-main-detail-opacity: 1;--si-main-detail-pointer-events: auto}.main-detail-container{--si-main-detail-transition: opacity var(--si-main-detail-animation-duration, 0) ease-in-out;--si-main-detail-detail-opacity: 0;--si-main-detail-detail-pointer-events: none;inline-size:var(--si-main-detail-container-width, 200%);transform:var(--si-main-detail-container-transform, none);transform-origin:top left;transition:var(--si-main-detail-container-transition, transform var(--si-main-detail-animation-duration, 0) ease-in-out)}.main-detail-container.details-active{--si-main-detail-container-transform: translateX(-50%);--si-main-detail-main-opacity: 0;--si-main-detail-detail-opacity: 1;--si-main-detail-main-pointer-events: none;--si-main-detail-detail-pointer-events: auto}.main-detail-layout,.main-detail-container,.main-container,.detail-container,.main-data-container{flex:1 1 0;min-block-size:0}.main-container,.detail-container{transition:var(--si-main-detail-transition, none)}.main-container{opacity:var(--si-main-detail-opacity, var(--si-main-detail-main-opacity, 1));pointer-events:var(--si-main-detail-pointer-events, var(--si-main-detail-main-pointer-events, auto))}.detail-container{opacity:var(--si-main-detail-opacity, var(--si-main-detail-detail-opacity, 1));pointer-events:var(--si-main-detail-pointer-events, var(--si-main-detail-detail-pointer-events, auto))}.main-search-actions:not(:empty){min-block-size:32px;margin-block-end:16px}.detail-heading-actions:not(:empty){min-block-size:32px;margin-block-end:16px}\n"] }]
234
+ }], propDecorators: { animate: [{
235
+ type: HostBinding,
236
+ args: ['class.animate']
237
+ }], opacity: [{
238
+ type: HostBinding,
239
+ args: ['style.opacity']
240
+ }] } });
241
+
242
+ /**
243
+ * Copyright Siemens 2016 - 2025.
244
+ * SPDX-License-Identifier: MIT
245
+ */
246
+ class SiMainDetailContainerModule {
247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
248
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerModule, imports: [SiMainDetailContainerComponent], exports: [SiMainDetailContainerComponent] });
249
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerModule, imports: [SiMainDetailContainerComponent] });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiMainDetailContainerModule, decorators: [{
252
+ type: NgModule,
253
+ args: [{
254
+ imports: [SiMainDetailContainerComponent],
255
+ exports: [SiMainDetailContainerComponent]
256
+ }]
257
+ }] });
258
+
259
+ /**
260
+ * Copyright Siemens 2016 - 2025.
261
+ * SPDX-License-Identifier: MIT
262
+ */
263
+
264
+ /**
265
+ * Generated bundle index. Do not edit.
266
+ */
267
+
268
+ export { SiMainDetailContainerComponent, SiMainDetailContainerModule };
269
+ //# sourceMappingURL=siemens-element-ng-main-detail-container.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siemens-element-ng-main-detail-container.mjs","sources":["../../../../projects/element-ng/main-detail-container/si-main-detail-container.component.ts","../../../../projects/element-ng/main-detail-container/si-main-detail-container.component.html","../../../../projects/element-ng/main-detail-container/si-main-detail-container.module.ts","../../../../projects/element-ng/main-detail-container/index.ts","../../../../projects/element-ng/main-detail-container/siemens-element-ng-main-detail-container.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n SimpleChanges\n} from '@angular/core';\nimport {\n BOOTSTRAP_BREAKPOINTS,\n ElementDimensions,\n ResizeObserverService\n} from '@siemens/element-ng/resize-observer';\nimport { SiSplitComponent, SiSplitPartComponent } from '@siemens/element-ng/split';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'si-main-detail-container',\n templateUrl: './si-main-detail-container.component.html',\n styleUrl: './si-main-detail-container.component.scss',\n host: { class: 'si-layout-inner' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass, NgTemplateOutlet, SiSplitComponent, SiSplitPartComponent, SiTranslateModule]\n})\nexport class SiMainDetailContainerComponent implements OnInit, OnChanges, OnDestroy {\n private animationDuration = 500;\n private resizeSubs?: Subscription;\n private elementRef = inject(ElementRef);\n private resizeObserver = inject(ResizeObserverService);\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * A numeric value defining the minimum width in px, which the container needs\n * to be displayed in its large layout. Whenever smaller than\n * this threshold, the small layout will be used. Default is\n * value is BOOTSTRAP_BREAKPOINTS.mdMinimum.\n *\n * @defaultValue BOOTSTRAP_BREAKPOINTS.mdMinimum\n */\n readonly largeLayoutBreakpoint = input(BOOTSTRAP_BREAKPOINTS.mdMinimum);\n\n /**\n * Whether the main-detail layout component has a large size or not,\n * `true` if the container´s width matches or exceeds the `largeLayoutBreakpoint`.\n */\n hasLargeSize!: boolean;\n\n /**\n * Emits whether the components size is large enough to display\n * main and details views next to each other or not.\n */\n readonly hasLargeSizeChange = output<boolean>();\n\n /**\n * Whether the details are currently active or not, mostly relevant in the\n * responsive scenario when the viewport only shows either the main or the detail.\n *\n * @defaultValue false\n */\n readonly detailsActive = model(false);\n\n /**\n * The heading of the main-detail layout component, usually a page heading.\n *\n * @defaultValue ''\n */\n readonly heading = input('');\n\n /**\n * Whether the heading should be truncated (single line) or not.\n * Default value is `false`.\n *\n * @defaultValue false\n */\n readonly truncateHeading = input(false, { transform: booleanAttribute });\n\n /**\n * The heading of the detail area.\n *\n * @defaultValue ''\n */\n readonly detailsHeading = input('');\n\n /**\n * Whether the main and detail parts should be resizable by a splitter or not.\n * This is only supported in the 'large' scenario (when `hasLargeSize` is `true`).\n * Default value is `false`.\n *\n * @defaultValue false\n */\n readonly resizableParts = input(false, { transform: booleanAttribute });\n\n /**\n * You can hide the back button in the mobile view by setting true. Required\n * in add, edit workflows on mobile sizes. During add or edit, the back button\n * should be hidden. Default value is `false`.\n *\n * @defaultValue false\n */\n readonly hideBackButton = input(false, { transform: booleanAttribute });\n\n /**\n * Details back button text. Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_MAIN_DETAIL_CONTAINER.BACK:Back`\n * ```\n */\n readonly detailsBackButtonText = input($localize`:@@SI_MAIN_DETAIL_CONTAINER.BACK:Back`);\n\n /**\n * CSS class(es) applied to the outermost container. Per default, Bootstrap classes\n * to handle responsive paddings are applied: `px-6 pt-6 px-md-9`.\n *\n * @defaultValue 'px-6 pt-6 px-md-9'\n */\n readonly containerClass = input('px-6 pt-6 px-md-9');\n\n /**\n * CSS class(es) applied to the main container. In combination with `containerClass`,\n * this allows for settings individual padding and margin values on the individual containers.\n *\n * @defaultValue 'pb-6'\n */\n readonly mainContainerClass = input('pb-6');\n\n /**\n * CSS class(es) applied to the detail container. In combination with `containerClass`,\n * this allows for settings individual padding and margin values on the individual containers.\n *\n * @defaultValue 'pb-6'\n */\n readonly detailContainerClass = input('pb-6');\n\n /**\n * The percentage width of the main container from the overall component width.\n * Can be a number or `'default'`, which is 32% when {@link resizableParts} is active, otherwise 50%.\n *\n * @defaultValue 'default'\n */\n readonly mainContainerWidth = model<number | 'default'>('default');\n /**\n * Sets the minimal width of the main container in pixel.\n *\n * @defaultValue 300\n */\n readonly minMainSize = input(300);\n /**\n * Sets the minimal width of the detail container in pixel.\n *\n * @defaultValue 300\n */\n readonly minDetailSize = input(300);\n /**\n * An optional stateId to uniquely identify a component instance.\n * Required for persistence of ui state.\n */\n readonly stateId = input<string>();\n\n /**\n * The attribute is set to true when the detail area is not visible to ensure that the user\n * can't tab to details area when it is hidden.\n */\n protected preventFocusDetails = false;\n\n private readonly actualMainContainerWidth = computed(() => {\n const mainContainerWidth = this.mainContainerWidth();\n return mainContainerWidth === 'default'\n ? this.resizableParts()\n ? 32\n : 50\n : mainContainerWidth;\n });\n\n protected splitSizes: [number, number] = [\n this.actualMainContainerWidth(),\n 100 - this.actualMainContainerWidth()\n ];\n // The max size to limit the main container in the static flex layout (if less than 50%), otherwise not set.\n protected maxMainSize: string = this.getMaxSize(0);\n // The max size to limit the detail container in the static flex layout (if less than 50%), otherwise not set.\n protected maxDetailSize: string = this.getMaxSize(1);\n\n protected readonly mainStateId = computed(() => {\n const stateId = this.stateId();\n return stateId ? `${stateId}-main` : undefined;\n });\n\n protected readonly detailStateId = computed(() => {\n const stateId = this.stateId();\n return stateId ? `${stateId}-detail` : undefined;\n });\n\n @HostBinding('class.animate') protected animate = false;\n\n @HostBinding('style.opacity') protected opacity = '0';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.detailsActive) {\n this.updateDetailsFocusable();\n this.doAnimation(changes.detailsActive.currentValue);\n }\n if (changes.mainContainerWidth || changes.resizableParts) {\n this.splitSizes = [this.actualMainContainerWidth(), 100 - this.actualMainContainerWidth()];\n this.maxMainSize = this.getMaxSize(0);\n this.maxDetailSize = this.getMaxSize(1);\n }\n }\n\n ngOnInit(): void {\n this.resizeSubs = this.resizeObserver\n .observe(this.elementRef.nativeElement, 100, true)\n .subscribe(dimensions => this.determineLayout(dimensions));\n }\n\n ngOnDestroy(): void {\n this.resizeSubs?.unsubscribe();\n }\n\n protected onSplitSizesChange(sizes: number[]): void {\n this.mainContainerWidth.set(sizes[0]);\n }\n\n protected detailsBackClicked(): void {\n this.detailsActive.set(false);\n this.doAnimation(false);\n }\n\n /**\n * Get the max size to limit in the static flex layout (if less than 50%), otherwise not set\n */\n private getMaxSize(part: 0 | 1): string {\n return this.resizableParts() ||\n this.mainContainerWidth() === 'default' ||\n !this.hasLargeSize ||\n this.splitSizes[part] > 50\n ? ''\n : this.splitSizes[part] + '%';\n }\n\n private determineLayout(dimensions: ElementDimensions): void {\n const newHasLargeSize = dimensions.width >= this.largeLayoutBreakpoint();\n if (this.hasLargeSize !== newHasLargeSize) {\n this.hasLargeSize = newHasLargeSize;\n this.maxMainSize = this.getMaxSize(0);\n this.maxDetailSize = this.getMaxSize(1);\n this.updateDetailsFocusable();\n this.hasLargeSizeChange.emit(this.hasLargeSize);\n this.changeDetectorRef.markForCheck();\n }\n if (this.opacity === '0') {\n this.opacity = '';\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private doAnimation(detailsActive: boolean): void {\n this.animate = true;\n setTimeout(() => {\n this.animate = false;\n this.changeDetectorRef.markForCheck();\n }, this.animationDuration);\n this.detailsActive.set(detailsActive);\n }\n\n private updateDetailsFocusable(): void {\n this.preventFocusDetails = !this.hasLargeSize && !this.detailsActive();\n }\n}\n","@if (resizableParts() && hasLargeSize) {\n <div class=\"main-detail-layout d-flex flex-column\" [ngClass]=\"containerClass()\">\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <si-split\n class=\"w-100 flex-grow-1\"\n orientation=\"horizontal\"\n [stateId]=\"stateId()\"\n [sizes]=\"splitSizes\"\n (sizesChange)=\"onSplitSizesChange($event)\"\n >\n <si-split-part\n scale=\"none\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minMainSize()\"\n [stateId]=\"mainStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"mainTemplate\" />\n </si-split-part>\n <si-split-part\n scale=\"auto\"\n [showCollapseButton]=\"false\"\n [showHeader]=\"false\"\n [minSize]=\"minDetailSize()\"\n [stateId]=\"detailStateId()\"\n >\n <ng-container *ngTemplateOutlet=\"detailTemplate\" />\n </si-split-part>\n </si-split>\n </div>\n} @else {\n <div\n class=\"main-detail-layout d-flex flex-column\"\n [ngClass]=\"containerClass()\"\n [class.large-size]=\"hasLargeSize\"\n >\n <ng-container *ngTemplateOutlet=\"headingTemplate\" />\n <div\n class=\"main-detail-container d-flex flex-grow-1\"\n [class.details-active]=\"detailsActive() && !hasLargeSize\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n mainTemplate;\n context: { customClass: hasLargeSize ? 'col-3 ps-0 pe-4' : 'col-6 px-0' }\n \"\n />\n <ng-container\n *ngTemplateOutlet=\"\n detailTemplate;\n context: { customClass: hasLargeSize ? 'col-9 ps-4 pe-0' : 'col-6 px-0' }\n \"\n />\n </div>\n </div>\n}\n\n<!-- Templates -->\n<ng-template #headingTemplate>\n @if (heading()) {\n <div class=\"si-layout-header\">\n <h2 class=\"si-layout-title si-layout-top-element\" [class.text-truncate]=\"truncateHeading()\">{{\n heading() | translate\n }}</h2>\n </div>\n }\n</ng-template>\n\n<ng-template #mainTemplate let-customClass=\"customClass\">\n <div\n class=\"main-container d-flex flex-column\"\n [ngClass]=\"[mainContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxMainSize\"\n >\n <div class=\"main-search-actions d-flex align-items-center\">\n <ng-content select=\"[slot=mainSearch]\" />\n <ng-content select=\"[slot=mainActions]\" />\n </div>\n <div class=\"main-data-container d-flex\">\n <ng-content select=\"[slot=mainData]\" />\n </div>\n </div>\n</ng-template>\n\n<ng-template #detailTemplate let-customClass=\"customClass\">\n <div\n class=\"detail-container d-flex flex-column\"\n [ngClass]=\"[detailContainerClass(), customClass ? customClass : '']\"\n [style.max-inline-size]=\"maxDetailSize\"\n [attr.inert]=\"preventFocusDetails ? '' : null\"\n >\n <div class=\"detail-heading-actions d-flex align-items-center\">\n @if (!this.hasLargeSize && !this.hideBackButton()) {\n <button\n type=\"button\"\n class=\"btn btn-circle btn-sm btn-secondary element-back\"\n (click)=\"detailsBackClicked()\"\n ><span class=\"visually-hidden\">{{ detailsBackButtonText() | translate }}</span></button\n >\n }\n @if (detailsHeading()) {\n <span class=\"detail-heading si-title-1 me-auto ms-6 my-auto text-truncate\">{{\n detailsHeading() | translate\n }}</span>\n }\n <ng-content select=\"[slot=detailActions]\" />\n </div>\n <ng-content select=\"[slot=details]\" />\n </div>\n</ng-template>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiMainDetailContainerComponent } from './si-main-detail-container.component';\n\n@NgModule({\n imports: [SiMainDetailContainerComponent],\n exports: [SiMainDetailContainerComponent]\n})\nexport class SiMainDetailContainerModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-main-detail-container.component';\nexport * from './si-main-detail-container.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -138,7 +138,7 @@ class SiModalComponent {
138
138
  }
139
139
  hideBackdrop() {
140
140
  clearTimeout(this.backdropTimer);
141
- if (this.showBackdropClass !== undefined) {
141
+ if (this.showBackdropClass() !== undefined) {
142
142
  this.showBackdropClass.set(false);
143
143
  }
144
144
  if (this.origBodyOverflow !== undefined) {
@@ -252,7 +252,10 @@ class SiModalService {
252
252
  positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
253
253
  direction: isRTL() ? 'rtl' : 'ltr'
254
254
  });
255
- return modalRef.overlayRef.attach(new ComponentPortal(SiModalComponent, null, injector, null, this.getContentProjectableNodes(injector, modalRef)));
255
+ const compPortal = new ComponentPortal(SiModalComponent, null, injector);
256
+ // Ensure compatibility between Angular CDK 19 and 20 since constructor arguments have changed
257
+ compPortal.projectableNodes = this.getContentProjectableNodes(injector, modalRef);
258
+ return modalRef.overlayRef.attach(compPortal);
256
259
  }
257
260
  getContentProjectableNodes(injector, modalRef) {
258
261
  if (modalRef.contentRef instanceof TemplateRef) {
@@ -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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DOCUMENT, NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\n\nimport { ModalRef } from './modalref';\n\n@Component({\n selector: 'si-modal',\n templateUrl: './si-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, NgClass]\n})\nexport class SiModalComponent implements OnInit, AfterViewInit, OnDestroy {\n protected modalRef = inject(ModalRef<unknown, any>);\n\n protected dialogClass = this.modalRef.dialogClass ?? '';\n protected titleId = this.modalRef.data?.ariaLabelledBy ?? '';\n protected init = false;\n protected readonly show = signal(false);\n protected readonly showBackdropClass = signal<boolean | undefined>(undefined);\n\n private clickStartInDialog = false;\n private origBodyOverflow?: string;\n private showTimer: any;\n private backdropTimer: any;\n private backdropGhostClickPrevention = true;\n private 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 if (this.modalRef?.data.animated !== false) {\n this.showBackdropClass.set(false);\n this.backdropTimer = setTimeout(() => {\n this.showBackdropClass.set(true);\n }, 16);\n } else {\n this.showBackdropClass.set(true);\n }\n this.origBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private hideBackdrop(): void {\n clearTimeout(this.backdropTimer);\n if (this.showBackdropClass !== undefined) {\n this.showBackdropClass.set(false);\n }\n if (this.origBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.origBodyOverflow;\n this.origBodyOverflow = undefined;\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected clickStarted(event: MouseEvent): void {\n this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;\n }\n\n @HostListener('mouseup', ['$event'])\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 @HostListener('window:keydown.esc', ['$event'])\n protected onEsc(event: KeyboardEvent): 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.modalRef?.data.animated !== false ? millis : 0;\n }\n}\n","@if (showBackdropClass() !== undefined) {\n <div\n class=\"modal-backdrop\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"showBackdropClass()\"\n ></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 class=\"modal-dialog\" cdkTrapFocus cdkTrapFocusAutoCapture [ngClass]=\"dialogClass\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\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 * Assign all values to the target component using `Object.assign(component, initialState)`.\n *\n * @deprecated Use {@link inputValues} instead.\n */\n initialState?: Partial<T>;\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 return modalRef.overlayRef.attach(\n new ComponentPortal(\n SiModalComponent,\n null,\n injector,\n null,\n this.getContentProjectableNodes(injector, modalRef)\n )\n );\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.initialState,\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 Object.assign(modalRef.componentRef.instance as any, modalRef.data?.initialState);\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DOCUMENT, NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\n\nimport { ModalRef } from './modalref';\n\n@Component({\n selector: 'si-modal',\n templateUrl: './si-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, NgClass]\n})\nexport class SiModalComponent implements OnInit, AfterViewInit, OnDestroy {\n protected modalRef = inject(ModalRef<unknown, any>);\n\n protected dialogClass = this.modalRef.dialogClass ?? '';\n protected titleId = this.modalRef.data?.ariaLabelledBy ?? '';\n protected init = false;\n protected readonly show = signal(false);\n protected readonly showBackdropClass = signal<boolean | undefined>(undefined);\n\n private clickStartInDialog = false;\n private origBodyOverflow?: string;\n private showTimer: any;\n private backdropTimer: any;\n private backdropGhostClickPrevention = true;\n private 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 if (this.modalRef?.data.animated !== false) {\n this.showBackdropClass.set(false);\n this.backdropTimer = setTimeout(() => {\n this.showBackdropClass.set(true);\n }, 16);\n } else {\n this.showBackdropClass.set(true);\n }\n this.origBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private hideBackdrop(): void {\n clearTimeout(this.backdropTimer);\n if (this.showBackdropClass() !== undefined) {\n this.showBackdropClass.set(false);\n }\n if (this.origBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.origBodyOverflow;\n this.origBodyOverflow = undefined;\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected clickStarted(event: MouseEvent): void {\n this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;\n }\n\n @HostListener('mouseup', ['$event'])\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 @HostListener('window:keydown.esc', ['$event'])\n protected onEsc(event: KeyboardEvent): 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.modalRef?.data.animated !== false ? millis : 0;\n }\n}\n","@if (showBackdropClass() !== undefined) {\n <div\n class=\"modal-backdrop\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"showBackdropClass()\"\n ></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 class=\"modal-dialog\" cdkTrapFocus cdkTrapFocusAutoCapture [ngClass]=\"dialogClass\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\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 * Assign all values to the target component using `Object.assign(component, initialState)`.\n *\n * @deprecated Use {@link inputValues} instead.\n */\n initialState?: Partial<T>;\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.initialState,\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 Object.assign(modalRef.componentRef.instance as any, modalRef.data?.initialState);\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 Siemens 2016 - 2025.\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 Siemens 2016 - 2025.\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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"}