@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.
- package/README.md +1 -1
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +26 -27
- package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +22 -25
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +31 -35
- package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs +43 -52
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +43 -67
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +41 -50
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +14 -18
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +23 -34
- package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs +37 -56
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-calendar.mjs +62 -87
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs +188 -264
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-carousel.mjs +26 -35
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-checkbox.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-combobox.mjs +18 -19
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-content-density.mjs +36 -46
- package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +13 -13
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +14 -15
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime.mjs +31 -32
- package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +89 -116
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +77 -100
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
- package/fesm2022/fundamental-ngx-core-facets.mjs +20 -24
- package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +17 -18
- package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +24 -24
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs +16 -16
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +15 -17
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-form.mjs +74 -74
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-formatted-text.mjs +12 -17
- package/fesm2022/fundamental-ngx-core-formatted-text.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs +13 -19
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-grid-list.mjs +51 -56
- package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-icon.mjs +20 -33
- package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +31 -42
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs +9 -11
- package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-info-label.mjs +18 -29
- package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs +25 -35
- package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +21 -21
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs +27 -40
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs +37 -41
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +19 -24
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +91 -100
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +101 -125
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +38 -39
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-page.mjs +19 -19
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +55 -79
- package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-toast.mjs +17 -17
- package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +20 -21
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-mobile-mode.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +66 -98
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +21 -27
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +43 -46
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs +132 -178
- package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-attribute.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-object-identifier.mjs +17 -24
- package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-marker.mjs +24 -41
- package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-number.mjs +21 -33
- package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +26 -41
- package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +32 -33
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-pagination.mjs +10 -10
- package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-panel.mjs +35 -51
- package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +164 -267
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +32 -46
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-quick-view.mjs +44 -47
- package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-radio.mjs +8 -8
- package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +39 -61
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +11 -12
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-scroll-spy.mjs +12 -17
- package/fesm2022/fundamental-ngx-core-scroll-spy.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-scrollbar.mjs +12 -14
- package/fesm2022/fundamental-ngx-core-scrollbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +8 -9
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs +21 -22
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-settings.mjs +60 -70
- package/fesm2022/fundamental-ngx-core-settings.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shared.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +63 -77
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs +13 -13
- package/fesm2022/fundamental-ngx-core-skeleton.mjs +16 -24
- package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-slider.mjs +13 -15
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +10 -10
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs +35 -62
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-step-input.mjs +9 -11
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +8 -8
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +50 -51
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +55 -56
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-text.mjs +19 -29
- package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-theming.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-tile.mjs +136 -171
- package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time-picker.mjs +8 -9
- package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +14 -17
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-timeline.mjs +43 -43
- package/fesm2022/fundamental-ngx-core-title.mjs +10 -12
- package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +25 -34
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +32 -35
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs +36 -41
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +57 -43
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-user-menu.mjs +84 -108
- package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +17 -20
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs +32 -41
- package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core.mjs +4 -4
- package/package.json +10 -11
- package/schematics/add-styles/index.js +3 -3
- package/schematics/add-styles/index.js.map +1 -1
- package/schematics/add-theming/index.js +1 -1
- package/schematics/add-theming/index.js.map +1 -1
- package/schematics/tsconfig.json +6 -12
- package/schematics/tsconfig.spec.json +0 -2
- package/schematics/utils/calls-providers-function.js +1 -34
- package/schematics/utils/calls-providers-function.js.map +1 -1
- package/schematics/utils/ng-module-utils.js +1 -34
- package/schematics/utils/ng-module-utils.js.map +1 -1
- package/types/fundamental-ngx-core-avatar-group-legacy.d.ts +0 -1
- package/types/fundamental-ngx-core-carousel.d.ts +0 -2
- package/types/fundamental-ngx-core-list.d.ts +2 -2
- package/types/fundamental-ngx-core-menu.d.ts +4 -4
- package/types/fundamental-ngx-core-notification.d.ts +2 -0
- package/types/fundamental-ngx-core-popover.d.ts +6 -8
- package/types/fundamental-ngx-core-product-switch.d.ts +3 -6
- package/types/fundamental-ngx-core-upload-collection.d.ts +2 -0
- package/types/fundamental-ngx-core-wizard.d.ts +1 -4
- 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('',
|
|
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" } :
|
|
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" } :
|
|
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" } :
|
|
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
|
-
},
|
|
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,
|
|
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: "
|
|
179
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
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: "
|
|
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,
|
|
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: "
|
|
256
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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,
|
|
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: "
|
|
282
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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,
|
|
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: "
|
|
334
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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: "
|
|
376
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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: "
|
|
450
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
451
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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" } :
|
|
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,
|
|
634
|
-
...(ngDevMode ? [{ debugName: "
|
|
635
|
-
this.
|
|
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: "
|
|
783
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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,
|
|
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":";;;;;;AAKO,MAAM,2BAA2B,GAAG;AACpC,MAAM,4BAA4B,GAAG;;ICNhC;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACvB,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;ACGvB,MAAM,SAAS,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AAC5E,MAAM,WAAW,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AAC9E,MAAM,MAAM,GAAG,CAAC,OAAY,KAAc,OAAO,KAAK,kBAAkB,CAAC;AACzE,MAAM,oBAAoB,GAAG,CAAC,OAAY,KAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK;;MCOpE,yBAAyB,GAAG,IAAI,cAAc,CAA6B,yBAAyB;;ACIjH;AACA,MAAM,qBAAqB,GAAG,uBAAuB;AAErD;;;;;;;;;;;;;;;AAeG;MAcU,uBAAuB,CAAA;AAgFhC;;;;;AAKG;AACH,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;;AAcA,IAAA,WAAA,GAAA;AArGA;;;;;;AAMG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAyD,EAAE,4DAAC;AAE7F;;;;;;;AAOG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAElE;;;;;;;AAOG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEpE;;;;;;;AAOG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/D;;;;;AAKG;AACM,QAAA,IAAA,CAAA,WAAW,GAAyD,QAAQ,CAAC,MAAK;;AAEvF,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,IAAI,mBAAmB,KAAK,IAAI,EAAE;AAC9B,gBAAA,OAAO,mBAAmB;YAC9B;;AAGA,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,OAAO,kBAAkB,CAAC,OAAO;YACrC;AACA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACpB,OAAO,kBAAkB,CAAC,SAAS;YACvC;AACA,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACf,OAAO,kBAAkB,CAAC,IAAI;YAClC;;AAGA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,gBAAA,OAAO,2BAA2B;YACtC;AACA,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gBAC5B,IAAI,SAAS,EAAE,EAAE;oBACb,OAAO,CAAC,IAAI,CACR,CAAA,WAAA,EAAc,GAAG,CAAA,8CAAA,EAAiD,2BAA2B,CAAA,UAAA,CAAY,CAC5G;gBACL;AACA,gBAAA,OAAO,2BAA2B;YACtC;AACA,YAAA,OAAO,GAA8B;AACzC,QAAA,CAAC,uDAAC;;AAae,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAEhC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C;;;AAGG;AACc,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAiC,IAAI,gEAAC;;QAKhF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,OAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1C;AAEA;;;AAGG;IACH,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;IACvC;AAEA;;;;;AAKG;AACK,IAAA,kBAAkB,CAAC,OAAgC,EAAA;AACvD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;;AAErD,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,aAAa,YAAY,WAAW,CAAC,EAAE;YAC9E;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,OAAO,KAAK,kBAAkB,CAAC,OAAO,IAAI,OAAO,KAAK,kBAAkB,CAAC,SAAS;QAEvG,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,EAAE,EAAE,CAAC;QACzE;aAAO;YACH,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,qBAAqB,CAAC;QACxE;IACJ;8GApJS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2UAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPrB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;AACxD;AACJ,SAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,CAAA;;;AAGuE,oFAAA,CAAA;AACjF,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B;AACxD;AACJ;AACJ,iBAAA;;;AC9CD;;;;;;;;;;;AAWG;MACmB,qBAAqB,CAAA;AAY1C;;ACzBM,MAAM,2BAA2B,GAAG,IAAI,cAAc,CACzD,gEAAgE,EAChE;AACI,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA,CACJ;;ACJM,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAqB,gCAAgC,EAAE;AAC5G,IAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrC,CAAA,CAAC;;ACEF;;;AAGG;MAEU,0BAA0B,CAAA;AASnC,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAGnD,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,sBAAsB;AACxF,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,aAAa,2DAAC;QAChE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC3D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;;IAGQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;QACpE;IACJ;8GA9BS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACND;;;;AAIG;MAEU,2BAA2B,CAAA;AAMpC,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,cAAc,2DAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC3D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACrC;8GAlBS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACFD;;;;AAIG;MAEU,wBAAwB,CAAA;AAWjC,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAG7C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAqB,IAAI,CAAC,sBAAsB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;QAC9E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;QACvD,IAAI,CAAC,WAAW,EAAE;IACtB;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACnC;;IAGQ,WAAW,GAAA;;;QAGf,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,KAAI;YAClG,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;AAC/C,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;YACrC;AACJ,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,iBAAiB,CAAC,OAA2B,EAAA;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;AACnC,QAAA,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,IAAI,EAAE,CAAC;AAChD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAErC,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;IAClE;8GA/CS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACPD;;;AAGG;MAEU,2BAA2B,CAAA;AAOpC;;;;;AAKG;AACH,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACtC;AAEA,IAAA,WAAA,GAAA;AAbiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAazC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc;IAC5D;AAEA;;;;;AAKG;IACH,sBAAsB,GAAA;AAClB,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACnF;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,OAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC5C;8GArCS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACED,SAAS,6BAA6B,CAAC,MAAkC,EAAA;AACrE,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE;QACnC,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;AACA,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7B,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;AACA,IAAA,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;QAC1B,OAAO;AACH,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,QAAQ;SAChG;IACL;AACA,IAAA,OAAO,EAAE;AACb;AAEA;;;AAGG;AACG,SAAU,qBAAqB,CAAC,MAAmC,EAAA;AACrE,IAAA,IAAI,OAAiB;IACrB,MAAM,IAAI,GAA+B,MAAM,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;AAExE,IAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AAClC,QAAA,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC;IACjD;AAAO,SAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACzC,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO;IAC1B;SAAO;AACH,QAAA,OAAO,GAAG;AACN,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;SACb;IACL;IACA,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,2BAA2B,IAAI,kBAAkB,CAAC;AACpE,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,QAAQ,EAAG,IAAY,CAAC,UAAU,IAAI;AACzC,SAAA;QACD,2BAA2B;QAC3B;KACH;AACL;;AC5DA;;;AAGG;MAKU,oBAAoB,CAAA;;IAE7B,OAAO,OAAO,CAAC,MAAmC,EAAA;QAC9C,OAAO;AACH,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;SAC5C;IACL;8GAPS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,OAAA,EAAA,CAHnB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CACvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;+GAExB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,OAAO,EAAE,CAAC,uBAAuB;AACpC,iBAAA;;;MCMY,8BAA8B,CAAA;AAkB1C;;AC3BD;;;;;;;;;;;;AAYG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAKhC,KACG,QAAQ,CAAC,MAAK;;AAEV,IAAA,MAAM,OAAO,GAA4B,MAAM,CAAC;AAC5C,UAAE,MAAM,CAAC,4BAA4B;UACnC,MAAM,CAAC;AACP,cAAE,MAAM,CAAC,uBAAuB;AAChC,eAAG,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,IAAI,MAAM,CAAC,qBAAqB,CAAC;;AAG9F,IAAA,IAAI,OAAO,KAAK,4BAA4B,EAAE;QAC1C,OAAO,MAAM,CAAC,qBAAqB;IACvC;AACA,IAAA,IAAI,OAAO,KAAK,2BAA2B,EAAE;QACzC,OAAO,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,IAAI,MAAM,CAAC,qBAAqB;IAC/F;AAEA,IAAA,OAAO,OAAO;AAClB,CAAC,CAAC;;AC1CC,MAAM,oCAAoC,GAA6C;AAC1F,IAAA,SAAS,EAAE;AACP,QAAA,CAAC,kBAAkB,CAAC,OAAO,GAAG,YAAY;AAC1C,QAAA,CAAC,kBAAkB,CAAC,IAAI,GAAG,SAAS;AACpC,QAAA,CAAC,kBAAkB,CAAC,SAAS,GAAG;AACnC,KAAA;IACD,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC;IAC9E,qBAAqB,EAAE,kBAAkB,CAAC,IAAI;AAC9C,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,2BAA2B,EAAE,KAAK;AAClC,IAAA,UAAU,EAAE;AACR,QAAA,OAAO,EAAE;AACZ;;;ACOL,MAAM,iBAAiB,GAAG,CAAC,GAAQ,KAAiC,CAAC,EAAE,GAAG,IAAK,GAA2B,CAAC,UAAU,CAAC;AAEtH,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAE,qBAA0C,KAC3E,CAAC,qBAAqB,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KAAS;AAChD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpB,QAAA,IAAI,IAAI;QACR,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC;AACzC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE;YAC9B;iBAAO;AACH,gBAAA,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;YACrB;QACJ;QACA,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;IAC/C;IACA,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,CAC7B,QAAkB,EAClB,aAAuD,KACnC;AACpB,IAAA,IAAI,OAAO,aAAa,CAAC,qBAAqB,KAAK,QAAQ,EAAE;QACzD,OAAO,aAAa,CAAC,qBAA2C;IACpE;AACA,IAAA,IAAI,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC;QACnE,OAAO,aAAa,CAAC,qBAAqB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAClE;AACA,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,EAAE,SAAS,EAAE,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,qBAAqB,GAAG,CAC1B,QAAkB,EAClB,aAA8C,KAC1B;AACpB,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,qBAAqB;IAC/G,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,YAAY;IACvB;IACA,OAAO,wBAAwB,CAAC,QAAQ,EAAE;AACtC,QAAA,GAAG,oCAAoC;AACvC,QAAA,IAAI,aAAa,IAAI,EAAE;AAC1B,KAAA,CAAC;AACN,CAAC;AAED;;;;;AAKG;MAEU,sBAAsB,CAAA;AA2F/B;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IACjC;AAEA;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IACjC;AAEA;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;AAEA;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACnC;IAEA,WAAA,CAAY,SAAmB,EAAE,eAAgD,EAAA;AA7DhE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,QAAA,IAAA,CAAA,cAAc,GAAG;YAC9B,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAC1B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC,SAAS,GAAG,kBAAkB,CAAC,IAAI;YAC5G,CAAC,kBAAkB,CAAC,SAAS,GAAG,MAC5B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,IAAI;AACxG,YAAA,CAAC,kBAAkB,CAAC,IAAI,GAAG,MAA0B,kBAAkB,CAAC,IAAI;SAC/E;AAEO,QAAA,IAAA,CAAA,4BAA4B,GAAG,MAAM,CAAC,2BAA2B,EAAE;AACvE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,yBAAyB,EAAE;AACjE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CAAC,sBAAsB,EAAE;AACnE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,SAAS,GAAqB,MAAM,CAAC,SAAS,CAAC;AAE/C,QAAA,IAAA,CAAA,WAAW,GAA2B,MAAM,CAAC,UAAU,CAAC;AAExD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;;QAoClC,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,oCAAoC;YACvC,IAAI,IAAI,CAAC,6BAA6B,EAAE,MAAM,IAAI,EAAE,CAAC;AACrD,YAAA,IAAI,eAAe,IAAI,EAAE;SAC5B;;QAGD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,SAAS,EAAE,eAAe,CAAC;;AAGhF,QAAA,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;AACnC,YAAA,qBAAqB,EAAE,sBAAsB;AAC7C,YAAA,uBAAuB,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW;AACnE,YAAA,qBAAqB,EAAE,IAAI,CAAC,4BAA4B,IAAI,SAAS;AACrE,YAAA,4BAA4B,EAAE,IAAI,CAAC,MAAM,CAAC;AACtC,kBAAE,IAAI,CAAC,6BAA6B,EAAE;AACtC,kBAAE;AACT,SAAA,CAAC;;;QAIF,IAAI,CAAC,eAAe,GAAG,YAAY,2DAC/B,MAAM,EAAE,IAAI,CAAC,cAAc;AAC3B,YAAA,WAAW,EAAE,CAAC,MAAM,KAAI;;gBAEpB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACvC,oBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC;gBACnC;AACA,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAA4B,CAAC;AAClE,YAAA,CAAC,GACH;;QAGF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;;AAGvD,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,OAAO,2DAAC;AAC5F,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,IAAI,wDAAC;AACtF,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,kBAAkB,CAAC,SAAS,6DAAC;;AAGhG,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc;;AAG1C,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjF,QAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;;;QAInF,MAAM,CAAC,MAAK;;AAER,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;;AAEtC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC7B,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC5B,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;IACH,OAAO,CAAC,GAAG,SAAyC,EAAA;QAChD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE;AAEA;;;AAGG;IACH,QAAQ,GAAA;QACJ,IAAI,CAAC,QAAQ,EAAE;IACnB;AAEA;;;AAGG;IACH,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,QAAgD,EAAA;QACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpD;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAsC,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACzE;AAEQ,IAAA,oBAAoB,CAAC,OAA2B,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,OAAO,CAAA,CAAE,CAAC;QACzE;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,IAAI;AACA,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,oBAAA,OAAO,CAAC,IAAI,CACR,2BAA2B,OAAO,CAAA,mDAAA,CAAqD,CAC1F;gBACL;AACA,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YACzC;AAAE,YAAA,MAAM;AACJ,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAA,iBAAA,CAAmB,CAAC;YAClF;QACJ;AACA,QAAA,OAAO,OAAO;IAClB;IAEQ,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEQ,IAAA,WAAW,CAAC,cAAmC,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;YACzB;QACJ;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QACvC,MAAM,OAAO,GAAG,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE;QAExD,MAAM,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,EAAE,KAAK,KAAK,OAAO;QAEvF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC3C,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC;AAClE,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,CAAC;;YAGhF,IAAI,yBAAyB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAC9D;YACJ;AACA,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;YACxC,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC;YACnE;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACK,IAAA,eAAe,CACnB,aAAsC,EACtC,cAAkC,EAClC,yBAAkC,EAAA;;AAGlC,QAAA,IACI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO;AAChC,YAAA,CAAC,aAAa;YACd,CAAC,IAAI,CAAC,SAAS;AACf,YAAA,EAAE,aAAa,YAAY,WAAW,CAAC,EACzC;YACE;QACJ;QAEA,MAAM,mBAAmB,GAAG,uBAAuB;;QAGnD,IAAI,yBAAyB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAC9D,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,CAAC;YAClE;QACJ;;;AAIA,QAAA,MAAM,YAAY,GACd,cAAc,KAAK,kBAAkB,CAAC,OAAO,IAAI,cAAc,KAAK,kBAAkB,CAAC,SAAS;QAEpG,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,CAAC;QACvE;aAAO;YACH,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,mBAAmB,CAAC;QACtE;IACJ;AAEQ,IAAA,YAAY,CAAC,OAA2B,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK;IAC1E;8GAhVS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,8BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACxED;;AAEG;AACG,SAAU,+BAA+B,CAAC,MAAuC,EAAA;IACnF,OAAO,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AACpE;;ACNA;AACM,SAAU,kCAAkC,CAC9C,YAAA,GAAwC,2BAA2B,EAAA;AAEnE,IAAA,MAAM,aAAa,GAAG,MAAM,CAA0B,YAAY,yDAAC;AAEnE,IAAA,MAAM,aAAa,GAA+B;AAC9C,QAAA,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE;AACvC,QAAA,IAAI,KAAK,GAAA;YACL,OAAO,aAAa,EAAE;QAC1B;KACH;IAED,OAAO;AACH,QAAA,+BAA+B,EAAE;AAC7B,YAAA,OAAO,EAAE,yBAAyB;AAClC,YAAA,QAAQ,EAAE;AACb,SAAA;QACD,iBAAiB,EAAE,CAAC,EAA2B,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE;KAC3E;AACL;;ACxBA;;AAEG;;;;"}
|