angular-toolbox 0.0.5 → 0.0.7

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.
@@ -23,12 +23,12 @@ export const DARK_MODE_CONFIG = {
23
23
  * Indicates whether the dark mode uses browser settings (true), or not (false).
24
24
  * Default value is false.
25
25
  */
26
- darkModeEnbled: false,
26
+ darkModeEnabled: false,
27
27
  /**
28
28
  * Indicates whether the dark mode uses browser settings (true), or not (false).
29
- * Default value is true.
29
+ * Default value is false.
30
30
  */
31
- detectBrowserSettings: true,
31
+ detectBrowserSettings: false,
32
32
  /**
33
33
  * CSS property name used to set the dark mode look and feel.
34
34
  * Default value is 'dark-mode'.
@@ -52,7 +52,7 @@ export class DarkModeService {
52
52
  constructor(_document, config) {
53
53
  this._document = _document;
54
54
  // --> Private properties
55
- this._darkModeEnbled = false;
55
+ this._darkModeEnabled = false;
56
56
  this._cssProperty = CSS_PROP;
57
57
  this._storageKey = STORAGE_KEY;
58
58
  /**
@@ -66,7 +66,7 @@ export class DarkModeService {
66
66
  * Toogles the dark mode state.
67
67
  */
68
68
  toggleDarkMode() {
69
- this._darkModeEnbled ? this.disableDarkMode() : this.enableDarkMode();
69
+ this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();
70
70
  }
71
71
  /**
72
72
  * Sets the dark mode state to active.
@@ -87,7 +87,21 @@ export class DarkModeService {
87
87
  * @returns true whether the dark mode state is active; false otherwise.
88
88
  */
89
89
  darkModeEnabled() {
90
- return this._darkModeEnbled;
90
+ return this._darkModeEnabled;
91
+ }
92
+ /**
93
+ * Returns the value of the CSS property as defined by the config provider.
94
+ * @returns the value of the CSS property.
95
+ */
96
+ getCssProperty() {
97
+ return this._cssProperty;
98
+ }
99
+ /**
100
+ * Returns the value of the storage key as defined by the config provider.
101
+ * @returns the value of the storage key.
102
+ */
103
+ getStorageKey() {
104
+ return this._storageKey;
91
105
  }
92
106
  /**
93
107
  * Removes the dark mode information from local storage.
@@ -97,10 +111,10 @@ export class DarkModeService {
97
111
  }
98
112
  // --> Private methods
99
113
  initDarkMode(config) {
100
- this._darkModeEnbled = config.darkModeEnbled || false;
114
+ this._darkModeEnabled = config.darkModeEnabled || false;
101
115
  this._cssProperty = config.cssProperty || CSS_PROP;
102
116
  this._storageKey = config.storageKey || STORAGE_KEY;
103
- if (this._darkModeEnbled) {
117
+ if (this._darkModeEnabled) {
104
118
  this.enableDarkMode();
105
119
  }
106
120
  else {
@@ -115,28 +129,25 @@ export class DarkModeService {
115
129
  this.enableDarkMode();
116
130
  }
117
131
  setStoredDarkMode() {
118
- const data = String(this._darkModeEnbled);
132
+ const data = String(this._darkModeEnabled);
119
133
  localStorage.setItem(this._storageKey, data);
120
134
  }
121
135
  setDarkMode(action) {
122
136
  const classList = this._document.body.classList;
123
137
  if (action === ADD_ACTION) {
124
138
  classList.add(this._cssProperty);
125
- this._darkModeEnbled = true;
139
+ this._darkModeEnabled = true;
126
140
  }
127
141
  else if (action === REMOVE_ACTION) {
128
142
  classList.remove(this._cssProperty);
129
- this._darkModeEnbled = false;
143
+ this._darkModeEnabled = false;
130
144
  }
131
- this.change.emit(this._darkModeEnbled);
145
+ this.change.emit(this._darkModeEnabled);
132
146
  }
133
147
  initBrowserMode() {
134
148
  if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
135
149
  this.enableDarkMode();
136
150
  }
137
- else {
138
- this.disableDarkMode();
139
- }
140
151
  }
141
152
  }
142
153
  DarkModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DarkModeService, deps: [{ token: DOCUMENT }, { token: DARK_MODE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -153,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
153
164
  type: Inject,
154
165
  args: [DARK_MODE_CONFIG]
155
166
  }] }]; } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9zZXJ2aWNlL3VpL2RhcmstbW9kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTNDLHlCQUF5QjtBQUN6QixNQUFNLFdBQVcsR0FBVyxlQUFlLENBQUM7QUFDNUMsTUFBTSxRQUFRLEdBQVcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLEtBQUssQ0FBQztBQUNqQyxNQUFNLGFBQWEsR0FBVyxRQUFRLENBQUM7QUE2QnZDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQW1CO0lBRTVDOzs7T0FHRztJQUNILGNBQWMsRUFBRSxLQUFLO0lBRXJCOzs7T0FHRztJQUNILHFCQUFxQixFQUFFLElBQUk7SUFFM0I7OztPQUdHO0lBQ0gsV0FBVyxFQUFFLFFBQVE7SUFFckI7OztPQUdHO0lBQ0gsVUFBVSxFQUFFLFdBQVc7Q0FDMUIsQ0FBQztBQUtGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFheEI7Ozs7T0FJRztJQUNILFlBQXNDLFNBQW1CLEVBQTRCLE1BQXNCO1FBQXJFLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFoQnpELHlCQUF5QjtRQUNqQixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxpQkFBWSxHQUFXLFFBQVEsQ0FBQztRQUNoQyxnQkFBVyxHQUFXLFdBQVcsQ0FBQztRQUUxQzs7O1dBR0c7UUFDYSxXQUFNLEdBQTBCLElBQUksWUFBWSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBUTVFLElBQUksQ0FBQyxZQUFZLENBQUMs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MUUsZUFBZSxjQUxaLE1BQU07MkZBS1QsZUFBZTtrQkFOM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXNCZ0IsTUFBTTsyQkFBQyxRQUFROzswQkFBZ0MsTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyAtLT4gSW50ZXJuYWwgY29uc3RhbnRzXG5jb25zdCBTVE9SQUdFX0tFWTogc3RyaW5nID0gXCJkYXJrLW1vZGUta2V5XCI7XG5jb25zdCBDU1NfUFJPUDogc3RyaW5nID0gXCJkYXJrLW1vZGVcIjtcbmNvbnN0IEFERF9BQ1RJT046IHN0cmluZyA9IFwiYWRkXCI7XG5jb25zdCBSRU1PVkVfQUNUSU9OOiBzdHJpbmcgPSBcInJlbW92ZVwiO1xuXG4vKipcbiAqIERlZmluZXMgcHJvcGVydGllcyBmb3IgdGhlIERhcmtNb2RlU2VydmljZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhcmtNb2RlQ29uZmlnIHtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXJrIG1vZGUgaXMgYWN0aXZhdGVkIGJ5IGRlZmF1bHQgKHRydWUpLCBvciBub3QgKGZhbHNlKS5cbiAgICAgKi9cbiAgICBkYXJrTW9kZUVuYmxlZD86IGJvb2xlYW47XG4gICAgXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhcmsgbW9kZSB1c2VzIGJyb3dzZXIgc2V0dGluZ3MgKHRydWUpLCBvciBub3QgKGZhbHNlKS5cbiAgICAgKiBXaGVuIHRydWUsIHRoaXMgcHJvcGVydHkgb3ZlcnJpZGVzIHRoZSBkYXJrTW9kZUVuYmxlZCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBkZXRlY3RCcm93c2VyU2V0dGluZ3M/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ1NTIHByb3BlcnR5IG5hbWUgdXNlZCB0byBzZXQgdGhlIGRhcmsgbW9kZSBsb29rIGFuZCBmZWVsLlxuICAgICAqL1xuICAgIGNzc1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgdmFsdWUgdXNlZCB0byBwZXJzaXN0IHRoZSBkYXJrIG1vZGUgc3RhdGUgdG8gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICBzdG9yYWdlS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHByb3ZpZGVyIGZvciB0aGUgRGFya01vZGVTZXJ2aWNlIGNvbmZpZ3VyYXRpb24uIFlvdSB0eXBpY2FsbHkgZGVmaW5lXG4gKiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgaW4gdGhlIG1haW4gTmdNb2R1bGUgZGVjbGFyYXRpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYXBwIGRhcmsgbW9kZTpcbiAqIFxuICogQE5nTW9kdWxlKHtcbiAqIC4uLlxuICogcHJvdmlkZXJzOiBbXG4gKiAgIHsgcHJvdmlkZTogREFSS19NT0RFX0NPTkZJRywgdXNlVmFsdWU6IHsgZW5hYmxlRGFya01vZGU6IHRydWV9IH1cbiAqIF0sXG4gKiAuLi5cbiAqIHMpO1xuICovXG5leHBvcnQgY29uc3QgREFSS19NT0RFX0NPTkZJRzogRGFya01vZGVDb25maWcgPSB7XG4gICAgXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhcmsgbW9kZSB1c2VzIGJyb3dzZXIgc2V0dGluZ3MgKHRydWUpLCBvciBub3QgKGZhbHNlKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxuICAgICAqL1xuICAgIGRhcmtNb2RlRW5ibGVkOiBmYWxzZSxcbiAgICBcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGFyayBtb2RlIHVzZXMgYnJvd3NlciBzZXR0aW5ncyAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICAgKi9cbiAgICBkZXRlY3RCcm93c2VyU2V0dGluZ3M6IHRydWUsXG4gICAgXG4gICAgLyoqXG4gICAgICogQ1NTIHByb3BlcnR5IG5hbWUgdXNlZCB0byBzZXQgdGhlIGRhcmsgbW9kZSBsb29rIGFuZCBmZWVsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgJ2RhcmstbW9kZScuXG4gICAgICovXG4gICAgY3NzUHJvcGVydHk6IENTU19QUk9QLFxuICAgIFxuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUga2V5IHZhbHVlIHVzZWQgdG8gcGVyc2lzdCB0aGUgZGFyayBtb2RlIHN0YXRlIHRvIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyAnZGFyay1tb2RlLWtleScuXG4gICAgICovXG4gICAgc3RvcmFnZUtleTogU1RPUkFHRV9LRVlcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vKipcbiAqIEEgbGlnaHR3ZWlnaHQgc2VydmljZSB0aGF0IHByb3ZpZGVzIERhcmsgTW9kZSBpbXBsZW1lbnRhdGlvbiBmb3IgeW91ciBBbmd1bGFyIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRGFya01vZGVTZXJ2aWNlIHtcblxuICAgIC8vIC0tPiBQcml2YXRlIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9kYXJrTW9kZUVuYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Nzc1Byb3BlcnR5OiBzdHJpbmcgPSBDU1NfUFJPUDtcbiAgICBwcml2YXRlIF9zdG9yYWdlS2V5OiBzdHJpbmcgPSBTVE9SQUdFX0tFWTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXJrIG1vZGUgY2hhbmdlcy5cbiAgICAgKiBAdHlwZVBhcmFtIEV2ZW50RW1pdHRlcjxib29sZWFuPiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGRhcmtNb2RlRW5hYmxlZCgpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IERhcmtNb2RlU2VydmljZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gX2RvY3VtZW50IHRoZSByZWZlcmVuY2UgdG8gdGhlIERvY3VtZW50IHNpbmdsZXRvbi5cbiAgICAgKiBAcGFyYW0gY29uZmlnIHRoZSByZWZlcmVuY2UgdG8gdGhlIERhcmtNb2RlQ29uZmlnIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCwgQEluamVjdChEQVJLX01PREVfQ09ORklHKSBjb25maWc6IERhcmtNb2RlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuaW5pdERhcmtNb2RlKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9vZ2xlcyB0aGUgZGFyayBtb2RlIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVEYXJrTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGFya01vZGVFbmJsZWQgPyB0aGlzLmRpc2FibGVEYXJrTW9kZSgpIDogdGhpcy5lbmFibGVEYXJrTW9kZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhcmsgbW9kZSBzdGF0ZSB0byBhY3RpdmUuXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldERhcmtNb2RlKEFERF9BQ1RJT04pO1xuICAgICAgICB0aGlzLnNldFN0b3JlZERhcmtNb2RlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGFyayBtb2RlIHN0YXRlIHRvIGluYWN0aXZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNhYmxlRGFya01vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RGFya01vZGUoUkVNT1ZFX0FDVElPTik7XG4gICAgICAgIHRoaXMuc2V0U3RvcmVkRGFya01vZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgZGFyayBtb2RlIHN0YXRlIGlzIGFjdGl2ZSAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxuICAgICAqIEByZXR1cm5zIHRydWUgd2hldGhlciB0aGUgZGFyayBtb2RlIHN0YXRlIGlzIGFjdGl2ZTsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkYXJrTW9kZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXJrTW9kZUVuYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBkYXJrIG1vZGUgaW5mb3JtYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnZhbGlkYXRlU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5fc3RvcmFnZUtleSk7XG4gICAgfVxuXG4gICAgLy8gLS0+IFByaXZhdGUgbWV0aG9kc1xuICAgIHByaXZhdGUgaW5pdERhcmtNb2RlKGNvbmZpZzogRGFya01vZGVDb25maWcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGFya01vZGVFbmJsZWQgPSBjb25maWcuZGFya01vZGVFbmJsZWQgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nzc1Byb3BlcnR5ID0gY29uZmlnLmNzc1Byb3BlcnR5IHx8IENTU19QUk9QO1xuICAgICAgICB0aGlzLl9zdG9yYWdlS2V5ID0gY29uZmlnLnN0b3JhZ2VLZXkgfHwgU1RPUkFHRV9LRVk7XG4gICAgICAgIGlmICh0aGlzLl9kYXJrTW9kZUVuYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVEYXJrTW9kZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0U3RvcmVkRGFya01vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRldGVjdEJyb3dzZXJTZXR0aW5ncykgdGhpcy5pbml0QnJvd3Nlck1vZGUoKTtcbiAgICB9XG4gICAgXG4gICAgcHJpdmF0ZSBpbml0U3RvcmVkRGFya01vZGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nIHwgbnVsbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX3N0b3JhZ2VLZXkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBcInRydWVcIikgdGhpcy5lbmFibGVEYXJrTW9kZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RvcmVkRGFya01vZGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGE6IHN0cmluZyA9IFN0cmluZyh0aGlzLl9kYXJrTW9kZUVuYmxlZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3N0b3JhZ2VLZXksIGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGFya01vZGUoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0OiBET01Ub2tlbkxpc3QgPSB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gQUREX0FDVElPTikge1xuICAgICAgICAgICAgY2xhc3NMaXN0LmFkZCh0aGlzLl9jc3NQcm9wZXJ0eSk7XG4gICAgICAgICAgICB0aGlzLl9kYXJrTW9kZUVuYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBSRU1PVkVfQUNUSU9OKSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2Nzc1Byb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX2RhcmtNb2RlRW5ibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9kYXJrTW9kZUVuYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QnJvd3Nlck1vZGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZURhcmtNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFyay1tb2RlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9zZXJ2aWNlL3VpL2RhcmstbW9kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTNDLHlCQUF5QjtBQUN6QixNQUFNLFdBQVcsR0FBVyxlQUFlLENBQUM7QUFDNUMsTUFBTSxRQUFRLEdBQVcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLEtBQUssQ0FBQztBQUNqQyxNQUFNLGFBQWEsR0FBVyxRQUFRLENBQUM7QUE2QnZDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQW1CO0lBRTVDOzs7T0FHRztJQUNILGVBQWUsRUFBRSxLQUFLO0lBRXRCOzs7T0FHRztJQUNILHFCQUFxQixFQUFFLEtBQUs7SUFFNUI7OztPQUdHO0lBQ0gsV0FBVyxFQUFFLFFBQVE7SUFFckI7OztPQUdHO0lBQ0gsVUFBVSxFQUFFLFdBQVc7Q0FDMUIsQ0FBQztBQUtGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFheEI7Ozs7T0FJRztJQUNILFlBQXNDLFNBQW1CLEVBQTRCLE1BQXNCO1FBQXJFLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFoQnpELHlCQUF5QjtRQUNqQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsaUJBQVksR0FBVyxRQUFRLENBQUM7UUFDaEMsZ0JBQVcsR0FBVyxXQUFXLENBQUM7UUFFMUM7OztXQUdHO1FBQ2EsV0FBTSxHQUEwQixJQUFJLFlBQVksQ0FBVSxJQUFJLENBQUMsQ0FBQztRQVE1RSxJQUFJLENBQUMsWUFBWSxDQUFD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QUFDLE9BQU8sRUFBRTtZQUNoRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7SUFDTCxDQUFDOzs0R0FuSFEsZUFBZSxrQkFrQkosUUFBUSxhQUF1QyxnQkFBZ0I7Z0hBbEIxRSxlQUFlLGNBTFosTUFBTTsyRkFLVCxlQUFlO2tCQU4zQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBc0JnQixNQUFNOzJCQUFDLFFBQVE7OzBCQUFnQyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIC0tPiBJbnRlcm5hbCBjb25zdGFudHNcbmNvbnN0IFNUT1JBR0VfS0VZOiBzdHJpbmcgPSBcImRhcmstbW9kZS1rZXlcIjtcbmNvbnN0IENTU19QUk9QOiBzdHJpbmcgPSBcImRhcmstbW9kZVwiO1xuY29uc3QgQUREX0FDVElPTjogc3RyaW5nID0gXCJhZGRcIjtcbmNvbnN0IFJFTU9WRV9BQ1RJT046IHN0cmluZyA9IFwicmVtb3ZlXCI7XG5cbi8qKlxuICogRGVmaW5lcyBwcm9wZXJ0aWVzIGZvciB0aGUgRGFya01vZGVTZXJ2aWNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFya01vZGVDb25maWcge1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhcmsgbW9kZSBpcyBhY3RpdmF0ZWQgYnkgZGVmYXVsdCAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxuICAgICAqL1xuICAgIGRhcmtNb2RlRW5hYmxlZD86IGJvb2xlYW47XG4gICAgXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhcmsgbW9kZSB1c2VzIGJyb3dzZXIgc2V0dGluZ3MgKHRydWUpLCBvciBub3QgKGZhbHNlKS5cbiAgICAgKiBXaGVuIHRydWUsIHRoaXMgcHJvcGVydHkgb3ZlcnJpZGVzIHRoZSBkYXJrTW9kZUVuYWJsZWQgcHJvcGVydHkuXG4gICAgICovXG4gICAgZGV0ZWN0QnJvd3NlclNldHRpbmdzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENTUyBwcm9wZXJ0eSBuYW1lIHVzZWQgdG8gc2V0IHRoZSBkYXJrIG1vZGUgbG9vayBhbmQgZmVlbC5cbiAgICAgKi9cbiAgICBjc3NQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUga2V5IHZhbHVlIHVzZWQgdG8gcGVyc2lzdCB0aGUgZGFyayBtb2RlIHN0YXRlIHRvIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgc3RvcmFnZUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwcm92aWRlciBmb3IgdGhlIERhcmtNb2RlU2VydmljZSBjb25maWd1cmF0aW9uLiBZb3UgdHlwaWNhbGx5IGRlZmluZVxuICogdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIGluIHRoZSBtYWluIE5nTW9kdWxlIGRlY2xhcmF0aW9uIHRvIGluaXRpYWxpemUgdGhlIGFwcCBkYXJrIG1vZGU6XG4gKiBcbiAqIEBOZ01vZHVsZSh7XG4gKiAuLi5cbiAqIHByb3ZpZGVyczogW1xuICogICB7IHByb3ZpZGU6IERBUktfTU9ERV9DT05GSUcsIHVzZVZhbHVlOiB7IGVuYWJsZURhcmtNb2RlOiB0cnVlfSB9XG4gKiBdLFxuICogLi4uXG4gKiBzKTtcbiAqL1xuZXhwb3J0IGNvbnN0IERBUktfTU9ERV9DT05GSUc6IERhcmtNb2RlQ29uZmlnID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXJrIG1vZGUgdXNlcyBicm93c2VyIHNldHRpbmdzICh0cnVlKSwgb3Igbm90IChmYWxzZSkuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICAgKi9cbiAgICBkYXJrTW9kZUVuYWJsZWQ6IGZhbHNlLFxuICAgIFxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXJrIG1vZGUgdXNlcyBicm93c2VyIHNldHRpbmdzICh0cnVlKSwgb3Igbm90IChmYWxzZSkuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cbiAgICAgKi9cbiAgICBkZXRlY3RCcm93c2VyU2V0dGluZ3M6IGZhbHNlLFxuICAgIFxuICAgIC8qKlxuICAgICAqIENTUyBwcm9wZXJ0eSBuYW1lIHVzZWQgdG8gc2V0IHRoZSBkYXJrIG1vZGUgbG9vayBhbmQgZmVlbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzICdkYXJrLW1vZGUnLlxuICAgICAqL1xuICAgIGNzc1Byb3BlcnR5OiBDU1NfUFJPUCxcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSB2YWx1ZSB1c2VkIHRvIHBlcnNpc3QgdGhlIGRhcmsgbW9kZSBzdGF0ZSB0byBsb2NhbCBzdG9yYWdlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgJ2RhcmstbW9kZS1rZXknLlxuICAgICAqL1xuICAgIHN0b3JhZ2VLZXk6IFNUT1JBR0VfS0VZXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuLyoqXG4gKiBBIGxpZ2h0d2VpZ2h0IHNlcnZpY2UgdGhhdCBwcm92aWRlcyBEYXJrIE1vZGUgaW1wbGVtZW50YXRpb24gZm9yIHlvdXIgQW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERhcmtNb2RlU2VydmljZSB7XG5cbiAgICAvLyAtLT4gUHJpdmF0ZSBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfZGFya01vZGVFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY3NzUHJvcGVydHk6IHN0cmluZyA9IENTU19QUk9QO1xuICAgIHByaXZhdGUgX3N0b3JhZ2VLZXk6IHN0cmluZyA9IFNUT1JBR0VfS0VZO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhcmsgbW9kZSBjaGFuZ2VzLlxuICAgICAqIEB0eXBlUGFyYW0gRXZlbnRFbWl0dGVyPGJvb2xlYW4+IHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZGFya01vZGVFbmFibGVkKCkgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRGFya01vZGVTZXJ2aWNlIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBfZG9jdW1lbnQgdGhlIHJlZmVyZW5jZSB0byB0aGUgRG9jdW1lbnQgc2luZ2xldG9uLlxuICAgICAqIEBwYXJhbSBjb25maWcgdGhlIHJlZmVyZW5jZSB0byB0aGUgRGFya01vZGVDb25maWcgcHJvdmlkZXIuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LCBASW5qZWN0KERBUktfTU9ERV9DT05GSUcpIGNvbmZpZzogRGFya01vZGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5pbml0RGFya01vZGUoY29uZmlnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb29nbGVzIHRoZSBkYXJrIG1vZGUgc3RhdGUuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXJrTW9kZUVuYWJsZWQgPyB0aGlzLmRpc2FibGVEYXJrTW9kZSgpIDogdGhpcy5lbmFibGVEYXJrTW9kZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhcmsgbW9kZSBzdGF0ZSB0byBhY3RpdmUuXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldERhcmtNb2RlKEFERF9BQ1RJT04pO1xuICAgICAgICB0aGlzLnNldFN0b3JlZERhcmtNb2RlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGFyayBtb2RlIHN0YXRlIHRvIGluYWN0aXZlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNhYmxlRGFya01vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RGFya01vZGUoUkVNT1ZFX0FDVElPTik7XG4gICAgICAgIHRoaXMuc2V0U3RvcmVkRGFya01vZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgZGFyayBtb2RlIHN0YXRlIGlzIGFjdGl2ZSAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxuICAgICAqIEByZXR1cm5zIHRydWUgd2hldGhlciB0aGUgZGFyayBtb2RlIHN0YXRlIGlzIGFjdGl2ZTsgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkYXJrTW9kZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXJrTW9kZUVuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIENTUyBwcm9wZXJ0eSBhcyBkZWZpbmVkIGJ5IHRoZSBjb25maWcgcHJvdmlkZXIuXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIGdldENzc1Byb3BlcnR5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jc3NQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3RvcmFnZSBrZXkgYXMgZGVmaW5lZCBieSB0aGUgY29uZmlnIHByb3ZpZGVyLlxuICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3RvcmFnZSBrZXkuXG4gICAgICovXG4gICAgcHVibGljIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2VLZXk7XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGRhcmsgbW9kZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGludmFsaWRhdGVTdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9zdG9yYWdlS2V5KTtcbiAgICB9XG5cbiAgICAvLyAtLT4gUHJpdmF0ZSBtZXRob2RzXG4gICAgcHJpdmF0ZSBpbml0RGFya01vZGUoY29uZmlnOiBEYXJrTW9kZUNvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXJrTW9kZUVuYWJsZWQgPSBjb25maWcuZGFya01vZGVFbmFibGVkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLl9jc3NQcm9wZXJ0eSA9IGNvbmZpZy5jc3NQcm9wZXJ0eSB8fCBDU1NfUFJPUDtcbiAgICAgICAgdGhpcy5fc3RvcmFnZUtleSA9IGNvbmZpZy5zdG9yYWdlS2V5IHx8IFNUT1JBR0VfS0VZO1xuICAgICAgICBpZiAodGhpcy5fZGFya01vZGVFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZURhcmtNb2RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTdG9yZWREYXJrTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGV0ZWN0QnJvd3NlclNldHRpbmdzKSB0aGlzLmluaXRCcm93c2VyTW9kZSgpO1xuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIGluaXRTdG9yZWREYXJrTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwidHJ1ZVwiKSB0aGlzLmVuYWJsZURhcmtNb2RlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdG9yZWREYXJrTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YTogc3RyaW5nID0gU3RyaW5nKHRoaXMuX2RhcmtNb2RlRW5hYmxlZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3N0b3JhZ2VLZXksIGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGFya01vZGUoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xhc3NMaXN0OiBET01Ub2tlbkxpc3QgPSB0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gQUREX0FDVElPTikge1xuICAgICAgICAgICAgY2xhc3NMaXN0LmFkZCh0aGlzLl9jc3NQcm9wZXJ0eSk7XG4gICAgICAgICAgICB0aGlzLl9kYXJrTW9kZUVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gUkVNT1ZFX0FDVElPTikge1xuICAgICAgICAgICAgY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9jc3NQcm9wZXJ0eSk7XG4gICAgICAgICAgICB0aGlzLl9kYXJrTW9kZUVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2RhcmtNb2RlRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QnJvd3Nlck1vZGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
@@ -40,12 +40,12 @@ const DARK_MODE_CONFIG = {
40
40
  * Indicates whether the dark mode uses browser settings (true), or not (false).
41
41
  * Default value is false.
42
42
  */
43
- darkModeEnbled: false,
43
+ darkModeEnabled: false,
44
44
  /**
45
45
  * Indicates whether the dark mode uses browser settings (true), or not (false).
46
- * Default value is true.
46
+ * Default value is false.
47
47
  */
48
- detectBrowserSettings: true,
48
+ detectBrowserSettings: false,
49
49
  /**
50
50
  * CSS property name used to set the dark mode look and feel.
51
51
  * Default value is 'dark-mode'.
@@ -69,7 +69,7 @@ class DarkModeService {
69
69
  constructor(_document, config) {
70
70
  this._document = _document;
71
71
  // --> Private properties
72
- this._darkModeEnbled = false;
72
+ this._darkModeEnabled = false;
73
73
  this._cssProperty = CSS_PROP;
74
74
  this._storageKey = STORAGE_KEY;
75
75
  /**
@@ -83,7 +83,7 @@ class DarkModeService {
83
83
  * Toogles the dark mode state.
84
84
  */
85
85
  toggleDarkMode() {
86
- this._darkModeEnbled ? this.disableDarkMode() : this.enableDarkMode();
86
+ this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();
87
87
  }
88
88
  /**
89
89
  * Sets the dark mode state to active.
@@ -104,7 +104,21 @@ class DarkModeService {
104
104
  * @returns true whether the dark mode state is active; false otherwise.
105
105
  */
106
106
  darkModeEnabled() {
107
- return this._darkModeEnbled;
107
+ return this._darkModeEnabled;
108
+ }
109
+ /**
110
+ * Returns the value of the CSS property as defined by the config provider.
111
+ * @returns the value of the CSS property.
112
+ */
113
+ getCssProperty() {
114
+ return this._cssProperty;
115
+ }
116
+ /**
117
+ * Returns the value of the storage key as defined by the config provider.
118
+ * @returns the value of the storage key.
119
+ */
120
+ getStorageKey() {
121
+ return this._storageKey;
108
122
  }
109
123
  /**
110
124
  * Removes the dark mode information from local storage.
@@ -114,10 +128,10 @@ class DarkModeService {
114
128
  }
115
129
  // --> Private methods
116
130
  initDarkMode(config) {
117
- this._darkModeEnbled = config.darkModeEnbled || false;
131
+ this._darkModeEnabled = config.darkModeEnabled || false;
118
132
  this._cssProperty = config.cssProperty || CSS_PROP;
119
133
  this._storageKey = config.storageKey || STORAGE_KEY;
120
- if (this._darkModeEnbled) {
134
+ if (this._darkModeEnabled) {
121
135
  this.enableDarkMode();
122
136
  }
123
137
  else {
@@ -132,28 +146,25 @@ class DarkModeService {
132
146
  this.enableDarkMode();
133
147
  }
134
148
  setStoredDarkMode() {
135
- const data = String(this._darkModeEnbled);
149
+ const data = String(this._darkModeEnabled);
136
150
  localStorage.setItem(this._storageKey, data);
137
151
  }
138
152
  setDarkMode(action) {
139
153
  const classList = this._document.body.classList;
140
154
  if (action === ADD_ACTION) {
141
155
  classList.add(this._cssProperty);
142
- this._darkModeEnbled = true;
156
+ this._darkModeEnabled = true;
143
157
  }
144
158
  else if (action === REMOVE_ACTION) {
145
159
  classList.remove(this._cssProperty);
146
- this._darkModeEnbled = false;
160
+ this._darkModeEnabled = false;
147
161
  }
148
- this.change.emit(this._darkModeEnbled);
162
+ this.change.emit(this._darkModeEnabled);
149
163
  }
150
164
  initBrowserMode() {
151
165
  if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
152
166
  this.enableDarkMode();
153
167
  }
154
- else {
155
- this.disableDarkMode();
156
- }
157
168
  }
158
169
  }
159
170
  DarkModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DarkModeService, deps: [{ token: DOCUMENT }, { token: DARK_MODE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'safeHtml'})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","import { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n// --> Internal constants\nconst STORAGE_KEY: string = \"dark-mode-key\";\nconst CSS_PROP: string = \"dark-mode\";\nconst ADD_ACTION: string = \"add\";\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * Defines properties for the DarkModeService configuration.\n */\nexport interface DarkModeConfig {\n\n /**\n * Indicates whether the dark mode is activated by default (true), or not (false).\n */\n darkModeEnbled?: boolean;\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * When true, this property overrides the darkModeEnbled property.\n */\n detectBrowserSettings?: boolean;\n\n /**\n * CSS property name used to set the dark mode look and feel.\n */\n cssProperty?: string;\n\n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n */\n storageKey?: string;\n}\n\n/**\n * The default provider for the DarkModeService configuration. You typically define\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\n * \n * @NgModule({\n * ...\n * providers: [\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true} }\n * ],\n * ...\n * s);\n */\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n darkModeEnbled: false,\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is true.\n */\n detectBrowserSettings: true,\n \n /**\n * CSS property name used to set the dark mode look and feel.\n * Default value is 'dark-mode'.\n */\n cssProperty: CSS_PROP,\n \n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n * Default value is 'dark-mode-key'.\n */\n storageKey: STORAGE_KEY\n};\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n\n // --> Private properties\n private _darkModeEnbled: boolean = false;\n private _cssProperty: string = CSS_PROP;\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * @typeParam EventEmitter<boolean> the value returned by the darkModeEnabled() property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * Creates a new DarkModeService instance.\n * @param _document the reference to the Document singleton.\n * @param config the reference to the DarkModeConfig provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnbled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a boolean value that indicates the dark mode state is active (true), or not (false).\n * @returns true whether the dark mode state is active; false otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnbled;\n }\n\n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n\n // --> Private methods\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnbled = config.darkModeEnbled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnbled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n \n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === \"true\") this.enableDarkMode();\n }\n\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnbled);\n localStorage.setItem(this._storageKey, data);\n }\n\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnbled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnbled = false;\n }\n this.change.emit(this._darkModeEnbled);\n }\n\n private initBrowserMode(): void {\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n this.enableDarkMode();\n } else {\n this.disableDarkMode();\n }\n }\n}\n\n","import { NgModule } from '@angular/core';\r\nimport { SafeHtmlPipe } from './pipe/safe/safe-html.pipe';\r\nimport { DARK_MODE_CONFIG } from './service/ui/dark-mode.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SafeHtmlPipe\r\n ],\r\n providers: [\r\n { provide: DARK_MODE_CONFIG, useValue: DARK_MODE_CONFIG }\r\n ],\r\n exports: [\r\n SafeHtmlPipe\r\n ]\r\n})\r\nexport class AngularToolboxModule { }","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService {\n\n /**\n * The internal Subscription instances storage.\n */\n private _subMap: Map<String, Array<Subscription>> = new Map<String, Array<Subscription>>();\n\n /**\n * Stores a new Subscription instance associated with the specified reference.\n * \n * @param ref the reference for which to store a new Subscription instance.\n * @param subscription the Subscription instance to register.\n * @returns a reference to this SubscriptionService instance.\n */\n public register(ref: String, subscription: Subscription): SubscriptionService {\n if (!this._subMap.has(ref)) this._subMap.set(ref, []);\n this._subMap.get(ref)?.push(subscription);\n return this;\n }\n \n /**\n * Unsubscribes and removes all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove all Subscription instances.\n * @returns true whether the specified reference exists; false otherwise.\n */\n public clearAll(ref: String): boolean {\n let result: boolean = false;\n if (this._subMap.has(ref)) {\n this._subMap.get(ref)?.forEach(subscription => subscription.unsubscribe());\n this._subMap.delete(ref);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove get Subscription instances.\n * @returns all Subscription instances associated with the specified reference, or whether\n * the specified reference does not exists.\n */\n public get(ref: String): Array<Subscription> | null {\n return this._subMap.get(ref) || null;\n }\n}\n","/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/pipe';\nexport * from './lib/service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'safeHtml'})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","import { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n// --> Internal constants\nconst STORAGE_KEY: string = \"dark-mode-key\";\nconst CSS_PROP: string = \"dark-mode\";\nconst ADD_ACTION: string = \"add\";\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * Defines properties for the DarkModeService configuration.\n */\nexport interface DarkModeConfig {\n\n /**\n * Indicates whether the dark mode is activated by default (true), or not (false).\n */\n darkModeEnabled?: boolean;\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * When true, this property overrides the darkModeEnabled property.\n */\n detectBrowserSettings?: boolean;\n\n /**\n * CSS property name used to set the dark mode look and feel.\n */\n cssProperty?: string;\n\n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n */\n storageKey?: string;\n}\n\n/**\n * The default provider for the DarkModeService configuration. You typically define\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\n * \n * @NgModule({\n * ...\n * providers: [\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true} }\n * ],\n * ...\n * s);\n */\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n darkModeEnabled: false,\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n detectBrowserSettings: false,\n \n /**\n * CSS property name used to set the dark mode look and feel.\n * Default value is 'dark-mode'.\n */\n cssProperty: CSS_PROP,\n \n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n * Default value is 'dark-mode-key'.\n */\n storageKey: STORAGE_KEY\n};\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n\n // --> Private properties\n private _darkModeEnabled: boolean = false;\n private _cssProperty: string = CSS_PROP;\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * @typeParam EventEmitter<boolean> the value returned by the darkModeEnabled() property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * Creates a new DarkModeService instance.\n * @param _document the reference to the Document singleton.\n * @param config the reference to the DarkModeConfig provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a boolean value that indicates the dark mode state is active (true), or not (false).\n * @returns true whether the dark mode state is active; false otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnabled;\n }\n\n /**\n * Returns the value of the CSS property as defined by the config provider.\n * @returns the value of the CSS property.\n */\n public getCssProperty(): string {\n return this._cssProperty;\n }\n\n /**\n * Returns the value of the storage key as defined by the config provider.\n * @returns the value of the storage key.\n */\n public getStorageKey(): string {\n return this._storageKey;\n }\n \n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n\n // --> Private methods\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnabled = config.darkModeEnabled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnabled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n \n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === \"true\") this.enableDarkMode();\n }\n\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnabled);\n localStorage.setItem(this._storageKey, data);\n }\n\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnabled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnabled = false;\n }\n this.change.emit(this._darkModeEnabled);\n }\n\n private initBrowserMode(): void {\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n this.enableDarkMode();\n }\n }\n}\n\n","import { NgModule } from '@angular/core';\r\nimport { SafeHtmlPipe } from './pipe/safe/safe-html.pipe';\r\nimport { DARK_MODE_CONFIG } from './service/ui/dark-mode.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SafeHtmlPipe\r\n ],\r\n providers: [\r\n { provide: DARK_MODE_CONFIG, useValue: DARK_MODE_CONFIG }\r\n ],\r\n exports: [\r\n SafeHtmlPipe\r\n ]\r\n})\r\nexport class AngularToolboxModule { }","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService {\n\n /**\n * The internal Subscription instances storage.\n */\n private _subMap: Map<String, Array<Subscription>> = new Map<String, Array<Subscription>>();\n\n /**\n * Stores a new Subscription instance associated with the specified reference.\n * \n * @param ref the reference for which to store a new Subscription instance.\n * @param subscription the Subscription instance to register.\n * @returns a reference to this SubscriptionService instance.\n */\n public register(ref: String, subscription: Subscription): SubscriptionService {\n if (!this._subMap.has(ref)) this._subMap.set(ref, []);\n this._subMap.get(ref)?.push(subscription);\n return this;\n }\n \n /**\n * Unsubscribes and removes all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove all Subscription instances.\n * @returns true whether the specified reference exists; false otherwise.\n */\n public clearAll(ref: String): boolean {\n let result: boolean = false;\n if (this._subMap.has(ref)) {\n this._subMap.get(ref)?.forEach(subscription => subscription.unsubscribe());\n this._subMap.delete(ref);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove get Subscription instances.\n * @returns all Subscription instances associated with the specified reference, or whether\n * the specified reference does not exists.\n */\n public get(ref: String): Array<Subscription> | null {\n return this._subMap.get(ref) || null;\n }\n}\n","/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/pipe';\nexport * from './lib/service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -40,12 +40,12 @@ const DARK_MODE_CONFIG = {
