@siemens/element-ng 51.3.0 → 51.4.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/fesm2022/siemens-element-ng-breadcrumb.mjs +8 -46
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs +2 -2
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +5 -0
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +2 -3
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +255 -160
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +12 -8
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-maplibre.mjs +293 -10
- package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs +2 -2
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +3 -1
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-shadow-root.mjs +54 -1
- package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-theme.mjs +59 -23
- package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +82 -10
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +2 -2
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/maplibre/styles/maplibre-gl.scss +4 -0
- package/package.json +7 -7
- package/template-i18n.json +6 -0
- package/types/siemens-element-ng-breadcrumb.d.ts +1 -1
- package/types/siemens-element-ng-common.d.ts +5 -0
- package/types/siemens-element-ng-dashboard.d.ts +0 -1
- package/types/siemens-element-ng-filtered-search.d.ts +26 -10
- package/types/siemens-element-ng-maplibre.d.ts +112 -5
- package/types/siemens-element-ng-popover.d.ts +1 -0
- package/types/siemens-element-ng-shadow-root.d.ts +16 -1
- package/types/siemens-element-ng-theme.d.ts +35 -7
- package/types/siemens-element-ng-tooltip.d.ts +14 -1
- package/types/siemens-element-ng-translate.d.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-theme.mjs","sources":["../../../../projects/element-ng/theme/si-theme-store.ts","../../../../projects/element-ng/theme/si-theme.model.ts","../../../../projects/element-ng/theme/si-theme.service.ts","../../../../projects/element-ng/theme/si-theme-signals.ts","../../../../projects/element-ng/theme/index.ts","../../../../projects/element-ng/theme/siemens-element-ng-theme.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Observable, of } from 'rxjs';\n\nimport { Theme } from './si-theme.model';\n\n/**\n * SiThemeStore object is used by the theme service to load and\n * store the themes. You can inject your own implementation to provide\n * a backend implementation. Otherwise a localStorage based implementation\n * is used.\n */\nexport abstract class SiThemeStore {\n /**\n * Load and return an alternative custom theme, other then\n * the default element theme. This method is invoked initially\n * to check for an alternative custom theme.\n * @returns The active theme to be used, or undefined if the\n * default element theme shall be used. All wrapped in an observable\n * that can also emit errors.\n */\n abstract loadActiveTheme(): Observable<Theme | undefined>;\n /**\n * Sets the theme with the given name to active.\n * @param name - The name of the theme to become active.\n * @returns True on success, otherwise false.\n */\n abstract activateTheme(name: string): Observable<boolean>;\n /**\n * Deactivate any active theme and makes the element theme the default one.\n * @returns True on success, otherwise false.\n */\n abstract deactivateTheme(): Observable<boolean>;\n /**\n * Load and return the available theme names.\n * @returns An `Observable` of available theme names, other than the\n * default element theme.\n */\n abstract loadThemeNames(): Observable<string[]>;\n /**\n * Load theme with the given `name`.\n * @param name - The name of the theme to be returned.\n * @returns Observable with the named theme or `undefined` if no such theme exist.\n */\n abstract loadTheme(name: string): Observable<Theme | undefined>;\n /**\n * Saves a theme to the store. The name shall not be empty. A theme with\n * identical name gets overwritten.\n * @param theme - The theme to be saved.\n * @returns True on success, otherwise false. All nicely wrapped in\n * an observable that may also emit errors.\n */\n abstract saveTheme(theme: Theme): Observable<boolean>;\n /**\n * Deletes the theme with the given name from the store.\n * @param name - The name of the theme to be deleted.\n * @returns True on success, otherwise false. All nicely wrapped in\n * an observable that may also emit errors. Returns false,\n * if the theme does not exist.\n */\n abstract deleteTheme(name: string): Observable<boolean>;\n}\n\nexport const SI_THEME_LOCAL_STORAGE_KEY = 'si-themes';\n\nexport interface ThemeStorage {\n activeTheme: string | undefined;\n themes: { [key: string]: Theme };\n}\n\nexport class SiDefaultThemeStore extends SiThemeStore {\n private isBrowser: boolean;\n\n constructor(isBrowser: boolean) {\n super();\n this.isBrowser = isBrowser;\n }\n\n loadActiveTheme(): Observable<Theme | undefined> {\n if (!this.isBrowser) {\n return of(undefined);\n }\n\n const store = this.loadStore();\n if (store.activeTheme) {\n return of(store.themes[store.activeTheme]);\n } else {\n return of(undefined);\n }\n }\n\n activateTheme(name: string): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n if (store.themes[name]) {\n store.activeTheme = name;\n this.saveStore(store);\n return of(true);\n } else {\n return of(false);\n }\n }\n\n deactivateTheme(): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n store.activeTheme = undefined;\n this.saveStore(store);\n return of(true);\n }\n\n loadThemeNames(): Observable<string[]> {\n if (!this.isBrowser) {\n return of([]);\n }\n const store = this.loadStore();\n return of(Array.from(Object.keys(store.themes)));\n }\n\n saveTheme(theme: Theme): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n store.themes[theme.name] = theme;\n this.saveStore(store);\n return of(true);\n }\n\n loadTheme(name: string): Observable<Theme | undefined> {\n if (!this.isBrowser) {\n return of(undefined);\n }\n const store = this.loadStore();\n return of(store.themes[name]);\n }\n\n deleteTheme(name: string): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n delete store.themes[name];\n if (store.activeTheme === name) {\n store.activeTheme = undefined;\n }\n this.saveStore(store);\n return of(true);\n }\n\n private loadStore(): ThemeStorage {\n const storeStr = localStorage.getItem(SI_THEME_LOCAL_STORAGE_KEY);\n if (storeStr) {\n return JSON.parse(storeStr) as ThemeStorage;\n } else {\n return { activeTheme: undefined, themes: {} };\n }\n }\n\n private saveStore(store: ThemeStorage): void {\n localStorage.setItem(SI_THEME_LOCAL_STORAGE_KEY, JSON.stringify(store));\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/** */\nexport interface ThemeDescription {\n name: string;\n groups: ThemePropertyGroup[];\n}\n\nexport interface ThemePropertyGroup {\n name: string;\n description?: string;\n properties: ThemeProperty[];\n}\n\nexport interface ThemeProperty {\n name: string;\n usage: string;\n type: ThemePropertyType;\n}\n\nexport type ThemePropertyType = 'color' | 'gradient' | 'font' | 'url' | 'text' | 'number';\n\nexport interface Theme {\n name: string;\n schemes: ThemeColorSchemes;\n /**\n * A map of icons that overrides the default Element icons.\n * The key must be the key of the original icon that should be overridden.\n * The value has to be a data SVG string.\n *\n * @example\n * ```ts\n * {\n * elementUser: \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'>...</svg>\"\n * }\n * ```\n *\n * @experimental\n */\n icons?: Record<string, string>;\n}\n\nexport interface ThemeColorSchemes {\n light?: ThemeColorScheme;\n dark?: ThemeColorScheme;\n}\n\nexport type ThemeColorScheme = { [key: string]: string };\n\nexport type ThemeType = 'dark' | 'light' | 'auto';\n\nexport const ELEMENT_THEME_NAME = 'element';\n\nexport const elementTheme: ThemeDescription = {\n name: 'element',\n groups: [\n {\n name: 'Branding',\n description: 'Configure the brand logo.',\n properties: [\n {\n name: '--element-brand-logo',\n usage: 'Enter a brand logo in the format: \\'url(\"https://company/logo.svg\")\\'',\n type: 'text'\n },\n {\n name: '--element-brand-logo-width',\n usage: \"Enter the width of the logo as CSS width value. Example: '100px'\",\n type: 'text'\n },\n {\n name: '--element-brand-logo-height',\n usage: \"Enter the height of the logo as CSS width value. Max: 48px; Example: '16px'\",\n type: 'text'\n },\n {\n name: '--element-brand-logo-text',\n usage:\n 'Enter a textual representation of the logo. Example: \\'\"Siemens logo\"\\'. The text must be wrapped in double quotes.',\n type: 'text'\n }\n ]\n },\n {\n name: 'Basic definitions',\n description: 'Basic definitions',\n properties: [\n {\n name: '--element-body-font-family',\n usage: 'The theme only uses one font everywhere.',\n type: 'font'\n },\n { name: '--element-button-radius', usage: 'Button border radius', type: 'text' },\n { name: '--element-button-focus-width', usage: 'Focus width', type: 'text' },\n {\n name: '--element-button-focus-overlay-width',\n usage: 'Focus overlay width',\n type: 'text'\n },\n {\n name: '--element-button-focus-overlay-color',\n usage: 'Focus overlay color',\n type: 'text'\n },\n { name: '--element-input-radius', usage: 'Input field border radius', type: 'text' },\n { name: '--element-logo-color', usage: 'Logo color', type: 'text' },\n { name: '--element-radius-1', usage: 'Border radius-1', type: 'text' },\n { name: '--element-radius-2', usage: 'Border radius-2', type: 'text' },\n { name: '--element-radius-3', usage: 'Border radius-3', type: 'text' }\n ]\n },\n {\n name: 'UI',\n description:\n 'UI colors are used on structural properties and icons and provide good contrast when used over any background.',\n properties: [\n { name: '--element-ui-0', usage: 'Logo, selected (active) elements', type: 'color' },\n { name: '--element-ui-0-hover', usage: 'Selected hover', type: 'color' },\n { name: '--element-ui-1', usage: 'Primary icons', type: 'color' },\n { name: '--element-ui-2', usage: 'Secondary icons', type: 'color' },\n { name: '--element-ui-3', usage: 'Disabled', type: 'color' },\n { name: '--element-ui-4', usage: 'Borders', type: 'color' },\n { name: '--element-ui-5', usage: 'Inverse', type: 'color' },\n { name: '--element-ui-6', usage: 'Shadows', type: 'color' },\n { name: '--element-box-shadow-color-1', usage: 'Box shadow color 1', type: 'color' },\n { name: '--element-box-shadow-color-2', usage: 'Box shadow color 2', type: 'color' },\n { name: '--element-focus-default', usage: 'Default focus color', type: 'color' }\n ]\n },\n {\n name: 'Base',\n description: 'Base colors are used as backgrounds of containers.',\n properties: [\n { name: '--element-base-0', usage: 'Page background, row background', type: 'color' },\n {\n name: '--element-base-1',\n usage: 'Header, navigation, card, table background',\n type: 'color'\n },\n {\n name: '--element-base-1-hover',\n usage: 'Hover on base-1 backgrounds, like table, tree, or menu',\n type: 'color'\n },\n {\n name: '--element-base-1-selected',\n usage: 'Selected on base-1 backgrounds, like table, tree, or menu',\n type: 'color'\n },\n {\n name: '--element-base-2',\n usage: 'Page background with higher contrast pages in dark mode',\n type: 'color'\n },\n {\n name: '--element-base-information',\n usage: 'Informational component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-success',\n usage: 'Success component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-caution',\n usage: 'Caution component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-warning',\n usage: 'Warning component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-danger',\n usage: 'Danger component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-translucent-1',\n usage: 'Translucent background, e.g. backdrop',\n type: 'gradient'\n },\n {\n name: '--element-base-translucent-2',\n usage: 'Slightly translucent background, e.g. toasts',\n type: 'gradient'\n }\n ]\n },\n {\n name: 'Actions',\n description: 'Action colors are used to indicate actions that users can perform.',\n properties: [\n { name: '--element-action-primary', usage: 'Primary interaction', type: 'gradient' },\n {\n name: '--element-action-primary-hover',\n usage: 'Primary action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-primary-text', usage: 'Primary text color', type: 'color' },\n { name: '--element-action-secondary', usage: 'Secondary interaction', type: 'gradient' },\n {\n name: '--element-action-secondary-hover',\n usage: 'Secondary action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-secondary-text', usage: 'Secondary text color', type: 'color' },\n {\n name: '--element-action-secondary-text-hover',\n usage: 'Secondary text color on hover',\n type: 'color'\n },\n {\n name: '--element-action-secondary-border',\n usage: 'Secondary border color',\n type: 'color'\n },\n {\n name: '--element-action-secondary-border-hover',\n usage: 'Secondary border color on hover',\n type: 'color'\n },\n { name: '--element-action-warning', usage: 'Warning', type: 'gradient' },\n {\n name: '--element-action-warning-hover',\n usage: 'Warning action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-warning-text', usage: 'Warning text color', type: 'color' },\n { name: '--element-action-danger', usage: 'Danger', type: 'gradient' },\n {\n name: '--element-action-danger-hover',\n usage: 'Danger action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-danger-text', usage: 'Danger text color', type: 'color' },\n {\n name: '--element-action-disabled-opacity',\n usage: 'Disabled action opacity',\n type: 'number'\n }\n ]\n },\n {\n name: 'Text',\n description: 'Similarly, categories for typography colors are also defined in this system.',\n properties: [\n { name: '--element-text-primary', usage: 'Primary', type: 'color' },\n { name: '--element-text-secondary', usage: 'Secondary', type: 'color' },\n { name: '--element-text-disabled', usage: 'Disabled', type: 'color' },\n { name: '--element-text-inverse', usage: 'Inverse', type: 'color' },\n { name: '--element-text-active', usage: 'Active', type: 'color' },\n { name: '--element-text-information', usage: 'Informational', type: 'color' },\n { name: '--element-text-success', usage: 'Success', type: 'color' },\n { name: '--element-text-caution', usage: 'Caution', type: 'color' },\n { name: '--element-text-warning', usage: 'Warning', type: 'color' },\n { name: '--element-text-danger', usage: 'Danger', type: 'color' }\n ]\n },\n {\n name: 'Status',\n description:\n 'Status colors are used to describe and/or report on the status of different things.',\n properties: [\n { name: '--element-status-information', usage: 'Informational', type: 'color' },\n {\n name: '--element-status-information-contrast',\n usage: 'Informational contrast',\n type: 'color'\n },\n { name: '--element-status-success', usage: 'Success', type: 'color' },\n { name: '--element-status-success-contrast', usage: 'Success contrast', type: 'color' },\n { name: '--element-status-caution', usage: 'Caution', type: 'color' },\n { name: '--element-status-caution-contrast', usage: 'Caution contrast', type: 'color' },\n { name: '--element-status-warning', usage: 'Warning', type: 'color' },\n { name: '--element-status-warning-contrast', usage: 'Warning contrast', type: 'color' },\n { name: '--element-status-danger', usage: 'Danger', type: 'color' },\n { name: '--element-status-danger-contrast', usage: 'Danger contrast', type: 'color' }\n ]\n },\n {\n name: 'Form feedback icons',\n description: 'Icons that are used to indicate a form item status',\n properties: [{ name: '--element-invalid-feedback-icon', usage: 'Danger', type: 'text' }]\n }\n ]\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, EventEmitter, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { Meta } from '@angular/platform-browser';\nimport { Observable, of, ReplaySubject, throwError } from 'rxjs';\nimport { map, switchMap, take, tap } from 'rxjs/operators';\n\nimport { SiDefaultThemeStore, SiThemeStore } from './si-theme-store';\nimport {\n ELEMENT_THEME_NAME,\n Theme,\n ThemeColorScheme,\n ThemeColorSchemes,\n ThemeType\n} from './si-theme.model';\n\n@Injectable({ providedIn: 'root' })\nexport class SiThemeService {\n /**\n * The current color scheme. (e.g. light or dark).\n */\n private _resolvedColorScheme: ThemeType | undefined = 'light';\n private resolvedColorSchemeSub = new ReplaySubject<keyof ThemeColorSchemes>(1);\n /**\n * Emits events when the color scheme changes.\n *\n * @defaultValue this.resolvedColorSchemeSub.asObservable()\n */\n readonly resolvedColorScheme$ = this.resolvedColorSchemeSub.asObservable();\n /**\n * The current color scheme. (e.g. light or dark).\n */\n get resolvedColorScheme(): ThemeType | undefined {\n return this._resolvedColorScheme;\n }\n\n /**\n * All available theme names, including element theme name.\n */\n private _themeNames: string[] = [ELEMENT_THEME_NAME];\n private themeNamesSub = new ReplaySubject<string[]>(1);\n /**\n * Emits events when the list of available theme names changes.\n *\n * @defaultValue this.themeNamesSub.asObservable()\n */\n readonly themeNames$ = this.themeNamesSub.asObservable();\n\n /**\n * All available theme names, including element theme name.\n */\n get themeNames(): string[] {\n return this._themeNames;\n }\n\n /**\n * Emits events when the currently applied theme changes. Either by\n * changing to another theme or by re-applying a theme with updated\n * properties. When switching to default theme element, `undefined`\n * is emitted.\n */\n readonly themeChange = new EventEmitter<Theme | undefined>();\n\n /**\n * The name of the theme that is active. Theme name `element` is the default.\n */\n activeThemeName?: string;\n /**\n * Icon overrides by the currently activeTheme.\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly themeIcons = signal<Record<string, string>>({});\n\n private themes: Map<string, Theme> = new Map();\n private darkMediaQuery?: MediaQueryList;\n private mediaQueryListener?: () => void;\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private previewTheme?: Theme;\n\n private themeStore =\n inject(SiThemeStore, { optional: true }) ?? new SiDefaultThemeStore(this.isBrowser);\n private meta = inject(Meta);\n private document = inject(DOCUMENT);\n\n constructor() {\n this.resolvedColorScheme$.subscribe(scheme => (this._resolvedColorScheme = scheme));\n this.themeNames$.subscribe(names => (this._themeNames = names));\n\n if (this.isBrowser) {\n this.darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.mediaQueryListener = () => this.toggleDark(this.darkMediaQuery!.matches);\n }\n\n this.getActiveTheme()\n .pipe(take(1))\n .subscribe({\n next: theme => this.applyThemeStyle(theme, this._resolvedColorScheme),\n error: error => console.error('Cannot load active theme', error)\n });\n\n this.themeStore\n .loadThemeNames()\n .pipe(take(1))\n .subscribe({\n next: names => {\n names.push(ELEMENT_THEME_NAME);\n this.themeNamesSub.next(names);\n },\n error: error => console.error('Cannot load theme names', error)\n });\n }\n\n /**\n * Returns `true` if a theme with the given name is available.\n */\n hasTheme(name: string): boolean {\n return this._themeNames.includes(name);\n }\n\n /**\n * Returns a clone of the theme with the given name or `undefined` if not\n * available or name is `element`.\n * @param name - The name of the theme to be returned.\n * @returns The theme with the given name and `undefined` if name is `element`.\n */\n getTheme(name: string): Observable<Theme | undefined> {\n if (name === ELEMENT_THEME_NAME || !this.hasTheme(name)) {\n return of(undefined);\n }\n\n if (this.themes.has(name)) {\n const theme = this.themes.get(name)!;\n // return a clone to avoid changes as a side effect\n return of(this.cloneTheme(theme));\n }\n\n return this.themeStore.loadTheme(name).pipe(\n tap(theme => {\n if (theme) {\n this.themes.set(theme.name, this.cloneTheme(theme));\n }\n })\n );\n }\n\n /**\n * Loads and returns the currently active theme. Returns undefined if no custom theme is used.\n * @returns A custom theme or `undefined` if the default element theme is used.\n */\n getActiveTheme(): Observable<Theme | undefined> {\n if (this.activeThemeName) {\n return of(this.themes.get(this.activeThemeName));\n }\n return this.themeStore.loadActiveTheme().pipe(\n map(theme => {\n if (theme) {\n this.activeThemeName = theme.name;\n this.themes.set(theme.name, theme);\n this.applyTheme(theme, this._resolvedColorScheme);\n return theme;\n }\n this.activeThemeName = ELEMENT_THEME_NAME;\n return undefined;\n })\n );\n }\n\n /**\n * Adds or updates the given theme in the theme store.\n * @param theme - The theme to be saved.\n * @returns `true` if the theme was saved successfully.\n */\n addOrUpdateTheme(theme: Theme): Observable<boolean> {\n const result = new ReplaySubject<boolean>(1);\n\n this.themeStore.saveTheme(theme).subscribe({\n next: saveResult => {\n if (saveResult) {\n this.themes.set(theme.name, this.cloneTheme(theme));\n // Update list of theme names when this is a new one\n if (!this.hasTheme(theme.name)) {\n const names = this._themeNames.concat(theme.name);\n this.themeNamesSub.next(names);\n }\n }\n result.next(saveResult);\n result.complete();\n },\n error: error => result.error(error),\n complete: () => result.complete()\n });\n return result;\n }\n\n /**\n * Deletes the theme with the given name from the theme store.\n */\n deleteTheme(name: string): Observable<boolean> {\n const result = new ReplaySubject<boolean>(1);\n if (!this.hasTheme(name) || name === ELEMENT_THEME_NAME) {\n result.next(false);\n result.complete();\n } else {\n this.removeThemeCSS(name);\n this.themeStore.deleteTheme(name).subscribe({\n next: deleteResult => {\n if (deleteResult) {\n this.themes.delete(name);\n const names = this._themeNames.filter(themeName => themeName !== name);\n this.themeNamesSub.next(names);\n }\n result.next(deleteResult);\n result.complete();\n },\n error: error => result.error(error),\n complete: () => result.complete()\n });\n }\n return result;\n }\n\n /**\n * Resets the preview theme to the default element theme.\n */\n resetPreview(): void {\n this.previewTheme = { name: '__preview', schemes: { dark: {}, light: {} } };\n this.removeThemeCSS(this.previewTheme.name);\n }\n\n /**\n * Sets the active theme to the given name. If no name is given, the default element theme is used.\n */\n setActiveTheme(name?: string, type?: ThemeType): Observable<boolean> {\n const theType = type ?? this._resolvedColorScheme ?? 'auto';\n const theName = name ?? this.activeThemeName ?? ELEMENT_THEME_NAME;\n\n if (theName === this.activeThemeName) {\n return of(true);\n }\n if (!this.hasTheme(theName)) {\n return of(false);\n }\n\n const result = new ReplaySubject<boolean>(1);\n this.activeThemeName = theName;\n // Make the change in the remove store\n const store =\n theName !== ELEMENT_THEME_NAME\n ? this.themeStore.activateTheme(theName)\n : this.themeStore.deactivateTheme();\n store\n .pipe(\n // On success, load the theme\n switchMap(storeResult => {\n if (storeResult) {\n return this.getTheme(theName);\n } else {\n return throwError(() => 'Cannot change active theme in theme store.');\n }\n }),\n // Only take one to avoid unsubscription issues\n take(1)\n )\n .subscribe({\n next: theme => {\n this.applyTheme(theme, theType);\n result.next(true);\n },\n error: error => {\n console.error(`Activating theme ${name} failed`, error);\n result.next(false);\n },\n complete: () => result.complete()\n });\n return result;\n }\n\n /**\n * Apply `light` or `dark` theme to the document.\n */\n applyThemeType(type: ThemeType): void {\n if (type === this._resolvedColorScheme || !this.darkMediaQuery || !this.mediaQueryListener) {\n return;\n }\n\n this.darkMediaQuery.removeEventListener('change', this.mediaQueryListener);\n\n if (type === 'light') {\n this.toggleDark(false);\n } else if (type === 'dark') {\n this.toggleDark(true);\n } else {\n this.mediaQueryListener();\n this.darkMediaQuery.addEventListener('change', this.mediaQueryListener);\n }\n }\n\n /**\n * Applies the given theme to the document. If no theme is given, the active theme is applied.\n */\n applyTheme(theme?: Theme, type?: ThemeType, overwrite?: boolean): void {\n if (theme) {\n this.applyThemeStyle(theme, type, overwrite);\n } else {\n this.getActiveTheme()\n .pipe(take(1))\n .subscribe({\n next: loadedTheme => this.applyThemeStyle(loadedTheme, type),\n error: error => console.error('Cannot load active theme', error)\n });\n }\n }\n\n /**\n * Updates the given property of the preview theme.\n */\n updateProperty(name: string, value: string, type: keyof ThemeColorSchemes): void {\n if (!this.previewTheme) {\n this.resetPreview();\n }\n this.previewTheme!.schemes[type]![name] = value;\n this.createThemeCSS(this.previewTheme!);\n this.document.documentElement.classList.add('theme-__preview');\n this.dispatchThemeSwitchEvent();\n }\n\n /**\n * Checks if the given theme JSON object is a valid theme.\n */\n isThemeValid(data: unknown): boolean {\n const theme = data as Theme;\n return (\n !!data &&\n typeof data === 'object' &&\n 'name' in data &&\n 'schemes' in data &&\n typeof theme.name === 'string' &&\n typeof theme.schemes === 'object' &&\n this.isThemeTypeValid(theme, 'light') &&\n this.isThemeTypeValid(theme, 'dark')\n );\n }\n\n private isThemeTypeValid(theme: Theme, type: 'light' | 'dark'): boolean {\n return (\n !(type in theme.schemes) ||\n (typeof theme.schemes[type] === 'object' &&\n Object.values(theme.schemes[type] as ThemeColorScheme).every(\n item => typeof item === 'string'\n ) &&\n Object.keys(theme.schemes[type] as ThemeColorScheme).every(\n item => typeof item === 'string'\n ))\n );\n }\n\n private applyThemeStyle(theme?: Theme, type?: ThemeType, overwrite?: boolean): void {\n if (!this.isBrowser) {\n return;\n }\n this.resetPreview();\n\n if (theme && theme.name !== ELEMENT_THEME_NAME && (overwrite || !this.hasThemeCSS(theme))) {\n this.createThemeCSS(theme);\n }\n this.activateTheme(theme);\n\n if (type && type !== this._resolvedColorScheme) {\n this.applyThemeType(type);\n }\n\n this.themeIcons.set(\n Object.fromEntries(Object.entries(theme?.icons ?? {}).map(([key, icon]) => [key, icon]))\n );\n this.themeChange.emit(theme);\n }\n\n private activateTheme(theme?: Theme): void {\n const classList = this.document.documentElement.classList;\n classList.forEach(c => {\n if (c.startsWith('theme-')) {\n classList.remove(c);\n }\n });\n if (theme) {\n classList.add(`theme-${theme.name}`);\n }\n }\n\n private hasThemeCSS(theme: Theme): boolean {\n const id = `__theme-${theme.name}`;\n return !!this.document.getElementById(id);\n }\n\n private createThemeCSS(theme: Theme): void {\n let css = '';\n const themeSelector = `:root.theme-${theme.name}`;\n if (theme.schemes.light) {\n css = this.createThemeVariantCSS(css, themeSelector, theme.schemes.light);\n }\n if (theme.schemes.dark) {\n css = this.createThemeVariantCSS(css, themeSelector + '.app--dark', theme.schemes.dark);\n }\n\n this.removeThemeCSS(theme.name);\n const cssElement = this.document.createElement('style');\n cssElement.id = `__theme-${theme.name}`;\n cssElement.textContent = css;\n\n this.document.body.appendChild(cssElement);\n }\n\n private createThemeVariantCSS(css: string, selector: string, scheme: ThemeColorScheme): string {\n css += `${selector} {\\n`;\n for (const key of Object.keys(scheme)) {\n css += `${key}: ${scheme[key]};\\n`;\n }\n css += '}\\n';\n return css;\n }\n\n private removeThemeCSS(name: string): void {\n const id = `__theme-${name}`;\n this.document.getElementById(id)?.remove();\n this.document.documentElement.classList.remove(`theme-${name}`);\n }\n\n private toggleDark(dark: boolean): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.document.documentElement.classList.toggle('app--dark', dark);\n const colorScheme = dark ? 'dark' : 'light';\n this.meta.updateTag({ name: 'color-scheme', content: colorScheme });\n this.resolvedColorSchemeSub.next(colorScheme);\n this.dispatchThemeSwitchEvent();\n }\n\n private cloneTheme(theme: Theme): Theme {\n const clone: Theme = { ...theme, schemes: {} };\n if (theme.schemes.light) {\n clone.schemes.light = { ...theme.schemes.light };\n }\n if (theme.schemes.dark) {\n clone.schemes.dark = { ...theme.schemes.dark };\n }\n return clone;\n }\n\n private dispatchThemeSwitchEvent(): void {\n window.dispatchEvent(\n new CustomEvent('theme-switch', {\n detail: {\n dark: this._resolvedColorScheme === 'dark',\n colorScheme: this._resolvedColorScheme\n }\n })\n );\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map } from 'rxjs';\n\n/**\n * Returns a signal that reflects whether the current Element theme is dark (`true`) or light\n * (`false`). The signal reacts to `theme-switch` events dispatched on `window`.\n *\n * @experimental\n * @returns A boolean signal — `true` when the active theme is dark\n * @throws When called outside of an Angular injection context\n */\nexport const injectIsDarkTheme = (): Signal<boolean> => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return signal(false);\n }\n\n return toSignal(\n fromEvent<CustomEvent<{ dark: boolean }>>(window, 'theme-switch').pipe(map(e => e.detail.dark)),\n {\n initialValue: document.documentElement.classList.contains('app--dark')\n }\n );\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-theme-store';\nexport * from './si-theme.service';\nexport * from './si-theme.model';\nexport * from './si-theme-signals';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-theme.mjs","sources":["../../../../projects/element-ng/theme/si-theme-store.ts","../../../../projects/element-ng/theme/si-theme-dom-target.ts","../../../../projects/element-ng/theme/si-theme.model.ts","../../../../projects/element-ng/theme/si-theme.service.ts","../../../../projects/element-ng/theme/si-theme-signals.ts","../../../../projects/element-ng/theme/index.ts","../../../../projects/element-ng/theme/siemens-element-ng-theme.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Observable, of } from 'rxjs';\n\nimport { Theme } from './si-theme.model';\n\n/**\n * SiThemeStore object is used by the theme service to load and\n * store the themes. You can inject your own implementation to provide\n * a backend implementation. Otherwise a localStorage based implementation\n * is used.\n */\nexport abstract class SiThemeStore {\n /**\n * Load and return an alternative custom theme, other then\n * the default element theme. This method is invoked initially\n * to check for an alternative custom theme.\n * @returns The active theme to be used, or undefined if the\n * default element theme shall be used. All wrapped in an observable\n * that can also emit errors.\n */\n abstract loadActiveTheme(): Observable<Theme | undefined>;\n /**\n * Sets the theme with the given name to active.\n * @param name - The name of the theme to become active.\n * @returns True on success, otherwise false.\n */\n abstract activateTheme(name: string): Observable<boolean>;\n /**\n * Deactivate any active theme and makes the element theme the default one.\n * @returns True on success, otherwise false.\n */\n abstract deactivateTheme(): Observable<boolean>;\n /**\n * Load and return the available theme names.\n * @returns An `Observable` of available theme names, other than the\n * default element theme.\n */\n abstract loadThemeNames(): Observable<string[]>;\n /**\n * Load theme with the given `name`.\n * @param name - The name of the theme to be returned.\n * @returns Observable with the named theme or `undefined` if no such theme exist.\n */\n abstract loadTheme(name: string): Observable<Theme | undefined>;\n /**\n * Saves a theme to the store. The name shall not be empty. A theme with\n * identical name gets overwritten.\n * @param theme - The theme to be saved.\n * @returns True on success, otherwise false. All nicely wrapped in\n * an observable that may also emit errors.\n */\n abstract saveTheme(theme: Theme): Observable<boolean>;\n /**\n * Deletes the theme with the given name from the store.\n * @param name - The name of the theme to be deleted.\n * @returns True on success, otherwise false. All nicely wrapped in\n * an observable that may also emit errors. Returns false,\n * if the theme does not exist.\n */\n abstract deleteTheme(name: string): Observable<boolean>;\n}\n\nexport const SI_THEME_LOCAL_STORAGE_KEY = 'si-themes';\n\nexport interface ThemeStorage {\n activeTheme: string | undefined;\n themes: { [key: string]: Theme };\n}\n\nexport class SiDefaultThemeStore extends SiThemeStore {\n private isBrowser: boolean;\n\n constructor(isBrowser: boolean) {\n super();\n this.isBrowser = isBrowser;\n }\n\n loadActiveTheme(): Observable<Theme | undefined> {\n if (!this.isBrowser) {\n return of(undefined);\n }\n\n const store = this.loadStore();\n if (store.activeTheme) {\n return of(store.themes[store.activeTheme]);\n } else {\n return of(undefined);\n }\n }\n\n activateTheme(name: string): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n if (store.themes[name]) {\n store.activeTheme = name;\n this.saveStore(store);\n return of(true);\n } else {\n return of(false);\n }\n }\n\n deactivateTheme(): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n store.activeTheme = undefined;\n this.saveStore(store);\n return of(true);\n }\n\n loadThemeNames(): Observable<string[]> {\n if (!this.isBrowser) {\n return of([]);\n }\n const store = this.loadStore();\n return of(Array.from(Object.keys(store.themes)));\n }\n\n saveTheme(theme: Theme): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n store.themes[theme.name] = theme;\n this.saveStore(store);\n return of(true);\n }\n\n loadTheme(name: string): Observable<Theme | undefined> {\n if (!this.isBrowser) {\n return of(undefined);\n }\n const store = this.loadStore();\n return of(store.themes[name]);\n }\n\n deleteTheme(name: string): Observable<boolean> {\n if (!this.isBrowser) {\n return of(false);\n }\n\n const store = this.loadStore();\n delete store.themes[name];\n if (store.activeTheme === name) {\n store.activeTheme = undefined;\n }\n this.saveStore(store);\n return of(true);\n }\n\n private loadStore(): ThemeStorage {\n const storeStr = localStorage.getItem(SI_THEME_LOCAL_STORAGE_KEY);\n if (storeStr) {\n return JSON.parse(storeStr) as ThemeStorage;\n } else {\n return { activeTheme: undefined, themes: {} };\n }\n }\n\n private saveStore(store: ThemeStorage): void {\n localStorage.setItem(SI_THEME_LOCAL_STORAGE_KEY, JSON.stringify(store));\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { DOCUMENT, inject, InjectionToken } from '@angular/core';\nimport { Meta } from '@angular/platform-browser';\n\nimport type { ColorScheme } from './si-theme.model';\n\n/**\n * DOM boundary controlled by {@link SiThemeService}.\n */\nexport interface SiThemeDomTarget {\n /** Element that receives theme and color-scheme classes. */\n readonly element: HTMLElement;\n /** CSS selector used for runtime theme variables. */\n readonly rootSelector: string;\n /** Event target for the legacy `theme-switch` event. */\n readonly eventTarget?: EventTarget;\n\n forEachElement(callback: (element: HTMLElement) => void): void;\n registerElement?(element: HTMLElement): () => void;\n getStyleElement(id: string): HTMLStyleElement | null;\n appendStyleElement(style: HTMLStyleElement): void;\n updateColorScheme(colorScheme: ColorScheme): void;\n}\n\n/**\n * Theme DOM target. The default implementation targets the current document.\n */\nexport const SI_THEME_DOM_TARGET = new InjectionToken<SiThemeDomTarget>('SI_THEME_DOM_TARGET', {\n providedIn: 'root',\n factory: () => {\n const document = inject(DOCUMENT);\n const meta = inject(Meta);\n\n return {\n element: document.documentElement,\n rootSelector: ':root',\n eventTarget: document.defaultView ?? undefined,\n forEachElement: callback => callback(document.documentElement),\n getStyleElement: id => document.getElementById(id) as HTMLStyleElement | null,\n appendStyleElement: style => document.body.append(style),\n updateColorScheme: colorScheme =>\n meta.updateTag({ name: 'color-scheme', content: colorScheme })\n };\n }\n});\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n/** */\nexport interface ThemeDescription {\n name: string;\n groups: ThemePropertyGroup[];\n}\n\nexport interface ThemePropertyGroup {\n name: string;\n description?: string;\n properties: ThemeProperty[];\n}\n\nexport interface ThemeProperty {\n name: string;\n usage: string;\n type: ThemePropertyType;\n}\n\nexport type ThemePropertyType = 'color' | 'gradient' | 'font' | 'url' | 'text' | 'number';\n\nexport interface Theme {\n name: string;\n schemes: ThemeColorSchemes;\n /**\n * A map of icons that overrides the default Element icons.\n * The key must be the key of the original icon that should be overridden.\n * The value has to be a data SVG string.\n *\n * @example\n * ```ts\n * {\n * elementUser: \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'>...</svg>\"\n * }\n * ```\n *\n * @experimental\n */\n icons?: Record<string, string>;\n}\n\nexport interface ThemeColorSchemes {\n light?: ThemeColorScheme;\n dark?: ThemeColorScheme;\n}\n\nexport type ThemeColorScheme = { [key: string]: string };\n\nexport type ColorScheme = 'light' | 'dark';\n\nexport type ThemeType = ColorScheme | 'auto';\n\nexport const ELEMENT_THEME_NAME = 'element';\n\nexport const elementTheme: ThemeDescription = {\n name: 'element',\n groups: [\n {\n name: 'Branding',\n description: 'Configure the brand logo.',\n properties: [\n {\n name: '--element-brand-logo',\n usage: 'Enter a brand logo in the format: \\'url(\"https://company/logo.svg\")\\'',\n type: 'text'\n },\n {\n name: '--element-brand-logo-width',\n usage: \"Enter the width of the logo as CSS width value. Example: '100px'\",\n type: 'text'\n },\n {\n name: '--element-brand-logo-height',\n usage: \"Enter the height of the logo as CSS width value. Max: 48px; Example: '16px'\",\n type: 'text'\n },\n {\n name: '--element-brand-logo-text',\n usage:\n 'Enter a textual representation of the logo. Example: \\'\"Siemens logo\"\\'. The text must be wrapped in double quotes.',\n type: 'text'\n }\n ]\n },\n {\n name: 'Basic definitions',\n description: 'Basic definitions',\n properties: [\n {\n name: '--element-body-font-family',\n usage: 'The theme only uses one font everywhere.',\n type: 'font'\n },\n { name: '--element-button-radius', usage: 'Button border radius', type: 'text' },\n { name: '--element-button-focus-width', usage: 'Focus width', type: 'text' },\n {\n name: '--element-button-focus-overlay-width',\n usage: 'Focus overlay width',\n type: 'text'\n },\n {\n name: '--element-button-focus-overlay-color',\n usage: 'Focus overlay color',\n type: 'text'\n },\n { name: '--element-input-radius', usage: 'Input field border radius', type: 'text' },\n { name: '--element-logo-color', usage: 'Logo color', type: 'text' },\n { name: '--element-radius-1', usage: 'Border radius-1', type: 'text' },\n { name: '--element-radius-2', usage: 'Border radius-2', type: 'text' },\n { name: '--element-radius-3', usage: 'Border radius-3', type: 'text' }\n ]\n },\n {\n name: 'UI',\n description:\n 'UI colors are used on structural properties and icons and provide good contrast when used over any background.',\n properties: [\n { name: '--element-ui-0', usage: 'Logo, selected (active) elements', type: 'color' },\n { name: '--element-ui-0-hover', usage: 'Selected hover', type: 'color' },\n { name: '--element-ui-1', usage: 'Primary icons', type: 'color' },\n { name: '--element-ui-2', usage: 'Secondary icons', type: 'color' },\n { name: '--element-ui-3', usage: 'Disabled', type: 'color' },\n { name: '--element-ui-4', usage: 'Borders', type: 'color' },\n { name: '--element-ui-5', usage: 'Inverse', type: 'color' },\n { name: '--element-ui-6', usage: 'Shadows', type: 'color' },\n { name: '--element-box-shadow-color-1', usage: 'Box shadow color 1', type: 'color' },\n { name: '--element-box-shadow-color-2', usage: 'Box shadow color 2', type: 'color' },\n { name: '--element-focus-default', usage: 'Default focus color', type: 'color' }\n ]\n },\n {\n name: 'Base',\n description: 'Base colors are used as backgrounds of containers.',\n properties: [\n { name: '--element-base-0', usage: 'Page background, row background', type: 'color' },\n {\n name: '--element-base-1',\n usage: 'Header, navigation, card, table background',\n type: 'color'\n },\n {\n name: '--element-base-1-hover',\n usage: 'Hover on base-1 backgrounds, like table, tree, or menu',\n type: 'color'\n },\n {\n name: '--element-base-1-selected',\n usage: 'Selected on base-1 backgrounds, like table, tree, or menu',\n type: 'color'\n },\n {\n name: '--element-base-2',\n usage: 'Page background with higher contrast pages in dark mode',\n type: 'color'\n },\n {\n name: '--element-base-information',\n usage: 'Informational component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-success',\n usage: 'Success component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-caution',\n usage: 'Caution component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-warning',\n usage: 'Warning component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-danger',\n usage: 'Danger component background for e.g. badges',\n type: 'gradient'\n },\n {\n name: '--element-base-translucent-1',\n usage: 'Translucent background, e.g. backdrop',\n type: 'gradient'\n },\n {\n name: '--element-base-translucent-2',\n usage: 'Slightly translucent background, e.g. toasts',\n type: 'gradient'\n }\n ]\n },\n {\n name: 'Actions',\n description: 'Action colors are used to indicate actions that users can perform.',\n properties: [\n { name: '--element-action-primary', usage: 'Primary interaction', type: 'gradient' },\n {\n name: '--element-action-primary-hover',\n usage: 'Primary action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-primary-text', usage: 'Primary text color', type: 'color' },\n { name: '--element-action-secondary', usage: 'Secondary interaction', type: 'gradient' },\n {\n name: '--element-action-secondary-hover',\n usage: 'Secondary action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-secondary-text', usage: 'Secondary text color', type: 'color' },\n {\n name: '--element-action-secondary-text-hover',\n usage: 'Secondary text color on hover',\n type: 'color'\n },\n {\n name: '--element-action-secondary-border',\n usage: 'Secondary border color',\n type: 'color'\n },\n {\n name: '--element-action-secondary-border-hover',\n usage: 'Secondary border color on hover',\n type: 'color'\n },\n { name: '--element-action-warning', usage: 'Warning', type: 'gradient' },\n {\n name: '--element-action-warning-hover',\n usage: 'Warning action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-warning-text', usage: 'Warning text color', type: 'color' },\n { name: '--element-action-danger', usage: 'Danger', type: 'gradient' },\n {\n name: '--element-action-danger-hover',\n usage: 'Danger action background on hover',\n type: 'gradient'\n },\n { name: '--element-action-danger-text', usage: 'Danger text color', type: 'color' },\n {\n name: '--element-action-disabled-opacity',\n usage: 'Disabled action opacity',\n type: 'number'\n }\n ]\n },\n {\n name: 'Text',\n description: 'Similarly, categories for typography colors are also defined in this system.',\n properties: [\n { name: '--element-text-primary', usage: 'Primary', type: 'color' },\n { name: '--element-text-secondary', usage: 'Secondary', type: 'color' },\n { name: '--element-text-disabled', usage: 'Disabled', type: 'color' },\n { name: '--element-text-inverse', usage: 'Inverse', type: 'color' },\n { name: '--element-text-active', usage: 'Active', type: 'color' },\n { name: '--element-text-information', usage: 'Informational', type: 'color' },\n { name: '--element-text-success', usage: 'Success', type: 'color' },\n { name: '--element-text-caution', usage: 'Caution', type: 'color' },\n { name: '--element-text-warning', usage: 'Warning', type: 'color' },\n { name: '--element-text-danger', usage: 'Danger', type: 'color' }\n ]\n },\n {\n name: 'Status',\n description:\n 'Status colors are used to describe and/or report on the status of different things.',\n properties: [\n { name: '--element-status-information', usage: 'Informational', type: 'color' },\n {\n name: '--element-status-information-contrast',\n usage: 'Informational contrast',\n type: 'color'\n },\n { name: '--element-status-success', usage: 'Success', type: 'color' },\n { name: '--element-status-success-contrast', usage: 'Success contrast', type: 'color' },\n { name: '--element-status-caution', usage: 'Caution', type: 'color' },\n { name: '--element-status-caution-contrast', usage: 'Caution contrast', type: 'color' },\n { name: '--element-status-warning', usage: 'Warning', type: 'color' },\n { name: '--element-status-warning-contrast', usage: 'Warning contrast', type: 'color' },\n { name: '--element-status-danger', usage: 'Danger', type: 'color' },\n { name: '--element-status-danger-contrast', usage: 'Danger contrast', type: 'color' }\n ]\n },\n {\n name: 'Form feedback icons',\n description: 'Icons that are used to indicate a form item status',\n properties: [{ name: '--element-invalid-feedback-icon', usage: 'Danger', type: 'text' }]\n }\n ]\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, EventEmitter, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { Observable, of, ReplaySubject, throwError } from 'rxjs';\nimport { map, switchMap, take, tap } from 'rxjs/operators';\n\nimport { SI_THEME_DOM_TARGET } from './si-theme-dom-target';\nimport { SiDefaultThemeStore, SiThemeStore } from './si-theme-store';\nimport {\n ELEMENT_THEME_NAME,\n Theme,\n ThemeColorScheme,\n ThemeColorSchemes,\n ThemeType\n} from './si-theme.model';\n\n@Injectable({ providedIn: 'root' })\nexport class SiThemeService {\n /**\n * The current color scheme. (e.g. light or dark).\n */\n private _resolvedColorScheme: ThemeType | undefined = 'light';\n private resolvedColorSchemeSub = new ReplaySubject<keyof ThemeColorSchemes>(1);\n /**\n * Emits events when the color scheme changes.\n *\n * @defaultValue this.resolvedColorSchemeSub.asObservable()\n */\n readonly resolvedColorScheme$ = this.resolvedColorSchemeSub.asObservable();\n /**\n * The current color scheme. (e.g. light or dark).\n */\n get resolvedColorScheme(): ThemeType | undefined {\n return this._resolvedColorScheme;\n }\n\n /**\n * All available theme names, including element theme name.\n */\n private _themeNames: string[] = [ELEMENT_THEME_NAME];\n private themeNamesSub = new ReplaySubject<string[]>(1);\n /**\n * Emits events when the list of available theme names changes.\n *\n * @defaultValue this.themeNamesSub.asObservable()\n */\n readonly themeNames$ = this.themeNamesSub.asObservable();\n\n /**\n * All available theme names, including element theme name.\n */\n get themeNames(): string[] {\n return this._themeNames;\n }\n\n /**\n * Emits events when the currently applied theme changes. Either by\n * changing to another theme or by re-applying a theme with updated\n * properties. When switching to default theme element, `undefined`\n * is emitted.\n */\n readonly themeChange = new EventEmitter<Theme | undefined>();\n\n /**\n * The name of the theme that is active. Theme name `element` is the default.\n */\n activeThemeName?: string;\n /**\n * Icon overrides by the currently activeTheme.\n * @defaultValue\n * ```\n * {}\n * ```\n */\n readonly themeIcons = signal<Record<string, string>>({});\n\n private themes: Map<string, Theme> = new Map();\n private darkMediaQuery?: MediaQueryList;\n private mediaQueryListener?: () => void;\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private previewTheme?: Theme;\n\n private themeStore =\n inject(SiThemeStore, { optional: true }) ?? new SiDefaultThemeStore(this.isBrowser);\n private document = inject(DOCUMENT);\n private themeTarget = inject(SI_THEME_DOM_TARGET);\n\n constructor() {\n this._resolvedColorScheme = this.themeTarget.element.classList.contains('app--dark')\n ? 'dark'\n : 'light';\n this.resolvedColorScheme$.subscribe(scheme => (this._resolvedColorScheme = scheme));\n this.themeNames$.subscribe(names => (this._themeNames = names));\n\n if (this.isBrowser) {\n this.darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.mediaQueryListener = () => this.toggleDark(this.darkMediaQuery!.matches);\n }\n\n this.getActiveTheme()\n .pipe(take(1))\n .subscribe({\n next: theme => this.applyThemeStyle(theme, this._resolvedColorScheme),\n error: error => console.error('Cannot load active theme', error)\n });\n\n this.themeStore\n .loadThemeNames()\n .pipe(take(1))\n .subscribe({\n next: names => {\n names.push(ELEMENT_THEME_NAME);\n this.themeNamesSub.next(names);\n },\n error: error => console.error('Cannot load theme names', error)\n });\n }\n\n /**\n * Returns `true` if a theme with the given name is available.\n */\n hasTheme(name: string): boolean {\n return this._themeNames.includes(name);\n }\n\n /**\n * Returns a clone of the theme with the given name or `undefined` if not\n * available or name is `element`.\n * @param name - The name of the theme to be returned.\n * @returns The theme with the given name and `undefined` if name is `element`.\n */\n getTheme(name: string): Observable<Theme | undefined> {\n if (name === ELEMENT_THEME_NAME || !this.hasTheme(name)) {\n return of(undefined);\n }\n\n if (this.themes.has(name)) {\n const theme = this.themes.get(name)!;\n // return a clone to avoid changes as a side effect\n return of(this.cloneTheme(theme));\n }\n\n return this.themeStore.loadTheme(name).pipe(\n tap(theme => {\n if (theme) {\n this.themes.set(theme.name, this.cloneTheme(theme));\n }\n })\n );\n }\n\n /**\n * Loads and returns the currently active theme. Returns undefined if no custom theme is used.\n * @returns A custom theme or `undefined` if the default element theme is used.\n */\n getActiveTheme(): Observable<Theme | undefined> {\n if (this.activeThemeName) {\n return of(this.themes.get(this.activeThemeName));\n }\n return this.themeStore.loadActiveTheme().pipe(\n map(theme => {\n if (theme) {\n this.activeThemeName = theme.name;\n this.themes.set(theme.name, theme);\n this.applyTheme(theme, this._resolvedColorScheme);\n return theme;\n }\n this.activeThemeName = ELEMENT_THEME_NAME;\n return undefined;\n })\n );\n }\n\n /**\n * Adds or updates the given theme in the theme store.\n * @param theme - The theme to be saved.\n * @returns `true` if the theme was saved successfully.\n */\n addOrUpdateTheme(theme: Theme): Observable<boolean> {\n const result = new ReplaySubject<boolean>(1);\n\n this.themeStore.saveTheme(theme).subscribe({\n next: saveResult => {\n if (saveResult) {\n this.themes.set(theme.name, this.cloneTheme(theme));\n // Update list of theme names when this is a new one\n if (!this.hasTheme(theme.name)) {\n const names = this._themeNames.concat(theme.name);\n this.themeNamesSub.next(names);\n }\n }\n result.next(saveResult);\n result.complete();\n },\n error: error => result.error(error),\n complete: () => result.complete()\n });\n return result;\n }\n\n /**\n * Deletes the theme with the given name from the theme store.\n */\n deleteTheme(name: string): Observable<boolean> {\n const result = new ReplaySubject<boolean>(1);\n if (!this.hasTheme(name) || name === ELEMENT_THEME_NAME) {\n result.next(false);\n result.complete();\n } else {\n this.removeThemeCSS(name);\n this.themeStore.deleteTheme(name).subscribe({\n next: deleteResult => {\n if (deleteResult) {\n this.themes.delete(name);\n const names = this._themeNames.filter(themeName => themeName !== name);\n this.themeNamesSub.next(names);\n }\n result.next(deleteResult);\n result.complete();\n },\n error: error => result.error(error),\n complete: () => result.complete()\n });\n }\n return result;\n }\n\n /**\n * Resets the preview theme to the default element theme.\n */\n resetPreview(): void {\n this.previewTheme = { name: '__preview', schemes: { dark: {}, light: {} } };\n this.removeThemeCSS(this.previewTheme.name);\n }\n\n /**\n * Sets the active theme to the given name. If no name is given, the default element theme is used.\n */\n setActiveTheme(name?: string, type?: ThemeType): Observable<boolean> {\n const theType = type ?? this._resolvedColorScheme ?? 'auto';\n const theName = name ?? this.activeThemeName ?? ELEMENT_THEME_NAME;\n\n if (theName === this.activeThemeName) {\n return of(true);\n }\n if (!this.hasTheme(theName)) {\n return of(false);\n }\n\n const result = new ReplaySubject<boolean>(1);\n this.activeThemeName = theName;\n // Make the change in the remove store\n const store =\n theName !== ELEMENT_THEME_NAME\n ? this.themeStore.activateTheme(theName)\n : this.themeStore.deactivateTheme();\n store\n .pipe(\n // On success, load the theme\n switchMap(storeResult => {\n if (storeResult) {\n return this.getTheme(theName);\n } else {\n return throwError(() => 'Cannot change active theme in theme store.');\n }\n }),\n // Only take one to avoid unsubscription issues\n take(1)\n )\n .subscribe({\n next: theme => {\n this.applyTheme(theme, theType);\n result.next(true);\n },\n error: error => {\n console.error(`Activating theme ${name} failed`, error);\n result.next(false);\n },\n complete: () => result.complete()\n });\n return result;\n }\n\n /**\n * Apply `light` or `dark` theme to the configured theme target.\n */\n applyThemeType(type: ThemeType): void {\n if (type === this._resolvedColorScheme || !this.darkMediaQuery || !this.mediaQueryListener) {\n return;\n }\n\n this.darkMediaQuery.removeEventListener('change', this.mediaQueryListener);\n\n if (type === 'light') {\n this.toggleDark(false);\n } else if (type === 'dark') {\n this.toggleDark(true);\n } else {\n this.mediaQueryListener();\n this.darkMediaQuery.addEventListener('change', this.mediaQueryListener);\n }\n }\n\n /**\n * Applies the given theme to the configured theme target. If no theme is given, the active theme is applied.\n */\n applyTheme(theme?: Theme, type?: ThemeType, overwrite?: boolean): void {\n if (theme) {\n this.applyThemeStyle(theme, type, overwrite);\n } else {\n this.getActiveTheme()\n .pipe(take(1))\n .subscribe({\n next: loadedTheme => this.applyThemeStyle(loadedTheme, type),\n error: error => console.error('Cannot load active theme', error)\n });\n }\n }\n\n /**\n * Updates the given property of the preview theme.\n */\n updateProperty(name: string, value: string, type: keyof ThemeColorSchemes): void {\n if (!this.previewTheme) {\n this.resetPreview();\n }\n this.previewTheme!.schemes[type]![name] = value;\n this.createThemeCSS(this.previewTheme!);\n this.themeTarget.forEachElement(element => element.classList.add('theme-__preview'));\n this.dispatchThemeSwitchEvent();\n }\n\n /**\n * Checks if the given theme JSON object is a valid theme.\n */\n isThemeValid(data: unknown): boolean {\n const theme = data as Theme;\n return (\n !!data &&\n typeof data === 'object' &&\n 'name' in data &&\n 'schemes' in data &&\n typeof theme.name === 'string' &&\n typeof theme.schemes === 'object' &&\n this.isThemeTypeValid(theme, 'light') &&\n this.isThemeTypeValid(theme, 'dark')\n );\n }\n\n private isThemeTypeValid(theme: Theme, type: 'light' | 'dark'): boolean {\n return (\n !(type in theme.schemes) ||\n (typeof theme.schemes[type] === 'object' &&\n Object.values(theme.schemes[type] as ThemeColorScheme).every(\n item => typeof item === 'string'\n ) &&\n Object.keys(theme.schemes[type] as ThemeColorScheme).every(\n item => typeof item === 'string'\n ))\n );\n }\n\n private applyThemeStyle(theme?: Theme, type?: ThemeType, overwrite?: boolean): void {\n if (!this.isBrowser) {\n return;\n }\n this.resetPreview();\n\n if (theme && theme.name !== ELEMENT_THEME_NAME && (overwrite || !this.hasThemeCSS(theme))) {\n this.createThemeCSS(theme);\n }\n this.activateTheme(theme);\n\n if (type && type !== this._resolvedColorScheme) {\n this.applyThemeType(type);\n }\n\n this.themeIcons.set(\n Object.fromEntries(Object.entries(theme?.icons ?? {}).map(([key, icon]) => [key, icon]))\n );\n this.themeChange.emit(theme);\n }\n\n private activateTheme(theme?: Theme): void {\n this.themeTarget.forEachElement(element => {\n const classList = element.classList;\n classList.forEach(className => {\n if (className.startsWith('theme-')) {\n classList.remove(className);\n }\n });\n if (theme) {\n classList.add(`theme-${theme.name}`);\n }\n });\n }\n\n private hasThemeCSS(theme: Theme): boolean {\n const id = `__theme-${theme.name}`;\n return !!this.themeTarget.getStyleElement(id);\n }\n\n private createThemeCSS(theme: Theme): void {\n let css = '';\n const themeSelector = this.createThemeSelector(theme.name);\n if (theme.schemes.light) {\n css = this.createThemeVariantCSS(css, themeSelector, theme.schemes.light);\n }\n if (theme.schemes.dark) {\n css = this.createThemeVariantCSS(\n css,\n this.createThemeSelector(theme.name, true),\n theme.schemes.dark\n );\n }\n\n this.removeThemeCSS(theme.name);\n const cssElement = this.document.createElement('style');\n cssElement.id = `__theme-${theme.name}`;\n cssElement.textContent = css;\n\n this.themeTarget.appendStyleElement(cssElement);\n }\n\n private createThemeSelector(name: string, dark: boolean = false): string {\n const classes = `.theme-${name}${dark ? '.app--dark' : ''}`;\n return this.themeTarget.rootSelector === ':host'\n ? `:host(${classes})`\n : `${this.themeTarget.rootSelector}${classes}`;\n }\n\n private createThemeVariantCSS(css: string, selector: string, scheme: ThemeColorScheme): string {\n css += `${selector} {\\n`;\n for (const key of Object.keys(scheme)) {\n css += `${key}: ${scheme[key]};\\n`;\n }\n css += '}\\n';\n return css;\n }\n\n private removeThemeCSS(name: string): void {\n const id = `__theme-${name}`;\n this.themeTarget.getStyleElement(id)?.remove();\n this.themeTarget.forEachElement(element => element.classList.remove(`theme-${name}`));\n }\n\n private toggleDark(dark: boolean): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.themeTarget.forEachElement(element => element.classList.toggle('app--dark', dark));\n const colorScheme = dark ? 'dark' : 'light';\n this.themeTarget.updateColorScheme(colorScheme);\n this.resolvedColorSchemeSub.next(colorScheme);\n this.dispatchThemeSwitchEvent();\n }\n\n private cloneTheme(theme: Theme): Theme {\n const clone: Theme = { ...theme, schemes: {} };\n if (theme.schemes.light) {\n clone.schemes.light = { ...theme.schemes.light };\n }\n if (theme.schemes.dark) {\n clone.schemes.dark = { ...theme.schemes.dark };\n }\n return clone;\n }\n\n private dispatchThemeSwitchEvent(): void {\n window.dispatchEvent(\n new CustomEvent('theme-switch', {\n detail: {\n dark: this._resolvedColorScheme === 'dark',\n colorScheme: this._resolvedColorScheme\n }\n })\n );\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map } from 'rxjs';\n\nimport { SI_THEME_DOM_TARGET } from './si-theme-dom-target';\n\n/**\n * Returns a signal that reflects whether the current Element theme is dark (`true`) or light\n * (`false`). The signal reacts to `theme-switch` events dispatched on `window`.\n *\n * @experimental\n * @returns A boolean signal — `true` when the active theme is dark\n * @throws When called outside of an Angular injection context\n */\nexport const injectIsDarkTheme = (): Signal<boolean> => {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) {\n return signal(false);\n }\n const targetDom = inject(SI_THEME_DOM_TARGET);\n\n return toSignal(\n fromEvent<CustomEvent<{ dark: boolean }>>(window, 'theme-switch').pipe(map(e => e.detail.dark)),\n {\n initialValue: targetDom.element.classList.contains('app--dark')\n }\n );\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-theme-store';\nexport * from './si-theme-dom-target';\nexport * from './si-theme.service';\nexport * from './si-theme.model';\nexport * from './si-theme-signals';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, signal, inject, ElementRef, afterRenderEffect, computed, TemplateRef, ChangeDetectionStrategy, Component, DestroyRef,
|
|
3
|
-
import { calculateOverlayArrowPosition,
|
|
2
|
+
import { input, signal, inject, ElementRef, afterRenderEffect, computed, TemplateRef, ChangeDetectionStrategy, Component, DestroyRef, Injector, effect, inputBinding, afterNextRender, PLATFORM_ID, Injectable, booleanAttribute, Directive, NgModule } from '@angular/core';
|
|
3
|
+
import { calculateOverlayArrowPosition, positions, isRTL, defaultConnectedOverlayScrollStrategy } from '@siemens/element-ng/common';
|
|
4
4
|
import { OverlayRef, Overlay } from '@angular/cdk/overlay';
|
|
5
5
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
6
|
-
import { NgTemplateOutlet, NgComponentOutlet, isPlatformBrowser } from '@angular/common';
|
|
6
|
+
import { NgTemplateOutlet, NgComponentOutlet, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
7
7
|
import { Subject, fromEvent, timer } from 'rxjs';
|
|
8
8
|
import { filter, takeUntil, delayWhen } from 'rxjs/operators';
|
|
9
9
|
import { SiTranslatePipe } from '@siemens/element-translate-ng/translate';
|
|
@@ -115,11 +115,14 @@ class NoopTooltipRef {
|
|
|
115
115
|
*/
|
|
116
116
|
class BrowserTooltipRef {
|
|
117
117
|
config;
|
|
118
|
+
document = inject(DOCUMENT);
|
|
118
119
|
destroyRef = inject(DestroyRef);
|
|
120
|
+
injector = inject(Injector);
|
|
119
121
|
destroy$ = new Subject();
|
|
120
122
|
isFocused = false;
|
|
121
123
|
isHovered = false;
|
|
122
124
|
overlayRef;
|
|
125
|
+
positionStrategy;
|
|
123
126
|
positionSubscription;
|
|
124
127
|
canShowEffect;
|
|
125
128
|
placementEffect;
|
|
@@ -204,7 +207,20 @@ class BrowserTooltipRef {
|
|
|
204
207
|
this.hide();
|
|
205
208
|
}
|
|
206
209
|
getOrCreateOverlay() {
|
|
207
|
-
|
|
210
|
+
if (!this.overlayRef) {
|
|
211
|
+
this.positionStrategy = this.config.overlay
|
|
212
|
+
.position()
|
|
213
|
+
.flexibleConnectedTo(this.config.element)
|
|
214
|
+
.withPush(false)
|
|
215
|
+
.withGrowAfterOpen(true)
|
|
216
|
+
.withFlexibleDimensions(false)
|
|
217
|
+
.withPositions(positions[this.getPlacement()]);
|
|
218
|
+
this.overlayRef = this.config.overlay.create({
|
|
219
|
+
positionStrategy: this.positionStrategy,
|
|
220
|
+
scrollStrategy: this.config.scrollStrategy?.() ?? this.config.overlay.scrollStrategies.reposition(),
|
|
221
|
+
direction: isRTL() ? 'rtl' : 'ltr'
|
|
222
|
+
});
|
|
223
|
+
}
|
|
208
224
|
return this.overlayRef;
|
|
209
225
|
}
|
|
210
226
|
show() {
|
|
@@ -225,17 +241,29 @@ class BrowserTooltipRef {
|
|
|
225
241
|
inputBinding('tooltipContext', this.config.tooltipContext)
|
|
226
242
|
]);
|
|
227
243
|
const tooltipRef = overlayRef.attach(toolTipPortal);
|
|
228
|
-
|
|
244
|
+
// Wait until rendering so an Escape press that opens the tooltip (e.g. by
|
|
245
|
+
// restoring focus) does not also dismiss it as the same event bubbles.
|
|
246
|
+
afterNextRender(() => {
|
|
247
|
+
if (tooltipRef.hostView.destroyed) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
fromEvent(this.document, 'keydown')
|
|
251
|
+
.pipe(filter(event => event.key === 'Escape'), takeUntil(overlayRef.detachments()), takeUntil(this.destroy$))
|
|
252
|
+
.subscribe(() => {
|
|
253
|
+
this.isFocused = false;
|
|
254
|
+
this.isHovered = false;
|
|
255
|
+
this.hide();
|
|
256
|
+
});
|
|
257
|
+
}, { injector: this.injector });
|
|
229
258
|
this.positionSubscription?.unsubscribe();
|
|
230
|
-
this.positionSubscription = positionStrategy?.positionChanges.subscribe(change => tooltipRef.instance.updateTooltipPosition(change, this.config.element));
|
|
259
|
+
this.positionSubscription = this.positionStrategy?.positionChanges.subscribe(change => tooltipRef.instance.updateTooltipPosition(change, this.config.element));
|
|
231
260
|
}
|
|
232
261
|
getPlacement() {
|
|
233
262
|
return this.config.placement();
|
|
234
263
|
}
|
|
235
264
|
updatePlacement(placement) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
positionStrategy.withPositions(getOverlayPositions(this.config.element, placement));
|
|
265
|
+
if (this.positionStrategy) {
|
|
266
|
+
this.positionStrategy.withPositions(positions[placement]);
|
|
239
267
|
this.overlayRef?.updatePosition();
|
|
240
268
|
}
|
|
241
269
|
}
|
|
@@ -367,6 +395,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
367
395
|
}]
|
|
368
396
|
}] });
|
|
369
397
|
|
|
398
|
+
/**
|
|
399
|
+
* Copyright (c) Siemens 2016 - 2026
|
|
400
|
+
* SPDX-License-Identifier: MIT
|
|
401
|
+
*/
|
|
402
|
+
/**
|
|
403
|
+
* Adds a tooltip containing the host element's text when that text is truncated.
|
|
404
|
+
*/
|
|
405
|
+
class SiTooltipOverflowDirective {
|
|
406
|
+
elementRef = inject(ElementRef);
|
|
407
|
+
tooltipService = inject(SiTooltipService);
|
|
408
|
+
element = this.elementRef.nativeElement;
|
|
409
|
+
constructor() {
|
|
410
|
+
this.tooltipService.createTooltip({
|
|
411
|
+
element: this.elementRef,
|
|
412
|
+
placement: () => 'auto',
|
|
413
|
+
/*
|
|
414
|
+
* `canShow` is evaluated everytime before the tooltip is eventually rendered.
|
|
415
|
+
* So there is no need for any listener.
|
|
416
|
+
* It also updates the `tooltipText`.
|
|
417
|
+
*/
|
|
418
|
+
canShow: () => this.canShow(),
|
|
419
|
+
tooltip: () => this.elementRef,
|
|
420
|
+
tooltipContext: () => undefined
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
canShow() {
|
|
424
|
+
// text-truncate uses horizontal ellipsis. Font metrics can cause vertical
|
|
425
|
+
// overflow even when the full label is visible.
|
|
426
|
+
return this.element.scrollWidth > this.element.clientWidth;
|
|
427
|
+
}
|
|
428
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipOverflowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
429
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SiTooltipOverflowDirective, isStandalone: true, selector: "[siTooltipOverflow]", host: { classAttribute: "text-truncate" }, providers: [SiTooltipService], ngImport: i0 });
|
|
430
|
+
}
|
|
431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiTooltipOverflowDirective, decorators: [{
|
|
432
|
+
type: Directive,
|
|
433
|
+
args: [{
|
|
434
|
+
selector: '[siTooltipOverflow]',
|
|
435
|
+
providers: [SiTooltipService],
|
|
436
|
+
host: {
|
|
437
|
+
class: 'text-truncate'
|
|
438
|
+
}
|
|
439
|
+
}]
|
|
440
|
+
}], ctorParameters: () => [] });
|
|
441
|
+
|
|
370
442
|
/**
|
|
371
443
|
* Copyright (c) Siemens 2016 - 2026
|
|
372
444
|
* SPDX-License-Identifier: MIT
|
|
@@ -376,5 +448,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
376
448
|
* Generated bundle index. Do not edit.
|
|
377
449
|
*/
|
|
378
450
|
|
|
379
|
-
export { SiTooltipDirective, SiTooltipModule, SiTooltipService };
|
|
451
|
+
export { SiTooltipDirective, SiTooltipModule, SiTooltipOverflowDirective, SiTooltipService };
|
|
380
452
|
//# sourceMappingURL=siemens-element-ng-tooltip.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-tooltip.mjs","sources":["../../../../projects/element-ng/tooltip/si-tooltip.component.ts","../../../../projects/element-ng/tooltip/si-tooltip.component.html","../../../../projects/element-ng/tooltip/si-tooltip.service.ts","../../../../projects/element-ng/tooltip/si-tooltip.directive.ts","../../../../projects/element-ng/tooltip/si-tooltip.module.ts","../../../../projects/element-ng/tooltip/index.ts","../../../../projects/element-ng/tooltip/siemens-element-ng-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedOverlayPositionChange, OverlayRef } from '@angular/cdk/overlay';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n TemplateRef\n} from '@angular/core';\nimport { calculateOverlayArrowPosition, OverlayArrowPosition } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipContent } from './si-tooltip.model';\n\n@Component({\n selector: 'si-tooltip',\n imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet],\n templateUrl: './si-tooltip.component.html',\n styleUrl: './si-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n 'animate.leave': 'tooltip-leave'\n }\n})\nexport class TooltipComponent {\n /** ID assigned to the tooltip element. */\n readonly id = input<string>();\n\n /** Content rendered by the tooltip. */\n readonly tooltip = input<SiTooltipContent>();\n\n /** Context passed to tooltip template content. */\n readonly tooltipContext = input<unknown>();\n\n protected readonly tooltipPositionClass = signal('');\n protected readonly arrowPos = signal<OverlayArrowPosition | undefined>(undefined);\n\n private readonly elementRef = inject(ElementRef);\n private readonly overlayRef = inject(OverlayRef);\n\n private lastPositionChange?: ConnectedOverlayPositionChange;\n private lastAnchor?: ElementRef;\n\n constructor() {\n let isFirstRun = true;\n afterRenderEffect(() => {\n this.tooltip();\n this.tooltipContext();\n if (isFirstRun) {\n isFirstRun = false;\n return;\n }\n this.overlayRef.updatePosition();\n if (this.lastPositionChange) {\n this.updateTooltipPosition(this.lastPositionChange, this.lastAnchor);\n }\n });\n }\n\n protected readonly tooltipText = computed<string | null>(() => {\n const tooltip = this.tooltip();\n if (typeof tooltip === 'string') {\n return tooltip;\n }\n // When an ElementRef is provided, read its current text content whenever the\n // tooltip is shown, so dynamic content is always reflected.\n // The tooltip content is not updated while being displayed.\n if (tooltip instanceof ElementRef) {\n return tooltip.nativeElement.textContent.trim();\n }\n return null;\n });\n\n protected readonly tooltipTemplate = computed<TemplateRef<any> | null>(() => {\n const tooltip = this.tooltip();\n return tooltip instanceof TemplateRef ? tooltip : null;\n });\n\n protected readonly tooltipComponent = computed(() => {\n const tooltip = this.tooltip();\n return !(tooltip instanceof TemplateRef) &&\n !(tooltip instanceof ElementRef) &&\n typeof tooltip !== 'string'\n ? tooltip\n : null;\n });\n\n /** @internal */\n updateTooltipPosition(change: ConnectedOverlayPositionChange, anchor?: ElementRef): void {\n this.lastPositionChange = change;\n this.lastAnchor = anchor;\n const arrowClassTooltip = `tooltip-${change.connectionPair.overlayX}-${change.connectionPair.overlayY}`;\n // need two updates as class changes affect the position\n if (arrowClassTooltip !== this.tooltipPositionClass()) {\n this.tooltipPositionClass.set(arrowClassTooltip);\n }\n const arrowPos = calculateOverlayArrowPosition(change, this.elementRef, anchor);\n this.arrowPos.set(arrowPos);\n }\n}\n","<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"id()\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ComponentRef,\n DestroyRef,\n effect,\n ElementRef,\n EffectRef,\n inject,\n Injectable,\n Injector,\n inputBinding,\n PLATFORM_ID\n} from '@angular/core';\nimport {\n getOverlay,\n getOverlayPositions,\n getPositionStrategy,\n positions\n} from '@siemens/element-ng/common';\nimport { fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delayWhen, filter, takeUntil } from 'rxjs/operators';\n\nimport { TooltipComponent } from './si-tooltip.component';\nimport { SiTooltipContent } from './si-tooltip.model';\n\n/** @internal */\ninterface TooltipRef {\n destroy(): void;\n}\n\n/**\n * A no-op TooltipRef used on platform server where DOM APIs are unavailable.\n *\n * @internal\n */\nclass NoopTooltipRef {\n destroy(): void {}\n}\n\n/**\n * BrowserTooltipRef is attached to a specific element.\n * Use it to show or hide a tooltip for that element.\n *\n * @internal\n */\nclass BrowserTooltipRef {\n private readonly destroyRef = inject(DestroyRef);\n private readonly destroy$ = new Subject<void>();\n private isFocused = false;\n private isHovered = false;\n private overlayRef?: OverlayRef;\n private positionSubscription?: Subscription;\n private canShowEffect?: EffectRef;\n private placementEffect?: EffectRef;\n\n constructor(\n private config: {\n describedBy?: string;\n element: ElementRef;\n injector?: Injector;\n overlay: Overlay;\n placement: () => keyof typeof positions;\n canShow?: () => boolean;\n scrollStrategy?: () => ScrollStrategy | undefined;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n }\n ) {\n const nativeElement = this.config.element.nativeElement;\n this.destroyRef.onDestroy(() => this.destroy());\n\n if (this.config.canShow) {\n this.canShowEffect = effect(() => this.updateCanShow());\n }\n\n this.placementEffect = effect(() => this.updatePlacement(this.config.placement()));\n\n fromEvent(nativeElement, 'focus')\n .pipe(\n filter(event => event instanceof FocusEvent),\n takeUntil(this.destroy$)\n )\n .subscribe(event => this.onFocus(event));\n\n fromEvent(nativeElement, 'mouseenter')\n .pipe(\n delayWhen(() =>\n // UX Guideline: tooltips on hover should be delayed by 500ms\n timer(500).pipe(\n takeUntil(fromEvent(nativeElement, 'mouseleave')),\n takeUntil(fromEvent(nativeElement, 'focusout')) // user started using keyboard\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(() => this.onMouseEnter());\n\n fromEvent(nativeElement, 'focusout')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onFocusOut());\n\n fromEvent(nativeElement, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onMouseLeave());\n\n fromEvent(nativeElement, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onTouchStart());\n\n this.showForCurrentInteraction();\n }\n\n private updateCanShow(): void {\n if (!this.config.canShow!()) {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n return;\n }\n\n this.showForCurrentInteraction();\n }\n\n private showForCurrentInteraction(): void {\n const nativeElement = this.config.element.nativeElement;\n // The tooltip may become eligible after the element is already focused or\n // hovered (e.g. validation errors appear on blur while the pointer still\n // hovers the element). In that case show it based on the live interaction state.\n if (nativeElement === document.activeElement && nativeElement.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n } else if (nativeElement.matches(':hover')) {\n this.onMouseEnter();\n }\n }\n\n private onFocus(event: FocusEvent): void {\n if (event.target instanceof Element) {\n if (event.target.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n }\n }\n }\n\n private onFocusOut(): void {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private onMouseEnter(): void {\n this.isHovered = true;\n this.show();\n }\n\n private onMouseLeave(): void {\n this.isHovered = false;\n this.hide();\n }\n\n private onTouchStart(): void {\n // On touch devices a tooltip is not useful and would obscure the content the\n // user just tapped. Reset the hover/focus state so it is hidden immediately.\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private getOrCreateOverlay(): OverlayRef {\n this.overlayRef ??= getOverlay(\n this.config.element,\n this.config.overlay,\n false,\n this.getPlacement(),\n false,\n true,\n this.config.scrollStrategy?.()\n );\n return this.overlayRef;\n }\n\n private show(): void {\n if (this.config.canShow && !this.config.canShow()) {\n return;\n }\n\n const overlayRef = this.getOrCreateOverlay();\n if (overlayRef.hasAttached()) {\n return;\n }\n\n const injector = Injector.create({\n parent: this.config.injector,\n providers: [{ provide: OverlayRef, useValue: overlayRef }]\n });\n\n const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector, undefined, [\n inputBinding('id', () => this.config.describedBy),\n inputBinding('tooltip', this.config.tooltip),\n inputBinding('tooltipContext', this.config.tooltipContext)\n ]);\n const tooltipRef: ComponentRef<TooltipComponent> = overlayRef.attach(toolTipPortal);\n\n const positionStrategy = getPositionStrategy(overlayRef);\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = positionStrategy?.positionChanges.subscribe(change =>\n tooltipRef.instance.updateTooltipPosition(change, this.config.element)\n );\n }\n\n private getPlacement(): keyof typeof positions {\n return this.config.placement();\n }\n\n private updatePlacement(placement: keyof typeof positions): void {\n const positionStrategy = this.overlayRef && getPositionStrategy(this.overlayRef);\n if (positionStrategy) {\n positionStrategy.withPositions(getOverlayPositions(this.config.element, placement));\n this.overlayRef?.updatePosition();\n }\n }\n\n private hide(): void {\n if (this.isFocused || this.isHovered) {\n return;\n }\n this.overlayRef?.detach();\n this.positionSubscription?.unsubscribe();\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.canShowEffect?.destroy();\n this.placementEffect?.destroy();\n this.overlayRef?.dispose();\n this.positionSubscription?.unsubscribe();\n }\n}\n\n/**\n * A service to create tooltips for specific elements.\n * Use this if the tooltip directive is not suitable.\n * Must not be used outside element-ng.\n *\n * @internal\n */\n// We cannot provide this in root, as people may override the cdk overlay creation.\n@Injectable()\nexport class SiTooltipService {\n private overlay = inject(Overlay);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n createTooltip(config: {\n describedBy?: string;\n element: ElementRef;\n placement: () => keyof typeof positions;\n injector?: Injector;\n canShow?: () => boolean;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n scrollStrategy?: () => ScrollStrategy | undefined;\n }): TooltipRef {\n if (!this.isBrowser) {\n return new NoopTooltipRef();\n }\n\n return new BrowserTooltipRef({\n ...config,\n overlay: this.overlay\n });\n }\n}\n\nexport type { TooltipRef };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n TemplateRef\n} from '@angular/core';\nimport { defaultConnectedOverlayScrollStrategy, positions } from '@siemens/element-ng/common';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipService } from './si-tooltip.service';\n\n@Directive({\n selector: '[siTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'isDisabled() ? null : describedBy'\n }\n})\nexport class SiTooltipDirective {\n private static idCounter = 0;\n\n /**\n * The tooltip text to be displayed\n *\n * @defaultValue ''\n */\n readonly siTooltip = input<TranslatableString | TemplateRef<any>>('');\n\n /**\n * The placement of the tooltip. One of 'top', 'start', end', 'bottom'\n *\n * @defaultValue 'auto'\n */\n readonly placement = input<keyof typeof positions>('auto');\n\n /**\n * Allows the tooltip to be disabled\n *\n * @defaultValue false\n */\n readonly isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * CDK scroll strategy used for the tooltip overlay.\n *\n * @defaultValue defaultConnectedOverlayScrollStrategy()\n */\n readonly tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy());\n\n /**\n * The context for the attached template\n */\n readonly tooltipContext = input();\n\n protected describedBy = `__tooltip_${SiTooltipDirective.idCounter++}`;\n\n private readonly canShow = computed(() => !!this.siTooltip() && !this.isDisabled());\n private readonly tooltipService = inject(SiTooltipService);\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n this.tooltipService.createTooltip({\n describedBy: this.describedBy,\n element: this.elementRef,\n placement: this.placement,\n canShow: this.canShow,\n tooltip: this.siTooltip,\n tooltipContext: this.tooltipContext,\n scrollStrategy: this.tooltipScrollStrategy\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTooltipDirective } from './si-tooltip.directive';\n\n@NgModule({\n imports: [SiTooltipDirective],\n exports: [SiTooltipDirective]\n})\nexport class SiTooltipModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tooltip.module';\nexport * from './si-tooltip.directive';\nexport * from './si-tooltip.service';\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-tooltip.mjs","sources":["../../../../projects/element-ng/tooltip/si-tooltip.component.ts","../../../../projects/element-ng/tooltip/si-tooltip.component.html","../../../../projects/element-ng/tooltip/si-tooltip.service.ts","../../../../projects/element-ng/tooltip/si-tooltip.directive.ts","../../../../projects/element-ng/tooltip/si-tooltip.module.ts","../../../../projects/element-ng/tooltip/si-tooltip-overflow.directive.ts","../../../../projects/element-ng/tooltip/index.ts","../../../../projects/element-ng/tooltip/siemens-element-ng-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ConnectedOverlayPositionChange, OverlayRef } from '@angular/cdk/overlay';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n signal,\n TemplateRef\n} from '@angular/core';\nimport { calculateOverlayArrowPosition, OverlayArrowPosition } from '@siemens/element-ng/common';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipContent } from './si-tooltip.model';\n\n@Component({\n selector: 'si-tooltip',\n imports: [NgTemplateOutlet, SiTranslatePipe, NgComponentOutlet],\n templateUrl: './si-tooltip.component.html',\n styleUrl: './si-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n 'animate.leave': 'tooltip-leave'\n }\n})\nexport class TooltipComponent {\n /** ID assigned to the tooltip element. */\n readonly id = input<string>();\n\n /** Content rendered by the tooltip. */\n readonly tooltip = input<SiTooltipContent>();\n\n /** Context passed to tooltip template content. */\n readonly tooltipContext = input<unknown>();\n\n protected readonly tooltipPositionClass = signal('');\n protected readonly arrowPos = signal<OverlayArrowPosition | undefined>(undefined);\n\n private readonly elementRef = inject(ElementRef);\n private readonly overlayRef = inject(OverlayRef);\n\n private lastPositionChange?: ConnectedOverlayPositionChange;\n private lastAnchor?: ElementRef;\n\n constructor() {\n let isFirstRun = true;\n afterRenderEffect(() => {\n this.tooltip();\n this.tooltipContext();\n if (isFirstRun) {\n isFirstRun = false;\n return;\n }\n this.overlayRef.updatePosition();\n if (this.lastPositionChange) {\n this.updateTooltipPosition(this.lastPositionChange, this.lastAnchor);\n }\n });\n }\n\n protected readonly tooltipText = computed<string | null>(() => {\n const tooltip = this.tooltip();\n if (typeof tooltip === 'string') {\n return tooltip;\n }\n // When an ElementRef is provided, read its current text content whenever the\n // tooltip is shown, so dynamic content is always reflected.\n // The tooltip content is not updated while being displayed.\n if (tooltip instanceof ElementRef) {\n return tooltip.nativeElement.textContent.trim();\n }\n return null;\n });\n\n protected readonly tooltipTemplate = computed<TemplateRef<any> | null>(() => {\n const tooltip = this.tooltip();\n return tooltip instanceof TemplateRef ? tooltip : null;\n });\n\n protected readonly tooltipComponent = computed(() => {\n const tooltip = this.tooltip();\n return !(tooltip instanceof TemplateRef) &&\n !(tooltip instanceof ElementRef) &&\n typeof tooltip !== 'string'\n ? tooltip\n : null;\n });\n\n /** @internal */\n updateTooltipPosition(change: ConnectedOverlayPositionChange, anchor?: ElementRef): void {\n this.lastPositionChange = change;\n this.lastAnchor = anchor;\n const arrowClassTooltip = `tooltip-${change.connectionPair.overlayX}-${change.connectionPair.overlayY}`;\n // need two updates as class changes affect the position\n if (arrowClassTooltip !== this.tooltipPositionClass()) {\n this.tooltipPositionClass.set(arrowClassTooltip);\n }\n const arrowPos = calculateOverlayArrowPosition(change, this.elementRef, anchor);\n this.arrowPos.set(arrowPos);\n }\n}\n","<div\n class=\"tooltip show position-relative\"\n role=\"tooltip\"\n [id]=\"id()\"\n [class]=\"tooltipPositionClass()\"\n>\n <div\n class=\"tooltip-arrow\"\n [style.left.px]=\"arrowPos()?.left\"\n [style.right.px]=\"arrowPos()?.right\"\n ></div>\n <div class=\"tooltip-inner\">\n @if (tooltipText()) {\n <div class=\"si-body\">{{ tooltipText() | translate }}</div>\n } @else if (tooltipTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"tooltipTemplate()\"\n [ngTemplateOutletContext]=\"tooltipContext()\"\n />\n } @else if (tooltipComponent()) {\n <ng-container [ngComponentOutlet]=\"tooltipComponent()!\" />\n }\n </div>\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ComponentRef,\n DestroyRef,\n effect,\n ElementRef,\n EffectRef,\n inject,\n Injectable,\n Injector,\n inputBinding,\n PLATFORM_ID\n} from '@angular/core';\nimport { isRTL, positions } from '@siemens/element-ng/common';\nimport { fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delayWhen, filter, takeUntil } from 'rxjs/operators';\n\nimport { TooltipComponent } from './si-tooltip.component';\nimport { SiTooltipContent } from './si-tooltip.model';\n\n/** @internal */\ninterface TooltipRef {\n destroy(): void;\n}\n\n/**\n * A no-op TooltipRef used on platform server where DOM APIs are unavailable.\n *\n * @internal\n */\nclass NoopTooltipRef {\n destroy(): void {}\n}\n\n/**\n * BrowserTooltipRef is attached to a specific element.\n * Use it to show or hide a tooltip for that element.\n *\n * @internal\n */\nclass BrowserTooltipRef {\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly destroy$ = new Subject<void>();\n private isFocused = false;\n private isHovered = false;\n private overlayRef?: OverlayRef;\n private positionStrategy?: FlexibleConnectedPositionStrategy;\n private positionSubscription?: Subscription;\n private canShowEffect?: EffectRef;\n private placementEffect?: EffectRef;\n\n constructor(\n private config: {\n describedBy?: string;\n element: ElementRef;\n injector?: Injector;\n overlay: Overlay;\n placement: () => keyof typeof positions;\n canShow?: () => boolean;\n scrollStrategy?: () => ScrollStrategy | undefined;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n }\n ) {\n const nativeElement = this.config.element.nativeElement;\n this.destroyRef.onDestroy(() => this.destroy());\n\n if (this.config.canShow) {\n this.canShowEffect = effect(() => this.updateCanShow());\n }\n\n this.placementEffect = effect(() => this.updatePlacement(this.config.placement()));\n\n fromEvent(nativeElement, 'focus')\n .pipe(\n filter(event => event instanceof FocusEvent),\n takeUntil(this.destroy$)\n )\n .subscribe(event => this.onFocus(event));\n\n fromEvent(nativeElement, 'mouseenter')\n .pipe(\n delayWhen(() =>\n // UX Guideline: tooltips on hover should be delayed by 500ms\n timer(500).pipe(\n takeUntil(fromEvent(nativeElement, 'mouseleave')),\n takeUntil(fromEvent(nativeElement, 'focusout')) // user started using keyboard\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(() => this.onMouseEnter());\n\n fromEvent(nativeElement, 'focusout')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onFocusOut());\n\n fromEvent(nativeElement, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onMouseLeave());\n\n fromEvent(nativeElement, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.onTouchStart());\n\n this.showForCurrentInteraction();\n }\n\n private updateCanShow(): void {\n if (!this.config.canShow!()) {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n return;\n }\n\n this.showForCurrentInteraction();\n }\n\n private showForCurrentInteraction(): void {\n const nativeElement = this.config.element.nativeElement;\n // The tooltip may become eligible after the element is already focused or\n // hovered (e.g. validation errors appear on blur while the pointer still\n // hovers the element). In that case show it based on the live interaction state.\n if (nativeElement === document.activeElement && nativeElement.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n } else if (nativeElement.matches(':hover')) {\n this.onMouseEnter();\n }\n }\n\n private onFocus(event: FocusEvent): void {\n if (event.target instanceof Element) {\n if (event.target.matches(':focus-visible')) {\n this.isFocused = true;\n this.show();\n }\n }\n }\n\n private onFocusOut(): void {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private onMouseEnter(): void {\n this.isHovered = true;\n this.show();\n }\n\n private onMouseLeave(): void {\n this.isHovered = false;\n this.hide();\n }\n\n private onTouchStart(): void {\n // On touch devices a tooltip is not useful and would obscure the content the\n // user just tapped. Reset the hover/focus state so it is hidden immediately.\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n }\n\n private getOrCreateOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.positionStrategy = this.config.overlay\n .position()\n .flexibleConnectedTo(this.config.element)\n .withPush(false)\n .withGrowAfterOpen(true)\n .withFlexibleDimensions(false)\n .withPositions(positions[this.getPlacement()]);\n this.overlayRef = this.config.overlay.create({\n positionStrategy: this.positionStrategy,\n scrollStrategy:\n this.config.scrollStrategy?.() ?? this.config.overlay.scrollStrategies.reposition(),\n direction: isRTL() ? 'rtl' : 'ltr'\n });\n }\n return this.overlayRef;\n }\n\n private show(): void {\n if (this.config.canShow && !this.config.canShow()) {\n return;\n }\n\n const overlayRef = this.getOrCreateOverlay();\n if (overlayRef.hasAttached()) {\n return;\n }\n\n const injector = Injector.create({\n parent: this.config.injector,\n providers: [{ provide: OverlayRef, useValue: overlayRef }]\n });\n\n const toolTipPortal = new ComponentPortal(TooltipComponent, undefined, injector, undefined, [\n inputBinding('id', () => this.config.describedBy),\n inputBinding('tooltip', this.config.tooltip),\n inputBinding('tooltipContext', this.config.tooltipContext)\n ]);\n const tooltipRef: ComponentRef<TooltipComponent> = overlayRef.attach(toolTipPortal);\n\n // Wait until rendering so an Escape press that opens the tooltip (e.g. by\n // restoring focus) does not also dismiss it as the same event bubbles.\n afterNextRender(\n () => {\n if (tooltipRef.hostView.destroyed) {\n return;\n }\n\n fromEvent<KeyboardEvent>(this.document, 'keydown')\n .pipe(\n filter(event => event.key === 'Escape'),\n takeUntil(overlayRef.detachments()),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.isFocused = false;\n this.isHovered = false;\n this.hide();\n });\n },\n { injector: this.injector }\n );\n\n this.positionSubscription?.unsubscribe();\n this.positionSubscription = this.positionStrategy?.positionChanges.subscribe(change =>\n tooltipRef.instance.updateTooltipPosition(change, this.config.element)\n );\n }\n\n private getPlacement(): keyof typeof positions {\n return this.config.placement();\n }\n\n private updatePlacement(placement: keyof typeof positions): void {\n if (this.positionStrategy) {\n this.positionStrategy.withPositions(positions[placement]);\n this.overlayRef?.updatePosition();\n }\n }\n\n private hide(): void {\n if (this.isFocused || this.isHovered) {\n return;\n }\n this.overlayRef?.detach();\n this.positionSubscription?.unsubscribe();\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.canShowEffect?.destroy();\n this.placementEffect?.destroy();\n this.overlayRef?.dispose();\n this.positionSubscription?.unsubscribe();\n }\n}\n\n/**\n * A service to create tooltips for specific elements.\n * Use this if the tooltip directive is not suitable.\n * Must not be used outside element-ng.\n *\n * @internal\n */\n// We cannot provide this in root, as people may override the cdk overlay creation.\n@Injectable()\nexport class SiTooltipService {\n private overlay = inject(Overlay);\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n createTooltip(config: {\n describedBy?: string;\n element: ElementRef;\n placement: () => keyof typeof positions;\n injector?: Injector;\n canShow?: () => boolean;\n tooltip: () => SiTooltipContent;\n tooltipContext: () => unknown;\n scrollStrategy?: () => ScrollStrategy | undefined;\n }): TooltipRef {\n if (!this.isBrowser) {\n return new NoopTooltipRef();\n }\n\n return new BrowserTooltipRef({\n ...config,\n overlay: this.overlay\n });\n }\n}\n\nexport type { TooltipRef };\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n TemplateRef\n} from '@angular/core';\nimport { defaultConnectedOverlayScrollStrategy, positions } from '@siemens/element-ng/common';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SiTooltipService } from './si-tooltip.service';\n\n@Directive({\n selector: '[siTooltip]',\n providers: [SiTooltipService],\n host: {\n '[attr.aria-describedby]': 'isDisabled() ? null : describedBy'\n }\n})\nexport class SiTooltipDirective {\n private static idCounter = 0;\n\n /**\n * The tooltip text to be displayed\n *\n * @defaultValue ''\n */\n readonly siTooltip = input<TranslatableString | TemplateRef<any>>('');\n\n /**\n * The placement of the tooltip. One of 'top', 'start', end', 'bottom'\n *\n * @defaultValue 'auto'\n */\n readonly placement = input<keyof typeof positions>('auto');\n\n /**\n * Allows the tooltip to be disabled\n *\n * @defaultValue false\n */\n readonly isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * CDK scroll strategy used for the tooltip overlay.\n *\n * @defaultValue defaultConnectedOverlayScrollStrategy()\n */\n readonly tooltipScrollStrategy = input(defaultConnectedOverlayScrollStrategy());\n\n /**\n * The context for the attached template\n */\n readonly tooltipContext = input();\n\n protected describedBy = `__tooltip_${SiTooltipDirective.idCounter++}`;\n\n private readonly canShow = computed(() => !!this.siTooltip() && !this.isDisabled());\n private readonly tooltipService = inject(SiTooltipService);\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n this.tooltipService.createTooltip({\n describedBy: this.describedBy,\n element: this.elementRef,\n placement: this.placement,\n canShow: this.canShow,\n tooltip: this.siTooltip,\n tooltipContext: this.tooltipContext,\n scrollStrategy: this.tooltipScrollStrategy\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiTooltipDirective } from './si-tooltip.directive';\n\n@NgModule({\n imports: [SiTooltipDirective],\n exports: [SiTooltipDirective]\n})\nexport class SiTooltipModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive, ElementRef, inject } from '@angular/core';\n\nimport { SiTooltipService } from './si-tooltip.service';\n\n/**\n * Adds a tooltip containing the host element's text when that text is truncated.\n */\n@Directive({\n selector: '[siTooltipOverflow]',\n providers: [SiTooltipService],\n host: {\n class: 'text-truncate'\n }\n})\nexport class SiTooltipOverflowDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tooltipService = inject(SiTooltipService);\n private readonly element = this.elementRef.nativeElement;\n\n constructor() {\n this.tooltipService.createTooltip({\n element: this.elementRef,\n placement: () => 'auto',\n /*\n * `canShow` is evaluated everytime before the tooltip is eventually rendered.\n * So there is no need for any listener.\n * It also updates the `tooltipText`.\n */\n canShow: () => this.canShow(),\n tooltip: () => this.elementRef,\n tooltipContext: () => undefined\n });\n }\n\n private canShow(): boolean {\n // text-truncate uses horizontal ellipsis. Font metrics can cause vertical\n // overflow even when the full label is visible.\n return this.element.scrollWidth > this.element.clientWidth;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tooltip.module';\nexport * from './si-tooltip.directive';\nexport * from './si-tooltip-overflow.directive';\nexport * from './si-tooltip.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|