@siemens/element-ng 49.10.0 → 49.12.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.
- package/carousel/package.json +4 -0
- package/fesm2022/siemens-element-ng-about.mjs +13 -4
- package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ag-grid.mjs +6 -5
- package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +21 -24
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +3 -3
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +3 -3
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-card.mjs +2 -2
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-carousel.mjs +541 -0
- package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-chat-messages.mjs +18 -21
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +34 -35
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +20 -9
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +11 -10
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs +3 -3
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-empty-state.mjs +2 -2
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +49 -47
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filter-bar.mjs +5 -5
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +8 -7
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-footer.mjs +3 -3
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs +11 -10
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +24 -23
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +26 -17
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-help-button.mjs +3 -3
- package/fesm2022/siemens-element-ng-help-button.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +3 -3
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-landing-page.mjs +2 -2
- package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-language-switcher.mjs +3 -3
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs +4 -3
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +2 -2
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +362 -264
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +30 -13
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs +6 -8
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-notification-item.mjs +3 -3
- package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pagination.mjs +4 -1
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-toggle.mjs +3 -3
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
- package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover-legacy.mjs +3 -3
- package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +3 -3
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +3 -3
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +2 -2
- package/fesm2022/siemens-element-ng-side-panel.mjs +6 -6
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-sort-bar.mjs +3 -3
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs +3 -3
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +3 -3
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +5 -5
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-toast-notification.mjs +3 -3
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +3 -3
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tour.mjs +2 -2
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +6 -6
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/package.json +12 -8
- package/template-i18n.json +15 -6
- package/types/siemens-element-ng-about.d.ts +11 -1
- package/types/siemens-element-ng-application-header.d.ts +3 -4
- package/types/siemens-element-ng-carousel.d.ts +209 -0
- package/types/siemens-element-ng-chat-messages.d.ts +1 -2
- package/types/siemens-element-ng-dashboard.d.ts +4 -4
- package/types/siemens-element-ng-date-range-filter.d.ts +11 -2
- package/types/siemens-element-ng-file-uploader.d.ts +6 -8
- package/types/siemens-element-ng-header-dropdown.d.ts +3 -3
- package/types/siemens-element-ng-navbar-vertical-next.d.ts +161 -85
- package/types/siemens-element-ng-navbar.d.ts +1 -2
- package/types/siemens-element-ng-translate.d.ts +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-landing-page.mjs","sources":["../../../../projects/element-ng/landing-page/si-landing-page.component.ts","../../../../projects/element-ng/landing-page/si-landing-page.component.html","../../../../projects/element-ng/landing-page/si-landing-page.module.ts","../../../../projects/element-ng/landing-page/login-basic/si-login-basic.component.ts","../../../../projects/element-ng/landing-page/login-basic/si-login-basic.component.html","../../../../projects/element-ng/landing-page/login-single-sign-on/si-login-single-sign-on.component.ts","../../../../projects/element-ng/landing-page/login-single-sign-on/si-login-single-sign-on.component.html","../../../../projects/element-ng/landing-page/explicit-legal-acknowledge/si-explicit-legal-acknowledge.component.ts","../../../../projects/element-ng/landing-page/explicit-legal-acknowledge/si-explicit-legal-acknowledge.component.html","../../../../projects/element-ng/landing-page/change-password/si-change-password.component.ts","../../../../projects/element-ng/landing-page/change-password/si-change-password.component.html","../../../../projects/element-ng/landing-page/index.ts","../../../../projects/element-ng/landing-page/siemens-element-ng-landing-page.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, TemplateRef, signal } from '@angular/core';\nimport { CopyrightDetails, SiCopyrightNoticeComponent } from '@siemens/element-ng/copyright-notice';\nimport { SiInlineNotificationComponent } from '@siemens/element-ng/inline-notification';\nimport {\n IsoLanguageValue,\n SiLanguageSwitcherComponent\n} from '@siemens/element-ng/language-switcher';\nimport { Link, SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { AlertConfig } from './alert-config.model';\nimport { LandingPageWarning } from './si-landing-page.model';\n\n/**\n * A comprehensive landing page component that provides a standardized layout for authentication flows.\n *\n * This component serves as a container for various authentication-related components and provides\n * a consistent layout with support for branding, internationalization, legal acknowledgments,\n * and various notification types. It includes slots for custom content and handles responsive\n * layout adjustments.\n *\n * The component supports:\n * - Custom branding and background images\n * - Multi-language support with language switcher\n * - Legal acknowledgments and terms display\n * - Alert and notification systems\n * - Copyright information display\n * - Responsive layout with full-height section option\n *\n * @example\n * ```html\n * <si-landing-page\n * [heading]=\"appTitle\"\n * [subtitle]=\"appDescription\"\n * [availableLanguages]=\"languages\"\n * [copyrightDetails]=\"copyright\"\n * [announcement]=\"announcementConfig\"\n * [loginAlert]=\"loginErrorConfig\">\n *\n * <si-login-basic\n * (login)=\"handleLogin($event)\"\n * (usernameValidation)=\"validateUsername($event)\">\n * </si-login-basic>\n\n * </si-landing-page>\n * ```\n */\n@Component({\n selector: 'si-landing-page',\n imports: [\n SiCopyrightNoticeComponent,\n SiLanguageSwitcherComponent,\n SiLinkDirective,\n SiInlineNotificationComponent,\n SiTranslatePipe,\n NgTemplateOutlet\n ],\n templateUrl: './si-landing-page.component.html',\n styleUrl: './si-landing-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiLandingPageComponent {\n /**\n * Heading of the application.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Secondary heading of the application.\n */\n readonly subheading = input<TranslatableString>();\n /**\n * Short description of the application.\n */\n readonly subtitle = input.required<TranslatableString>();\n /**\n * List of links (e.g. Corporate information)\n *\n * @defaultValue []\n */\n readonly links = input<Link[]>([]);\n\n /**\n * URL to custom background image\n *\n * @defaultValue './assets/images/landing-page-steel.webp'\n */\n readonly backgroundImageUrl = input('./assets/images/landing-page-steel.webp');\n\n /**\n * URL to custom brand image.\n *\n * @deprecated By default the logo provided in the theme will be used.\n * For a different logo use the respective CSS variables:\n * ```html\n * <si-landing-page style=\"--landing-page-logo: url('https://example.com'); --landing-page-logo-width: 100px; --landing-page-logo-height: 100px\" />\n * ```\n */\n readonly logoUrl = input<string>();\n\n /**\n * Input of si-language-switcher: Key for translation.\n * If your languages are already translated, you may display them without any\n * manipulation by passing in an empty string.\n *\n * @defaultValue 'LANGUAGE'\n */\n readonly translationKey = input('LANGUAGE');\n /**\n * Input of si-language-switcher: List of all available languages in this\n * application.\n *\n * @defaultValue []\n */\n readonly availableLanguages = input<string[] | IsoLanguageValue[]>([]);\n\n /**\n *\n * Config to enable/disable general alerts on landing page\n */\n readonly announcement = input<AlertConfig>();\n\n /**\n *\n * Config to enable/disable login related error/alerts\n */\n readonly loginAlert = input<AlertConfig>();\n\n /**\n * Warning text for Live Data. Can be shown, if there is no legal artifact which needs immediate user attention.\n */\n readonly liveDataWarning = input<LandingPageWarning>();\n /**\n * Text for some legal artifacts (e.g. Terms of Use) that needs more attention before the login.\n */\n readonly implicitLegalAcknowledge = input<string | TemplateRef<unknown>>();\n /**\n * Version of the application.\n */\n readonly version = input<string>();\n\n /**\n * Copyright information to be displayed. Alternatively, you can use the {@link SI_COPYRIGHT_DETAILS} global inject.\n */\n readonly copyrightDetails = input<CopyrightDetails>();\n /**\n * Option to display the landing page content in full height.\n *\n * @defaultValue false\n */\n readonly isFullHeightSection = signal(false);\n}\n","@let announcement = this.announcement();\n@let availableLanguages = this.availableLanguages();\n@let loginAlert = this.loginAlert();\n@let implicitLegalAcknowledge = this.implicitLegalAcknowledge();\n@let liveDataWarning = this.liveDataWarning();\n@let isFullHeightSection = this.isFullHeightSection();\n\n@if (announcement) {\n <si-inline-notification\n class=\"rounded-0\"\n [severity]=\"announcement.severity\"\n [heading]=\"announcement.heading\"\n [message]=\"announcement.message\"\n [action]=\"announcement.action\"\n [translationParams]=\"announcement.translationParams\"\n />\n}\n<div class=\"landing-page\">\n <div\n class=\"landing-page-background d-none d-md-block\"\n [style.background-image]=\"'url(' + backgroundImageUrl() + ')'\"\n >\n </div>\n <div class=\"landing-page-content\">\n <div class=\"landing-page-content-inner\">\n @if (!isFullHeightSection) {\n <div class=\"d-flex justify-content-between align-items-center pb-9\">\n @if (!logoUrl()) {\n <span role=\"img\" class=\"landing-page-logo\"></span>\n } @else {\n <img\n class=\"landing-page-logo landing-page-custom-logo\"\n [src]=\"logoUrl()\"\n [alt]=\"heading() + '\\'s Background'\"\n />\n }\n @if (availableLanguages.length > 1) {\n <div class=\"landing-page-language-switcher\">\n <si-language-switcher\n [translationKey]=\"translationKey()\"\n [availableLanguages]=\"availableLanguages\"\n />\n </div>\n }\n </div>\n }\n <div class=\"landing-page-main\">\n @if (!isFullHeightSection) {\n @if (subheading()) {\n <div class=\"si-h2\">{{ subheading() | translate }}</div>\n }\n <h1 class=\"si-h1-bold my-2\">{{ heading() | translate }}</h1>\n <div class=\"position-relative\">\n <h2 class=\"mt-10 si-h2\" [class.invisible]=\"loginAlert\">{{ subtitle() | translate }}</h2>\n @if (loginAlert) {\n <si-inline-notification\n class=\"landing-page-alert w-100\"\n [severity]=\"loginAlert.severity || 'danger'\"\n [heading]=\"loginAlert.heading\"\n [message]=\"loginAlert.message\"\n [action]=\"loginAlert.action\"\n [translationParams]=\"loginAlert.translationParams\"\n />\n }\n </div>\n }\n <div class=\"landing-page-custom-content\">\n <ng-content />\n @if (!isFullHeightSection) {\n @if (implicitLegalAcknowledge) {\n @if (typeof implicitLegalAcknowledge === 'string') {\n <div class=\"text-secondary mt-8\" [innerHTML]=\"implicitLegalAcknowledge\"></div>\n } @else {\n <div class=\"text-secondary mt-8\">\n <ng-container [ngTemplateOutlet]=\"implicitLegalAcknowledge\" />\n </div>\n }\n }\n @if (liveDataWarning) {\n <div class=\"text-secondary mt-8\">\n <div class=\"si-h5\">{{ liveDataWarning.title | translate }}</div>\n <div class=\"si-body my-4\">{{ liveDataWarning.content | translate }}</div>\n </div>\n }\n }\n </div>\n </div>\n @if (!isFullHeightSection) {\n <footer>\n <div>\n <div class=\"d-flex justify-content-start flex-row flex-wrap mt-6\">\n @for (link of links(); track $index) {\n <span>\n <a siLinkDefaultTarget=\"_blank\" class=\"si-body me-6\" [siLink]=\"link\">\n {{ link.title | translate }}\n </a>\n </span>\n }\n </div>\n <div class=\"si-caption mt-4 mb-6 text-secondary d-flex flex-wrap\">\n @if (version()) {\n <span class=\"me-6\">{{ version() }}</span>\n }\n <si-copyright-notice [copyright]=\"copyrightDetails()\" />\n </div>\n </div>\n </footer>\n }\n </div>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLandingPageComponent } from './si-landing-page.component';\n\n@NgModule({\n imports: [SiLandingPageComponent],\n exports: [SiLandingPageComponent]\n})\nexport class SiLandingPageModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n OnInit,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Link, SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiLoadingButtonComponent } from '@siemens/element-ng/loading-spinner';\nimport { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { UsernamePassword, UsernameValidationPayload } from '../si-landing-page.model';\n\n/**\n * A basic login component that supports both single-step and two-step authentication flows.\n *\n * This component provides a standard login form with username and password fields.\n * It can be configured to work in two-step mode where username validation happens first,\n * followed by password entry.\n *\n * @example\n * ```html\n * <si-login-basic\n * [forgotPasswordLink]=\"forgotPasswordLink\"\n * [registerNowLink]=\"registerNowLink\"\n * [twoStep]=\"true\"\n * [loading]=\"isLoading\"\n * (login)=\"handleLogin($event)\"\n * (usernameValidation)=\"handleUsernameValidation($event)\">\n * </si-login-basic>\n * ```\n */\n@Component({\n selector: 'si-login-basic',\n imports: [\n ReactiveFormsModule,\n SiTranslatePipe,\n SiLinkDirective,\n SiPasswordToggleComponent,\n SiLoadingButtonComponent\n ],\n templateUrl: './si-login-basic.component.html',\n styleUrl: './si-login-basic.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'animate.enter': 'component-enter'\n }\n})\nexport class SiLoginBasicComponent implements OnInit {\n private static idCounter = 0;\n /**\n * Label for username input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.USERNAME:Username`)\n * ```\n */\n readonly usernameLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.USERNAME:Username`));\n /**\n * Label for password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.PASSWORD:Password`)\n * ```\n */\n readonly passwordLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.PASSWORD:Password`));\n /**\n * Config for Forgot Password link.\n * If `title` is omitted, a default translated label is used.\n */\n readonly forgotPasswordLink = input<Link>();\n /**\n * Config for Register Now link.\n * If `title` is omitted, a default translated label is used.\n */\n readonly registerNowLink = input<Link>();\n /**\n * Label for login button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.LOGIN:Login`)\n * ```\n */\n readonly loginButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.LOGIN:Login`));\n /**\n * Disables the login button.\n *\n * @defaultValue false\n */\n readonly disableLogin = input(false);\n /**\n * Enables the two-step login flow.\n *\n * @defaultValue false\n */\n readonly twoStep = input(false, { transform: booleanAttribute });\n\n /**\n * Indicates whether the login button should show a loading state.\n *\n * @defaultValue false\n */\n readonly loading = input(false);\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.BACK:Back`));\n /**\n * Description of next button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.NEXT:Next`)\n * ```\n */\n readonly nextButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.NEXT:Next`));\n /**\n * Emits username when user clicks on next button.\n */\n readonly usernameValidation = output<UsernameValidationPayload>();\n /**\n * Emits username and password on value change.\n */\n readonly valueChanged = output<UsernamePassword>();\n /**\n * Emits username and password on login event.\n */\n readonly login = output<UsernamePassword>();\n\n private destroyRef = inject(DestroyRef);\n protected readonly secondStepVisible = signal(false);\n protected readonly loadingNext = signal(false);\n\n private readonly defaultForgotPasswordTitle = t(\n () => $localize`:@@SI_LOGIN_BASIC.FORGOT_PASSWORD:Forgot password`\n );\n private readonly defaultRegisterNowTitle = t(\n () => $localize`:@@SI_LOGIN_BASIC.REGISTER_NOW:Register now`\n );\n\n protected readonly effectiveForgotPasswordLink = computed(() => {\n const link = this.forgotPasswordLink();\n return !!link && link.title ? link : { ...link, title: this.defaultForgotPasswordTitle };\n });\n\n protected readonly effectiveRegisterNowLink = computed(() => {\n const link = this.registerNowLink();\n return !!link && link.title ? link : { ...link, title: this.defaultRegisterNowTitle };\n });\n\n private readonly index = SiLoginBasicComponent.idCounter++;\n protected usernameId = `__si-login-basic-username-${this.index}`;\n protected passwordId = `__si-login-basic-password-${this.index}`;\n\n protected loginCredentials = new FormGroup({\n username: new FormControl('', Validators.required),\n password: new FormControl('', Validators.required)\n });\n\n ngOnInit(): void {\n this.loginCredentials.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.handleValueChanges();\n });\n\n this.loginCredentials.controls.username.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.secondStepVisible() && this.goBack());\n }\n\n protected submit(): void {\n if (this.twoStep() && !this.secondStepVisible()) {\n this.validateUsername();\n return;\n }\n this.login.emit(this.getLoginFormValues());\n }\n\n protected handleValueChanges(): void {\n this.valueChanged.emit(this.getLoginFormValues());\n }\n\n protected validateUsername(): void {\n if (this.loginCredentials.controls.username.valid) {\n this.loadingNext.set(true);\n }\n const activateArgs = {\n ...this.getLoginFormValues(),\n validate: (isValid: boolean): void => {\n if (isValid) {\n this.nextStep();\n } else {\n this.loadingNext.set(false);\n this.loginCredentials.controls.username.setErrors({ invalid: true });\n }\n }\n };\n this.usernameValidation.emit(activateArgs);\n }\n\n private getLoginFormValues(): UsernamePassword {\n const { username: username, password } = this.loginCredentials.value;\n return { username: username, password };\n }\n\n protected goBack(): void {\n this.secondStepVisible.set(false);\n this.loginCredentials.controls.password.reset();\n }\n\n private nextStep(): void {\n if (this.twoStep() && !this.secondStepVisible()) {\n this.loadingNext.set(false);\n this.secondStepVisible.set(true);\n }\n }\n}\n","@let forgotPasswordLink = this.effectiveForgotPasswordLink();\n@let registerNowLink = this.effectiveRegisterNowLink();\n@let secondStepVisible = this.secondStepVisible();\n\n<form #loginForm [formGroup]=\"loginCredentials\" (ngSubmit)=\"submit()\">\n <div class=\"my-4\">\n <label class=\"form-label\" [for]=\"usernameId\">{{ usernameLabel() | translate }}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"username\" [id]=\"usernameId\" />\n </div>\n <div class=\"login-basic-second-step--container\" [class.active]=\"!twoStep() || secondStepVisible\">\n <div class=\"login-basic-second-step--content\">\n <div class=\"mb-4\">\n <label class=\"form-label\" [for]=\"passwordId\">{{ passwordLabel() | translate }}</label>\n <si-password-toggle #toggle>\n <input\n class=\"form-control\"\n formControlName=\"password\"\n [id]=\"passwordId\"\n [type]=\"toggle.inputType\"\n />\n </si-password-toggle>\n </div>\n @if (forgotPasswordLink) {\n <a class=\"si-h5 mb-4\" [siLink]=\"forgotPasswordLink\">{{\n forgotPasswordLink.title | translate\n }}</a>\n }\n <div class=\"d-flex align-items-center gap-6 mt-8\">\n @if (twoStep()) {\n <button type=\"button\" class=\"btn btn-secondary w-100\" (click)=\"goBack()\">\n {{ backButtonLabel() | translate }}\n </button>\n }\n <si-loading-button\n type=\"submit\"\n class=\"w-100\"\n buttonClass=\"btn btn-primary\"\n [disabled]=\"disableLogin()\"\n [loading]=\"loading()\"\n >\n {{ loginButtonLabel() | translate }}\n </si-loading-button>\n </div>\n </div>\n </div>\n @if (twoStep()) {\n <div\n class=\"login-basic-next-button--container\"\n [attr.aria-hidden]=\"secondStepVisible\"\n [class.active]=\"!secondStepVisible\"\n >\n <si-loading-button\n class=\"login-basic-next-button w-100\"\n buttonClass=\"btn btn-primary\"\n [loading]=\"loadingNext()\"\n (click)=\"validateUsername()\"\n >\n {{ nextButtonLabel() | translate }}\n </si-loading-button>\n </div>\n }\n</form>\n@if (registerNowLink) {\n <div class=\"si-body mt-8\">\n <a class=\"si-h5\" [siLink]=\"registerNowLink\">{{ registerNowLink.title | translate }}</a>\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\n/**\n * A single sign-on (SSO) login component that provides a button for SSO authentication.\n *\n * This component renders a simple button that users can click to initiate\n * single sign-on authentication flow.\n *\n * @example\n * ```html\n * <si-login-single-sign-on\n * [ssoButtonLabel]=\"customLabel\"\n * [disableSso]=\"isLoading\"\n * (ssoEvent)=\"handleSsoLogin()\">\n * </si-login-single-sign-on>\n * ```\n */\n@Component({\n selector: 'si-login-single-sign-on',\n imports: [SiTranslatePipe],\n templateUrl: './si-login-single-sign-on.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiLoginSingleSignOnComponent {\n /**\n * Label for login button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_SINGLE-SIGN-ON.LOGIN_SIGN_UP:Login / Sign un`)\n * ```\n */\n readonly ssoButtonLabel = input(\n t(() => $localize`:@@SI_LOGIN_SINGLE-SIGN-ON.LOGIN_SIGN_UP:Login / Sign un`)\n );\n /**\n * Disables the sso button.\n *\n * @defaultValue false\n */\n readonly disableSso = input(false);\n /**\n * Emits username and password on login event.\n */\n readonly ssoEvent = output<void>();\n\n protected ssoClick(): void {\n this.ssoEvent.emit();\n }\n}\n","<button\n type=\"button\"\n class=\"btn btn-primary mt-4 w-100\"\n [disabled]=\"disableSso()\"\n (click)=\"ssoClick()\"\n>\n {{ ssoButtonLabel() | translate }}\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n Component,\n inject,\n input,\n OnInit,\n output,\n OnDestroy,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLandingPageComponent } from '../si-landing-page.component';\n\n/**\n * A component for displaying legal agreements that require explicit user acknowledgment.\n *\n * This component provides a standardized interface for presenting legal documents,\n * terms of service, privacy policies, or other agreements that users must\n * explicitly accept before proceeding.\n *\n * @example\n * ```html\n * <si-explicit-legal-acknowledge\n * [heading]=\"agreementTitle\"\n * [subheading]=\"agreementDescription\"\n * [disableAcceptance]=\"isProcessing\"\n * (accept)=\"handleAcceptance()\"\n * (back)=\"handleBack()\">\n * <div>\n * <h3>Terms of Service</h3>\n * <p>Please read and accept our terms before continuing.</p>\n * <ul>\n * <li>Term 1: You agree to ...</li>\n * <li>Term 2: You acknowledge ...</li>\n * </ul>\n * </div>\n * </si-explicit-legal-acknowledge>\n * ```\n */\n@Component({\n selector: 'si-explicit-legal-acknowledge',\n imports: [SiTranslatePipe],\n templateUrl: './si-explicit-legal-acknowledge.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiExplicitLegalAcknowledgeComponent implements OnInit, OnDestroy {\n /**\n * Heading of the agreement.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Short description of the agreement.\n */\n readonly subheading = input.required<TranslatableString>();\n /**\n * Label for accept button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.ACCEPT:Accept`)\n * ```\n */\n readonly acceptButtonLabel = input(\n t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.ACCEPT:Accept`)\n );\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.BACK:Back`));\n /**\n * Disables the acceptance button.\n *\n * @defaultValue false\n */\n readonly disableAcceptance = input(false);\n /**\n * Emits end user license agreement on acceptance event.\n */\n readonly accept = output<void>();\n /**\n * Emits on back click.\n */\n readonly back = output<void>();\n /**\n * Reference to the landing page parent component.\n */\n protected landingPage = inject(SiLandingPageComponent, { skipSelf: true, optional: true });\n\n protected handleBack(): void {\n this.back.emit();\n }\n\n protected handleAccept(): void {\n this.accept.emit();\n }\n\n ngOnInit(): void {\n this.landingPage?.isFullHeightSection.set(true);\n }\n\n ngOnDestroy(): void {\n this.landingPage?.isFullHeightSection.set(false);\n }\n}\n","<div class=\"d-flex flex-column py-8 h-100\">\n <h2 class=\"si-h2 mb-4\">{{ heading() | translate }}</h2>\n <div class=\"si-body mb-6\">{{ subheading() | translate }}</div>\n\n <div tabindex=\"0\" class=\"form-control si-body text-secondary flex-grow-1 overflow-auto\">\n <ng-content />\n </div>\n <div class=\"d-flex align-items-center gap-6 mt-6\">\n <button type=\"button\" class=\"btn btn-secondary w-100\" (click)=\"handleBack()\">\n {{ backButtonLabel() | translate }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [disabled]=\"disableAcceptance()\"\n (click)=\"handleAccept()\"\n >\n {{ acceptButtonLabel() | translate }}\n </button>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n input,\n OnInit,\n output,\n TemplateRef,\n OnDestroy,\n inject,\n DestroyRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { SiInlineNotificationComponent } from '@siemens/element-ng/inline-notification';\nimport {\n PasswordPolicy,\n SiPasswordStrengthComponent,\n SiPasswordStrengthDirective\n} from '@siemens/element-ng/password-strength';\nimport { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { AlertConfig } from '../alert-config.model';\nimport { SiLandingPageComponent } from '../si-landing-page.component';\nimport { ChangePassword } from '../si-landing-page.model';\n\n/**\n * A component for changing user passwords with strength validation and policy enforcement.\n *\n * This component provides a form for users to change their password, including\n * password strength indicators, policy validation, and confirmation fields.\n * It supports custom password policies and displays inline notifications for alerts.\n *\n * @example\n * ```html\n * <si-change-password\n * [passwordStrength]=\"passwordPolicy\"\n * [passwordPolicyContent]=\"policyTemplate\"\n * [changePasswordAlert]=\"alertConfig\"\n * (changePasswordRequested)=\"handlePasswordChange($event)\"\n * (back)=\"handleBack()\">\n * </si-change-password>\n * ```\n */\n@Component({\n selector: 'si-change-password',\n imports: [\n ReactiveFormsModule,\n SiTranslatePipe,\n SiPasswordToggleComponent,\n NgTemplateOutlet,\n SiInlineNotificationComponent,\n SiPasswordStrengthComponent,\n SiPasswordStrengthDirective\n ],\n templateUrl: './si-change-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiChangePasswordComponent implements OnInit, OnDestroy {\n private static idCounter = 0;\n /**\n * Change password heading.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_PASSWORD:Change password`)\n * ```\n */\n readonly heading = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_PASSWORD:Change password`)\n );\n /**\n * Short description of the action to perform.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_FACTORY_PASSWORD:Factory set password must be changed`)\n * ```\n */\n readonly subheading = input(\n t(\n () =>\n $localize`:@@SI_CHANGE_PASSWORD.CHANGE_FACTORY_PASSWORD:Factory set password must be changed`\n )\n );\n /**\n * Label for new password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.NEW_PASSWORD:New password`)\n * ```\n */\n readonly newPasswordLabel = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.NEW_PASSWORD:New password`)\n );\n /**\n * Label for confirm password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CONFIRM_PASSWORD:Confirm password`)\n * ```\n */\n readonly confirmPasswordLabel = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.CONFIRM_PASSWORD:Confirm password`)\n );\n /**\n * Label for change password button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE:Change`)\n * ```\n */\n readonly changeButtonLabel = input(t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE:Change`));\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_CHANGE_PASSWORD.BACK:Back`));\n /**\n * Disables the change password button.\n *\n * @defaultValue false\n */\n readonly disableChange = input(false);\n /**\n * Title of the password policy.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.PASSWORD_POLICY:Password policy`)\n * ```\n */\n readonly passwordPolicyTitle = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.PASSWORD_POLICY:Password policy`)\n );\n /**\n * Description of the password policy requirements.\n */\n readonly passwordPolicyContent = input.required<string | TemplateRef<unknown>>();\n /**\n * Description of the password policy requirements.\n */\n readonly passwordStrength = input.required<PasswordPolicy>();\n /**\n * Config to enable/disable password related error/alerts.\n */\n readonly changePasswordAlert = input<AlertConfig>();\n /**\n * Emits password on value change.\n */\n readonly valueChanged = output<ChangePassword>();\n /**\n * Emits password on change event.\n */\n readonly changePasswordRequested = output<ChangePassword>();\n /**\n * The number indicating the number of rules which still can be met. (`-2` --\\> 2 rules are\n * still unmet, `0` --\\> all met)\n */\n readonly passwordStrengthChanged = output<number | void>();\n /**\n * Emits on back click.\n */\n readonly back = output<void>();\n /**\n * Reference to the landing page parent component.\n */\n protected landingPage = inject(SiLandingPageComponent, { skipSelf: true, optional: true });\n\n private readonly index = SiChangePasswordComponent.idCounter++;\n protected newPasswordId = `__si-change-password-new-password-${this.index}`;\n protected confirmPasswordId = `__si-change-password-confirm-password-${this.index}`;\n\n protected changePasswordForm = new FormGroup({\n newPassword: new FormControl(''),\n confirmPassword: new FormControl('')\n });\n protected passwordPolicyContentTemplate: TemplateRef<any> | null = null;\n\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.landingPage?.isFullHeightSection.set(true);\n const passwordPolicy = this.passwordPolicyContent();\n if (passwordPolicy instanceof TemplateRef) {\n this.passwordPolicyContentTemplate = passwordPolicy;\n }\n this.changePasswordForm.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.handleValueChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.landingPage?.isFullHeightSection.set(false);\n }\n\n protected submit(): void {\n this.changePasswordRequested.emit(this.getPasswordFormValues());\n }\n\n protected handleValueChanges(): void {\n this.valueChanged.emit(this.getPasswordFormValues());\n }\n\n protected handlePasswordStrengthChanged(data: number | void): void {\n this.passwordStrengthChanged.emit(data);\n }\n\n private getPasswordFormValues(): ChangePassword {\n const { newPassword: newPassword, confirmPassword } = this.changePasswordForm.value;\n return { newPassword: newPassword, confirmPassword };\n }\n\n protected handleBackClick(): void {\n this.back.emit();\n this.changePasswordForm.reset();\n }\n}\n","@let changePasswordAlert = this.changePasswordAlert();\n@let passwordPolicyContent = this.passwordPolicyContent();\n\n<div class=\"d-flex flex-column justify-content-center py-8 h-100\">\n <div class=\"position-relative\">\n <h2 class=\"si-h2\" [class.invisible]=\"changePasswordAlert\">{{ heading() | translate }}</h2>\n <div class=\"si-body mb-4\" [class.invisible]=\"changePasswordAlert\">{{\n subheading() | translate\n }}</div>\n @if (changePasswordAlert) {\n <si-inline-notification\n class=\"position-absolute bottom-0 w-100\"\n [severity]=\"changePasswordAlert.severity || 'danger'\"\n [heading]=\"changePasswordAlert.heading\"\n [message]=\"changePasswordAlert.message\"\n />\n }\n </div>\n <form [formGroup]=\"changePasswordForm\" (ngSubmit)=\"submit()\">\n <div class=\"my-4\">\n <label class=\"form-label\" [for]=\"newPasswordId\">{{ newPasswordLabel() | translate }}</label>\n <si-password-strength>\n <input\n type=\"password\"\n class=\"form-control\"\n formControlName=\"newPassword\"\n [id]=\"newPasswordId\"\n [siPasswordStrength]=\"passwordStrength()\"\n (passwordStrengthChanged)=\"handlePasswordStrengthChanged($event)\"\n />\n </si-password-strength>\n </div>\n <div class=\"mb-4\">\n <label class=\"form-label\" [for]=\"confirmPasswordId\">{{\n confirmPasswordLabel() | translate\n }}</label>\n <si-password-toggle #toggleConfirmPassword>\n <input\n class=\"form-control\"\n formControlName=\"confirmPassword\"\n [id]=\"confirmPasswordId\"\n [type]=\"toggleConfirmPassword.inputType\"\n />\n </si-password-toggle>\n </div>\n <div class=\"d-flex align-items-center gap-6 mt-6\">\n <button type=\"button\" class=\"btn btn-secondary w-100 back-button\" (click)=\"handleBackClick()\">\n {{ backButtonLabel() | translate }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary w-100\" [disabled]=\"disableChange()\">\n {{ changeButtonLabel() | translate }}\n </button>\n </div>\n </form>\n <div class=\"text-secondary mt-8\">\n <div class=\"si-h5\">{{ passwordPolicyTitle() | translate }}</div>\n @if (!passwordPolicyContentTemplate) {\n <div class=\"my-4\" [innerHTML]=\"passwordPolicyContent\"></div>\n } @else {\n <div class=\"my-4\">\n <ng-container [ngTemplateOutlet]=\"passwordPolicyContentTemplate\" />\n </div>\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-landing-page.module';\nexport * from './si-landing-page.component';\nexport * from './login-basic/si-login-basic.component';\nexport * from './login-single-sign-on/si-login-single-sign-on.component';\nexport * from './explicit-legal-acknowledge/si-explicit-legal-acknowledge.component';\nexport * from './change-password/si-change-password.component';\nexport * from './alert-config.model';\nexport * from './si-landing-page.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-landing-page.mjs","sources":["../../../../projects/element-ng/landing-page/si-landing-page.component.ts","../../../../projects/element-ng/landing-page/si-landing-page.component.html","../../../../projects/element-ng/landing-page/si-landing-page.module.ts","../../../../projects/element-ng/landing-page/login-basic/si-login-basic.component.ts","../../../../projects/element-ng/landing-page/login-basic/si-login-basic.component.html","../../../../projects/element-ng/landing-page/login-single-sign-on/si-login-single-sign-on.component.ts","../../../../projects/element-ng/landing-page/login-single-sign-on/si-login-single-sign-on.component.html","../../../../projects/element-ng/landing-page/explicit-legal-acknowledge/si-explicit-legal-acknowledge.component.ts","../../../../projects/element-ng/landing-page/explicit-legal-acknowledge/si-explicit-legal-acknowledge.component.html","../../../../projects/element-ng/landing-page/change-password/si-change-password.component.ts","../../../../projects/element-ng/landing-page/change-password/si-change-password.component.html","../../../../projects/element-ng/landing-page/index.ts","../../../../projects/element-ng/landing-page/siemens-element-ng-landing-page.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, TemplateRef, signal } from '@angular/core';\nimport { CopyrightDetails, SiCopyrightNoticeComponent } from '@siemens/element-ng/copyright-notice';\nimport { SiInlineNotificationComponent } from '@siemens/element-ng/inline-notification';\nimport {\n IsoLanguageValue,\n SiLanguageSwitcherComponent\n} from '@siemens/element-ng/language-switcher';\nimport { Link, SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { AlertConfig } from './alert-config.model';\nimport { LandingPageWarning } from './si-landing-page.model';\n\n/**\n * A comprehensive landing page component that provides a standardized layout for authentication flows.\n *\n * This component serves as a container for various authentication-related components and provides\n * a consistent layout with support for branding, internationalization, legal acknowledgments,\n * and various notification types. It includes slots for custom content and handles responsive\n * layout adjustments.\n *\n * The component supports:\n * - Custom branding and background images\n * - Multi-language support with language switcher\n * - Legal acknowledgments and terms display\n * - Alert and notification systems\n * - Copyright information display\n * - Responsive layout with full-height section option\n *\n * @example\n * ```html\n * <si-landing-page\n * [heading]=\"appTitle\"\n * [subtitle]=\"appDescription\"\n * [availableLanguages]=\"languages\"\n * [copyrightDetails]=\"copyright\"\n * [announcement]=\"announcementConfig\"\n * [loginAlert]=\"loginErrorConfig\">\n *\n * <si-login-basic\n * (login)=\"handleLogin($event)\"\n * (usernameValidation)=\"validateUsername($event)\">\n * </si-login-basic>\n\n * </si-landing-page>\n * ```\n */\n@Component({\n selector: 'si-landing-page',\n imports: [\n SiCopyrightNoticeComponent,\n SiLanguageSwitcherComponent,\n SiLinkDirective,\n SiInlineNotificationComponent,\n SiTranslatePipe,\n NgTemplateOutlet\n ],\n templateUrl: './si-landing-page.component.html',\n styleUrl: './si-landing-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiLandingPageComponent {\n /**\n * Heading of the application.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Secondary heading of the application.\n */\n readonly subheading = input<TranslatableString>();\n /**\n * Short description of the application.\n */\n readonly subtitle = input.required<TranslatableString>();\n /**\n * List of links (e.g. Corporate information)\n *\n * @defaultValue []\n */\n readonly links = input<Link[]>([]);\n\n /**\n * URL to custom background image\n *\n * @defaultValue './assets/images/landing-page-steel.webp'\n */\n readonly backgroundImageUrl = input('./assets/images/landing-page-steel.webp');\n\n /**\n * URL to custom brand image.\n *\n * @deprecated By default the logo provided in the theme will be used.\n * For a different logo use the respective CSS variables:\n * ```html\n * <si-landing-page style=\"--landing-page-logo: url('https://example.com'); --landing-page-logo-width: 100px; --landing-page-logo-height: 100px\" />\n * ```\n */\n readonly logoUrl = input<string>();\n\n /**\n * Input of si-language-switcher: Key for translation.\n * If your languages are already translated, you may display them without any\n * manipulation by passing in an empty string.\n *\n * @defaultValue 'LANGUAGE'\n */\n readonly translationKey = input('LANGUAGE');\n /**\n * Input of si-language-switcher: List of all available languages in this\n * application.\n *\n * @defaultValue []\n */\n readonly availableLanguages = input<string[] | IsoLanguageValue[]>([]);\n\n /**\n *\n * Config to enable/disable general alerts on landing page\n */\n readonly announcement = input<AlertConfig>();\n\n /**\n *\n * Config to enable/disable login related error/alerts\n */\n readonly loginAlert = input<AlertConfig>();\n\n /**\n * Warning text for Live Data. Can be shown, if there is no legal artifact which needs immediate user attention.\n */\n readonly liveDataWarning = input<LandingPageWarning>();\n /**\n * Text for some legal artifacts (e.g. Terms of Use) that needs more attention before the login.\n */\n readonly implicitLegalAcknowledge = input<string | TemplateRef<unknown>>();\n /**\n * Version of the application.\n */\n readonly version = input<string>();\n\n /**\n * Copyright information to be displayed. Alternatively, you can use the {@link SI_COPYRIGHT_DETAILS} global inject.\n */\n readonly copyrightDetails = input<CopyrightDetails>();\n /**\n * Option to display the landing page content in full height.\n *\n * @defaultValue false\n */\n readonly isFullHeightSection = signal(false);\n}\n","@let announcement = this.announcement();\n@let availableLanguages = this.availableLanguages();\n@let loginAlert = this.loginAlert();\n@let implicitLegalAcknowledge = this.implicitLegalAcknowledge();\n@let liveDataWarning = this.liveDataWarning();\n@let isFullHeightSection = this.isFullHeightSection();\n\n@if (announcement) {\n <si-inline-notification\n class=\"rounded-0\"\n [severity]=\"announcement.severity\"\n [heading]=\"announcement.heading\"\n [message]=\"announcement.message\"\n [action]=\"announcement.action\"\n [translationParams]=\"announcement.translationParams\"\n />\n}\n<div class=\"landing-page\">\n <div\n class=\"landing-page-background d-none d-md-block\"\n [style.background-image]=\"'url(' + backgroundImageUrl() + ')'\"\n >\n </div>\n <div class=\"landing-page-content\">\n <div class=\"landing-page-content-inner\">\n @if (!isFullHeightSection) {\n <div class=\"d-flex justify-content-between align-items-center pb-9\">\n @if (!logoUrl()) {\n <span role=\"img\" class=\"landing-page-logo\"></span>\n } @else {\n <img\n class=\"landing-page-logo landing-page-custom-logo\"\n [src]=\"logoUrl()\"\n [alt]=\"heading() + '\\'s Background'\"\n />\n }\n @if (availableLanguages.length > 1) {\n <div class=\"landing-page-language-switcher\">\n <si-language-switcher\n [translationKey]=\"translationKey()\"\n [availableLanguages]=\"availableLanguages\"\n />\n </div>\n }\n </div>\n }\n <div class=\"landing-page-main\">\n @if (!isFullHeightSection) {\n @if (subheading()) {\n <div class=\"si-h2\">{{ subheading() | translate }}</div>\n }\n <h1 class=\"si-h1-bold my-2\">{{ heading() | translate }}</h1>\n <div class=\"position-relative\">\n <h2 class=\"mt-10 si-h2\" [class.invisible]=\"loginAlert\">{{ subtitle() | translate }}</h2>\n @if (loginAlert) {\n <si-inline-notification\n class=\"landing-page-alert w-100\"\n [severity]=\"loginAlert.severity || 'danger'\"\n [heading]=\"loginAlert.heading\"\n [message]=\"loginAlert.message\"\n [action]=\"loginAlert.action\"\n [translationParams]=\"loginAlert.translationParams\"\n />\n }\n </div>\n }\n <div class=\"landing-page-custom-content\">\n <ng-content />\n @if (!isFullHeightSection) {\n @if (implicitLegalAcknowledge) {\n @if (typeof implicitLegalAcknowledge === 'string') {\n <div class=\"text-secondary mt-8\" [innerHTML]=\"implicitLegalAcknowledge\"></div>\n } @else {\n <div class=\"text-secondary mt-8\">\n <ng-container [ngTemplateOutlet]=\"implicitLegalAcknowledge\" />\n </div>\n }\n }\n @if (liveDataWarning) {\n <div class=\"text-secondary mt-8\">\n <div class=\"si-h5\">{{ liveDataWarning.title | translate }}</div>\n <div class=\"si-body my-4\">{{ liveDataWarning.content | translate }}</div>\n </div>\n }\n }\n </div>\n </div>\n @if (!isFullHeightSection) {\n <footer>\n <div>\n <div class=\"d-flex justify-content-start flex-row flex-wrap mt-6\">\n @for (link of links(); track $index) {\n <span>\n <a siLinkDefaultTarget=\"_blank\" class=\"si-body me-6\" [siLink]=\"link\">\n {{ link.title | translate }}\n </a>\n </span>\n }\n </div>\n <div class=\"si-caption mt-4 mb-6 text-secondary d-flex flex-wrap\">\n @if (version()) {\n <span class=\"me-6\">{{ version() }}</span>\n }\n <si-copyright-notice [copyright]=\"copyrightDetails()\" />\n </div>\n </div>\n </footer>\n }\n </div>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLandingPageComponent } from './si-landing-page.component';\n\n@NgModule({\n imports: [SiLandingPageComponent],\n exports: [SiLandingPageComponent]\n})\nexport class SiLandingPageModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n OnInit,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Link, SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiLoadingButtonComponent } from '@siemens/element-ng/loading-spinner';\nimport { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { UsernamePassword, UsernameValidationPayload } from '../si-landing-page.model';\n\n/**\n * A basic login component that supports both single-step and two-step authentication flows.\n *\n * This component provides a standard login form with username and password fields.\n * It can be configured to work in two-step mode where username validation happens first,\n * followed by password entry.\n *\n * @example\n * ```html\n * <si-login-basic\n * [forgotPasswordLink]=\"forgotPasswordLink\"\n * [registerNowLink]=\"registerNowLink\"\n * [twoStep]=\"true\"\n * [loading]=\"isLoading\"\n * (login)=\"handleLogin($event)\"\n * (usernameValidation)=\"handleUsernameValidation($event)\">\n * </si-login-basic>\n * ```\n */\n@Component({\n selector: 'si-login-basic',\n imports: [\n ReactiveFormsModule,\n SiTranslatePipe,\n SiLinkDirective,\n SiPasswordToggleComponent,\n SiLoadingButtonComponent\n ],\n templateUrl: './si-login-basic.component.html',\n styleUrl: './si-login-basic.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'animate.enter': 'component-enter'\n }\n})\nexport class SiLoginBasicComponent implements OnInit {\n private static idCounter = 0;\n /**\n * Label for username input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.USERNAME:Username`)\n * ```\n */\n readonly usernameLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.USERNAME:Username`));\n /**\n * Label for password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.PASSWORD:Password`)\n * ```\n */\n readonly passwordLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.PASSWORD:Password`));\n /**\n * Config for Forgot Password link.\n * If `title` is omitted, a default translated label is used.\n */\n readonly forgotPasswordLink = input<Link>();\n /**\n * Config for Register Now link.\n * If `title` is omitted, a default translated label is used.\n */\n readonly registerNowLink = input<Link>();\n /**\n * Label for login button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.LOGIN:Login`)\n * ```\n */\n readonly loginButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.LOGIN:Login`));\n /**\n * Disables the login button.\n *\n * @defaultValue false\n */\n readonly disableLogin = input(false);\n /**\n * Enables the two-step login flow.\n *\n * @defaultValue false\n */\n readonly twoStep = input(false, { transform: booleanAttribute });\n\n /**\n * Indicates whether the login button should show a loading state.\n *\n * @defaultValue false\n */\n readonly loading = input(false);\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.BACK:Back`));\n /**\n * Description of next button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_BASIC.NEXT:Next`)\n * ```\n */\n readonly nextButtonLabel = input(t(() => $localize`:@@SI_LOGIN_BASIC.NEXT:Next`));\n /**\n * Emits username when user clicks on next button.\n */\n readonly usernameValidation = output<UsernameValidationPayload>();\n /**\n * Emits username and password on value change.\n */\n readonly valueChanged = output<UsernamePassword>();\n /**\n * Emits username and password on login event.\n */\n readonly login = output<UsernamePassword>();\n\n private destroyRef = inject(DestroyRef);\n protected readonly secondStepVisible = signal(false);\n protected readonly loadingNext = signal(false);\n\n private readonly defaultForgotPasswordTitle = t(\n () => $localize`:@@SI_LOGIN_BASIC.FORGOT_PASSWORD:Forgot password`\n );\n private readonly defaultRegisterNowTitle = t(\n () => $localize`:@@SI_LOGIN_BASIC.REGISTER_NOW:Register now`\n );\n\n protected readonly effectiveForgotPasswordLink = computed(() => {\n const link = this.forgotPasswordLink();\n return !!link && link.title ? link : { ...link, title: this.defaultForgotPasswordTitle };\n });\n\n protected readonly effectiveRegisterNowLink = computed(() => {\n const link = this.registerNowLink();\n return !!link && link.title ? link : { ...link, title: this.defaultRegisterNowTitle };\n });\n\n private readonly index = SiLoginBasicComponent.idCounter++;\n protected usernameId = `__si-login-basic-username-${this.index}`;\n protected passwordId = `__si-login-basic-password-${this.index}`;\n\n protected loginCredentials = new FormGroup({\n username: new FormControl('', Validators.required),\n password: new FormControl('', Validators.required)\n });\n\n ngOnInit(): void {\n this.loginCredentials.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.handleValueChanges();\n });\n\n this.loginCredentials.controls.username.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.secondStepVisible() && this.goBack());\n }\n\n protected submit(): void {\n if (this.twoStep() && !this.secondStepVisible()) {\n this.validateUsername();\n return;\n }\n this.login.emit(this.getLoginFormValues());\n }\n\n protected handleValueChanges(): void {\n this.valueChanged.emit(this.getLoginFormValues());\n }\n\n protected validateUsername(): void {\n if (this.loginCredentials.controls.username.valid) {\n this.loadingNext.set(true);\n }\n const activateArgs = {\n ...this.getLoginFormValues(),\n validate: (isValid: boolean): void => {\n if (isValid) {\n this.nextStep();\n } else {\n this.loadingNext.set(false);\n this.loginCredentials.controls.username.setErrors({ invalid: true });\n }\n }\n };\n this.usernameValidation.emit(activateArgs);\n }\n\n private getLoginFormValues(): UsernamePassword {\n const { username: username, password } = this.loginCredentials.value;\n return { username: username, password };\n }\n\n protected goBack(): void {\n this.secondStepVisible.set(false);\n this.loginCredentials.controls.password.reset();\n }\n\n private nextStep(): void {\n if (this.twoStep() && !this.secondStepVisible()) {\n this.loadingNext.set(false);\n this.secondStepVisible.set(true);\n }\n }\n}\n","@let forgotPasswordLink = this.effectiveForgotPasswordLink();\n@let registerNowLink = this.effectiveRegisterNowLink();\n@let secondStepVisible = this.secondStepVisible();\n\n<form #loginForm [formGroup]=\"loginCredentials\" (ngSubmit)=\"submit()\">\n <div class=\"my-4\">\n <label class=\"form-label\" [for]=\"usernameId\">{{ usernameLabel() | translate }}</label>\n <input type=\"email\" class=\"form-control\" formControlName=\"username\" [id]=\"usernameId\" />\n </div>\n <div class=\"login-basic-second-step--container\" [class.active]=\"!twoStep() || secondStepVisible\">\n <div class=\"login-basic-second-step--content\">\n <div class=\"mb-4\">\n <label class=\"form-label\" [for]=\"passwordId\">{{ passwordLabel() | translate }}</label>\n <si-password-toggle #toggle>\n <input\n class=\"form-control\"\n formControlName=\"password\"\n [id]=\"passwordId\"\n [type]=\"toggle.inputType\"\n />\n </si-password-toggle>\n </div>\n @if (forgotPasswordLink) {\n <a class=\"si-h5 mb-4\" [siLink]=\"forgotPasswordLink\">{{\n forgotPasswordLink.title | translate\n }}</a>\n }\n <div class=\"d-flex align-items-center gap-6 mt-8\">\n @if (twoStep()) {\n <button type=\"button\" class=\"btn btn-secondary w-100\" (click)=\"goBack()\">\n {{ backButtonLabel() | translate }}\n </button>\n }\n <si-loading-button\n type=\"submit\"\n class=\"w-100\"\n buttonClass=\"btn btn-primary\"\n [disabled]=\"disableLogin()\"\n [loading]=\"loading()\"\n >\n {{ loginButtonLabel() | translate }}\n </si-loading-button>\n </div>\n </div>\n </div>\n @if (twoStep()) {\n <div\n class=\"login-basic-next-button--container\"\n [attr.aria-hidden]=\"secondStepVisible\"\n [class.active]=\"!secondStepVisible\"\n >\n <si-loading-button\n class=\"login-basic-next-button w-100\"\n buttonClass=\"btn btn-primary\"\n [loading]=\"loadingNext()\"\n (click)=\"validateUsername()\"\n >\n {{ nextButtonLabel() | translate }}\n </si-loading-button>\n </div>\n }\n</form>\n@if (registerNowLink) {\n <div class=\"si-body mt-8\">\n <a class=\"si-h5\" [siLink]=\"registerNowLink\">{{ registerNowLink.title | translate }}</a>\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\n/**\n * A single sign-on (SSO) login component that provides a button for SSO authentication.\n *\n * This component renders a simple button that users can click to initiate\n * single sign-on authentication flow.\n *\n * @example\n * ```html\n * <si-login-single-sign-on\n * [ssoButtonLabel]=\"customLabel\"\n * [disableSso]=\"isLoading\"\n * (ssoEvent)=\"handleSsoLogin()\">\n * </si-login-single-sign-on>\n * ```\n */\n@Component({\n selector: 'si-login-single-sign-on',\n imports: [SiTranslatePipe],\n templateUrl: './si-login-single-sign-on.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiLoginSingleSignOnComponent {\n /**\n * Label for login button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LOGIN_SINGLE-SIGN-ON.LOGIN_SIGN_UP:Login / Sign un`)\n * ```\n */\n readonly ssoButtonLabel = input(\n t(() => $localize`:@@SI_LOGIN_SINGLE-SIGN-ON.LOGIN_SIGN_UP:Login / Sign un`)\n );\n /**\n * Disables the sso button.\n *\n * @defaultValue false\n */\n readonly disableSso = input(false);\n /**\n * Emits username and password on login event.\n */\n readonly ssoEvent = output<void>();\n\n protected ssoClick(): void {\n this.ssoEvent.emit();\n }\n}\n","<button\n type=\"button\"\n class=\"btn btn-primary mt-4 w-100\"\n [disabled]=\"disableSso()\"\n (click)=\"ssoClick()\"\n>\n {{ ssoButtonLabel() | translate }}\n</button>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n Component,\n inject,\n input,\n OnInit,\n output,\n OnDestroy,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { SiTranslatePipe, t, TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiLandingPageComponent } from '../si-landing-page.component';\n\n/**\n * A component for displaying legal agreements that require explicit user acknowledgment.\n *\n * This component provides a standardized interface for presenting legal documents,\n * terms of service, privacy policies, or other agreements that users must\n * explicitly accept before proceeding.\n *\n * @example\n * ```html\n * <si-explicit-legal-acknowledge\n * [heading]=\"agreementTitle\"\n * [subheading]=\"agreementDescription\"\n * [disableAcceptance]=\"isProcessing\"\n * (accept)=\"handleAcceptance()\"\n * (back)=\"handleBack()\">\n * <div>\n * <h3>Terms of Service</h3>\n * <p>Please read and accept our terms before continuing.</p>\n * <ul>\n * <li>Term 1: You agree to ...</li>\n * <li>Term 2: You acknowledge ...</li>\n * </ul>\n * </div>\n * </si-explicit-legal-acknowledge>\n * ```\n */\n@Component({\n selector: 'si-explicit-legal-acknowledge',\n imports: [SiTranslatePipe],\n templateUrl: './si-explicit-legal-acknowledge.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiExplicitLegalAcknowledgeComponent implements OnInit, OnDestroy {\n /**\n * Heading of the agreement.\n */\n readonly heading = input.required<TranslatableString>();\n /**\n * Short description of the agreement.\n */\n readonly subheading = input.required<TranslatableString>();\n /**\n * Label for accept button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.ACCEPT:Accept`)\n * ```\n */\n readonly acceptButtonLabel = input(\n t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.ACCEPT:Accept`)\n );\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.BACK:Back`));\n /**\n * Disables the acceptance button.\n *\n * @defaultValue false\n */\n readonly disableAcceptance = input(false);\n /**\n * Emits end user license agreement on acceptance event.\n */\n readonly accept = output<void>();\n /**\n * Emits on back click.\n */\n readonly back = output<void>();\n /**\n * Reference to the landing page parent component.\n */\n protected landingPage = inject(SiLandingPageComponent, { skipSelf: true, optional: true });\n\n protected handleBack(): void {\n this.back.emit();\n }\n\n protected handleAccept(): void {\n this.accept.emit();\n }\n\n ngOnInit(): void {\n this.landingPage?.isFullHeightSection.set(true);\n }\n\n ngOnDestroy(): void {\n this.landingPage?.isFullHeightSection.set(false);\n }\n}\n","<div class=\"d-flex flex-column py-8 h-100\">\n <h2 class=\"si-h2 mb-4\">{{ heading() | translate }}</h2>\n <div class=\"si-body mb-6\">{{ subheading() | translate }}</div>\n\n <div tabindex=\"0\" class=\"form-control si-body text-secondary flex-grow-1 overflow-auto\">\n <ng-content />\n </div>\n <div class=\"d-flex align-items-center gap-6 mt-6\">\n <button type=\"button\" class=\"btn btn-secondary w-100\" (click)=\"handleBack()\">\n {{ backButtonLabel() | translate }}\n </button>\n <button\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [disabled]=\"disableAcceptance()\"\n (click)=\"handleAccept()\"\n >\n {{ acceptButtonLabel() | translate }}\n </button>\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n input,\n OnInit,\n output,\n TemplateRef,\n OnDestroy,\n inject,\n DestroyRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { SiInlineNotificationComponent } from '@siemens/element-ng/inline-notification';\nimport {\n PasswordPolicy,\n SiPasswordStrengthComponent,\n SiPasswordStrengthDirective\n} from '@siemens/element-ng/password-strength';\nimport { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { AlertConfig } from '../alert-config.model';\nimport { SiLandingPageComponent } from '../si-landing-page.component';\nimport { ChangePassword } from '../si-landing-page.model';\n\n/**\n * A component for changing user passwords with strength validation and policy enforcement.\n *\n * This component provides a form for users to change their password, including\n * password strength indicators, policy validation, and confirmation fields.\n * It supports custom password policies and displays inline notifications for alerts.\n *\n * @example\n * ```html\n * <si-change-password\n * [passwordStrength]=\"passwordPolicy\"\n * [passwordPolicyContent]=\"policyTemplate\"\n * [changePasswordAlert]=\"alertConfig\"\n * (changePasswordRequested)=\"handlePasswordChange($event)\"\n * (back)=\"handleBack()\">\n * </si-change-password>\n * ```\n */\n@Component({\n selector: 'si-change-password',\n imports: [\n ReactiveFormsModule,\n SiTranslatePipe,\n SiPasswordToggleComponent,\n NgTemplateOutlet,\n SiInlineNotificationComponent,\n SiPasswordStrengthComponent,\n SiPasswordStrengthDirective\n ],\n templateUrl: './si-change-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiChangePasswordComponent implements OnInit, OnDestroy {\n private static idCounter = 0;\n /**\n * Change password heading.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_PASSWORD:Change password`)\n * ```\n */\n readonly heading = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_PASSWORD:Change password`)\n );\n /**\n * Short description of the action to perform.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_FACTORY_PASSWORD:Factory set password must be changed`)\n * ```\n */\n readonly subheading = input(\n t(\n () =>\n $localize`:@@SI_CHANGE_PASSWORD.CHANGE_FACTORY_PASSWORD:Factory set password must be changed`\n )\n );\n /**\n * Label for new password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.NEW_PASSWORD:New password`)\n * ```\n */\n readonly newPasswordLabel = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.NEW_PASSWORD:New password`)\n );\n /**\n * Label for confirm password input field.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CONFIRM_PASSWORD:Confirm password`)\n * ```\n */\n readonly confirmPasswordLabel = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.CONFIRM_PASSWORD:Confirm password`)\n );\n /**\n * Label for change password button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE:Change`)\n * ```\n */\n readonly changeButtonLabel = input(t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE:Change`));\n /**\n * Description of back button.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.BACK:Back`)\n * ```\n */\n readonly backButtonLabel = input(t(() => $localize`:@@SI_CHANGE_PASSWORD.BACK:Back`));\n /**\n * Disables the change password button.\n *\n * @defaultValue false\n */\n readonly disableChange = input(false);\n /**\n * Title of the password policy.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CHANGE_PASSWORD.PASSWORD_POLICY:Password policy`)\n * ```\n */\n readonly passwordPolicyTitle = input(\n t(() => $localize`:@@SI_CHANGE_PASSWORD.PASSWORD_POLICY:Password policy`)\n );\n /**\n * Description of the password policy requirements.\n */\n readonly passwordPolicyContent = input.required<string | TemplateRef<unknown>>();\n /**\n * Description of the password policy requirements.\n */\n readonly passwordStrength = input.required<PasswordPolicy>();\n /**\n * Config to enable/disable password related error/alerts.\n */\n readonly changePasswordAlert = input<AlertConfig>();\n /**\n * Emits password on value change.\n */\n readonly valueChanged = output<ChangePassword>();\n /**\n * Emits password on change event.\n */\n readonly changePasswordRequested = output<ChangePassword>();\n /**\n * The number indicating the number of rules which still can be met. (`-2` --\\> 2 rules are\n * still unmet, `0` --\\> all met)\n */\n readonly passwordStrengthChanged = output<number | void>();\n /**\n * Emits on back click.\n */\n readonly back = output<void>();\n /**\n * Reference to the landing page parent component.\n */\n protected landingPage = inject(SiLandingPageComponent, { skipSelf: true, optional: true });\n\n private readonly index = SiChangePasswordComponent.idCounter++;\n protected newPasswordId = `__si-change-password-new-password-${this.index}`;\n protected confirmPasswordId = `__si-change-password-confirm-password-${this.index}`;\n\n protected changePasswordForm = new FormGroup({\n newPassword: new FormControl(''),\n confirmPassword: new FormControl('')\n });\n protected passwordPolicyContentTemplate: TemplateRef<any> | null = null;\n\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.landingPage?.isFullHeightSection.set(true);\n const passwordPolicy = this.passwordPolicyContent();\n if (passwordPolicy instanceof TemplateRef) {\n this.passwordPolicyContentTemplate = passwordPolicy;\n }\n this.changePasswordForm.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.handleValueChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.landingPage?.isFullHeightSection.set(false);\n }\n\n protected submit(): void {\n this.changePasswordRequested.emit(this.getPasswordFormValues());\n }\n\n protected handleValueChanges(): void {\n this.valueChanged.emit(this.getPasswordFormValues());\n }\n\n protected handlePasswordStrengthChanged(data: number | void): void {\n this.passwordStrengthChanged.emit(data);\n }\n\n private getPasswordFormValues(): ChangePassword {\n const { newPassword: newPassword, confirmPassword } = this.changePasswordForm.value;\n return { newPassword: newPassword, confirmPassword };\n }\n\n protected handleBackClick(): void {\n this.back.emit();\n this.changePasswordForm.reset();\n }\n}\n","@let changePasswordAlert = this.changePasswordAlert();\n@let passwordPolicyContent = this.passwordPolicyContent();\n\n<div class=\"d-flex flex-column justify-content-center py-8 h-100\">\n <div class=\"position-relative\">\n <h2 class=\"si-h2\" [class.invisible]=\"changePasswordAlert\">{{ heading() | translate }}</h2>\n <div class=\"si-body mb-4\" [class.invisible]=\"changePasswordAlert\">{{\n subheading() | translate\n }}</div>\n @if (changePasswordAlert) {\n <si-inline-notification\n class=\"position-absolute bottom-0 w-100\"\n [severity]=\"changePasswordAlert.severity || 'danger'\"\n [heading]=\"changePasswordAlert.heading\"\n [message]=\"changePasswordAlert.message\"\n />\n }\n </div>\n <form [formGroup]=\"changePasswordForm\" (ngSubmit)=\"submit()\">\n <div class=\"my-4\">\n <label class=\"form-label\" [for]=\"newPasswordId\">{{ newPasswordLabel() | translate }}</label>\n <si-password-strength>\n <input\n type=\"password\"\n class=\"form-control\"\n formControlName=\"newPassword\"\n [id]=\"newPasswordId\"\n [siPasswordStrength]=\"passwordStrength()\"\n (passwordStrengthChanged)=\"handlePasswordStrengthChanged($event)\"\n />\n </si-password-strength>\n </div>\n <div class=\"mb-4\">\n <label class=\"form-label\" [for]=\"confirmPasswordId\">{{\n confirmPasswordLabel() | translate\n }}</label>\n <si-password-toggle #toggleConfirmPassword>\n <input\n class=\"form-control\"\n formControlName=\"confirmPassword\"\n [id]=\"confirmPasswordId\"\n [type]=\"toggleConfirmPassword.inputType\"\n />\n </si-password-toggle>\n </div>\n <div class=\"d-flex align-items-center gap-6 mt-6\">\n <button type=\"button\" class=\"btn btn-secondary w-100 back-button\" (click)=\"handleBackClick()\">\n {{ backButtonLabel() | translate }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary w-100\" [disabled]=\"disableChange()\">\n {{ changeButtonLabel() | translate }}\n </button>\n </div>\n </form>\n <div class=\"text-secondary mt-8\">\n <div class=\"si-h5\">{{ passwordPolicyTitle() | translate }}</div>\n @if (!passwordPolicyContentTemplate) {\n <div class=\"my-4\" [innerHTML]=\"passwordPolicyContent\"></div>\n } @else {\n <div class=\"my-4\">\n <ng-container [ngTemplateOutlet]=\"passwordPolicyContentTemplate\" />\n </div>\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-landing-page.module';\nexport * from './si-landing-page.component';\nexport * from './login-basic/si-login-basic.component';\nexport * from './login-single-sign-on/si-login-single-sign-on.component';\nexport * from './explicit-legal-acknowledge/si-explicit-legal-acknowledge.component';\nexport * from './change-password/si-change-password.component';\nexport * from './alert-config.model';\nexport * from './si-landing-page.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, computed, Component, NgModule } from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
3
|
import { t, injectSiTranslateService, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -52,11 +52,11 @@ class SiLanguageSwitcherComponent {
|
|
|
52
52
|
this.translate.setCurrentLanguage(language);
|
|
53
53
|
}
|
|
54
54
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiLanguageSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiLanguageSwitcherComponent, isStandalone: true, selector: "si-language-switcher", inputs: { translationKey: { classPropertyName: "translationKey", publicName: "translationKey", isSignal: true, isRequired: false, transformFunction: null }, languageSwitcherLabel: { classPropertyName: "languageSwitcherLabel", publicName: "languageSwitcherLabel", isSignal: true, isRequired: false, transformFunction: null }, availableLanguages: { classPropertyName: "availableLanguages", publicName: "availableLanguages", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media(min-width:768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
55
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiLanguageSwitcherComponent, isStandalone: true, selector: "si-language-switcher", inputs: { translationKey: { classPropertyName: "translationKey", publicName: "translationKey", isSignal: true, isRequired: false, transformFunction: null }, languageSwitcherLabel: { classPropertyName: "languageSwitcherLabel", publicName: "languageSwitcherLabel", isSignal: true, isRequired: false, transformFunction: null }, availableLanguages: { classPropertyName: "availableLanguages", publicName: "availableLanguages", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media(min-width:768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"], dependencies: [{ kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
56
56
|
}
|
|
57
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiLanguageSwitcherComponent, decorators: [{
|
|
58
58
|
type: Component,
|
|
59
|
-
args: [{ selector: 'si-language-switcher', imports: [SiTranslatePipe], template: "<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media(min-width:768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"] }]
|
|
59
|
+
args: [{ selector: 'si-language-switcher', imports: [SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Default, template: "<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media(min-width:768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"] }]
|
|
60
60
|
}], propDecorators: { translationKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "translationKey", required: false }] }], languageSwitcherLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "languageSwitcherLabel", required: false }] }], availableLanguages: [{ type: i0.Input, args: [{ isSignal: true, alias: "availableLanguages", required: false }] }] } });
|
|
61
61
|
|
|
62
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-language-switcher.mjs","sources":["../../../../projects/element-ng/language-switcher/si-language-switcher.component.ts","../../../../projects/element-ng/language-switcher/si-language-switcher.component.html","../../../../projects/element-ng/language-switcher/si-language-switcher.module.ts","../../../../projects/element-ng/language-switcher/index.ts","../../../../projects/element-ng/language-switcher/siemens-element-ng-language-switcher.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, input } from '@angular/core';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\n\nimport { IsoLanguageValue } from './iso-language-value';\n\n@Component({\n selector: 'si-language-switcher',\n imports: [SiTranslatePipe],\n templateUrl: './si-language-switcher.component.html',\n styleUrl: './si-language-switcher.component.scss'\n})\nexport class SiLanguageSwitcherComponent {\n /**\n * Key for translation.\n * If the key is set to an empty string, the language of the underlying translation framework will not be switched.\n *\n * @defaultValue 'LANGUAGE'\n */\n readonly translationKey = input('LANGUAGE');\n /**\n * Text for aria label for the language selector. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`)\n * ```\n */\n readonly languageSwitcherLabel = input(\n t(() => $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`)\n );\n\n /**\n * List of all available languages in this application.\n *\n * @defaultValue null\n */\n readonly availableLanguages = input<(string | IsoLanguageValue)[] | null>(null);\n\n protected readonly translate = injectSiTranslateService();\n\n protected readonly availableIsoLanguages = computed(() => {\n let languages = this.availableLanguages() ?? this.translate.availableLanguages;\n if (typeof languages[0] !== 'object') {\n languages = (languages as string[]).map(languageValue => {\n const translationKey = this.translationKey();\n return {\n value: languageValue,\n name: translationKey ? `${translationKey}.${languageValue.toUpperCase()}` : languageValue\n };\n });\n }\n return languages as IsoLanguageValue[];\n });\n\n protected switchLanguage(target: EventTarget | null): void {\n const language = (target as HTMLSelectElement)?.value;\n const translationKey = this.translationKey();\n if (!language || !translationKey?.length) {\n return;\n }\n this.translate.setCurrentLanguage(language);\n }\n}\n","<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLanguageSwitcherComponent } from './si-language-switcher.component';\n\n@NgModule({\n imports: [SiLanguageSwitcherComponent],\n exports: [SiLanguageSwitcherComponent]\n})\nexport class SiLanguageSwitcherModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-language-switcher.component';\nexport * from './si-language-switcher.module';\nexport * from './iso-language-value';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-language-switcher.mjs","sources":["../../../../projects/element-ng/language-switcher/si-language-switcher.component.ts","../../../../projects/element-ng/language-switcher/si-language-switcher.component.html","../../../../projects/element-ng/language-switcher/si-language-switcher.module.ts","../../../../projects/element-ng/language-switcher/index.ts","../../../../projects/element-ng/language-switcher/siemens-element-ng-language-switcher.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\n\nimport { IsoLanguageValue } from './iso-language-value';\n\n@Component({\n selector: 'si-language-switcher',\n imports: [SiTranslatePipe],\n templateUrl: './si-language-switcher.component.html',\n styleUrl: './si-language-switcher.component.scss',\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SiLanguageSwitcherComponent {\n /**\n * Key for translation.\n * If the key is set to an empty string, the language of the underlying translation framework will not be switched.\n *\n * @defaultValue 'LANGUAGE'\n */\n readonly translationKey = input('LANGUAGE');\n /**\n * Text for aria label for the language selector. Needed for a11y\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`)\n * ```\n */\n readonly languageSwitcherLabel = input(\n t(() => $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`)\n );\n\n /**\n * List of all available languages in this application.\n *\n * @defaultValue null\n */\n readonly availableLanguages = input<(string | IsoLanguageValue)[] | null>(null);\n\n protected readonly translate = injectSiTranslateService();\n\n protected readonly availableIsoLanguages = computed(() => {\n let languages = this.availableLanguages() ?? this.translate.availableLanguages;\n if (typeof languages[0] !== 'object') {\n languages = (languages as string[]).map(languageValue => {\n const translationKey = this.translationKey();\n return {\n value: languageValue,\n name: translationKey ? `${translationKey}.${languageValue.toUpperCase()}` : languageValue\n };\n });\n }\n return languages as IsoLanguageValue[];\n });\n\n protected switchLanguage(target: EventTarget | null): void {\n const language = (target as HTMLSelectElement)?.value;\n const translationKey = this.translationKey();\n if (!language || !translationKey?.length) {\n return;\n }\n this.translate.setCurrentLanguage(language);\n }\n}\n","<select\n class=\"si-h5 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLanguageSwitcherComponent } from './si-language-switcher.component';\n\n@NgModule({\n imports: [SiLanguageSwitcherComponent],\n exports: [SiLanguageSwitcherComponent]\n})\nexport class SiLanguageSwitcherModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-language-switcher.component';\nexport * from './si-language-switcher.module';\nexport * from './iso-language-value';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;MAiBU,2BAA2B,CAAA;AACtC;;;;;AAKG;AACM,IAAA,cAAc,GAAG,KAAK,CAAC,UAAU,0DAAC;AAC3C;;;;;;;AAOG;AACM,IAAA,qBAAqB,GAAG,KAAK,CACpC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,+CAAA,CAAiD,CAAC,iEACpE;AAED;;;;AAIG;AACM,IAAA,kBAAkB,GAAG,KAAK,CAAuC,IAAI,8DAAC;IAE5D,SAAS,GAAG,wBAAwB,EAAE;AAEtC,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACvD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB;QAC9E,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AACpC,YAAA,SAAS,GAAI,SAAsB,CAAC,GAAG,CAAC,aAAa,IAAG;AACtD,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;gBAC5C,OAAO;AACL,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,IAAI,EAAE,cAAc,GAAG,GAAG,cAAc,CAAA,CAAA,EAAI,aAAa,CAAC,WAAW,EAAE,CAAA,CAAE,GAAG;iBAC7E;AACH,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,SAA+B;AACxC,IAAA,CAAC,iEAAC;AAEQ,IAAA,cAAc,CAAC,MAA0B,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAI,MAA4B,EAAE,KAAK;AACrD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;YACxC;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IAC7C;uGAlDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBxC,sZAWA,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDIY,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA;;2FAKd,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,CAAC,eAAe,CAAC,EAAA,eAAA,EAGT,uBAAuB,CAAC,OAAO,EAAA,QAAA,EAAA,sZAAA,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA;;;AElBlD;;;AAGG;MASU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAxB,wBAAwB,EAAA,OAAA,EAAA,CAHzB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAC3B,2BAA2B,CAAA,EAAA,CAAA;wGAE1B,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,2BAA2B,CAAC;oBACtC,OAAO,EAAE,CAAC,2BAA2B;AACtC,iBAAA;;;ACXD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { SecurityContext, inject, ElementRef, input, effect, Component } from '@angular/core';
|
|
2
|
+
import { SecurityContext, inject, ElementRef, input, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -239,13 +239,14 @@ class SiMarkdownRendererComponent {
|
|
|
239
239
|
});
|
|
240
240
|
}
|
|
241
241
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiMarkdownRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
242
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiMarkdownRendererComponent, isStandalone: true, selector: "si-markdown-renderer", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: ``, isInline: true });
|
|
242
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiMarkdownRendererComponent, isStandalone: true, selector: "si-markdown-renderer", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
243
243
|
}
|
|
244
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiMarkdownRendererComponent, decorators: [{
|
|
245
245
|
type: Component,
|
|
246
246
|
args: [{
|
|
247
247
|
selector: 'si-markdown-renderer',
|
|
248
|
-
template:
|
|
248
|
+
template: ``,
|
|
249
|
+
changeDetection: ChangeDetectionStrategy.Default
|
|
249
250
|
}]
|
|
250
251
|
}], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }] } });
|
|
251
252
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-markdown-renderer.mjs","sources":["../../../../projects/element-ng/markdown-renderer/markdown-renderer.ts","../../../../projects/element-ng/markdown-renderer/si-markdown-renderer.component.ts","../../../../projects/element-ng/markdown-renderer/index.ts","../../../../projects/element-ng/markdown-renderer/siemens-element-ng-markdown-renderer.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * Returns a markdown renderer function which_\n * - Transforms markdown text into formatted HTML.\n * - Returns a DOM node containing the formatted content.\n *\n * **Warning:** The returned Node is inserted without additional sanitization.\n * Input content is sanitized before processing.\n *\n * @experimental\n * @param sanitizer - Angular DomSanitizer instance\n * @returns A function taking the markdown text to transform and returning a DOM div element containing the formatted HTML\n */\nexport const getMarkdownRenderer = (sanitizer: DomSanitizer): ((text: string) => Node) => {\n return (text: string): Node => {\n const div = document.createElement('div');\n div.className = 'markdown-content text-break';\n\n if (!text) {\n return div;\n }\n\n // Generate a random placeholder for newlines to preserve them during HTML sanitization\n const newlinePlaceholder = `--NEWLINE-${Math.random().toString(36).substring(2, 15)}--`;\n\n // Replace newlines with placeholder before sanitization\n const valueWithPlaceholders = text.replace(/\\n/g, newlinePlaceholder);\n\n // Sanitize the input using Angular's HTML sanitizer\n const sanitizedInput = sanitizer.sanitize(SecurityContext.HTML, valueWithPlaceholders) ?? '';\n\n // Restore newlines from placeholder for markdown processing.\n let html = sanitizedInput.replace(new RegExp(newlinePlaceholder, 'g'), '\\n');\n\n // Process tables first\n html = html\n // Remove table separator lines first\n .replace(/^\\|\\s*[-:]+.*\\|\\s*$/gm, '')\n // Process table rows\n .replace(/^\\|(.+)\\|\\s*$/gm, (_match, htmlContent) => {\n // Handle escaped pipes by temporarily replacing them\n const escapedPipePlaceholder = `--ESCAPED-PIPE-${Math.random().toString(36).substring(2, 15)}--`;\n const contentWithPlaceholders = htmlContent.replace(/\\\\\\|/g, escapedPipePlaceholder);\n const cells = contentWithPlaceholders.split('|').map((cell: string) => {\n const trimmedCell = cell.trim();\n // Restore escaped pipes\n const cellWithPipes = trimmedCell.replace(new RegExp(escapedPipePlaceholder, 'g'), '|');\n\n return cellWithPipes;\n });\n // Make cell ready for markdown processing by replacing code blocks with inline code and <br> with newlines\n const cellsWithNewlines = cells.map((cell: string) => {\n // Replace multiline code blocks with single line code blocks\n const cellWithoutMultilineCode = cell.replace(\n /```([\\s\\S]*?)```/g,\n (_innerMatch, inlineCodeContent) => {\n return '`' + inlineCodeContent.replace(/`/g, '') + '`';\n }\n );\n // Temporarily replace single line code blocks to avoid replacing <br> inside them\n const tableInlineCodeBrPlaceholder = `--INLINE-CODE-BR--${Math.random().toString(36).substring(2, 15)}--`;\n const cellWithPlaceholders = cellWithoutMultilineCode.replace(\n /(`[^`]*`)/g,\n inlineCodeMatch => {\n return inlineCodeMatch.replace(/<br>/g, tableInlineCodeBrPlaceholder);\n }\n );\n // Replace <br> with newlines\n const cellWithNewlines = cellWithPlaceholders.replace(/<br\\s*\\/?>/gi, '\\n');\n // Restore <br> in inline code placeholders\n const preProcessedCell = cellWithNewlines.replace(\n new RegExp(tableInlineCodeBrPlaceholder, 'g'),\n '<br>'\n );\n return preProcessedCell;\n });\n\n // Recursively process cell content for markdown formatting\n const processedCells = cellsWithNewlines.map((cell: string) => {\n return transformMarkdownText(cell, false, sanitizer);\n });\n\n return `<tr>${processedCells.map((cell: string) => `<td>${cell}</td>`).join('')}</tr>`;\n })\n // Wrap table rows in table elements\n .replace(/(<tr>.*?<\\/tr>)/gs, '<table class=\"table table-hover\">$1</table>')\n // Remove duplicate table tags\n .replace(/<\\/table>\\s*<table class=\"table table-hover\">/g, '');\n\n html = transformMarkdownText(html, true, sanitizer);\n\n div.innerHTML = html;\n return div;\n };\n};\n\nconst transformMarkdownText = (\n html: string,\n keepAdditionalNewlines = true,\n sanitizer: DomSanitizer\n): string => {\n // Generate a random placeholder for inner code blocks to prevent markdown processing inside them\n const innerCodeQuotePlaceholder = `--INNER-CODE-${Math.random().toString(36).substring(2, 15)}--`;\n const codeSectionPlaceholderMap = new Map<string, string>();\n\n const escapedAsteriskPlaceholder = `--ASTERISK-${Math.random().toString(36).substring(2, 15)}--`;\n const escapedUnderscorePlaceholder = `--UNDERSCORE-${Math.random().toString(36).substring(2, 15)}--`;\n\n // Apply markdown transformations to the sanitized content\n html = html\n // Multiline code blocks ```code``` with placeholder\n .replace(/```[^\\n]*\\n?([\\s\\S]*?)\\n?```/g, (match, content) => {\n // Escape HTML special characters in code blocks (not for security, but for correct display) and preserve inner backticks\n const code = `<pre><code>${content.replace(/</g, '<').replace(/>/g, '>').replace(/`/g, innerCodeQuotePlaceholder)}</code></pre>`;\n const codePlaceholder = `--CODE-BLOCK-${Math.random().toString(36).substring(2, 15)}--`;\n codeSectionPlaceholderMap.set(codePlaceholder, code);\n return codePlaceholder;\n })\n\n // Inline code `text`\n .replace(/`(.*?)`/g, (match, content) => {\n // Escape HTML special characters in inline code (not for security, but for correct display)\n const code = `<code>${content.replace(/</g, '<').replace(/>/g, '>')}</code>`;\n const codePlaceholder = `--INLINE-CODE-${Math.random().toString(36).substring(2, 15)}--`;\n codeSectionPlaceholderMap.set(codePlaceholder, code);\n return codePlaceholder;\n })\n\n // Images \n .replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_match, alt, url) => {\n const sanitizedUrl = sanitizeUrl(url, sanitizer);\n const escapedAlt = alt\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n return `<img src=\"${sanitizedUrl}\" alt=\"${escapedAlt}\">`;\n })\n\n // Links [text](url)\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_match, text, url) => {\n const sanitizedUrl = sanitizeUrl(url, sanitizer);\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n })\n\n // Auto-detect URLs and convert to links\n .replace(/(?<![\"'=(])\\b(https?:\\/\\/[^\\s<]+[^\\s<.,;!?\"')\\]])/g, match => {\n const sanitizedUrl = sanitizeUrl(match, sanitizer);\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${match}</a>`;\n })\n\n .replace(/(?<!\\\\)\\\\\\*/g, escapedAsteriskPlaceholder)\n .replace(/(?<!\\\\)\\\\_/g, escapedUnderscorePlaceholder)\n\n // Bold **text** or __text__\n .replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/__(.*?)__/g, '<strong>$1</strong>')\n\n // Italic *text* or _text_\n .replace(/\\*(.*?)\\*/g, '<em>$1</em>')\n .replace(/_(.*?)_/g, '<em>$1</em>')\n\n .replace(new RegExp(escapedAsteriskPlaceholder, 'g'), '*')\n .replace(new RegExp(escapedUnderscorePlaceholder, 'g'), '_')\n\n // Headings #, ##, ###, etc.\n .replace(/^###### (.*$)/gm, '<strong>$1</strong>')\n .replace(/^##### (.*$)/gm, '<h5>$1</h5>')\n .replace(/^#### (.*$)/gm, '<h4>$1</h4>')\n .replace(/^### (.*$)/gm, '<h3>$1</h3>')\n .replace(/^## (.*$)/gm, '<h2>$1</h2>')\n .replace(/^# (.*$)/gm, '<h2><strong>$1</strong></h2>');\n\n html = html\n // Bullet points - handle each type separately (• gets converted to • by sanitizer)\n .replace(/^• (.*$)/gm, '<li class=\"unordered\">$1</li>')\n .replace(/^- (.*$)/gm, '<li class=\"unordered\">$1</li>')\n .replace(/^\\* (.*$)/gm, '<li class=\"unordered\">$1</li>')\n\n // Ordered list items (1., 2., 3., etc.)\n .replace(/^\\d+\\. (.*$)/gm, '<li class=\"ordered\">$1</li>');\n\n html = html.replace(/^\\s*(?:>|>)\\s*(.*)$/gm, '<blockquote>$1</blockquote>');\n\n // Generate a random placeholder for newlines to differentiate them from those used for paragraphs\n const finalNewlinePlaceholder = `--NEWLINE-${Math.random().toString(36).substring(2, 15)}--`;\n\n html = html\n // Wrap ordered lists\n .replace(/(<li class=\"ordered\">.*?<\\/li>)/gs, '<ol>$1</ol>')\n\n // Wrap unordered lists\n .replace(/(<li class=\"unordered\">.*?<\\/li>)/gs, '<ul>$1</ul>')\n\n // Remove duplicate ol/ul tags\n .replace(/<\\/ol>\\s*<ol>/g, '')\n .replace(/<\\/ul>\\s*<ul>/g, '')\n\n // Clean up class attributes\n .replace(/ class=\"ordered\"/g, '')\n .replace(/ class=\"unordered\"/g, '');\n\n html = html\n // Convert double newlines to paragraphs (before single line breaks)\n .split(/\\n{2}/g)\n // Wrap non-block elements in <p> tags\n .map(segment => {\n // If the segment starts with a block element, return as is\n if (!segment.trim() || /^\\s*<(h[1-6]|pre|blockquote|ul|ol)/.test(segment.trim())) {\n // Replace newlines inside blocks with the placeholder\n return segment.replace(/\\n/g, finalNewlinePlaceholder);\n }\n // Otherwise, wrap in <p> tags\n return `<p>${segment}</p>`;\n })\n // Use newline placeholder again so as not to replace newlines between blocks\n .join(finalNewlinePlaceholder)\n // Convert remaining newlines to line breaks (do this LAST)\n .replace(/\\n/g, '<br>')\n // Restore newline placeholders\n .replace(new RegExp(finalNewlinePlaceholder, 'g'), keepAdditionalNewlines ? '\\n' : ' ');\n\n // Restore code placeholders\n codeSectionPlaceholderMap.forEach((code, placeholder) => {\n html = html.replace(new RegExp(placeholder, 'g'), code);\n });\n\n // Restore inner code block placeholders\n html = html.replace(new RegExp(innerCodeQuotePlaceholder, 'g'), '`');\n\n return html;\n};\n\n/**\n * Sanitizes a URL to prevent XSS attacks\n * @param url - The URL to sanitize\n * @param sanitizer - Angular DomSanitizer instance\n * @returns The sanitized URL or '#' if invalid\n */\nconst sanitizeUrl = (url: string, sanitizer: DomSanitizer): string => {\n // Remove any whitespace\n url = url.trim();\n\n // Allow only http, https, and mailto protocols\n const allowed = /^(https?:\\/\\/|mailto:|\\/(?!\\/)|\\.{1,2}\\/|#)/i;\n\n // Sanitize the URL using Angular's sanitizer\n if (!allowed.test(url)) {\n return '#';\n }\n\n // Sanitize the URL using Angular's sanitizer\n const sanitized = sanitizer.sanitize(SecurityContext.URL, url);\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return sanitized || '#';\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Component, effect, inject, input, ElementRef } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { getMarkdownRenderer } from './markdown-renderer';\n\n/**\n * Component to display markdown text, uses the {@link getMarkdownRenderer} function internally, relies on `markdown-content` theme class.\n * @experimental\n */\n@Component({\n selector: 'si-markdown-renderer',\n template: ``\n})\nexport class SiMarkdownRendererComponent {\n private sanitizer = inject(DomSanitizer);\n private hostElement = inject(ElementRef<HTMLElement>);\n private markdownRenderer = getMarkdownRenderer(this.sanitizer);\n\n /**\n * The markdown text to transform and display\n * @defaultValue ''\n */\n readonly text = input<string | undefined>();\n\n constructor() {\n effect(() => {\n const contentValue = this.text();\n const containerEl = this.hostElement.nativeElement;\n\n if (containerEl) {\n const formattedNode = this.markdownRenderer(contentValue ?? '');\n containerEl.innerHTML = '';\n containerEl.appendChild(formattedNode);\n }\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-markdown-renderer.component';\nexport * from './markdown-renderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;AAIH;;;;;;;;;;;AAWG;AACI,MAAM,mBAAmB,GAAG,CAAC,SAAuB,KAA8B;IACvF,OAAO,CAAC,IAAY,KAAU;QAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,6BAA6B;QAE7C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,GAAG;QACZ;;QAGA,MAAM,kBAAkB,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;;QAGvF,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;;AAGrE,QAAA,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE;;AAG5F,QAAA,IAAI,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;;AAG5E,QAAA,IAAI,GAAG;;AAEJ,aAAA,OAAO,CAAC,uBAAuB,EAAE,EAAE;;aAEnC,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAI;;YAElD,MAAM,sBAAsB,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;YAChG,MAAM,uBAAuB,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC;AACpF,YAAA,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,KAAI;AACpE,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;;AAE/B,gBAAA,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AAEvF,gBAAA,OAAO,aAAa;AACtB,YAAA,CAAC,CAAC;;YAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,KAAI;;AAEnD,gBAAA,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAC3C,mBAAmB,EACnB,CAAC,WAAW,EAAE,iBAAiB,KAAI;AACjC,oBAAA,OAAO,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG;AACxD,gBAAA,CAAC,CACF;;gBAED,MAAM,4BAA4B,GAAG,CAAA,kBAAA,EAAqB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;gBACzG,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,CAC3D,YAAY,EACZ,eAAe,IAAG;oBAChB,OAAO,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,4BAA4B,CAAC;AACvE,gBAAA,CAAC,CACF;;gBAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;;AAE3E,gBAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAC/C,IAAI,MAAM,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAC7C,MAAM,CACP;AACD,gBAAA,OAAO,gBAAgB;AACzB,YAAA,CAAC,CAAC;;YAGF,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAY,KAAI;gBAC5D,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;AACtD,YAAA,CAAC,CAAC;YAEF,OAAO,CAAA,IAAA,EAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAY,KAAK,OAAO,IAAI,CAAA,KAAA,CAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;AACxF,QAAA,CAAC;;AAEA,aAAA,OAAO,CAAC,mBAAmB,EAAE,6CAA6C;;AAE1E,aAAA,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC;QAEhE,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AAEnD,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI;AACpB,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC;AACH;AAEA,MAAM,qBAAqB,GAAG,CAC5B,IAAY,EACZ,sBAAsB,GAAG,IAAI,EAC7B,SAAuB,KACb;;IAEV,MAAM,yBAAyB,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;AACjG,IAAA,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAkB;IAE3D,MAAM,0BAA0B,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;IAChG,MAAM,4BAA4B,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;;AAGpG,IAAA,IAAI,GAAG;;SAEJ,OAAO,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAI;;QAE3D,MAAM,IAAI,GAAG,CAAA,WAAA,EAAc,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA,aAAA,CAAe;QACtI,MAAM,eAAe,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;AACvF,QAAA,yBAAyB,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC;AACpD,QAAA,OAAO,eAAe;AACxB,IAAA,CAAC;;SAGA,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAI;;AAEtC,QAAA,MAAM,IAAI,GAAG,CAAA,MAAA,EAAS,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS;QAClF,MAAM,eAAe,GAAG,CAAA,cAAA,EAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;AACxF,QAAA,yBAAyB,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC;AACpD,QAAA,OAAO,eAAe;AACxB,IAAA,CAAC;;SAGA,OAAO,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAI;QACzD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;QAChD,MAAM,UAAU,GAAG;AAChB,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACxB,QAAA,OAAO,CAAA,UAAA,EAAa,YAAY,CAAA,OAAA,EAAU,UAAU,IAAI;AAC1D,IAAA,CAAC;;SAGA,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAI;QACzD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AAChD,QAAA,OAAO,CAAA,SAAA,EAAY,YAAY,CAAA,4CAAA,EAA+C,IAAI,MAAM;AAC1F,IAAA,CAAC;;AAGA,SAAA,OAAO,CAAC,oDAAoD,EAAE,KAAK,IAAG;QACrE,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;AAClD,QAAA,OAAO,CAAA,SAAA,EAAY,YAAY,CAAA,4CAAA,EAA+C,KAAK,MAAM;AAC3F,IAAA,CAAC;AAEA,SAAA,OAAO,CAAC,cAAc,EAAE,0BAA0B;AAClD,SAAA,OAAO,CAAC,aAAa,EAAE,4BAA4B;;AAGnD,SAAA,OAAO,CAAC,gBAAgB,EAAE,qBAAqB;AAC/C,SAAA,OAAO,CAAC,YAAY,EAAE,qBAAqB;;AAG3C,SAAA,OAAO,CAAC,YAAY,EAAE,aAAa;AACnC,SAAA,OAAO,CAAC,UAAU,EAAE,aAAa;SAEjC,OAAO,CAAC,IAAI,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE,GAAG;SACxD,OAAO,CAAC,IAAI,MAAM,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,GAAG;;AAG1D,SAAA,OAAO,CAAC,iBAAiB,EAAE,qBAAqB;AAChD,SAAA,OAAO,CAAC,gBAAgB,EAAE,aAAa;AACvC,SAAA,OAAO,CAAC,eAAe,EAAE,aAAa;AACtC,SAAA,OAAO,CAAC,cAAc,EAAE,aAAa;AACrC,SAAA,OAAO,CAAC,aAAa,EAAE,aAAa;AACpC,SAAA,OAAO,CAAC,YAAY,EAAE,8BAA8B,CAAC;AAExD,IAAA,IAAI,GAAG;;AAEJ,SAAA,OAAO,CAAC,kBAAkB,EAAE,+BAA+B;AAC3D,SAAA,OAAO,CAAC,YAAY,EAAE,+BAA+B;AACrD,SAAA,OAAO,CAAC,aAAa,EAAE,+BAA+B;;AAGtD,SAAA,OAAO,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;IAE3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,6BAA6B,CAAC;;IAG9E,MAAM,uBAAuB,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;AAE5F,IAAA,IAAI,GAAG;;AAEJ,SAAA,OAAO,CAAC,mCAAmC,EAAE,aAAa;;AAG1D,SAAA,OAAO,CAAC,qCAAqC,EAAE,aAAa;;AAG5D,SAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5B,SAAA,OAAO,CAAC,gBAAgB,EAAE,EAAE;;AAG5B,SAAA,OAAO,CAAC,mBAAmB,EAAE,EAAE;AAC/B,SAAA,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;AAErC,IAAA,IAAI,GAAG;;SAEJ,KAAK,CAAC,QAAQ;;SAEd,GAAG,CAAC,OAAO,IAAG;;AAEb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;;YAEhF,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACxD;;QAEA,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,IAAA,CAAM;AAC5B,IAAA,CAAC;;SAEA,IAAI,CAAC,uBAAuB;;AAE5B,SAAA,OAAO,CAAC,KAAK,EAAE,MAAM;;AAErB,SAAA,OAAO,CAAC,IAAI,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG,GAAG,CAAC;;IAGzF,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,WAAW,KAAI;AACtD,QAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;AACzD,IAAA,CAAC,CAAC;;AAGF,IAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AAEpE,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;;;;AAKG;AACH,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,SAAuB,KAAY;;AAEnE,IAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;;IAGhB,MAAM,OAAO,GAAG,8CAA8C;;IAG9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,GAAG;IACZ;;AAGA,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC;;IAG9D,OAAO,SAAS,IAAI,GAAG;AACzB,CAAC;;ACtQD;;;AAGG;AAMH;;;AAGG;MAKU,2BAA2B,CAAA;AAC9B,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC7C,IAAA,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;AAE9D;;;AAGG;IACM,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;AAE3C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;YAElD,IAAI,WAAW,EAAE;gBACf,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,IAAI,EAAE,CAAC;AAC/D,gBAAA,WAAW,CAAC,SAAS,GAAG,EAAE;AAC1B,gBAAA,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;uGAtBW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,iNAF5B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAED,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,CAAA;AACX,iBAAA;;;AChBD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-markdown-renderer.mjs","sources":["../../../../projects/element-ng/markdown-renderer/markdown-renderer.ts","../../../../projects/element-ng/markdown-renderer/si-markdown-renderer.component.ts","../../../../projects/element-ng/markdown-renderer/index.ts","../../../../projects/element-ng/markdown-renderer/siemens-element-ng-markdown-renderer.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * Returns a markdown renderer function which_\n * - Transforms markdown text into formatted HTML.\n * - Returns a DOM node containing the formatted content.\n *\n * **Warning:** The returned Node is inserted without additional sanitization.\n * Input content is sanitized before processing.\n *\n * @experimental\n * @param sanitizer - Angular DomSanitizer instance\n * @returns A function taking the markdown text to transform and returning a DOM div element containing the formatted HTML\n */\nexport const getMarkdownRenderer = (sanitizer: DomSanitizer): ((text: string) => Node) => {\n return (text: string): Node => {\n const div = document.createElement('div');\n div.className = 'markdown-content text-break';\n\n if (!text) {\n return div;\n }\n\n // Generate a random placeholder for newlines to preserve them during HTML sanitization\n const newlinePlaceholder = `--NEWLINE-${Math.random().toString(36).substring(2, 15)}--`;\n\n // Replace newlines with placeholder before sanitization\n const valueWithPlaceholders = text.replace(/\\n/g, newlinePlaceholder);\n\n // Sanitize the input using Angular's HTML sanitizer\n const sanitizedInput = sanitizer.sanitize(SecurityContext.HTML, valueWithPlaceholders) ?? '';\n\n // Restore newlines from placeholder for markdown processing.\n let html = sanitizedInput.replace(new RegExp(newlinePlaceholder, 'g'), '\\n');\n\n // Process tables first\n html = html\n // Remove table separator lines first\n .replace(/^\\|\\s*[-:]+.*\\|\\s*$/gm, '')\n // Process table rows\n .replace(/^\\|(.+)\\|\\s*$/gm, (_match, htmlContent) => {\n // Handle escaped pipes by temporarily replacing them\n const escapedPipePlaceholder = `--ESCAPED-PIPE-${Math.random().toString(36).substring(2, 15)}--`;\n const contentWithPlaceholders = htmlContent.replace(/\\\\\\|/g, escapedPipePlaceholder);\n const cells = contentWithPlaceholders.split('|').map((cell: string) => {\n const trimmedCell = cell.trim();\n // Restore escaped pipes\n const cellWithPipes = trimmedCell.replace(new RegExp(escapedPipePlaceholder, 'g'), '|');\n\n return cellWithPipes;\n });\n // Make cell ready for markdown processing by replacing code blocks with inline code and <br> with newlines\n const cellsWithNewlines = cells.map((cell: string) => {\n // Replace multiline code blocks with single line code blocks\n const cellWithoutMultilineCode = cell.replace(\n /```([\\s\\S]*?)```/g,\n (_innerMatch, inlineCodeContent) => {\n return '`' + inlineCodeContent.replace(/`/g, '') + '`';\n }\n );\n // Temporarily replace single line code blocks to avoid replacing <br> inside them\n const tableInlineCodeBrPlaceholder = `--INLINE-CODE-BR--${Math.random().toString(36).substring(2, 15)}--`;\n const cellWithPlaceholders = cellWithoutMultilineCode.replace(\n /(`[^`]*`)/g,\n inlineCodeMatch => {\n return inlineCodeMatch.replace(/<br>/g, tableInlineCodeBrPlaceholder);\n }\n );\n // Replace <br> with newlines\n const cellWithNewlines = cellWithPlaceholders.replace(/<br\\s*\\/?>/gi, '\\n');\n // Restore <br> in inline code placeholders\n const preProcessedCell = cellWithNewlines.replace(\n new RegExp(tableInlineCodeBrPlaceholder, 'g'),\n '<br>'\n );\n return preProcessedCell;\n });\n\n // Recursively process cell content for markdown formatting\n const processedCells = cellsWithNewlines.map((cell: string) => {\n return transformMarkdownText(cell, false, sanitizer);\n });\n\n return `<tr>${processedCells.map((cell: string) => `<td>${cell}</td>`).join('')}</tr>`;\n })\n // Wrap table rows in table elements\n .replace(/(<tr>.*?<\\/tr>)/gs, '<table class=\"table table-hover\">$1</table>')\n // Remove duplicate table tags\n .replace(/<\\/table>\\s*<table class=\"table table-hover\">/g, '');\n\n html = transformMarkdownText(html, true, sanitizer);\n\n div.innerHTML = html;\n return div;\n };\n};\n\nconst transformMarkdownText = (\n html: string,\n keepAdditionalNewlines = true,\n sanitizer: DomSanitizer\n): string => {\n // Generate a random placeholder for inner code blocks to prevent markdown processing inside them\n const innerCodeQuotePlaceholder = `--INNER-CODE-${Math.random().toString(36).substring(2, 15)}--`;\n const codeSectionPlaceholderMap = new Map<string, string>();\n\n const escapedAsteriskPlaceholder = `--ASTERISK-${Math.random().toString(36).substring(2, 15)}--`;\n const escapedUnderscorePlaceholder = `--UNDERSCORE-${Math.random().toString(36).substring(2, 15)}--`;\n\n // Apply markdown transformations to the sanitized content\n html = html\n // Multiline code blocks ```code``` with placeholder\n .replace(/```[^\\n]*\\n?([\\s\\S]*?)\\n?```/g, (match, content) => {\n // Escape HTML special characters in code blocks (not for security, but for correct display) and preserve inner backticks\n const code = `<pre><code>${content.replace(/</g, '<').replace(/>/g, '>').replace(/`/g, innerCodeQuotePlaceholder)}</code></pre>`;\n const codePlaceholder = `--CODE-BLOCK-${Math.random().toString(36).substring(2, 15)}--`;\n codeSectionPlaceholderMap.set(codePlaceholder, code);\n return codePlaceholder;\n })\n\n // Inline code `text`\n .replace(/`(.*?)`/g, (match, content) => {\n // Escape HTML special characters in inline code (not for security, but for correct display)\n const code = `<code>${content.replace(/</g, '<').replace(/>/g, '>')}</code>`;\n const codePlaceholder = `--INLINE-CODE-${Math.random().toString(36).substring(2, 15)}--`;\n codeSectionPlaceholderMap.set(codePlaceholder, code);\n return codePlaceholder;\n })\n\n // Images \n .replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_match, alt, url) => {\n const sanitizedUrl = sanitizeUrl(url, sanitizer);\n const escapedAlt = alt\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n return `<img src=\"${sanitizedUrl}\" alt=\"${escapedAlt}\">`;\n })\n\n // Links [text](url)\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_match, text, url) => {\n const sanitizedUrl = sanitizeUrl(url, sanitizer);\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n })\n\n // Auto-detect URLs and convert to links\n .replace(/(?<![\"'=(])\\b(https?:\\/\\/[^\\s<]+[^\\s<.,;!?\"')\\]])/g, match => {\n const sanitizedUrl = sanitizeUrl(match, sanitizer);\n return `<a href=\"${sanitizedUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${match}</a>`;\n })\n\n .replace(/(?<!\\\\)\\\\\\*/g, escapedAsteriskPlaceholder)\n .replace(/(?<!\\\\)\\\\_/g, escapedUnderscorePlaceholder)\n\n // Bold **text** or __text__\n .replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/__(.*?)__/g, '<strong>$1</strong>')\n\n // Italic *text* or _text_\n .replace(/\\*(.*?)\\*/g, '<em>$1</em>')\n .replace(/_(.*?)_/g, '<em>$1</em>')\n\n .replace(new RegExp(escapedAsteriskPlaceholder, 'g'), '*')\n .replace(new RegExp(escapedUnderscorePlaceholder, 'g'), '_')\n\n // Headings #, ##, ###, etc.\n .replace(/^###### (.*$)/gm, '<strong>$1</strong>')\n .replace(/^##### (.*$)/gm, '<h5>$1</h5>')\n .replace(/^#### (.*$)/gm, '<h4>$1</h4>')\n .replace(/^### (.*$)/gm, '<h3>$1</h3>')\n .replace(/^## (.*$)/gm, '<h2>$1</h2>')\n .replace(/^# (.*$)/gm, '<h2><strong>$1</strong></h2>');\n\n html = html\n // Bullet points - handle each type separately (• gets converted to • by sanitizer)\n .replace(/^• (.*$)/gm, '<li class=\"unordered\">$1</li>')\n .replace(/^- (.*$)/gm, '<li class=\"unordered\">$1</li>')\n .replace(/^\\* (.*$)/gm, '<li class=\"unordered\">$1</li>')\n\n // Ordered list items (1., 2., 3., etc.)\n .replace(/^\\d+\\. (.*$)/gm, '<li class=\"ordered\">$1</li>');\n\n html = html.replace(/^\\s*(?:>|>)\\s*(.*)$/gm, '<blockquote>$1</blockquote>');\n\n // Generate a random placeholder for newlines to differentiate them from those used for paragraphs\n const finalNewlinePlaceholder = `--NEWLINE-${Math.random().toString(36).substring(2, 15)}--`;\n\n html = html\n // Wrap ordered lists\n .replace(/(<li class=\"ordered\">.*?<\\/li>)/gs, '<ol>$1</ol>')\n\n // Wrap unordered lists\n .replace(/(<li class=\"unordered\">.*?<\\/li>)/gs, '<ul>$1</ul>')\n\n // Remove duplicate ol/ul tags\n .replace(/<\\/ol>\\s*<ol>/g, '')\n .replace(/<\\/ul>\\s*<ul>/g, '')\n\n // Clean up class attributes\n .replace(/ class=\"ordered\"/g, '')\n .replace(/ class=\"unordered\"/g, '');\n\n html = html\n // Convert double newlines to paragraphs (before single line breaks)\n .split(/\\n{2}/g)\n // Wrap non-block elements in <p> tags\n .map(segment => {\n // If the segment starts with a block element, return as is\n if (!segment.trim() || /^\\s*<(h[1-6]|pre|blockquote|ul|ol)/.test(segment.trim())) {\n // Replace newlines inside blocks with the placeholder\n return segment.replace(/\\n/g, finalNewlinePlaceholder);\n }\n // Otherwise, wrap in <p> tags\n return `<p>${segment}</p>`;\n })\n // Use newline placeholder again so as not to replace newlines between blocks\n .join(finalNewlinePlaceholder)\n // Convert remaining newlines to line breaks (do this LAST)\n .replace(/\\n/g, '<br>')\n // Restore newline placeholders\n .replace(new RegExp(finalNewlinePlaceholder, 'g'), keepAdditionalNewlines ? '\\n' : ' ');\n\n // Restore code placeholders\n codeSectionPlaceholderMap.forEach((code, placeholder) => {\n html = html.replace(new RegExp(placeholder, 'g'), code);\n });\n\n // Restore inner code block placeholders\n html = html.replace(new RegExp(innerCodeQuotePlaceholder, 'g'), '`');\n\n return html;\n};\n\n/**\n * Sanitizes a URL to prevent XSS attacks\n * @param url - The URL to sanitize\n * @param sanitizer - Angular DomSanitizer instance\n * @returns The sanitized URL or '#' if invalid\n */\nconst sanitizeUrl = (url: string, sanitizer: DomSanitizer): string => {\n // Remove any whitespace\n url = url.trim();\n\n // Allow only http, https, and mailto protocols\n const allowed = /^(https?:\\/\\/|mailto:|\\/(?!\\/)|\\.{1,2}\\/|#)/i;\n\n // Sanitize the URL using Angular's sanitizer\n if (!allowed.test(url)) {\n return '#';\n }\n\n // Sanitize the URL using Angular's sanitizer\n const sanitized = sanitizer.sanitize(SecurityContext.URL, url);\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return sanitized || '#';\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n Component,\n effect,\n inject,\n input,\n ElementRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { getMarkdownRenderer } from './markdown-renderer';\n\n/**\n * Component to display markdown text, uses the {@link getMarkdownRenderer} function internally, relies on `markdown-content` theme class.\n * @experimental\n */\n@Component({\n selector: 'si-markdown-renderer',\n template: ``,\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SiMarkdownRendererComponent {\n private sanitizer = inject(DomSanitizer);\n private hostElement = inject(ElementRef<HTMLElement>);\n private markdownRenderer = getMarkdownRenderer(this.sanitizer);\n\n /**\n * The markdown text to transform and display\n * @defaultValue ''\n */\n readonly text = input<string | undefined>();\n\n constructor() {\n effect(() => {\n const contentValue = this.text();\n const containerEl = this.hostElement.nativeElement;\n\n if (containerEl) {\n const formattedNode = this.markdownRenderer(contentValue ?? '');\n containerEl.innerHTML = '';\n containerEl.appendChild(formattedNode);\n }\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-markdown-renderer.component';\nexport * from './markdown-renderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|