ngx-mat-table-multi-sort 18.2.1 → 18.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,7 +22,7 @@ An Angular library that adds multi-sort capability to the Angular Material table
22
22
 
23
23
  **Prerequisite:** You have created an application using a supported version of Angular and Angular Material
24
24
 
25
- 1. In your Angular application run `npm install ngx-mat-table-multi-sort` to add the library to your dependencies
25
+ 1. In your Angular application run `pnpm install ngx-mat-table-multi-sort` to add the library to your dependencies
26
26
  1. As this library is using Material, add the following to the `head` element of your `index.html`:
27
27
 
28
28
  ```html
@@ -55,8 +55,8 @@ Enjoy multi-sorting your Angular Material data table!
55
55
  The demo application is hosted on [GitHub pages](https://pgerke.github.io/ngx-mat-table-multi-sort/). You can also clone the repository and run the demo locally.
56
56
 
57
57
  1. Clone the repository to your local machine
58
- 1. Run `npm install` to restore the dependencies
59
- 1. Start the demo application by running `npm run start:demo`
58
+ 1. Run `pnpm install` to restore the dependencies
59
+ 1. Start the demo application by running `pnpm run start:demo`
60
60
  1. When compilation is completed, the application is running on `http://localhost:4200`
61
61
 
62
62
  ## License
