@fundamental-ngx/core 0.64.1 → 0.64.2-rc.1

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.
@@ -17,7 +17,11 @@ var ContentDensityMode;
17
17
  const isCompact = (density) => density === ContentDensityMode.COMPACT;
18
18
  const isCondensed = (density) => density === ContentDensityMode.CONDENSED;
19
19
  const isCozy = (density) => density === ContentDensityMode.COZY;
20
- const isContentDensityMode = (density) => isCompact(density) || isCondensed(density) || isCozy(density) || density === ContentDensityGlobalKeyword;
20
+ const isContentDensityMode = (density) => isCompact(density) ||
21
+ isCondensed(density) ||
22
+ isCozy(density) ||
23
+ density === ContentDensityGlobalKeyword ||
24
+ density === ContentDensityDefaultKeyword;
21
25
 
22
26
  const CONTENT_DENSITY_DIRECTIVE = new InjectionToken('ContentDensityDirective');
23
27
 
@@ -535,16 +539,10 @@ const getDefaultContentDensity = (injector, configuration) => {
535
539
  }
536
540
  return injector.get(configuration.defaultContentDensity, undefined, undefined);
537
541
  };
538
- const initialContentDensity = (injector, configuration) => {
539
- const serviceValue = injector.get(GlobalContentDensityService, null, { optional: true })?.currentContentDensity;
540
- if (serviceValue) {
541
- return serviceValue;
542
- }
543
- return getDefaultContentDensity(injector, {
544
- ...defaultContentDensityObserverConfigs,
545
- ...(configuration || {})
546
- });
547
- };
542
+ const initialContentDensity = (injector, configuration) => getDefaultContentDensity(injector, {
543
+ ...defaultContentDensityObserverConfigs,
544
+ ...(configuration || {})
545
+ });
548
546
  /**
549
547
  * Service for observing and managing content density in components.
550
548
  *
@@ -603,7 +601,6 @@ class ContentDensityObserver {
603
601
  // Set up config first (needed for validation)
604
602
  this.config = {
605
603
  ...defaultContentDensityObserverConfigs,
606
- ...(this._parentContentDensityObserver?.config ?? {}),
607
604
  ...(_providedConfig || {})
608
605
  };
609
606
  // Resolve initial density
@@ -613,8 +610,8 @@ class ContentDensityObserver {
613
610
  defaultContentDensity: resolvedInitialDensity,
614
611
  contentDensityDirective: this._contentDensityDirective?.densityMode,
615
612
  contentDensityService: this._globalContentDensityService ?? undefined,
616
- parentContentDensityObserver: this.config.restrictChildContentDensity
617
- ? this._parentContentDensityObserver?.contentDensity
613
+ parentContentDensityObserver: this._parentContentDensityObserver?.config?.restrictChildContentDensity
614
+ ? this._parentContentDensityObserver.contentDensity
618
615
  : undefined
619
616
  });
620
617
  // Use linkedSignal for derived state with validation (Angular 21+ pattern)
@@ -730,17 +727,11 @@ class ContentDensityObserver {
730
727
  }
731
728
  const modifiers = this.config.modifiers;
732
729
  const density = currentDensity ?? this._contentDensity();
733
- const parentContentDensityEqual = this._parentContentDensityObserver?.value === density;
734
730
  this._elements.forEach((element) => {
735
731
  Object.values(modifiers).forEach((className) => {
736
732
  this._renderer?.removeClass(element?.nativeElement, className);
737
733
  });
738
- // Apply/remove UI5 compact marker attribute
739
- this._applyUi5Marker(element?.nativeElement, density, parentContentDensityEqual);
740
- // Simply remove all modifiers from current element. Content density state is covered by parent element.
741
- if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {
742
- return;
743
- }
734
+ this._applyUi5Marker(element?.nativeElement, density);
744
735
  const modifierClass = modifiers[density];
745
736
  if (modifierClass) {
746
737
  this._renderer?.addClass(element?.nativeElement, modifierClass);
@@ -752,7 +743,7 @@ class ContentDensityObserver {
752
743
  * UI5 Web Components only support cozy (default) and compact modes.
753
744
  * Both COMPACT and CONDENSED fundamental-ngx modes map to UI5 compact.
754
745
  */
