@fundamental-ngx/core 0.63.2-rc.7 → 0.63.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/fundamental-ngx-core-action-bar.mjs +26 -27
  3. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  4. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +22 -25
  5. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  6. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +31 -35
  7. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
  8. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +43 -52
  9. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  10. package/fesm2022/fundamental-ngx-core-avatar.mjs +43 -67
  11. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  12. package/fesm2022/fundamental-ngx-core-bar.mjs +41 -50
  13. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  14. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +14 -18
  15. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  16. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +23 -34
  17. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  18. package/fesm2022/fundamental-ngx-core-button.mjs +37 -56
  19. package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
  20. package/fesm2022/fundamental-ngx-core-calendar.mjs +62 -87
  21. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  22. package/fesm2022/fundamental-ngx-core-card.mjs +188 -264
  23. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  24. package/fesm2022/fundamental-ngx-core-carousel.mjs +26 -35
  25. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  26. package/fesm2022/fundamental-ngx-core-checkbox.mjs +7 -7
  27. package/fesm2022/fundamental-ngx-core-combobox.mjs +18 -19
  28. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-content-density.mjs +36 -46
  30. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-date-picker.mjs +13 -13
  32. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +14 -15
  34. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-datetime.mjs +31 -32
  36. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-dialog.mjs +89 -116
  38. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +77 -100
  40. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
  42. package/fesm2022/fundamental-ngx-core-facets.mjs +20 -24
  43. package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
  44. package/fesm2022/fundamental-ngx-core-feed-input.mjs +17 -18
  45. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  46. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +24 -24
  47. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  48. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +16 -16
  49. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +15 -17
  50. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
  52. package/fesm2022/fundamental-ngx-core-form.mjs +74 -74
  53. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  54. package/fesm2022/fundamental-ngx-core-formatted-text.mjs +12 -17
  55. package/fesm2022/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  56. package/fesm2022/fundamental-ngx-core-generic-tag.mjs +13 -19
  57. package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
  58. package/fesm2022/fundamental-ngx-core-grid-list.mjs +51 -56
  59. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  60. package/fesm2022/fundamental-ngx-core-icon.mjs +20 -33
  61. package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
  62. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +31 -42
  63. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  64. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs +9 -11
  65. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs.map +1 -1
  66. package/fesm2022/fundamental-ngx-core-info-label.mjs +18 -29
  67. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  68. package/fesm2022/fundamental-ngx-core-inline-help.mjs +25 -35
  69. package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
  70. package/fesm2022/fundamental-ngx-core-input-group.mjs +21 -21
  71. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  72. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +27 -40
  73. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  74. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +37 -41
  75. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  76. package/fesm2022/fundamental-ngx-core-link.mjs +19 -24
  77. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  78. package/fesm2022/fundamental-ngx-core-list.mjs +91 -100
  79. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  80. package/fesm2022/fundamental-ngx-core-menu.mjs +101 -125
  81. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  82. package/fesm2022/fundamental-ngx-core-message-box.mjs +38 -39
  83. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  84. package/fesm2022/fundamental-ngx-core-message-page.mjs +19 -19
  85. package/fesm2022/fundamental-ngx-core-message-strip.mjs +55 -79
  86. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-message-toast.mjs +17 -17
  88. package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +20 -21
  90. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs +3 -3
  92. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +66 -98
  93. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  94. package/fesm2022/fundamental-ngx-core-multi-input.mjs +21 -27
  95. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  96. package/fesm2022/fundamental-ngx-core-nested-list.mjs +43 -46
  97. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  98. package/fesm2022/fundamental-ngx-core-notification.mjs +132 -178
  99. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  100. package/fesm2022/fundamental-ngx-core-object-attribute.mjs +7 -7
  101. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +17 -24
  102. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-object-marker.mjs +24 -41
  104. package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-object-number.mjs +21 -33
  106. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-object-status.mjs +26 -41
  108. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +32 -33
  110. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-pagination.mjs +10 -10
  112. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-panel.mjs +35 -51
  114. package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-popover.mjs +164 -267
  116. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-product-switch.mjs +32 -46
  118. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +7 -7
  120. package/fesm2022/fundamental-ngx-core-quick-view.mjs +44 -47
  121. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  122. package/fesm2022/fundamental-ngx-core-radio.mjs +8 -8
  123. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  124. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +39 -61
  125. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  126. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +11 -12
  127. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  128. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs +12 -17
  129. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs.map +1 -1
  130. package/fesm2022/fundamental-ngx-core-scrollbar.mjs +12 -14
  131. package/fesm2022/fundamental-ngx-core-scrollbar.mjs.map +1 -1
  132. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +8 -9
  133. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  134. package/fesm2022/fundamental-ngx-core-select.mjs +21 -22
  135. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  136. package/fesm2022/fundamental-ngx-core-settings.mjs +60 -70
  137. package/fesm2022/fundamental-ngx-core-settings.mjs.map +1 -1
  138. package/fesm2022/fundamental-ngx-core-shared.mjs +3 -3
  139. package/fesm2022/fundamental-ngx-core-shellbar.mjs +63 -77
  140. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +13 -13
  142. package/fesm2022/fundamental-ngx-core-skeleton.mjs +16 -24
  143. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  144. package/fesm2022/fundamental-ngx-core-slider.mjs +13 -15
  145. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  146. package/fesm2022/fundamental-ngx-core-split-button.mjs +10 -10
  147. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +35 -62
  148. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-step-input.mjs +9 -11
  150. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-switch.mjs +8 -8
  152. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-table.mjs +50 -51
  154. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-tabs.mjs +55 -56
  156. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-text.mjs +19 -29
  158. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-theming.mjs +7 -7
  160. package/fesm2022/fundamental-ngx-core-tile.mjs +136 -171
  161. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  162. package/fesm2022/fundamental-ngx-core-time-picker.mjs +8 -9
  163. package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
  164. package/fesm2022/fundamental-ngx-core-time.mjs +14 -17
  165. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  166. package/fesm2022/fundamental-ngx-core-timeline.mjs +43 -43
  167. package/fesm2022/fundamental-ngx-core-title.mjs +10 -12
  168. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  169. package/fesm2022/fundamental-ngx-core-token.mjs +25 -34
  170. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  171. package/fesm2022/fundamental-ngx-core-toolbar.mjs +32 -35
  172. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  173. package/fesm2022/fundamental-ngx-core-tree.mjs +36 -41
  174. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  175. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +57 -43
  176. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  177. package/fesm2022/fundamental-ngx-core-user-menu.mjs +84 -108
  178. package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
  179. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +17 -20
  180. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  181. package/fesm2022/fundamental-ngx-core-wizard.mjs +32 -41
  182. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  183. package/fesm2022/fundamental-ngx-core.mjs +4 -4
  184. package/package.json +10 -11
  185. package/schematics/add-styles/index.js +3 -3
  186. package/schematics/add-styles/index.js.map +1 -1
  187. package/schematics/add-theming/index.js +1 -1
  188. package/schematics/add-theming/index.js.map +1 -1
  189. package/schematics/tsconfig.json +6 -12
  190. package/schematics/tsconfig.spec.json +0 -2
  191. package/schematics/utils/calls-providers-function.js +1 -34
  192. package/schematics/utils/calls-providers-function.js.map +1 -1
  193. package/schematics/utils/ng-module-utils.js +1 -34
  194. package/schematics/utils/ng-module-utils.js.map +1 -1
  195. package/types/fundamental-ngx-core-avatar-group-legacy.d.ts +0 -1
  196. package/types/fundamental-ngx-core-carousel.d.ts +0 -2
  197. package/types/fundamental-ngx-core-list.d.ts +2 -2
  198. package/types/fundamental-ngx-core-menu.d.ts +4 -4
  199. package/types/fundamental-ngx-core-notification.d.ts +2 -0
  200. package/types/fundamental-ngx-core-popover.d.ts +6 -8
  201. package/types/fundamental-ngx-core-product-switch.d.ts +3 -6
  202. package/types/fundamental-ngx-core-upload-collection.d.ts +2 -0
  203. package/types/fundamental-ngx-core-wizard.d.ts +1 -4
  204. package/schematics/package.json +0 -7