40
40
  * Indicates whether the dark mode uses browser settings (true), or not (false).
41
41
  * Default value is false.
42
42
  */
43
- darkModeEnbled: false,
43
+ darkModeEnabled: false,
44
44
  /**
45
45
  * Indicates whether the dark mode uses browser settings (true), or not (false).
46
- * Default value is true.
46
+ * Default value is false.
47
47
  */
48
- detectBrowserSettings: true,
48
+ detectBrowserSettings: false,
49
49
  /**
50
50
  * CSS property name used to set the dark mode look and feel.
51
51
  * Default value is 'dark-mode'.
@@ -69,7 +69,7 @@ class DarkModeService {
69
69
  constructor(_document, config) {
70
70
  this._document = _document;
71
71
  // --> Private properties
72
- this._darkModeEnbled = false;
72
+ this._darkModeEnabled = false;
73
73
  this._cssProperty = CSS_PROP;
74
74
  this._storageKey = STORAGE_KEY;
75
75
  /**
@@ -83,7 +83,7 @@ class DarkModeService {
83
83
  * Toogles the dark mode state.
84
84
  */
85
85
  toggleDarkMode() {
86
- this._darkModeEnbled ? this.disableDarkMode() : this.enableDarkMode();
86
+ this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();
87
87
  }