@@ -41,9 +41,10 @@ export const SORT_PERSISTENCE_ENABLED = new InjectionToken("SORT_PERSISTENCE_ENA
41
41
  export const SORT_PERSISTENCE_KEY = new InjectionToken("SORT_PERSISTENCE_KEY");
42
42
  export class MatMultiSortDirective extends MatSort {
43
43
  isPersistenceEnabled;
44
- key;
44
+ initialKey;
45
45
  storage;
46
46
  persistenceChanged = new EventEmitter();
47
+ _key;
47
48
  /**
48
49
  * A writable signal that holds an array of Sort objects.
49
50
  * This signal is used to manage the sorting state of the table.
@@ -51,13 +52,21 @@ export class MatMultiSortDirective extends MatSort {
51
52
  * @readonly
52
53
  */
53
54
  _sorts = signal([]);
54
- constructor(isPersistenceEnabled, key, storage, defaultOptions) {
55
+ /**
56
+ * Gets the key used for column configuration persistence.
57
+ *
58
+ * @returns {string} The key used for column configuration persistence.
59
+ */
60
+ get key() {
61
+ return this._key;
62
+ }
63
+ constructor(isPersistenceEnabled, initialKey, storage, defaultOptions) {
55
64
  super(defaultOptions);
56
65
  this.isPersistenceEnabled = isPersistenceEnabled;
57
- this.key = key;
66
+ this.initialKey = initialKey;
58
67
  this.storage = storage;
59
68
  this.isPersistenceEnabled ??= true;
60
- this.key ??= "mat-table-persistence-sort";
69
+ this._key = initialKey ?? "mat-table-persistence-sort";
61
70
  this.storage ??= localStorage;
62
71
  if (this.isPersistenceEnabled) {
63
72
  const sortsSerialized = this.storage.getItem(this.key);
@@ -182,6 +191,23 @@ export class MatMultiSortDirective extends MatSort {
182
191
  if (this.isPersistenceEnabled)
183
192
  this.storage.setItem(this.key, JSON.stringify(this._sorts()));
184
193
  }
194
+ /**
195
+ * Sets the persistence key for storing sort settings and optionally overwrites the persisted value.
196
+ *
197
+ * @param key - The key to be used for persisting sort settings.
198
+ * @param overwritePersistedValue - If true, the current sort settings will be persisted immediately, overwriting any existing value. Defaults to false.
199
+ *
200
+ * @returns void
201
+ */
202
+ setPersistenceKey(key, overwritePersistedValue = false) {
203
+ this._key = key;
204
+ if (overwritePersistedValue) {
205
+ this.persistSortSettings();
206
+ return;
207
+ }
208
+ const sortsSerialized = this.storage.getItem(this.key);
209
+ this._sorts.set(sortsSerialized ? JSON.parse(sortsSerialized) : []);
210
+ }
185
211
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatMultiSortDirective, deps: [{ token: SORT_PERSISTENCE_ENABLED, optional: true }, { token: SORT_PERSISTENCE_KEY, optional: true }, { token: SORT_PERSISTENCE_STORAGE, optional: true }, { token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
186
212
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: MatMultiSortDirective, isStandalone: true, selector: "[matMultiSort]", outputs: { persistenceChanged: "persistenceChanged" }, host: { classAttribute: "mat-sort" }, exportAs: ["matMultiSort"], usesInheritance: true, ngImport: i0 });
187
213
  }
@@ -218,4 +244,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
218
244
  }] }], propDecorators: { persistenceChanged: [{
219
245
  type: Output
220
246
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LW11bHRpLXNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXQtbXVsdGktc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsT0FBTyxHQUtSLE1BQU0sd0JBQXdCLENBQUM7O0FBRWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsMEJBQTBCLENBQzNCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixDQUMzQixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQ3BELHNCQUFzQixDQUN2QixDQUFDO0FBVUYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLE9BQU87SUFldkM7SUFHVTtJQUdBO0lBbkJGLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFakU7Ozs7O09BS0c7SUFDTSxNQUFNLEdBQTJCLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVyRCxZQUdTLG9CQUE2QixFQUduQixHQUFXLEVBR1gsT0FBZ0IsRUFHakMsY0FBa0Q7UUFFbEQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBWGYseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFTO1FBR25CLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFHWCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBT2pDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsS0FBSyw0QkFBNEIsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCx3SUFBd0k7UUFDeEksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0RCxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUM3RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEVBQVU7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxFQUFVO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVEsSUFBSSxDQUFDLFFBQXFCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0MscUVBQXFFO1FBQ3JFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQzthQUFNLENBQUM7WUFDTix3RkFBd0Y7WUFDeEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxlQUFlLENBQUMsRUFBVTtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXRCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixDQUFDLGFBQXFCLEVBQUUsWUFBb0I7UUFDakUsSUFBSSxhQUFhLEtBQUssWUFBWTtZQUFFLE9BQU87UUFFM0MsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksbUJBQW1CLENBQUMsRUFBVTtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXRCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLCtKQUErSjtRQUMvSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUN6QyxFQUFFLEVBQUUsRUFBRTtZQUNOLFlBQVksRUFBRSxJQUFJO1NBQ0osQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO3dHQW5LVSxxQkFBcUIsa0JBY3RCLHdCQUF3Qiw2QkFHeEIsb0JBQW9CLDZCQUdwQix3QkFBd0IsNkJBR3hCLHdCQUF3Qjs0RkF2QnZCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFSakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxVQUFVO3FCQUNsQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQWNJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsd0JBQXdCOzswQkFFL0IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxvQkFBb0I7OzBCQUUzQixRQUFROzswQkFDUixNQUFNOzJCQUFDLHdCQUF3Qjs7MEJBRS9CLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsd0JBQXdCO3lDQXJCakIsa0JBQWtCO3NCQURsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBNQVRfU09SVF9ERUZBVUxUX09QVElPTlMsXG4gIE1hdFNvcnQsXG4gIE1hdFNvcnRhYmxlLFxuICBNYXRTb3J0RGVmYXVsdE9wdGlvbnMsXG4gIFNvcnQsXG4gIFNvcnREaXJlY3Rpb24sXG59IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zb3J0XCI7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgc3RvcmFnZSBtZWNoYW5pc20gdXNlZCB0byBwZXJzaXN0IHNvcnRpbmcgc3RhdGUuXG4gKlxuICogVGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gZm9yIHBlcnNpc3RpbmdcbiAqIHRoZSBzb3J0aW5nIHN0YXRlIG9mIGEgdGFibGUuIEJ5IGRlZmF1bHQsIGl0IGNhbiBiZSBzZXQgdG8gdXNlIGxvY2FsU3RvcmFnZSwgc2Vzc2lvblN0b3JhZ2UsXG4gKiBvciBhbnkgb3RoZXIgc3RvcmFnZSBtZWNoYW5pc20gdGhhdCBpbXBsZW1lbnRzIHRoZSBTdG9yYWdlIGludGVyZmFjZS5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBTT1JUX1BFUlNJU1RFTkNFX1NUT1JBR0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RvcmFnZT4oXG4gIFwiU09SVF9QRVJTSVNURU5DRV9TVE9SQUdFXCJcbik7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHBlcnNpc3RlbmNlIG9mIHNvcnRpbmcgc3RhdGUuXG4gKlxuICogVGhpcyB0b2tlbiBjYW4gYmUgcHJvdmlkZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gc3lzdGVtXG4gKiB0byBjb250cm9sIHdoZXRoZXIgdGhlIHNvcnRpbmcgc3RhdGUgb2YgYSB0YWJsZSBzaG91bGQgYmUgcGVyc2lzdGVkIGFjcm9zc1xuICogc2Vzc2lvbnMgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUbyBlbmFibGUgc29ydCBwZXJzaXN0ZW5jZTpcbiAqIHByb3ZpZGVyczogW1xuICogICB7IHByb3ZpZGU6IFNPUlRfUEVSU0lTVEVOQ0VfRU5BQkxFRCwgdXNlVmFsdWU6IHRydWUgfVxuICogXVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUbyBkaXNhYmxlIHNvcnQgcGVyc2lzdGVuY2U6XG4gKiBwcm92aWRlcnM6IFtcbiAqICAgeyBwcm92aWRlOiBTT1JUX1BFUlNJU1RFTkNFX0VOQUJMRUQsIHVzZVZhbHVlOiBmYWxzZSB9XG4gKiBdXG4gKi9cbmV4cG9ydCBjb25zdCBTT1JUX1BFUlNJU1RFTkNFX0VOQUJMRUQgPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oXG4gIFwiU09SVF9QRVJTSVNURU5DRV9FTkFCTEVEXCJcbik7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUga2V5IHVzZWQgdG8gcGVyc2lzdCBzb3J0aW5nIHN0YXRlLlxuICpcbiAqIFRoaXMgdG9rZW4gY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIGN1c3RvbSBrZXkgZm9yIHN0b3JpbmdcbiAqIHRoZSBzb3J0aW5nIHN0YXRlIGluIGEgcGVyc2lzdGVuY2UgbGF5ZXIsIHN1Y2ggYXMgbG9jYWwgc3RvcmFnZVxuICogb3IgYSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPUlRfUEVSU0lTVEVOQ0VfS0VZID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXG4gIFwiU09SVF9QRVJTSVNURU5DRV9LRVlcIlxuKTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIlttYXRNdWx0aVNvcnRdXCIsXG4gIGV4cG9ydEFzOiBcIm1hdE11bHRpU29ydFwiLFxuICBob3N0OiB7XG4gICAgY2xhc3M6IFwibWF0LXNvcnRcIixcbiAgfSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TXVsdGlTb3J0RGlyZWN0aXZlIGV4dGVuZHMgTWF0U29ydCB7XG4gIEBPdXRwdXQoKVxuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydFtdPigpO1xuXG4gIC8qKlxuICAgKiBBIHdyaXRhYmxlIHNpZ25hbCB0aGF0IGhvbGRzIGFuIGFycmF5IG9mIFNvcnQgb2JqZWN0cy5cbiAgICogVGhpcyBzaWduYWwgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHNvcnRpbmcgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIHJlYWRvbmx5IF9zb3J0czogV3JpdGFibGVTaWduYWw8U29ydFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNPUlRfUEVSU0lTVEVOQ0VfRU5BQkxFRClcbiAgICBwdWJsaWMgaXNQZXJzaXN0ZW5jZUVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNPUlRfUEVSU0lTVEVOQ0VfS0VZKVxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5OiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNPUlRfUEVSU0lTVEVOQ0VfU1RPUkFHRSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9TT1JUX0RFRkFVTFRfT1BUSU9OUylcbiAgICBkZWZhdWx0T3B0aW9ucz86IE1hdFNvcnREZWZhdWx0T3B0aW9ucyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVyc2lzdGVuY2VFbmFibGVkID8/PSB0cnVlO1xuICAgIHRoaXMua2V5ID8/PSBcIm1hdC10YWJsZS1wZXJzaXN0ZW5jZS1zb3J0XCI7XG4gICAgdGhpcy5zdG9yYWdlID8/PSBsb2NhbFN0b3JhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1BlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgY29uc3Qgc29ydHNTZXJpYWxpemVkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5rZXkpO1xuICAgICAgdGhpcy5fc29ydHMuc2V0KHNvcnRzU2VyaWFsaXplZCA/IEpTT04ucGFyc2Uoc29ydHNTZXJpYWxpemVkKSA6IFtdKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzb3J0Q2hhbmdlIGV2ZW50IGlzIG5vdCBlbWl0dGVkIHdoZW4gdGhlIF9zb3J0cyBzaWduYWwgaXMgdXBkYXRlZCBkaXJlY3RseSAoZS5nLiwgdGhpcy5fc29ydHMuc2V0KFtdKSkuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuX3NvcnRzKCkubGVuZ3RoO1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe1xuICAgICAgICBhY3RpdmU6IGxlbmd0aCA/IHRoaXMuX3NvcnRzKClbbGVuZ3RoIC0gMV0uYWN0aXZlIDogXCJcIixcbiAgICAgICAgZGlyZWN0aW9uOiBsZW5ndGggPyB0aGlzLl9zb3J0cygpW2xlbmd0aCAtIDFdLmRpcmVjdGlvbiA6IFwiXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc29ydCBkaXJlY3Rpb24gZm9yIGEgZ2l2ZW4gY29sdW1uIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGNvbHVtbiB0byBnZXQgdGhlIHNvcnQgZGlyZWN0aW9uIGZvci5cbiAgICogQHJldHVybnMgVGhlIHNvcnQgZGlyZWN0aW9uICgnYXNjJywgJ2Rlc2MnLCBvciAnJykgZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uIElELlxuICAgKi9cbiAgcHVibGljIGdldFNvcnREaXJlY3Rpb24oaWQ6IHN0cmluZyk6IFNvcnREaXJlY3Rpb24ge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLl9zb3J0cygpLmZpbmQoKGUpID0+IGUuYWN0aXZlID09PSBpZCk7XG4gICAgcmV0dXJuIHNvcnQgPyBzb3J0LmRpcmVjdGlvbiA6IFwiXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc29ydCBpbmRleCBvZiB0aGUgZ2l2ZW4gY29sdW1uIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGNvbHVtbiB0byBnZXQgdGhlIHNvcnQgaW5kZXggZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgc29ydCBpbmRleCBvZiB0aGUgY29sdW1uLCBvciAtMSBpZiB0aGUgY29sdW1uIGlzIG5vdCBhY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0U29ydEluZGV4KGlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb3J0cygpLmZpbmRJbmRleCgoZSkgPT4gZS5hY3RpdmUgPT09IGlkKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNvcnQoc29ydGFibGU6IE1hdFNvcnRhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmUgPSBzb3J0YWJsZS5pZDtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZ2V0U29ydERpcmVjdGlvbihzb3J0YWJsZS5pZCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFNvcnRJbmRleChzb3J0YWJsZS5pZCk7XG5cbiAgICAvLyBJZiB0aGUgY29sdW1uIGlzIG5vdCBhY3RpdmUsIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhY3RpdmUgY29sdW1ucy5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHNvcnRhYmxlLnN0YXJ0ID8gc29ydGFibGUuc3RhcnQgOiB0aGlzLnN0YXJ0O1xuICAgICAgdGhpcy5fc29ydHMoKS5wdXNoKHsgYWN0aXZlOiB0aGlzLmFjdGl2ZSwgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGNvbHVtbiBpcyBhY3RpdmUsIHVwZGF0ZSB0aGUgZGlyZWN0aW9uIG9yIHJlbW92ZSBpdCBpZiB0aGUgZGlyZWN0aW9uIGlzIGVtcHR5LlxuICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKHNvcnRhYmxlKTtcbiAgICAgIGlmICghdGhpcy5kaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fc29ydHMoKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc29ydHMoKVtpbmRleF0uZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeyBhY3RpdmU6IHRoaXMuYWN0aXZlLCBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uIH0pO1xuICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzb3J0IGxldmVsIGJ5IGl0cyBpZGVudGlmaWVyLlxuICAgKiBJZiB0aGUgc29ydCBsZXZlbCBpcyBub3QgZm91bmQsIHRoZSBtZXRob2QgcmV0dXJucyB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHNvcnQgbGV2ZWwgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVNvcnRMZXZlbChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFNvcnRJbmRleChpZCk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5fc29ydHMoKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5wZXJzaXN0U29ydFNldHRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVvcmRlcnMgdGhlIHNvcnQgbGV2ZWwgYnkgbW92aW5nIGFuIGl0ZW0gaW4gdGhlIHNvcnQgYXJyYXkgZnJvbSBhIHByZXZpb3VzIGluZGV4IHRvIGEgY3VycmVudCBpbmRleC5cbiAgICogSWYgdGhlIHByZXZpb3VzIGluZGV4IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGluZGV4LCB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHByZXZpb3VzSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gYmUgbW92ZWQuXG4gICAqIEBwYXJhbSBjdXJyZW50SW5kZXggLSBUaGUgaW5kZXggdG8gd2hpY2ggdGhlIGl0ZW0gc2hvdWxkIGJlIG1vdmVkLlxuICAgKi9cbiAgcHVibGljIHJlb3JkZXJTb3J0TGV2ZWwocHJldmlvdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSBjdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLl9zb3J0cygpLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHRoaXMuX3NvcnRzKClbY3VycmVudEluZGV4XSk7XG4gICAgdGhpcy5wZXJzaXN0U29ydFNldHRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc29ydCBkaXJlY3Rpb24gZm9yIHRoZSBnaXZlbiBjb2x1bW4gSUQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uIHRvIHRvZ2dsZSB0aGUgc29ydCBkaXJlY3Rpb24gZm9yLlxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlU29ydERpcmVjdGlvbihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFNvcnRJbmRleChpZCk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5hY3RpdmUgPSBpZDtcbiAgICAvLyBUaGUgdmFsdWUgb2YgdGhpcy5kaXJlY3Rpb24gaXMgdXNlZCBpbiB0aGUgZ2V0TmV4dFNvcnREaXJlY3Rpb24gbWV0aG9kLiBUaGF0J3Mgd2h5IGl0IGlzIG5lY2Vzc2FyeSBmb3IgaXQgdG8gYmUgc2V0IGJlZm9yZSB0aGUgY2FsbCB0byBnZXROZXh0U29ydERpcmVjdGlvbi5cbiAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZ2V0U29ydERpcmVjdGlvbihpZCk7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGRpc2FibGVDbGVhcjogdHJ1ZSxcbiAgICB9IGFzIE1hdFNvcnRhYmxlKTtcbiAgICB0aGlzLl9zb3J0cygpW2luZGV4XS5kaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbjtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7IGFjdGl2ZTogdGhpcy5hY3RpdmUsIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24gfSk7XG4gICAgdGhpcy5wZXJzaXN0U29ydFNldHRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uIHRvIHRvZ2dsZSB0aGUgc29ydCBkaXJlY3Rpb24gZm9yLlxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgY2xlYXJTb3J0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlID0gXCJcIjtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IFwiXCI7XG4gICAgdGhpcy5fc29ydHMuc2V0KFtdKTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U29ydFNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc2lzdGVuY2VDaGFuZ2VkLmVtaXQodGhpcy5fc29ydHMoKSk7XG4gICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW5jZUVuYWJsZWQpXG4gICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5fc29ydHMoKSkpO1xuICB9XG59XG4iXX0=
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LW11bHRpLXNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXQtbXVsdGktc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsT0FBTyxHQUtSLE1BQU0sd0JBQXdCLENBQUM7O0FBRWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsMEJBQTBCLENBQzNCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixDQUMzQixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQ3BELHNCQUFzQixDQUN2QixDQUFDO0FBVUYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLE9BQU87SUF5QnZDO0lBR0U7SUFHUTtJQTdCRixrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ3pELElBQUksQ0FBUztJQUVyQjs7Ozs7T0FLRztJQUNNLE1BQU0sR0FBMkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXJEOzs7O09BSUc7SUFDSCxJQUFXLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBR1Msb0JBQTZCLEVBRzNCLFVBQWtCLEVBR1YsT0FBZ0IsRUFHakMsY0FBa0Q7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QUFROzswQkFDUixNQUFNOzJCQUFDLG9CQUFvQjs7MEJBRTNCLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsd0JBQXdCOzswQkFFL0IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyx3QkFBd0I7eUNBL0JqQixrQkFBa0I7c0JBRGxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIE1BVF9TT1JUX0RFRkFVTFRfT1BUSU9OUyxcbiAgTWF0U29ydCxcbiAgTWF0U29ydGFibGUsXG4gIE1hdFNvcnREZWZhdWx0T3B0aW9ucyxcbiAgU29ydCxcbiAgU29ydERpcmVjdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NvcnRcIjtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSBzdG9yYWdlIG1lY2hhbmlzbSB1c2VkIHRvIHBlcnNpc3Qgc29ydGluZyBzdGF0ZS5cbiAqXG4gKiBUaGlzIHRva2VuIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYSBjdXN0b20gc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiBmb3IgcGVyc2lzdGluZ1xuICogdGhlIHNvcnRpbmcgc3RhdGUgb2YgYSB0YWJsZS4gQnkgZGVmYXVsdCwgaXQgY2FuIGJlIHNldCB0byB1c2UgbG9jYWxTdG9yYWdlLCBzZXNzaW9uU3RvcmFnZSxcbiAqIG9yIGFueSBvdGhlciBzdG9yYWdlIG1lY2hhbmlzbSB0aGF0IGltcGxlbWVudHMgdGhlIFN0b3JhZ2UgaW50ZXJmYWNlLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IFNPUlRfUEVSU0lTVEVOQ0VfU1RPUkFHRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdG9yYWdlPihcbiAgXCJTT1JUX1BFUlNJU1RFTkNFX1NUT1JBR0VcIlxuKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGVyc2lzdGVuY2Ugb2Ygc29ydGluZyBzdGF0ZS5cbiAqXG4gKiBUaGlzIHRva2VuIGNhbiBiZSBwcm92aWRlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBkZXBlbmRlbmN5IGluamVjdGlvbiBzeXN0ZW1cbiAqIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgc29ydGluZyBzdGF0ZSBvZiBhIHRhYmxlIHNob3VsZCBiZSBwZXJzaXN0ZWQgYWNyb3NzXG4gKiBzZXNzaW9ucyBvciBub3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRvIGVuYWJsZSBzb3J0IHBlcnNpc3RlbmNlOlxuICogcHJvdmlkZXJzOiBbXG4gKiAgIHsgcHJvdmlkZTogU09SVF9QRVJTSVNURU5DRV9FTkFCTEVELCB1c2VWYWx1ZTogdHJ1ZSB9XG4gKiBdXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRvIGRpc2FibGUgc29ydCBwZXJzaXN0ZW5jZTpcbiAqIHByb3ZpZGVyczogW1xuICogICB7IHByb3ZpZGU6IFNPUlRfUEVSU0lTVEVOQ0VfRU5BQkxFRCwgdXNlVmFsdWU6IGZhbHNlIH1cbiAqIF1cbiAqL1xuZXhwb3J0IGNvbnN0IFNPUlRfUEVSU0lTVEVOQ0VfRU5BQkxFRCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPihcbiAgXCJTT1JUX1BFUlNJU1RFTkNFX0VOQUJMRURcIlxuKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSBrZXkgdXNlZCB0byBwZXJzaXN0IHNvcnRpbmcgc3RhdGUuXG4gKlxuICogVGhpcyB0b2tlbiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIGtleSBmb3Igc3RvcmluZ1xuICogdGhlIHNvcnRpbmcgc3RhdGUgaW4gYSBwZXJzaXN0ZW5jZSBsYXllciwgc3VjaCBhcyBsb2NhbCBzdG9yYWdlXG4gKiBvciBhIGRhdGFiYXNlLlxuICovXG5leHBvcnQgY29uc3QgU09SVF9QRVJTSVNURU5DRV9LRVkgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcbiAgXCJTT1JUX1BFUlNJU1RFTkNFX0tFWVwiXG4pO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW21hdE11bHRpU29ydF1cIixcbiAgZXhwb3J0QXM6IFwibWF0TXVsdGlTb3J0XCIsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogXCJtYXQtc29ydFwiLFxuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRNdWx0aVNvcnREaXJlY3RpdmUgZXh0ZW5kcyBNYXRTb3J0IHtcbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVuY2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0W10+KCk7XG4gIHByaXZhdGUgX2tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHdyaXRhYmxlIHNpZ25hbCB0aGF0IGhvbGRzIGFuIGFycmF5IG9mIFNvcnQgb2JqZWN0cy5cbiAgICogVGhpcyBzaWduYWwgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHNvcnRpbmcgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIHJlYWRvbmx5IF9zb3J0czogV3JpdGFibGVTaWduYWw8U29ydFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGtleSB1c2VkIGZvciBjb2x1bW4gY29uZmlndXJhdGlvbiBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGtleSB1c2VkIGZvciBjb2x1bW4gY29uZmlndXJhdGlvbiBwZXJzaXN0ZW5jZS5cbiAgICovXG4gIHB1YmxpYyBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChTT1JUX1BFUlNJU1RFTkNFX0VOQUJMRUQpXG4gICAgcHVibGljIGlzUGVyc2lzdGVuY2VFbmFibGVkOiBib29sZWFuLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChTT1JUX1BFUlNJU1RFTkNFX0tFWSlcbiAgICByZWFkb25seSBpbml0aWFsS2V5OiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNPUlRfUEVSU0lTVEVOQ0VfU1RPUkFHRSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9TT1JUX0RFRkFVTFRfT1BUSU9OUylcbiAgICBkZWZhdWx0T3B0aW9ucz86IE1hdFNvcnREZWZhdWx0T3B0aW9ucyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVyc2lzdGVuY2VFbmFibGVkID8/PSB0cnVlO1xuICAgIHRoaXMuX2tleSA9IGluaXRpYWxLZXkgPz8gXCJtYXQtdGFibGUtcGVyc2lzdGVuY2Utc29ydFwiO1xuICAgIHRoaXMuc3RvcmFnZSA/Pz0gbG9jYWxTdG9yYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNvcnRzU2VyaWFsaXplZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5KTtcbiAgICAgIHRoaXMuX3NvcnRzLnNldChzb3J0c1NlcmlhbGl6ZWQgPyBKU09OLnBhcnNlKHNvcnRzU2VyaWFsaXplZCkgOiBbXSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgc29ydENoYW5nZSBldmVudCBpcyBub3QgZW1pdHRlZCB3aGVuIHRoZSBfc29ydHMgc2lnbmFsIGlzIHVwZGF0ZWQgZGlyZWN0bHkgKGUuZy4sIHRoaXMuX3NvcnRzLnNldChbXSkpLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLl9zb3J0cygpLmxlbmd0aDtcbiAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHtcbiAgICAgICAgYWN0aXZlOiBsZW5ndGggPyB0aGlzLl9zb3J0cygpW2xlbmd0aCAtIDFdLmFjdGl2ZSA6IFwiXCIsXG4gICAgICAgIGRpcmVjdGlvbjogbGVuZ3RoID8gdGhpcy5fc29ydHMoKVtsZW5ndGggLSAxXS5kaXJlY3Rpb24gOiBcIlwiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnBlcnNpc3RTb3J0U2V0dGluZ3MoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHNvcnQgZGlyZWN0aW9uIGZvciBhIGdpdmVuIGNvbHVtbiBJRC5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBjb2x1bW4gdG8gZ2V0IHRoZSBzb3J0IGRpcmVjdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSBzb3J0IGRpcmVjdGlvbiAoJ2FzYycsICdkZXNjJywgb3IgJycpIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBJRC5cbiAgICovXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGlkOiBzdHJpbmcpOiBTb3J0RGlyZWN0aW9uIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5fc29ydHMoKS5maW5kKChlKSA9PiBlLmFjdGl2ZSA9PT0gaWQpO1xuICAgIHJldHVybiBzb3J0ID8gc29ydC5kaXJlY3Rpb24gOiBcIlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNvcnQgaW5kZXggb2YgdGhlIGdpdmVuIGNvbHVtbiBJRC5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBjb2x1bW4gdG8gZ2V0IHRoZSBzb3J0IGluZGV4IGZvci5cbiAgICogQHJldHVybnMgVGhlIHNvcnQgaW5kZXggb2YgdGhlIGNvbHVtbiwgb3IgLTEgaWYgdGhlIGNvbHVtbiBpcyBub3QgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIGdldFNvcnRJbmRleChpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydHMoKS5maW5kSW5kZXgoKGUpID0+IGUuYWN0aXZlID09PSBpZCk7XG4gIH1cblxuICBvdmVycmlkZSBzb3J0KHNvcnRhYmxlOiBNYXRTb3J0YWJsZSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlID0gc29ydGFibGUuaWQ7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmdldFNvcnREaXJlY3Rpb24oc29ydGFibGUuaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRTb3J0SW5kZXgoc29ydGFibGUuaWQpO1xuXG4gICAgLy8gSWYgdGhlIGNvbHVtbiBpcyBub3QgYWN0aXZlLCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGNvbHVtbnMuXG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgdGhpcy5kaXJlY3Rpb24gPSBzb3J0YWJsZS5zdGFydCA/IHNvcnRhYmxlLnN0YXJ0IDogdGhpcy5zdGFydDtcbiAgICAgIHRoaXMuX3NvcnRzKCkucHVzaCh7IGFjdGl2ZTogdGhpcy5hY3RpdmUsIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBjb2x1bW4gaXMgYWN0aXZlLCB1cGRhdGUgdGhlIGRpcmVjdGlvbiBvciByZW1vdmUgaXQgaWYgdGhlIGRpcmVjdGlvbiBpcyBlbXB0eS5cbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihzb3J0YWJsZSk7XG4gICAgICBpZiAoIXRoaXMuZGlyZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3NvcnRzKCkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NvcnRzKClbaW5kZXhdLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHsgYWN0aXZlOiB0aGlzLmFjdGl2ZSwgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbiB9KTtcbiAgICB0aGlzLnBlcnNpc3RTb3J0U2V0dGluZ3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc29ydCBsZXZlbCBieSBpdHMgaWRlbnRpZmllci5cbiAgICogSWYgdGhlIHNvcnQgbGV2ZWwgaXMgbm90IGZvdW5kLCB0aGUgbWV0aG9kIHJldHVybnMgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzb3J0IGxldmVsIHRvIGJlIHJlbW92ZWQuXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVTb3J0TGV2ZWwoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRTb3J0SW5kZXgoaWQpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcblxuICAgIHRoaXMuX3NvcnRzKCkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlb3JkZXJzIHRoZSBzb3J0IGxldmVsIGJ5IG1vdmluZyBhbiBpdGVtIGluIHRoZSBzb3J0IGFycmF5IGZyb20gYSBwcmV2aW91cyBpbmRleCB0byBhIGN1cnJlbnQgaW5kZXguXG4gICAqIElmIHRoZSBwcmV2aW91cyBpbmRleCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBpbmRleCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcmV2aW91c0luZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0gY3VycmVudEluZGV4IC0gVGhlIGluZGV4IHRvIHdoaWNoIHRoZSBpdGVtIHNob3VsZCBiZSBtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW9yZGVyU29ydExldmVsKHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocHJldmlvdXNJbmRleCA9PT0gY3VycmVudEluZGV4KSByZXR1cm47XG5cbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5fc29ydHMoKSwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0cygpW2N1cnJlbnRJbmRleF0pO1xuICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHNvcnQgZGlyZWN0aW9uIGZvciB0aGUgZ2l2ZW4gY29sdW1uIElELlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbHVtbiB0byB0b2dnbGUgdGhlIHNvcnQgZGlyZWN0aW9uIGZvci5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNvcnREaXJlY3Rpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRTb3J0SW5kZXgoaWQpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcblxuICAgIHRoaXMuYWN0aXZlID0gaWQ7XG4gICAgLy8gVGhlIHZhbHVlIG9mIHRoaXMuZGlyZWN0aW9uIGlzIHVzZWQgaW4gdGhlIGdldE5leHRTb3J0RGlyZWN0aW9uIG1ldGhvZC4gVGhhdCdzIHdoeSBpdCBpcyBuZWNlc3NhcnkgZm9yIGl0IHRvIGJlIHNldCBiZWZvcmUgdGhlIGNhbGwgdG8gZ2V0TmV4dFNvcnREaXJlY3Rpb24uXG4gICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmdldFNvcnREaXJlY3Rpb24oaWQpO1xuICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5nZXROZXh0U29ydERpcmVjdGlvbih7XG4gICAgICBpZDogaWQsXG4gICAgICBkaXNhYmxlQ2xlYXI6IHRydWUsXG4gICAgfSBhcyBNYXRTb3J0YWJsZSk7XG4gICAgdGhpcy5fc29ydHMoKVtpbmRleF0uZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb247XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeyBhY3RpdmU6IHRoaXMuYWN0aXZlLCBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uIH0pO1xuICAgIHRoaXMucGVyc2lzdFNvcnRTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbHVtbiB0byB0b2dnbGUgdGhlIHNvcnQgZGlyZWN0aW9uIGZvci5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIGNsZWFyU29ydGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZSA9IFwiXCI7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSBcIlwiO1xuICAgIHRoaXMuX3NvcnRzLnNldChbXSk7XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoKTtcbiAgICB0aGlzLnBlcnNpc3RTb3J0U2V0dGluZ3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdFNvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RlbmNlQ2hhbmdlZC5lbWl0KHRoaXMuX3NvcnRzKCkpO1xuICAgIGlmICh0aGlzLmlzUGVyc2lzdGVuY2VFbmFibGVkKVxuICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5rZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuX3NvcnRzKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwZXJzaXN0ZW5jZSBrZXkgZm9yIHN0b3Jpbmcgc29ydCBzZXR0aW5ncyBhbmQgb3B0aW9uYWxseSBvdmVyd3JpdGVzIHRoZSBwZXJzaXN0ZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGJlIHVzZWQgZm9yIHBlcnNpc3Rpbmcgc29ydCBzZXR0aW5ncy5cbiAgICogQHBhcmFtIG92ZXJ3cml0ZVBlcnNpc3RlZFZhbHVlIC0gSWYgdHJ1ZSwgdGhlIGN1cnJlbnQgc29ydCBzZXR0aW5ncyB3aWxsIGJlIHBlcnNpc3RlZCBpbW1lZGlhdGVseSwgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nIHZhbHVlLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHNldFBlcnNpc3RlbmNlS2V5KGtleTogc3RyaW5nLCBvdmVyd3JpdGVQZXJzaXN0ZWRWYWx1ZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIGlmIChvdmVyd3JpdGVQZXJzaXN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy5wZXJzaXN0U29ydFNldHRpbmdzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydHNTZXJpYWxpemVkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5rZXkpO1xuICAgIHRoaXMuX3NvcnRzLnNldChzb3J0c1NlcmlhbGl6ZWQgPyBKU09OLnBhcnNlKHNvcnRzU2VyaWFsaXplZCkgOiBbXSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +1,15 @@
1
1
  import { CdkDrag, CdkDropList, moveItemInArray, } from "@angular/cdk/drag-drop";
2
2
  import { Component } from "@angular/core";
3
+ import { MatButtonModule } from "@angular/material/button";
3
4
  import { MatCheckboxModule } from "@angular/material/checkbox";
4
5
  import { MatIconModule } from "@angular/material/icon";
6
+ import { MatTooltipModule } from "@angular/material/tooltip";
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "../mat-table-column-config-persistence.service";
7
- import * as i2 from "@angular/material/checkbox";
8
- import * as i3 from "@angular/material/icon";
9
+ import * as i2 from "@angular/material/button";
10
+ import * as i3 from "@angular/material/checkbox";
11
+ import * as i4 from "@angular/material/icon";
12
+ import * as i5 from "@angular/material/tooltip";
9
13
  export class MatTableColumnConfigComponent {
10
14
  persistenceService;
11
15
  subscription;
@@ -46,11 +50,56 @@ export class MatTableColumnConfigComponent {
46
50
  this.columns[index].visible = !this.columns[index].visible;
47
51
  this.persistenceService.columns = this.columns;
48
52
  }
53
+ /**
54
+ * Sets all columns in the table to visible and updates the persisted column configuration.
55
+ *
56
+ * Iterates through the `columns` array, setting each column's `visible` property to `true`.
57
+ * Then, updates the `persistenceService.columns` property to reflect the new visibility state.
58
+ */
59
+ selectAllColumns() {
60
+ for (const column of this.columns) {
61
+ column.visible = true;
62
+ }
63
+ this.persistenceService.columns = this.columns;
64
+ }
65
+ /**
66
+ * Deselects all columns by setting their `visible` property to `false`.
67
+ * Updates the persisted columns state via the `persistenceService`.
68
+ *
69
+ * @remarks
70
+ * This method iterates through all columns in the `columns` array and hides each one.
71
+ * After updating the visibility, it synchronizes the state with the persistence service.
72
+ */
73
+ deselectAllColumns() {
74
+ for (const column of this.columns) {
75
+ column.visible = false;
76
+ }
77
+ this.persistenceService.columns = this.columns;
78
+ }
79
+ /**
80
+ * Inverts the visibility state of all columns in the `columns` array.
81
+ * Each column's `visible` property is toggled between `true` and `false`.
82
+ * After updating the visibility, the modified columns array is assigned to the persistence service
83
+ * to persist the new visibility state.
84
+ */
85
+ invertColumnSelection() {
86
+ for (const column of this.columns) {
87
+ column.visible = !column.visible;
88
+ }
89
+ this.persistenceService.columns = this.columns;
90
+ }
49
91
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigComponent, deps: [{ token: i1.MatTableColumnConfigPersistenceService }], target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatTableColumnConfigComponent, isStandalone: true, selector: "mat-table-column-config", ngImport: i0, template: "<div\n cdkDropList\n class=\"table-column-list mat-elevation-z4\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87));max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
92
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatTableColumnConfigComponent, isStandalone: true, selector: "mat-table-column-config", ngImport: i0, template: "<div class=\"container mat-elevation-z4\">\n <div class=\"toolbar\">\n <button\n mat-icon-button\n matTooltip=\"Select all columns\"\n (click)=\"selectAllColumns()\">\n <mat-icon>select_all</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Deselect all columns\"\n (click)=\"deselectAllColumns()\">\n <mat-icon>deselect</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Invert selection\"\n (click)=\"invertColumnSelection()\">\n <mat-icon>flip</mat-icon>\n </button>\n </div>\n <hr />\n <div\n cdkDropList\n class=\"table-column-list\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </div>\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}div.container{background:var(--mat-sys-surface, #ffffff);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87))}div.container>hr{border-color:var(--mat-inverse-on-surface, rgba(0, 0, 0, .87))}div.container>div.toolbar{display:inline}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
51
93
  }
52
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigComponent, decorators: [{
53
95
  type: Component,
54
- args: [{ selector: "mat-table-column-config", imports: [CdkDropList, CdkDrag, MatCheckboxModule, MatIconModule], standalone: true, template: "<div\n cdkDropList\n class=\"table-column-list mat-elevation-z4\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87));max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"] }]
96
+ args: [{ selector: "mat-table-column-config", imports: [
97
+ CdkDropList,
98
+ CdkDrag,
99
+ MatButtonModule,
100
+ MatCheckboxModule,
101
+ MatIconModule,
102
+ MatTooltipModule,
103
+ ], standalone: true, template: "<div class=\"container mat-elevation-z4\">\n <div class=\"toolbar\">\n <button\n mat-icon-button\n matTooltip=\"Select all columns\"\n (click)=\"selectAllColumns()\">\n <mat-icon>select_all</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Deselect all columns\"\n (click)=\"deselectAllColumns()\">\n <mat-icon>deselect</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Invert selection\"\n (click)=\"invertColumnSelection()\">\n <mat-icon>flip</mat-icon>\n </button>\n </div>\n <hr />\n <div\n cdkDropList\n class=\"table-column-list\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </div>\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}div.container{background:var(--mat-sys-surface, #ffffff);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87))}div.container>hr{border-color:var(--mat-inverse-on-surface, rgba(0, 0, 0, .87))}div.container>div.toolbar{display:inline}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"] }]
55
104
  }], ctorParameters: () => [{ type: i1.MatTableColumnConfigPersistenceService }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXRhYmxlLWNvbHVtbi1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXQtdGFibGUtY29sdW1uLWNvbmZpZy9tYXQtdGFibGUtY29sdW1uLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hdC10YWJsZS1jb2x1bW4tY29uZmlnL21hdC10YWJsZS1jb2x1bW4tY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBRVAsV0FBVyxFQUNYLGVBQWUsR0FDaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBWXZELE1BQU0sT0FBTyw2QkFBNkI7SUFLckI7SUFKWCxZQUFZLENBQTJCO0lBQy9DLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBRS9CLFlBQ21CLGtCQUE2RDtRQUE3RCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTJDO0lBQzdFLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCO2FBQ3hDLFVBQVUsRUFBRTthQUNaLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBQyxLQUFxQjtRQUNuQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5QkFBeUIsQ0FBQyxFQUFXO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2pELENBQUM7d0dBM0NVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLG1GQ3BCMUMsd2ZBZ0JBLDIzQkREWSxXQUFXLDhmQUFFLE9BQU8sdWNBQUUsaUJBQWlCLG9ZQUFFLGFBQWE7OzRGQUtyRCw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0UseUJBQXlCLFdBQzFCLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLENBQUMsY0FHckQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENka0RyYWcsXG4gIENka0RyYWdEcm9wLFxuICBDZGtEcm9wTGlzdCxcbiAgbW92ZUl0ZW1JbkFycmF5LFxufSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vbWF0LXRhYmxlLWNvbHVtbi1jb25maWdcIjtcbmltcG9ydCB7IE1hdFRhYmxlQ29sdW1uQ29uZmlnUGVyc2lzdGVuY2VTZXJ2aWNlIH0gZnJvbSBcIi4uL21hdC10YWJsZS1jb2x1bW4tY29uZmlnLXBlcnNpc3RlbmNlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1hdC10YWJsZS1jb2x1bW4tY29uZmlnXCIsXG4gIGltcG9ydHM6IFtDZGtEcm9wTGlzdCwgQ2RrRHJhZywgTWF0Q2hlY2tib3hNb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogXCIuL21hdC10YWJsZS1jb2x1bW4tY29uZmlnLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vbWF0LXRhYmxlLWNvbHVtbi1jb25maWcuY29tcG9uZW50LnNjc3NcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0VGFibGVDb2x1bW5Db25maWdDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uPFQ+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlU2VydmljZTogTWF0VGFibGVDb2x1bW5Db25maWdQZXJzaXN0ZW5jZVNlcnZpY2U8VD5cbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2VcbiAgICAgIC5nZXRDb2x1bW5zKClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbHVtbnMpID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZXZlbnQgd2hlbiBhIGRyYWdnZWQgY29sdW1uIGlzIGRyb3BwZWQuXG4gICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIG9yZGVyIG9mIGNvbHVtbnMgYmFzZWQgb24gdGhlIGRyYWcgYW5kIGRyb3AgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRyYWcgYW5kIGRyb3AgYWN0aW9uLlxuICAgKi9cbiAgb25Db2x1bW5Ecm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxUPik6IHZvaWQge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgY29sdW1uIGJhc2VkIG9uIGl0cyBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uIHdob3NlIHZpc2liaWxpdHkgaXMgdG8gYmUgY2hhbmdlZC5cbiAgICovXG4gIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQoaWQ6IGtleW9mIFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBpZCk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb2x1bW5zW2luZGV4XS52aXNpYmxlID0gIXRoaXMuY29sdW1uc1tpbmRleF0udmlzaWJsZTtcbiAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5jb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNka0Ryb3BMaXN0XG4gIGNsYXNzPVwidGFibGUtY29sdW1uLWxpc3QgbWF0LWVsZXZhdGlvbi16NFwiXG4gIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Db2x1bW5Ecm9wcGVkKCRldmVudClcIj5cbiAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgIDxkaXYgY2RrRHJhZyBjbGFzcz1cInRhYmxlLWNvbHVtblwiPlxuICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICBbY2hlY2tlZF09XCJjb2x1bW4udmlzaWJsZVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZChjb2x1bW4uaWQpXCJcbiAgICAgICAgPnt7IGNvbHVtbi5sYWJlbCB9fTwvbWF0LWNoZWNrYm94XG4gICAgICA+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXRhYmxlLWNvbHVtbi1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tYXQtdGFibGUtY29sdW1uLWNvbmZpZy9tYXQtdGFibGUtY29sdW1uLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21hdC10YWJsZS1jb2x1bW4tY29uZmlnL21hdC10YWJsZS1jb2x1bW4tY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBRVAsV0FBVyxFQUNYLGVBQWUsR0FDaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBbUI3RCxNQUFNLE9BQU8sNkJBQTZCO0lBS3JCO0lBSlgsWUFBWSxDQUEyQjtJQUMvQyxPQUFPLEdBQXFCLEVBQUUsQ0FBQztJQUUvQixZQUNtQixrQkFBNkQ7UUFBN0QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQztJQUM3RSxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjthQUN4QyxVQUFVLEVBQUU7YUFDWixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gseUJBQXlCLENBQUMsRUFBVztRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsT0FBTztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0I7UUFDZCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsa0JBQWtCO1FBQ2hCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCO1FBQ25CLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDakQsQ0FBQzt3R0FwRlUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsbUZDN0IxQyx1bUNBdUNBLDZpQ0RyQkksV0FBVyw4ZkFDWCxPQUFPLHVjQUNQLGVBQWUsMklBQ2YsaUJBQWlCLG9ZQUNqQixhQUFhLG1MQUNiLGdCQUFnQjs7NEZBTVAsNkJBQTZCO2tCQWR6QyxTQUFTOytCQUNFLHlCQUF5QixXQUMxQjt3QkFDUCxXQUFXO3dCQUNYLE9BQU87d0JBQ1AsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZ0JBQWdCO3FCQUNqQixjQUdXLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDZGtEcmFnLFxuICBDZGtEcmFnRHJvcCxcbiAgQ2RrRHJvcExpc3QsXG4gIG1vdmVJdGVtSW5BcnJheSxcbn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vbWF0LXRhYmxlLWNvbHVtbi1jb25maWdcIjtcbmltcG9ydCB7IE1hdFRhYmxlQ29sdW1uQ29uZmlnUGVyc2lzdGVuY2VTZXJ2aWNlIH0gZnJvbSBcIi4uL21hdC10YWJsZS1jb2x1bW4tY29uZmlnLXBlcnNpc3RlbmNlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1hdC10YWJsZS1jb2x1bW4tY29uZmlnXCIsXG4gIGltcG9ydHM6IFtcbiAgICBDZGtEcm9wTGlzdCxcbiAgICBDZGtEcmFnLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWF0LXRhYmxlLWNvbHVtbi1jb25maWcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9tYXQtdGFibGUtY29sdW1uLWNvbmZpZy5jb21wb25lbnQuc2Nzc1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRUYWJsZUNvbHVtbkNvbmZpZ0NvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29sdW1uczogVGFibGVDb2x1bW48VD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVuY2VTZXJ2aWNlOiBNYXRUYWJsZUNvbHVtbkNvbmZpZ1BlcnNpc3RlbmNlU2VydmljZTxUPlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZVxuICAgICAgLmdldENvbHVtbnMoKVxuICAgICAgLnN1YnNjcmliZSgoY29sdW1ucykgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBldmVudCB3aGVuIGEgZHJhZ2dlZCBjb2x1bW4gaXMgZHJvcHBlZC5cbiAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgb3JkZXIgb2YgY29sdW1ucyBiYXNlZCBvbiB0aGUgZHJhZyBhbmQgZHJvcCBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZyBhbmQgZHJvcCBhY3Rpb24uXG4gICAqL1xuICBvbkNvbHVtbkRyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPFQ+KTogdm9pZCB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5jb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb2x1bW4gd2hvc2UgdmlzaWJpbGl0eSBpcyB0byBiZSBjaGFuZ2VkLlxuICAgKi9cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZChpZDoga2V5b2YgVCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbHVtbnNbaW5kZXhdLnZpc2libGUgPSAhdGhpcy5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbGwgY29sdW1ucyBpbiB0aGUgdGFibGUgdG8gdmlzaWJsZSBhbmQgdXBkYXRlcyB0aGUgcGVyc2lzdGVkIGNvbHVtbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBgY29sdW1uc2AgYXJyYXksIHNldHRpbmcgZWFjaCBjb2x1bW4ncyBgdmlzaWJsZWAgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgKiBUaGVuLCB1cGRhdGVzIHRoZSBgcGVyc2lzdGVuY2VTZXJ2aWNlLmNvbHVtbnNgIHByb3BlcnR5IHRvIHJlZmxlY3QgdGhlIG5ldyB2aXNpYmlsaXR5IHN0YXRlLlxuICAgKi9cbiAgc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbi52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGVjdHMgYWxsIGNvbHVtbnMgYnkgc2V0dGluZyB0aGVpciBgdmlzaWJsZWAgcHJvcGVydHkgdG8gYGZhbHNlYC5cbiAgICogVXBkYXRlcyB0aGUgcGVyc2lzdGVkIGNvbHVtbnMgc3RhdGUgdmlhIHRoZSBgcGVyc2lzdGVuY2VTZXJ2aWNlYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgY29sdW1ucyBpbiB0aGUgYGNvbHVtbnNgIGFycmF5IGFuZCBoaWRlcyBlYWNoIG9uZS5cbiAgICogQWZ0ZXIgdXBkYXRpbmcgdGhlIHZpc2liaWxpdHksIGl0IHN5bmNocm9uaXplcyB0aGUgc3RhdGUgd2l0aCB0aGUgcGVyc2lzdGVuY2Ugc2VydmljZS5cbiAgICovXG4gIGRlc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogSW52ZXJ0cyB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBhbGwgY29sdW1ucyBpbiB0aGUgYGNvbHVtbnNgIGFycmF5LlxuICAgKiBFYWNoIGNvbHVtbidzIGB2aXNpYmxlYCBwcm9wZXJ0eSBpcyB0b2dnbGVkIGJldHdlZW4gYHRydWVgIGFuZCBgZmFsc2VgLlxuICAgKiBBZnRlciB1cGRhdGluZyB0aGUgdmlzaWJpbGl0eSwgdGhlIG1vZGlmaWVkIGNvbHVtbnMgYXJyYXkgaXMgYXNzaWduZWQgdG8gdGhlIHBlcnNpc3RlbmNlIHNlcnZpY2VcbiAgICogdG8gcGVyc2lzdCB0aGUgbmV3IHZpc2liaWxpdHkgc3RhdGUuXG4gICAqL1xuICBpbnZlcnRDb2x1bW5TZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICBjb2x1bW4udmlzaWJsZSA9ICFjb2x1bW4udmlzaWJsZTtcbiAgICB9XG4gICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciBtYXQtZWxldmF0aW9uLXo0XCI+XG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBtYXRUb29sdGlwPVwiU2VsZWN0IGFsbCBjb2x1bW5zXCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RBbGxDb2x1bW5zKClcIj5cbiAgICAgIDxtYXQtaWNvbj5zZWxlY3RfYWxsPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIG1hdFRvb2x0aXA9XCJEZXNlbGVjdCBhbGwgY29sdW1uc1wiXG4gICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGxDb2x1bW5zKClcIj5cbiAgICAgIDxtYXQtaWNvbj5kZXNlbGVjdDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBtYXRUb29sdGlwPVwiSW52ZXJ0IHNlbGVjdGlvblwiXG4gICAgICAoY2xpY2spPVwiaW52ZXJ0Q29sdW1uU2VsZWN0aW9uKClcIj5cbiAgICAgIDxtYXQtaWNvbj5mbGlwPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxociAvPlxuICA8ZGl2XG4gICAgY2RrRHJvcExpc3RcbiAgICBjbGFzcz1cInRhYmxlLWNvbHVtbi1saXN0XCJcbiAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwidmVydGljYWxcIlxuICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Db2x1bW5Ecm9wcGVkKCRldmVudClcIj5cbiAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8ZGl2IGNka0RyYWcgY2xhc3M9XCJ0YWJsZS1jb2x1bW5cIj5cbiAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgW2NoZWNrZWRdPVwiY29sdW1uLnZpc2libGVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZChjb2x1bW4uaWQpXCJcbiAgICAgICAgICA+e3sgY29sdW1uLmxhYmVsIH19PC9tYXQtY2hlY2tib3hcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -4,9 +4,10 @@ import { COLUMN_CONFIG_PERSISTENCE_ENABLED, COLUMN_CONFIG_PERSISTENCE_KEY, COLUM
4
4
  import * as i0 from "@angular/core";
5
5
  export class MatTableColumnConfigPersistenceService {
6
6
  isPersistenceEnabled;
7
- key;
7
+ initialKey;
8
8
  storage;
9
9
  columns$ = new BehaviorSubject([]);
10
+ _key;
10
11
  /**
11
12
  * Gets the current table columns configuration.
12
13
  *
@@ -24,12 +25,20 @@ export class MatTableColumnConfigPersistenceService {
24
25
  this.columns$.next(value);
25
26
  this.persistColumnConfig(value);
26
27
  }
27
- constructor(isPersistenceEnabled, key, storage) {
28
+ /**
29
+ * Gets the key used for column configuration persistence.
30
+ *
31
+ * @returns {string} The key used for column configuration persistence.
32
+ */
33
+ get key() {
34
+ return this._key;
35
+ }
36
+ constructor(isPersistenceEnabled, initialKey, storage) {
28
37
  this.isPersistenceEnabled = isPersistenceEnabled;
29
- this.key = key;
38
+ this.initialKey = initialKey;
30
39
  this.storage = storage;
31
40
  this.isPersistenceEnabled ??= true;
32
- this.key ??= "mat-table-persistence-column-config";
41
+ this._key = initialKey ?? "mat-table-persistence-column-config";
33
42
  this.storage ??= localStorage;
34
43
  if (this.isPersistenceEnabled) {
35
44
  const columnsSerialized = this.storage.getItem(this.key);
@@ -49,6 +58,25 @@ export class MatTableColumnConfigPersistenceService {
49
58
  return;
50
59
  this.storage.setItem(this.key, JSON.stringify(columns));
51
60
  }
61
+ /**
62
+ * Sets the persistence key for storing column configurations.
63
+ *
64
+ * @param key - The key to be used for persistence.
65
+ * @param overwritePersistedValue - If true, the current column configuration will be persisted immediately overwriting any exising value stored under the new key.
66
+ * If false, the persisted column configuration will be loaded and applied.
67
+ * Defaults to false.
68
+ *
69
+ * @returns void
70
+ */
71
+ setPersistenceKey(key, overwritePersistedValue = false) {
72
+ this._key = key;
73
+ if (overwritePersistedValue) {
74
+ this.persistColumnConfig(this.columns);
75
+ return;
76
+ }
77
+ const columnsSerialized = this.storage.getItem(this.key);
78
+ this.columns$.next(columnsSerialized ? JSON.parse(columnsSerialized) : []);
79
+ }
52
80
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigPersistenceService, deps: [{ token: COLUMN_CONFIG_PERSISTENCE_ENABLED, optional: true }, { token: COLUMN_CONFIG_PERSISTENCE_KEY, optional: true }, { token: COLUMN_CONFIG_PERSISTENCE_STORAGE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
53
81
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigPersistenceService, providedIn: "root" });
54
82
  }
@@ -73,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
73
101
  type: Inject,
74
102
  args: [COLUMN_CONFIG_PERSISTENCE_STORAGE]
75
103
  }] }] });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXRhYmxlLWNvbHVtbi1jb25maWctcGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWF0LXRhYmxlLWNvbHVtbi1jb25maWctcGVyc2lzdGVuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixpQ0FBaUMsR0FFbEMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFLbkMsTUFBTSxPQUFPLHNDQUFzQztJQXlCeEM7SUFHVTtJQUdBO0lBOUJGLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsRUFBRSxDQUFDLENBQUM7SUFFdEU7Ozs7T0FJRztJQUNILElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLE9BQU8sQ0FBQyxLQUF1QjtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBR1Msb0JBQTZCLEVBR25CLEdBQVcsRUFHWCxPQUFnQjtRQU4xQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVM7UUFHbkIsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUdYLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFFakMsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxLQUFLLHFDQUFxQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdkQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE9BQXlCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO3dHQXpEVSxzQ0FBc0Msa0JBd0J2QyxpQ0FBaUMsNkJBR2pDLDZCQUE2Qiw2QkFHN0IsaUNBQWlDOzRHQTlCaEMsc0NBQXNDLGNBRnJDLE1BQU07OzRGQUVQLHNDQUFzQztrQkFIbEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXdCSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLGlDQUFpQzs7MEJBRXhDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsNkJBQTZCOzswQkFFcEMsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBDT0xVTU5fQ09ORklHX1BFUlNJU1RFTkNFX0VOQUJMRUQsXG4gIENPTFVNTl9DT05GSUdfUEVSU0lTVEVOQ0VfS0VZLFxuICBDT0xVTU5fQ09ORklHX1BFUlNJU1RFTkNFX1NUT1JBR0UsXG4gIFRhYmxlQ29sdW1uLFxufSBmcm9tIFwiLi9tYXQtdGFibGUtY29sdW1uLWNvbmZpZ1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRUYWJsZUNvbHVtbkNvbmZpZ1BlcnNpc3RlbmNlU2VydmljZTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCB0YWJsZSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbjxUPltdfSBBbiBhcnJheSBvZiB0YWJsZSBjb2x1bW5zLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sdW1ucyBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFibGUgYW5kIHBlcnNpc3RzIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBBbiBhcnJheSBvZiBgVGFibGVDb2x1bW48VD5gIHJlcHJlc2VudGluZyB0aGUgbmV3IGNvbHVtbiBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldCBjb2x1bW5zKHZhbHVlOiBUYWJsZUNvbHVtbjxUPltdKSB7XG4gICAgdGhpcy5jb2x1bW5zJC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLnBlcnNpc3RDb2x1bW5Db25maWcodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENPTFVNTl9DT05GSUdfUEVSU0lTVEVOQ0VfRU5BQkxFRClcbiAgICBwdWJsaWMgaXNQZXJzaXN0ZW5jZUVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENPTFVNTl9DT05GSUdfUEVSU0lTVEVOQ0VfS0VZKVxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5OiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENPTFVNTl9DT05GSUdfUEVSU0lTVEVOQ0VfU1RPUkFHRSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2VcbiAgKSB7XG4gICAgdGhpcy5pc1BlcnNpc3RlbmNlRW5hYmxlZCA/Pz0gdHJ1ZTtcbiAgICB0aGlzLmtleSA/Pz0gXCJtYXQtdGFibGUtcGVyc2lzdGVuY2UtY29sdW1uLWNvbmZpZ1wiO1xuICAgIHRoaXMuc3RvcmFnZSA/Pz0gbG9jYWxTdG9yYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnNTZXJpYWxpemVkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5rZXkpO1xuICAgICAgdGhpcy5jb2x1bW5zJC5uZXh0KFxuICAgICAgICBjb2x1bW5zU2VyaWFsaXplZCA/IEpTT04ucGFyc2UoY29sdW1uc1NlcmlhbGl6ZWQpIDogW11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBvYnNlcnZhYmxlIHN0cmVhbSBvZiB0YWJsZSBjb2x1bW5zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUYWJsZUNvbHVtbjxUPltdPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGFycmF5IG9mIHRhYmxlIGNvbHVtbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1ucygpOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uPFQ+W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdENvbHVtbkNvbmZpZyhjb2x1bW5zOiBUYWJsZUNvbHVtbjxUPltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVuY2VFbmFibGVkKSByZXR1cm47XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5rZXksIEpTT04uc3RyaW5naWZ5KGNvbHVtbnMpKTtcbiAgfVxufVxuIl19
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXRhYmxlLWNvbHVtbi1jb25maWctcGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWF0LXRhYmxlLWNvbHVtbi1jb25maWctcGVyc2lzdGVuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixpQ0FBaUMsR0FFbEMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFLbkMsTUFBTSxPQUFPLHNDQUFzQztJQW1DeEM7SUFHRTtJQUdRO0lBeENGLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsRUFBRSxDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFTO0lBRXJCOzs7O09BSUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxPQUFPLENBQUMsS0FBdUI7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUdTLG9CQUE2QixFQUczQixVQUFrQixFQUdWLE9BQWdCO1FBTjFCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBUztRQUczQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBR1YsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUVqQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxJQUFJLHFDQUFxQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdkQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE9BQXlCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksaUJBQWlCLENBQUMsR0FBVyxFQUFFLHVCQUF1QixHQUFHLEtBQUs7UUFDbkUsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO3dHQXhGVSxzQ0FBc0Msa0JBa0N2QyxpQ0FBaUMsNkJBR2pDLDZCQUE2Qiw2QkFHN0IsaUNBQWlDOzRHQXhDaEMsc0NBQXNDLGNBRnJDLE1BQU07OzRGQUVQLHNDQUFzQztrQkFIbEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWtDSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLGlDQUFpQzs7MEJBRXhDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsNkJBQTZCOzswQkFFcEMsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBDT0xVTU5fQ09ORklHX1BFUlNJU1RFTkNFX0VOQUJMRUQsXG4gIENPTFVNTl9DT05GSUdfUEVSU0lTVEVOQ0VfS0VZLFxuICBDT0xVTU5fQ09ORklHX1BFUlNJU1RFTkNFX1NUT1JBR0UsXG4gIFRhYmxlQ29sdW1uLFxufSBmcm9tIFwiLi9tYXQtdGFibGUtY29sdW1uLWNvbmZpZ1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRUYWJsZUNvbHVtbkNvbmZpZ1BlcnNpc3RlbmNlU2VydmljZTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfa2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGFibGUgY29sdW1ucyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VGFibGVDb2x1bW48VD5bXX0gQW4gYXJyYXkgb2YgdGFibGUgY29sdW1ucy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbHVtbnMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYmxlIGFuZCBwZXJzaXN0cyB0aGUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQW4gYXJyYXkgb2YgYFRhYmxlQ29sdW1uPFQ+YCByZXByZXNlbnRpbmcgdGhlIG5ldyBjb2x1bW4gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZXQgY29sdW1ucyh2YWx1ZTogVGFibGVDb2x1bW48VD5bXSkge1xuICAgIHRoaXMuY29sdW1ucyQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5wZXJzaXN0Q29sdW1uQ29uZmlnKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBrZXkgdXNlZCBmb3IgY29sdW1uIGNvbmZpZ3VyYXRpb24gcGVyc2lzdGVuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBrZXkgdXNlZCBmb3IgY29sdW1uIGNvbmZpZ3VyYXRpb24gcGVyc2lzdGVuY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9rZXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoQ09MVU1OX0NPTkZJR19QRVJTSVNURU5DRV9FTkFCTEVEKVxuICAgIHB1YmxpYyBpc1BlcnNpc3RlbmNlRW5hYmxlZDogYm9vbGVhbixcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoQ09MVU1OX0NPTkZJR19QRVJTSVNURU5DRV9LRVkpXG4gICAgcmVhZG9ubHkgaW5pdGlhbEtleTogc3RyaW5nLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChDT0xVTU5fQ09ORklHX1BFUlNJU1RFTkNFX1NUT1JBR0UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlXG4gICkge1xuICAgIHRoaXMuaXNQZXJzaXN0ZW5jZUVuYWJsZWQgPz89IHRydWU7XG4gICAgdGhpcy5fa2V5ID0gaW5pdGlhbEtleSA/PyBcIm1hdC10YWJsZS1wZXJzaXN0ZW5jZS1jb2x1bW4tY29uZmlnXCI7XG4gICAgdGhpcy5zdG9yYWdlID8/PSBsb2NhbFN0b3JhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1BlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgY29uc3QgY29sdW1uc1NlcmlhbGl6ZWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleSk7XG4gICAgICB0aGlzLmNvbHVtbnMkLm5leHQoXG4gICAgICAgIGNvbHVtbnNTZXJpYWxpemVkID8gSlNPTi5wYXJzZShjb2x1bW5zU2VyaWFsaXplZCkgOiBbXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIG9ic2VydmFibGUgc3RyZWFtIG9mIHRhYmxlIGNvbHVtbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFRhYmxlQ29sdW1uPFQ+W10+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgdGFibGUgY29sdW1ucy5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2x1bW5zKCk6IE9ic2VydmFibGU8VGFibGVDb2x1bW48VD5bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0Q29sdW1uQ29uZmlnKGNvbHVtbnM6IFRhYmxlQ29sdW1uPFQ+W10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNQZXJzaXN0ZW5jZUVuYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleSwgSlNPTi5zdHJpbmdpZnkoY29sdW1ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBlcnNpc3RlbmNlIGtleSBmb3Igc3RvcmluZyBjb2x1bW4gY29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGJlIHVzZWQgZm9yIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0gb3ZlcndyaXRlUGVyc2lzdGVkVmFsdWUgLSBJZiB0cnVlLCB0aGUgY3VycmVudCBjb2x1bW4gY29uZmlndXJhdGlvbiB3aWxsIGJlIHBlcnNpc3RlZCBpbW1lZGlhdGVseSBvdmVyd3JpdGluZyBhbnkgZXhpc2luZyB2YWx1ZSBzdG9yZWQgdW5kZXIgdGhlIG5ldyBrZXkuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZhbHNlLCB0aGUgcGVyc2lzdGVkIGNvbHVtbiBjb25maWd1cmF0aW9uIHdpbGwgYmUgbG9hZGVkIGFuZCBhcHBsaWVkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHNldFBlcnNpc3RlbmNlS2V5KGtleTogc3RyaW5nLCBvdmVyd3JpdGVQZXJzaXN0ZWRWYWx1ZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIGlmIChvdmVyd3JpdGVQZXJzaXN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy5wZXJzaXN0Q29sdW1uQ29uZmlnKHRoaXMuY29sdW1ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uc1NlcmlhbGl6ZWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleSk7XG4gICAgdGhpcy5jb2x1bW5zJC5uZXh0KGNvbHVtbnNTZXJpYWxpemVkID8gSlNPTi5wYXJzZShjb2x1bW5zU2VyaWFsaXplZCkgOiBbXSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EventEmitter, signal, effect, Directive, Optional, Inject, Output, Injectable, Component, HostListener, inject, ViewEncapsulation, ANIMATION_MODULE_TYPE, Input } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, signal, effect, Output, Optional, Inject, Directive, Injectable, Component, HostListener, inject, ViewEncapsulation, ANIMATION_MODULE_TYPE, Input } from '@angular/core';
3
3
  import { moveItemInArray, CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';
4
4
  import { MatSort, MAT_SORT_DEFAULT_OPTIONS, MatSortHeader } from '@angular/material/sort';
5
5
  import { ComponentPortal } from '@angular/cdk/portal';
6
- import * as i2 from '@angular/material/checkbox';
6
+ import * as i2 from '@angular/material/button';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import * as i3 from '@angular/material/checkbox';
7
9
  import { MatCheckboxModule } from '@angular/material/checkbox';
8
- import * as i3 from '@angular/material/icon';
10
+ import * as i4 from '@angular/material/icon';
9
11
  import { MatIconModule } from '@angular/material/icon';
12
+ import * as i5 from '@angular/material/tooltip';
13
+ import { MatTooltipModule } from '@angular/material/tooltip';
10
14
  import { BehaviorSubject } from 'rxjs';
11
15
  import * as i1 from '@angular/cdk/overlay';
12
16
  import { MatTableDataSource } from '@angular/material/table';
@@ -75,9 +79,10 @@ const SORT_PERSISTENCE_ENABLED = new InjectionToken("SORT_PERSISTENCE_ENABLED");
75
79
  const SORT_PERSISTENCE_KEY = new InjectionToken("SORT_PERSISTENCE_KEY");
76
80
  class MatMultiSortDirective extends MatSort {
77
81
  isPersistenceEnabled;
78
- key;
82
+ initialKey;
79
83
  storage;
80
84
  persistenceChanged = new EventEmitter();
85
+ _key;
81
86
  /**
82
87
  * A writable signal that holds an array of Sort objects.
83
88
  * This signal is used to manage the sorting state of the table.
@@ -85,13 +90,21 @@ class MatMultiSortDirective extends MatSort {
85
90
  * @readonly
86
91
  */
87
92
  _sorts = signal([]);
88
- constructor(isPersistenceEnabled, key, storage, defaultOptions) {
93
+ /**
94
+ * Gets the key used for column configuration persistence.
95
+ *
96
+ * @returns {string} The key used for column configuration persistence.
97
+ */
98
+ get key() {
99
+ return this._key;
100
+ }
101
+ constructor(isPersistenceEnabled, initialKey, storage, defaultOptions) {
89
102
  super(defaultOptions);
90
103
  this.isPersistenceEnabled = isPersistenceEnabled;
91
- this.key = key;
104
+ this.initialKey = initialKey;
92
105
  this.storage = storage;
93
106
  this.isPersistenceEnabled ??= true;
94
- this.key ??= "mat-table-persistence-sort";
107
+ this._key = initialKey ?? "mat-table-persistence-sort";
95
108
  this.storage ??= localStorage;
96
109
  if (this.isPersistenceEnabled) {
97
110
  const sortsSerialized = this.storage.getItem(this.key);
@@ -216,6 +229,23 @@ class MatMultiSortDirective extends MatSort {
216
229
  if (this.isPersistenceEnabled)
217
230
  this.storage.setItem(this.key, JSON.stringify(this._sorts()));
218
231
  }
232
+ /**
233
+ * Sets the persistence key for storing sort settings and optionally overwrites the persisted value.
234
+ *
235
+ * @param key - The key to be used for persisting sort settings.
236
+ * @param overwritePersistedValue - If true, the current sort settings will be persisted immediately, overwriting any existing value. Defaults to false.
237
+ *
238
+ * @returns void
239
+ */
240
+ setPersistenceKey(key, overwritePersistedValue = false) {
241
+ this._key = key;
242
+ if (overwritePersistedValue) {
243
+ this.persistSortSettings();
244
+ return;
245
+ }
246
+ const sortsSerialized = this.storage.getItem(this.key);
247
+ this._sorts.set(sortsSerialized ? JSON.parse(sortsSerialized) : []);
248
+ }
219
249
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatMultiSortDirective, deps: [{ token: SORT_PERSISTENCE_ENABLED, optional: true }, { token: SORT_PERSISTENCE_KEY, optional: true }, { token: SORT_PERSISTENCE_STORAGE, optional: true }, { token: MAT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
220
250
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: MatMultiSortDirective, isStandalone: true, selector: "[matMultiSort]", outputs: { persistenceChanged: "persistenceChanged" }, host: { classAttribute: "mat-sort" }, exportAs: ["matMultiSort"], usesInheritance: true, ngImport: i0 });
221
251
  }
@@ -255,9 +285,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
255
285
 
256
286
  class MatTableColumnConfigPersistenceService {
257
287
  isPersistenceEnabled;
258
- key;
288
+ initialKey;
259
289
  storage;
260
290
  columns$ = new BehaviorSubject([]);
291
+ _key;
261
292
  /**
262
293
  * Gets the current table columns configuration.
263
294
  *
@@ -275,12 +306,20 @@ class MatTableColumnConfigPersistenceService {
275
306
  this.columns$.next(value);
276
307
  this.persistColumnConfig(value);
277
308
  }
278
- constructor(isPersistenceEnabled, key, storage) {
309
+ /**
310
+ * Gets the key used for column configuration persistence.
311
+ *
312
+ * @returns {string} The key used for column configuration persistence.
313
+ */
314
+ get key() {
315
+ return this._key;
316
+ }
317
+ constructor(isPersistenceEnabled, initialKey, storage) {
279
318
  this.isPersistenceEnabled = isPersistenceEnabled;
280
- this.key = key;
319
+ this.initialKey = initialKey;
281
320
  this.storage = storage;
282
321
  this.isPersistenceEnabled ??= true;
283
- this.key ??= "mat-table-persistence-column-config";
322
+ this._key = initialKey ?? "mat-table-persistence-column-config";
284
323
  this.storage ??= localStorage;
285
324
  if (this.isPersistenceEnabled) {
286
325
  const columnsSerialized = this.storage.getItem(this.key);
@@ -300,6 +339,25 @@ class MatTableColumnConfigPersistenceService {
300
339
  return;
301
340
  this.storage.setItem(this.key, JSON.stringify(columns));
302
341
  }
342
+ /**
343
+ * Sets the persistence key for storing column configurations.
344
+ *
345
+ * @param key - The key to be used for persistence.
346
+ * @param overwritePersistedValue - If true, the current column configuration will be persisted immediately overwriting any exising value stored under the new key.
347
+ * If false, the persisted column configuration will be loaded and applied.
348
+ * Defaults to false.
349
+ *
350
+ * @returns void
351
+ */
352
+ setPersistenceKey(key, overwritePersistedValue = false) {
353
+ this._key = key;
354
+ if (overwritePersistedValue) {
355
+ this.persistColumnConfig(this.columns);
356
+ return;
357
+ }
358
+ const columnsSerialized = this.storage.getItem(this.key);
359
+ this.columns$.next(columnsSerialized ? JSON.parse(columnsSerialized) : []);
360
+ }
303
361
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigPersistenceService, deps: [{ token: COLUMN_CONFIG_PERSISTENCE_ENABLED, optional: true }, { token: COLUMN_CONFIG_PERSISTENCE_KEY, optional: true }, { token: COLUMN_CONFIG_PERSISTENCE_STORAGE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
304
362
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigPersistenceService, providedIn: "root" });
305
363
  }
@@ -365,12 +423,57 @@ class MatTableColumnConfigComponent {
365
423
  this.columns[index].visible = !this.columns[index].visible;
366
424
  this.persistenceService.columns = this.columns;
367
425
  }
426
+ /**
427
+ * Sets all columns in the table to visible and updates the persisted column configuration.
428
+ *
429
+ * Iterates through the `columns` array, setting each column's `visible` property to `true`.
430
+ * Then, updates the `persistenceService.columns` property to reflect the new visibility state.
431
+ */
432
+ selectAllColumns() {
433
+ for (const column of this.columns) {
434
+ column.visible = true;
435
+ }
436
+ this.persistenceService.columns = this.columns;
437
+ }
438
+ /**
439
+ * Deselects all columns by setting their `visible` property to `false`.
440
+ * Updates the persisted columns state via the `persistenceService`.
441
+ *
442
+ * @remarks
443
+ * This method iterates through all columns in the `columns` array and hides each one.
444
+ * After updating the visibility, it synchronizes the state with the persistence service.
445
+ */
446
+ deselectAllColumns() {
447
+ for (const column of this.columns) {
448
+ column.visible = false;
449
+ }
450
+ this.persistenceService.columns = this.columns;
451
+ }
452
+ /**
453
+ * Inverts the visibility state of all columns in the `columns` array.
454
+ * Each column's `visible` property is toggled between `true` and `false`.
455
+ * After updating the visibility, the modified columns array is assigned to the persistence service
456
+ * to persist the new visibility state.
457
+ */
458
+ invertColumnSelection() {
459
+ for (const column of this.columns) {
460
+ column.visible = !column.visible;
461
+ }
462
+ this.persistenceService.columns = this.columns;
463
+ }
368
464
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigComponent, deps: [{ token: MatTableColumnConfigPersistenceService }], target: i0.ɵɵFactoryTarget.Component });
369
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatTableColumnConfigComponent, isStandalone: true, selector: "mat-table-column-config", ngImport: i0, template: "<div\n cdkDropList\n class=\"table-column-list mat-elevation-z4\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87));max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
465
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatTableColumnConfigComponent, isStandalone: true, selector: "mat-table-column-config", ngImport: i0, template: "<div class=\"container mat-elevation-z4\">\n <div class=\"toolbar\">\n <button\n mat-icon-button\n matTooltip=\"Select all columns\"\n (click)=\"selectAllColumns()\">\n <mat-icon>select_all</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Deselect all columns\"\n (click)=\"deselectAllColumns()\">\n <mat-icon>deselect</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Invert selection\"\n (click)=\"invertColumnSelection()\">\n <mat-icon>flip</mat-icon>\n </button>\n </div>\n <hr />\n <div\n cdkDropList\n class=\"table-column-list\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </div>\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}div.container{background:var(--mat-sys-surface, #ffffff);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87))}div.container>hr{border-color:var(--mat-inverse-on-surface, rgba(0, 0, 0, .87))}div.container>div.toolbar{display:inline}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
370
466
  }
371
467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTableColumnConfigComponent, decorators: [{
372
468
  type: Component,
373
- args: [{ selector: "mat-table-column-config", imports: [CdkDropList, CdkDrag, MatCheckboxModule, MatIconModule], standalone: true, template: "<div\n cdkDropList\n class=\"table-column-list mat-elevation-z4\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87));max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"] }]
469
+ args: [{ selector: "mat-table-column-config", imports: [
470
+ CdkDropList,
471
+ CdkDrag,
472
+ MatButtonModule,
473
+ MatCheckboxModule,
474
+ MatIconModule,
475
+ MatTooltipModule,
476
+ ], standalone: true, template: "<div class=\"container mat-elevation-z4\">\n <div class=\"toolbar\">\n <button\n mat-icon-button\n matTooltip=\"Select all columns\"\n (click)=\"selectAllColumns()\">\n <mat-icon>select_all</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Deselect all columns\"\n (click)=\"deselectAllColumns()\">\n <mat-icon>deselect</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Invert selection\"\n (click)=\"invertColumnSelection()\">\n <mat-icon>flip</mat-icon>\n </button>\n </div>\n <hr />\n <div\n cdkDropList\n class=\"table-column-list\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </div>\n</div>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}div.container{background:var(--mat-sys-surface, #ffffff);color:var(--mat-sys-on-surface, rgba(0, 0, 0, .87))}div.container>hr{border-color:var(--mat-inverse-on-surface, rgba(0, 0, 0, .87))}div.container>div.toolbar{display:inline}.table-column-list{background-color:var(--mat-sys-surface-container, #eeeeee);max-height:65vh;overflow:auto}.table-column{background:var(--mat-sys-surface, #ffffff);display:flex;justify-content:flex-start;align-items:center;height:48px;padding:0 16px 0 8px}.table-column mat-icon{margin-right:16px}.table-column mat-checkbox{line-height:48px;color:#000000de;font-size:14px;font-weight:400}.table-column:last-child{border:none}.cdk-drop-list-dragging .table-column:not(.cdk-drag-placeholder){transition:transform .15s cubic-bezier(0,0,.2,1)}\n"] }]
374
477
  }], ctorParameters: () => [{ type: MatTableColumnConfigPersistenceService }] });