@@ -58,8 +58,7 @@ class ContentDensityDirective {
58
58
  * @example
59
59
  * <fd-button [fdContentDensity]="'compact'">Button</fd-button>
60
60
  */
61
- this.fdContentDensity = input('', /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "fdContentDensity" }] : /* istanbul ignore next */ []));
61
+ this.fdContentDensity = input('', ...(ngDevMode ? [{ debugName: "fdContentDensity" }] : []));
63
62
  /**
64
63
  * Shorthand for setting compact density.
65
64
  * Equivalent to `[fdContentDensity]="'compact'"`.
@@ -68,7 +67,7 @@ class ContentDensityDirective {
68
67
  * <fd-button fdCompact>Button</fd-button>
69
68
  * <fd-button [fdCompact]="isCompact">Button</fd-button>
70
69
  */
71
- this.fdCompact = input(false, { ...(ngDevMode ? { debugName: "fdCompact" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
70
+ this.fdCompact = input(false, { ...(ngDevMode ? { debugName: "fdCompact" } : {}), transform: booleanAttribute });
72
71
  /**
73
72
  * Shorthand for setting condensed density.
74
73
  * Equivalent to `[fdContentDensity]="'condensed'"`.
@@ -77,7 +76,7 @@ class ContentDensityDirective {
77
76
  * <fd-button fdCondensed>Button</fd-button>
78
77
  * <fd-button [fdCondensed]="isCondensed">Button</fd-button>
79
78
  */
80
- this.fdCondensed = input(false, { ...(ngDevMode ? { debugName: "fdCondensed" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
79
+ this.fdCondensed = input(false, { ...(ngDevMode ? { debugName: "fdCondensed" } : {}), transform: booleanAttribute });
81
80
  /**
82
81
  * Shorthand for setting cozy density.
83
82
  * Equivalent to `[fdContentDensity]="'cozy'"`.
@@ -86,7 +85,7 @@ class ContentDensityDirective {
86
85
  * <fd-button fdCozy>Button</fd-button>
87
86
  * <fd-button [fdCozy]="isCozy">Button</fd-button>
88
87
  */
89
- this.fdCozy = input(false, { ...(ngDevMode ? { debugName: "fdCozy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
88
+ this.fdCozy = input(false, { ...(ngDevMode ? { debugName: "fdCozy" } : {}), transform: booleanAttribute });
90
89
  /**
91
90
  * Current content density mode as a computed signal.
92
91
  * Resolves the density based on shorthand inputs or fdContentDensity value.
@@ -121,8 +120,7 @@ class ContentDensityDirective {
121
120
  return ContentDensityGlobalKeyword;
122
121
  }
123
122
  return val;
124
- }, /* @ts-ignore */
125
- ...(ngDevMode ? [{ debugName: "densityMode" }] : /* istanbul ignore next */ []));
123
+ }, ...(ngDevMode ? [{ debugName: "densityMode" }] : []));
126
124
  /** @hidden */
127
125
  this._elementRef = inject(ElementRef);
128
126
  /** @hidden */
@@ -131,8 +129,7 @@ class ContentDensityDirective {
131
129
  * Internal signal for programmatic density updates.
132
130
  * Takes precedence over input bindings when set.
133
131
  */
134
- this._programmaticDensity = signal(null, /* @ts-ignore */
135
- ...(ngDevMode ? [{ debugName: "_programmaticDensity" }] : /* istanbul ignore next */ []));
132
+ this._programmaticDensity = signal(null, ...(ngDevMode ? [{ debugName: "_programmaticDensity" }] : []));
136
133
  // Effect to apply UI5 attribute based on density mode
137
134
  effect(() => {
138
135
  this._applyUi5Attribute(this.densityMode());
@@ -175,15 +172,15 @@ class ContentDensityDirective {
175
172
  this._renderer.removeAttribute(nativeElement, UI5_COMPACT_ATTRIBUTE);
176
173
  }
177
174
  }
178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
179
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: ContentDensityDirective, isStandalone: true, 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])", inputs: { fdContentDensity: { classPropertyName: "fdContentDensity", publicName: "fdContentDensity", isSignal: true, isRequired: false, transformFunction: null }, fdCompact: { classPropertyName: "fdCompact", publicName: "fdCompact", isSignal: true, isRequired: false, transformFunction: null }, fdCondensed: { classPropertyName: "fdCondensed", publicName: "fdCondensed", isSignal: true, isRequired: false, transformFunction: null }, fdCozy: { classPropertyName: "fdCozy", publicName: "fdCozy", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
176
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: ContentDensityDirective, isStandalone: true, 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])", inputs: { fdContentDensity: { classPropertyName: "fdContentDensity", publicName: "fdContentDensity", isSignal: true, isRequired: false, transformFunction: null }, fdCompact: { classPropertyName: "fdCompact", publicName: "fdCompact", isSignal: true, isRequired: false, transformFunction: null }, fdCondensed: { classPropertyName: "fdCondensed", publicName: "fdCondensed", isSignal: true, isRequired: false, transformFunction: null }, fdCozy: { classPropertyName: "fdCozy", publicName: "fdCozy", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
180
177
  {
181
178
  provide: CONTENT_DENSITY_DIRECTIVE,
182
179
  useExisting: forwardRef(() => ContentDensityDirective)
183
180
  }
184
181
  ], exportAs: ["fdContentDensity"], ngImport: i0 }); }
185
182
  }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityDirective, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityDirective, decorators: [{
187
184
  type: Directive,
188
185
  args: [{
189
186
  selector: `[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]),
@@ -234,8 +231,7 @@ class LocalContentDensityStorage {
234
231
  this._storage = inject(LocalStorageService);
235
232
  this._initialize();
236
233
  const storedDensity = this._storage.get(this._storageKey) || this._defaultContentDensity;
237
- this._contentDensity = signal(storedDensity, /* @ts-ignore */
238
- ...(ngDevMode ? [{ debugName: "_contentDensity" }] : /* istanbul ignore next */ []));
234
+ this._contentDensity = signal(storedDensity, ...(ngDevMode ? [{ debugName: "_contentDensity" }] : []));
239
235
  this.contentDensity = this._contentDensity.asReadonly();
240
236
  }
241
237
  /**
@@ -252,10 +248,10 @@ class LocalContentDensityStorage {
252
248
  this._storage.set(this._storageKey, this._defaultContentDensity);
253
249
  }
254
250
  }
255
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LocalContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
256
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LocalContentDensityStorage }); }
251
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: LocalContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
252
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: LocalContentDensityStorage }); }
257
253
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: LocalContentDensityStorage, decorators: [{
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: LocalContentDensityStorage, decorators: [{
259
255
  type: Injectable
260
256
  }], ctorParameters: () => [] });
261
257
 
@@ -267,8 +263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
267
263
  class MemoryContentDensityStorage {
268
264
  constructor() {
269
265
  const defaultDensity = inject(DEFAULT_CONTENT_DENSITY);
270
- this._contentDensity = signal(defaultDensity, /* @ts-ignore */
271
- ...(ngDevMode ? [{ debugName: "_contentDensity" }] : /* istanbul ignore next */ []));
266
+ this._contentDensity = signal(defaultDensity, ...(ngDevMode ? [{ debugName: "_contentDensity" }] : []));
272
267
  this.contentDensity = this._contentDensity.asReadonly();
273
268
  }
274
269
  /**
@@ -278,10 +273,10 @@ class MemoryContentDensityStorage {
278
273
  setContentDensity(density) {
279
274
  this._contentDensity.set(density);
280
275
  }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MemoryContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
282
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MemoryContentDensityStorage }); }
276
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: MemoryContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
277
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: MemoryContentDensityStorage }); }
283
278
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MemoryContentDensityStorage, decorators: [{
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: MemoryContentDensityStorage, decorators: [{
285
280
  type: Injectable
286
281
  }], ctorParameters: () => [] });
287
282
 
@@ -297,8 +292,7 @@ class UrlContentDensityStorage {
297
292
  this._defaultContentDensity = inject(DEFAULT_CONTENT_DENSITY);
298
293
  this._storageKey = inject(CONTENT_DENSITY_STORAGE_KEY);
299
294
  this._destroyRef = inject(DestroyRef);
300
- this._contentDensity = signal(this._defaultContentDensity, /* @ts-ignore */
301
- ...(ngDevMode ? [{ debugName: "_contentDensity" }] : /* istanbul ignore next */ []));
295
+ this._contentDensity = signal(this._defaultContentDensity, ...(ngDevMode ? [{ debugName: "_contentDensity" }] : []));
302
296
  this.contentDensity = this._contentDensity.asReadonly();
303
297
  this._initialize();
304
298
  }
@@ -330,10 +324,10 @@ class UrlContentDensityStorage {
330
324
  params.set(this._storageKey, density);
331
325
  this._router.navigateByUrl(`${pathname}?${params.toString()}`);
332
326
  }
333
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UrlContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
334
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UrlContentDensityStorage }); }
327
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: UrlContentDensityStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
328
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: UrlContentDensityStorage }); }
335
329
  }
336
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UrlContentDensityStorage, decorators: [{
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: UrlContentDensityStorage, decorators: [{
337
331
  type: Injectable
338
332
  }], ctorParameters: () => [] });
339
333
 
@@ -372,10 +366,10 @@ class GlobalContentDensityService {
372
366
  updateContentDensity(density) {
373
367
  this._storage.setContentDensity(density);
374
368
  }
375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: GlobalContentDensityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
376
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: GlobalContentDensityService }); }
369
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: GlobalContentDensityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
370
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: GlobalContentDensityService }); }
377
371
  }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: GlobalContentDensityService, decorators: [{
372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: GlobalContentDensityService, decorators: [{
379
373
  type: Injectable
380
374
  }], ctorParameters: () => [] });
381
375
 
@@ -446,11 +440,11 @@ class ContentDensityModule {
446
440
  providers: [provideContentDensity(config)]
447
441
  };
448
442
  }
449
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
450
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityModule, imports: [ContentDensityDirective], exports: [ContentDensityDirective] }); }
451
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityModule }); }
443
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
444
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityModule, imports: [ContentDensityDirective], exports: [ContentDensityDirective] }); }
445
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityModule }); }
452
446
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityModule, decorators: [{
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityModule, decorators: [{
454
448
  type: NgModule,
455
449
  args: [{
456
450
  imports: [ContentDensityDirective],
@@ -619,7 +613,7 @@ class ContentDensityObserver {
619
613
  });
620
614
  // Use linkedSignal for derived state with validation (Angular 21+ pattern)
621
615
  // linkedSignal automatically updates when source changes, applying the computation
622
- this._contentDensity = linkedSignal({ ...(ngDevMode ? { debugName: "_contentDensity" } : /* istanbul ignore next */ {}), source: this._changesSource,
616
+ this._contentDensity = linkedSignal({ ...(ngDevMode ? { debugName: "_contentDensity" } : {}), source: this._changesSource,
623
617
  computation: (source) => {
624
618
  // Guard against undefined/null source values
625
619
  if (!source || typeof source !== 'string') {
@@ -630,12 +624,9 @@ class ContentDensityObserver {
630
624
  // Public readonly signal
631
625
  this.contentDensity = this._contentDensity.asReadonly();
632
626
  // Computed boolean signals
633
- this.isCompactSignal = computed(() => this._contentDensity() === ContentDensityMode.COMPACT, /* @ts-ignore */
634
- ...(ngDevMode ? [{ debugName: "isCompactSignal" }] : /* istanbul ignore next */ []));
635
- this.isCozySignal = computed(() => this._contentDensity() === ContentDensityMode.COZY, /* @ts-ignore */
636
- ...(ngDevMode ? [{ debugName: "isCozySignal" }] : /* istanbul ignore next */ []));
637
- this.isCondensedSignal = computed(() => this._contentDensity() === ContentDensityMode.CONDENSED, /* @ts-ignore */
638
- ...(ngDevMode ? [{ debugName: "isCondensedSignal" }] : /* istanbul ignore next */ []));
627
+ this.isCompactSignal = computed(() => this._contentDensity() === ContentDensityMode.COMPACT, ...(ngDevMode ? [{ debugName: "isCompactSignal" }] : []));
628
+ this.isCozySignal = computed(() => this._contentDensity() === ContentDensityMode.COZY, ...(ngDevMode ? [{ debugName: "isCozySignal" }] : []));
629
+ this.isCondensedSignal = computed(() => this._contentDensity() === ContentDensityMode.CONDENSED, ...(ngDevMode ? [{ debugName: "isCondensedSignal" }] : []));
639
630
  // Backward compatible signal aliases
640
631
  this.contentDensity$ = this.contentDensity;
641
632
  // Backward compatible observables
@@ -779,10 +770,10 @@ class ContentDensityObserver {
779
770
  _isSupported(density) {
780
771
  return this.config.supportedContentDensity?.includes(density) ?? false;
781
772
  }
782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityObserver, deps: [{ token: i0.Injector }, { token: ContentDensityObserverSettings }], target: i0.ɵɵFactoryTarget.Injectable }); }
783
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityObserver }); }
773
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityObserver, deps: [{ token: i0.Injector }, { token: ContentDensityObserverSettings }], target: i0.ɵɵFactoryTarget.Injectable }); }
774
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityObserver }); }
784
775
  }
785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ContentDensityObserver, decorators: [{
776
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ContentDensityObserver, decorators: [{
786
777
  type: Injectable
787
778
  }], ctorParameters: () => [{ type: i0.Injector }, { type: ContentDensityObserverSettings }] });
788
779
 
@@ -795,8 +786,7 @@ function contentDensityObserverProviders(params) {
795
786
 
796
787
  /** @hidden */
797
788
  function mockedLocalContentDensityDirective(defaultValue = ContentDensityGlobalKeyword) {
798
- const densitySignal = signal(defaultValue, /* @ts-ignore */
799
- ...(ngDevMode ? [{ debugName: "densitySignal" }] : /* istanbul ignore next */ []));
789
+ const densitySignal = signal(defaultValue, ...(ngDevMode ? [{ debugName: "densitySignal" }] : []));
800
790
  const mockDirective = {
801
791
  densityMode: densitySignal.asReadonly(),
802
792
  get value() {
@@ -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 { 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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"}