@fundamental-ngx/core 0.35.5-rc.6 → 0.36.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/content-density/classes/content-density-observer.settings.d.ts +3 -1
  16. package/content-density/classes/deprecated-content-density.directive.d.ts +20 -0
  17. package/content-density/content-density.types.d.ts +2 -1
  18. package/content-density/esm2020/classes/content-density-observer.settings.mjs +1 -1
  19. package/content-density/esm2020/classes/deprecated-content-density.directive.mjs +44 -0
  20. package/content-density/esm2020/content-density.types.mjs +2 -1
  21. package/content-density/esm2020/directives/content-density.directive.mjs +11 -3
  22. package/content-density/esm2020/helpers/density-type-checkers.mjs +3 -2
  23. package/content-density/esm2020/helpers/get-changes-source.provider.mjs +8 -5
  24. package/content-density/esm2020/public_api.mjs +3 -1
  25. package/content-density/esm2020/services/content-density-observer.service.mjs +58 -6
  26. package/content-density/esm2020/variables/default-content-density-consumer-config.mjs +3 -2
  27. package/content-density/fesm2015/fundamental-ngx-core-content-density.mjs +119 -17
  28. package/content-density/fesm2015/fundamental-ngx-core-content-density.mjs.map +1 -1
  29. package/content-density/fesm2020/fundamental-ngx-core-content-density.mjs +121 -16
  30. package/content-density/fesm2020/fundamental-ngx-core-content-density.mjs.map +1 -1
  31. package/content-density/helpers/density-type-checkers.d.ts +4 -4
  32. package/content-density/package.json +3 -3
  33. package/content-density/public_api.d.ts +2 -0
  34. package/content-density/services/content-density-observer.service.d.ts +1 -1
  35. package/date-picker/package.json +1 -1
  36. package/datetime/package.json +1 -1
  37. package/datetime-picker/package.json +1 -1
  38. package/dialog/dialog-service/dialog.service.d.ts +6 -4
  39. package/dialog/esm2020/dialog-header/dialog-header.component.mjs +5 -4
  40. package/dialog/esm2020/dialog-service/dialog.service.mjs +12 -6
  41. package/dialog/fesm2015/fundamental-ngx-core-dialog.mjs +18 -12
  42. package/dialog/fesm2015/fundamental-ngx-core-dialog.mjs.map +1 -1
  43. package/dialog/fesm2020/fundamental-ngx-core-dialog.mjs +18 -12
  44. package/dialog/fesm2020/fundamental-ngx-core-dialog.mjs.map +1 -1
  45. package/dialog/package.json +1 -1
  46. package/dynamic-page/package.json +1 -1
  47. package/dynamic-side-content/package.json +1 -1
  48. package/esm2020/content-density/classes/content-density-observer.settings.mjs +1 -1
  49. package/esm2020/content-density/classes/deprecated-content-density.directive.mjs +44 -0
  50. package/esm2020/content-density/content-density.types.mjs +2 -1
  51. package/esm2020/content-density/directives/content-density.directive.mjs +11 -3
  52. package/esm2020/content-density/helpers/density-type-checkers.mjs +3 -2
  53. package/esm2020/content-density/helpers/get-changes-source.provider.mjs +8 -5
  54. package/esm2020/content-density/public_api.mjs +3 -1
  55. package/esm2020/content-density/services/content-density-observer.service.mjs +58 -6
  56. package/esm2020/content-density/variables/default-content-density-consumer-config.mjs +3 -2
  57. package/esm2020/dialog/dialog-header/dialog-header.component.mjs +5 -4
  58. package/esm2020/dialog/dialog-service/dialog.service.mjs +12 -6
  59. package/esm2020/switch/switch.component.mjs +5 -3
  60. package/esm2020/utils/functions/module-deprecations-provider.mjs +8 -1
  61. package/esm2020/wizard/wizard.component.mjs +4 -2
  62. package/facets/package.json +1 -1
  63. package/feed-input/package.json +1 -1
  64. package/feed-list-item/package.json +1 -1
  65. package/fesm2015/fundamental-ngx-core-content-density.mjs +119 -17
  66. package/fesm2015/fundamental-ngx-core-content-density.mjs.map +1 -1
  67. package/fesm2015/fundamental-ngx-core-dialog.mjs +18 -12
  68. package/fesm2015/fundamental-ngx-core-dialog.mjs.map +1 -1
  69. package/fesm2015/fundamental-ngx-core-switch.mjs +4 -2
  70. package/fesm2015/fundamental-ngx-core-switch.mjs.map +1 -1
  71. package/fesm2015/fundamental-ngx-core-utils.mjs +4 -1
  72. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  73. package/fesm2015/fundamental-ngx-core-wizard.mjs +3 -1
  74. package/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  75. package/fesm2020/fundamental-ngx-core-content-density.mjs +121 -16
  76. package/fesm2020/fundamental-ngx-core-content-density.mjs.map +1 -1
  77. package/fesm2020/fundamental-ngx-core-dialog.mjs +18 -12
  78. package/fesm2020/fundamental-ngx-core-dialog.mjs.map +1 -1
  79. package/fesm2020/fundamental-ngx-core-switch.mjs +4 -2
  80. package/fesm2020/fundamental-ngx-core-switch.mjs.map +1 -1
  81. package/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
  82. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  83. package/fesm2020/fundamental-ngx-core-wizard.mjs +3 -1
  84. package/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  85. package/file-uploader/package.json +1 -1
  86. package/fixed-card-layout/package.json +1 -1
  87. package/flexible-column-layout/package.json +1 -1
  88. package/form/package.json +1 -1
  89. package/formatted-text/package.json +1 -1
  90. package/grid-list/package.json +1 -1
  91. package/icon/package.json +1 -1
  92. package/illustrated-message/package.json +1 -1
  93. package/infinite-scroll/package.json +1 -1
  94. package/info-label/package.json +1 -1
  95. package/inline-help/package.json +1 -1
  96. package/input-group/package.json +1 -1
  97. package/layout-grid/package.json +1 -1
  98. package/layout-panel/package.json +1 -1
  99. package/link/package.json +1 -1
  100. package/list/package.json +1 -1
  101. package/menu/package.json +1 -1
  102. package/message-box/package.json +1 -1
  103. package/message-strip/package.json +1 -1
  104. package/message-toast/package.json +1 -1
  105. package/micro-process-flow/package.json +1 -1
  106. package/mobile-mode/package.json +1 -1
  107. package/multi-input/package.json +1 -1
  108. package/nested-list/package.json +1 -1
  109. package/notification/package.json +1 -1
  110. package/object-identifier/package.json +1 -1
  111. package/object-marker/package.json +1 -1
  112. package/object-number/package.json +1 -1
  113. package/object-status/package.json +1 -1
  114. package/overflow-layout/package.json +13 -13
  115. package/package.json +1 -1
  116. package/pagination/package.json +1 -1
  117. package/panel/package.json +1 -1
  118. package/popover/package.json +1 -1
  119. package/product-switch/package.json +1 -1
  120. package/progress-indicator/package.json +1 -1
  121. package/quick-view/package.json +1 -1
  122. package/radio/package.json +1 -1
  123. package/rating-indicator/package.json +1 -1
  124. package/resizable-card-layout/package.json +1 -1
  125. package/scroll-spy/package.json +1 -1
  126. package/scrollbar/package.json +1 -1
  127. package/segmented-button/package.json +1 -1
  128. package/select/package.json +1 -1
  129. package/shared/package.json +1 -1
  130. package/shellbar/package.json +1 -1
  131. package/side-navigation/package.json +1 -1
  132. package/slider/package.json +1 -1
  133. package/split-button/package.json +1 -1
  134. package/splitter/package.json +1 -1
  135. package/status-indicator/package.json +1 -1
  136. package/step-input/package.json +1 -1
  137. package/switch/esm2020/switch.component.mjs +5 -3
  138. package/switch/fesm2015/fundamental-ngx-core-switch.mjs +4 -2
  139. package/switch/fesm2015/fundamental-ngx-core-switch.mjs.map +1 -1
  140. package/switch/fesm2020/fundamental-ngx-core-switch.mjs +4 -2
  141. package/switch/fesm2020/fundamental-ngx-core-switch.mjs.map +1 -1
  142. package/switch/package.json +1 -1
  143. package/table/package.json +1 -1
  144. package/tabs/package.json +1 -1
  145. package/text/package.json +1 -1
  146. package/theming/package.json +1 -1
  147. package/tile/package.json +1 -1
  148. package/time/package.json +1 -1
  149. package/time-picker/package.json +1 -1
  150. package/timeline/package.json +1 -1
  151. package/title/package.json +1 -1
  152. package/token/package.json +1 -1
  153. package/toolbar/package.json +1 -1
  154. package/tree/package.json +1 -1
  155. package/upload-collection/package.json +1 -1
  156. package/utils/esm2020/functions/module-deprecations-provider.mjs +8 -1
  157. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +4 -1
  158. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  159. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
  160. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  161. package/utils/functions/module-deprecations-provider.d.ts +2 -1
  162. package/utils/package.json +1 -1
  163. package/vertical-navigation/package.json +1 -1
  164. package/wizard/esm2020/wizard.component.mjs +4 -2
  165. package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs +3 -1
  166. package/wizard/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  167. package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs +3 -1
  168. package/wizard/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  169. package/wizard/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, forwardRef, Directive, Input, Injectable, Inject, NgModule, InjectFlags, ChangeDetectorRef, ElementRef, isDevMode } from '@angular/core';