375
478
 
376
479
  class MatTableColumnConfigTriggerDirective {
@@ -620,7 +723,7 @@ class MatMultiSortControlComponent {
620
723
  this.sort?.reorderSortLevel(event.previousIndex, event.currentIndex);
621
724
  }
622
725
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatMultiSortControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
623
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatMultiSortControlComponent, isStandalone: true, selector: "mat-multi-sort-control", inputs: { orientation: "orientation", sort: "sort" }, ngImport: i0, template: "<mat-chip-listbox\n cdkDropList\n [cdkDropListOrientation]=\"orientation\"\n (cdkDropListDropped)=\"onDrop($event)\">\n <mat-chip\n [disabled]=\"!sorts.length\"\n [highlighted]=\"true\"\n (click)=\"onClearClick()\"\n ><mat-icon matChipAvatar fontIcon=\"clear_all\"></mat-icon>Clear All</mat-chip\n >\n @for (column of sorts; track $index) {\n <mat-chip\n class=\"mat-sort-header\"\n cdkDrag\n (click)=\"onChipClick(column.active)\"\n (removed)=\"onChipRemoved(column.active)\">\n <div\n matChipAvatar\n class=\"mat-sort-header-container mat-sort-header-sorted mat-focus-indicator\"\n [class.mat-sort-header-descending]=\"column.direction === 'desc'\"\n [class.mat-sort-header-ascending]=\"column.direction === 'asc'\"\n [class.mat-sort-header-animations-disabled]=\"\n _animationModule === 'NoopAnimations'\n \">\n <div class=\"mat-sort-header-arrow\">\n <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path\n d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\" />\n </svg>\n </div>\n </div>\n {{ column.active }}\n <button matChipRemove>\n <mat-icon>clear</mat-icon>\n </button>\n </mat-chip>\n }\n</mat-chip-listbox>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.mat-mdc-chip-listbox.mat-mdc-chip-set.cdk-drop-list .cdk-drop-list-dragging{transition:transform .15s cubic-bezier(0,0,.2,1)}.mat-mdc-chip.mat-sort-header{background-color:var(--mat-sys-surface, #ffffff);transition:background-color .1s cubic-bezier(0,0,.2,1),box-shadow .1s cubic-bezier(0,0,.2,1)}.mat-mdc-chip.mat-sort-header:hover{cursor:move}.mat-mdc-chip.mat-sort-header:hover:after{opacity:0}.mat-mdc-chip.mat-sort-header:focus:after{opacity:0}.mat-mdc-chip.mat-sort-header:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-sort-header-content{display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}@keyframes _mat-sort-header-recently-cleared-ascending{0%{transform:translateY(0);opacity:1}to{transform:translateY(-25%);opacity:0}}@keyframes _mat-sort-header-recently-cleared-descending{0%{transform:translateY(0) rotate(180deg);opacity:1}to{transform:translateY(25%) rotate(180deg);opacity:0}}.mat-sort-header-arrow{height:12px;width:12px;position:relative;transition:transform 225ms cubic-bezier(.4,0,.2,1),opacity 225ms cubic-bezier(.4,0,.2,1);opacity:0;overflow:visible;color:var(--mat-sort-arrow-color, var(--mat-app-on-surface))}.mat-sort-header.cdk-keyboard-focused .mat-sort-header-arrow,.mat-sort-header.cdk-program-focused .mat-sort-header-arrow,.mat-sort-header:hover .mat-sort-header-arrow{opacity:.54}.mat-sort-header .mat-sort-header-sorted .mat-sort-header-arrow{opacity:1}.mat-sort-header-descending .mat-sort-header-arrow{transform:rotate(180deg)}.mat-sort-header-recently-cleared-ascending .mat-sort-header-arrow{transform:translateY(-25%);transition:none;animation:_mat-sort-header-recently-cleared-ascending 225ms cubic-bezier(.4,0,.2,1) forwards}.mat-sort-header-recently-cleared-descending .mat-sort-header-arrow{transition:none;animation:_mat-sort-header-recently-cleared-descending 225ms cubic-bezier(.4,0,.2,1) forwards}.mat-sort-header-animations-disabled .mat-sort-header-arrow{transition-duration:0ms;animation-duration:0ms}.mat-sort-header-arrow svg{width:24px;height:24px;fill:currentColor;position:absolute;top:50%;left:50%;margin:-12px 0 0 -12px;transform:translateZ(0)}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.cdk-drop-list-dragging .mat-sort-header:not(.cdk-drag-placeholder){background-color:var(--mat-sys-surface-dim, #ffffff);transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i1$1.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i1$1.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i1$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
726
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatMultiSortControlComponent, isStandalone: true, selector: "mat-multi-sort-control", inputs: { orientation: "orientation", sort: "sort" }, ngImport: i0, template: "<mat-chip-listbox\n cdkDropList\n [cdkDropListOrientation]=\"orientation\"\n (cdkDropListDropped)=\"onDrop($event)\">\n <mat-chip\n [disabled]=\"!sorts.length\"\n [highlighted]=\"true\"\n (click)=\"onClearClick()\"\n ><mat-icon matChipAvatar fontIcon=\"clear_all\"></mat-icon>Clear All</mat-chip\n >\n @for (column of sorts; track $index) {\n <mat-chip\n class=\"mat-sort-header\"\n cdkDrag\n (click)=\"onChipClick(column.active)\"\n (removed)=\"onChipRemoved(column.active)\">\n <div\n matChipAvatar\n class=\"mat-sort-header-container mat-sort-header-sorted mat-focus-indicator\"\n [class.mat-sort-header-descending]=\"column.direction === 'desc'\"\n [class.mat-sort-header-ascending]=\"column.direction === 'asc'\"\n [class.mat-sort-header-animations-disabled]=\"\n _animationModule === 'NoopAnimations'\n \">\n <div class=\"mat-sort-header-arrow\">\n <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path\n d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\" />\n </svg>\n </div>\n </div>\n {{ column.active }}\n <button matChipRemove>\n <mat-icon>clear</mat-icon>\n </button>\n </mat-chip>\n }\n</mat-chip-listbox>\n", styles: [".cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .15s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;overflow:hidden}.mat-mdc-chip-listbox.mat-mdc-chip-set.cdk-drop-list .cdk-drop-list-dragging{transition:transform .15s cubic-bezier(0,0,.2,1)}.mat-mdc-chip.mat-sort-header{background-color:var(--mat-sys-surface, #ffffff);transition:background-color .1s cubic-bezier(0,0,.2,1),box-shadow .1s cubic-bezier(0,0,.2,1)}.mat-mdc-chip.mat-sort-header:hover{cursor:move}.mat-mdc-chip.mat-sort-header:hover:after{opacity:0}.mat-mdc-chip.mat-sort-header:focus:after{opacity:0}.mat-mdc-chip.mat-sort-header:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mat-sort-header-content{display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}@keyframes _mat-sort-header-recently-cleared-ascending{0%{transform:translateY(0);opacity:1}to{transform:translateY(-25%);opacity:0}}@keyframes _mat-sort-header-recently-cleared-descending{0%{transform:translateY(0) rotate(180deg);opacity:1}to{transform:translateY(25%) rotate(180deg);opacity:0}}.mat-sort-header-arrow{height:12px;width:12px;position:relative;transition:transform 225ms cubic-bezier(.4,0,.2,1),opacity 225ms cubic-bezier(.4,0,.2,1);opacity:0;overflow:visible;color:var(--mat-sort-arrow-color, var(--mat-app-on-surface))}.mat-sort-header.cdk-keyboard-focused .mat-sort-header-arrow,.mat-sort-header.cdk-program-focused .mat-sort-header-arrow,.mat-sort-header:hover .mat-sort-header-arrow{opacity:.54}.mat-sort-header .mat-sort-header-sorted .mat-sort-header-arrow{opacity:1}.mat-sort-header-descending .mat-sort-header-arrow{transform:rotate(180deg)}.mat-sort-header-recently-cleared-ascending .mat-sort-header-arrow{transform:translateY(-25%);transition:none;animation:_mat-sort-header-recently-cleared-ascending 225ms cubic-bezier(.4,0,.2,1) forwards}.mat-sort-header-recently-cleared-descending .mat-sort-header-arrow{transition:none;animation:_mat-sort-header-recently-cleared-descending 225ms cubic-bezier(.4,0,.2,1) forwards}.mat-sort-header-animations-disabled .mat-sort-header-arrow{transition-duration:0ms;animation-duration:0ms}.mat-sort-header-arrow svg{width:24px;height:24px;fill:currentColor;position:absolute;top:50%;left:50%;margin:-12px 0 0 -12px;transform:translateZ(0)}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.cdk-drop-list-dragging .mat-sort-header:not(.cdk-drag-placeholder){background-color:var(--mat-sys-surface-dim, #ffffff);transition:transform .15s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i1$1.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i1$1.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i1$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
624
727
  }
625
728
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatMultiSortControlComponent, decorators: [{
626
729
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-mat-table-multi-sort.mjs","sources":["../../../src/lib/mat-table-column-config.ts","../../../src/lib/mat-multi-sort.directive.ts","../../../src/lib/mat-table-column-config-persistence.service.ts","../../../src/lib/mat-table-column-config/mat-table-column-config.component.ts","../../../src/lib/mat-table-column-config/mat-table-column-config.component.html","../../../src/lib/mat-table-column-config-trigger.directive.ts","../../../src/lib/mat-multi-sort-table-data-source.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.html","../../../src/lib/mat-multi-sort-control/mat-multi-sort-control.component.ts","../../../src/lib/mat-multi-sort-control/mat-multi-sort-control.component.html","../../../src/public-api.ts","../../../src/ngx-mat-table-multi-sort.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\n\n/**\n * Represents the configuration for a table column.\n *\n * @template T - The type of the data object that the table displays.\n */\nexport interface TableColumn<T> {\n id: keyof T;\n label: string;\n visible: boolean;\n}\n\n/**\n * Injection token for the storage mechanism used to persist column configuration.\n *\n * This token can be used to provide a custom storage implementation for saving\n * and retrieving the state of table column configurations.\n *\n */\nexport const COLUMN_CONFIG_PERSISTENCE_STORAGE = new InjectionToken<Storage>(\n \"COLUMN_CONFIG_PERSISTENCE_STORAGE\"\n);\n\n/**\n * Injection token used to enable or disable column configuration persistence.\n *\n * This token can be provided with a boolean value to indicate whether the\n * column configurations should be persisted (e.g., in local storage or a database).\n *\n */\nexport const COLUMN_CONFIG_PERSISTENCE_ENABLED = new InjectionToken<boolean>(\n \"COLUMN_CONFIG_PERSISTENCE_ENABLED\"\n);\n\n/**\n * Injection token for the column configuration persistence key.\n * This token is used to provide a unique key for persisting column configurations.\n */\nexport const COLUMN_CONFIG_PERSISTENCE_KEY = new InjectionToken<string>(\n \"COLUMN_CONFIG_PERSISTENCE_KEY\"\n);\n","import { moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n Directive,\n effect,\n EventEmitter,\n Inject,\n InjectionToken,\n Optional,\n Output,\n signal,\n WritableSignal,\n} from \"@angular/core\";\nimport {\n MAT_SORT_DEFAULT_OPTIONS,\n MatSort,\n MatSortable,\n MatSortDefaultOptions,\n Sort,\n SortDirection,\n} from \"@angular/material/sort\";\n\n/**\n * Injection token for the storage mechanism used to persist sorting state.\n *\n * This token can be used to provide a custom storage implementation for persisting\n * the sorting state of a table. By default, it can be set to use localStorage, sessionStorage,\n * or any other storage mechanism that implements the Storage interface.\n *\n */\nexport const SORT_PERSISTENCE_STORAGE = new InjectionToken<Storage>(\n \"SORT_PERSISTENCE_STORAGE\"\n);\n\n/**\n * Injection token used to enable or disable the persistence of sorting state.\n *\n * This token can be provided in the application's dependency injection system\n * to control whether the sorting state of a table should be persisted across\n * sessions or not.\n *\n * @example\n * // To enable sort persistence:\n * providers: [\n * { provide: SORT_PERSISTENCE_ENABLED, useValue: true }\n * ]\n *\n * @example\n * // To disable sort persistence:\n * providers: [\n * { provide: SORT_PERSISTENCE_ENABLED, useValue: false }\n * ]\n */\nexport const SORT_PERSISTENCE_ENABLED = new InjectionToken<boolean>(\n \"SORT_PERSISTENCE_ENABLED\"\n);\n\n/**\n * Injection token for the key used to persist sorting state.\n *\n * This token can be used to provide a custom key for storing\n * the sorting state in a persistence layer, such as local storage\n * or a database.\n */\nexport const SORT_PERSISTENCE_KEY = new InjectionToken<string>(\n \"SORT_PERSISTENCE_KEY\"\n);\n\n@Directive({\n selector: \"[matMultiSort]\",\n exportAs: \"matMultiSort\",\n host: {\n class: \"mat-sort\",\n },\n standalone: true,\n})\nexport class MatMultiSortDirective extends MatSort {\n @Output()\n private readonly persistenceChanged = new EventEmitter<Sort[]>();\n\n /**\n * A writable signal that holds an array of Sort objects.\n * This signal is used to manage the sorting state of the table.\n *\n * @readonly\n */\n readonly _sorts: WritableSignal<Sort[]> = signal([]);\n\n constructor(\n @Optional()\n @Inject(SORT_PERSISTENCE_ENABLED)\n public isPersistenceEnabled: boolean,\n @Optional()\n @Inject(SORT_PERSISTENCE_KEY)\n private readonly key: string,\n @Optional()\n @Inject(SORT_PERSISTENCE_STORAGE)\n private readonly storage: Storage,\n @Optional()\n @Inject(MAT_SORT_DEFAULT_OPTIONS)\n defaultOptions?: MatSortDefaultOptions | undefined\n ) {\n super(defaultOptions);\n\n this.isPersistenceEnabled ??= true;\n this.key ??= \"mat-table-persistence-sort\";\n this.storage ??= localStorage;\n\n if (this.isPersistenceEnabled) {\n const sortsSerialized = this.storage.getItem(this.key);\n this._sorts.set(sortsSerialized ? JSON.parse(sortsSerialized) : []);\n }\n\n // This is necessary because the sortChange event is not emitted when the _sorts signal is updated directly (e.g., this._sorts.set([])).\n effect(() => {\n const length = this._sorts().length;\n this.sortChange.emit({\n active: length ? this._sorts()[length - 1].active : \"\",\n direction: length ? this._sorts()[length - 1].direction : \"\",\n });\n this.persistSortSettings();\n });\n }\n\n /**\n * Retrieves the sort direction for a given column ID.\n *\n * @param id - The ID of the column to get the sort direction for.\n * @returns The sort direction ('asc', 'desc', or '') for the specified column ID.\n */\n public getSortDirection(id: string): SortDirection {\n const sort = this._sorts().find((e) => e.active === id);\n return sort ? sort.direction : \"\";\n }\n\n /**\n * Gets the sort index of the given column ID.\n *\n * @param id - The ID of the column to get the sort index for.\n * @returns The sort index of the column, or -1 if the column is not active.\n */\n public getSortIndex(id: string): number {\n return this._sorts().findIndex((e) => e.active === id);\n }\n\n override sort(sortable: MatSortable): void {\n this.active = sortable.id;\n this.direction = this.getSortDirection(sortable.id);\n const index = this.getSortIndex(sortable.id);\n\n // If the column is not active, add it to the list of active columns.\n if (index < 0) {\n this.direction = sortable.start ? sortable.start : this.start;\n this._sorts().push({ active: this.active, direction: this.direction });\n } else {\n // If the column is active, update the direction or remove it if the direction is empty.\n this.direction = this.getNextSortDirection(sortable);\n if (!this.direction) {\n this._sorts().splice(index, 1);\n } else {\n this._sorts()[index].direction = this.direction;\n }\n }\n\n this.sortChange.emit({ active: this.active, direction: this.direction });\n this.persistSortSettings();\n }\n\n /**\n * Removes a sort level by its identifier.\n * If the sort level is not found, the method returns without making any changes.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n public removeSortLevel(id: string): void {\n const index = this.getSortIndex(id);\n if (index < 0) return;\n\n this._sorts().splice(index, 1);\n this.sortChange.emit();\n this.persistSortSettings();\n }\n\n /**\n * Reorders the sort level by moving an item in the sort array from a previous index to a current index.\n * If the previous index is the same as the current index, the function returns without making any changes.\n *\n * @param previousIndex - The index of the item to be moved.\n * @param currentIndex - The index to which the item should be moved.\n */\n public reorderSortLevel(previousIndex: number, currentIndex: number): void {\n if (previousIndex === currentIndex) return;\n\n moveItemInArray(this._sorts(), previousIndex, currentIndex);\n this.sortChange.emit(this._sorts()[currentIndex]);\n this.persistSortSettings();\n }\n\n /**\n * Toggles the sort direction for the given column ID.\n *\n * @param id - The unique identifier of the column to toggle the sort direction for.\n * @returns void\n */\n public toggleSortDirection(id: string): void {\n const index = this.getSortIndex(id);\n if (index < 0) return;\n\n this.active = id;\n // The value of this.direction is used in the getNextSortDirection method. That's why it is necessary for it to be set before the call to getNextSortDirection.\n this.direction = this.getSortDirection(id);\n this.direction = this.getNextSortDirection({\n id: id,\n disableClear: true,\n } as MatSortable);\n this._sorts()[index].direction = this.direction;\n this.sortChange.emit({ active: this.active, direction: this.direction });\n this.persistSortSettings();\n }\n\n /**\n * Clears the current sorting state.\n *\n * @param id - The unique identifier of the column to toggle the sort direction for.\n * @returns void\n */\n public clearSorting(): void {\n this.active = \"\";\n this.direction = \"\";\n this._sorts.set([]);\n this.sortChange.emit();\n this.persistSortSettings();\n }\n\n private persistSortSettings(): void {\n this.persistenceChanged.emit(this._sorts());\n if (this.isPersistenceEnabled)\n this.storage.setItem(this.key, JSON.stringify(this._sorts()));\n }\n}\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport {\n COLUMN_CONFIG_PERSISTENCE_ENABLED,\n COLUMN_CONFIG_PERSISTENCE_KEY,\n COLUMN_CONFIG_PERSISTENCE_STORAGE,\n TableColumn,\n} from \"./mat-table-column-config\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class MatTableColumnConfigPersistenceService<T> {\n private readonly columns$ = new BehaviorSubject<TableColumn<T>[]>([]);\n\n /**\n * Gets the current table columns configuration.\n *\n * @returns {TableColumn<T>[]} An array of table columns.\n */\n public get columns(): TableColumn<T>[] {\n return this.columns$.getValue();\n }\n\n /**\n * Sets the columns configuration for the table and persists the configuration.\n *\n * @param value - An array of `TableColumn<T>` representing the new column configuration.\n */\n public set columns(value: TableColumn<T>[]) {\n this.columns$.next(value);\n this.persistColumnConfig(value);\n }\n\n constructor(\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_ENABLED)\n public isPersistenceEnabled: boolean,\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_KEY)\n private readonly key: string,\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_STORAGE)\n private readonly storage: Storage\n ) {\n this.isPersistenceEnabled ??= true;\n this.key ??= \"mat-table-persistence-column-config\";\n this.storage ??= localStorage;\n\n if (this.isPersistenceEnabled) {\n const columnsSerialized = this.storage.getItem(this.key);\n this.columns$.next(\n columnsSerialized ? JSON.parse(columnsSerialized) : []\n );\n }\n }\n\n /**\n * Retrieves an observable stream of table columns.\n *\n * @returns {Observable<TableColumn<T>[]>} An observable that emits an array of table columns.\n */\n public getColumns(): Observable<TableColumn<T>[]> {\n return this.columns$.asObservable();\n }\n\n private persistColumnConfig(columns: TableColumn<T>[]): void {\n if (!this.isPersistenceEnabled) return;\n this.storage.setItem(this.key, JSON.stringify(columns));\n }\n}\n","import {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n moveItemInArray,\n} from \"@angular/cdk/drag-drop\";\nimport { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { Subscription } from \"rxjs\";\nimport { TableColumn } from \"../mat-table-column-config\";\nimport { MatTableColumnConfigPersistenceService } from \"../mat-table-column-config-persistence.service\";\n\n@Component({\n selector: \"mat-table-column-config\",\n imports: [CdkDropList, CdkDrag, MatCheckboxModule, MatIconModule],\n templateUrl: \"./mat-table-column-config.component.html\",\n styleUrl: \"./mat-table-column-config.component.scss\",\n standalone: true,\n})\nexport class MatTableColumnConfigComponent<T> implements OnInit, OnDestroy {\n private subscription: Subscription | undefined;\n columns: TableColumn<T>[] = [];\n\n constructor(\n private readonly persistenceService: MatTableColumnConfigPersistenceService<T>\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.persistenceService\n .getColumns()\n .subscribe((columns) => {\n this.columns = columns;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n }\n\n /**\n * Handles the event when a dragged column is dropped.\n * This method updates the order of columns based on the drag and drop action.\n *\n * @param event - The event object containing information about the drag and drop action.\n */\n onColumnDropped(event: CdkDragDrop<T>): void {\n moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n this.persistenceService.columns = this.columns;\n }\n\n /**\n * Toggles the visibility of a column based on its identifier.\n *\n * @param id - The identifier of the column whose visibility is to be changed.\n */\n onColumnVisibilityChanged(id: keyof T): void {\n const index = this.columns.findIndex((column) => column.id === id);\n if (index < 0) return;\n\n this.columns[index].visible = !this.columns[index].visible;\n this.persistenceService.columns = this.columns;\n }\n}\n","<div\n cdkDropList\n class=\"table-column-list mat-elevation-z4\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n</div>\n","import { Overlay } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { MatTableColumnConfigComponent } from \"./mat-table-column-config/mat-table-column-config.component\";\n\n@Directive({\n selector: \"[matTableColumnConfigTrigger]\",\n exportAs: \"matTableColumnConfigTrigger\",\n standalone: true,\n})\nexport class MatTableColumnConfigTriggerDirective<T> {\n private _componentRef: ComponentRef<MatTableColumnConfigComponent<T>> | null =\n null;\n\n /**\n * Gets the reference to the MatTableColumnConfigComponent.\n *\n * @returns {ComponentRef<MatTableColumnConfigComponent<T>> | null}\n * The reference to the MatTableColumnConfigComponent if it exists, otherwise null.\n */\n get componentRef(): ComponentRef<MatTableColumnConfigComponent<T>> | null {\n return this._componentRef;\n }\n\n constructor(\n private readonly elementRef: ElementRef,\n private readonly overlay: Overlay,\n private readonly viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener(\"click\")\n onClick(): void {\n // Create the component portal\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(true)\n .withViewportMargin(8)\n .withGrowAfterOpen(true)\n .withPush(true)\n .withPositions([\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ]);\n const overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n });\n const portal = new ComponentPortal(\n MatTableColumnConfigComponent<T>,\n this.viewContainerRef,\n this.viewContainerRef.injector\n );\n this._componentRef = overlayRef.attach(portal);\n\n overlayRef.backdropClick().subscribe(() => {\n overlayRef.detach();\n overlayRef.dispose();\n this._componentRef = null;\n });\n }\n}\n","import { MatPaginator } from \"@angular/material/paginator\";\nimport { Sort } from \"@angular/material/sort\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { MatMultiSortDirective } from \"./mat-multi-sort.directive\";\n\n/**\n * Sorts two items based on multiple sorting criteria.\n *\n * @description To do this, we iterate over each sort level and compare the values of the active column. If the values are equal, we move to the next sort level. If all sort levels are equal, we return 0.\n *\n * @template T - The type of the items being sorted.\n * @param {T} a - The first item to compare.\n * @param {T} b - The second item to compare.\n * @param {Sort[]} sorts - An array of sorting criteria, where each criterion specifies the property to sort by and the direction of sorting.\n * @returns {number} - A negative number if `a` should come before `b`, a positive number if `a` should come after `b`, or 0 if they are considered equal.\n */\nexport function MultiCriterionSort<T>(a: T, b: T, sorts: Sort[]): number {\n for (const { active, direction } of sorts) {\n const aValue = a[active as keyof T];\n const bValue = b[active as keyof T];\n\n const comparison = compareValues(aValue, bValue);\n\n if (comparison !== 0) {\n return direction === \"desc\" ? -comparison : comparison;\n }\n }\n\n return 0; // If all comparisons are equal, preserve original order\n}\n\nfunction compareValues<T>(aValue: T, bValue: T): number {\n if (aValue == null && bValue != null) return 1;\n if (aValue != null && bValue == null) return -1;\n if (aValue == null && bValue == null) return 0;\n\n if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n return aValue.localeCompare(bValue);\n }\n\n if (aValue > bValue) return 1;\n if (aValue < bValue) return -1;\n return 0;\n}\n\n/**\n * A data source class that extends `MatTableDataSource` to support multi-column sorting.\n *\n * @template T The type of data that the table displays.\n * @template P The type of paginator used, defaults to `MatPaginator`.\n *\n * @extends MatTableDataSource<T, P>\n */\nexport class MatMultiSortTableDataSource<\n T,\n P extends MatPaginator = MatPaginator,\n> extends MatTableDataSource<T, P> {\n override get sort(): MatMultiSortDirective | null {\n return super.sort as MatMultiSortDirective;\n }\n override set sort(sort: MatMultiSortDirective | null) {\n super.sort = sort;\n }\n\n constructor(initialData?: T[]) {\n super(initialData);\n // Set the default sort function\n this.sortData = (data): T[] => this.sortDataFunction(data);\n }\n\n private sortDataFunction(data: T[]): T[] {\n // Return the data if there is no sort\n if (!this.sort?._sorts().length) return data;\n\n // Sort the data:\n return data.sort((a, b) => MultiCriterionSort(a, b, this.sort!._sorts()));\n }\n}\n","import { NgIf } from \"@angular/common\";\nimport { Component, inject, OnInit, ViewEncapsulation } from \"@angular/core\";\nimport { MatSort, MatSortHeader, SortDirection } from \"@angular/material/sort\";\nimport { MatMultiSortDirective } from \"../mat-multi-sort.directive\";\n\n@Component({\n selector: \"[mat-multi-sort-header]\", // eslint-disable-line @angular-eslint/component-selector\n exportAs: \"matMultiSortHeader\",\n imports: [NgIf],\n providers: [{ provide: MatSort, useExisting: MatMultiSortDirective }],\n templateUrl: \"./mat-multi-sort-header.component.html\",\n styleUrl: \"./mat-multi-sort-header.component.scss\",\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n})\nexport class MatMultiSortHeaderComponent\n extends MatSortHeader\n implements OnInit\n{\n override readonly _sort: MatMultiSortDirective = inject(\n MatMultiSortDirective,\n {\n optional: true,\n }\n )!;\n\n /**\n * Retrieves the sort direction for the current column.\n *\n * @returns {SortDirection} The sort direction for the column identified by this.id.\n */\n get sortDirection(): SortDirection {\n return this._sort.getSortDirection(this.id);\n }\n\n /**\n * Gets the sort index for the current column.\n *\n * @returns {number} The index of the sort order for this column.\n */\n get sortIndex(): number {\n return this._sort.getSortIndex(this.id);\n }\n\n override _getAriaSortAttribute(): \"none\" | \"ascending\" | \"descending\" {\n if (!this._isSorted()) {\n return \"none\";\n }\n\n return this.sortDirection === \"asc\" ? \"ascending\" : \"descending\";\n }\n\n override _isSorted(): boolean {\n return this.sortIndex > -1;\n }\n\n override _toggleOnInteraction(): void {\n if (this._isDisabled()) return;\n\n super._toggleOnInteraction();\n }\n\n override _updateArrowDirection(): void {\n this._arrowDirection = this._isSorted()\n ? this.sortDirection\n : this.start || this._sort.start;\n }\n}\n","<!--\n We set the `tabindex` on an element inside the table header, rather than the header itself,\n because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n over having a button with an `aria-label` inside the header, because the button's `aria-label`\n will be read out as the user is navigating the table's cell (see #13012).\n\n The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div\n class=\"mat-sort-header-container mat-focus-indicator\"\n [class.mat-sort-header-sorted]=\"_isSorted()\"\n [class.mat-sort-header-position-before]=\"arrowPosition === 'before'\"\n [attr.tabindex]=\"_isDisabled() ? null : 0\"\n [attr.role]=\"_isDisabled() ? null : 'button'\">\n <!--\n TODO(crisbeto): this div isn't strictly necessary, but we have to keep it due to a large\n number of screenshot diff failures. It should be removed eventually. Note that the difference\n isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n causes it to be center-aligned, whereas removing it will keep the text to the left.\n -->\n <div class=\"mat-sort-header-content\">\n <ng-content></ng-content>\n </div>\n\n <!-- Disable animations while a current animation is running -->\n @if (_renderArrow()) {\n <div\n class=\"mat-sort-header-arrow\"\n [@arrowOpacity]=\"_getArrowViewState()\"\n [@arrowPosition]=\"_getArrowViewState()\"\n [@allowChildren]=\"_getArrowDirectionState()\"\n (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\n (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\n <div class=\"mat-sort-header-stem\"></div>\n <div\n class=\"mat-sort-header-indicator\"\n [@indicator]=\"_getArrowDirectionState()\">\n <div\n class=\"mat-sort-header-pointer-left\"\n [@leftPointer]=\"_getArrowDirectionState()\"></div>\n <div\n class=\"mat-sort-header-pointer-right\"\n [@rightPointer]=\"_getArrowDirectionState()\"></div>\n <div class=\"mat-sort-header-pointer-middle\"></div>\n </div>\n </div>\n }\n <div *ngIf=\"_isSorted()\" class=\"mat-sort-header-counter\">\n {{ sortIndex + 1 }}\n </div>\n</div>\n","import {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n DropListOrientation,\n} from \"@angular/cdk/drag-drop\";\nimport { ANIMATION_MODULE_TYPE, Component, inject, Input } from \"@angular/core\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { Sort } from \"@angular/material/sort\";\nimport { MatMultiSortDirective } from \"../mat-multi-sort.directive\";\n\n@Component({\n selector: \"mat-multi-sort-control\",\n imports: [CdkDropList, CdkDrag, MatChipsModule, MatIconModule],\n templateUrl: \"./mat-multi-sort-control.component.html\",\n styleUrl: \"./mat-multi-sort-control.component.scss\",\n standalone: true,\n})\nexport class MatMultiSortControlComponent {\n /**\n * Injects the ANIMATION_MODULE_TYPE token, which indicates the type of animation module being used.\n * This is an optional dependency and may be undefined if the animation module is not provided.\n *\n * @readonly\n * @type {ANIMATION_MODULE_TYPE | undefined}\n */\n readonly _animationModule = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n /**\n * Specifies the orientation of the drop list.\n * Can be either \"horizontal\" or \"vertical\".\n *\n * @type {DropListOrientation}\n * @default \"horizontal\"\n */\n @Input() orientation: DropListOrientation = \"horizontal\";\n\n /**\n * An optional input property that accepts an instance of `MatMultiSortDirective`.\n * This directive is used to control the sorting behavior of the table.\n */\n @Input() sort?: MatMultiSortDirective;\n\n /**\n * Retrieves the array of Sort objects from the current sort instance.\n * If the sort instance is not defined, it returns an empty array.\n *\n * @returns {Sort[]} An array of Sort objects or an empty array if no sorts are defined.\n */\n get sorts(): Sort[] {\n return this.sort?._sorts() || [];\n }\n\n /**\n * Handles the click event on a sort chip.\n * Toggles the sort direction for the given sort ID.\n *\n * @param id - The identifier of the sort field to toggle.\n * @returns void\n */\n onChipClick(id: string): void {\n this.sort?.toggleSortDirection(id);\n }\n\n /**\n * Handles the event when a sort chip is removed.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n onChipRemoved(id: string): void {\n this.sort?.removeSortLevel(id);\n }\n\n /**\n * Clears the current sorting applied to the table.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n onClearClick(): void {\n this.sort?.clearSorting();\n }\n\n /**\n * Handles the drop event for drag-and-drop sorting.\n * Reorders the sort levels based on the previous and current indices.\n *\n * @param event - The drag-and-drop event containing the previous and current indices of the sort order.\n */\n onDrop(event: CdkDragDrop<Sort[]>): void {\n this.sort?.reorderSortLevel(event.previousIndex, event.currentIndex);\n }\n}\n","<mat-chip-listbox\n cdkDropList\n [cdkDropListOrientation]=\"orientation\"\n (cdkDropListDropped)=\"onDrop($event)\">\n <mat-chip\n [disabled]=\"!sorts.length\"\n [highlighted]=\"true\"\n (click)=\"onClearClick()\"\n ><mat-icon matChipAvatar fontIcon=\"clear_all\"></mat-icon>Clear All</mat-chip\n >\n @for (column of sorts; track $index) {\n <mat-chip\n class=\"mat-sort-header\"\n cdkDrag\n (click)=\"onChipClick(column.active)\"\n (removed)=\"onChipRemoved(column.active)\">\n <div\n matChipAvatar\n class=\"mat-sort-header-container mat-sort-header-sorted mat-focus-indicator\"\n [class.mat-sort-header-descending]=\"column.direction === 'desc'\"\n [class.mat-sort-header-ascending]=\"column.direction === 'asc'\"\n [class.mat-sort-header-animations-disabled]=\"\n _animationModule === 'NoopAnimations'\n \">\n <div class=\"mat-sort-header-arrow\">\n <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path\n d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\" />\n </svg>\n </div>\n </div>\n {{ column.active }}\n <button matChipRemove>\n <mat-icon>clear</mat-icon>\n </button>\n </mat-chip>\n }\n</mat-chip-listbox>\n","/*\n * Public API surface of the library\n */\n\nexport * from \"./lib/mat-table-column-config\";\nexport * from \"./lib/mat-multi-sort.directive\";\nexport * from \"./lib/mat-table-column-config-trigger.directive\";\nexport * from \"./lib/mat-multi-sort-table-data-source\";\nexport * from \"./lib/mat-table-column-config-persistence.service\";\nexport * from \"./lib/mat-multi-sort-header/mat-multi-sort-header.component\";\nexport * from \"./lib/mat-multi-sort-control/mat-multi-sort-control.component\";\nexport * from \"./lib/mat-table-column-config/mat-table-column-config.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MatTableColumnConfigPersistenceService","i1","i2"],"mappings":";;;;;;;;;;;;;;;;AAaA;;;;;;AAMG;MACU,iCAAiC,GAAG,IAAI,cAAc,CACjE,mCAAmC,EACnC;AAEF;;;;;;AAMG;MACU,iCAAiC,GAAG,IAAI,cAAc,CACjE,mCAAmC,EACnC;AAEF;;;AAGG;MACU,6BAA6B,GAAG,IAAI,cAAc,CAC7D,+BAA+B;;ACnBjC;;;;;;;AAOG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,EAC1B;AAEF;;;;;;;;;;;;;;;;;;AAkBG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,EAC1B;AAEF;;;;;;AAMG;MACU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB,EACtB;AAUI,MAAO,qBAAsB,SAAQ,OAAO,CAAA;AAevC,IAAA,oBAAA,CAAA;AAGU,IAAA,GAAA,CAAA;AAGA,IAAA,OAAA,CAAA;AAnBF,IAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU,CAAC;AAEjE;;;;;AAKG;AACM,IAAA,MAAM,GAA2B,MAAM,CAAC,EAAE,CAAC,CAAC;AAErD,IAAA,WAAA,CAGS,oBAA6B,EAGnB,GAAW,EAGX,OAAgB,EAGjC,cAAkD,EAAA;QAElD,KAAK,CAAC,cAAc,CAAC,CAAC;QAXf,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAS;QAGnB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAGX,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAOjC,QAAA,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,KAAK,4BAA4B,CAAC;AAC1C,QAAA,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;SACrE;;QAGD,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,gBAAA,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;AACtD,gBAAA,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE;AAC7D,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;KACJ;AAED;;;;;AAKG;AACI,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACnC;AAED;;;;;AAKG;AACI,IAAA,YAAY,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;KACxD;AAEQ,IAAA,IAAI,CAAC,QAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;AAG7C,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9D,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;SACxE;aAAM;;YAEL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAChC;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aACjD;SACF;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,EAAU,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;QAEtB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;;AAMG;IACI,gBAAgB,CAAC,aAAqB,EAAE,YAAoB,EAAA;QACjE,IAAI,aAAa,KAAK,YAAY;YAAE,OAAO;QAE3C,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;AAKG;AACI,IAAA,mBAAmB,CAAC,EAAU,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;AAEtB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;QAEjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACzC,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,YAAY,EAAE,IAAI;AACJ,SAAA,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;AAKG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,mBAAmB,GAAA;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,oBAAoB;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACjE;AAnKU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBActB,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAGxB,oBAAoB,EAGpB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,wBAAwB,6BAGxB,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAvBvB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,UAAU;AAClB,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;0BAcI,QAAQ;;0BACR,MAAM;2BAAC,wBAAwB,CAAA;;0BAE/B,QAAQ;;0BACR,MAAM;2BAAC,oBAAoB,CAAA;;0BAE3B,QAAQ;;0BACR,MAAM;2BAAC,wBAAwB,CAAA;;0BAE/B,QAAQ;;0BACR,MAAM;2BAAC,wBAAwB,CAAA;yCArBjB,kBAAkB,EAAA,CAAA;sBADlC,MAAM;;;MChEI,sCAAsC,CAAA;AAyBxC,IAAA,oBAAA,CAAA;AAGU,IAAA,GAAA,CAAA;AAGA,IAAA,OAAA,CAAA;AA9BF,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAC;AAEtE;;;;AAIG;AACH,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KACjC;AAED;;;;AAIG;IACH,IAAW,OAAO,CAAC,KAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,WAAA,CAGS,oBAA6B,EAGnB,GAAW,EAGX,OAAgB,EAAA;QAN1B,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAS;QAGnB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAGX,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAEjC,QAAA,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,KAAK,qCAAqC,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CACvD,CAAC;SACH;KACF;AAED;;;;AAIG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;AAEO,IAAA,mBAAmB,CAAC,OAAyB,EAAA;QACnD,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,OAAO;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;KACzD;AAzDU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,EAwBvC,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,iCAAiC,EAGjC,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,6BAA6B,6BAG7B,iCAAiC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA9BhC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,cAFrC,MAAM,EAAA,CAAA,CAAA;;4FAEP,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAHlD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAwBI,QAAQ;;0BACR,MAAM;2BAAC,iCAAiC,CAAA;;0BAExC,QAAQ;;0BACR,MAAM;2BAAC,6BAA6B,CAAA;;0BAEpC,QAAQ;;0BACR,MAAM;2BAAC,iCAAiC,CAAA;;;MCtBhC,6BAA6B,CAAA;AAKrB,IAAA,kBAAA,CAAA;AAJX,IAAA,YAAY,CAA2B;IAC/C,OAAO,GAAqB,EAAE,CAAC;AAE/B,IAAA,WAAA,CACmB,kBAA6D,EAAA;QAA7D,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAA2C;KAC5E;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB;AACxC,aAAA,UAAU,EAAE;AACZ,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;AAED;;;;;AAKG;AACH,IAAA,eAAe,CAAC,KAAqB,EAAA;AACnC,QAAA,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAChD;AAED;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,EAAW,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;AAEtB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;QAC3D,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAChD;wGA3CU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpB1C,wfAgBA,EDDY,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,8fAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKrD,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAC1B,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAA,UAAA,EAGrD,IAAI,EAAA,QAAA,EAAA,wfAAA,EAAA,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA,CAAA;;;MEFL,oCAAoC,CAAA;AAe5B,IAAA,UAAA,CAAA;AACA,IAAA,OAAA,CAAA;AACA,IAAA,gBAAA,CAAA;IAhBX,aAAa,GACnB,IAAI,CAAC;AAEP;;;;;AAKG;AACH,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;AAED,IAAA,WAAA,CACmB,UAAsB,EACtB,OAAgB,EAChB,gBAAkC,EAAA;QAFlC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KACjD;IAGJ,OAAO,GAAA;;AAEL,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO;AAClC,aAAA,QAAQ,EAAE;AACV,aAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;aAClD,sBAAsB,CAAC,IAAI,CAAC;aAC5B,kBAAkB,CAAC,CAAC,CAAC;aACrB,iBAAiB,CAAC,IAAI,CAAC;aACvB,QAAQ,CAAC,IAAI,CAAC;AACd,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;AACF,SAAA,CAAC,CAAC;AACL,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACrC,gBAAgB;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AAClD,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAChC,6BAAgC,GAChC,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC/B,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE/C,QAAA,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;YACxC,UAAU,CAAC,MAAM,EAAE,CAAC;YACpB,UAAU,CAAC,OAAO,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5B,SAAC,CAAC,CAAC;KACJ;wGAvDU,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBALhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;oIAsBC,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,CAAA;;;AC/BvB;;;;;;;;;;AAUG;SACa,kBAAkB,CAAI,CAAI,EAAE,CAAI,EAAE,KAAa,EAAA;IAC7D,KAAK,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,KAAK,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC,CAAC;QAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,QAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,SAAS,KAAK,MAAM,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;SACxD;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAI,MAAS,EAAE,MAAS,EAAA;AAC5C,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC,CAAC;AAC/C,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;AAChD,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC,CAAC;IAE/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5D,QAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;KACrC;IAED,IAAI,MAAM,GAAG,MAAM;AAAE,QAAA,OAAO,CAAC,CAAC;IAC9B,IAAI,MAAM,GAAG,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;AAC/B,IAAA,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;AAOG;AACG,MAAO,2BAGX,SAAQ,kBAAwB,CAAA;AAChC,IAAA,IAAa,IAAI,GAAA;QACf,OAAO,KAAK,CAAC,IAA6B,CAAC;KAC5C;IACD,IAAa,IAAI,CAAC,IAAkC,EAAA;AAClD,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;KACnB;AAED,IAAA,WAAA,CAAY,WAAiB,EAAA;QAC3B,KAAK,CAAC,WAAW,CAAC,CAAC;;AAEnB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KAC5D;AAEO,IAAA,gBAAgB,CAAC,IAAS,EAAA;;QAEhC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;;QAG7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC3E;AACF;;AC9DK,MAAO,2BACX,SAAQ,aAAa,CAAA;AAGH,IAAA,KAAK,GAA0B,MAAM,CACrD,qBAAqB,EACrB;AACE,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CACD,CAAC;AAEH;;;;AAIG;AACH,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC7C;AAED;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACzC;IAEQ,qBAAqB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,OAAO,MAAM,CAAC;SACf;AAED,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC;KAClE;IAEQ,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;KAC5B;IAEQ,oBAAoB,GAAA;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAE/B,KAAK,CAAC,oBAAoB,EAAE,CAAC;KAC9B;IAEQ,qBAAqB,GAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE;cACnC,IAAI,CAAC,aAAa;cAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACpC;wGAnDU,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAN3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,ECTvE,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,47EAqDA,ghED7CY,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAOH,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EACzB,oBAAoB,EACrB,OAAA,EAAA,CAAC,IAAI,CAAC,EAAA,SAAA,EACJ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,iBAGtD,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,IAAI,EAAA,QAAA,EAAA,47EAAA,EAAA,MAAA,EAAA,CAAA,w9DAAA,CAAA,EAAA,CAAA;;;MEML,4BAA4B,CAAA;AACvC;;;;;;AAMG;IACM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9E;;;;;;AAMG;IACM,WAAW,GAAwB,YAAY,CAAC;AAEzD;;;AAGG;AACM,IAAA,IAAI,CAAyB;AAEtC;;;;;AAKG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC;AAED;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;KACpC;AAED;;;;;AAKG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;KAChC;AAED;;;;;AAKG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;KAC3B;AAED;;;;;AAKG;AACH,IAAA,MAAM,CAAC,KAA0B,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;KACtE;wGA1EU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBzC,60CAsCA,EDxBY,MAAA,EAAA,CAAA,+vFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,8fAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,EAAA,UAAA,EAGlD,IAAI,EAAA,QAAA,EAAA,60CAAA,EAAA,MAAA,EAAA,CAAA,+vFAAA,CAAA,EAAA,CAAA;8BAmBP,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAMG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;AE1CR;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-mat-table-multi-sort.mjs","sources":["../../../src/lib/mat-table-column-config.ts","../../../src/lib/mat-multi-sort.directive.ts","../../../src/lib/mat-table-column-config-persistence.service.ts","../../../src/lib/mat-table-column-config/mat-table-column-config.component.ts","../../../src/lib/mat-table-column-config/mat-table-column-config.component.html","../../../src/lib/mat-table-column-config-trigger.directive.ts","../../../src/lib/mat-multi-sort-table-data-source.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.html","../../../src/lib/mat-multi-sort-control/mat-multi-sort-control.component.ts","../../../src/lib/mat-multi-sort-control/mat-multi-sort-control.component.html","../../../src/public-api.ts","../../../src/ngx-mat-table-multi-sort.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\n\n/**\n * Represents the configuration for a table column.\n *\n * @template T - The type of the data object that the table displays.\n */\nexport interface TableColumn<T> {\n id: keyof T;\n label: string;\n visible: boolean;\n}\n\n/**\n * Injection token for the storage mechanism used to persist column configuration.\n *\n * This token can be used to provide a custom storage implementation for saving\n * and retrieving the state of table column configurations.\n *\n */\nexport const COLUMN_CONFIG_PERSISTENCE_STORAGE = new InjectionToken<Storage>(\n \"COLUMN_CONFIG_PERSISTENCE_STORAGE\"\n);\n\n/**\n * Injection token used to enable or disable column configuration persistence.\n *\n * This token can be provided with a boolean value to indicate whether the\n * column configurations should be persisted (e.g., in local storage or a database).\n *\n */\nexport const COLUMN_CONFIG_PERSISTENCE_ENABLED = new InjectionToken<boolean>(\n \"COLUMN_CONFIG_PERSISTENCE_ENABLED\"\n);\n\n/**\n * Injection token for the column configuration persistence key.\n * This token is used to provide a unique key for persisting column configurations.\n */\nexport const COLUMN_CONFIG_PERSISTENCE_KEY = new InjectionToken<string>(\n \"COLUMN_CONFIG_PERSISTENCE_KEY\"\n);\n","import { moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n Directive,\n effect,\n EventEmitter,\n Inject,\n InjectionToken,\n Optional,\n Output,\n signal,\n WritableSignal,\n} from \"@angular/core\";\nimport {\n MAT_SORT_DEFAULT_OPTIONS,\n MatSort,\n MatSortable,\n MatSortDefaultOptions,\n Sort,\n SortDirection,\n} from \"@angular/material/sort\";\n\n/**\n * Injection token for the storage mechanism used to persist sorting state.\n *\n * This token can be used to provide a custom storage implementation for persisting\n * the sorting state of a table. By default, it can be set to use localStorage, sessionStorage,\n * or any other storage mechanism that implements the Storage interface.\n *\n */\nexport const SORT_PERSISTENCE_STORAGE = new InjectionToken<Storage>(\n \"SORT_PERSISTENCE_STORAGE\"\n);\n\n/**\n * Injection token used to enable or disable the persistence of sorting state.\n *\n * This token can be provided in the application's dependency injection system\n * to control whether the sorting state of a table should be persisted across\n * sessions or not.\n *\n * @example\n * // To enable sort persistence:\n * providers: [\n * { provide: SORT_PERSISTENCE_ENABLED, useValue: true }\n * ]\n *\n * @example\n * // To disable sort persistence:\n * providers: [\n * { provide: SORT_PERSISTENCE_ENABLED, useValue: false }\n * ]\n */\nexport const SORT_PERSISTENCE_ENABLED = new InjectionToken<boolean>(\n \"SORT_PERSISTENCE_ENABLED\"\n);\n\n/**\n * Injection token for the key used to persist sorting state.\n *\n * This token can be used to provide a custom key for storing\n * the sorting state in a persistence layer, such as local storage\n * or a database.\n */\nexport const SORT_PERSISTENCE_KEY = new InjectionToken<string>(\n \"SORT_PERSISTENCE_KEY\"\n);\n\n@Directive({\n selector: \"[matMultiSort]\",\n exportAs: \"matMultiSort\",\n host: {\n class: \"mat-sort\",\n },\n standalone: true,\n})\nexport class MatMultiSortDirective extends MatSort {\n @Output()\n private readonly persistenceChanged = new EventEmitter<Sort[]>();\n private _key: string;\n\n /**\n * A writable signal that holds an array of Sort objects.\n * This signal is used to manage the sorting state of the table.\n *\n * @readonly\n */\n readonly _sorts: WritableSignal<Sort[]> = signal([]);\n\n /**\n * Gets the key used for column configuration persistence.\n *\n * @returns {string} The key used for column configuration persistence.\n */\n public get key(): string {\n return this._key;\n }\n\n constructor(\n @Optional()\n @Inject(SORT_PERSISTENCE_ENABLED)\n public isPersistenceEnabled: boolean,\n @Optional()\n @Inject(SORT_PERSISTENCE_KEY)\n readonly initialKey: string,\n @Optional()\n @Inject(SORT_PERSISTENCE_STORAGE)\n private readonly storage: Storage,\n @Optional()\n @Inject(MAT_SORT_DEFAULT_OPTIONS)\n defaultOptions?: MatSortDefaultOptions | undefined\n ) {\n super(defaultOptions);\n\n this.isPersistenceEnabled ??= true;\n this._key = initialKey ?? \"mat-table-persistence-sort\";\n this.storage ??= localStorage;\n\n if (this.isPersistenceEnabled) {\n const sortsSerialized = this.storage.getItem(this.key);\n this._sorts.set(sortsSerialized ? JSON.parse(sortsSerialized) : []);\n }\n\n // This is necessary because the sortChange event is not emitted when the _sorts signal is updated directly (e.g., this._sorts.set([])).\n effect(() => {\n const length = this._sorts().length;\n this.sortChange.emit({\n active: length ? this._sorts()[length - 1].active : \"\",\n direction: length ? this._sorts()[length - 1].direction : \"\",\n });\n this.persistSortSettings();\n });\n }\n\n /**\n * Retrieves the sort direction for a given column ID.\n *\n * @param id - The ID of the column to get the sort direction for.\n * @returns The sort direction ('asc', 'desc', or '') for the specified column ID.\n */\n public getSortDirection(id: string): SortDirection {\n const sort = this._sorts().find((e) => e.active === id);\n return sort ? sort.direction : \"\";\n }\n\n /**\n * Gets the sort index of the given column ID.\n *\n * @param id - The ID of the column to get the sort index for.\n * @returns The sort index of the column, or -1 if the column is not active.\n */\n public getSortIndex(id: string): number {\n return this._sorts().findIndex((e) => e.active === id);\n }\n\n override sort(sortable: MatSortable): void {\n this.active = sortable.id;\n this.direction = this.getSortDirection(sortable.id);\n const index = this.getSortIndex(sortable.id);\n\n // If the column is not active, add it to the list of active columns.\n if (index < 0) {\n this.direction = sortable.start ? sortable.start : this.start;\n this._sorts().push({ active: this.active, direction: this.direction });\n } else {\n // If the column is active, update the direction or remove it if the direction is empty.\n this.direction = this.getNextSortDirection(sortable);\n if (!this.direction) {\n this._sorts().splice(index, 1);\n } else {\n this._sorts()[index].direction = this.direction;\n }\n }\n\n this.sortChange.emit({ active: this.active, direction: this.direction });\n this.persistSortSettings();\n }\n\n /**\n * Removes a sort level by its identifier.\n * If the sort level is not found, the method returns without making any changes.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n public removeSortLevel(id: string): void {\n const index = this.getSortIndex(id);\n if (index < 0) return;\n\n this._sorts().splice(index, 1);\n this.sortChange.emit();\n this.persistSortSettings();\n }\n\n /**\n * Reorders the sort level by moving an item in the sort array from a previous index to a current index.\n * If the previous index is the same as the current index, the function returns without making any changes.\n *\n * @param previousIndex - The index of the item to be moved.\n * @param currentIndex - The index to which the item should be moved.\n */\n public reorderSortLevel(previousIndex: number, currentIndex: number): void {\n if (previousIndex === currentIndex) return;\n\n moveItemInArray(this._sorts(), previousIndex, currentIndex);\n this.sortChange.emit(this._sorts()[currentIndex]);\n this.persistSortSettings();\n }\n\n /**\n * Toggles the sort direction for the given column ID.\n *\n * @param id - The unique identifier of the column to toggle the sort direction for.\n * @returns void\n */\n public toggleSortDirection(id: string): void {\n const index = this.getSortIndex(id);\n if (index < 0) return;\n\n this.active = id;\n // The value of this.direction is used in the getNextSortDirection method. That's why it is necessary for it to be set before the call to getNextSortDirection.\n this.direction = this.getSortDirection(id);\n this.direction = this.getNextSortDirection({\n id: id,\n disableClear: true,\n } as MatSortable);\n this._sorts()[index].direction = this.direction;\n this.sortChange.emit({ active: this.active, direction: this.direction });\n this.persistSortSettings();\n }\n\n /**\n * Clears the current sorting state.\n *\n * @param id - The unique identifier of the column to toggle the sort direction for.\n * @returns void\n */\n public clearSorting(): void {\n this.active = \"\";\n this.direction = \"\";\n this._sorts.set([]);\n this.sortChange.emit();\n this.persistSortSettings();\n }\n\n private persistSortSettings(): void {\n this.persistenceChanged.emit(this._sorts());\n if (this.isPersistenceEnabled)\n this.storage.setItem(this.key, JSON.stringify(this._sorts()));\n }\n\n /**\n * Sets the persistence key for storing sort settings and optionally overwrites the persisted value.\n *\n * @param key - The key to be used for persisting sort settings.\n * @param overwritePersistedValue - If true, the current sort settings will be persisted immediately, overwriting any existing value. Defaults to false.\n *\n * @returns void\n */\n public setPersistenceKey(key: string, overwritePersistedValue = false): void {\n this._key = key;\n if (overwritePersistedValue) {\n this.persistSortSettings();\n return;\n }\n\n const sortsSerialized = this.storage.getItem(this.key);\n this._sorts.set(sortsSerialized ? JSON.parse(sortsSerialized) : []);\n }\n}\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport {\n COLUMN_CONFIG_PERSISTENCE_ENABLED,\n COLUMN_CONFIG_PERSISTENCE_KEY,\n COLUMN_CONFIG_PERSISTENCE_STORAGE,\n TableColumn,\n} from \"./mat-table-column-config\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class MatTableColumnConfigPersistenceService<T> {\n private readonly columns$ = new BehaviorSubject<TableColumn<T>[]>([]);\n private _key: string;\n\n /**\n * Gets the current table columns configuration.\n *\n * @returns {TableColumn<T>[]} An array of table columns.\n */\n public get columns(): TableColumn<T>[] {\n return this.columns$.getValue();\n }\n\n /**\n * Sets the columns configuration for the table and persists the configuration.\n *\n * @param value - An array of `TableColumn<T>` representing the new column configuration.\n */\n public set columns(value: TableColumn<T>[]) {\n this.columns$.next(value);\n this.persistColumnConfig(value);\n }\n\n /**\n * Gets the key used for column configuration persistence.\n *\n * @returns {string} The key used for column configuration persistence.\n */\n public get key(): string {\n return this._key;\n }\n\n constructor(\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_ENABLED)\n public isPersistenceEnabled: boolean,\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_KEY)\n readonly initialKey: string,\n @Optional()\n @Inject(COLUMN_CONFIG_PERSISTENCE_STORAGE)\n private readonly storage: Storage\n ) {\n this.isPersistenceEnabled ??= true;\n this._key = initialKey ?? \"mat-table-persistence-column-config\";\n this.storage ??= localStorage;\n\n if (this.isPersistenceEnabled) {\n const columnsSerialized = this.storage.getItem(this.key);\n this.columns$.next(\n columnsSerialized ? JSON.parse(columnsSerialized) : []\n );\n }\n }\n\n /**\n * Retrieves an observable stream of table columns.\n *\n * @returns {Observable<TableColumn<T>[]>} An observable that emits an array of table columns.\n */\n public getColumns(): Observable<TableColumn<T>[]> {\n return this.columns$.asObservable();\n }\n\n private persistColumnConfig(columns: TableColumn<T>[]): void {\n if (!this.isPersistenceEnabled) return;\n this.storage.setItem(this.key, JSON.stringify(columns));\n }\n\n /**\n * Sets the persistence key for storing column configurations.\n *\n * @param key - The key to be used for persistence.\n * @param overwritePersistedValue - If true, the current column configuration will be persisted immediately overwriting any exising value stored under the new key.\n * If false, the persisted column configuration will be loaded and applied.\n * Defaults to false.\n *\n * @returns void\n */\n public setPersistenceKey(key: string, overwritePersistedValue = false): void {\n this._key = key;\n if (overwritePersistedValue) {\n this.persistColumnConfig(this.columns);\n return;\n }\n\n const columnsSerialized = this.storage.getItem(this.key);\n this.columns$.next(columnsSerialized ? JSON.parse(columnsSerialized) : []);\n }\n}\n","import {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n moveItemInArray,\n} from \"@angular/cdk/drag-drop\";\nimport { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { Subscription } from \"rxjs\";\nimport { TableColumn } from \"../mat-table-column-config\";\nimport { MatTableColumnConfigPersistenceService } from \"../mat-table-column-config-persistence.service\";\n\n@Component({\n selector: \"mat-table-column-config\",\n imports: [\n CdkDropList,\n CdkDrag,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n MatTooltipModule,\n ],\n templateUrl: \"./mat-table-column-config.component.html\",\n styleUrl: \"./mat-table-column-config.component.scss\",\n standalone: true,\n})\nexport class MatTableColumnConfigComponent<T> implements OnInit, OnDestroy {\n private subscription: Subscription | undefined;\n columns: TableColumn<T>[] = [];\n\n constructor(\n private readonly persistenceService: MatTableColumnConfigPersistenceService<T>\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.persistenceService\n .getColumns()\n .subscribe((columns) => {\n this.columns = columns;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n }\n\n /**\n * Handles the event when a dragged column is dropped.\n * This method updates the order of columns based on the drag and drop action.\n *\n * @param event - The event object containing information about the drag and drop action.\n */\n onColumnDropped(event: CdkDragDrop<T>): void {\n moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n this.persistenceService.columns = this.columns;\n }\n\n /**\n * Toggles the visibility of a column based on its identifier.\n *\n * @param id - The identifier of the column whose visibility is to be changed.\n */\n onColumnVisibilityChanged(id: keyof T): void {\n const index = this.columns.findIndex((column) => column.id === id);\n if (index < 0) return;\n\n this.columns[index].visible = !this.columns[index].visible;\n this.persistenceService.columns = this.columns;\n }\n\n /**\n * Sets all columns in the table to visible and updates the persisted column configuration.\n *\n * Iterates through the `columns` array, setting each column's `visible` property to `true`.\n * Then, updates the `persistenceService.columns` property to reflect the new visibility state.\n */\n selectAllColumns(): void {\n for (const column of this.columns) {\n column.visible = true;\n }\n this.persistenceService.columns = this.columns;\n }\n\n /**\n * Deselects all columns by setting their `visible` property to `false`.\n * Updates the persisted columns state via the `persistenceService`.\n *\n * @remarks\n * This method iterates through all columns in the `columns` array and hides each one.\n * After updating the visibility, it synchronizes the state with the persistence service.\n */\n deselectAllColumns(): void {\n for (const column of this.columns) {\n column.visible = false;\n }\n this.persistenceService.columns = this.columns;\n }\n\n /**\n * Inverts the visibility state of all columns in the `columns` array.\n * Each column's `visible` property is toggled between `true` and `false`.\n * After updating the visibility, the modified columns array is assigned to the persistence service\n * to persist the new visibility state.\n */\n invertColumnSelection(): void {\n for (const column of this.columns) {\n column.visible = !column.visible;\n }\n this.persistenceService.columns = this.columns;\n }\n}\n","<div class=\"container mat-elevation-z4\">\n <div class=\"toolbar\">\n <button\n mat-icon-button\n matTooltip=\"Select all columns\"\n (click)=\"selectAllColumns()\">\n <mat-icon>select_all</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Deselect all columns\"\n (click)=\"deselectAllColumns()\">\n <mat-icon>deselect</mat-icon>\n </button>\n <button\n mat-icon-button\n matTooltip=\"Invert selection\"\n (click)=\"invertColumnSelection()\">\n <mat-icon>flip</mat-icon>\n </button>\n </div>\n <hr />\n <div\n cdkDropList\n class=\"table-column-list\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"onColumnDropped($event)\">\n @for (column of columns; track column.id) {\n <div cdkDrag class=\"table-column\">\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"onColumnVisibilityChanged(column.id)\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </div>\n</div>\n","import { Overlay } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { MatTableColumnConfigComponent } from \"./mat-table-column-config/mat-table-column-config.component\";\n\n@Directive({\n selector: \"[matTableColumnConfigTrigger]\",\n exportAs: \"matTableColumnConfigTrigger\",\n standalone: true,\n})\nexport class MatTableColumnConfigTriggerDirective<T> {\n private _componentRef: ComponentRef<MatTableColumnConfigComponent<T>> | null =\n null;\n\n /**\n * Gets the reference to the MatTableColumnConfigComponent.\n *\n * @returns {ComponentRef<MatTableColumnConfigComponent<T>> | null}\n * The reference to the MatTableColumnConfigComponent if it exists, otherwise null.\n */\n get componentRef(): ComponentRef<MatTableColumnConfigComponent<T>> | null {\n return this._componentRef;\n }\n\n constructor(\n private readonly elementRef: ElementRef,\n private readonly overlay: Overlay,\n private readonly viewContainerRef: ViewContainerRef\n ) {}\n\n @HostListener(\"click\")\n onClick(): void {\n // Create the component portal\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(true)\n .withViewportMargin(8)\n .withGrowAfterOpen(true)\n .withPush(true)\n .withPositions([\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ]);\n const overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n });\n const portal = new ComponentPortal(\n MatTableColumnConfigComponent<T>,\n this.viewContainerRef,\n this.viewContainerRef.injector\n );\n this._componentRef = overlayRef.attach(portal);\n\n overlayRef.backdropClick().subscribe(() => {\n overlayRef.detach();\n overlayRef.dispose();\n this._componentRef = null;\n });\n }\n}\n","import { MatPaginator } from \"@angular/material/paginator\";\nimport { Sort } from \"@angular/material/sort\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { MatMultiSortDirective } from \"./mat-multi-sort.directive\";\n\n/**\n * Sorts two items based on multiple sorting criteria.\n *\n * @description To do this, we iterate over each sort level and compare the values of the active column. If the values are equal, we move to the next sort level. If all sort levels are equal, we return 0.\n *\n * @template T - The type of the items being sorted.\n * @param {T} a - The first item to compare.\n * @param {T} b - The second item to compare.\n * @param {Sort[]} sorts - An array of sorting criteria, where each criterion specifies the property to sort by and the direction of sorting.\n * @returns {number} - A negative number if `a` should come before `b`, a positive number if `a` should come after `b`, or 0 if they are considered equal.\n */\nexport function MultiCriterionSort<T>(a: T, b: T, sorts: Sort[]): number {\n for (const { active, direction } of sorts) {\n const aValue = a[active as keyof T];\n const bValue = b[active as keyof T];\n\n const comparison = compareValues(aValue, bValue);\n\n if (comparison !== 0) {\n return direction === \"desc\" ? -comparison : comparison;\n }\n }\n\n return 0; // If all comparisons are equal, preserve original order\n}\n\nfunction compareValues<T>(aValue: T, bValue: T): number {\n if (aValue == null && bValue != null) return 1;\n if (aValue != null && bValue == null) return -1;\n if (aValue == null && bValue == null) return 0;\n\n if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n return aValue.localeCompare(bValue);\n }\n\n if (aValue > bValue) return 1;\n if (aValue < bValue) return -1;\n return 0;\n}\n\n/**\n * A data source class that extends `MatTableDataSource` to support multi-column sorting.\n *\n * @template T The type of data that the table displays.\n * @template P The type of paginator used, defaults to `MatPaginator`.\n *\n * @extends MatTableDataSource<T, P>\n */\nexport class MatMultiSortTableDataSource<\n T,\n P extends MatPaginator = MatPaginator,\n> extends MatTableDataSource<T, P> {\n override get sort(): MatMultiSortDirective | null {\n return super.sort as MatMultiSortDirective;\n }\n override set sort(sort: MatMultiSortDirective | null) {\n super.sort = sort;\n }\n\n constructor(initialData?: T[]) {\n super(initialData);\n // Set the default sort function\n this.sortData = (data): T[] => this.sortDataFunction(data);\n }\n\n private sortDataFunction(data: T[]): T[] {\n // Return the data if there is no sort\n if (!this.sort?._sorts().length) return data;\n\n // Sort the data:\n return data.sort((a, b) => MultiCriterionSort(a, b, this.sort!._sorts()));\n }\n}\n","import { NgIf } from \"@angular/common\";\nimport { Component, inject, OnInit, ViewEncapsulation } from \"@angular/core\";\nimport { MatSort, MatSortHeader, SortDirection } from \"@angular/material/sort\";\nimport { MatMultiSortDirective } from \"../mat-multi-sort.directive\";\n\n@Component({\n selector: \"[mat-multi-sort-header]\", // eslint-disable-line @angular-eslint/component-selector\n exportAs: \"matMultiSortHeader\",\n imports: [NgIf],\n providers: [{ provide: MatSort, useExisting: MatMultiSortDirective }],\n templateUrl: \"./mat-multi-sort-header.component.html\",\n styleUrl: \"./mat-multi-sort-header.component.scss\",\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n})\nexport class MatMultiSortHeaderComponent\n extends MatSortHeader\n implements OnInit\n{\n override readonly _sort: MatMultiSortDirective = inject(\n MatMultiSortDirective,\n {\n optional: true,\n }\n )!;\n\n /**\n * Retrieves the sort direction for the current column.\n *\n * @returns {SortDirection} The sort direction for the column identified by this.id.\n */\n get sortDirection(): SortDirection {\n return this._sort.getSortDirection(this.id);\n }\n\n /**\n * Gets the sort index for the current column.\n *\n * @returns {number} The index of the sort order for this column.\n */\n get sortIndex(): number {\n return this._sort.getSortIndex(this.id);\n }\n\n override _getAriaSortAttribute(): \"none\" | \"ascending\" | \"descending\" {\n if (!this._isSorted()) {\n return \"none\";\n }\n\n return this.sortDirection === \"asc\" ? \"ascending\" : \"descending\";\n }\n\n override _isSorted(): boolean {\n return this.sortIndex > -1;\n }\n\n override _toggleOnInteraction(): void {\n if (this._isDisabled()) return;\n\n super._toggleOnInteraction();\n }\n\n override _updateArrowDirection(): void {\n this._arrowDirection = this._isSorted()\n ? this.sortDirection\n : this.start || this._sort.start;\n }\n}\n","<!--\n We set the `tabindex` on an element inside the table header, rather than the header itself,\n because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n over having a button with an `aria-label` inside the header, because the button's `aria-label`\n will be read out as the user is navigating the table's cell (see #13012).\n\n The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div\n class=\"mat-sort-header-container mat-focus-indicator\"\n [class.mat-sort-header-sorted]=\"_isSorted()\"\n [class.mat-sort-header-position-before]=\"arrowPosition === 'before'\"\n [attr.tabindex]=\"_isDisabled() ? null : 0\"\n [attr.role]=\"_isDisabled() ? null : 'button'\">\n <!--\n TODO(crisbeto): this div isn't strictly necessary, but we have to keep it due to a large\n number of screenshot diff failures. It should be removed eventually. Note that the difference\n isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n causes it to be center-aligned, whereas removing it will keep the text to the left.\n -->\n <div class=\"mat-sort-header-content\">\n <ng-content></ng-content>\n </div>\n\n <!-- Disable animations while a current animation is running -->\n @if (_renderArrow()) {\n <div\n class=\"mat-sort-header-arrow\"\n [@arrowOpacity]=\"_getArrowViewState()\"\n [@arrowPosition]=\"_getArrowViewState()\"\n [@allowChildren]=\"_getArrowDirectionState()\"\n (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\n (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\n <div class=\"mat-sort-header-stem\"></div>\n <div\n class=\"mat-sort-header-indicator\"\n [@indicator]=\"_getArrowDirectionState()\">\n <div\n class=\"mat-sort-header-pointer-left\"\n [@leftPointer]=\"_getArrowDirectionState()\"></div>\n <div\n class=\"mat-sort-header-pointer-right\"\n [@rightPointer]=\"_getArrowDirectionState()\"></div>\n <div class=\"mat-sort-header-pointer-middle\"></div>\n </div>\n </div>\n }\n <div *ngIf=\"_isSorted()\" class=\"mat-sort-header-counter\">\n {{ sortIndex + 1 }}\n </div>\n</div>\n","import {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n DropListOrientation,\n} from \"@angular/cdk/drag-drop\";\nimport { ANIMATION_MODULE_TYPE, Component, inject, Input } from \"@angular/core\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { Sort } from \"@angular/material/sort\";\nimport { MatMultiSortDirective } from \"../mat-multi-sort.directive\";\n\n@Component({\n selector: \"mat-multi-sort-control\",\n imports: [CdkDropList, CdkDrag, MatChipsModule, MatIconModule],\n templateUrl: \"./mat-multi-sort-control.component.html\",\n styleUrl: \"./mat-multi-sort-control.component.scss\",\n standalone: true,\n})\nexport class MatMultiSortControlComponent {\n /**\n * Injects the ANIMATION_MODULE_TYPE token, which indicates the type of animation module being used.\n * This is an optional dependency and may be undefined if the animation module is not provided.\n *\n * @readonly\n * @type {ANIMATION_MODULE_TYPE | undefined}\n */\n readonly _animationModule = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n /**\n * Specifies the orientation of the drop list.\n * Can be either \"horizontal\" or \"vertical\".\n *\n * @type {DropListOrientation}\n * @default \"horizontal\"\n */\n @Input() orientation: DropListOrientation = \"horizontal\";\n\n /**\n * An optional input property that accepts an instance of `MatMultiSortDirective`.\n * This directive is used to control the sorting behavior of the table.\n */\n @Input() sort?: MatMultiSortDirective;\n\n /**\n * Retrieves the array of Sort objects from the current sort instance.\n * If the sort instance is not defined, it returns an empty array.\n *\n * @returns {Sort[]} An array of Sort objects or an empty array if no sorts are defined.\n */\n get sorts(): Sort[] {\n return this.sort?._sorts() || [];\n }\n\n /**\n * Handles the click event on a sort chip.\n * Toggles the sort direction for the given sort ID.\n *\n * @param id - The identifier of the sort field to toggle.\n * @returns void\n */\n onChipClick(id: string): void {\n this.sort?.toggleSortDirection(id);\n }\n\n /**\n * Handles the event when a sort chip is removed.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n onChipRemoved(id: string): void {\n this.sort?.removeSortLevel(id);\n }\n\n /**\n * Clears the current sorting applied to the table.\n *\n * @param id - The identifier of the sort level to be removed.\n * @returns void\n */\n onClearClick(): void {\n this.sort?.clearSorting();\n }\n\n /**\n * Handles the drop event for drag-and-drop sorting.\n * Reorders the sort levels based on the previous and current indices.\n *\n * @param event - The drag-and-drop event containing the previous and current indices of the sort order.\n */\n onDrop(event: CdkDragDrop<Sort[]>): void {\n this.sort?.reorderSortLevel(event.previousIndex, event.currentIndex);\n }\n}\n","<mat-chip-listbox\n cdkDropList\n [cdkDropListOrientation]=\"orientation\"\n (cdkDropListDropped)=\"onDrop($event)\">\n <mat-chip\n [disabled]=\"!sorts.length\"\n [highlighted]=\"true\"\n (click)=\"onClearClick()\"\n ><mat-icon matChipAvatar fontIcon=\"clear_all\"></mat-icon>Clear All</mat-chip\n >\n @for (column of sorts; track $index) {\n <mat-chip\n class=\"mat-sort-header\"\n cdkDrag\n (click)=\"onChipClick(column.active)\"\n (removed)=\"onChipRemoved(column.active)\">\n <div\n matChipAvatar\n class=\"mat-sort-header-container mat-sort-header-sorted mat-focus-indicator\"\n [class.mat-sort-header-descending]=\"column.direction === 'desc'\"\n [class.mat-sort-header-ascending]=\"column.direction === 'asc'\"\n [class.mat-sort-header-animations-disabled]=\"\n _animationModule === 'NoopAnimations'\n \">\n <div class=\"mat-sort-header-arrow\">\n <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path\n d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\" />\n </svg>\n </div>\n </div>\n {{ column.active }}\n <button matChipRemove>\n <mat-icon>clear</mat-icon>\n </button>\n </mat-chip>\n }\n</mat-chip-listbox>\n","/*\n * Public API surface of the library\n */\n\nexport * from \"./lib/mat-table-column-config\";\nexport * from \"./lib/mat-multi-sort.directive\";\nexport * from \"./lib/mat-table-column-config-trigger.directive\";\nexport * from \"./lib/mat-multi-sort-table-data-source\";\nexport * from \"./lib/mat-table-column-config-persistence.service\";\nexport * from \"./lib/mat-multi-sort-header/mat-multi-sort-header.component\";\nexport * from \"./lib/mat-multi-sort-control/mat-multi-sort-control.component\";\nexport * from \"./lib/mat-table-column-config/mat-table-column-config.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MatTableColumnConfigPersistenceService","i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;AAaA;;;;;;AAMG;MACU,iCAAiC,GAAG,IAAI,cAAc,CACjE,mCAAmC;AAGrC;;;;;;AAMG;MACU,iCAAiC,GAAG,IAAI,cAAc,CACjE,mCAAmC;AAGrC;;;AAGG;MACU,6BAA6B,GAAG,IAAI,cAAc,CAC7D,+BAA+B;;ACnBjC;;;;;;;AAOG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B;AAG5B;;;;;;;;;;;;;;;;;;AAkBG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B;AAG5B;;;;;;AAMG;MACU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB;AAWlB,MAAO,qBAAsB,SAAQ,OAAO,CAAA;AAyBvC,IAAA,oBAAA;AAGE,IAAA,UAAA;AAGQ,IAAA,OAAA;AA7BF,IAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU;AACxD,IAAA,IAAI;AAEZ;;;;;AAKG;AACM,IAAA,MAAM,GAA2B,MAAM,CAAC,EAAE,CAAC;AAEpD;;;;AAIG;AACH,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI;;AAGlB,IAAA,WAAA,CAGS,oBAA6B,EAG3B,UAAkB,EAGV,OAAgB,EAGjC,cAAkD,EAAA;QAElD,KAAK,CAAC,cAAc,CAAC;QAXd,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QAGlB,IAAU,CAAA,UAAA,GAAV,UAAU;QAGF,IAAO,CAAA,OAAA,GAAP,OAAO;AAOxB,QAAA,IAAI,CAAC,oBAAoB,KAAK,IAAI;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,4BAA4B;AACtD,QAAA,IAAI,CAAC,OAAO,KAAK,YAAY;AAE7B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;;;QAIrE,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,gBAAA,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;AACtD,gBAAA,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE;AAC7D,aAAA,CAAC;YACF,IAAI,CAAC,mBAAmB,EAAE;AAC5B,SAAC,CAAC;;AAGJ;;;;;AAKG;AACI,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;QACvD,OAAO,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGnC;;;;;AAKG;AACI,IAAA,YAAY,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;;AAG/C,IAAA,IAAI,CAAC,QAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAG5C,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC7D,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;aACjE;;YAEL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;iBACzB;AACL,gBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;;;AAInD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACxE,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,EAAU,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC;YAAE;QAEf,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;;;;;AAMG;IACI,gBAAgB,CAAC,aAAqB,EAAE,YAAoB,EAAA;QACjE,IAAI,aAAa,KAAK,YAAY;YAAE;QAEpC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC;AAC3D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;;;;AAKG;AACI,IAAA,mBAAmB,CAAC,EAAU,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC;YAAE;AAEf,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;;QAEhB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACzC,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,YAAY,EAAE,IAAI;AACJ,SAAA,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACxE,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;;;;AAKG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;;IAGpB,mBAAmB,GAAA;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,oBAAoB;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;;AAGjE;;;;;;;AAOG;AACI,IAAA,iBAAiB,CAAC,GAAW,EAAE,uBAAuB,GAAG,KAAK,EAAA;AACnE,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,IAAI,uBAAuB,EAAE;YAC3B,IAAI,CAAC,mBAAmB,EAAE;YAC1B;;AAGF,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;;AA/L1D,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAwBtB,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAGxB,oBAAoB,EAGpB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,wBAAwB,6BAGxB,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAjCvB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,UAAU;AAClB,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;0BAwBI;;0BACA,MAAM;2BAAC,wBAAwB;;0BAE/B;;0BACA,MAAM;2BAAC,oBAAoB;;0BAE3B;;0BACA,MAAM;2BAAC,wBAAwB;;0BAE/B;;0BACA,MAAM;2BAAC,wBAAwB;yCA/BjB,kBAAkB,EAAA,CAAA;sBADlC;;;MChEU,sCAAsC,CAAA;AAmCxC,IAAA,oBAAA;AAGE,IAAA,UAAA;AAGQ,IAAA,OAAA;AAxCF,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC;AAC7D,IAAA,IAAI;AAEZ;;;;AAIG;AACH,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;AAGjC;;;;AAIG;IACH,IAAW,OAAO,CAAC,KAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;AAGjC;;;;AAIG;AACH,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI;;AAGlB,IAAA,WAAA,CAGS,oBAA6B,EAG3B,UAAkB,EAGV,OAAgB,EAAA;QAN1B,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QAGlB,IAAU,CAAA,UAAA,GAAV,UAAU;QAGF,IAAO,CAAA,OAAA,GAAP,OAAO;AAExB,QAAA,IAAI,CAAC,oBAAoB,KAAK,IAAI;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,qCAAqC;AAC/D,QAAA,IAAI,CAAC,OAAO,KAAK,YAAY;AAE7B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CACvD;;;AAIL;;;;AAIG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;AAG7B,IAAA,mBAAmB,CAAC,OAAyB,EAAA;QACnD,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGzD;;;;;;;;;AASG;AACI,IAAA,iBAAiB,CAAC,GAAW,EAAE,uBAAuB,GAAG,KAAK,EAAA;AACnE,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,IAAI,uBAAuB,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;YACtC;;AAGF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;;AAvFjE,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,EAkCvC,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,iCAAiC,EAGjC,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,6BAA6B,6BAG7B,iCAAiC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAxChC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,cAFrC,MAAM,EAAA,CAAA;;4FAEP,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAHlD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAkCI;;0BACA,MAAM;2BAAC,iCAAiC;;0BAExC;;0BACA,MAAM;2BAAC,6BAA6B;;0BAEpC;;0BACA,MAAM;2BAAC,iCAAiC;;;MCvBhC,6BAA6B,CAAA;AAKrB,IAAA,kBAAA;AAJX,IAAA,YAAY;IACpB,OAAO,GAAqB,EAAE;AAE9B,IAAA,WAAA,CACmB,kBAA6D,EAAA;QAA7D,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;IAGrC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACtB,aAAA,UAAU;AACV,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACxB,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;AAG/B;;;;;AAKG;AACH,IAAA,eAAe,CAAC,KAAqB,EAAA;AACnC,QAAA,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QACtE,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAGhD;;;;AAIG;AACH,IAAA,yBAAyB,CAAC,EAAW,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QAClE,IAAI,KAAK,GAAG,CAAC;YAAE;AAEf,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO;QAC1D,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAGhD;;;;;AAKG;IACH,gBAAgB,GAAA;AACd,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI;;QAEvB,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAGhD;;;;;;;AAOG;IACH,kBAAkB,GAAA;AAChB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK;;QAExB,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAGhD;;;;;AAKG;IACH,qBAAqB,GAAA;AACnB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO;;QAElC,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;wGAnFrC,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EC7B1C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,umCAuCA,EDrBI,MAAA,EAAA,CAAA,q/BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EACX,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,mLACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAMP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAdzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAC1B,OAAA,EAAA;wBACP,WAAW;wBACX,OAAO;wBACP,eAAe;wBACf,iBAAiB;wBACjB,aAAa;wBACb,gBAAgB;AACjB,qBAAA,EAAA,UAAA,EAGW,IAAI,EAAA,QAAA,EAAA,umCAAA,EAAA,MAAA,EAAA,CAAA,q/BAAA,CAAA,EAAA;;;MEXL,oCAAoC,CAAA;AAe5B,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,gBAAA;IAhBX,aAAa,GACnB,IAAI;AAEN;;;;;AAKG;AACH,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;;AAG3B,IAAA,WAAA,CACmB,UAAsB,EACtB,OAAgB,EAChB,gBAAkC,EAAA;QAFlC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;IAInC,OAAO,GAAA;;AAEL,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa;aACjD,sBAAsB,CAAC,IAAI;aAC3B,kBAAkB,CAAC,CAAC;aACpB,iBAAiB,CAAC,IAAI;aACtB,QAAQ,CAAC,IAAI;AACb,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;AACF,SAAA,CAAC;AACJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACrC,gBAAgB;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AAClD,SAAA,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAChC,6BAAgC,GAChC,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC/B;QACD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9C,QAAA,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;YACxC,UAAU,CAAC,MAAM,EAAE;YACnB,UAAU,CAAC,OAAO,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC3B,SAAC,CAAC;;wGAtDO,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBALhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;oIAsBC,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO;;;AC/BvB;;;;;;;;;;AAUG;SACa,kBAAkB,CAAI,CAAI,EAAE,CAAI,EAAE,KAAa,EAAA;IAC7D,KAAK,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,KAAK,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC;AACnC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiB,CAAC;QAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;AAEhD,QAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,SAAS,KAAK,MAAM,GAAG,CAAC,UAAU,GAAG,UAAU;;;IAI1D,OAAO,CAAC,CAAC;AACX;AAEA,SAAS,aAAa,CAAI,MAAS,EAAE,MAAS,EAAA;AAC5C,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;AAC9C,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;AAC/C,IAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;IAE9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5D,QAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;;IAGrC,IAAI,MAAM,GAAG,MAAM;AAAE,QAAA,OAAO,CAAC;IAC7B,IAAI,MAAM,GAAG,MAAM;QAAE,OAAO,CAAC,CAAC;AAC9B,IAAA,OAAO,CAAC;AACV;AAEA;;;;;;;AAOG;AACG,MAAO,2BAGX,SAAQ,kBAAwB,CAAA;AAChC,IAAA,IAAa,IAAI,GAAA;QACf,OAAO,KAAK,CAAC,IAA6B;;IAE5C,IAAa,IAAI,CAAC,IAAkC,EAAA;AAClD,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI;;AAGnB,IAAA,WAAA,CAAY,WAAiB,EAAA;QAC3B,KAAK,CAAC,WAAW,CAAC;;AAElB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;AAGpD,IAAA,gBAAgB,CAAC,IAAS,EAAA;;QAEhC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;;QAG5C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAK,CAAC,MAAM,EAAE,CAAC,CAAC;;AAE5E;;AC9DK,MAAO,2BACX,SAAQ,aAAa,CAAA;AAGH,IAAA,KAAK,GAA0B,MAAM,CACrD,qBAAqB,EACrB;AACE,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CACD;AAEF;;;;AAIG;AACH,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG7C;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGhC,qBAAqB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,OAAO,MAAM;;AAGf,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;;IAGzD,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;;IAGnB,oBAAoB,GAAA;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;QAExB,KAAK,CAAC,oBAAoB,EAAE;;IAGrB,qBAAqB,GAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS;cACjC,IAAI,CAAC;cACL,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;;wGAlDzB,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAN3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,ECTvE,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,47EAqDA,ghED7CY,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAOH,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EACzB,oBAAoB,EACrB,OAAA,EAAA,CAAC,IAAI,CAAC,EAAA,SAAA,EACJ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,iBAGtD,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,IAAI,EAAA,QAAA,EAAA,47EAAA,EAAA,MAAA,EAAA,CAAA,w9DAAA,CAAA,EAAA;;;MEML,4BAA4B,CAAA;AACvC;;;;;;AAMG;IACM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE7E;;;;;;AAMG;IACM,WAAW,GAAwB,YAAY;AAExD;;;AAGG;AACM,IAAA,IAAI;AAEb;;;;;AAKG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;;AAGlC;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC;;AAGpC;;;;;AAKG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;;AAGhC;;;;;AAKG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE;;AAG3B;;;;;AAKG;AACH,IAAA,MAAM,CAAC,KAA0B,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;;wGAzE3D,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBzC,60CAsCA,EDxBY,MAAA,EAAA,CAAA,+vFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,8fAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKlD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,EAAA,UAAA,EAGlD,IAAI,EAAA,QAAA,EAAA,60CAAA,EAAA,MAAA,EAAA,CAAA,+vFAAA,CAAA,EAAA;8BAmBP,WAAW,EAAA,CAAA;sBAAnB;gBAMQ,IAAI,EAAA,CAAA;sBAAZ;;;AE1CH;;AAEG;;ACFH;;AAEG;;;;"}
@@ -40,9 +40,10 @@ export declare const SORT_PERSISTENCE_ENABLED: InjectionToken<boolean>;
40
40
  export declare const SORT_PERSISTENCE_KEY: InjectionToken<string>;
41
41
  export declare class MatMultiSortDirective extends MatSort {
42
42
  isPersistenceEnabled: boolean;
43
- private readonly key;
43
+ readonly initialKey: string;
44
44
  private readonly storage;
45
45
  private readonly persistenceChanged;
46
+ private _key;
46
47
  /**
47
48
  * A writable signal that holds an array of Sort objects.
48
49
  * This signal is used to manage the sorting state of the table.
@@ -50,7 +51,13 @@ export declare class MatMultiSortDirective extends MatSort {
50
51
  * @readonly
51
52
  */
52
53
  readonly _sorts: WritableSignal<Sort[]>;
53
- constructor(isPersistenceEnabled: boolean, key: string, storage: Storage, defaultOptions?: MatSortDefaultOptions | undefined);
54
+ /**
55
+ * Gets the key used for column configuration persistence.
56
+ *
57
+ * @returns {string} The key used for column configuration persistence.
58
+ */
59
+ get key(): string;
60
+ constructor(isPersistenceEnabled: boolean, initialKey: string, storage: Storage, defaultOptions?: MatSortDefaultOptions | undefined);
54
61
  /**
55
62
  * Retrieves the sort direction for a given column ID.
56
63
  *
@@ -97,6 +104,15 @@ export declare class MatMultiSortDirective extends MatSort {
97
104
  */
98
105
  clearSorting(): void;
99
106
  private persistSortSettings;
107
+ /**
108
+ * Sets the persistence key for storing sort settings and optionally overwrites the persisted value.
109
+ *
110
+ * @param key - The key to be used for persisting sort settings.
111
+ * @param overwritePersistedValue - If true, the current sort settings will be persisted immediately, overwriting any existing value. Defaults to false.
112
+ *
113
+ * @returns void
114
+ */
115
+ setPersistenceKey(key: string, overwritePersistedValue?: boolean): void;
100
116
  static ɵfac: i0.ɵɵFactoryDeclaration<MatMultiSortDirective, [{ optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
101
117
  static ɵdir: i0.ɵɵDirectiveDeclaration<MatMultiSortDirective, "[matMultiSort]", ["matMultiSort"], {}, { "persistenceChanged": "persistenceChanged"; }, never, never, true, never>;
102
118
  }
@@ -23,6 +23,29 @@ export declare class MatTableColumnConfigComponent<T> implements OnInit, OnDestr
23
23
  * @param id - The identifier of the column whose visibility is to be changed.
24
24
  */
25
25
  onColumnVisibilityChanged(id: keyof T): void;
26
+ /**
27
+ * Sets all columns in the table to visible and updates the persisted column configuration.
28
+ *
29
+ * Iterates through the `columns` array, setting each column's `visible` property to `true`.
30
+ * Then, updates the `persistenceService.columns` property to reflect the new visibility state.
31
+ */
32
+ selectAllColumns(): void;
33
+ /**
34
+ * Deselects all columns by setting their `visible` property to `false`.
35
+ * Updates the persisted columns state via the `persistenceService`.
36
+ *
37
+ * @remarks
38
+ * This method iterates through all columns in the `columns` array and hides each one.
39
+ * After updating the visibility, it synchronizes the state with the persistence service.
40
+ */
41
+ deselectAllColumns(): void;
42
+ /**
43
+ * Inverts the visibility state of all columns in the `columns` array.
44
+ * Each column's `visible` property is toggled between `true` and `false`.
45
+ * After updating the visibility, the modified columns array is assigned to the persistence service
46
+ * to persist the new visibility state.
47
+ */
48
+ invertColumnSelection(): void;
26
49
  static ɵfac: i0.ɵɵFactoryDeclaration<MatTableColumnConfigComponent<any>, never>;
27
50
  static ɵcmp: i0.ɵɵComponentDeclaration<MatTableColumnConfigComponent<any>, "mat-table-column-config", never, {}, {}, never, never, true, never>;
28
51
  }
@@ -3,9 +3,10 @@ import { TableColumn } from "./mat-table-column-config";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class MatTableColumnConfigPersistenceService<T> {
5
5
  isPersistenceEnabled: boolean;
6
- private readonly key;
6
+ readonly initialKey: string;
7
7
  private readonly storage;
8
8
  private readonly columns$;
9
+ private _key;
9
10
  /**
10
11
  * Gets the current table columns configuration.
11
12
  *
@@ -18,7 +19,13 @@ export declare class MatTableColumnConfigPersistenceService<T> {
18
19
  * @param value - An array of `TableColumn<T>` representing the new column configuration.
19
20
  */
20
21
  set columns(value: TableColumn<T>[]);
21
- constructor(isPersistenceEnabled: boolean, key: string, storage: Storage);
22
+ /**
23
+ * Gets the key used for column configuration persistence.
24
+ *
25
+ * @returns {string} The key used for column configuration persistence.
26
+ */
27
+ get key(): string;
28
+ constructor(isPersistenceEnabled: boolean, initialKey: string, storage: Storage);
22
29
  /**
23
30
  * Retrieves an observable stream of table columns.
24
31
  *
@@ -26,6 +33,17 @@ export declare class MatTableColumnConfigPersistenceService<T> {
26
33
  */
27
34
  getColumns(): Observable<TableColumn<T>[]>;
28
35
  private persistColumnConfig;
36
+ /**
37
+ * Sets the persistence key for storing column configurations.
38
+ *
39
+ * @param key - The key to be used for persistence.
40
+ * @param overwritePersistedValue - If true, the current column configuration will be persisted immediately overwriting any exising value stored under the new key.
41
+ * If false, the persisted column configuration will be loaded and applied.
42
+ * Defaults to false.
43
+ *
44
+ * @returns void
45
+ */
46
+ setPersistenceKey(key: string, overwritePersistedValue?: boolean): void;
29
47
  static ɵfac: i0.ɵɵFactoryDeclaration<MatTableColumnConfigPersistenceService<any>, [{ optional: true; }, { optional: true; }, { optional: true; }]>;
30
48
  static ɵprov: i0.ɵɵInjectableDeclaration<MatTableColumnConfigPersistenceService<any>>;
31
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-mat-table-multi-sort",
3
- "version": "18.2.1",
3
+ "version": "18.4.1",
4
4
  "preview": false,
5
5
  "license": "MIT",
6
6
  "author": {
@@ -30,13 +30,14 @@
30
30
  "tslib": "^2.8.1"
31
31
  },
32
32
  "peerDependencies": {
33
- "@angular/common": "^18.0.0",
34
- "@angular/core": "^18.0.0",
35
33
  "@angular/animations": "^18.0.0",
36
34
  "@angular/cdk": "^18.0.0",
35
+ "@angular/common": "^18.0.0",
36
+ "@angular/core": "^18.0.0",
37
37
  "@angular/forms": "^18.0.0",
38
38
  "@angular/material": "^18.0.0",
39
- "rxjs": "^7.8.1"
39
+ "rxjs": "^7.8.1",
40
+ "zone.js": "~0.14.10"
40
41
  },
41
42
  "sideEffects": false,
42
43
  "module": "fesm2022/ngx-mat-table-multi-sort.mjs",