755
- _applyUi5Marker(nativeElement, currentDensity, parentContentDensityEqual) {
746
+ _applyUi5Marker(nativeElement, currentDensity) {
756
747
  // Only apply to actual HTML elements, not comment/text nodes
757
748
  if (!this.config.ui5Markers?.enabled ||
758
749
  !nativeElement ||
@@ -761,11 +752,6 @@ class ContentDensityObserver {
761
752
  return;
762
753
  }
763
754
  const ui5CompactAttribute = 'data-ui5-compact-size';
764
- // Remove attribute if parent already has the same density (unless alwaysAddModifiers)
765
- if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {
766
- this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);
767
- return;
768
- }
769
755
  // UI5 only has cozy (default) and compact modes
770
756
  // Map: COMPACT -> compact, CONDENSED -> compact, COZY -> remove attribute
771
757
  const isUi5Compact = currentDensity === ContentDensityMode.COMPACT || currentDensity === ContentDensityMode.CONDENSED;
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-content-density.mjs","sources":["../../../../libs/core/content-density/content-density.types.ts","../../../../libs/core/content-density/types/content-density.mode.ts","../../../../libs/core/content-density/helpers/density-type-checkers.ts","../../../../libs/core/content-density/tokens/content-density-directive.ts","../../../../libs/core/content-density/directives/content-density.directive.ts","../../../../libs/core/content-density/classes/abstract-content-density-storage.ts","../../../../libs/core/content-density/tokens/content-density-storage-key.token.ts","../../../../libs/core/content-density/tokens/default-content-density.token.ts","../../../../libs/core/content-density/providers/local-content-density-storage.ts","../../../../libs/core/content-density/providers/memory-content-density-storage.ts","../../../../libs/core/content-density/providers/url-content-density-storage.ts","../../../../libs/core/content-density/services/global-content-density.service.ts","../../../../libs/core/content-density/provide-content-density.ts","../../../../libs/core/content-density/content-density.module.ts","../../../../libs/core/content-density/classes/content-density-observer.settings.ts","../../../../libs/core/content-density/helpers/get-changes-source.provider.ts","../../../../libs/core/content-density/variables/default-content-density-consumer-config.ts","../../../../libs/core/content-density/services/content-density-observer.service.ts","../../../../libs/core/content-density/providers/content-density-observer-providers.ts","../../../../libs/core/content-density/testing/mocked-local-content-density-directive.ts","../../../../libs/core/content-density/fundamental-ngx-core-content-density.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from './classes/content-density-observer.settings';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nexport const ContentDensityGlobalKeyword = 'global';\nexport const ContentDensityDefaultKeyword = 'default';\n\nexport type LocalContentDensityMode =\n | ContentDensityMode\n | typeof ContentDensityGlobalKeyword\n | typeof ContentDensityDefaultKeyword;\n\ninterface BaseContentDensityModuleConfig {\n defaultGlobalContentDensity?: ContentDensityMode;\n}\n\ninterface LocalStorageConfig {\n storage: 'localStorage';\n storageKey?: string;\n}\n\ninterface UrlStorageConfig {\n storage: 'url';\n storageKey?: string;\n}\n\ninterface CustomStorageConfig {\n storage: Provider;\n}\n\ninterface MemoryStorageConfig {\n storage: 'memory';\n}\n\nexport type ContentDensityModuleConfig = (\n | LocalStorageConfig\n | MemoryStorageConfig\n | UrlStorageConfig\n | CustomStorageConfig\n) &\n BaseContentDensityModuleConfig;\n\nexport interface ContentDensityObserverTarget extends HasElementRef {\n contentDensitySettings?: ContentDensityObserverSettings;\n}\n\nexport type ContentDensityCallbackFn = (target: ContentDensityMode) => void;\n","export enum ContentDensityMode {\n COZY = 'cozy',\n CONDENSED = 'condensed',\n COMPACT = 'compact'\n}\n","import { ContentDensityGlobalKeyword } from '../content-density.types';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const isCompact = (density: any): boolean => density === ContentDensityMode.COMPACT;\nexport const isCondensed = (density: any): boolean => density === ContentDensityMode.CONDENSED;\nexport const isCozy = (density: any): boolean => density === ContentDensityMode.COZY;\nexport const isContentDensityMode = (density: any): boolean =>\n isCompact(density) || isCondensed(density) || isCozy(density) || density === ContentDensityGlobalKeyword;\n","import { InjectionToken, Signal } from '@angular/core';\nimport { LocalContentDensityMode } from '../content-density.types';\n\n/**\n * Interface for content density directive providers.\n * Uses signals for reactive content density tracking.\n */\nexport interface ContentDensityDirectiveRef {\n /** Current density mode as a signal */\n readonly densityMode: Signal<LocalContentDensityMode>;\n /** Current density mode value (deprecated) */\n readonly value: LocalContentDensityMode;\n}\n\nexport const CONTENT_DENSITY_DIRECTIVE = new InjectionToken<ContentDensityDirectiveRef>('ContentDensityDirective');\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n isDevMode,\n Renderer2,\n signal\n} from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { isContentDensityMode } from '../helpers/density-type-checkers';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/** UI5 attribute name for compact mode */\nconst UI5_COMPACT_ATTRIBUTE = 'data-ui5-compact-size';\n\n/**\n * Directive to control the content density of elements.\n * Used by density controllers and consumers.\n *\n * Provides signal-based state management for reactive content density tracking.\n * Also applies UI5 `data-ui5-compact-size` attribute for UI5 Web Components compatibility.\n *\n * @example\n * // Using fdContentDensity input\n * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n *\n * // Using shorthand inputs\n * <fd-button fdCompact>Compact Button</fd-button>\n * <fd-button fdCozy>Cozy Button</fd-button>\n * <fd-button fdCondensed>Condensed Button</fd-button>\n */\n@Directive({\n selector: `[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]),\n [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]),\n [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]),\n [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])`,\n exportAs: 'fdContentDensity',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => ContentDensityDirective)\n }\n ]\n})\nexport class ContentDensityDirective {\n /**\n * Sets the content density of the element dynamically.\n * Accepts 'compact', 'cozy', 'condensed', or 'global'.\n *\n * @example\n * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n */\n readonly fdContentDensity = input<`${ContentDensityMode}` | LocalContentDensityMode | ''>('');\n\n /**\n * Shorthand for setting compact density.\n * Equivalent to `[fdContentDensity]=\"'compact'\"`.\n *\n * @example\n * <fd-button fdCompact>Button</fd-button>\n * <fd-button [fdCompact]=\"isCompact\">Button</fd-button>\n */\n readonly fdCompact = input(false, { transform: booleanAttribute });\n\n /**\n * Shorthand for setting condensed density.\n * Equivalent to `[fdContentDensity]=\"'condensed'\"`.\n *\n * @example\n * <fd-button fdCondensed>Button</fd-button>\n * <fd-button [fdCondensed]=\"isCondensed\">Button</fd-button>\n */\n readonly fdCondensed = input(false, { transform: booleanAttribute });\n\n /**\n * Shorthand for setting cozy density.\n * Equivalent to `[fdContentDensity]=\"'cozy'\"`.\n *\n * @example\n * <fd-button fdCozy>Button</fd-button>\n * <fd-button [fdCozy]=\"isCozy\">Button</fd-button>\n */\n readonly fdCozy = input(false, { transform: booleanAttribute });\n\n /**\n * Current content density mode as a computed signal.\n * Resolves the density based on shorthand inputs or fdContentDensity value.\n *\n * @returns The resolved content density mode\n */\n readonly densityMode: ReturnType<typeof computed<LocalContentDensityMode>> = computed(() => {\n // Check programmatic override first\n const programmaticDensity = this._programmaticDensity();\n if (programmaticDensity !== null) {\n return programmaticDensity;\n }\n\n // Check shorthand inputs\n if (this.fdCompact()) {\n return ContentDensityMode.COMPACT;\n }\n if (this.fdCondensed()) {\n return ContentDensityMode.CONDENSED;\n }\n if (this.fdCozy()) {\n return ContentDensityMode.COZY;\n }\n\n // Then check fdContentDensity input\n const val = this.fdContentDensity();\n if (val === '') {\n return ContentDensityGlobalKeyword;\n }\n if (!isContentDensityMode(val)) {\n if (isDevMode()) {\n console.warn(\n `The value \"${val}\" is not a valid content density mode. Using \"${ContentDensityGlobalKeyword}\" instead.`\n );\n }\n return ContentDensityGlobalKeyword;\n }\n return val as LocalContentDensityMode;\n });\n\n /**\n * Current density mode value.\n *\n * @deprecated Use densityMode() signal instead\n * @returns The current content density mode\n */\n get value(): LocalContentDensityMode {\n return this.densityMode();\n }\n\n /** @hidden */\n private readonly _elementRef = inject(ElementRef);\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /**\n * Internal signal for programmatic density updates.\n * Takes precedence over input bindings when set.\n */\n private readonly _programmaticDensity = signal<LocalContentDensityMode | null>(null);\n\n /** @hidden */\n constructor() {\n // Effect to apply UI5 attribute based on density mode\n effect(() => {\n this._applyUi5Attribute(this.densityMode());\n });\n }\n\n /**\n * Sets the content density programmatically.\n * Use this method when you need to update the density from code\n * (e.g., in host directives or dynamic scenarios).\n *\n * @param density The content density mode to set\n */\n setDensity(density: LocalContentDensityMode): void {\n this._programmaticDensity.set(density);\n }\n\n /**\n * Clears the programmatic density override.\n * After calling this, the density will be resolved from input bindings.\n */\n clearDensity(): void {\n this._programmaticDensity.set(null);\n }\n\n /**\n * Applies or removes the UI5 compact attribute based on density mode.\n * COMPACT and CONDENSED map to UI5 compact mode.\n * COZY and 'global' do not apply the attribute (UI5 defaults to cozy).\n * @hidden\n */\n private _applyUi5Attribute(density: LocalContentDensityMode): void {\n const nativeElement = this._elementRef?.nativeElement;\n // Only apply to actual HTML elements, not comment/text nodes\n if (!nativeElement || !this._renderer || !(nativeElement instanceof HTMLElement)) {\n return;\n }\n\n const isUi5Compact = density === ContentDensityMode.COMPACT || density === ContentDensityMode.CONDENSED;\n\n if (isUi5Compact) {\n this._renderer.setAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE, '');\n } else {\n this._renderer.removeAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE);\n }\n }\n}\n","import { Signal } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Abstract class for content density storage implementations.\n * The default implementation is MemoryContentDensityStorage.\n *\n * Provides a signal-based API for reactive content density tracking.\n *\n * @example\n * // Provide a custom storage implementation\n * providers: [\n * { provide: ContentDensityStorage, useClass: LocalContentDensityStorage }\n * ]\n */\nexport abstract class ContentDensityStorage {\n /**\n * Current content density as a readonly signal.\n * Read this signal to get the current density or react to changes.\n */\n abstract readonly contentDensity: Signal<ContentDensityMode>;\n\n /**\n * Updates the content density.\n * @param density The new content density mode\n */\n abstract setContentDensity(density: ContentDensityMode): void;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CONTENT_DENSITY_STORAGE_KEY = new InjectionToken<string>(\n 'Content density storage key for local storage or for url param',\n {\n factory: () => '__ContentDensity__'\n }\n);\n","import { InjectionToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const DEFAULT_CONTENT_DENSITY = new InjectionToken<ContentDensityMode>('Default global content density', {\n factory: () => ContentDensityMode.COZY\n});\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { LocalStorageService } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using browser localStorage.\n * Persists the content density setting across browser sessions.\n */\n@Injectable()\nexport class LocalContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n private readonly _storage = inject(LocalStorageService);\n\n constructor() {\n this._initialize();\n const storedDensity = this._storage.get(this._storageKey) || this._defaultContentDensity;\n this._contentDensity = signal<ContentDensityMode>(storedDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n }\n\n /**\n * Updates the content density and persists it to localStorage.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._storage.set(this._storageKey, density);\n this._contentDensity.set(density);\n }\n\n /** @hidden */\n private _initialize(): void {\n if (!this._storage.get(this._storageKey)) {\n this._storage.set(this._storageKey, this._defaultContentDensity);\n }\n }\n}\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using in-memory state.\n * The setting is lost when the application is refreshed.\n * This is the default storage implementation.\n */\n@Injectable()\nexport class MemoryContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n\n constructor() {\n const defaultDensity = inject(DEFAULT_CONTENT_DENSITY);\n this._contentDensity = signal<ContentDensityMode>(defaultDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n }\n\n /**\n * Updates the content density in memory.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._contentDensity.set(density);\n }\n}\n","import { DestroyRef, inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using URL query parameters.\n * Persists the content density setting in the URL, allowing it to be\n * shared via links and bookmarked.\n */\n@Injectable()\nexport class UrlContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n private readonly _destroyRef = inject(DestroyRef);\n\n constructor() {\n this._contentDensity = signal<ContentDensityMode>(this._defaultContentDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n this._initialize();\n }\n\n /**\n * Updates the content density and reflects it in the URL query parameters.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._contentDensity.set(density);\n this._setUrlQueryParam(density);\n }\n\n /** @hidden */\n private _initialize(): void {\n // Subscribe to query param changes and update signal.\n // Automatically unsubscribes when the service is destroyed.\n this._activatedRoute.queryParams.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((queryParams) => {\n const density = queryParams[this._storageKey];\n if (density && density !== this._contentDensity()) {\n this._contentDensity.set(density);\n }\n });\n }\n\n /** @hidden */\n private _setUrlQueryParam(density: ContentDensityMode): void {\n const currentUrl = this._router.url;\n const [pathname, search] = currentUrl.split('?');\n const params = new URLSearchParams(search || '');\n params.delete(this._storageKey);\n params.set(this._storageKey, density);\n\n this._router.navigateByUrl(`${pathname}?${params.toString()}`);\n }\n}\n","import { inject, Injectable, Injector, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Service for managing global content density state.\n * Provides a signal-based API for reactive content density tracking.\n */\n@Injectable()\nexport class GlobalContentDensityService {\n /** Current content density as a readonly signal. */\n readonly currentDensitySignal: Signal<ContentDensityMode>;\n\n private readonly _storage = inject(ContentDensityStorage);\n private readonly _injector = inject(Injector);\n\n /**\n * Current content density value.\n *\n * @deprecated Use currentDensitySignal() instead\n * @returns The current content density mode\n */\n get currentContentDensity(): ContentDensityMode {\n return this.currentDensitySignal();\n }\n\n constructor() {\n this.currentDensitySignal = this._storage.contentDensity;\n }\n\n /**\n * Returns an observable that emits content density changes.\n *\n * @deprecated Use currentDensitySignal signal instead\n * @returns Observable of content density changes\n */\n contentDensityListener(): Observable<ContentDensityMode> {\n return toObservable(this._storage.contentDensity, { injector: this._injector });\n }\n\n /**\n * Updates the global content density.\n * @param density The new content density mode\n */\n updateContentDensity(density: ContentDensityMode): void {\n this._storage.setContentDensity(density);\n }\n}\n","import { DOCUMENT, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from './classes/abstract-content-density-storage';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { LocalContentDensityStorage } from './providers/local-content-density-storage';\nimport { MemoryContentDensityStorage } from './providers/memory-content-density-storage';\nimport { UrlContentDensityStorage } from './providers/url-content-density-storage';\nimport { GlobalContentDensityService } from './services/global-content-density.service';\nimport { CONTENT_DENSITY_STORAGE_KEY } from './tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from './tokens/default-content-density.token';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nfunction generateContentDensityStorage(config: ContentDensityModuleConfig): Provider {\n if (config.storage === 'localStorage') {\n return {\n provide: ContentDensityStorage,\n useClass: LocalContentDensityStorage\n };\n }\n if (config.storage === 'memory') {\n return {\n provide: ContentDensityStorage,\n useClass: MemoryContentDensityStorage\n };\n }\n if (config.storage === 'url') {\n return {\n provide: ContentDensityStorage,\n useClass: UrlContentDensityStorage,\n deps: [Router, ActivatedRoute, DEFAULT_CONTENT_DENSITY, CONTENT_DENSITY_STORAGE_KEY, DOCUMENT]\n };\n }\n return [];\n}\n\n/**\n * Provides content density services and configurations\n * @param config\n */\nexport function provideContentDensity(config?: ContentDensityModuleConfig): Provider[] {\n let storage: Provider;\n const conf: ContentDensityModuleConfig = config || { storage: 'memory' };\n\n if (typeof conf.storage === 'string') {\n storage = generateContentDensityStorage(conf);\n } else if (typeof conf.storage === 'object') {\n storage = conf.storage;\n } else {\n storage = {\n provide: ContentDensityStorage,\n useClass: MemoryContentDensityStorage\n };\n }\n return [\n {\n provide: DEFAULT_CONTENT_DENSITY,\n useValue: conf.defaultGlobalContentDensity || ContentDensityMode.COZY\n },\n {\n provide: CONTENT_DENSITY_STORAGE_KEY,\n useValue: (conf as any).storageKey || '__ContentDensity__'\n },\n GlobalContentDensityService,\n storage\n ];\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { ContentDensityDirective } from './directives/content-density.directive';\nimport { provideContentDensity } from './provide-content-density';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [ContentDensityDirective],\n exports: [ContentDensityDirective]\n})\nexport class ContentDensityModule {\n /** Module with providers */\n static forRoot(config?: ContentDensityModuleConfig): ModuleWithProviders<ContentDensityModule> {\n return {\n ngModule: ContentDensityModule,\n providers: [provideContentDensity(config)]\n };\n }\n}\n","import { FactorySansProvider, ProviderToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Configuration for UI5 Web Components content density markers.\n * UI5 Web Components use `data-ui5-compact-size` attribute for compact mode.\n * Cozy is the default mode (no marker needed).\n */\nexport interface Ui5ContentDensityMarkers {\n /**\n * Whether to apply UI5 content density markers.\n * When enabled, `data-ui5-compact-size` attribute will be applied\n * for COMPACT and CONDENSED modes (UI5 only supports cozy/compact).\n * @default true\n */\n enabled: boolean;\n}\n\nexport class ContentDensityObserverSettings {\n /** Classes to be added to the element. */\n modifiers?: Partial<Record<ContentDensityMode, string>>;\n /** Supported content densities. */\n supportedContentDensity?: ContentDensityMode[];\n /** Default content density. */\n defaultContentDensity?: ContentDensityMode | ProviderToken<ContentDensityMode> | FactorySansProvider;\n /** Whether in debug mode. */\n debug?: boolean;\n /** Whether to always add class modifiers. Useful for components that are detached from its parent component. */\n alwaysAddModifiers?: boolean;\n /** Whether to force child components to restrict supported content density with current component's one. */\n restrictChildContentDensity?: boolean;\n /**\n * Configuration for UI5 Web Components content density markers.\n * When enabled, applies `data-ui5-compact-size` attribute for compact/condensed modes.\n */\n ui5Markers?: Ui5ContentDensityMarkers;\n}\n","import { computed, Signal } from '@angular/core';\nimport {\n ContentDensityDefaultKeyword,\n ContentDensityGlobalKeyword,\n LocalContentDensityMode\n} from '../content-density.types';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Creates a computed signal that resolves the content density from multiple sources.\n *\n * Priority order:\n * 1. Parent content density observer (if restrictChildContentDensity is enabled)\n * 2. Content density directive\n * 3. Global content density service\n * 4. Default content density\n *\n * Special keywords are resolved:\n * - 'default' -> uses defaultContentDensity\n * - 'global' -> uses global service value\n */\nexport const getChangesSource = (params: {\n defaultContentDensity: ContentDensityMode;\n contentDensityDirective?: Signal<LocalContentDensityMode>;\n contentDensityService?: GlobalContentDensityService;\n parentContentDensityObserver?: Signal<ContentDensityMode>;\n}): Signal<ContentDensityMode> =>\n computed(() => {\n // Get the raw mode from the appropriate source (priority order)\n const rawMode: LocalContentDensityMode = params.parentContentDensityObserver\n ? params.parentContentDensityObserver()\n : params.contentDensityDirective\n ? params.contentDensityDirective()\n : (params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity);\n\n // Resolve special keywords\n if (rawMode === ContentDensityDefaultKeyword) {\n return params.defaultContentDensity;\n }\n if (rawMode === ContentDensityGlobalKeyword) {\n return params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity;\n }\n\n return rawMode;\n });\n","import { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const defaultContentDensityObserverConfigs: Required<ContentDensityObserverSettings> = {\n modifiers: {\n [ContentDensityMode.COMPACT]: 'is-compact',\n [ContentDensityMode.COZY]: 'is-cozy',\n [ContentDensityMode.CONDENSED]: 'is-condensed'\n },\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],\n defaultContentDensity: ContentDensityMode.COZY,\n debug: false,\n alwaysAddModifiers: false,\n restrictChildContentDensity: false,\n ui5Markers: {\n enabled: true\n }\n};\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n FactorySansProvider,\n inject,\n Injectable,\n Injector,\n linkedSignal,\n Renderer2\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, Observer, Subscription } from 'rxjs';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserverTarget } from '../content-density.types';\nimport { getChangesSource } from '../helpers/get-changes-source.provider';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\n\nconst isFactoryProvider = (obj: any): obj is FactorySansProvider => !!(obj && (obj as FactorySansProvider).useFactory);\n\nconst getDeps = (injector: Injector, defaultContentDensity: FactorySansProvider): Array<any> =>\n (defaultContentDensity.deps || []).map((dep): any => {\n if (Array.isArray(dep)) {\n let type;\n let flags = {};\n for (let index = 0; index < dep.length; index++) {\n const flag = dep[index]['__NG_DI_FLAG__'];\n if (typeof flag === 'number') {\n flags = { ...flags, flag };\n } else {\n type = dep[index];\n }\n }\n return injector.get(type, undefined, flags);\n }\n return injector.get(dep, undefined, {});\n });\n\nconst getDefaultContentDensity = (\n injector: Injector,\n configuration: Required<ContentDensityObserverSettings>\n): ContentDensityMode => {\n if (typeof configuration.defaultContentDensity === 'string') {\n return configuration.defaultContentDensity as ContentDensityMode;\n }\n if (isFactoryProvider(configuration.defaultContentDensity)) {\n const deps = getDeps(injector, configuration.defaultContentDensity);\n return configuration.defaultContentDensity.useFactory(...deps);\n }\n return injector.get(configuration.defaultContentDensity, undefined, undefined);\n};\n\nconst initialContentDensity = (\n injector: Injector,\n configuration?: ContentDensityObserverSettings\n): ContentDensityMode => {\n const serviceValue = injector.get(GlobalContentDensityService, null, { optional: true })?.currentContentDensity;\n if (serviceValue) {\n return serviceValue;\n }\n return getDefaultContentDensity(injector, {\n ...defaultContentDensityObserverConfigs,\n ...(configuration || {})\n });\n};\n\n/**\n * Service for observing and managing content density in components.\n *\n * Provides signal-based API for reactive content density tracking.\n * Uses linkedSignal (Angular 21+) for derived state with validation.\n */\n@Injectable()\nexport class ContentDensityObserver {\n /** Configuration for this observer */\n readonly config: ContentDensityObserverSettings;\n\n /**\n * Current content density as a readonly signal.\n * Uses linkedSignal internally for reactive updates with validation.\n */\n readonly contentDensity: ReturnType<\n ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n >;\n\n /** Whether content density is compact (signal) */\n readonly isCompactSignal: ReturnType<typeof computed<boolean>>;\n\n /** Whether content density is cozy (signal) */\n readonly isCozySignal: ReturnType<typeof computed<boolean>>;\n\n /** Whether content density is condensed (signal) */\n readonly isCondensedSignal: ReturnType<typeof computed<boolean>>;\n\n /**\n * Current content density signal\n * @deprecated Use contentDensity() instead\n */\n readonly contentDensity$: ReturnType<\n ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n >;\n\n /**\n * Observable for compact state changes\n * @deprecated Use isCompactSignal signal instead\n */\n readonly isCompact$: Observable<boolean>;\n\n /**\n * Observable for cozy state changes\n * @deprecated Use isCozySignal signal instead\n */\n readonly isCozy$: Observable<boolean>;\n\n /**\n * Observable for condensed state changes\n * @deprecated Use isCondensedSignal signal instead\n */\n readonly isCondensed$: Observable<boolean>;\n\n /**\n * Observable of content density changes\n * @deprecated Use contentDensity signal instead\n */\n readonly contentDensity$$: Observable<ContentDensityMode>;\n\n /**\n * Internal linkedSignal for content density with validation.\n * linkedSignal (Angular 21+) automatically tracks source changes\n * and applies the computation (validation/fallback).\n */\n private readonly _contentDensity: ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>;\n\n private readonly _changesSource: ReturnType<typeof computed<ContentDensityMode>>;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n private readonly _alternativeTo = {\n [ContentDensityMode.COMPACT]: (): ContentDensityMode =>\n this._isSupported(ContentDensityMode.CONDENSED) ? ContentDensityMode.CONDENSED : ContentDensityMode.COZY,\n [ContentDensityMode.CONDENSED]: (): ContentDensityMode =>\n this._isSupported(ContentDensityMode.COMPACT) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY,\n [ContentDensityMode.COZY]: (): ContentDensityMode => ContentDensityMode.COZY // No alternative here, everyone should support it\n };\n\n private _globalContentDensityService = inject(GlobalContentDensityService, {\n optional: true\n });\n\n private _contentDensityDirective = inject(CONTENT_DENSITY_DIRECTIVE, {\n optional: true\n });\n\n private _parentContentDensityObserver = inject(ContentDensityObserver, {\n optional: true,\n skipSelf: true\n });\n\n private _renderer: Renderer2 | null = inject(Renderer2);\n\n private _elementRef: ElementRef<any> | null = inject(ElementRef);\n\n private _elements = [this._elementRef];\n\n /**\n * Current content density value\n * @deprecated Use contentDensity() signal instead\n */\n get value(): ContentDensityMode {\n return this._contentDensity();\n }\n\n /**\n * Whether content density is compact\n * @deprecated Use isCompactSignal() signal instead\n */\n get isCompact(): boolean {\n return this.isCompactSignal();\n }\n\n /**\n * Whether content density is cozy\n * @deprecated Use isCozySignal() signal instead\n */\n get isCozy(): boolean {\n return this.isCozySignal();\n }\n\n /**\n * Whether content density is condensed\n * @deprecated Use isCondensedSignal() signal instead\n */\n get isCondensed(): boolean {\n return this.isCondensedSignal();\n }\n\n constructor(_injector: Injector, _providedConfig?: ContentDensityObserverSettings) {\n // Set up config first (needed for validation)\n this.config = {\n ...defaultContentDensityObserverConfigs,\n ...(this._parentContentDensityObserver?.config ?? {}),\n ...(_providedConfig || {})\n };\n\n // Resolve initial density\n const resolvedInitialDensity = initialContentDensity(_injector, _providedConfig);\n\n // Get the changes source as a computed signal\n this._changesSource = getChangesSource({\n defaultContentDensity: resolvedInitialDensity,\n contentDensityDirective: this._contentDensityDirective?.densityMode,\n contentDensityService: this._globalContentDensityService ?? undefined,\n parentContentDensityObserver: this.config.restrictChildContentDensity\n ? this._parentContentDensityObserver?.contentDensity\n : undefined\n });\n\n // Use linkedSignal for derived state with validation (Angular 21+ pattern)\n // linkedSignal automatically updates when source changes, applying the computation\n this._contentDensity = linkedSignal({\n source: this._changesSource,\n computation: (source) => {\n // Guard against undefined/null source values\n if (!source || typeof source !== 'string') {\n return ContentDensityMode.COZY; // Safe fallback to default\n }\n return this._validateAndFallback(source as ContentDensityMode);\n }\n });\n\n // Public readonly signal\n this.contentDensity = this._contentDensity.asReadonly();\n\n // Computed boolean signals\n this.isCompactSignal = computed(() => this._contentDensity() === ContentDensityMode.COMPACT);\n this.isCozySignal = computed(() => this._contentDensity() === ContentDensityMode.COZY);\n this.isCondensedSignal = computed(() => this._contentDensity() === ContentDensityMode.CONDENSED);\n\n // Backward compatible signal aliases\n this.contentDensity$ = this.contentDensity;\n\n // Backward compatible observables\n this.isCompact$ = toObservable(this.isCompactSignal, { injector: _injector });\n this.isCozy$ = toObservable(this.isCozySignal, { injector: _injector });\n this.isCondensed$ = toObservable(this.isCondensedSignal, { injector: _injector });\n this.contentDensity$$ = toObservable(this._contentDensity, { injector: _injector });\n\n // Effect purely for DOM side effects (CSS classes and UI5 attribute)\n // This follows Angular 21 best practices: effects should only do side effects, not update signals\n effect(() => {\n // Read the signal to track changes\n const density = this._contentDensity();\n // Apply DOM changes (side effect)\n this._applyClass(density);\n });\n\n // Apply initial CSS class after first render (zoneless-compatible)\n afterNextRender(() => {\n this._applyClass(this._contentDensity());\n });\n\n // Register cleanup on destroy\n this._destroyRef.onDestroy(() => {\n this._cleanup();\n if (this.config.debug) {\n console.warn('ContentDensityObserver: destroyed');\n }\n });\n }\n\n /**\n * Add consumers to observe content density changes\n * @deprecated Use signal bindings instead\n */\n consume(...consumers: ContentDensityObserverTarget[]): void {\n this._elements.concat(...consumers.map((c) => c.elementRef));\n }\n\n /**\n * Completes the observer and cleans up resources\n * @deprecated Cleanup is automatic via DestroyRef\n */\n complete(): void {\n this._cleanup();\n }\n\n /**\n * Returns an observable of content density changes\n * @deprecated Use contentDensity signal instead\n */\n asObservable(): Observable<ContentDensityMode> {\n return this.contentDensity$$;\n }\n\n /**\n * Subscribe to content density changes.\n * @deprecated Use contentDensity signal with effect() instead.\n * This method exists for backward compatibility.\n */\n subscribe(observer?: Partial<Observer<ContentDensityMode>>): Subscription {\n return this.contentDensity$$.subscribe(observer);\n }\n\n /**\n * Remove a consumer from the observer\n * @deprecated Use signal bindings instead\n */\n removeConsumer(consumer: ContentDensityObserverTarget): void {\n this._elements.splice(this._elements.indexOf(consumer.elementRef), 1);\n }\n\n private _validateAndFallback(density: ContentDensityMode): ContentDensityMode {\n if (this.config.debug) {\n console.warn(`ContentDensityObserver: density changed to ${density}`);\n }\n if (!this._isSupported(density)) {\n try {\n if (this.config.debug) {\n console.warn(\n `ContentDensityObserver: ${density} is not supported. Failing back to alternative one.`\n );\n }\n return this._alternativeTo[density]();\n } catch {\n throw new Error(`ContentDensityObserver: density ${density} is not supported`);\n }\n }\n return density;\n }\n\n private _cleanup(): void {\n this._parentContentDensityObserver = null;\n this._contentDensityDirective = null;\n this._globalContentDensityService = null;\n this._elementRef = null;\n this._renderer = null;\n this._elements = [];\n }\n\n private _applyClass(currentDensity?: ContentDensityMode): void {\n if (!this.config?.modifiers) {\n return;\n }\n const modifiers = this.config.modifiers;\n const density = currentDensity ?? this._contentDensity();\n\n const parentContentDensityEqual = this._parentContentDensityObserver?.value === density;\n\n this._elements.forEach((element) => {\n Object.values(modifiers).forEach((className) => {\n this._renderer?.removeClass(element?.nativeElement, className);\n });\n\n // Apply/remove UI5 compact marker attribute\n this._applyUi5Marker(element?.nativeElement, density, parentContentDensityEqual);\n\n // Simply remove all modifiers from current element. Content density state is covered by parent element.\n if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {\n return;\n }\n const modifierClass = modifiers[density];\n if (modifierClass) {\n this._renderer?.addClass(element?.nativeElement, modifierClass);\n }\n });\n }\n\n /**\n * Apply or remove UI5 Web Components compact marker.\n * UI5 Web Components only support cozy (default) and compact modes.\n * Both COMPACT and CONDENSED fundamental-ngx modes map to UI5 compact.\n */\n private _applyUi5Marker(\n nativeElement: HTMLElement | undefined,\n currentDensity: ContentDensityMode,\n parentContentDensityEqual: boolean\n ): void {\n // Only apply to actual HTML elements, not comment/text nodes\n if (\n !this.config.ui5Markers?.enabled ||\n !nativeElement ||\n !this._renderer ||\n !(nativeElement instanceof HTMLElement)\n ) {\n return;\n }\n\n const ui5CompactAttribute = 'data-ui5-compact-size';\n\n // Remove attribute if parent already has the same density (unless alwaysAddModifiers)\n if (parentContentDensityEqual && !this.config.alwaysAddModifiers) {\n this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);\n return;\n }\n\n // UI5 only has cozy (default) and compact modes\n // Map: COMPACT -> compact, CONDENSED -> compact, COZY -> remove attribute\n const isUi5Compact =\n currentDensity === ContentDensityMode.COMPACT || currentDensity === ContentDensityMode.CONDENSED;\n\n if (isUi5Compact) {\n this._renderer.setAttribute(nativeElement, ui5CompactAttribute, '');\n } else {\n this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);\n }\n }\n\n private _isSupported(density: ContentDensityMode): boolean {\n return this.config.supportedContentDensity?.includes(density) ?? false;\n }\n}\n","import { Provider } from '@angular/core';\nimport { consumerProviderFactory } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserver } from '../services/content-density-observer.service';\n\n/**\n * Creates provider for ContentDensityObserver\n */\nexport function contentDensityObserverProviders(params?: ContentDensityObserverSettings): Provider[] {\n return [consumerProviderFactory(ContentDensityObserver, params)];\n}\n","import { Provider, signal } from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { CONTENT_DENSITY_DIRECTIVE, ContentDensityDirectiveRef } from '../tokens/content-density-directive';\n\n/** @hidden */\nexport function mockedLocalContentDensityDirective(\n defaultValue: LocalContentDensityMode = ContentDensityGlobalKeyword\n): { contentDensityDirectiveProvider: Provider; setContentDensity: (cd: LocalContentDensityMode) => void } {\n const densitySignal = signal<LocalContentDensityMode>(defaultValue);\n\n const mockDirective: ContentDensityDirectiveRef = {\n densityMode: densitySignal.asReadonly(),\n get value(): LocalContentDensityMode {\n return densitySignal();\n }\n };\n\n return {\n contentDensityDirectiveProvider: {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useValue: mockDirective\n },\n setContentDensity: (cd: LocalContentDensityMode) => densitySignal.set(cd)\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ContentDensityObserverSettings"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-content-density.mjs","sources":["../../../../libs/core/content-density/content-density.types.ts","../../../../libs/core/content-density/types/content-density.mode.ts","../../../../libs/core/content-density/helpers/density-type-checkers.ts","../../../../libs/core/content-density/tokens/content-density-directive.ts","../../../../libs/core/content-density/directives/content-density.directive.ts","../../../../libs/core/content-density/classes/abstract-content-density-storage.ts","../../../../libs/core/content-density/tokens/content-density-storage-key.token.ts","../../../../libs/core/content-density/tokens/default-content-density.token.ts","../../../../libs/core/content-density/providers/local-content-density-storage.ts","../../../../libs/core/content-density/providers/memory-content-density-storage.ts","../../../../libs/core/content-density/providers/url-content-density-storage.ts","../../../../libs/core/content-density/services/global-content-density.service.ts","../../../../libs/core/content-density/provide-content-density.ts","../../../../libs/core/content-density/content-density.module.ts","../../../../libs/core/content-density/classes/content-density-observer.settings.ts","../../../../libs/core/content-density/helpers/get-changes-source.provider.ts","../../../../libs/core/content-density/variables/default-content-density-consumer-config.ts","../../../../libs/core/content-density/services/content-density-observer.service.ts","../../../../libs/core/content-density/providers/content-density-observer-providers.ts","../../../../libs/core/content-density/testing/mocked-local-content-density-directive.ts","../../../../libs/core/content-density/fundamental-ngx-core-content-density.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from './classes/content-density-observer.settings';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nexport const ContentDensityGlobalKeyword = 'global';\nexport const ContentDensityDefaultKeyword = 'default';\n\nexport type LocalContentDensityMode =\n | ContentDensityMode\n | typeof ContentDensityGlobalKeyword\n | typeof ContentDensityDefaultKeyword;\n\ninterface BaseContentDensityModuleConfig {\n defaultGlobalContentDensity?: ContentDensityMode;\n}\n\ninterface LocalStorageConfig {\n storage: 'localStorage';\n storageKey?: string;\n}\n\ninterface UrlStorageConfig {\n storage: 'url';\n storageKey?: string;\n}\n\ninterface CustomStorageConfig {\n storage: Provider;\n}\n\ninterface MemoryStorageConfig {\n storage: 'memory';\n}\n\nexport type ContentDensityModuleConfig = (\n | LocalStorageConfig\n | MemoryStorageConfig\n | UrlStorageConfig\n | CustomStorageConfig\n) &\n BaseContentDensityModuleConfig;\n\nexport interface ContentDensityObserverTarget extends HasElementRef {\n contentDensitySettings?: ContentDensityObserverSettings;\n}\n\nexport type ContentDensityCallbackFn = (target: ContentDensityMode) => void;\n","export enum ContentDensityMode {\n COZY = 'cozy',\n CONDENSED = 'condensed',\n COMPACT = 'compact'\n}\n","import { ContentDensityDefaultKeyword, ContentDensityGlobalKeyword } from '../content-density.types';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const isCompact = (density: any): boolean => density === ContentDensityMode.COMPACT;\nexport const isCondensed = (density: any): boolean => density === ContentDensityMode.CONDENSED;\nexport const isCozy = (density: any): boolean => density === ContentDensityMode.COZY;\nexport const isContentDensityMode = (density: any): boolean =>\n isCompact(density) ||\n isCondensed(density) ||\n isCozy(density) ||\n density === ContentDensityGlobalKeyword ||\n density === ContentDensityDefaultKeyword;\n","import { InjectionToken, Signal } from '@angular/core';\nimport { LocalContentDensityMode } from '../content-density.types';\n\n/**\n * Interface for content density directive providers.\n * Uses signals for reactive content density tracking.\n */\nexport interface ContentDensityDirectiveRef {\n /** Current density mode as a signal */\n readonly densityMode: Signal<LocalContentDensityMode>;\n /** Current density mode value (deprecated) */\n readonly value: LocalContentDensityMode;\n}\n\nexport const CONTENT_DENSITY_DIRECTIVE = new InjectionToken<ContentDensityDirectiveRef>('ContentDensityDirective');\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n isDevMode,\n Renderer2,\n signal\n} from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { isContentDensityMode } from '../helpers/density-type-checkers';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/** UI5 attribute name for compact mode */\nconst UI5_COMPACT_ATTRIBUTE = 'data-ui5-compact-size';\n\n/**\n * Directive to control the content density of elements.\n * Used by density controllers and consumers.\n *\n * Provides signal-based state management for reactive content density tracking.\n * Also applies UI5 `data-ui5-compact-size` attribute for UI5 Web Components compatibility.\n *\n * @example\n * // Using fdContentDensity input\n * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n *\n * // Using shorthand inputs\n * <fd-button fdCompact>Compact Button</fd-button>\n * <fd-button fdCozy>Cozy Button</fd-button>\n * <fd-button fdCondensed>Condensed Button</fd-button>\n */\n@Directive({\n selector: `[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]),\n [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]),\n [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]),\n [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])`,\n exportAs: 'fdContentDensity',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => ContentDensityDirective)\n }\n ]\n})\nexport class ContentDensityDirective {\n /**\n * Sets the content density of the element dynamically.\n * Accepts 'compact', 'cozy', 'condensed', or 'global'.\n *\n * @example\n * <fd-button [fdContentDensity]=\"'compact'\">Button</fd-button>\n */\n readonly fdContentDensity = input<`${ContentDensityMode}` | LocalContentDensityMode | ''>('');\n\n /**\n * Shorthand for setting compact density.\n * Equivalent to `[fdContentDensity]=\"'compact'\"`.\n *\n * @example\n * <fd-button fdCompact>Button</fd-button>\n * <fd-button [fdCompact]=\"isCompact\">Button</fd-button>\n */\n readonly fdCompact = input(false, { transform: booleanAttribute });\n\n /**\n * Shorthand for setting condensed density.\n * Equivalent to `[fdContentDensity]=\"'condensed'\"`.\n *\n * @example\n * <fd-button fdCondensed>Button</fd-button>\n * <fd-button [fdCondensed]=\"isCondensed\">Button</fd-button>\n */\n readonly fdCondensed = input(false, { transform: booleanAttribute });\n\n /**\n * Shorthand for setting cozy density.\n * Equivalent to `[fdContentDensity]=\"'cozy'\"`.\n *\n * @example\n * <fd-button fdCozy>Button</fd-button>\n * <fd-button [fdCozy]=\"isCozy\">Button</fd-button>\n */\n readonly fdCozy = input(false, { transform: booleanAttribute });\n\n /**\n * Current content density mode as a computed signal.\n * Resolves the density based on shorthand inputs or fdContentDensity value.\n *\n * @returns The resolved content density mode\n */\n readonly densityMode: ReturnType<typeof computed<LocalContentDensityMode>> = computed(() => {\n // Check programmatic override first\n const programmaticDensity = this._programmaticDensity();\n if (programmaticDensity !== null) {\n return programmaticDensity;\n }\n\n // Check shorthand inputs\n if (this.fdCompact()) {\n return ContentDensityMode.COMPACT;\n }\n if (this.fdCondensed()) {\n return ContentDensityMode.CONDENSED;\n }\n if (this.fdCozy()) {\n return ContentDensityMode.COZY;\n }\n\n // Then check fdContentDensity input\n const val = this.fdContentDensity();\n if (val === '') {\n return ContentDensityGlobalKeyword;\n }\n if (!isContentDensityMode(val)) {\n if (isDevMode()) {\n console.warn(\n `The value \"${val}\" is not a valid content density mode. Using \"${ContentDensityGlobalKeyword}\" instead.`\n );\n }\n return ContentDensityGlobalKeyword;\n }\n return val as LocalContentDensityMode;\n });\n\n /**\n * Current density mode value.\n *\n * @deprecated Use densityMode() signal instead\n * @returns The current content density mode\n */\n get value(): LocalContentDensityMode {\n return this.densityMode();\n }\n\n /** @hidden */\n private readonly _elementRef = inject(ElementRef);\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /**\n * Internal signal for programmatic density updates.\n * Takes precedence over input bindings when set.\n */\n private readonly _programmaticDensity = signal<LocalContentDensityMode | null>(null);\n\n /** @hidden */\n constructor() {\n // Effect to apply UI5 attribute based on density mode\n effect(() => {\n this._applyUi5Attribute(this.densityMode());\n });\n }\n\n /**\n * Sets the content density programmatically.\n * Use this method when you need to update the density from code\n * (e.g., in host directives or dynamic scenarios).\n *\n * @param density The content density mode to set\n */\n setDensity(density: LocalContentDensityMode): void {\n this._programmaticDensity.set(density);\n }\n\n /**\n * Clears the programmatic density override.\n * After calling this, the density will be resolved from input bindings.\n */\n clearDensity(): void {\n this._programmaticDensity.set(null);\n }\n\n /**\n * Applies or removes the UI5 compact attribute based on density mode.\n * COMPACT and CONDENSED map to UI5 compact mode.\n * COZY and 'global' do not apply the attribute (UI5 defaults to cozy).\n * @hidden\n */\n private _applyUi5Attribute(density: LocalContentDensityMode): void {\n const nativeElement = this._elementRef?.nativeElement;\n // Only apply to actual HTML elements, not comment/text nodes\n if (!nativeElement || !this._renderer || !(nativeElement instanceof HTMLElement)) {\n return;\n }\n\n const isUi5Compact = density === ContentDensityMode.COMPACT || density === ContentDensityMode.CONDENSED;\n\n if (isUi5Compact) {\n this._renderer.setAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE, '');\n } else {\n this._renderer.removeAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE);\n }\n }\n}\n","import { Signal } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Abstract class for content density storage implementations.\n * The default implementation is MemoryContentDensityStorage.\n *\n * Provides a signal-based API for reactive content density tracking.\n *\n * @example\n * // Provide a custom storage implementation\n * providers: [\n * { provide: ContentDensityStorage, useClass: LocalContentDensityStorage }\n * ]\n */\nexport abstract class ContentDensityStorage {\n /**\n * Current content density as a readonly signal.\n * Read this signal to get the current density or react to changes.\n */\n abstract readonly contentDensity: Signal<ContentDensityMode>;\n\n /**\n * Updates the content density.\n * @param density The new content density mode\n */\n abstract setContentDensity(density: ContentDensityMode): void;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CONTENT_DENSITY_STORAGE_KEY = new InjectionToken<string>(\n 'Content density storage key for local storage or for url param',\n {\n factory: () => '__ContentDensity__'\n }\n);\n","import { InjectionToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const DEFAULT_CONTENT_DENSITY = new InjectionToken<ContentDensityMode>('Default global content density', {\n factory: () => ContentDensityMode.COZY\n});\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { LocalStorageService } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using browser localStorage.\n * Persists the content density setting across browser sessions.\n */\n@Injectable()\nexport class LocalContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n private readonly _storage = inject(LocalStorageService);\n\n constructor() {\n this._initialize();\n const storedDensity = this._storage.get(this._storageKey) || this._defaultContentDensity;\n this._contentDensity = signal<ContentDensityMode>(storedDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n }\n\n /**\n * Updates the content density and persists it to localStorage.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._storage.set(this._storageKey, density);\n this._contentDensity.set(density);\n }\n\n /** @hidden */\n private _initialize(): void {\n if (!this._storage.get(this._storageKey)) {\n this._storage.set(this._storageKey, this._defaultContentDensity);\n }\n }\n}\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using in-memory state.\n * The setting is lost when the application is refreshed.\n * This is the default storage implementation.\n */\n@Injectable()\nexport class MemoryContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n\n constructor() {\n const defaultDensity = inject(DEFAULT_CONTENT_DENSITY);\n this._contentDensity = signal<ContentDensityMode>(defaultDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n }\n\n /**\n * Updates the content density in memory.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._contentDensity.set(density);\n }\n}\n","import { DestroyRef, inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Content density storage implementation using URL query parameters.\n * Persists the content density setting in the URL, allowing it to be\n * shared via links and bookmarked.\n */\n@Injectable()\nexport class UrlContentDensityStorage implements ContentDensityStorage {\n /** Current content density as a readonly signal. */\n readonly contentDensity: ReturnType<WritableSignal<ContentDensityMode>['asReadonly']>;\n\n private readonly _contentDensity: WritableSignal<ContentDensityMode>;\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);\n private readonly _storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);\n private readonly _destroyRef = inject(DestroyRef);\n\n constructor() {\n this._contentDensity = signal<ContentDensityMode>(this._defaultContentDensity);\n this.contentDensity = this._contentDensity.asReadonly();\n this._initialize();\n }\n\n /**\n * Updates the content density and reflects it in the URL query parameters.\n * @param density The new content density mode\n */\n setContentDensity(density: ContentDensityMode): void {\n this._contentDensity.set(density);\n this._setUrlQueryParam(density);\n }\n\n /** @hidden */\n private _initialize(): void {\n // Subscribe to query param changes and update signal.\n // Automatically unsubscribes when the service is destroyed.\n this._activatedRoute.queryParams.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((queryParams) => {\n const density = queryParams[this._storageKey];\n if (density && density !== this._contentDensity()) {\n this._contentDensity.set(density);\n }\n });\n }\n\n /** @hidden */\n private _setUrlQueryParam(density: ContentDensityMode): void {\n const currentUrl = this._router.url;\n const [pathname, search] = currentUrl.split('?');\n const params = new URLSearchParams(search || '');\n params.delete(this._storageKey);\n params.set(this._storageKey, density);\n\n this._router.navigateByUrl(`${pathname}?${params.toString()}`);\n }\n}\n","import { inject, Injectable, Injector, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Service for managing global content density state.\n * Provides a signal-based API for reactive content density tracking.\n */\n@Injectable()\nexport class GlobalContentDensityService {\n /** Current content density as a readonly signal. */\n readonly currentDensitySignal: Signal<ContentDensityMode>;\n\n private readonly _storage = inject(ContentDensityStorage);\n private readonly _injector = inject(Injector);\n\n /**\n * Current content density value.\n *\n * @deprecated Use currentDensitySignal() instead\n * @returns The current content density mode\n */\n get currentContentDensity(): ContentDensityMode {\n return this.currentDensitySignal();\n }\n\n constructor() {\n this.currentDensitySignal = this._storage.contentDensity;\n }\n\n /**\n * Returns an observable that emits content density changes.\n *\n * @deprecated Use currentDensitySignal signal instead\n * @returns Observable of content density changes\n */\n contentDensityListener(): Observable<ContentDensityMode> {\n return toObservable(this._storage.contentDensity, { injector: this._injector });\n }\n\n /**\n * Updates the global content density.\n * @param density The new content density mode\n */\n updateContentDensity(density: ContentDensityMode): void {\n this._storage.setContentDensity(density);\n }\n}\n","import { DOCUMENT, Provider } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from './classes/abstract-content-density-storage';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { LocalContentDensityStorage } from './providers/local-content-density-storage';\nimport { MemoryContentDensityStorage } from './providers/memory-content-density-storage';\nimport { UrlContentDensityStorage } from './providers/url-content-density-storage';\nimport { GlobalContentDensityService } from './services/global-content-density.service';\nimport { CONTENT_DENSITY_STORAGE_KEY } from './tokens/content-density-storage-key.token';\nimport { DEFAULT_CONTENT_DENSITY } from './tokens/default-content-density.token';\nimport { ContentDensityMode } from './types/content-density.mode';\n\nfunction generateContentDensityStorage(config: ContentDensityModuleConfig): Provider {\n if (config.storage === 'localStorage') {\n return {\n provide: ContentDensityStorage,\n useClass: LocalContentDensityStorage\n };\n }\n if (config.storage === 'memory') {\n return {\n provide: ContentDensityStorage,\n useClass: MemoryContentDensityStorage\n };\n }\n if (config.storage === 'url') {\n return {\n provide: ContentDensityStorage,\n useClass: UrlContentDensityStorage,\n deps: [Router, ActivatedRoute, DEFAULT_CONTENT_DENSITY, CONTENT_DENSITY_STORAGE_KEY, DOCUMENT]\n };\n }\n return [];\n}\n\n/**\n * Provides content density services and configurations\n * @param config\n */\nexport function provideContentDensity(config?: ContentDensityModuleConfig): Provider[] {\n let storage: Provider;\n const conf: ContentDensityModuleConfig = config || { storage: 'memory' };\n\n if (typeof conf.storage === 'string') {\n storage = generateContentDensityStorage(conf);\n } else if (typeof conf.storage === 'object') {\n storage = conf.storage;\n } else {\n storage = {\n provide: ContentDensityStorage,\n useClass: MemoryContentDensityStorage\n };\n }\n return [\n {\n provide: DEFAULT_CONTENT_DENSITY,\n useValue: conf.defaultGlobalContentDensity || ContentDensityMode.COZY\n },\n {\n provide: CONTENT_DENSITY_STORAGE_KEY,\n useValue: (conf as any).storageKey || '__ContentDensity__'\n },\n GlobalContentDensityService,\n storage\n ];\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ContentDensityModuleConfig } from './content-density.types';\nimport { ContentDensityDirective } from './directives/content-density.directive';\nimport { provideContentDensity } from './provide-content-density';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [ContentDensityDirective],\n exports: [ContentDensityDirective]\n})\nexport class ContentDensityModule {\n /** Module with providers */\n static forRoot(config?: ContentDensityModuleConfig): ModuleWithProviders<ContentDensityModule> {\n return {\n ngModule: ContentDensityModule,\n providers: [provideContentDensity(config)]\n };\n }\n}\n","import { FactorySansProvider, ProviderToken } from '@angular/core';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Configuration for UI5 Web Components content density markers.\n * UI5 Web Components use `data-ui5-compact-size` attribute for compact mode.\n * Cozy is the default mode (no marker needed).\n */\nexport interface Ui5ContentDensityMarkers {\n /**\n * Whether to apply UI5 content density markers.\n * When enabled, `data-ui5-compact-size` attribute will be applied\n * for COMPACT and CONDENSED modes (UI5 only supports cozy/compact).\n * @default true\n */\n enabled: boolean;\n}\n\nexport class ContentDensityObserverSettings {\n /** Classes to be added to the element. */\n modifiers?: Partial<Record<ContentDensityMode, string>>;\n /** Supported content densities. */\n supportedContentDensity?: ContentDensityMode[];\n /** Default content density. */\n defaultContentDensity?: ContentDensityMode | ProviderToken<ContentDensityMode> | FactorySansProvider;\n /** Whether in debug mode. */\n debug?: boolean;\n /** Whether to always add class modifiers. Useful for components that are detached from its parent component. */\n alwaysAddModifiers?: boolean;\n /** Whether to force child components to restrict supported content density with current component's one. */\n restrictChildContentDensity?: boolean;\n /**\n * Configuration for UI5 Web Components content density markers.\n * When enabled, applies `data-ui5-compact-size` attribute for compact/condensed modes.\n */\n ui5Markers?: Ui5ContentDensityMarkers;\n}\n","import { computed, Signal } from '@angular/core';\nimport {\n ContentDensityDefaultKeyword,\n ContentDensityGlobalKeyword,\n LocalContentDensityMode\n} from '../content-density.types';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\n/**\n * Creates a computed signal that resolves the content density from multiple sources.\n *\n * Priority order:\n * 1. Parent content density observer (if restrictChildContentDensity is enabled)\n * 2. Content density directive\n * 3. Global content density service\n * 4. Default content density\n *\n * Special keywords are resolved:\n * - 'default' -> uses defaultContentDensity\n * - 'global' -> uses global service value\n */\nexport const getChangesSource = (params: {\n defaultContentDensity: ContentDensityMode;\n contentDensityDirective?: Signal<LocalContentDensityMode>;\n contentDensityService?: GlobalContentDensityService;\n parentContentDensityObserver?: Signal<ContentDensityMode>;\n}): Signal<ContentDensityMode> =>\n computed(() => {\n // Get the raw mode from the appropriate source (priority order)\n const rawMode: LocalContentDensityMode = params.parentContentDensityObserver\n ? params.parentContentDensityObserver()\n : params.contentDensityDirective\n ? params.contentDensityDirective()\n : (params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity);\n\n // Resolve special keywords\n if (rawMode === ContentDensityDefaultKeyword) {\n return params.defaultContentDensity;\n }\n if (rawMode === ContentDensityGlobalKeyword) {\n return params.contentDensityService?.currentDensitySignal() ?? params.defaultContentDensity;\n }\n\n return rawMode;\n });\n","import { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityMode } from '../types/content-density.mode';\n\nexport const defaultContentDensityObserverConfigs: Required<ContentDensityObserverSettings> = {\n modifiers: {\n [ContentDensityMode.COMPACT]: 'is-compact',\n [ContentDensityMode.COZY]: 'is-cozy',\n [ContentDensityMode.CONDENSED]: 'is-condensed'\n },\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],\n defaultContentDensity: ContentDensityMode.COZY,\n debug: false,\n alwaysAddModifiers: false,\n restrictChildContentDensity: false,\n ui5Markers: {\n enabled: true\n }\n};\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n FactorySansProvider,\n inject,\n Injectable,\n Injector,\n linkedSignal,\n Renderer2\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, Observer, Subscription } from 'rxjs';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserverTarget } from '../content-density.types';\nimport { getChangesSource } from '../helpers/get-changes-source.provider';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { ContentDensityMode } from '../types/content-density.mode';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\n\nconst isFactoryProvider = (obj: any): obj is FactorySansProvider => !!(obj && (obj as FactorySansProvider).useFactory);\n\nconst getDeps = (injector: Injector, defaultContentDensity: FactorySansProvider): Array<any> =>\n (defaultContentDensity.deps || []).map((dep): any => {\n if (Array.isArray(dep)) {\n let type;\n let flags = {};\n for (let index = 0; index < dep.length; index++) {\n const flag = dep[index]['__NG_DI_FLAG__'];\n if (typeof flag === 'number') {\n flags = { ...flags, flag };\n } else {\n type = dep[index];\n }\n }\n return injector.get(type, undefined, flags);\n }\n return injector.get(dep, undefined, {});\n });\n\nconst getDefaultContentDensity = (\n injector: Injector,\n configuration: Required<ContentDensityObserverSettings>\n): ContentDensityMode => {\n if (typeof configuration.defaultContentDensity === 'string') {\n return configuration.defaultContentDensity as ContentDensityMode;\n }\n if (isFactoryProvider(configuration.defaultContentDensity)) {\n const deps = getDeps(injector, configuration.defaultContentDensity);\n return configuration.defaultContentDensity.useFactory(...deps);\n }\n return injector.get(configuration.defaultContentDensity, undefined, undefined);\n};\n\nconst initialContentDensity = (\n injector: Injector,\n configuration?: ContentDensityObserverSettings\n): ContentDensityMode =>\n getDefaultContentDensity(injector, {\n ...defaultContentDensityObserverConfigs,\n ...(configuration || {})\n });\n\n/**\n * Service for observing and managing content density in components.\n *\n * Provides signal-based API for reactive content density tracking.\n * Uses linkedSignal (Angular 21+) for derived state with validation.\n */\n@Injectable()\nexport class ContentDensityObserver {\n /** Configuration for this observer */\n readonly config: ContentDensityObserverSettings;\n\n /**\n * Current content density as a readonly signal.\n * Uses linkedSignal internally for reactive updates with validation.\n */\n readonly contentDensity: ReturnType<\n ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n >;\n\n /** Whether content density is compact (signal) */\n readonly isCompactSignal: ReturnType<typeof computed<boolean>>;\n\n /** Whether content density is cozy (signal) */\n readonly isCozySignal: ReturnType<typeof computed<boolean>>;\n\n /** Whether content density is condensed (signal) */\n readonly isCondensedSignal: ReturnType<typeof computed<boolean>>;\n\n /**\n * Current content density signal\n * @deprecated Use contentDensity() instead\n */\n readonly contentDensity$: ReturnType<\n ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>['asReadonly']\n >;\n\n /**\n * Observable for compact state changes\n * @deprecated Use isCompactSignal signal instead\n */\n readonly isCompact$: Observable<boolean>;\n\n /**\n * Observable for cozy state changes\n * @deprecated Use isCozySignal signal instead\n */\n readonly isCozy$: Observable<boolean>;\n\n /**\n * Observable for condensed state changes\n * @deprecated Use isCondensedSignal signal instead\n */\n readonly isCondensed$: Observable<boolean>;\n\n /**\n * Observable of content density changes\n * @deprecated Use contentDensity signal instead\n */\n readonly contentDensity$$: Observable<ContentDensityMode>;\n\n /**\n * Internal linkedSignal for content density with validation.\n * linkedSignal (Angular 21+) automatically tracks source changes\n * and applies the computation (validation/fallback).\n */\n private readonly _contentDensity: ReturnType<typeof linkedSignal<ContentDensityMode, ContentDensityMode>>;\n\n private readonly _changesSource: ReturnType<typeof computed<ContentDensityMode>>;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n private readonly _alternativeTo = {\n [ContentDensityMode.COMPACT]: (): ContentDensityMode =>\n this._isSupported(ContentDensityMode.CONDENSED) ? ContentDensityMode.CONDENSED : ContentDensityMode.COZY,\n [ContentDensityMode.CONDENSED]: (): ContentDensityMode =>\n this._isSupported(ContentDensityMode.COMPACT) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY,\n [ContentDensityMode.COZY]: (): ContentDensityMode => ContentDensityMode.COZY // No alternative here, everyone should support it\n };\n\n private _globalContentDensityService = inject(GlobalContentDensityService, {\n optional: true\n });\n\n private _contentDensityDirective = inject(CONTENT_DENSITY_DIRECTIVE, {\n optional: true\n });\n\n private _parentContentDensityObserver = inject(ContentDensityObserver, {\n optional: true,\n skipSelf: true\n });\n\n private _renderer: Renderer2 | null = inject(Renderer2);\n\n private _elementRef: ElementRef<any> | null = inject(ElementRef);\n\n private _elements = [this._elementRef];\n\n /**\n * Current content density value\n * @deprecated Use contentDensity() signal instead\n */\n get value(): ContentDensityMode {\n return this._contentDensity();\n }\n\n /**\n * Whether content density is compact\n * @deprecated Use isCompactSignal() signal instead\n */\n get isCompact(): boolean {\n return this.isCompactSignal();\n }\n\n /**\n * Whether content density is cozy\n * @deprecated Use isCozySignal() signal instead\n */\n get isCozy(): boolean {\n return this.isCozySignal();\n }\n\n /**\n * Whether content density is condensed\n * @deprecated Use isCondensedSignal() signal instead\n */\n get isCondensed(): boolean {\n return this.isCondensedSignal();\n }\n\n constructor(_injector: Injector, _providedConfig?: ContentDensityObserverSettings) {\n // Set up config first (needed for validation)\n this.config = {\n ...defaultContentDensityObserverConfigs,\n ...(_providedConfig || {})\n };\n\n // Resolve initial density\n const resolvedInitialDensity = initialContentDensity(_injector, _providedConfig);\n\n // Get the changes source as a computed signal\n this._changesSource = getChangesSource({\n defaultContentDensity: resolvedInitialDensity,\n contentDensityDirective: this._contentDensityDirective?.densityMode,\n contentDensityService: this._globalContentDensityService ?? undefined,\n parentContentDensityObserver: this._parentContentDensityObserver?.config?.restrictChildContentDensity\n ? this._parentContentDensityObserver.contentDensity\n : undefined\n });\n\n // Use linkedSignal for derived state with validation (Angular 21+ pattern)\n // linkedSignal automatically updates when source changes, applying the computation\n this._contentDensity = linkedSignal({\n source: this._changesSource,\n computation: (source) => {\n // Guard against undefined/null source values\n if (!source || typeof source !== 'string') {\n return ContentDensityMode.COZY; // Safe fallback to default\n }\n return this._validateAndFallback(source as ContentDensityMode);\n }\n });\n\n // Public readonly signal\n this.contentDensity = this._contentDensity.asReadonly();\n\n // Computed boolean signals\n this.isCompactSignal = computed(() => this._contentDensity() === ContentDensityMode.COMPACT);\n this.isCozySignal = computed(() => this._contentDensity() === ContentDensityMode.COZY);\n this.isCondensedSignal = computed(() => this._contentDensity() === ContentDensityMode.CONDENSED);\n\n // Backward compatible signal aliases\n this.contentDensity$ = this.contentDensity;\n\n // Backward compatible observables\n this.isCompact$ = toObservable(this.isCompactSignal, { injector: _injector });\n this.isCozy$ = toObservable(this.isCozySignal, { injector: _injector });\n this.isCondensed$ = toObservable(this.isCondensedSignal, { injector: _injector });\n this.contentDensity$$ = toObservable(this._contentDensity, { injector: _injector });\n\n // Effect purely for DOM side effects (CSS classes and UI5 attribute)\n // This follows Angular 21 best practices: effects should only do side effects, not update signals\n effect(() => {\n // Read the signal to track changes\n const density = this._contentDensity();\n // Apply DOM changes (side effect)\n this._applyClass(density);\n });\n\n // Apply initial CSS class after first render (zoneless-compatible)\n afterNextRender(() => {\n this._applyClass(this._contentDensity());\n });\n\n // Register cleanup on destroy\n this._destroyRef.onDestroy(() => {\n this._cleanup();\n if (this.config.debug) {\n console.warn('ContentDensityObserver: destroyed');\n }\n });\n }\n\n /**\n * Add consumers to observe content density changes\n * @deprecated Use signal bindings instead\n */\n consume(...consumers: ContentDensityObserverTarget[]): void {\n this._elements.concat(...consumers.map((c) => c.elementRef));\n }\n\n /**\n * Completes the observer and cleans up resources\n * @deprecated Cleanup is automatic via DestroyRef\n */\n complete(): void {\n this._cleanup();\n }\n\n /**\n * Returns an observable of content density changes\n * @deprecated Use contentDensity signal instead\n */\n asObservable(): Observable<ContentDensityMode> {\n return this.contentDensity$$;\n }\n\n /**\n * Subscribe to content density changes.\n * @deprecated Use contentDensity signal with effect() instead.\n * This method exists for backward compatibility.\n */\n subscribe(observer?: Partial<Observer<ContentDensityMode>>): Subscription {\n return this.contentDensity$$.subscribe(observer);\n }\n\n /**\n * Remove a consumer from the observer\n * @deprecated Use signal bindings instead\n */\n removeConsumer(consumer: ContentDensityObserverTarget): void {\n this._elements.splice(this._elements.indexOf(consumer.elementRef), 1);\n }\n\n private _validateAndFallback(density: ContentDensityMode): ContentDensityMode {\n if (this.config.debug) {\n console.warn(`ContentDensityObserver: density changed to ${density}`);\n }\n if (!this._isSupported(density)) {\n try {\n if (this.config.debug) {\n console.warn(\n `ContentDensityObserver: ${density} is not supported. Failing back to alternative one.`\n );\n }\n return this._alternativeTo[density]();\n } catch {\n throw new Error(`ContentDensityObserver: density ${density} is not supported`);\n }\n }\n return density;\n }\n\n private _cleanup(): void {\n this._parentContentDensityObserver = null;\n this._contentDensityDirective = null;\n this._globalContentDensityService = null;\n this._elementRef = null;\n this._renderer = null;\n this._elements = [];\n }\n\n private _applyClass(currentDensity?: ContentDensityMode): void {\n if (!this.config?.modifiers) {\n return;\n }\n const modifiers = this.config.modifiers;\n const density = currentDensity ?? this._contentDensity();\n\n this._elements.forEach((element) => {\n Object.values(modifiers).forEach((className) => {\n this._renderer?.removeClass(element?.nativeElement, className);\n });\n\n this._applyUi5Marker(element?.nativeElement, density);\n\n const modifierClass = modifiers[density];\n if (modifierClass) {\n this._renderer?.addClass(element?.nativeElement, modifierClass);\n }\n });\n }\n\n /**\n * Apply or remove UI5 Web Components compact marker.\n * UI5 Web Components only support cozy (default) and compact modes.\n * Both COMPACT and CONDENSED fundamental-ngx modes map to UI5 compact.\n */\n private _applyUi5Marker(nativeElement: HTMLElement | undefined, currentDensity: ContentDensityMode): void {\n // Only apply to actual HTML elements, not comment/text nodes\n if (\n !this.config.ui5Markers?.enabled ||\n !nativeElement ||\n !this._renderer ||\n !(nativeElement instanceof HTMLElement)\n ) {\n return;\n }\n\n const ui5CompactAttribute = 'data-ui5-compact-size';\n\n // UI5 only has cozy (default) and compact modes\n // Map: COMPACT -> compact, CONDENSED -> compact, COZY -> remove attribute\n const isUi5Compact =\n currentDensity === ContentDensityMode.COMPACT || currentDensity === ContentDensityMode.CONDENSED;\n\n if (isUi5Compact) {\n this._renderer.setAttribute(nativeElement, ui5CompactAttribute, '');\n } else {\n this._renderer.removeAttribute(nativeElement, ui5CompactAttribute);\n }\n }\n\n private _isSupported(density: ContentDensityMode): boolean {\n return this.config.supportedContentDensity?.includes(density) ?? false;\n }\n}\n","import { Provider } from '@angular/core';\nimport { consumerProviderFactory } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\nimport { ContentDensityObserver } from '../services/content-density-observer.service';\n\n/**\n * Creates provider for ContentDensityObserver\n */\nexport function contentDensityObserverProviders(params?: ContentDensityObserverSettings): Provider[] {\n return [consumerProviderFactory(ContentDensityObserver, params)];\n}\n","import { Provider, signal } from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { CONTENT_DENSITY_DIRECTIVE, ContentDensityDirectiveRef } from '../tokens/content-density-directive';\n\n/** @hidden */\nexport function mockedLocalContentDensityDirective(\n defaultValue: LocalContentDensityMode = ContentDensityGlobalKeyword\n): { contentDensityDirectiveProvider: Provider; setContentDensity: (cd: LocalContentDensityMode) => void } {\n const densitySignal = signal<LocalContentDensityMode>(defaultValue);\n\n const mockDirective: ContentDensityDirectiveRef = {\n densityMode: densitySignal.asReadonly(),\n get value(): LocalContentDensityMode {\n return densitySignal();\n }\n };\n\n return {\n contentDensityDirectiveProvider: {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useValue: mockDirective\n },\n setContentDensity: (cd: LocalContentDensityMode) => densitySignal.set(cd)\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ContentDensityObserverSettings"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.64.1",
3
+ "version": "0.64.2-rc.1",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-update": {
6
6
  "packageGroupName": "@fundamental-ngx/core",
@@ -37,8 +37,8 @@
37
37
  "@angular/forms": "^22.0.0",
38
38
  "@angular/platform-browser": "^22.0.0",
39
39
  "@angular/router": "^22.0.0",
40
- "@fundamental-ngx/cdk": "0.64.1",
41
- "@fundamental-ngx/i18n": "0.64.1",
40
+ "@fundamental-ngx/cdk": "0.64.2-rc.1",
41
+ "@fundamental-ngx/i18n": "0.64.2-rc.1",
42
42
  "@sap-theming/theming-base-content": "^11.36.0",
43
43
  "fundamental-styles": "0.41.8",
44
44
  "rxjs": "^7.8.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "core-schematics",
3
- "version": "0.64.1",
3
+ "version": "0.64.2-rc.1",
4
4
  "types": "./ng-add/index.d.ts",
5
5
  "main": "./ng-add/index.js",
6
6
  "type": "commonjs"