88
88
  /**
89
89
  * Sets the dark mode state to active.
@@ -104,7 +104,21 @@ class DarkModeService {
104
104
  * @returns true whether the dark mode state is active; false otherwise.
105
105
  */
106
106
  darkModeEnabled() {
107
- return this._darkModeEnbled;
107
+ return this._darkModeEnabled;
108
+ }
109
+ /**
110
+ * Returns the value of the CSS property as defined by the config provider.
111
+ * @returns the value of the CSS property.
112
+ */
113
+ getCssProperty() {
114
+ return this._cssProperty;
115
+ }
116
+ /**
117
+ * Returns the value of the storage key as defined by the config provider.
118
+ * @returns the value of the storage key.
119
+ */
120
+ getStorageKey() {
121
+ return this._storageKey;
108
122
  }
109
123
  /**
110
124
  * Removes the dark mode information from local storage.
@@ -114,10 +128,10 @@ class DarkModeService {
114
128
  }
115
129
  // --> Private methods
116
130
  initDarkMode(config) {
117
- this._darkModeEnbled = config.darkModeEnbled || false;
131
+ this._darkModeEnabled = config.darkModeEnabled || false;
118
132
  this._cssProperty = config.cssProperty || CSS_PROP;
119
133
  this._storageKey = config.storageKey || STORAGE_KEY;
120
- if (this._darkModeEnbled) {
134
+ if (this._darkModeEnabled) {
121
135
  this.enableDarkMode();
122
136
  }
123
137
  else {
@@ -132,28 +146,25 @@ class DarkModeService {
132
146
  this.enableDarkMode();
133
147
  }
134
148
  setStoredDarkMode() {
135
- const data = String(this._darkModeEnbled);
149
+ const data = String(this._darkModeEnabled);
136
150
  localStorage.setItem(this._storageKey, data);
137
151
  }
138
152
  setDarkMode(action) {
139
153
  const classList = this._document.body.classList;
140
154
  if (action === ADD_ACTION) {
141
155
  classList.add(this._cssProperty);
142
- this._darkModeEnbled = true;
156
+ this._darkModeEnabled = true;
143
157
  }
144
158
  else if (action === REMOVE_ACTION) {
145
159
  classList.remove(this._cssProperty);
146
- this._darkModeEnbled = false;
160
+ this._darkModeEnabled = false;
147
161
  }
148
- this.change.emit(this._darkModeEnbled);
162
+ this.change.emit(this._darkModeEnabled);
149
163
  }
150
164
  initBrowserMode() {
151
165
  if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
152
166
  this.enableDarkMode();
153
167
  }
154
- else {
155
- this.disableDarkMode();
156
- }
157
168
  }
158
169
  }
159
170
  DarkModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DarkModeService, deps: [{ token: DOCUMENT }, { token: DARK_MODE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'safeHtml'})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","import { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n// --> Internal constants\nconst STORAGE_KEY: string = \"dark-mode-key\";\nconst CSS_PROP: string = \"dark-mode\";\nconst ADD_ACTION: string = \"add\";\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * Defines properties for the DarkModeService configuration.\n */\nexport interface DarkModeConfig {\n\n /**\n * Indicates whether the dark mode is activated by default (true), or not (false).\n */\n darkModeEnbled?: boolean;\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * When true, this property overrides the darkModeEnbled property.\n */\n detectBrowserSettings?: boolean;\n\n /**\n * CSS property name used to set the dark mode look and feel.\n */\n cssProperty?: string;\n\n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n */\n storageKey?: string;\n}\n\n/**\n * The default provider for the DarkModeService configuration. You typically define\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\n * \n * @NgModule({\n * ...\n * providers: [\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true} }\n * ],\n * ...\n * s);\n */\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n darkModeEnbled: false,\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is true.\n */\n detectBrowserSettings: true,\n \n /**\n * CSS property name used to set the dark mode look and feel.\n * Default value is 'dark-mode'.\n */\n cssProperty: CSS_PROP,\n \n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n * Default value is 'dark-mode-key'.\n */\n storageKey: STORAGE_KEY\n};\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n\n // --> Private properties\n private _darkModeEnbled: boolean = false;\n private _cssProperty: string = CSS_PROP;\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * @typeParam EventEmitter<boolean> the value returned by the darkModeEnabled() property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * Creates a new DarkModeService instance.\n * @param _document the reference to the Document singleton.\n * @param config the reference to the DarkModeConfig provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnbled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a boolean value that indicates the dark mode state is active (true), or not (false).\n * @returns true whether the dark mode state is active; false otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnbled;\n }\n\n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n\n // --> Private methods\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnbled = config.darkModeEnbled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnbled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n \n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === \"true\") this.enableDarkMode();\n }\n\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnbled);\n localStorage.setItem(this._storageKey, data);\n }\n\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnbled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnbled = false;\n }\n this.change.emit(this._darkModeEnbled);\n }\n\n private initBrowserMode(): void {\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n this.enableDarkMode();\n } else {\n this.disableDarkMode();\n }\n }\n}\n\n","import { NgModule } from '@angular/core';\r\nimport { SafeHtmlPipe } from './pipe/safe/safe-html.pipe';\r\nimport { DARK_MODE_CONFIG } from './service/ui/dark-mode.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SafeHtmlPipe\r\n ],\r\n providers: [\r\n { provide: DARK_MODE_CONFIG, useValue: DARK_MODE_CONFIG }\r\n ],\r\n exports: [\r\n SafeHtmlPipe\r\n ]\r\n})\r\nexport class AngularToolboxModule { }","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService {\n\n /**\n * The internal Subscription instances storage.\n */\n private _subMap: Map<String, Array<Subscription>> = new Map<String, Array<Subscription>>();\n\n /**\n * Stores a new Subscription instance associated with the specified reference.\n * \n * @param ref the reference for which to store a new Subscription instance.\n * @param subscription the Subscription instance to register.\n * @returns a reference to this SubscriptionService instance.\n */\n public register(ref: String, subscription: Subscription): SubscriptionService {\n if (!this._subMap.has(ref)) this._subMap.set(ref, []);\n this._subMap.get(ref)?.push(subscription);\n return this;\n }\n \n /**\n * Unsubscribes and removes all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove all Subscription instances.\n * @returns true whether the specified reference exists; false otherwise.\n */\n public clearAll(ref: String): boolean {\n let result: boolean = false;\n if (this._subMap.has(ref)) {\n this._subMap.get(ref)?.forEach(subscription => subscription.unsubscribe());\n this._subMap.delete(ref);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove get Subscription instances.\n * @returns all Subscription instances associated with the specified reference, or whether\n * the specified reference does not exists.\n */\n public get(ref: String): Array<Subscription> | null {\n return this._subMap.get(ref) || null;\n }\n}\n","/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/pipe';\nexport * from './lib/service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'safeHtml'})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","import { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n// --> Internal constants\nconst STORAGE_KEY: string = \"dark-mode-key\";\nconst CSS_PROP: string = \"dark-mode\";\nconst ADD_ACTION: string = \"add\";\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * Defines properties for the DarkModeService configuration.\n */\nexport interface DarkModeConfig {\n\n /**\n * Indicates whether the dark mode is activated by default (true), or not (false).\n */\n darkModeEnabled?: boolean;\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * When true, this property overrides the darkModeEnabled property.\n */\n detectBrowserSettings?: boolean;\n\n /**\n * CSS property name used to set the dark mode look and feel.\n */\n cssProperty?: string;\n\n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n */\n storageKey?: string;\n}\n\n/**\n * The default provider for the DarkModeService configuration. You typically define\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\n * \n * @NgModule({\n * ...\n * providers: [\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true} }\n * ],\n * ...\n * s);\n */\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n darkModeEnabled: false,\n \n /**\n * Indicates whether the dark mode uses browser settings (true), or not (false).\n * Default value is false.\n */\n detectBrowserSettings: false,\n \n /**\n * CSS property name used to set the dark mode look and feel.\n * Default value is 'dark-mode'.\n */\n cssProperty: CSS_PROP,\n \n /**\n * Reference to the key value used to persist the dark mode state to local storage.\n * Default value is 'dark-mode-key'.\n */\n storageKey: STORAGE_KEY\n};\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n\n // --> Private properties\n private _darkModeEnabled: boolean = false;\n private _cssProperty: string = CSS_PROP;\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * @typeParam EventEmitter<boolean> the value returned by the darkModeEnabled() property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * Creates a new DarkModeService instance.\n * @param _document the reference to the Document singleton.\n * @param config the reference to the DarkModeConfig provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a boolean value that indicates the dark mode state is active (true), or not (false).\n * @returns true whether the dark mode state is active; false otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnabled;\n }\n\n /**\n * Returns the value of the CSS property as defined by the config provider.\n * @returns the value of the CSS property.\n */\n public getCssProperty(): string {\n return this._cssProperty;\n }\n\n /**\n * Returns the value of the storage key as defined by the config provider.\n * @returns the value of the storage key.\n */\n public getStorageKey(): string {\n return this._storageKey;\n }\n \n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n\n // --> Private methods\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnabled = config.darkModeEnabled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnabled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n \n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === \"true\") this.enableDarkMode();\n }\n\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnabled);\n localStorage.setItem(this._storageKey, data);\n }\n\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnabled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnabled = false;\n }\n this.change.emit(this._darkModeEnabled);\n }\n\n private initBrowserMode(): void {\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n this.enableDarkMode();\n }\n }\n}\n\n","import { NgModule } from '@angular/core';\r\nimport { SafeHtmlPipe } from './pipe/safe/safe-html.pipe';\r\nimport { DARK_MODE_CONFIG } from './service/ui/dark-mode.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SafeHtmlPipe\r\n ],\r\n providers: [\r\n { provide: DARK_MODE_CONFIG, useValue: DARK_MODE_CONFIG }\r\n ],\r\n exports: [\r\n SafeHtmlPipe\r\n ]\r\n})\r\nexport class AngularToolboxModule { }","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService {\n\n /**\n * The internal Subscription instances storage.\n */\n private _subMap: Map<String, Array<Subscription>> = new Map<String, Array<Subscription>>();\n\n /**\n * Stores a new Subscription instance associated with the specified reference.\n * \n * @param ref the reference for which to store a new Subscription instance.\n * @param subscription the Subscription instance to register.\n * @returns a reference to this SubscriptionService instance.\n */\n public register(ref: String, subscription: Subscription): SubscriptionService {\n if (!this._subMap.has(ref)) this._subMap.set(ref, []);\n this._subMap.get(ref)?.push(subscription);\n return this;\n }\n \n /**\n * Unsubscribes and removes all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove all Subscription instances.\n * @returns true whether the specified reference exists; false otherwise.\n */\n public clearAll(ref: String): boolean {\n let result: boolean = false;\n if (this._subMap.has(ref)) {\n this._subMap.get(ref)?.forEach(subscription => subscription.unsubscribe());\n this._subMap.delete(ref);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all Subscription instances associated with the specified reference.\n * \n * @param ref the reference for which to remove get Subscription instances.\n * @returns all Subscription instances associated with the specified reference, or whether\n * the specified reference does not exists.\n */\n public get(ref: String): Array<Subscription> | null {\n return this._subMap.get(ref) || null;\n }\n}\n","/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/pipe';\nexport * from './lib/service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -7,10 +7,10 @@ export interface DarkModeConfig {