2
+ import { InjectionToken, isDevMode, forwardRef, Directive, Input, Injectable, Inject, NgModule, InjectFlags, ChangeDetectorRef, ElementRef } from '@angular/core';
3
3
  import { DOCUMENT, CommonModule } from '@angular/common';
4
4
  import * as i1$1 from '@angular/router';
5
5
  import { Router, ActivatedRoute } from '@angular/router';
@@ -10,6 +10,7 @@ import { ContentDensityService, DestroyedService, consumerProviderFactory } from
10
10
  import { map } from 'rxjs/operators';
11
11
 
12
12
  const ContentDensityGlobalKeyword = 'global';
13
+ const ContentDensityDefaultKeyword = 'default';
13
14
  var ContentDensityMode;
14
15
  (function (ContentDensityMode) {
15
16
  ContentDensityMode["COZY"] = "cozy";
@@ -19,6 +20,11 @@ var ContentDensityMode;
19
20
 
20
21
  const CONTENT_DENSITY_DIRECTIVE = new InjectionToken('ContentDensityDirective');
21
22
 
23
+ const isCompact = (density) => density === ContentDensityMode.COMPACT;
24
+ const isCondensed = (density) => density === ContentDensityMode.CONDENSED;
25
+ const isCozy = (density) => density === ContentDensityMode.COZY;
26
+ const isContentDensityMode = (density) => isCompact(density) || isCondensed(density) || isCozy(density) || density === ContentDensityGlobalKeyword;
27
+
22
28
  /**
23
29
  * Directive to control the content density of the elements.
24
30
  * This Directive is used in density controllers and consumers
@@ -32,7 +38,14 @@ class ContentDensityDirective extends BehaviorSubject {
32
38
  * Update the content density of the element on the fly
33
39
  */
34
40
  set fdContentDensity(val) {
35
- this.next(val ? val : ContentDensityGlobalKeyword);
41
+ if (!isContentDensityMode(val)) {
42
+ if (isDevMode() && val !== '') {
43
+ console.log(`The value "${val}" is not a valid content density mode.
44
+ Using "${ContentDensityGlobalKeyword}" instead.`);
45
+ }
46
+ val = ContentDensityGlobalKeyword;
47
+ }
48
+ this.next(val);
36
49
  }
37
50
  /**
38
51
  * This input is basically syntax sugar, for not writing fdContentDensity="compact",
@@ -277,10 +290,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
277
290
  }] }];
278
291
  } });
279
292
 
280
- const isCompact = (density) => density === ContentDensityMode.COMPACT;
281
- const isCondensed = (density) => density === ContentDensityMode.CONDENSED;
282
- const isCozy = (density) => density === ContentDensityMode.COZY;
283
-
284
293
  /**
285
294
  * Temporary replacement for ContentDensityService
286
295
  */
@@ -395,17 +404,21 @@ const getChangesSource$ = (params) => {
395
404
  : of(params.defaultContentDensity);
396
405
  const changesSource$ = params.contentDensityDirective ? params.contentDensityDirective : serviceValue$;
397
406
  return changesSource$.pipe(switchMap((mode) => {
398
- if (mode !== ContentDensityGlobalKeyword) {
399
- return of(mode);
407
+ if (mode === ContentDensityDefaultKeyword) {
408
+ return of(params.defaultContentDensity);
409
+ }
410
+ if (mode === ContentDensityGlobalKeyword) {
411
+ return serviceValue$;
400
412
  }
401
- return serviceValue$;
413
+ return of(mode);
402
414
  }));
403
415
  };
404
416
 
405
417
  const defaultContentDensityObserverConfigs = {
406
418
  modifiers: {},
407
419
  supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],
408
- defaultContentDensity: ContentDensityMode.COZY
420
+ defaultContentDensity: ContentDensityMode.COZY,
421
+ debug: false
409
422
  };
410
423
 
411
424
  function contentDensityCallbackFactory(consumerConfig) {
@@ -431,12 +444,46 @@ function contentDensityCallbackFactory(consumerConfig) {
431
444
  class ContentDensityObserverSettings {
432
445
  }
433
446
 
447
+ const isFactoryProvider = (obj) => !!(obj && obj.useFactory);
448
+ const getDeps = (injector, defaultContentDensity) => (defaultContentDensity.deps || []).map((dep) => {
449
+ if (Array.isArray(dep)) {
450
+ let type;
451
+ let flags = InjectFlags.Default;
452
+ for (let index = 0; index < dep.length; index++) {
453
+ const flag = dep[index]['__NG_DI_FLAG__'];
454
+ if (typeof flag === 'number') {
455
+ // eslint-disable-next-line no-bitwise
456
+ flags |= flag;
457
+ }
458
+ else {
459
+ type = dep[index];
460
+ }
461
+ }
462
+ return injector.get(type, undefined, flags);
463
+ }
464
+ return injector.get(dep, undefined, InjectFlags.Default);
465
+ });
466
+ const getDefaultContentDensity = (injector, configuration) => {
467
+ if (typeof configuration.defaultContentDensity === 'string') {
468
+ return configuration.defaultContentDensity;
469
+ }
470
+ if (isFactoryProvider(configuration.defaultContentDensity)) {
471
+ const deps = getDeps(injector, configuration.defaultContentDensity);
472
+ return configuration.defaultContentDensity.useFactory(...deps);
473
+ }
474
+ return injector.get(configuration.defaultContentDensity, undefined, undefined);
475
+ };
476
+ const initialContentDensity = (injector, configuration) => {
477
+ var _a;
478
+ const serviceValue = (_a = injector.get(GlobalContentDensityService, null, InjectFlags.Optional)) === null || _a === void 0 ? void 0 : _a.currentContentDensity;
479
+ if (serviceValue) {
480
+ return serviceValue;
481
+ }
482
+ return getDefaultContentDensity(injector, Object.assign(Object.assign({}, defaultContentDensityObserverConfigs), (configuration || {})));
483
+ };
434
484
  class ContentDensityObserver extends BehaviorSubject {
435
485
  constructor(_injector, _providedConfig) {
436
- var _a;
437
- super(((_a = _injector.get(GlobalContentDensityService, null, InjectFlags.Optional)) === null || _a === void 0 ? void 0 : _a.currentContentDensity) ||
438
- (_providedConfig === null || _providedConfig === void 0 ? void 0 : _providedConfig.defaultContentDensity) ||
439
- defaultContentDensityObserverConfigs.defaultContentDensity);
486
+ super(initialContentDensity(_injector, _providedConfig));
440
487
  this._injector = _injector;
441
488
  this._providedConfig = _providedConfig;
442
489
  /** @hidden */
@@ -447,25 +494,40 @@ class ContentDensityObserver extends BehaviorSubject {
447
494
  [ContentDensityMode.CONDENSED]: () => this.isSupported(ContentDensityMode.COMPACT) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY,
448
495
  [ContentDensityMode.COZY]: () => ContentDensityMode.COZY // No alternative here, everyone should support it
449
496
  };
497
+ if (_providedConfig === null || _providedConfig === void 0 ? void 0 : _providedConfig.debug) {
498
+ console.log({ initialContentDensity: initialContentDensity(_injector, _providedConfig) });
499
+ }
450
500
  this.configuration = Object.assign(Object.assign({}, defaultContentDensityObserverConfigs), (_providedConfig || {}));
451
501
  this.destroy$ = this._injector.get(DestroyedService);
452
502
  this.changeDetectorRef = this._injector.get(ChangeDetectorRef);
453
503
  this.contentDensityDirective = this._injector.get(CONTENT_DENSITY_DIRECTIVE, undefined, InjectFlags.Optional);
454
504
  this.contentDensityService = this._injector.get(GlobalContentDensityService, undefined, InjectFlags.Optional);
455
505
  const changesSource$ = getChangesSource$({
456
- defaultContentDensity: this.configuration.defaultContentDensity,
506
+ defaultContentDensity: getDefaultContentDensity(this._injector, this.configuration),
457
507
  contentDensityDirective: this.contentDensityDirective,
458
508
  contentDensityService: this.contentDensityService
459
509
  }).pipe(map$1((density) => {
510
+ if (this.configuration.debug) {
511
+ console.log(`ContentDensityObserver: density changed to ${density}`);
512
+ }
460
513
  if (!this.isSupported(density)) {
461
- return this.alternativeTo[density]();
514
+ try {
515
+ return this.alternativeTo[density]();
516
+ }
517
+ catch (e) {
518
+ throw new Error(`ContentDensityObserver: density ${density} is not supported`);
519
+ }
462
520
  }
463
521
  return density;
464
522
  }), distinctUntilChanged(), takeUntil(this.destroy$));
465
523
  changesSource$
466
524
  .pipe(tap((density) => this._callCallbacks(density)), finalize(() => this.complete()))
467
525
  .subscribe((density) => {
526
+ if (this.configuration.debug) {
527
+ console.log(`ContentDensityObserver: density emmited ${density}`);
528
+ }
468
529
  this.next(density);
530
+ this.changeDetectorRef.markForCheck();
469
531
  });
470
532
  this.isCompact$ = changesSource$.pipe(map$1(isCompact));
471
533
  this.isCozy$ = changesSource$.pipe(map$1(isCozy));
@@ -653,9 +715,49 @@ function mockedLocalContentDensityDirective(defaultValue = ContentDensityGlobalK
653
715
  };
654
716
  }
655
717
 
718
+ const warnedSelectorBases = new Set();
719
+ /**
720
+ * Directive decorator is only for allowing @Input
721
+ */
722
+ class DeprecatedContentDensityDirective extends BehaviorSubject {
723
+ constructor() {
724
+ super(ContentDensityMode.COZY);
725
+ this._manuallySet = false;
726
+ }
727
+ /** @deprecated use fdCompact directive instead */
728
+ set contentDensity(value) {
729
+ if (isDevMode() && !warnedSelectorBases.has(this.selectorBase)) {
730
+ console.warn(`${this.message}. Use [fd${capitalize(value)}] or [fdContentDensity] directives instead.`);
731
+ warnedSelectorBases.add(this.selectorBase);
732
+ }
733
+ this._manuallySet = true;
734
+ this.next(value);
735
+ }
736
+ get message() {
737
+ return `Usage of ${this.selectorBase}[contentDensity] is deprecated`;
738
+ }
739
+ get alternative() {
740
+ return {
741
+ name: `Use [${this._manuallySet ? `fd${capitalize(this.value)}` : 'fdContentDensity'}] directive instead`,
742
+ link: ['/core', 'content-density']
743
+ };
744
+ }
745
+ ngOnDestroy() {
746
+ this.complete();
747
+ }
748
+ }
749
+ DeprecatedContentDensityDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DeprecatedContentDensityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
750
+ DeprecatedContentDensityDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: DeprecatedContentDensityDirective, inputs: { contentDensity: "contentDensity" }, usesInheritance: true, ngImport: i0 });
751
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DeprecatedContentDensityDirective, decorators: [{
752
+ type: Directive
753
+ }], ctorParameters: function () { return []; }, propDecorators: { contentDensity: [{
754
+ type: Input
755
+ }] } });
756
+ const capitalize = (str) => (str === null || str === void 0 ? void 0 : str.charAt(0).toUpperCase()) + (str === null || str === void 0 ? void 0 : str.slice(1));
757
+
656
758
  /**
657
759
  * Generated bundle index. Do not edit.
658
760
  */
659
761
 
660
- export { CONTENT_DENSITY_DIRECTIVE, ContentDensityDirective, ContentDensityGlobalKeyword, ContentDensityMode, ContentDensityModule, ContentDensityObserver, ContentDensityObserverSettings, ContentDensityStorage, DeprecatedCompactDirective, DeprecatedCondensedDirective, DeprecatedCozyDirective, GlobalContentDensityService, contentDensityObserverProviders, isCompact, isCondensed, isCozy, mockedLocalContentDensityDirective };
762
+ export { CONTENT_DENSITY_DIRECTIVE, ContentDensityDefaultKeyword, ContentDensityDirective, ContentDensityGlobalKeyword, ContentDensityMode, ContentDensityModule, ContentDensityObserver, ContentDensityObserverSettings, ContentDensityStorage, DeprecatedCompactDirective, DeprecatedCondensedDirective, DeprecatedContentDensityDirective, DeprecatedCozyDirective, GlobalContentDensityService, contentDensityObserverProviders, defaultContentDensityObserverConfigs, isCompact, isCondensed, isContentDensityMode, isCozy, mockedLocalContentDensityDirective };
661
763
  //# sourceMappingURL=fundamental-ngx-core-content-density.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-content-density.mjs","sources":["../../../../../libs/core/src/lib/content-density/content-density.types.ts","../../../../../libs/core/src/lib/content-density/tokens/content-density-directive.ts","../../../../../libs/core/src/lib/content-density/directives/content-density.directive.ts","../../../../../libs/core/src/lib/content-density/tokens/default-content-density.token.ts","../../../../../libs/core/src/lib/content-density/classes/abstract-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/providers/memory-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/services/global-content-density.service.ts","../../../../../libs/core/src/lib/content-density/tokens/content-density-storage-key.token.ts","../../../../../libs/core/src/lib/content-density/providers/local-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/providers/url-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/helpers/density-type-checkers.ts","../../../../../libs/core/src/lib/content-density/services/deprecated-content-density.service.ts","../../../../../libs/core/src/lib/content-density/content-density.module.ts","../../../../../libs/core/src/lib/content-density/helpers/get-changes-source.provider.ts","../../../../../libs/core/src/lib/content-density/variables/default-content-density-consumer-config.ts","../../../../../libs/core/src/lib/content-density/helpers/content-density-change-callback-factory.ts","../../../../../libs/core/src/lib/content-density/classes/content-density-observer.settings.ts","../../../../../libs/core/src/lib/content-density/services/content-density-observer.service.ts","../../../../../libs/core/src/lib/content-density/providers/content-density-observer-providers.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-compact.directive.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-cozy.directive.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-condensed.directive.ts","../../../../../libs/core/src/lib/content-density/testing/mocked-local-content-density-directive.ts","../../../../../libs/core/src/lib/content-density/fundamental-ngx-core-content-density.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserverSettings } from './classes/content-density-observer.settings';\n\nexport const ContentDensityGlobalKeyword = 'global';\n\nexport enum ContentDensityMode {\n COZY = 'cozy',\n CONDENSED = 'condensed',\n COMPACT = 'compact'\n}\n\nexport type LocalContentDensityMode = ContentDensityMode | typeof ContentDensityGlobalKeyword;\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","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ContentDensityMode } from '../content-density.types';\n\nexport const CONTENT_DENSITY_DIRECTIVE = new InjectionToken<Observable<ContentDensityMode>>('ContentDensityDirective');\n","import { Directive, forwardRef, Input, OnDestroy } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BehaviorSubject } from 'rxjs';\nimport { ContentDensityGlobalKeyword, ContentDensityMode, LocalContentDensityMode } from '../content-density.types';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\n\n/**\n * Directive to control the content density of the elements.\n * This Directive is used in density controllers and consumers\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 extends BehaviorSubject<LocalContentDensityMode> implements OnDestroy {\n /**\n * Update the content density of the element on the fly\n */\n @Input()\n set fdContentDensity(val: LocalContentDensityMode | '') {\n this.next(val ? val : ContentDensityGlobalKeyword);\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"compact\",\n * instead you can just write fdCompact=\"true\" or [fdCompact]\n */\n @Input()\n set fdCompact(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.COMPACT);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"condensed\",\n * instead you can just write fdCondensed=\"true\" or [fdCondensed]\n */\n @Input()\n set fdCondensed(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.CONDENSED);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"cozy\",\n * instead you can just write fdCozy=\"true\" or [fdCozy]\n */\n @Input()\n set fdCozy(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.COZY);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /** @hidden */\n constructor() {\n super(ContentDensityGlobalKeyword);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ContentDensityMode } from '../content-density.types';\n\nexport const DEFAULT_CONTENT_DENSITY = new InjectionToken<ContentDensityMode>('Default global content density', {\n factory: () => ContentDensityMode.COZY\n});\n","import { ContentDensityMode } from '../content-density.types';\nimport { Observable } from 'rxjs';\n\n/**\n * Abstract provider class for providing content density storage functionality\n * Default implementation is MemoryContentDensityStorage\n */\nexport abstract class ContentDensityStorage {\n /**\n * Get listener for current density updates\n */\n abstract getContentDensity(): Observable<ContentDensityMode>;\n\n /**\n * Save updated configuration\n * @param density\n */\n abstract setContentDensity(density: ContentDensityMode): Observable<void>;\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { ContentDensityMode } from '../content-density.types';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\n\n@Injectable()\nexport class MemoryContentDensityStorage implements ContentDensityStorage {\n private _currentContentDensity$: BehaviorSubject<ContentDensityMode>;\n\n constructor(@Inject(DEFAULT_CONTENT_DENSITY) defaultContentDensity: ContentDensityMode) {\n this._currentContentDensity$ = new BehaviorSubject(defaultContentDensity);\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return this._currentContentDensity$.asObservable();\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._currentContentDensity$.next(density);\n return of(undefined);\n }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { Observable, Subscription } from 'rxjs';\nimport { ContentDensityMode } from '../content-density.types';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\n\n/**\n * Service for managing global content density state.\n */\n@Injectable()\nexport class GlobalContentDensityService implements OnDestroy {\n /**\n * Current content density.\n */\n currentContentDensity: ContentDensityMode;\n\n /** @hidden */\n private _subscription = new Subscription();\n\n /** @hidden */\n constructor(\n @Inject(ContentDensityStorage) private _storage: ContentDensityStorage,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode\n ) {\n this._subscription.add(\n this.contentDensityListener().subscribe((density) => {\n this.currentContentDensity = density;\n })\n );\n }\n\n /** Listen to current content density changes */\n contentDensityListener(): Observable<ContentDensityMode> {\n return this._storage.getContentDensity();\n }\n\n /** Update content density */\n updateContentDensity(density: ContentDensityMode): Observable<void> {\n return this._storage.setContentDensity(density);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\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 { Inject, Injectable } from '@angular/core';\nimport { LocalStorageService } from '@fundamental-ngx/core/utils';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { ContentDensityMode } from '../content-density.types';\n\n@Injectable()\nexport class LocalContentDensityStorage implements ContentDensityStorage {\n private _update$ = new Subject<void>();\n\n constructor(\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode,\n @Inject(CONTENT_DENSITY_STORAGE_KEY) private _storageKey: string,\n private _storage: LocalStorageService\n ) {\n this._initialize();\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return new Observable<ContentDensityMode>((subscriber) => {\n subscriber.next(this._storage.get(this._storageKey));\n const subscription = this._update$.subscribe(() => {\n subscriber.next(this._storage.get(this._storageKey));\n });\n return () => {\n subscription.unsubscribe();\n };\n });\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._storage.set(this._storageKey, density);\n this._update$.next();\n return of(undefined);\n }\n\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 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { ContentDensityMode } from '../content-density.types';\nimport { BehaviorSubject, distinctUntilChanged, filter, Observable, of } from 'rxjs';\n\n@Injectable()\nexport class UrlContentDensityStorage implements ContentDensityStorage {\n private _current$: BehaviorSubject<ContentDensityMode>;\n\n constructor(\n private _router: Router,\n private _activatedRoute: ActivatedRoute,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode,\n @Inject(CONTENT_DENSITY_STORAGE_KEY) private _storageKey: string\n ) {\n this._initialize();\n }\n\n private _initialize(): void {\n this._current$ = new BehaviorSubject<ContentDensityMode>(this._defaultContentDensity);\n\n this._activatedRoute.queryParams\n .pipe(filter((queryParams) => !!queryParams[this._storageKey]))\n .subscribe((queryParams) => {\n this._current$.next(queryParams[this._storageKey]);\n });\n }\n\n private _setUrlQueryParam(density: ContentDensityMode): void {\n const url = new URL(`https://google.com${this._router.url}`);\n url.searchParams.delete(this._storageKey);\n url.searchParams.append(this._storageKey, density);\n const queryParams = {};\n url.searchParams.forEach((value, key) => (queryParams[key] = value));\n\n this._router.navigateByUrl(url.pathname + '?' + url.searchParams.toString());\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return this._current$.asObservable().pipe(distinctUntilChanged());\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._current$.next(density);\n this._setUrlQueryParam(density);\n return of(undefined);\n }\n}\n","import { ContentDensityMode } from '../content-density.types';\n\nexport const isCompact = (density: ContentDensityMode): boolean => density === ContentDensityMode.COMPACT;\nexport const isCondensed = (density: ContentDensityMode): boolean => density === ContentDensityMode.CONDENSED;\nexport const isCozy = (density: ContentDensityMode): boolean => density === ContentDensityMode.COZY;\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { GlobalContentDensityService } from './global-content-density.service';\nimport { BehaviorSubject, Observable, skip, tap } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { isCompact } from '../helpers/density-type-checkers';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../content-density.types';\n\n/**\n * Temporary replacement for ContentDensityService\n */\n@Injectable()\nexport class DeprecatedContentDensityService implements OnDestroy {\n /** Content Density BehaviourSubject */\n readonly contentDensity = new BehaviorSubject<ContentDensityMode>(this._defaultContentDensity);\n\n constructor(\n private _contentDensityController: GlobalContentDensityService,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode\n ) {\n this.contentDensity\n .pipe(\n skip(1),\n tap((d) => this._contentDensityController.updateContentDensity(d))\n )\n .subscribe();\n }\n\n /** @hidden */\n get _contentDensityListener(): Observable<ContentDensityMode> {\n return this._contentDensityController.contentDensityListener();\n }\n\n /** @hidden */\n get _isCompactDensity(): Observable<boolean> {\n return this._contentDensityController.contentDensityListener().pipe(map(isCompact));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.contentDensity.complete();\n }\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityDirective } from './directives/content-density.directive';\nimport { DEFAULT_CONTENT_DENSITY } from './tokens/default-content-density.token';\nimport { ContentDensityMode, ContentDensityModuleConfig } from './content-density.types';\nimport { ContentDensityStorage } from './classes/abstract-content-density-storage';\nimport { MemoryContentDensityStorage } from './providers/memory-content-density-storage';\nimport { GlobalContentDensityService } from './services/global-content-density.service';\nimport { LocalContentDensityStorage } from './providers/local-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from './tokens/content-density-storage-key.token';\nimport { UrlContentDensityStorage } from './providers/url-content-density-storage';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { DeprecatedContentDensityService } from './services/deprecated-content-density.service';\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@NgModule({\n imports: [CommonModule],\n exports: [ContentDensityDirective],\n declarations: [ContentDensityDirective]\n})\nexport class ContentDensityModule {\n static forRoot(config?: ContentDensityModuleConfig): ModuleWithProviders<ContentDensityModule> {\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\n return {\n ngModule: ContentDensityModule,\n providers: [\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 {\n provide: ContentDensityService,\n useClass: DeprecatedContentDensityService\n },\n GlobalContentDensityService,\n storage\n ]\n };\n }\n}\n","import { Observable, of, switchMap } from 'rxjs';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { ContentDensityGlobalKeyword, ContentDensityMode, LocalContentDensityMode } from '../content-density.types';\n\nexport const getChangesSource$ = (params: {\n defaultContentDensity: ContentDensityMode;\n contentDensityDirective?: Observable<LocalContentDensityMode>;\n contentDensityService?: GlobalContentDensityService;\n}): Observable<ContentDensityMode> => {\n const serviceValue$: Observable<ContentDensityMode> = params.contentDensityService\n ? params.contentDensityService.contentDensityListener()\n : of(params.defaultContentDensity);\n const changesSource$ = params.contentDensityDirective ? params.contentDensityDirective : serviceValue$;\n\n return changesSource$.pipe(\n switchMap((mode: LocalContentDensityMode) => {\n if (mode !== ContentDensityGlobalKeyword) {\n return of(mode);\n }\n return serviceValue$;\n })\n );\n};\n","import { ContentDensityMode } from '../content-density.types';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\nexport const defaultContentDensityObserverConfigs: Required<ContentDensityObserverSettings> = {\n modifiers: {},\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],\n defaultContentDensity: ContentDensityMode.COZY\n};\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { ContentDensityCallbackFn, ContentDensityObserverTarget, ContentDensityMode } from '../content-density.types';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\nexport function contentDensityCallbackFactory(\n consumerConfig: ContentDensityObserverTarget | ContentDensityCallbackFn\n): ContentDensityCallbackFn {\n if (typeof consumerConfig === 'function') {\n return consumerConfig;\n }\n return (contentDensityMode: ContentDensityMode) => {\n const configs = {\n contentDensitySettings: {\n ...defaultContentDensityObserverConfigs,\n ...consumerConfig.contentDensitySettings\n },\n elementRef: () => consumerConfig.elementRef()\n };\n const settings: Required<ContentDensityObserverSettings> = configs.contentDensitySettings;\n const element = coerceElement(configs.elementRef());\n\n Object.values(settings.modifiers).forEach((className) => {\n element.classList.remove(className);\n });\n if (settings.modifiers[contentDensityMode]) {\n element.classList.add(settings.modifiers[contentDensityMode]);\n }\n };\n}\n","import { ContentDensityMode } from '../content-density.types';\n\nexport class ContentDensityObserverSettings {\n modifiers?: Partial<Record<ContentDensityMode, string>>;\n supportedContentDensity?: ContentDensityMode[];\n defaultContentDensity?: ContentDensityMode;\n}\n","import { ChangeDetectorRef, ElementRef, Injectable, InjectFlags, Injector } from '@angular/core';\nimport {\n ContentDensityCallbackFn,\n ContentDensityMode,\n ContentDensityObserverTarget,\n LocalContentDensityMode\n} from '../content-density.types';\nimport { BehaviorSubject, distinctUntilChanged, finalize, map, Observable, Subscription, takeUntil, tap } from 'rxjs';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { getChangesSource$ } from '../helpers/get-changes-source.provider';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\nimport { contentDensityCallbackFactory } from '../helpers/content-density-change-callback-factory';\nimport { isCompact, isCondensed, isCozy } from '../helpers/density-type-checkers';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { DestroyedService } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\n@Injectable()\nexport class ContentDensityObserver extends BehaviorSubject<ContentDensityMode> {\n /** Stream for getting compact state changes */\n isCompact$: Observable<boolean>;\n /** Stream for getting cozy state changes */\n isCozy$: Observable<boolean>;\n /** Stream for getting condensed state changes */\n isCondensed$: Observable<boolean>;\n\n /** @hidden */\n private _callbacks: Map<any, ContentDensityCallbackFn> = new Map<any, ContentDensityCallbackFn>();\n\n /** @hidden */\n private _isCompact: boolean;\n /** @hidden */\n private _isCozy: boolean;\n /** @hidden */\n private _isCondensed: boolean;\n\n /** @hidden */\n private _compactSubscription: Subscription;\n /** @hidden */\n private _condensedSubscription: Subscription;\n /** @hidden */\n private _cozySubscription: Subscription;\n\n /** @hidden */\n private configuration: Required<ContentDensityObserverSettings>;\n\n /** @hidden */\n private 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 readonly destroy$: Observable<void>;\n private changeDetectorRef: ChangeDetectorRef;\n private contentDensityDirective?: Observable<LocalContentDensityMode>;\n private contentDensityService?: GlobalContentDensityService;\n\n constructor(private _injector: Injector, private _providedConfig?: ContentDensityObserverSettings) {\n super(\n _injector.get(GlobalContentDensityService, null, InjectFlags.Optional)?.currentContentDensity ||\n _providedConfig?.defaultContentDensity ||\n defaultContentDensityObserverConfigs.defaultContentDensity\n );\n this.configuration = {\n ...defaultContentDensityObserverConfigs,\n ...(_providedConfig || {})\n };\n this.destroy$ = this._injector.get(DestroyedService);\n this.changeDetectorRef = this._injector.get(ChangeDetectorRef);\n this.contentDensityDirective = this._injector.get(CONTENT_DENSITY_DIRECTIVE, undefined, InjectFlags.Optional);\n this.contentDensityService = this._injector.get(GlobalContentDensityService, undefined, InjectFlags.Optional);\n\n const changesSource$: Observable<ContentDensityMode> = getChangesSource$({\n defaultContentDensity: this.configuration.defaultContentDensity,\n contentDensityDirective: this.contentDensityDirective,\n contentDensityService: this.contentDensityService\n }).pipe(\n map((density: ContentDensityMode) => {\n if (!this.isSupported(density)) {\n return this.alternativeTo[density]();\n }\n return density;\n }),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n );\n changesSource$\n .pipe(\n tap((density) => this._callCallbacks(density)),\n finalize(() => this.complete())\n )\n .subscribe((density) => {\n this.next(density);\n });\n this.isCompact$ = changesSource$.pipe(map(isCompact));\n this.isCozy$ = changesSource$.pipe(map(isCozy));\n this.isCondensed$ = changesSource$.pipe(map(isCondensed));\n if (_providedConfig) {\n this.consume({\n contentDensitySettings: this.configuration,\n elementRef: () => this._injector.get(ElementRef)\n });\n }\n }\n\n isSupported(density: ContentDensityMode): boolean {\n return this.configuration.supportedContentDensity.includes(density);\n }\n\n /**\n * Sync isCompact. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCompact(): boolean {\n if (!this._compactSubscription) {\n this._compactSubscription = this._listenToChanges(this.isCompact$, (v) => (this._isCompact = v));\n }\n return this._isCompact;\n }\n\n /**\n * Sync isCondensed. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCondensed(): boolean {\n if (!this._condensedSubscription) {\n this._condensedSubscription = this._listenToChanges(this.isCondensed$, (v) => (this._isCondensed = v));\n }\n return this._isCondensed;\n }\n\n /**\n * Sync isCozy. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCozy(): boolean {\n if (!this._cozySubscription) {\n this._cozySubscription = this._listenToChanges(this.isCozy$, (v) => (this._isCozy = v));\n }\n return this._isCozy;\n }\n\n /**\n * Pass consumers callback function, or configuration object to be called on density change\n */\n consume(\n ...consumerConfigs: Array<ContentDensityObserverTarget | ContentDensityCallbackFn>\n ): ContentDensityObserver {\n consumerConfigs.forEach((consumerConfig) => {\n const callback = contentDensityCallbackFactory(consumerConfig);\n this._callbacks.set(consumerConfig, callback);\n callback(this.value);\n });\n return this;\n }\n\n /**\n * Remove consumer callback from list of callbacks\n */\n removeConsumer(\n ...consumerConfigs: Array<ContentDensityObserverTarget | ContentDensityCallbackFn>\n ): ContentDensityObserver {\n consumerConfigs.forEach((consumerConfig) => {\n this._callbacks.delete(consumerConfig);\n });\n return this;\n }\n\n /** @hidden */\n private _callCallbacks(density: ContentDensityMode): void {\n this._callbacks.forEach((callback) => callback(density));\n }\n\n /** @hidden */\n private _listenToChanges(source: Observable<boolean>, callback: (newValue: boolean) => void): Subscription {\n return source\n .pipe(\n tap(callback),\n tap(() => this.changeDetectorRef.markForCheck()),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n}\n","import { Provider } from '@angular/core';\nimport { consumerProviderFactory, DestroyedService } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserver } from '../services/content-density-observer.service';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\n/**\n * Creates provider for ContentDensityObserver and adds DestroyedService provider\n */\nexport function contentDensityObserverProviders(params?: ContentDensityObserverSettings): Provider[] {\n return [DestroyedService, consumerProviderFactory(ContentDensityObserver, params)];\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCompactDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n /** @deprecated use fdCompact directive instead */\n @Input()\n set compact(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCompact] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCompact] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COZY);\n this.message = `Usage of ${selectorBase}[compact] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCozyDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n @Input()\n set cozy(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCozy] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.COZY : ContentDensityMode.COMPACT);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCozy] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COMPACT);\n this.message = `Usage of ${selectorBase}[cozy] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCondensedDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n @Input()\n set condensed(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCondensed] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.CONDENSED : ContentDensityMode.COZY);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCondensed] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COZY);\n this.message = `Usage of ${selectorBase}[condensed] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Provider } from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { BehaviorSubject } from 'rxjs';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\n\nexport function mockedLocalContentDensityDirective(\n defaultValue: LocalContentDensityMode = ContentDensityGlobalKeyword\n): { contentDensityDirectiveProvider: Provider; setContentDensity: (cd: LocalContentDensityMode) => void } {\n const behaviorSubject = new BehaviorSubject(defaultValue);\n return {\n contentDensityDirectiveProvider: {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useValue: behaviorSubject.asObservable()\n },\n setContentDensity: (cd: LocalContentDensityMode) => behaviorSubject.next(cd)\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-content-density.mjs","sources":["../../../../../libs/core/src/lib/content-density/content-density.types.ts","../../../../../libs/core/src/lib/content-density/tokens/content-density-directive.ts","../../../../../libs/core/src/lib/content-density/helpers/density-type-checkers.ts","../../../../../libs/core/src/lib/content-density/directives/content-density.directive.ts","../../../../../libs/core/src/lib/content-density/tokens/default-content-density.token.ts","../../../../../libs/core/src/lib/content-density/classes/abstract-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/providers/memory-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/services/global-content-density.service.ts","../../../../../libs/core/src/lib/content-density/tokens/content-density-storage-key.token.ts","../../../../../libs/core/src/lib/content-density/providers/local-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/providers/url-content-density-storage.ts","../../../../../libs/core/src/lib/content-density/services/deprecated-content-density.service.ts","../../../../../libs/core/src/lib/content-density/content-density.module.ts","../../../../../libs/core/src/lib/content-density/helpers/get-changes-source.provider.ts","../../../../../libs/core/src/lib/content-density/variables/default-content-density-consumer-config.ts","../../../../../libs/core/src/lib/content-density/helpers/content-density-change-callback-factory.ts","../../../../../libs/core/src/lib/content-density/classes/content-density-observer.settings.ts","../../../../../libs/core/src/lib/content-density/services/content-density-observer.service.ts","../../../../../libs/core/src/lib/content-density/providers/content-density-observer-providers.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-compact.directive.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-cozy.directive.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-condensed.directive.ts","../../../../../libs/core/src/lib/content-density/testing/mocked-local-content-density-directive.ts","../../../../../libs/core/src/lib/content-density/classes/deprecated-content-density.directive.ts","../../../../../libs/core/src/lib/content-density/fundamental-ngx-core-content-density.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserverSettings } from './classes/content-density-observer.settings';\n\nexport const ContentDensityGlobalKeyword = 'global';\nexport const ContentDensityDefaultKeyword = 'default';\n\nexport enum ContentDensityMode {\n COZY = 'cozy',\n CONDENSED = 'condensed',\n COMPACT = 'compact'\n}\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","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ContentDensityMode } from '../content-density.types';\n\nexport const CONTENT_DENSITY_DIRECTIVE = new InjectionToken<Observable<ContentDensityMode>>('ContentDensityDirective');\n","import { ContentDensityGlobalKeyword, ContentDensityMode } from '../content-density.types';\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 { Directive, forwardRef, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { BehaviorSubject } from 'rxjs';\nimport { ContentDensityGlobalKeyword, ContentDensityMode, LocalContentDensityMode } from '../content-density.types';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { isContentDensityMode } from '../helpers/density-type-checkers';\n\n/**\n * Directive to control the content density of the elements.\n * This Directive is used in density controllers and consumers\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 extends BehaviorSubject<LocalContentDensityMode> implements OnDestroy {\n /**\n * Update the content density of the element on the fly\n */\n @Input()\n set fdContentDensity(val: LocalContentDensityMode | '') {\n if (!isContentDensityMode(val)) {\n if (isDevMode() && val !== '') {\n console.log(\n `The value \"${val}\" is not a valid content density mode.\n Using \"${ContentDensityGlobalKeyword}\" instead.`\n );\n }\n val = ContentDensityGlobalKeyword;\n }\n this.next(val as LocalContentDensityMode);\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"compact\",\n * instead you can just write fdCompact=\"true\" or [fdCompact]\n */\n @Input()\n set fdCompact(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.COMPACT);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"condensed\",\n * instead you can just write fdCondensed=\"true\" or [fdCondensed]\n */\n @Input()\n set fdCondensed(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.CONDENSED);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /**\n * This input is basically syntax sugar, for not writing fdContentDensity=\"cozy\",\n * instead you can just write fdCozy=\"true\" or [fdCozy]\n */\n @Input()\n set fdCozy(val: BooleanInput) {\n if (coerceBooleanProperty(val)) {\n this.next(ContentDensityMode.COZY);\n } else {\n this.next(ContentDensityGlobalKeyword);\n }\n }\n\n /** @hidden */\n constructor() {\n super(ContentDensityGlobalKeyword);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ContentDensityMode } from '../content-density.types';\n\nexport const DEFAULT_CONTENT_DENSITY = new InjectionToken<ContentDensityMode>('Default global content density', {\n factory: () => ContentDensityMode.COZY\n});\n","import { ContentDensityMode } from '../content-density.types';\nimport { Observable } from 'rxjs';\n\n/**\n * Abstract provider class for providing content density storage functionality\n * Default implementation is MemoryContentDensityStorage\n */\nexport abstract class ContentDensityStorage {\n /**\n * Get listener for current density updates\n */\n abstract getContentDensity(): Observable<ContentDensityMode>;\n\n /**\n * Save updated configuration\n * @param density\n */\n abstract setContentDensity(density: ContentDensityMode): Observable<void>;\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { ContentDensityMode } from '../content-density.types';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\n\n@Injectable()\nexport class MemoryContentDensityStorage implements ContentDensityStorage {\n private _currentContentDensity$: BehaviorSubject<ContentDensityMode>;\n\n constructor(@Inject(DEFAULT_CONTENT_DENSITY) defaultContentDensity: ContentDensityMode) {\n this._currentContentDensity$ = new BehaviorSubject(defaultContentDensity);\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return this._currentContentDensity$.asObservable();\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._currentContentDensity$.next(density);\n return of(undefined);\n }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { Observable, Subscription } from 'rxjs';\nimport { ContentDensityMode } from '../content-density.types';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\n\n/**\n * Service for managing global content density state.\n */\n@Injectable()\nexport class GlobalContentDensityService implements OnDestroy {\n /**\n * Current content density.\n */\n currentContentDensity: ContentDensityMode;\n\n /** @hidden */\n private _subscription = new Subscription();\n\n /** @hidden */\n constructor(\n @Inject(ContentDensityStorage) private _storage: ContentDensityStorage,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode\n ) {\n this._subscription.add(\n this.contentDensityListener().subscribe((density) => {\n this.currentContentDensity = density;\n })\n );\n }\n\n /** Listen to current content density changes */\n contentDensityListener(): Observable<ContentDensityMode> {\n return this._storage.getContentDensity();\n }\n\n /** Update content density */\n updateContentDensity(density: ContentDensityMode): Observable<void> {\n return this._storage.setContentDensity(density);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\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 { Inject, Injectable } from '@angular/core';\nimport { LocalStorageService } from '@fundamental-ngx/core/utils';\nimport { Observable, of, Subject } from 'rxjs';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { ContentDensityMode } from '../content-density.types';\n\n@Injectable()\nexport class LocalContentDensityStorage implements ContentDensityStorage {\n private _update$ = new Subject<void>();\n\n constructor(\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode,\n @Inject(CONTENT_DENSITY_STORAGE_KEY) private _storageKey: string,\n private _storage: LocalStorageService\n ) {\n this._initialize();\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return new Observable<ContentDensityMode>((subscriber) => {\n subscriber.next(this._storage.get(this._storageKey));\n const subscription = this._update$.subscribe(() => {\n subscriber.next(this._storage.get(this._storageKey));\n });\n return () => {\n subscription.unsubscribe();\n };\n });\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._storage.set(this._storageKey, density);\n this._update$.next();\n return of(undefined);\n }\n\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 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityStorage } from '../classes/abstract-content-density-storage';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { CONTENT_DENSITY_STORAGE_KEY } from '../tokens/content-density-storage-key.token';\nimport { ContentDensityMode } from '../content-density.types';\nimport { BehaviorSubject, distinctUntilChanged, filter, Observable, of } from 'rxjs';\n\n@Injectable()\nexport class UrlContentDensityStorage implements ContentDensityStorage {\n private _current$: BehaviorSubject<ContentDensityMode>;\n\n constructor(\n private _router: Router,\n private _activatedRoute: ActivatedRoute,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode,\n @Inject(CONTENT_DENSITY_STORAGE_KEY) private _storageKey: string\n ) {\n this._initialize();\n }\n\n private _initialize(): void {\n this._current$ = new BehaviorSubject<ContentDensityMode>(this._defaultContentDensity);\n\n this._activatedRoute.queryParams\n .pipe(filter((queryParams) => !!queryParams[this._storageKey]))\n .subscribe((queryParams) => {\n this._current$.next(queryParams[this._storageKey]);\n });\n }\n\n private _setUrlQueryParam(density: ContentDensityMode): void {\n const url = new URL(`https://google.com${this._router.url}`);\n url.searchParams.delete(this._storageKey);\n url.searchParams.append(this._storageKey, density);\n const queryParams = {};\n url.searchParams.forEach((value, key) => (queryParams[key] = value));\n\n this._router.navigateByUrl(url.pathname + '?' + url.searchParams.toString());\n }\n\n getContentDensity(): Observable<ContentDensityMode> {\n return this._current$.asObservable().pipe(distinctUntilChanged());\n }\n\n setContentDensity(density: ContentDensityMode): Observable<void> {\n this._current$.next(density);\n this._setUrlQueryParam(density);\n return of(undefined);\n }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { GlobalContentDensityService } from './global-content-density.service';\nimport { BehaviorSubject, Observable, skip, tap } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { isCompact } from '../helpers/density-type-checkers';\nimport { DEFAULT_CONTENT_DENSITY } from '../tokens/default-content-density.token';\nimport { ContentDensityMode } from '../content-density.types';\n\n/**\n * Temporary replacement for ContentDensityService\n */\n@Injectable()\nexport class DeprecatedContentDensityService implements OnDestroy {\n /** Content Density BehaviourSubject */\n readonly contentDensity = new BehaviorSubject<ContentDensityMode>(this._defaultContentDensity);\n\n constructor(\n private _contentDensityController: GlobalContentDensityService,\n @Inject(DEFAULT_CONTENT_DENSITY) private _defaultContentDensity: ContentDensityMode\n ) {\n this.contentDensity\n .pipe(\n skip(1),\n tap((d) => this._contentDensityController.updateContentDensity(d))\n )\n .subscribe();\n }\n\n /** @hidden */\n get _contentDensityListener(): Observable<ContentDensityMode> {\n return this._contentDensityController.contentDensityListener();\n }\n\n /** @hidden */\n get _isCompactDensity(): Observable<boolean> {\n return this._contentDensityController.contentDensityListener().pipe(map(isCompact));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.contentDensity.complete();\n }\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContentDensityDirective } from './directives/content-density.directive';\nimport { DEFAULT_CONTENT_DENSITY } from './tokens/default-content-density.token';\nimport { ContentDensityMode, ContentDensityModuleConfig } from './content-density.types';\nimport { ContentDensityStorage } from './classes/abstract-content-density-storage';\nimport { MemoryContentDensityStorage } from './providers/memory-content-density-storage';\nimport { GlobalContentDensityService } from './services/global-content-density.service';\nimport { LocalContentDensityStorage } from './providers/local-content-density-storage';\nimport { CONTENT_DENSITY_STORAGE_KEY } from './tokens/content-density-storage-key.token';\nimport { UrlContentDensityStorage } from './providers/url-content-density-storage';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { DeprecatedContentDensityService } from './services/deprecated-content-density.service';\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@NgModule({\n imports: [CommonModule],\n exports: [ContentDensityDirective],\n declarations: [ContentDensityDirective]\n})\nexport class ContentDensityModule {\n static forRoot(config?: ContentDensityModuleConfig): ModuleWithProviders<ContentDensityModule> {\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\n return {\n ngModule: ContentDensityModule,\n providers: [\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 {\n provide: ContentDensityService,\n useClass: DeprecatedContentDensityService\n },\n GlobalContentDensityService,\n storage\n ]\n };\n }\n}\n","import { Observable, of, switchMap } from 'rxjs';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport {\n ContentDensityDefaultKeyword,\n ContentDensityGlobalKeyword,\n ContentDensityMode,\n LocalContentDensityMode\n} from '../content-density.types';\n\nexport const getChangesSource$ = (params: {\n defaultContentDensity: ContentDensityMode;\n contentDensityDirective?: Observable<LocalContentDensityMode>;\n contentDensityService?: GlobalContentDensityService;\n}): Observable<ContentDensityMode> => {\n const serviceValue$: Observable<ContentDensityMode> = params.contentDensityService\n ? params.contentDensityService.contentDensityListener()\n : of(params.defaultContentDensity);\n const changesSource$ = params.contentDensityDirective ? params.contentDensityDirective : serviceValue$;\n\n return changesSource$.pipe(\n switchMap((mode: LocalContentDensityMode) => {\n if (mode === ContentDensityDefaultKeyword) {\n return of(params.defaultContentDensity);\n }\n if (mode === ContentDensityGlobalKeyword) {\n return serviceValue$;\n }\n return of(mode);\n })\n );\n};\n","import { ContentDensityMode } from '../content-density.types';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\nexport const defaultContentDensityObserverConfigs: Required<ContentDensityObserverSettings> = {\n modifiers: {},\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY],\n defaultContentDensity: ContentDensityMode.COZY,\n debug: false\n};\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { ContentDensityCallbackFn, ContentDensityObserverTarget, ContentDensityMode } from '../content-density.types';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\nexport function contentDensityCallbackFactory(\n consumerConfig: ContentDensityObserverTarget | ContentDensityCallbackFn\n): ContentDensityCallbackFn {\n if (typeof consumerConfig === 'function') {\n return consumerConfig;\n }\n return (contentDensityMode: ContentDensityMode) => {\n const configs = {\n contentDensitySettings: {\n ...defaultContentDensityObserverConfigs,\n ...consumerConfig.contentDensitySettings\n },\n elementRef: () => consumerConfig.elementRef()\n };\n const settings: Required<ContentDensityObserverSettings> = configs.contentDensitySettings;\n const element = coerceElement(configs.elementRef());\n\n Object.values(settings.modifiers).forEach((className) => {\n element.classList.remove(className);\n });\n if (settings.modifiers[contentDensityMode]) {\n element.classList.add(settings.modifiers[contentDensityMode]);\n }\n };\n}\n","import { ContentDensityMode } from '../content-density.types';\nimport { FactorySansProvider, ProviderToken } from '@angular/core';\n\nexport class ContentDensityObserverSettings {\n modifiers?: Partial<Record<ContentDensityMode, string>>;\n supportedContentDensity?: ContentDensityMode[];\n defaultContentDensity?: ContentDensityMode | ProviderToken<ContentDensityMode> | FactorySansProvider;\n debug?: boolean;\n}\n","import { ChangeDetectorRef, ElementRef, FactorySansProvider, Injectable, InjectFlags, Injector } from '@angular/core';\nimport {\n ContentDensityCallbackFn,\n ContentDensityMode,\n ContentDensityObserverTarget,\n LocalContentDensityMode\n} from '../content-density.types';\nimport { BehaviorSubject, distinctUntilChanged, finalize, map, Observable, Subscription, takeUntil, tap } from 'rxjs';\nimport { GlobalContentDensityService } from '../services/global-content-density.service';\nimport { getChangesSource$ } from '../helpers/get-changes-source.provider';\nimport { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';\nimport { contentDensityCallbackFactory } from '../helpers/content-density-change-callback-factory';\nimport { isCompact, isCondensed, isCozy } from '../helpers/density-type-checkers';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\nimport { DestroyedService } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\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 = InjectFlags.Default;\n for (let index = 0; index < dep.length; index++) {\n const flag = dep[index]['__NG_DI_FLAG__'];\n if (typeof flag === 'number') {\n // eslint-disable-next-line no-bitwise\n flags |= flag;\n } else {\n type = dep[index];\n }\n }\n return injector.get(type, undefined, flags);\n }\n return injector.get(dep, undefined, InjectFlags.Default);\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, InjectFlags.Optional)?.currentContentDensity;\n if (serviceValue) {\n return serviceValue;\n }\n return getDefaultContentDensity(injector, {\n ...defaultContentDensityObserverConfigs,\n ...(configuration || {})\n });\n};\n\n@Injectable()\nexport class ContentDensityObserver extends BehaviorSubject<ContentDensityMode> {\n /** Stream for getting compact state changes */\n isCompact$: Observable<boolean>;\n /** Stream for getting cozy state changes */\n isCozy$: Observable<boolean>;\n /** Stream for getting condensed state changes */\n isCondensed$: Observable<boolean>;\n\n /** @hidden */\n private _callbacks: Map<any, ContentDensityCallbackFn> = new Map<any, ContentDensityCallbackFn>();\n\n /** @hidden */\n private _isCompact: boolean;\n /** @hidden */\n private _isCozy: boolean;\n /** @hidden */\n private _isCondensed: boolean;\n\n /** @hidden */\n private _compactSubscription: Subscription;\n /** @hidden */\n private _condensedSubscription: Subscription;\n /** @hidden */\n private _cozySubscription: Subscription;\n\n /** @hidden */\n private readonly configuration: Required<ContentDensityObserverSettings>;\n\n /** @hidden */\n private 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 readonly destroy$: Observable<void>;\n private changeDetectorRef: ChangeDetectorRef;\n private contentDensityDirective?: Observable<LocalContentDensityMode>;\n private contentDensityService?: GlobalContentDensityService;\n\n constructor(private _injector: Injector, private _providedConfig?: ContentDensityObserverSettings) {\n super(initialContentDensity(_injector, _providedConfig));\n if (_providedConfig?.debug) {\n console.log({ initialContentDensity: initialContentDensity(_injector, _providedConfig) });\n }\n this.configuration = {\n ...defaultContentDensityObserverConfigs,\n ...(_providedConfig || {})\n };\n this.destroy$ = this._injector.get(DestroyedService);\n this.changeDetectorRef = this._injector.get(ChangeDetectorRef);\n this.contentDensityDirective = this._injector.get(CONTENT_DENSITY_DIRECTIVE, undefined, InjectFlags.Optional);\n this.contentDensityService = this._injector.get(GlobalContentDensityService, undefined, InjectFlags.Optional);\n\n const changesSource$: Observable<ContentDensityMode> = getChangesSource$({\n defaultContentDensity: getDefaultContentDensity(this._injector, this.configuration),\n contentDensityDirective: this.contentDensityDirective,\n contentDensityService: this.contentDensityService\n }).pipe(\n map((density: ContentDensityMode) => {\n if (this.configuration.debug) {\n console.log(`ContentDensityObserver: density changed to ${density}`);\n }\n if (!this.isSupported(density)) {\n try {\n return this.alternativeTo[density]();\n } catch (e) {\n throw new Error(`ContentDensityObserver: density ${density} is not supported`);\n }\n }\n return density;\n }),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n );\n changesSource$\n .pipe(\n tap((density) => this._callCallbacks(density)),\n finalize(() => this.complete())\n )\n .subscribe((density) => {\n if (this.configuration.debug) {\n console.log(`ContentDensityObserver: density emmited ${density}`);\n }\n this.next(density);\n this.changeDetectorRef.markForCheck();\n });\n this.isCompact$ = changesSource$.pipe(map(isCompact));\n this.isCozy$ = changesSource$.pipe(map(isCozy));\n this.isCondensed$ = changesSource$.pipe(map(isCondensed));\n if (_providedConfig) {\n this.consume({\n contentDensitySettings: this.configuration,\n elementRef: () => this._injector.get(ElementRef)\n });\n }\n }\n\n isSupported(density: ContentDensityMode): boolean {\n return this.configuration.supportedContentDensity.includes(density);\n }\n\n /**\n * Sync isCompact. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCompact(): boolean {\n if (!this._compactSubscription) {\n this._compactSubscription = this._listenToChanges(this.isCompact$, (v) => (this._isCompact = v));\n }\n return this._isCompact;\n }\n\n /**\n * Sync isCondensed. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCondensed(): boolean {\n if (!this._condensedSubscription) {\n this._condensedSubscription = this._listenToChanges(this.isCondensed$, (v) => (this._isCondensed = v));\n }\n return this._isCondensed;\n }\n\n /**\n * Sync isCozy. Calls ChangeDetectorRef.markForCheck() on update\n */\n get isCozy(): boolean {\n if (!this._cozySubscription) {\n this._cozySubscription = this._listenToChanges(this.isCozy$, (v) => (this._isCozy = v));\n }\n return this._isCozy;\n }\n\n /**\n * Pass consumers callback function, or configuration object to be called on density change\n */\n consume(\n ...consumerConfigs: Array<ContentDensityObserverTarget | ContentDensityCallbackFn>\n ): ContentDensityObserver {\n consumerConfigs.forEach((consumerConfig) => {\n const callback = contentDensityCallbackFactory(consumerConfig);\n this._callbacks.set(consumerConfig, callback);\n callback(this.value);\n });\n return this;\n }\n\n /**\n * Remove consumer callback from list of callbacks\n */\n removeConsumer(\n ...consumerConfigs: Array<ContentDensityObserverTarget | ContentDensityCallbackFn>\n ): ContentDensityObserver {\n consumerConfigs.forEach((consumerConfig) => {\n this._callbacks.delete(consumerConfig);\n });\n return this;\n }\n\n /** @hidden */\n private _callCallbacks(density: ContentDensityMode): void {\n this._callbacks.forEach((callback) => callback(density));\n }\n\n /** @hidden */\n private _listenToChanges(source: Observable<boolean>, callback: (newValue: boolean) => void): Subscription {\n return source\n .pipe(\n tap(callback),\n tap(() => this.changeDetectorRef.markForCheck()),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n}\n","import { Provider } from '@angular/core';\nimport { consumerProviderFactory, DestroyedService } from '@fundamental-ngx/core/utils';\nimport { ContentDensityObserver } from '../services/content-density-observer.service';\nimport { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';\n\n/**\n * Creates provider for ContentDensityObserver and adds DestroyedService provider\n */\nexport function contentDensityObserverProviders(params?: ContentDensityObserverSettings): Provider[] {\n return [DestroyedService, consumerProviderFactory(ContentDensityObserver, params)];\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCompactDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n /** @deprecated use fdCompact directive instead */\n @Input()\n set compact(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCompact] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCompact] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COZY);\n this.message = `Usage of ${selectorBase}[compact] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCozyDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n @Input()\n set cozy(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCozy] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.COZY : ContentDensityMode.COMPACT);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCozy] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COMPACT);\n this.message = `Usage of ${selectorBase}[cozy] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedCondensedDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n @Input()\n set condensed(value: BooleanInput) {\n if (isDevMode()) {\n console.warn(`${this.message}. Use [fdCondensed] directive instead.`);\n }\n this.next(coerceBooleanProperty(value) ? ContentDensityMode.CONDENSED : ContentDensityMode.COZY);\n }\n\n readonly message: string;\n readonly alternative = {\n name: 'Use [fdCondensed] directive instead',\n link: ['/core', 'content-density']\n };\n\n constructor(selectorBase: string) {\n super(ContentDensityMode.COZY);\n this.message = `Usage of ${selectorBase}[condensed] is deprecated`;\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n","import { Provider } from '@angular/core';\nimport { ContentDensityGlobalKeyword, LocalContentDensityMode } from '../content-density.types';\nimport { BehaviorSubject } from 'rxjs';\nimport { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';\n\nexport function mockedLocalContentDensityDirective(\n defaultValue: LocalContentDensityMode = ContentDensityGlobalKeyword\n): { contentDensityDirectiveProvider: Provider; setContentDensity: (cd: LocalContentDensityMode) => void } {\n const behaviorSubject = new BehaviorSubject(defaultValue);\n return {\n contentDensityDirectiveProvider: {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useValue: behaviorSubject.asObservable()\n },\n setContentDensity: (cd: LocalContentDensityMode) => behaviorSubject.next(cd)\n };\n}\n","import { Directive, Input, isDevMode, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ContentDensityMode } from '../content-density.types';\nimport { ModuleDeprecation } from '@fundamental-ngx/core/utils';\n\nconst warnedSelectorBases = new Set<string>();\n\n/**\n * Directive decorator is only for allowing @Input\n */\n@Directive()\nexport class DeprecatedContentDensityDirective\n extends BehaviorSubject<ContentDensityMode>\n implements OnDestroy, ModuleDeprecation\n{\n /** @deprecated use fdCompact directive instead */\n @Input()\n set contentDensity(value: any) {\n if (isDevMode() && !warnedSelectorBases.has(this.selectorBase)) {\n console.warn(`${this.message}. Use [fd${capitalize(value)}] or [fdContentDensity] directives instead.`);\n warnedSelectorBases.add(this.selectorBase);\n }\n this._manuallySet = true;\n this.next(value);\n }\n\n get message(): string {\n return `Usage of ${this.selectorBase}[contentDensity] is deprecated`;\n }\n\n get alternative(): any {\n return {\n name: `Use [${this._manuallySet ? `fd${capitalize(this.value)}` : 'fdContentDensity'}] directive instead`,\n link: ['/core', 'content-density']\n };\n }\n\n selectorBase: string;\n\n private _manuallySet = false;\n\n constructor() {\n super(ContentDensityMode.COZY);\n }\n\n ngOnDestroy(): void {\n this.complete();\n }\n}\n\nconst capitalize = (str: string): string => str?.charAt(0).toUpperCase() + str?.slice(1);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map"],"mappings":"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"}