7
7
  /**
8
8
  * Indicates whether the dark mode is activated by default (true), or not (false).
9
9
  */
10
- darkModeEnbled?: boolean;
10
+ darkModeEnabled?: boolean;
11
11
  /**
12
12
  * Indicates whether the dark mode uses browser settings (true), or not (false).
13
- * When true, this property overrides the darkModeEnbled property.
13
+ * When true, this property overrides the darkModeEnabled property.
14
14
  */
15
15
  detectBrowserSettings?: boolean;
16
16
  /**
@@ -37,7 +37,7 @@ export interface DarkModeConfig {
37
37
  export declare const DARK_MODE_CONFIG: DarkModeConfig;
38
38
  export declare class DarkModeService {
39
39
  private _document;
40
- private _darkModeEnbled;
40
+ private _darkModeEnabled;
41
41
  private _cssProperty;
42
42
  private _storageKey;
43
43
  /**
@@ -68,6 +68,16 @@ export declare class DarkModeService {
68
68
  * @returns true whether the dark mode state is active; false otherwise.
69
69
  */
70
70
  darkModeEnabled(): boolean;
71
+ /**
72
+ * Returns the value of the CSS property as defined by the config provider.
73
+ * @returns the value of the CSS property.
74
+ */
75
+ getCssProperty(): string;
76
+ /**
77
+ * Returns the value of the storage key as defined by the config provider.
78
+ * @returns the value of the storage key.
79
+ */
80
+ getStorageKey(): string;
71
81
  /**
72
82
  * Removes the dark mode information from local storage.
73
83
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-toolbox",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.1.0",
6
6
  "@angular/core": "^15.1.0"