@spartan-ng/brain 0.0.1-alpha.401 → 0.0.1-alpha.402

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.
@@ -228,7 +228,7 @@ export class BrnSelectComponent {
228
228
  if (index > 0) {
229
229
  this.handleInvalidOptions(options);
230
230
  }
231
- this.updatePossibleOptions(options);
231
+ this._selectService.updatePossibleOptions(options);
232
232
  });
233
233
  }
234
234
  /**
@@ -239,41 +239,26 @@ export class BrnSelectComponent {
239
239
  const availableOptionSet = new Set(options);
240
240
  if (this._selectService.multiple()) {
241
241
  const filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));
242
- // only update if there was an actual change
243
242
  if (selectedOptions.length !== filteredOptions.length) {
244
- // update should result in a value change since we are deselecting a value
245
- this._shouldEmitValueChange.set(true);
246
243
  const value = filteredOptions.map((o) => o?.value ?? '');
247
244
  this._selectService.state.update((state) => ({
248
245
  ...state,
249
246
  selectedOptions: filteredOptions,
250
247
  value: value,
251
248
  }));
252
- this._onChange((value ?? null));
253
249
  }
254
250
  }
255
251
  else {
256
252
  const selectedOption = selectedOptions[0] ?? null;
257
253
  if (selectedOption !== null && !availableOptionSet.has(selectedOption)) {
258
- this._shouldEmitValueChange.set(true);
259
254
  this._selectService.state.update((state) => ({
260
255
  ...state,
261
256
  selectedOptions: [],
262
257
  value: '',
263
258
  }));
264
- this._onChange('');
265
259
  }
266
260
  }
267
261
  }
268
- /**
269
- * Sync the updated options with "possibleOptions" in the select service
270
- */
271
- updatePossibleOptions(options) {
272
- this._selectService.state.update((state) => ({
273
- ...state,
274
- possibleOptions: options,
275
- }));
276
- }
277
262
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
278
263
  /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: BrnSelectComponent, isStandalone: true, selector: "brn-select, hlm-select", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, providers: [
279
264
  BrnSelectService,
@@ -356,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
356
341
  `,
357
342
  }]
358
343
  }], ctorParameters: () => [] });
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3NlbGVjdC9zcmMvbGliL2Jybi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNOLG1CQUFtQixFQUduQixhQUFhLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRU4sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUdOLGtDQUFrQyxFQUNsQyxtQ0FBbUMsR0FDbkMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQVksaUJBQWlCLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlC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RUFBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUM7d0JBQzdEOzRCQUNDLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsb0JBQW9CO3lCQUMvQjtxQkFDRDtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QlQ7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtMaXN0Ym94LCBDZGtMaXN0Ym94TW9kdWxlLCBDZGtPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvbGlzdGJveCc7XG5pbXBvcnQge1xuXHRDZGtDb25uZWN0ZWRPdmVybGF5LFxuXHR0eXBlIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSxcblx0dHlwZSBDb25uZWN0ZWRQb3NpdGlvbixcblx0T3ZlcmxheU1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0dHlwZSBEb0NoZWNrLFxuXHR0eXBlIFNpZ25hbCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0Y29udGVudENoaWxkcmVuLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHR5cGUgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuXHR0eXBlIEV4cG9zZXNTaWRlLFxuXHR0eXBlIEV4cG9zZXNTdGF0ZSxcblx0cHJvdmlkZUV4cG9zZWRTaWRlUHJvdmlkZXJFeGlzdGluZyxcblx0cHJvdmlkZUV4cG9zZXNTdGF0ZVByb3ZpZGVyRXhpc3RpbmcsXG59IGZyb20gJ0BzcGFydGFuLW5nL2JyYWluL2NvcmUnO1xuaW1wb3J0IHsgQnJuRm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0BzcGFydGFuLW5nL2JyYWluL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQ2hhbmdlRm4sIEVycm9yU3RhdGVNYXRjaGVyLCBFcnJvclN0YXRlVHJhY2tlciwgVG91Y2hGbiB9IGZyb20gJ0BzcGFydGFuLW5nL2JyYWluL2Zvcm1zJztcbmltcG9ydCB7IEJybkxhYmVsRGlyZWN0aXZlIH0gZnJvbSAnQHNwYXJ0YW4tbmcvYnJhaW4vbGFiZWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJyblNlbGVjdENvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL2Jybi1zZWxlY3QtY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJuU2VsZWN0U2VydmljZSB9IGZyb20gJy4vYnJuLXNlbGVjdC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgQnJuUmVhZERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdicm4tc2VsZWN0LCBobG0tc2VsZWN0Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW092ZXJsYXlNb2R1bGUsIENka0xpc3Rib3hNb2R1bGVdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0QnJuU2VsZWN0U2VydmljZSxcblx0XHRDZGtMaXN0Ym94LFxuXHRcdHByb3ZpZGVFeHBvc2VkU2lkZVByb3ZpZGVyRXhpc3RpbmcoKCkgPT4gQnJuU2VsZWN0Q29tcG9uZW50KSxcblx0XHRwcm92aWRlRXhwb3Nlc1N0YXRlUHJvdmlkZXJFeGlzdGluZygoKSA9PiBCcm5TZWxlY3RDb21wb25lbnQpLFxuXHRcdHtcblx0XHRcdHByb3ZpZGU6IEJybkZvcm1GaWVsZENvbnRyb2wsXG5cdFx0XHR1c2VFeGlzdGluZzogQnJuU2VsZWN0Q29tcG9uZW50LFxuXHRcdH0sXG5cdF0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmICghbGFiZWxQcm92aWRlZCgpICYmIHBsYWNlaG9sZGVyKCkpIHtcblx0XHRcdDxsYWJlbCBjbGFzcz1cImhpZGRlblwiIFthdHRyLmlkXT1cImJhY2t1cExhYmVsSWQoKVwiPnt7IHBsYWNlaG9sZGVyKCkgfX08L2xhYmVsPlxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwibGFiZWxbaGxtTGFiZWxdLGxhYmVsW2JybkxhYmVsXVwiIC8+XG5cdFx0fVxuXG5cdFx0PGRpdiBjZGstb3ZlcmxheS1vcmlnaW4gKGNsaWNrKT1cInRvZ2dsZSgpXCIgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCI+XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJobG0tc2VsZWN0LXRyaWdnZXIsW2JyblNlbGVjdFRyaWdnZXJdXCIgLz5cblx0XHQ8L2Rpdj5cblx0XHQ8bmctdGVtcGxhdGVcblx0XHRcdGNkay1jb25uZWN0ZWQtb3ZlcmxheVxuXHRcdFx0Y2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvblxuXHRcdFx0Y2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXG5cdFx0XHRjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCJcblx0XHRcdFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIl9kZWxheWVkRXhwYW5kZWQoKVwiXG5cdFx0XHRbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJfcG9zaXRpb25zXCJcblx0XHRcdFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwidHJpZ2dlcldpZHRoKCkgPiAwID8gdHJpZ2dlcldpZHRoKCkgOiAnYXV0bydcIlxuXHRcdFx0KGJhY2tkcm9wQ2xpY2spPVwiY2xvc2UoKVwiXG5cdFx0XHQoZGV0YWNoKT1cImNsb3NlKClcIlxuXHRcdFx0KHBvc2l0aW9uQ2hhbmdlKT1cIl9wb3NpdGlvbkNoYW5nZXMkLm5leHQoJGV2ZW50KVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5TZWxlY3RDb21wb25lbnQ8VCA9IHVua25vd24+XG5cdGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIERvQ2hlY2ssIEV4cG9zZXNTaWRlLCBFeHBvc2VzU3RhdGUsIEJybkZvcm1GaWVsZENvbnRyb2xcbntcblx0cHJpdmF0ZSByZWFkb25seSBfc2VsZWN0U2VydmljZSA9IGluamVjdChCcm5TZWxlY3RTZXJ2aWNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgdHJpZ2dlcldpZHRoID0gdGhpcy5fc2VsZWN0U2VydmljZS50cmlnZ2VyV2lkdGg7XG5cblx0cHVibGljIHJlYWRvbmx5IG11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRwdWJsaWMgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcblx0cHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRwdWJsaWMgcmVhZG9ubHkgZGlyID0gaW5wdXQ8QnJuUmVhZERpcmVjdGlvbj4oJ2x0cicpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXNhYmxlZEZyb21TZXREaXNhYmxlZFN0YXRlID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwcm90ZWN0ZWQgc2VsZWN0TGFiZWwgPSBjb250ZW50Q2hpbGQoQnJuTGFiZWxEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pO1xuXHQvKiogT3ZlcmxheSBwYW5lIGNvbnRhaW5pbmcgdGhlIG9wdGlvbnMuICovXG5cdHByb3RlY3RlZCBzZWxlY3RDb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKEJyblNlbGVjdENvbnRlbnRDb21wb25lbnQpO1xuXG5cdHByb3RlY3RlZCBvcHRpb25zID0gY29udGVudENoaWxkcmVuKENka09wdGlvbiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblx0cHJvdGVjdGVkIG9wdGlvbnMkID0gdG9PYnNlcnZhYmxlKHRoaXMub3B0aW9ucyk7XG5cdHByb3RlY3RlZCBvcHRpb25zQW5kSW5kZXgkID0gdGhpcy5vcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucywgaW5kZXgpID0+IFtvcHRpb25zLCBpbmRleF0gYXMgY29uc3QpKTtcblxuXHQvKiogT3ZlcmxheSBwYW5lIGNvbnRhaW5pbmcgdGhlIG9wdGlvbnMuICovXG5cdHByb3RlY3RlZCBfb3ZlcmxheURpciA9IHZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgb3BlbmVkQ2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cblx0cHVibGljIHJlYWRvbmx5IGNsb3NlRGVsYXkgPSBpbnB1dDxudW1iZXI+KDEwMCk7XG5cdHB1YmxpYyByZWFkb25seSBpc0V4cGFuZGVkID0gdGhpcy5fc2VsZWN0U2VydmljZS5pc0V4cGFuZGVkO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2RlbGF5ZWRFeHBhbmRlZCA9IHRvU2lnbmFsKFxuXHRcdHRvT2JzZXJ2YWJsZSh0aGlzLmlzRXhwYW5kZWQpLnBpcGUoXG5cdFx0XHRzd2l0Y2hNYXAoKGV4cGFuZGVkKSA9PiAoIWV4cGFuZGVkID8gb2YoZXhwYW5kZWQpLnBpcGUoZGVsYXkodGhpcy5jbG9zZURlbGF5KCkpKSA6IG9mKGV4cGFuZGVkKSkpLFxuXHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKCksXG5cdFx0KSxcblx0XHR7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSxcblx0KTtcblx0cHVibGljIHJlYWRvbmx5IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuaXNFeHBhbmRlZCgpID8gJ29wZW4nIDogJ2Nsb3NlZCcpKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX3Bvc2l0aW9uQ2hhbmdlcyQgPSBuZXcgU3ViamVjdDxDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2U+KCk7XG5cdHB1YmxpYyByZWFkb25seSBzaWRlOiBTaWduYWw8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc+ID0gdG9TaWduYWwoXG5cdFx0dGhpcy5fcG9zaXRpb25DaGFuZ2VzJC5waXBlKFxuXHRcdFx0bWFwPENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc+KChjaGFuZ2UpID0+XG5cdFx0XHRcdC8vIHRvZG86IGJldHRlciB0cmFuc2xhdGlvbiBvciBhZGp1c3RpbmcgaGxtIHRvIHRha2UgdGhhdCBpbnRvIGFjY291bnRcblx0XHRcdFx0Y2hhbmdlLmNvbm5lY3Rpb25QYWlyLm9yaWdpblkgPT09ICdjZW50ZXInXG5cdFx0XHRcdFx0PyBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWCA9PT0gJ3N0YXJ0J1xuXHRcdFx0XHRcdFx0PyAnbGVmdCdcblx0XHRcdFx0XHRcdDogJ3JpZ2h0J1xuXHRcdFx0XHRcdDogY2hhbmdlLmNvbm5lY3Rpb25QYWlyLm9yaWdpblksXG5cdFx0XHQpLFxuXHRcdCksXG5cdFx0eyBpbml0aWFsVmFsdWU6ICdib3R0b20nIH0sXG5cdCk7XG5cblx0cHVibGljIHJlYWRvbmx5IGJhY2t1cExhYmVsSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9zZWxlY3RTZXJ2aWNlLmxhYmVsSWQoKSk7XG5cdHB1YmxpYyByZWFkb25seSBsYWJlbFByb3ZpZGVkID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5cdHByaXZhdGUgX29uQ2hhbmdlOiBDaGFuZ2VGbjxUPiA9ICgpID0+IHt9O1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5cdHByaXZhdGUgX29uVG91Y2hlZDogVG91Y2hGbiA9ICgpID0+IHt9O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZSA9IHNpZ25hbChmYWxzZSk7XG5cblx0Lypcblx0ICogVGhpcyBwb3NpdGlvbiBjb25maWcgZW5zdXJlcyB0aGF0IHRoZSB0b3AgXCJzdGFydFwiIGNvcm5lciBvZiB0aGUgb3ZlcmxheVxuXHQgKiBpcyBhbGlnbmVkIHdpdGggd2l0aCB0aGUgdG9wIFwic3RhcnRcIiBvZiB0aGUgb3JpZ2luIGJ5IGRlZmF1bHQgKG92ZXJsYXBwaW5nXG5cdCAqIHRoZSB0cmlnZ2VyIGNvbXBsZXRlbHkpLiBJZiB0aGUgcGFuZWwgY2Fubm90IGZpdCBiZWxvdyB0aGUgdHJpZ2dlciwgaXRcblx0ICogd2lsbCBmYWxsIGJhY2sgdG8gYSBwb3NpdGlvbiBhYm92ZSB0aGUgdHJpZ2dlci5cblx0ICovXG5cdHByb3RlY3RlZCBfcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW1xuXHRcdHtcblx0XHRcdG9yaWdpblg6ICdzdGFydCcsXG5cdFx0XHRvcmlnaW5ZOiAnYm90dG9tJyxcblx0XHRcdG92ZXJsYXlYOiAnc3RhcnQnLFxuXHRcdFx0b3ZlcmxheVk6ICd0b3AnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ2VuZCcsXG5cdFx0XHRvcmlnaW5ZOiAnYm90dG9tJyxcblx0XHRcdG92ZXJsYXlYOiAnZW5kJyxcblx0XHRcdG92ZXJsYXlZOiAndG9wJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdG9yaWdpblg6ICdzdGFydCcsXG5cdFx0XHRvcmlnaW5ZOiAndG9wJyxcblx0XHRcdG92ZXJsYXlYOiAnc3RhcnQnLFxuXHRcdFx0b3ZlcmxheVk6ICdib3R0b20nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ2VuZCcsXG5cdFx0XHRvcmlnaW5ZOiAndG9wJyxcblx0XHRcdG92ZXJsYXlYOiAnZW5kJyxcblx0XHRcdG92ZXJsYXlZOiAnYm90dG9tJyxcblx0XHR9LFxuXHRdO1xuXG5cdHB1YmxpYyBlcnJvclN0YXRlVHJhY2tlcjogRXJyb3JTdGF0ZVRyYWNrZXI7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyID0gaW5qZWN0KEVycm9yU3RhdGVNYXRjaGVyKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcGFyZW50Rm9ybSA9IGluamVjdChOZ0Zvcm0sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudEZvcm1Hcm91cCA9IGluamVjdChGb3JtR3JvdXBEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0cHVibGljIGVycm9yU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVycm9yU3RhdGVUcmFja2VyLmVycm9yU3RhdGUoKSk7XG5cblx0cHVibGljIHdyaXRlVmFsdWUkID0gbmV3IFN1YmplY3Q8VD4oKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdG11bHRpcGxlOiB0aGlzLm11bHRpcGxlLFxuXHRcdFx0cGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG5cdFx0XHRkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcblx0XHRcdGRpc2FibGVkQnlTZXREaXNhYmxlZDogdGhpcy5fZGlzYWJsZWRGcm9tU2V0RGlzYWJsZWRTdGF0ZSxcblx0XHRcdGRpcjogdGhpcy5kaXIsXG5cdFx0fSkpO1xuXHRcdHRoaXMuaGFuZGxlT3B0aW9uQ2hhbmdlcygpO1xuXHRcdHRoaXMuaGFuZGxlSW5pdGlhbE9wdGlvblNlbGVjdCgpO1xuXG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRpZDogYGJybi1zZWxlY3QtJHtuZXh0SWQrK31gLFxuXHRcdH0pKTtcblx0XHRpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIFdhdGNoIGZvciBMaXN0Ym94IFNlbGVjdGlvbiBDaGFuZ2VzIHRvIHRyaWdnZXIgQ29sbGFwc2UgYW5kIFZhbHVlIENoYW5nZVxuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2UubGlzdEJveFZhbHVlQ2hhbmdlRXZlbnQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMubXVsdGlwbGUoKSkge1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHdlIHNldCBzaG91bGRFbWl0VmFsdWVDaGFuZ2UgdG8gdHJ1ZSBiZWNhdXNlIHdlIHdhbnQgdG8gcHJvcGFnYXRlIHRoZSB2YWx1ZSBjaGFuZ2Vcblx0XHRcdC8vIGFzIGEgcmVzdWx0IG9mIHVzZXIgaW50ZXJhY3Rpb25cblx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHQvKipcblx0XHQgKiBMaXN0ZW5pbmcgdG8gdmFsdWUgY2hhbmdlcyBpbiBvcmRlciB0byB0cmlnZ2VyIGZvcm1zIGFwaSBvbiBjaGFuZ2Vcblx0XHQgKiBTaG91bGRFbWl0VmFsdWVDaGFuZ2Ugc2ltcGx5IGVuc3VyZXMgd2Ugb25seSBwcm9wYWdhdGUgdmFsdWUgY2hhbmdlIHdoZW4gYSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uXG5cdFx0ICogd2UgZG9uJ3QgcHJvcGFnYXRlIGNoYW5nZXMgbWFkZSBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudCAoZXguIHBhdGNoIHZhbHVlIG9yIGluaXRpYWwgdmFsdWUgZnJvbSBmb3JtIGNvbnRyb2wpXG5cdFx0ICovXG5cdFx0dG9PYnNlcnZhYmxlKHRoaXMuX3NlbGVjdFNlcnZpY2UudmFsdWUpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2UoKSkge1xuXHRcdFx0XHR0aGlzLl9vbkNoYW5nZSgodmFsdWUgPz8gbnVsbCkgYXMgVCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5lcnJvclN0YXRlVHJhY2tlciA9IG5ldyBFcnJvclN0YXRlVHJhY2tlcihcblx0XHRcdHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcixcblx0XHRcdHRoaXMubmdDb250cm9sLFxuXHRcdFx0dGhpcy5fcGFyZW50Rm9ybUdyb3VwLFxuXHRcdFx0dGhpcy5fcGFyZW50Rm9ybSxcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBDaGVjayBpZiBMYWJlbCBEaXJlY3RpdmUgUHJvdmlkZWQgYW5kIHBhc3MgdG8gc2VydmljZVxuXHRcdGNvbnN0IGxhYmVsID0gdGhpcy5zZWxlY3RMYWJlbCgpO1xuXHRcdGlmIChsYWJlbCkge1xuXHRcdFx0dGhpcy5sYWJlbFByb3ZpZGVkLnNldCh0cnVlKTtcblx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdGxhYmVsSWQ6IGxhYmVsLmlkKCksXG5cdFx0XHR9KSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnBsYWNlaG9sZGVyKCkpIHtcblx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdGxhYmVsSWQ6IGAke3N0YXRlLmlkfS0tbGFiZWxgLFxuXHRcdFx0fSkpO1xuXHRcdH1cblx0fVxuXG5cdG5nRG9DaGVjaygpIHtcblx0XHR0aGlzLmVycm9yU3RhdGVUcmFja2VyLnVwZGF0ZUVycm9yU3RhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaXNFeHBhbmRlZCgpKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5fY2FuT3BlbigpKSByZXR1cm47XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRpc0V4cGFuZGVkOiB0cnVlLFxuXHRcdH0pKTtcblx0XHR0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRydWUpO1xuXHRcdHRoaXMuX21vdmVGb2N1c1RvQ0RLTGlzdCgpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0V4cGFuZGVkKCkpIHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9zZWxlY3RTZXJ2aWNlLnNlbGVjdFRyaWdnZXIpIHtcblx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2VsZWN0VHJpZ2dlci5mb2N1cygpO1xuXHRcdH1cblxuXHRcdHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQoZmFsc2UpO1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0aXNFeHBhbmRlZDogZmFsc2UsXG5cdFx0fSkpO1xuXHRcdHRoaXMuX29uVG91Y2hlZCgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIF9jYW5PcGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhdGhpcy5pc0V4cGFuZGVkKCkgJiYgIXRoaXMuZGlzYWJsZWQoKSAmJiB0aGlzLm9wdGlvbnMoKT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdHByaXZhdGUgX21vdmVGb2N1c1RvQ0RLTGlzdCgpOiB2b2lkIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0Q29udGVudCgpPy5mb2N1c0xpc3QoKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG5cdFx0dGhpcy53cml0ZVZhbHVlJC5uZXh0KHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBDaGFuZ2VGbjxUPik6IHZvaWQge1xuXHRcdHRoaXMuX29uQ2hhbmdlID0gZm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IFRvdWNoRm4pOiB2b2lkIHtcblx0XHR0aGlzLl9vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLl9kaXNhYmxlZEZyb21TZXREaXNhYmxlZFN0YXRlLnNldChpc0Rpc2FibGVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPbmNlIHdyaXRlVmFsdWUgaXMgY2FsbGVkIGFuZCBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2UgY2FuIGhhbmRsZSBzZXR0aW5nIHRoZSBpbml0aWFsIG9wdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlSW5pdGlhbE9wdGlvblNlbGVjdCgpIHtcblx0XHQvLyBXcml0ZSB2YWx1ZSBjYW5ub3QgYmUgaGFuZGxlZCB1bnRpbCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHNvIHdlIHdhaXQgdW50aWwgYm90aCBhcmUgYXZhaWxhYmxlIHdpdGggYSBjb21iaW5lTGF0ZXN0XG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy53cml0ZVZhbHVlJCwgdGhpcy5vcHRpb25zJF0pXG5cdFx0XHQucGlwZShcblx0XHRcdFx0bWFwKCh2YWx1ZXMsIGluZGV4KSA9PiBbLi4udmFsdWVzLCBpbmRleF0pLFxuXHRcdFx0XHR0YWtlVW50aWxEZXN0cm95ZWQoKSxcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKFt2YWx1ZSwgXywgaW5kZXhdKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnModmFsdWUpO1xuXHRcdFx0XHQvLyB0aGUgZmlyc3QgdGltZSB0aGlzIG9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSB3ZSBhcmUgc2ltcGx5IHNldHRpbmcgdGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdFx0Ly8gdGhpcyBjaGFuZ2Ugc2hvdWxkIG5vdCBjb3VudCBhcyBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIHNlbGVjdCwgc28gd2UgbmVlZCB0byBtYXJrIGFzIHByaXN0aW5lXG5cdFx0XHRcdGlmIChpbmRleCA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMubmdDb250cm9sPy5jb250cm9sPy5tYXJrQXNQcmlzdGluZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGVuIG9wdGlvbnMgY2hhbmdlLCBvdXIgY3VycmVudCBzZWxlY3RlZCBvcHRpb25zIG1heSBiZWNvbWUgaW52YWxpZFxuXHQgKiBIZXJlIHdlIHdpbGwgYXV0b21hdGljYWxseSB1cGRhdGUgb3VyIGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9ucyBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBpbmxpbmUgd2l0aCB0aGUgcG9zc2libGVPcHRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZU9wdGlvbkNoYW5nZXMoKSB7XG5cdFx0dGhpcy5vcHRpb25zQW5kSW5kZXgkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoW29wdGlvbnMsIGluZGV4XSkgPT4ge1xuXHRcdFx0aWYgKGluZGV4ID4gMCkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZUludmFsaWRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy51cGRhdGVQb3NzaWJsZU9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgdGhhdCBvdXIgXCJzZWxlY3RlZE9wdGlvbnNcIiBhcmUgc3RpbGwgdmFsaWQgd2hlbiBcInBvc3NpYmxlT3B0aW9uc1wiIGlzIGFib3V0IHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlSW52YWxpZE9wdGlvbnMob3B0aW9uczogcmVhZG9ubHkgQ2RrT3B0aW9uW10pIHtcblx0XHRjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkT3B0aW9ucygpO1xuXHRcdGNvbnN0IGF2YWlsYWJsZU9wdGlvblNldCA9IG5ldyBTZXQ8Q2RrT3B0aW9uIHwgbnVsbD4ob3B0aW9ucyk7XG5cdFx0aWYgKHRoaXMuX3NlbGVjdFNlcnZpY2UubXVsdGlwbGUoKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigobykgPT4gYXZhaWxhYmxlT3B0aW9uU2V0LmhhcyhvKSk7XG5cdFx0XHQvLyBvbmx5IHVwZGF0ZSBpZiB0aGVyZSB3YXMgYW4gYWN0dWFsIGNoYW5nZVxuXHRcdFx0aWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggIT09IGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gdXBkYXRlIHNob3VsZCByZXN1bHQgaW4gYSB2YWx1ZSBjaGFuZ2Ugc2luY2Ugd2UgYXJlIGRlc2VsZWN0aW5nIGEgdmFsdWVcblx0XHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldCh0cnVlKTtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBmaWx0ZXJlZE9wdGlvbnMubWFwKChvKSA9PiAobz8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJyk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0XHRzZWxlY3RlZE9wdGlvbnM6IGZpbHRlcmVkT3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0dGhpcy5fb25DaGFuZ2UoKHZhbHVlID8/IG51bGwpIGFzIFQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uc1swXSA/PyBudWxsO1xuXHRcdFx0aWYgKHNlbGVjdGVkT3B0aW9uICE9PSBudWxsICYmICFhdmFpbGFibGVPcHRpb25TZXQuaGFzKHNlbGVjdGVkT3B0aW9uKSkge1xuXHRcdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KHRydWUpO1xuXHRcdFx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zOiBbXSxcblx0XHRcdFx0XHR2YWx1ZTogJycsXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0dGhpcy5fb25DaGFuZ2UoJycgYXMgVCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN5bmMgdGhlIHVwZGF0ZWQgb3B0aW9ucyB3aXRoIFwicG9zc2libGVPcHRpb25zXCIgaW4gdGhlIHNlbGVjdCBzZXJ2aWNlXG5cdCAqL1xuXHRwcml2YXRlIHVwZGF0ZVBvc3NpYmxlT3B0aW9ucyhvcHRpb25zOiByZWFkb25seSBDZGtPcHRpb25bXSkge1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0cG9zc2libGVPcHRpb25zOiBvcHRpb25zIGFzIENka09wdGlvbltdLFxuXHRcdH0pKTtcblx0fVxufVxuIl19
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3NlbGVjdC9zcmMvbGliL2Jybi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNOLG1CQUFtQixFQUduQixhQUFhLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRU4sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUdOLGtDQUFrQyxFQUNsQyxtQ0FBbUMsR0FDbkMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQVksaUJBQWlCLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlC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LGtCQUFrQixFQUFDO1lBQzVELG1DQUFtQyxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFDO1lBQzdEO2dCQUNDLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFdBQVcsRUFBRSxrQkFBa0I7YUFDL0I7U0FDRCxtRUF5Q29DLGlCQUFpQiw2RUFFTix5QkFBeUIsNkVBRXJDLFNBQVMsNkdBS1gsbUJBQW1CLGdFQWpEM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QlQsMkRBckNTLGFBQWEsMHJDQUFFLGdCQUFnQjs7MkZBdUM3QixrQkFBa0I7a0JBMUM5QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7b0JBQzFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLGtDQUFrQyxFQUFDLEdBQUcsRUFBRSxtQkFBbUIsRUFBQzt3QkFDNUQsbUNBQW1DLEVBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFDO3dCQUM3RDs0QkFDQyxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLG9CQUFvQjt5QkFDL0I7cUJBQ0Q7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeUJUO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrTGlzdGJveCwgQ2RrTGlzdGJveE1vZHVsZSwgQ2RrT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xpc3Rib3gnO1xuaW1wb3J0IHtcblx0Q2RrQ29ubmVjdGVkT3ZlcmxheSxcblx0dHlwZSBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXG5cdHR5cGUgQ29ubmVjdGVkUG9zaXRpb24sXG5cdE92ZXJsYXlNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdHR5cGUgRG9DaGVjayxcblx0dHlwZSBTaWduYWwsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdGNvbnRlbnRDaGlsZHJlbixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0b3V0cHV0LFxuXHRzaWduYWwsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcblx0dHlwZSBFeHBvc2VzU2lkZSxcblx0dHlwZSBFeHBvc2VzU3RhdGUsXG5cdHByb3ZpZGVFeHBvc2VkU2lkZVByb3ZpZGVyRXhpc3RpbmcsXG5cdHByb3ZpZGVFeHBvc2VzU3RhdGVQcm92aWRlckV4aXN0aW5nLFxufSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9jb3JlJztcbmltcG9ydCB7IEJybkZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9mb3JtLWZpZWxkJztcbmltcG9ydCB7IENoYW5nZUZuLCBFcnJvclN0YXRlTWF0Y2hlciwgRXJyb3JTdGF0ZVRyYWNrZXIsIFRvdWNoRm4gfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9mb3Jtcyc7XG5pbXBvcnQgeyBCcm5MYWJlbERpcmVjdGl2ZSB9IGZyb20gJ0BzcGFydGFuLW5nL2JyYWluL2xhYmVsJztcbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5TZWxlY3RDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9icm4tc2VsZWN0LWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEJyblNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL2Jybi1zZWxlY3Quc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEJyblJlYWREaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYnJuLXNlbGVjdCwgaGxtLXNlbGVjdCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtPdmVybGF5TW9kdWxlLCBDZGtMaXN0Ym94TW9kdWxlXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdHByb3ZpZGVyczogW1xuXHRcdEJyblNlbGVjdFNlcnZpY2UsXG5cdFx0Q2RrTGlzdGJveCxcblx0XHRwcm92aWRlRXhwb3NlZFNpZGVQcm92aWRlckV4aXN0aW5nKCgpID0+IEJyblNlbGVjdENvbXBvbmVudCksXG5cdFx0cHJvdmlkZUV4cG9zZXNTdGF0ZVByb3ZpZGVyRXhpc3RpbmcoKCkgPT4gQnJuU2VsZWN0Q29tcG9uZW50KSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBCcm5Gb3JtRmllbGRDb250cm9sLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IEJyblNlbGVjdENvbXBvbmVudCxcblx0XHR9LFxuXHRdLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoIWxhYmVsUHJvdmlkZWQoKSAmJiBwbGFjZWhvbGRlcigpKSB7XG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJoaWRkZW5cIiBbYXR0ci5pZF09XCJiYWNrdXBMYWJlbElkKClcIj57eyBwbGFjZWhvbGRlcigpIH19PC9sYWJlbD5cblx0XHR9IEBlbHNlIHtcblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImxhYmVsW2hsbUxhYmVsXSxsYWJlbFticm5MYWJlbF1cIiAvPlxuXHRcdH1cblxuXHRcdDxkaXYgY2RrLW92ZXJsYXktb3JpZ2luIChjbGljayk9XCJ0b2dnbGUoKVwiICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiaGxtLXNlbGVjdC10cmlnZ2VyLFticm5TZWxlY3RUcmlnZ2VyXVwiIC8+XG5cdFx0PC9kaXY+XG5cdFx0PG5nLXRlbXBsYXRlXG5cdFx0XHRjZGstY29ubmVjdGVkLW92ZXJsYXlcblx0XHRcdGNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb25cblx0XHRcdGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuXHRcdFx0Y2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG5cdFx0XHRbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcblx0XHRcdFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJfZGVsYXllZEV4cGFuZGVkKClcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiX3Bvc2l0aW9uc1wiXG5cdFx0XHRbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cInRyaWdnZXJXaWR0aCgpID4gMCA/IHRyaWdnZXJXaWR0aCgpIDogJ2F1dG8nXCJcblx0XHRcdChiYWNrZHJvcENsaWNrKT1cImNsb3NlKClcIlxuXHRcdFx0KGRldGFjaCk9XCJjbG9zZSgpXCJcblx0XHRcdChwb3NpdGlvbkNoYW5nZSk9XCJfcG9zaXRpb25DaGFuZ2VzJC5uZXh0KCRldmVudClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0YCxcbn0pXG5leHBvcnQgY2xhc3MgQnJuU2VsZWN0Q29tcG9uZW50PFQgPSB1bmtub3duPlxuXHRpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBEb0NoZWNrLCBFeHBvc2VzU2lkZSwgRXhwb3Nlc1N0YXRlLCBCcm5Gb3JtRmllbGRDb250cm9sXG57XG5cdHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdFNlcnZpY2UgPSBpbmplY3QoQnJuU2VsZWN0U2VydmljZSk7XG5cblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJXaWR0aCA9IHRoaXMuX3NlbGVjdFNlcnZpY2UudHJpZ2dlcldpZHRoO1xuXG5cdHB1YmxpYyByZWFkb25seSBtdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHVibGljIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cdHB1YmxpYyByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHVibGljIHJlYWRvbmx5IGRpciA9IGlucHV0PEJyblJlYWREaXJlY3Rpb24+KCdsdHInKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZGlzYWJsZWRGcm9tU2V0RGlzYWJsZWRTdGF0ZSA9IHNpZ25hbChmYWxzZSk7XG5cblx0cHJvdGVjdGVkIHNlbGVjdExhYmVsID0gY29udGVudENoaWxkKEJybkxhYmVsRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KTtcblx0LyoqIE92ZXJsYXkgcGFuZSBjb250YWluaW5nIHRoZSBvcHRpb25zLiAqL1xuXHRwcm90ZWN0ZWQgc2VsZWN0Q29udGVudCA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZChCcm5TZWxlY3RDb250ZW50Q29tcG9uZW50KTtcblxuXHRwcm90ZWN0ZWQgb3B0aW9ucyA9IGNvbnRlbnRDaGlsZHJlbihDZGtPcHRpb24sIHsgZGVzY2VuZGFudHM6IHRydWUgfSk7XG5cdHByb3RlY3RlZCBvcHRpb25zJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLm9wdGlvbnMpO1xuXHRwcm90ZWN0ZWQgb3B0aW9uc0FuZEluZGV4JCA9IHRoaXMub3B0aW9ucyQucGlwZShtYXAoKG9wdGlvbnMsIGluZGV4KSA9PiBbb3B0aW9ucywgaW5kZXhdIGFzIGNvbnN0KSk7XG5cblx0LyoqIE92ZXJsYXkgcGFuZSBjb250YWluaW5nIHRoZSBvcHRpb25zLiAqL1xuXHRwcm90ZWN0ZWQgX292ZXJsYXlEaXIgPSB2aWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSk7XG5cblx0cHVibGljIHJlYWRvbmx5IG9wZW5lZENoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG5cdHB1YmxpYyByZWFkb25seSBjbG9zZURlbGF5ID0gaW5wdXQ8bnVtYmVyPigxMDApO1xuXHRwdWJsaWMgcmVhZG9ubHkgaXNFeHBhbmRlZCA9IHRoaXMuX3NlbGVjdFNlcnZpY2UuaXNFeHBhbmRlZDtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9kZWxheWVkRXhwYW5kZWQgPSB0b1NpZ25hbChcblx0XHR0b09ic2VydmFibGUodGhpcy5pc0V4cGFuZGVkKS5waXBlKFxuXHRcdFx0c3dpdGNoTWFwKChleHBhbmRlZCkgPT4gKCFleHBhbmRlZCA/IG9mKGV4cGFuZGVkKS5waXBlKGRlbGF5KHRoaXMuY2xvc2VEZWxheSgpKSkgOiBvZihleHBhbmRlZCkpKSxcblx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCgpLFxuXHRcdCksXG5cdFx0eyBpbml0aWFsVmFsdWU6IGZhbHNlIH0sXG5cdCk7XG5cdHB1YmxpYyByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzRXhwYW5kZWQoKSA/ICdvcGVuJyA6ICdjbG9zZWQnKSk7XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9wb3NpdGlvbkNoYW5nZXMkID0gbmV3IFN1YmplY3Q8Q29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlPigpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc2lkZTogU2lnbmFsPCd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnPiA9IHRvU2lnbmFsKFxuXHRcdHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcyQucGlwZShcblx0XHRcdG1hcDxDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnPigoY2hhbmdlKSA9PlxuXHRcdFx0XHQvLyB0b2RvOiBiZXR0ZXIgdHJhbnNsYXRpb24gb3IgYWRqdXN0aW5nIGhsbSB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50XG5cdFx0XHRcdGNoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5ZID09PSAnY2VudGVyJ1xuXHRcdFx0XHRcdD8gY2hhbmdlLmNvbm5lY3Rpb25QYWlyLm9yaWdpblggPT09ICdzdGFydCdcblx0XHRcdFx0XHRcdD8gJ2xlZnQnXG5cdFx0XHRcdFx0XHQ6ICdyaWdodCdcblx0XHRcdFx0XHQ6IGNoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5ZLFxuXHRcdFx0KSxcblx0XHQpLFxuXHRcdHsgaW5pdGlhbFZhbHVlOiAnYm90dG9tJyB9LFxuXHQpO1xuXG5cdHB1YmxpYyByZWFkb25seSBiYWNrdXBMYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fc2VsZWN0U2VydmljZS5sYWJlbElkKCkpO1xuXHRwdWJsaWMgcmVhZG9ubHkgbGFiZWxQcm92aWRlZCA9IHNpZ25hbChmYWxzZSk7XG5cblx0cHVibGljIHJlYWRvbmx5IG5nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUsIHNlbGY6IHRydWUgfSk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuXHRwcml2YXRlIF9vbkNoYW5nZTogQ2hhbmdlRm48VD4gPSAoKSA9PiB7fTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuXHRwcml2YXRlIF9vblRvdWNoZWQ6IFRvdWNoRm4gPSAoKSA9PiB7fTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRFbWl0VmFsdWVDaGFuZ2UgPSBzaWduYWwoZmFsc2UpO1xuXG5cdC8qXG5cdCAqIFRoaXMgcG9zaXRpb24gY29uZmlnIGVuc3VyZXMgdGhhdCB0aGUgdG9wIFwic3RhcnRcIiBjb3JuZXIgb2YgdGhlIG92ZXJsYXlcblx0ICogaXMgYWxpZ25lZCB3aXRoIHdpdGggdGhlIHRvcCBcInN0YXJ0XCIgb2YgdGhlIG9yaWdpbiBieSBkZWZhdWx0IChvdmVybGFwcGluZ1xuXHQgKiB0aGUgdHJpZ2dlciBjb21wbGV0ZWx5KS4gSWYgdGhlIHBhbmVsIGNhbm5vdCBmaXQgYmVsb3cgdGhlIHRyaWdnZXIsIGl0XG5cdCAqIHdpbGwgZmFsbCBiYWNrIHRvIGEgcG9zaXRpb24gYWJvdmUgdGhlIHRyaWdnZXIuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX3Bvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnc3RhcnQnLFxuXHRcdFx0b3JpZ2luWTogJ2JvdHRvbScsXG5cdFx0XHRvdmVybGF5WDogJ3N0YXJ0Jyxcblx0XHRcdG92ZXJsYXlZOiAndG9wJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdG9yaWdpblg6ICdlbmQnLFxuXHRcdFx0b3JpZ2luWTogJ2JvdHRvbScsXG5cdFx0XHRvdmVybGF5WDogJ2VuZCcsXG5cdFx0XHRvdmVybGF5WTogJ3RvcCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnc3RhcnQnLFxuXHRcdFx0b3JpZ2luWTogJ3RvcCcsXG5cdFx0XHRvdmVybGF5WDogJ3N0YXJ0Jyxcblx0XHRcdG92ZXJsYXlZOiAnYm90dG9tJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdG9yaWdpblg6ICdlbmQnLFxuXHRcdFx0b3JpZ2luWTogJ3RvcCcsXG5cdFx0XHRvdmVybGF5WDogJ2VuZCcsXG5cdFx0XHRvdmVybGF5WTogJ2JvdHRvbScsXG5cdFx0fSxcblx0XTtcblxuXHRwdWJsaWMgZXJyb3JTdGF0ZVRyYWNrZXI6IEVycm9yU3RhdGVUcmFja2VyO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciA9IGluamVjdChFcnJvclN0YXRlTWF0Y2hlcik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudEZvcm0gPSBpbmplY3QoTmdGb3JtLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRGb3JtR3JvdXAgPSBpbmplY3QoRm9ybUdyb3VwRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdHB1YmxpYyBlcnJvclN0YXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lcnJvclN0YXRlVHJhY2tlci5lcnJvclN0YXRlKCkpO1xuXG5cdHB1YmxpYyB3cml0ZVZhbHVlJCA9IG5ldyBTdWJqZWN0PFQ+KCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSxcblx0XHRcdHBsYWNlaG9sZGVyOiB0aGlzLnBsYWNlaG9sZGVyLFxuXHRcdFx0ZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG5cdFx0XHRkaXNhYmxlZEJ5U2V0RGlzYWJsZWQ6IHRoaXMuX2Rpc2FibGVkRnJvbVNldERpc2FibGVkU3RhdGUsXG5cdFx0XHRkaXI6IHRoaXMuZGlyLFxuXHRcdH0pKTtcblx0XHR0aGlzLmhhbmRsZU9wdGlvbkNoYW5nZXMoKTtcblx0XHR0aGlzLmhhbmRsZUluaXRpYWxPcHRpb25TZWxlY3QoKTtcblxuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0aWQ6IGBicm4tc2VsZWN0LSR7bmV4dElkKyt9YCxcblx0XHR9KSk7XG5cdFx0aWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcblx0XHR9XG5cblx0XHQvLyBXYXRjaCBmb3IgTGlzdGJveCBTZWxlY3Rpb24gQ2hhbmdlcyB0byB0cmlnZ2VyIENvbGxhcHNlIGFuZCBWYWx1ZSBDaGFuZ2Vcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLmxpc3RCb3hWYWx1ZUNoYW5nZUV2ZW50JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLm11bHRpcGxlKCkpIHtcblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBzZXQgc2hvdWxkRW1pdFZhbHVlQ2hhbmdlIHRvIHRydWUgYmVjYXVzZSB3ZSB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgdmFsdWUgY2hhbmdlXG5cdFx0XHQvLyBhcyBhIHJlc3VsdCBvZiB1c2VyIGludGVyYWN0aW9uXG5cdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogTGlzdGVuaW5nIHRvIHZhbHVlIGNoYW5nZXMgaW4gb3JkZXIgdG8gdHJpZ2dlciBmb3JtcyBhcGkgb24gY2hhbmdlXG5cdFx0ICogU2hvdWxkRW1pdFZhbHVlQ2hhbmdlIHNpbXBseSBlbnN1cmVzIHdlIG9ubHkgcHJvcGFnYXRlIHZhbHVlIGNoYW5nZSB3aGVuIGEgdXNlciBtYWtlcyBhIHNlbGVjdGlvblxuXHRcdCAqIHdlIGRvbid0IHByb3BhZ2F0ZSBjaGFuZ2VzIG1hZGUgZnJvbSBvdXRzaWRlIHRoZSBjb21wb25lbnQgKGV4LiBwYXRjaCB2YWx1ZSBvciBpbml0aWFsIHZhbHVlIGZyb20gZm9ybSBjb250cm9sKVxuXHRcdCAqL1xuXHRcdHRvT2JzZXJ2YWJsZSh0aGlzLl9zZWxlY3RTZXJ2aWNlLnZhbHVlKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlKCkpIHtcblx0XHRcdFx0dGhpcy5fb25DaGFuZ2UoKHZhbHVlID8/IG51bGwpIGFzIFQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldCh0cnVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZXJyb3JTdGF0ZVRyYWNrZXIgPSBuZXcgRXJyb3JTdGF0ZVRyYWNrZXIoXG5cdFx0XHR0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsXG5cdFx0XHR0aGlzLm5nQ29udHJvbCxcblx0XHRcdHRoaXMuX3BhcmVudEZvcm1Hcm91cCxcblx0XHRcdHRoaXMuX3BhcmVudEZvcm0sXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgTGFiZWwgRGlyZWN0aXZlIFByb3ZpZGVkIGFuZCBwYXNzIHRvIHNlcnZpY2Vcblx0XHRjb25zdCBsYWJlbCA9IHRoaXMuc2VsZWN0TGFiZWwoKTtcblx0XHRpZiAobGFiZWwpIHtcblx0XHRcdHRoaXMubGFiZWxQcm92aWRlZC5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRsYWJlbElkOiBsYWJlbC5pZCgpLFxuXHRcdFx0fSkpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5wbGFjZWhvbGRlcigpKSB7XG5cdFx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRsYWJlbElkOiBgJHtzdGF0ZS5pZH0tLWxhYmVsYCxcblx0XHRcdH0pKTtcblx0XHR9XG5cdH1cblxuXHRuZ0RvQ2hlY2soKSB7XG5cdFx0dGhpcy5lcnJvclN0YXRlVHJhY2tlci51cGRhdGVFcnJvclN0YXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzRXhwYW5kZWQoKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgb3BlbigpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2Nhbk9wZW4oKSkgcmV0dXJuO1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0aXNFeHBhbmRlZDogdHJ1ZSxcblx0XHR9KSk7XG5cdFx0dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0cnVlKTtcblx0XHR0aGlzLl9tb3ZlRm9jdXNUb0NES0xpc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaXNFeHBhbmRlZCgpKSByZXR1cm47XG5cblx0XHRpZiAodGhpcy5fc2VsZWN0U2VydmljZS5zZWxlY3RUcmlnZ2VyKSB7XG5cdFx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnNlbGVjdFRyaWdnZXIuZm9jdXMoKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wZW5lZENoYW5nZS5lbWl0KGZhbHNlKTtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdGlzRXhwYW5kZWQ6IGZhbHNlLFxuXHRcdH0pKTtcblx0XHR0aGlzLl9vblRvdWNoZWQoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBfY2FuT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuaXNFeHBhbmRlZCgpICYmICF0aGlzLmRpc2FibGVkKCkgJiYgdGhpcy5vcHRpb25zKCk/Lmxlbmd0aCA+IDA7XG5cdH1cblxuXHRwcml2YXRlIF9tb3ZlRm9jdXNUb0NES0xpc3QoKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnNlbGVjdENvbnRlbnQoKT8uZm9jdXNMaXN0KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuXHRcdHRoaXMud3JpdGVWYWx1ZSQubmV4dCh2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogQ2hhbmdlRm48VD4pOiB2b2lkIHtcblx0XHR0aGlzLl9vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBUb3VjaEZuKTogdm9pZCB7XG5cdFx0dGhpcy5fb25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5fZGlzYWJsZWRGcm9tU2V0RGlzYWJsZWRTdGF0ZS5zZXQoaXNEaXNhYmxlZCk7XG5cdH1cblxuXHQvKipcblx0ICogT25jZSB3cml0ZVZhbHVlIGlzIGNhbGxlZCBhbmQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdlIGNhbiBoYW5kbGUgc2V0dGluZyB0aGUgaW5pdGlhbCBvcHRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZUluaXRpYWxPcHRpb25TZWxlY3QoKSB7XG5cdFx0Ly8gV3JpdGUgdmFsdWUgY2Fubm90IGJlIGhhbmRsZWQgdW50aWwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBzbyB3ZSB3YWl0IHVudGlsIGJvdGggYXJlIGF2YWlsYWJsZSB3aXRoIGEgY29tYmluZUxhdGVzdFxuXHRcdGNvbWJpbmVMYXRlc3QoW3RoaXMud3JpdGVWYWx1ZSQsIHRoaXMub3B0aW9ucyRdKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdG1hcCgodmFsdWVzLCBpbmRleCkgPT4gWy4uLnZhbHVlcywgaW5kZXhdKSxcblx0XHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKCksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChbdmFsdWUsIF8sIGluZGV4XSkgPT4ge1xuXHRcdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KGZhbHNlKTtcblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zKHZhbHVlKTtcblx0XHRcdFx0Ly8gdGhlIGZpcnN0IHRpbWUgdGhpcyBvYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUgd2UgYXJlIHNpbXBseSBzZXR0aW5nIHRoZSBpbml0aWFsIHN0YXRlXG5cdFx0XHRcdC8vIHRoaXMgY2hhbmdlIHNob3VsZCBub3QgY291bnQgYXMgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3QsIHNvIHdlIG5lZWQgdG8gbWFyayBhcyBwcmlzdGluZVxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLm5nQ29udHJvbD8uY29udHJvbD8ubWFya0FzUHJpc3RpbmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiBvcHRpb25zIGNoYW5nZSwgb3VyIGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9ucyBtYXkgYmVjb21lIGludmFsaWRcblx0ICogSGVyZSB3ZSB3aWxsIGF1dG9tYXRpY2FsbHkgdXBkYXRlIG91ciBjdXJyZW50IHNlbGVjdGVkIG9wdGlvbnMgc28gdGhhdCB0aGV5IGFyZSBhbHdheXMgaW5saW5lIHdpdGggdGhlIHBvc3NpYmxlT3B0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVPcHRpb25DaGFuZ2VzKCkge1xuXHRcdHRoaXMub3B0aW9uc0FuZEluZGV4JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKFtvcHRpb25zLCBpbmRleF0pID0+IHtcblx0XHRcdGlmIChpbmRleCA+IDApIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVJbnZhbGlkT3B0aW9ucyhvcHRpb25zKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2UudXBkYXRlUG9zc2libGVPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIHRoYXQgb3VyIFwic2VsZWN0ZWRPcHRpb25zXCIgYXJlIHN0aWxsIHZhbGlkIHdoZW4gXCJwb3NzaWJsZU9wdGlvbnNcIiBpcyBhYm91dCB0byBiZSB1cGRhdGVkXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZUludmFsaWRPcHRpb25zKG9wdGlvbnM6IHJlYWRvbmx5IENka09wdGlvbltdKSB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5fc2VsZWN0U2VydmljZS5zZWxlY3RlZE9wdGlvbnMoKTtcblx0XHRjb25zdCBhdmFpbGFibGVPcHRpb25TZXQgPSBuZXcgU2V0PENka09wdGlvbiB8IG51bGw+KG9wdGlvbnMpO1xuXHRcdGlmICh0aGlzLl9zZWxlY3RTZXJ2aWNlLm11bHRpcGxlKCkpIHtcblx0XHRcdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG8pID0+IGF2YWlsYWJsZU9wdGlvblNldC5oYXMobykpO1xuXHRcdFx0aWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggIT09IGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBmaWx0ZXJlZE9wdGlvbnMubWFwKChvKSA9PiAobz8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJyk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0XHRzZWxlY3RlZE9wdGlvbnM6IGZpbHRlcmVkT3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdH0pKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbnNbMF0gPz8gbnVsbDtcblx0XHRcdGlmIChzZWxlY3RlZE9wdGlvbiAhPT0gbnVsbCAmJiAhYXZhaWxhYmxlT3B0aW9uU2V0LmhhcyhzZWxlY3RlZE9wdGlvbikpIHtcblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRcdHNlbGVjdGVkT3B0aW9uczogW10sXG5cdFx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXX0=
@@ -151,6 +151,15 @@ export class BrnSelectService {
151
151
  selectedOptions: this.selectedOptions(),
152
152
  }));
153
153
  }
154
+ /**
155
+ * Sync the updated options with "possibleOptions" in the select service
156
+ */
157
+ updatePossibleOptions(options) {
158
+ this.state.update((state) => ({
159
+ ...state,
160
+ possibleOptions: options,
161
+ }));
162
+ }
154
163
  selectOptionByValue(value) {
155
164
  const options = this.possibleOptions();
156
165
  if (value === null || value === undefined) {
@@ -195,4 +204,4 @@ export class BrnSelectService {
195
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectService, decorators: [{
196
205
  type: Injectable
197
206
  }], ctorParameters: () => [] });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi9zZWxlY3Qvc3JjL2xpYi9icm4tc2VsZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQXVCdEMsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQixHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZCLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO0lBQzVDLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxD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QUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsR0FBRyxLQUFLO2dCQUNSLGVBQWUsRUFBRSxDQUFDLGNBQWtDLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxjQUFjLENBQUMsS0FBZTthQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDRixDQUFDOzBIQW5KVyxnQkFBZ0I7OEhBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2RrT3B0aW9uLCBMaXN0Ym94VmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9saXN0Ym94JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdHR5cGUgQWZ0ZXJWaWV3SW5pdCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3RhYmxlLFxuXHRPbkRlc3Ryb3ksXG5cdFBMQVRGT1JNX0lELFxuXHRTaWduYWwsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5TZWxlY3RUcmlnZ2VyXScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAnY29tYm9ib3gnLFxuXHRcdCdbYXR0ci5pZF0nOiAnc2VsZWN0VHJpZ2dlcklkKCknLFxuXHRcdCdbZGlzYWJsZWRdJzogJ3NlbGVjdERpc2FibGUoKScsXG5cdFx0J1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzRXhwYW5kZWQoKScsXG5cdFx0J1thdHRyLmFyaWEtY29udHJvbHNdJzogXCJzZWxlY3RDb250ZW50SWQoKSArICcnXCIsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxsZWRCeV0nOiAnc2VsZWN0VHJpZ2dlckxhYmVsbGVkQnkoKScsXG5cdFx0J2FyaWEtYXV0b2NvbXBsZXRlJzogJ25vbmUnLFxuXHRcdCdbYXR0ci5kaXJdJzogJ19zZWxlY3RTZXJ2aWNlLmRpcigpJyxcblx0XHQnW2NsYXNzLm5nLWludmFsaWRdJzogJ3RoaXMuX25nQ29udHJvbD8uaW52YWxpZCB8fCBudWxsJyxcblx0XHQnW2NsYXNzLm5nLWRpcnR5XSc6ICd0aGlzLl9uZ0NvbnRyb2w/LmRpcnR5IHx8IG51bGwnLFxuXHRcdCdbY2xhc3MubmctdmFsaWRdJzogJ3RoaXMuX25nQ29udHJvbD8udmFsaWQgfHwgbnVsbCcsXG5cdFx0J1tjbGFzcy5uZy10b3VjaGVkXSc6ICd0aGlzLl9uZ0NvbnRyb2w/LnRvdWNoZWQgfHwgbnVsbCcsXG5cdFx0J1tjbGFzcy5uZy11bnRvdWNoZWRdJzogJ3RoaXMuX25nQ29udHJvbD8udW50b3VjaGVkIHx8IG51bGwnLFxuXHRcdCdbY2xhc3MubmctcHJpc3RpbmVdJzogJ3RoaXMuX25nQ29udHJvbD8ucHJpc3RpbmUgfHwgbnVsbCcsXG5cdFx0dHlwZTogJ2J1dHRvbicsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblNlbGVjdFRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lbCA9IGluamVjdChFbGVtZW50UmVmKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9zZWxlY3RTZXJ2aWNlID0gaW5qZWN0KEJyblNlbGVjdFNlcnZpY2UpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX25nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLmlzRXhwYW5kZWQ7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RUcmlnZ2VySWQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS10cmlnZ2VyYCk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RDb250ZW50SWQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS1jb250ZW50YCk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3REaXNhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fc2VsZWN0U2VydmljZS5kaXNhYmxlZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdFRyaWdnZXJMYWJlbGxlZEJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGlmICh0aGlzLl9zZWxlY3RTZXJ2aWNlLnZhbHVlKCkgJiYgdGhpcy5fc2VsZWN0U2VydmljZS52YWx1ZSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmxhYmVsSWQoKX0gJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS12YWx1ZWA7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9zZWxlY3RTZXJ2aWNlLmxhYmVsSWQoKTtcblx0fSk7XG5cblx0cHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAoIXRoaXMuX3NlbGVjdFNlcnZpY2UpIHJldHVybjtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLl9zZXRTZWxlY3RUcmlnZ2VyKHRoaXMpO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2V0VHJpZ2dlcldpZHRoKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuXG5cdFx0Ly8gaWYgd2UgYXJlIG9uIHRoZSBjbGllbnQsIGxpc3RlbiBmb3IgZWxlbWVudCByZXNpemUgZXZlbnRzXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtKSkge1xuXHRcdFx0dGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT5cblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zZXRUcmlnZ2VyV2lkdGgodGhpcy5fZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMoKSB7XG5cdFx0dGhpcy5fZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHR9XG59XG5cbnR5cGUgQnJuUmVhZERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCcm5TZWxlY3RTZXJ2aWNlIHtcblx0cHVibGljIHJlYWRvbmx5IHN0YXRlID0gc2lnbmFsPHtcblx0XHRpZDogc3RyaW5nO1xuXHRcdGxhYmVsSWQ6IHN0cmluZztcblx0XHRwYW5lbElkOiBzdHJpbmc7XG5cdFx0cGxhY2Vob2xkZXI6IFNpZ25hbDxzdHJpbmc+O1xuXHRcdGlzRXhwYW5kZWQ6IGJvb2xlYW47XG5cdFx0bXVsdGlwbGU6IFNpZ25hbDxib29sZWFuPjtcblx0XHRkaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+O1xuXHRcdGRpc2FibGVkQnlTZXREaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+O1xuXHRcdGRpcjogU2lnbmFsPEJyblJlYWREaXJlY3Rpb24+O1xuXHRcdHNlbGVjdGVkT3B0aW9uczogQXJyYXk8Q2RrT3B0aW9uIHwgbnVsbD47XG5cdFx0cG9zc2libGVPcHRpb25zOiBBcnJheTxDZGtPcHRpb24gfCBudWxsPjtcblx0XHR2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG5cdFx0dHJpZ2dlcldpZHRoOiBudW1iZXI7XG5cdH0+KHtcblx0XHRpZDogJycsXG5cdFx0bGFiZWxJZDogJycsXG5cdFx0cGFuZWxJZDogJycsXG5cdFx0aXNFeHBhbmRlZDogZmFsc2UsXG5cdFx0cGxhY2Vob2xkZXI6IHNpZ25hbCgnJyksXG5cdFx0bXVsdGlwbGU6IHNpZ25hbChmYWxzZSksXG5cdFx0ZGlzYWJsZWQ6IHNpZ25hbChmYWxzZSksXG5cdFx0ZGlzYWJsZWRCeVNldERpc2FibGVkOiBzaWduYWwoZmFsc2UpLFxuXHRcdGRpcjogc2lnbmFsKCdsdHInIGFzIEJyblJlYWREaXJlY3Rpb24pLFxuXHRcdHNlbGVjdGVkT3B0aW9uczogW10sXG5cdFx0cG9zc2libGVPcHRpb25zOiBbXSxcblx0XHR2YWx1ZTogJycsXG5cdFx0dHJpZ2dlcldpZHRoOiAwLFxuXHR9KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuaWQpO1xuXHRwdWJsaWMgcmVhZG9ubHkgbGFiZWxJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5sYWJlbElkKTtcblx0cHVibGljIHJlYWRvbmx5IHBhbmVsSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkucGFuZWxJZCk7XG5cdHB1YmxpYyByZWFkb25seSBwbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5wbGFjZWhvbGRlcigpKTtcblx0cHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLmRpc2FibGVkKCkgfHwgdGhpcy5zdGF0ZSgpLmRpc2FibGVkQnlTZXREaXNhYmxlZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuaXNFeHBhbmRlZCk7XG5cdHB1YmxpYyByZWFkb25seSBtdWx0aXBsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5tdWx0aXBsZSgpKTtcblx0cHVibGljIHJlYWRvbmx5IGRpciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5kaXIoKSk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuc2VsZWN0ZWRPcHRpb25zKTtcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnZhbHVlKTtcblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS50cmlnZ2VyV2lkdGgpO1xuXHRwdWJsaWMgcmVhZG9ubHkgcG9zc2libGVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnBvc3NpYmxlT3B0aW9ucyk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfbXVsdGlwbGUkID0gdG9PYnNlcnZhYmxlKHRoaXMubXVsdGlwbGUpO1xuXG5cdHB1YmxpYyByZWFkb25seSBsaXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQgPSBuZXcgU3ViamVjdDxMaXN0Ym94VmFsdWVDaGFuZ2VFdmVudDx1bmtub3duPj4oKTtcblxuXHRwcml2YXRlIF9zZWxlY3RUcmlnZ2VyPzogQnJuU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZTtcblx0cHVibGljIGdldCBzZWxlY3RUcmlnZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zZWxlY3RUcmlnZ2VyO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChsaXN0Qm94Q2hhbmdlKSA9PiB7XG5cdFx0XHRjb25zdCB1cGRhdGVkU2VsZWN0aW9ucyA9IHRoaXMubXVsdGlwbGUoKSA/IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbnMobGlzdEJveENoYW5nZSkgOiBbbGlzdEJveENoYW5nZS5vcHRpb25dO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLm11bHRpcGxlKCkgPyBsaXN0Qm94Q2hhbmdlLnZhbHVlIDogbGlzdEJveENoYW5nZS52YWx1ZVswXTtcblx0XHRcdHRoaXMuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdHNlbGVjdGVkT3B0aW9uczogWy4uLnVwZGF0ZWRTZWxlY3Rpb25zXSxcblx0XHRcdFx0dmFsdWU6IHZhbHVlIGFzIHN0cmluZyB8IHN0cmluZ1tdLFxuXHRcdFx0fSkpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBza2lwIHRoZSBmaXJzdCB2YWx1ZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVzZWxlY3QgYWxsIG9wdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBwcmVzZWxlY3RlZCB2YWx1ZSBlLmcuIGJ5IHRoZSBmb3JtIGNvbnRyb2xcblx0XHR0aGlzLl9tdWx0aXBsZSQucGlwZShza2lwKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChtdWx0aXBsZSkgPT4ge1xuXHRcdFx0aWYgKCFtdWx0aXBsZSAmJiB0aGlzLnZhbHVlKCkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR0aGlzLmRlc2VsZWN0QWxsT3B0aW9ucygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyV2lkdGg6IG51bWJlcikge1xuXHRcdHRoaXMuc3RhdGUudXBkYXRlKChzKSA9PiAoeyAuLi5zLCB0cmlnZ2VyV2lkdGggfSkpO1xuXHR9XG5cblx0cHVibGljIGdldFVwZGF0ZWRPcHRpb25zKGxhdGVzdExpc3Rib3hDaGFuZ2U6IExpc3Rib3hWYWx1ZUNoYW5nZUV2ZW50PHVua25vd24+KTogQXJyYXk8Q2RrT3B0aW9uIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGlzTmV3U2VsZWN0aW9uID0gbGF0ZXN0TGlzdGJveENoYW5nZS52YWx1ZS5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gbGF0ZXN0TGlzdGJveENoYW5nZS5vcHRpb24/LnZhbHVlKTtcblx0XHRpZiAoaXNOZXdTZWxlY3Rpb24gPT09IC0xKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkT3B0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucygpLmZpbmRJbmRleCgob3B0aW9uKSA9PiBsYXRlc3RMaXN0Ym94Q2hhbmdlLm9wdGlvbiA9PT0gb3B0aW9uKTtcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucygpO1xuXHRcdFx0b3B0aW9ucy5zcGxpY2UocmVtb3ZlZE9wdGlvbkluZGV4LCAxKTtcblx0XHRcdHJldHVybiBvcHRpb25zO1xuXHRcdH1cblx0XHRyZXR1cm4gWy4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zKCksIGxhdGVzdExpc3Rib3hDaGFuZ2Uub3B0aW9uXTtcblx0fVxuXG5cdHB1YmxpYyBkZXNlbGVjdEFsbE9wdGlvbnMoKSB7XG5cdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRzZWxlY3RlZE9wdGlvbnM6IFtdLFxuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8vIE5lZWRlZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjA4MTBcblx0cHVibGljIF9zZXRTZWxlY3RUcmlnZ2VyKHRyaWdnZXI6IEJyblNlbGVjdFRyaWdnZXJEaXJlY3RpdmUpIHtcblx0XHR0aGlzLl9zZWxlY3RUcmlnZ2VyID0gdHJpZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBzZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zKHZhbHVlOiB1bmtub3duKSB7XG5cdFx0dGhpcy5zZWxlY3RPcHRpb25CeVZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcblx0XHRcdGluaXRpYWxTZWxlY3RlZE9wdGlvbnM6IHRoaXMuc2VsZWN0ZWRPcHRpb25zKCksXG5cdFx0XHRzZWxlY3RlZE9wdGlvbnM6IHRoaXMuc2VsZWN0ZWRPcHRpb25zKCksXG5cdFx0fSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZWxlY3RPcHRpb25CeVZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMucG9zc2libGVPcHRpb25zKCk7XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG51bGxPclVuZGVmaW5lZE9wdGlvbiA9IG9wdGlvbnMuZmluZCgobykgPT4gbyAmJiBvLnZhbHVlID09PSB2YWx1ZSk7XG5cdFx0XHRpZiAoIW51bGxPclVuZGVmaW5lZE9wdGlvbikge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zOiBbXSxcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5tdWx0aXBsZSgpID8gW10gOiAnJyxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUoKSkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMob3B0aW9uPy52YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gb3B0aW9uPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWUgYXMgc3RyaW5nW10sXG5cdFx0XHR9KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUgPT09IHZhbHVlKTtcblx0XHRcdGlmICghc2VsZWN0ZWRPcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zOiBbc2VsZWN0ZWRPcHRpb24gYXMgQ2RrT3B0aW9uIHwgbnVsbF0sXG5cdFx0XHRcdHZhbHVlOiBzZWxlY3RlZE9wdGlvbi52YWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi9zZWxlY3Qvc3JjL2xpYi9icm4tc2VsZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQXVCdEMsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQixHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZCLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO0lBQzVDLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxD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QUM7WUFDUCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsR0FBRyxLQUFLO2dCQUNSLGVBQWUsRUFBRSxDQUFDLGNBQWtDLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxjQUFjLENBQUMsS0FBZTthQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDRixDQUFDOzBIQTdKVyxnQkFBZ0I7OEhBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2RrT3B0aW9uLCBMaXN0Ym94VmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9saXN0Ym94JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdHR5cGUgQWZ0ZXJWaWV3SW5pdCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3RhYmxlLFxuXHRPbkRlc3Ryb3ksXG5cdFBMQVRGT1JNX0lELFxuXHRTaWduYWwsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5TZWxlY3RUcmlnZ2VyXScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAnY29tYm9ib3gnLFxuXHRcdCdbYXR0ci5pZF0nOiAnc2VsZWN0VHJpZ2dlcklkKCknLFxuXHRcdCdbZGlzYWJsZWRdJzogJ3NlbGVjdERpc2FibGUoKScsXG5cdFx0J1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzRXhwYW5kZWQoKScsXG5cdFx0J1thdHRyLmFyaWEtY29udHJvbHNdJzogXCJzZWxlY3RDb250ZW50SWQoKSArICcnXCIsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxsZWRCeV0nOiAnc2VsZWN0VHJpZ2dlckxhYmVsbGVkQnkoKScsXG5cdFx0J2FyaWEtYXV0b2NvbXBsZXRlJzogJ25vbmUnLFxuXHRcdCdbYXR0ci5kaXJdJzogJ19zZWxlY3RTZXJ2aWNlLmRpcigpJyxcblx0XHQnW2NsYXNzLm5nLWludmFsaWRdJzogJ3RoaXMuX25nQ29udHJvbD8uaW52YWxpZCB8fCBudWxsJyxcblx0XHQnW2NsYXNzLm5nLWRpcnR5XSc6ICd0aGlzLl9uZ0NvbnRyb2w/LmRpcnR5IHx8IG51bGwnLFxuXHRcdCdbY2xhc3MubmctdmFsaWRdJzogJ3RoaXMuX25nQ29udHJvbD8udmFsaWQgfHwgbnVsbCcsXG5cdFx0J1tjbGFzcy5uZy10b3VjaGVkXSc6ICd0aGlzLl9uZ0NvbnRyb2w/LnRvdWNoZWQgfHwgbnVsbCcsXG5cdFx0J1tjbGFzcy5uZy11bnRvdWNoZWRdJzogJ3RoaXMuX25nQ29udHJvbD8udW50b3VjaGVkIHx8IG51bGwnLFxuXHRcdCdbY2xhc3MubmctcHJpc3RpbmVdJzogJ3RoaXMuX25nQ29udHJvbD8ucHJpc3RpbmUgfHwgbnVsbCcsXG5cdFx0dHlwZTogJ2J1dHRvbicsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblNlbGVjdFRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lbCA9IGluamVjdChFbGVtZW50UmVmKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9zZWxlY3RTZXJ2aWNlID0gaW5qZWN0KEJyblNlbGVjdFNlcnZpY2UpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX25nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLmlzRXhwYW5kZWQ7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RUcmlnZ2VySWQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS10cmlnZ2VyYCk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RDb250ZW50SWQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS1jb250ZW50YCk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3REaXNhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fc2VsZWN0U2VydmljZS5kaXNhYmxlZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdFRyaWdnZXJMYWJlbGxlZEJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGlmICh0aGlzLl9zZWxlY3RTZXJ2aWNlLnZhbHVlKCkgJiYgdGhpcy5fc2VsZWN0U2VydmljZS52YWx1ZSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBgJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmxhYmVsSWQoKX0gJHt0aGlzLl9zZWxlY3RTZXJ2aWNlLmlkKCl9LS12YWx1ZWA7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9zZWxlY3RTZXJ2aWNlLmxhYmVsSWQoKTtcblx0fSk7XG5cblx0cHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAoIXRoaXMuX3NlbGVjdFNlcnZpY2UpIHJldHVybjtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLl9zZXRTZWxlY3RUcmlnZ2VyKHRoaXMpO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2V0VHJpZ2dlcldpZHRoKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuXG5cdFx0Ly8gaWYgd2UgYXJlIG9uIHRoZSBjbGllbnQsIGxpc3RlbiBmb3IgZWxlbWVudCByZXNpemUgZXZlbnRzXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtKSkge1xuXHRcdFx0dGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT5cblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zZXRUcmlnZ2VyV2lkdGgodGhpcy5fZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMoKSB7XG5cdFx0dGhpcy5fZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHR9XG59XG5cbnR5cGUgQnJuUmVhZERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCcm5TZWxlY3RTZXJ2aWNlIHtcblx0cHVibGljIHJlYWRvbmx5IHN0YXRlID0gc2lnbmFsPHtcblx0XHRpZDogc3RyaW5nO1xuXHRcdGxhYmVsSWQ6IHN0cmluZztcblx0XHRwYW5lbElkOiBzdHJpbmc7XG5cdFx0cGxhY2Vob2xkZXI6IFNpZ25hbDxzdHJpbmc+O1xuXHRcdGlzRXhwYW5kZWQ6IGJvb2xlYW47XG5cdFx0bXVsdGlwbGU6IFNpZ25hbDxib29sZWFuPjtcblx0XHRkaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+O1xuXHRcdGRpc2FibGVkQnlTZXREaXNhYmxlZDogU2lnbmFsPGJvb2xlYW4+O1xuXHRcdGRpcjogU2lnbmFsPEJyblJlYWREaXJlY3Rpb24+O1xuXHRcdHNlbGVjdGVkT3B0aW9uczogQXJyYXk8Q2RrT3B0aW9uIHwgbnVsbD47XG5cdFx0cG9zc2libGVPcHRpb25zOiBBcnJheTxDZGtPcHRpb24gfCBudWxsPjtcblx0XHR2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG5cdFx0dHJpZ2dlcldpZHRoOiBudW1iZXI7XG5cdH0+KHtcblx0XHRpZDogJycsXG5cdFx0bGFiZWxJZDogJycsXG5cdFx0cGFuZWxJZDogJycsXG5cdFx0aXNFeHBhbmRlZDogZmFsc2UsXG5cdFx0cGxhY2Vob2xkZXI6IHNpZ25hbCgnJyksXG5cdFx0bXVsdGlwbGU6IHNpZ25hbChmYWxzZSksXG5cdFx0ZGlzYWJsZWQ6IHNpZ25hbChmYWxzZSksXG5cdFx0ZGlzYWJsZWRCeVNldERpc2FibGVkOiBzaWduYWwoZmFsc2UpLFxuXHRcdGRpcjogc2lnbmFsKCdsdHInIGFzIEJyblJlYWREaXJlY3Rpb24pLFxuXHRcdHNlbGVjdGVkT3B0aW9uczogW10sXG5cdFx0cG9zc2libGVPcHRpb25zOiBbXSxcblx0XHR2YWx1ZTogJycsXG5cdFx0dHJpZ2dlcldpZHRoOiAwLFxuXHR9KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuaWQpO1xuXHRwdWJsaWMgcmVhZG9ubHkgbGFiZWxJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5sYWJlbElkKTtcblx0cHVibGljIHJlYWRvbmx5IHBhbmVsSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkucGFuZWxJZCk7XG5cdHB1YmxpYyByZWFkb25seSBwbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5wbGFjZWhvbGRlcigpKTtcblx0cHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLmRpc2FibGVkKCkgfHwgdGhpcy5zdGF0ZSgpLmRpc2FibGVkQnlTZXREaXNhYmxlZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuaXNFeHBhbmRlZCk7XG5cdHB1YmxpYyByZWFkb25seSBtdWx0aXBsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5tdWx0aXBsZSgpKTtcblx0cHVibGljIHJlYWRvbmx5IGRpciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS5kaXIoKSk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkuc2VsZWN0ZWRPcHRpb25zKTtcblx0cHVibGljIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnZhbHVlKTtcblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGUoKS50cmlnZ2VyV2lkdGgpO1xuXHRwdWJsaWMgcmVhZG9ubHkgcG9zc2libGVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnBvc3NpYmxlT3B0aW9ucyk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfbXVsdGlwbGUkID0gdG9PYnNlcnZhYmxlKHRoaXMubXVsdGlwbGUpO1xuXG5cdHB1YmxpYyByZWFkb25seSBsaXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQgPSBuZXcgU3ViamVjdDxMaXN0Ym94VmFsdWVDaGFuZ2VFdmVudDx1bmtub3duPj4oKTtcblxuXHRwcml2YXRlIF9zZWxlY3RUcmlnZ2VyPzogQnJuU2VsZWN0VHJpZ2dlckRpcmVjdGl2ZTtcblx0cHVibGljIGdldCBzZWxlY3RUcmlnZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzLl9zZWxlY3RUcmlnZ2VyO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChsaXN0Qm94Q2hhbmdlKSA9PiB7XG5cdFx0XHRjb25zdCB1cGRhdGVkU2VsZWN0aW9ucyA9IHRoaXMubXVsdGlwbGUoKSA/IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbnMobGlzdEJveENoYW5nZSkgOiBbbGlzdEJveENoYW5nZS5vcHRpb25dO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLm11bHRpcGxlKCkgPyBsaXN0Qm94Q2hhbmdlLnZhbHVlIDogbGlzdEJveENoYW5nZS52YWx1ZVswXTtcblx0XHRcdHRoaXMuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdHNlbGVjdGVkT3B0aW9uczogWy4uLnVwZGF0ZWRTZWxlY3Rpb25zXSxcblx0XHRcdFx0dmFsdWU6IHZhbHVlIGFzIHN0cmluZyB8IHN0cmluZ1tdLFxuXHRcdFx0fSkpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBza2lwIHRoZSBmaXJzdCB2YWx1ZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVzZWxlY3QgYWxsIG9wdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIHdpdGggYSBwcmVzZWxlY3RlZCB2YWx1ZSBlLmcuIGJ5IHRoZSBmb3JtIGNvbnRyb2xcblx0XHR0aGlzLl9tdWx0aXBsZSQucGlwZShza2lwKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChtdWx0aXBsZSkgPT4ge1xuXHRcdFx0aWYgKCFtdWx0aXBsZSAmJiB0aGlzLnZhbHVlKCkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR0aGlzLmRlc2VsZWN0QWxsT3B0aW9ucygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyV2lkdGg6IG51bWJlcikge1xuXHRcdHRoaXMuc3RhdGUudXBkYXRlKChzKSA9PiAoeyAuLi5zLCB0cmlnZ2VyV2lkdGggfSkpO1xuXHR9XG5cblx0cHVibGljIGdldFVwZGF0ZWRPcHRpb25zKGxhdGVzdExpc3Rib3hDaGFuZ2U6IExpc3Rib3hWYWx1ZUNoYW5nZUV2ZW50PHVua25vd24+KTogQXJyYXk8Q2RrT3B0aW9uIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGlzTmV3U2VsZWN0aW9uID0gbGF0ZXN0TGlzdGJveENoYW5nZS52YWx1ZS5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gbGF0ZXN0TGlzdGJveENoYW5nZS5vcHRpb24/LnZhbHVlKTtcblx0XHRpZiAoaXNOZXdTZWxlY3Rpb24gPT09IC0xKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkT3B0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucygpLmZpbmRJbmRleCgob3B0aW9uKSA9PiBsYXRlc3RMaXN0Ym94Q2hhbmdlLm9wdGlvbiA9PT0gb3B0aW9uKTtcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucygpO1xuXHRcdFx0b3B0aW9ucy5zcGxpY2UocmVtb3ZlZE9wdGlvbkluZGV4LCAxKTtcblx0XHRcdHJldHVybiBvcHRpb25zO1xuXHRcdH1cblx0XHRyZXR1cm4gWy4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zKCksIGxhdGVzdExpc3Rib3hDaGFuZ2Uub3B0aW9uXTtcblx0fVxuXG5cdHB1YmxpYyBkZXNlbGVjdEFsbE9wdGlvbnMoKSB7XG5cdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRzZWxlY3RlZE9wdGlvbnM6IFtdLFxuXHRcdFx0dmFsdWU6IFtdLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8vIE5lZWRlZCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjA4MTBcblx0cHVibGljIF9zZXRTZWxlY3RUcmlnZ2VyKHRyaWdnZXI6IEJyblNlbGVjdFRyaWdnZXJEaXJlY3RpdmUpIHtcblx0XHR0aGlzLl9zZWxlY3RUcmlnZ2VyID0gdHJpZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBzZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zKHZhbHVlOiB1bmtub3duKSB7XG5cdFx0dGhpcy5zZWxlY3RPcHRpb25CeVZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcblx0XHRcdGluaXRpYWxTZWxlY3RlZE9wdGlvbnM6IHRoaXMuc2VsZWN0ZWRPcHRpb25zKCksXG5cdFx0XHRzZWxlY3RlZE9wdGlvbnM6IHRoaXMuc2VsZWN0ZWRPcHRpb25zKCksXG5cdFx0fSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN5bmMgdGhlIHVwZGF0ZWQgb3B0aW9ucyB3aXRoIFwicG9zc2libGVPcHRpb25zXCIgaW4gdGhlIHNlbGVjdCBzZXJ2aWNlXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlUG9zc2libGVPcHRpb25zKG9wdGlvbnM6IHJlYWRvbmx5IENka09wdGlvbltdKSB7XG5cdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRwb3NzaWJsZU9wdGlvbnM6IG9wdGlvbnMgYXMgQ2RrT3B0aW9uW10sXG5cdFx0fSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZWxlY3RPcHRpb25CeVZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMucG9zc2libGVPcHRpb25zKCk7XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG51bGxPclVuZGVmaW5lZE9wdGlvbiA9IG9wdGlvbnMuZmluZCgobykgPT4gbyAmJiBvLnZhbHVlID09PSB2YWx1ZSk7XG5cdFx0XHRpZiAoIW51bGxPclVuZGVmaW5lZE9wdGlvbikge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zOiBbXSxcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5tdWx0aXBsZSgpID8gW10gOiAnJyxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUoKSkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMob3B0aW9uPy52YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gb3B0aW9uPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWUgYXMgc3RyaW5nW10sXG5cdFx0XHR9KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUgPT09IHZhbHVlKTtcblx0XHRcdGlmICghc2VsZWN0ZWRPcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zOiBbc2VsZWN0ZWRPcHRpb24gYXMgQ2RrT3B0aW9uIHwgbnVsbF0sXG5cdFx0XHRcdHZhbHVlOiBzZWxlY3RlZE9wdGlvbi52YWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
@@ -161,6 +161,15 @@ class BrnSelectService {
161
161
  selectedOptions: this.selectedOptions(),
162
162
  }));
163
163
  }
164
+ /**
165
+ * Sync the updated options with "possibleOptions" in the select service
166
+ */
167
+ updatePossibleOptions(options) {
168
+ this.state.update((state) => ({
169
+ ...state,
170
+ possibleOptions: options,
171
+ }));
172
+ }
164
173
  selectOptionByValue(value) {
165
174
  const options = this.possibleOptions();
166
175
  if (value === null || value === undefined) {
@@ -752,7 +761,7 @@ class BrnSelectComponent {
752
761
  if (index > 0) {
753
762
  this.handleInvalidOptions(options);
754
763
  }
755
- this.updatePossibleOptions(options);
764
+ this._selectService.updatePossibleOptions(options);
756
765
  });
757
766
  }
758
767
  /**
@@ -763,41 +772,26 @@ class BrnSelectComponent {
763
772
  const availableOptionSet = new Set(options);
764
773
  if (this._selectService.multiple()) {
765
774
  const filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));
766
- // only update if there was an actual change
767
775
  if (selectedOptions.length !== filteredOptions.length) {
768
- // update should result in a value change since we are deselecting a value
769
- this._shouldEmitValueChange.set(true);
770
776
  const value = filteredOptions.map((o) => o?.value ?? '');
771
777
  this._selectService.state.update((state) => ({
772
778
  ...state,
773
779
  selectedOptions: filteredOptions,
774
780
  value: value,
775
781
  }));
776
- this._onChange((value ?? null));
777
782
  }
778
783
  }
779
784
  else {
780
785
  const selectedOption = selectedOptions[0] ?? null;
781
786
  if (selectedOption !== null && !availableOptionSet.has(selectedOption)) {
782
- this._shouldEmitValueChange.set(true);
783
787
  this._selectService.state.update((state) => ({
784
788
  ...state,
785
789
  selectedOptions: [],
786
790
  value: '',
787
791
  }));
788
- this._onChange('');
789
792
  }
790
793
  }
791
794
  }
792
- /**
793
- * Sync the updated options with "possibleOptions" in the select service
794
- */
795
- updatePossibleOptions(options) {
796
- this._selectService.state.update((state) => ({
797
- ...state,
798
- possibleOptions: options,
799
- }));
800
- }
801
795
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
802
796
  /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: BrnSelectComponent, isStandalone: true, selector: "brn-select, hlm-select", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, providers: [
803
797
  BrnSelectService,
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-select.mjs","sources":["../../../../libs/brain/select/src/lib/brn-select.service.ts","../../../../libs/brain/select/src/lib/brn-select-option.directive.ts","../../../../libs/brain/select/src/lib/brn-select-content.component.ts","../../../../libs/brain/select/src/lib/brn-select-group.directive.ts","../../../../libs/brain/select/src/lib/brn-select-label.directive.ts","../../../../libs/brain/select/src/lib/brn-select-value.component.ts","../../../../libs/brain/select/src/lib/brn-select.component.ts","../../../../libs/brain/select/src/index.ts","../../../../libs/brain/select/src/spartan-ng-brain-select.ts"],"sourcesContent":["import type { CdkOption, ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterViewInit,\n\tDirective,\n\tElementRef,\n\tInjectable,\n\tOnDestroy,\n\tPLATFORM_ID,\n\tSignal,\n\tcomputed,\n\tinject,\n\tsignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\n@Directive({\n\tselector: '[brnSelectTrigger]',\n\tstandalone: true,\n\thost: {\n\t\trole: 'combobox',\n\t\t'[attr.id]': 'selectTriggerId()',\n\t\t'[disabled]': 'selectDisable()',\n\t\t'[attr.aria-expanded]': 'isExpanded()',\n\t\t'[attr.aria-controls]': \"selectContentId() + ''\",\n\t\t'[attr.aria-labelledBy]': 'selectTriggerLabelledBy()',\n\t\t'aria-autocomplete': 'none',\n\t\t'[attr.dir]': '_selectService.dir()',\n\t\t'[class.ng-invalid]': 'this._ngControl?.invalid || null',\n\t\t'[class.ng-dirty]': 'this._ngControl?.dirty || null',\n\t\t'[class.ng-valid]': 'this._ngControl?.valid || null',\n\t\t'[class.ng-touched]': 'this._ngControl?.touched || null',\n\t\t'[class.ng-untouched]': 'this._ngControl?.untouched || null',\n\t\t'[class.ng-pristine]': 'this._ngControl?.pristine || null',\n\t\ttype: 'button',\n\t},\n})\nexport class BrnSelectTriggerDirective implements AfterViewInit, OnDestroy {\n\tprivate readonly _el = inject(ElementRef);\n\tprotected readonly _selectService = inject(BrnSelectService);\n\tprotected readonly _ngControl = inject(NgControl, { optional: true });\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tpublic readonly isExpanded = this._selectService.isExpanded;\n\tpublic readonly selectTriggerId = computed(() => `${this._selectService.id()}--trigger`);\n\tpublic readonly selectContentId = computed(() => `${this._selectService.id()}--content`);\n\tpublic readonly selectDisable = computed(() => this._selectService.disabled());\n\tpublic readonly selectTriggerLabelledBy = computed(() => {\n\t\tif (this._selectService.value() && this._selectService.value().length > 0) {\n\t\t\treturn `${this._selectService.labelId()} ${this._selectService.id()}--value`;\n\t\t}\n\t\treturn this._selectService.labelId();\n\t});\n\n\tprivate _resizeObserver?: ResizeObserver;\n\n\tconstructor() {\n\t\tif (!this._selectService) return;\n\t\tthis._selectService._setSelectTrigger(this);\n\t}\n\n\tngAfterViewInit() {\n\t\tthis._selectService.setTriggerWidth(this._el.nativeElement.offsetWidth);\n\n\t\t// if we are on the client, listen for element resize events\n\t\tif (isPlatformBrowser(this._platform)) {\n\t\t\tthis._resizeObserver = new ResizeObserver(() =>\n\t\t\t\tthis._selectService.setTriggerWidth(this._el.nativeElement.offsetWidth),\n\t\t\t);\n\n\t\t\tthis._resizeObserver.observe(this._el.nativeElement);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._resizeObserver?.disconnect();\n\t}\n\n\tpublic focus() {\n\t\tthis._el.nativeElement.focus();\n\t}\n}\n\ntype BrnReadDirection = 'ltr' | 'rtl';\n\n@Injectable()\nexport class BrnSelectService {\n\tpublic readonly state = signal<{\n\t\tid: string;\n\t\tlabelId: string;\n\t\tpanelId: string;\n\t\tplaceholder: Signal<string>;\n\t\tisExpanded: boolean;\n\t\tmultiple: Signal<boolean>;\n\t\tdisabled: Signal<boolean>;\n\t\tdisabledBySetDisabled: Signal<boolean>;\n\t\tdir: Signal<BrnReadDirection>;\n\t\tselectedOptions: Array<CdkOption | null>;\n\t\tpossibleOptions: Array<CdkOption | null>;\n\t\tvalue: string | string[];\n\t\ttriggerWidth: number;\n\t}>({\n\t\tid: '',\n\t\tlabelId: '',\n\t\tpanelId: '',\n\t\tisExpanded: false,\n\t\tplaceholder: signal(''),\n\t\tmultiple: signal(false),\n\t\tdisabled: signal(false),\n\t\tdisabledBySetDisabled: signal(false),\n\t\tdir: signal('ltr' as BrnReadDirection),\n\t\tselectedOptions: [],\n\t\tpossibleOptions: [],\n\t\tvalue: '',\n\t\ttriggerWidth: 0,\n\t});\n\n\tpublic readonly id = computed(() => this.state().id);\n\tpublic readonly labelId = computed(() => this.state().labelId);\n\tpublic readonly panelId = computed(() => this.state().panelId);\n\tpublic readonly placeholder = computed(() => this.state().placeholder());\n\tpublic readonly disabled = computed(() => this.state().disabled() || this.state().disabledBySetDisabled());\n\tpublic readonly isExpanded = computed(() => this.state().isExpanded);\n\tpublic readonly multiple = computed(() => this.state().multiple());\n\tpublic readonly dir = computed(() => this.state().dir());\n\tpublic readonly selectedOptions = computed(() => this.state().selectedOptions);\n\tpublic readonly value = computed(() => this.state().value);\n\tpublic readonly triggerWidth = computed(() => this.state().triggerWidth);\n\tpublic readonly possibleOptions = computed(() => this.state().possibleOptions);\n\n\tprivate readonly _multiple$ = toObservable(this.multiple);\n\n\tpublic readonly listBoxValueChangeEvent$ = new Subject<ListboxValueChangeEvent<unknown>>();\n\n\tprivate _selectTrigger?: BrnSelectTriggerDirective;\n\tpublic get selectTrigger() {\n\t\treturn this._selectTrigger;\n\t}\n\n\tconstructor() {\n\t\tthis.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe((listBoxChange) => {\n\t\t\tconst updatedSelections = this.multiple() ? this.getUpdatedOptions(listBoxChange) : [listBoxChange.option];\n\t\t\tconst value = this.multiple() ? listBoxChange.value : listBoxChange.value[0];\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions: [...updatedSelections],\n\t\t\t\tvalue: value as string | string[],\n\t\t\t}));\n\t\t});\n\n\t\t// We need to skip the first value because we don't want to deselect all options when the component is initialized with a preselected value e.g. by the form control\n\t\tthis._multiple$.pipe(skip(1), takeUntilDestroyed()).subscribe((multiple) => {\n\t\t\tif (!multiple && this.value().length > 1) {\n\t\t\t\tthis.deselectAllOptions();\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic setTriggerWidth(triggerWidth: number) {\n\t\tthis.state.update((s) => ({ ...s, triggerWidth }));\n\t}\n\n\tpublic getUpdatedOptions(latestListboxChange: ListboxValueChangeEvent<unknown>): Array<CdkOption | null> {\n\t\tconst isNewSelection = latestListboxChange.value.findIndex((value) => value === latestListboxChange.option?.value);\n\t\tif (isNewSelection === -1) {\n\t\t\tconst removedOptionIndex = this.selectedOptions().findIndex((option) => latestListboxChange.option === option);\n\t\t\tconst options = this.selectedOptions();\n\t\t\toptions.splice(removedOptionIndex, 1);\n\t\t\treturn options;\n\t\t}\n\t\treturn [...this.selectedOptions(), latestListboxChange.option];\n\t}\n\n\tpublic deselectAllOptions() {\n\t\tthis.state.update((state) => ({\n\t\t\t...state,\n\t\t\tselectedOptions: [],\n\t\t\tvalue: [],\n\t\t}));\n\t}\n\n\t// Needed due to https://github.com/angular/angular/issues/20810\n\tpublic _setSelectTrigger(trigger: BrnSelectTriggerDirective) {\n\t\tthis._selectTrigger = trigger;\n\t}\n\n\tpublic setInitialSelectedOptions(value: unknown) {\n\t\tthis.selectOptionByValue(value);\n\t\tthis.state.update((state) => ({\n\t\t\t...state,\n\t\t\tvalue: value as string | string[],\n\t\t\tinitialSelectedOptions: this.selectedOptions(),\n\t\t\tselectedOptions: this.selectedOptions(),\n\t\t}));\n\t}\n\n\tprivate selectOptionByValue(value: unknown) {\n\t\tconst options = this.possibleOptions();\n\t\tif (value === null || value === undefined) {\n\t\t\tconst nullOrUndefinedOption = options.find((o) => o && o.value === value);\n\t\t\tif (!nullOrUndefinedOption) {\n\t\t\t\tthis.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: [],\n\t\t\t\t\tvalue: this.multiple() ? [] : '',\n\t\t\t\t}));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tconst selectedOptions = options.filter((option) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn value.includes(option?.value as string);\n\t\t\t\t}\n\t\t\t\treturn value === option?.value;\n\t\t\t});\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions,\n\t\t\t\tvalue: value as string[],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst selectedOption = options.find((option) => option?.value === value);\n\t\t\tif (!selectedOption) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions: [selectedOption as CdkOption | null],\n\t\t\t\tvalue: selectedOption.value as string,\n\t\t\t}));\n\t\t}\n\t}\n}\n","import type { FocusableOption } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkOption } from '@angular/cdk/listbox';\nimport {\n\tAfterContentChecked,\n\tDirective,\n\tElementRef,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n} from '@angular/core';\nimport { BrnSelectService } from './brn-select.service';\n\n@Directive({\n\tselector: '[brnOption]',\n\tstandalone: true,\n\thostDirectives: [CdkOption],\n\thost: {\n\t\t'(mouseenter)': 'hover()',\n\t\t'(blur)': 'blur()',\n\t\t'[attr.dir]': '_selectService.dir()',\n\t\t'[attr.data-disabled]': \"disabledSignal() ? '' : undefined\",\n\t},\n})\nexport class BrnSelectOptionDirective implements FocusableOption, AfterContentChecked {\n\tprivate readonly _cdkSelectOption = inject(CdkOption, { host: true });\n\tprotected readonly _selectService = inject(BrnSelectService);\n\n\tprivate readonly _focused = signal<boolean>(false);\n\tpublic readonly elementRef = inject(ElementRef);\n\n\tpublic readonly selected = computed(() => {\n\t\tif (Array.isArray(this._selectService.value())) {\n\t\t\tconst itemFound = (this._selectService.value() as Array<unknown>).find(\n\t\t\t\t(val) => val === this._cdkSelectOption.value,\n\t\t\t);\n\t\t\treturn !!itemFound;\n\t\t}\n\t\treturn this._cdkSelectOption.value === this._selectService.value();\n\t});\n\tpublic readonly focused = computed(() => this._focused());\n\tpublic readonly checkedState = computed(() => (this.selected() ? 'checked' : 'unchecked'));\n\tpublic readonly dir = computed(() => this._selectService.dir());\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._cdkSelectOption.value = this.value();\n\t\t});\n\t\teffect(() => {\n\t\t\tthis._cdkSelectOption.disabled = this.disabledSignal();\n\t\t});\n\t}\n\tngAfterContentChecked(): void {\n\t\tthis._cdkSelectOption.value = this.value();\n\t}\n\n\tpublic value = input<unknown | null>(null);\n\n\t// we use \"disabledSignal\" here because disabled is already defined in the FocusableOption interface\n\tpublic readonly disabledSignal = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\tprotected hover(): void {\n\t\tthis.focus();\n\t}\n\n\tpublic focus(): void {\n\t\tthis._cdkSelectOption.focus();\n\t\tthis._focused.set(true);\n\t}\n\n\tpublic blur(): void {\n\t\tthis._focused.set(false);\n\t}\n}\n","import { CdkListbox, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\ttype AfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tElementRef,\n\tcontentChild,\n\tcontentChildren,\n\teffect,\n\tinject,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BrnSelectOptionDirective } from './brn-select-option.directive';\nimport { BrnSelectService } from './brn-select.service';\n\nimport { Directive } from '@angular/core';\nimport { Subject, fromEvent, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nconst SCROLLBY_PIXELS = 100;\n\n@Directive({\n\tselector: '[brnSelectScrollUp], brn-select-scroll-up, hlm-select-scroll-up:not(noHlm)',\n\tstandalone: true,\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'(mouseenter)': 'startEmittingEvents()',\n\t},\n})\nexport class BrnSelectScrollUpDirective {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _selectContent = inject(BrnSelectContentComponent);\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tpublic startEmittingEvents(): void {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\tinterval(100)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.moveFocusUp());\n\t}\n\n\tpublic stopEmittingEvents(): void {\n\t\tthis._endReached.next(true);\n\t}\n}\n\n@Directive({\n\tselector: '[brnSelectScrollDown], brn-select-scroll-down, hlm-select-scroll-down:not(noHlm)',\n\tstandalone: true,\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'(mouseenter)': 'startEmittingEvents()',\n\t},\n})\nexport class BrnSelectScrollDownDirective {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _selectContent = inject(BrnSelectContentComponent);\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tpublic startEmittingEvents(): void {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\tinterval(100)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.moveFocusDown());\n\t}\n\n\tpublic stopEmittingEvents(): void {\n\t\tthis._endReached.next(true);\n\t}\n}\n\n@Component({\n\tselector: 'brn-select-content, hlm-select-content:not(noHlm)',\n\tstandalone: true,\n\timports: [BrnSelectScrollUpDirective, BrnSelectScrollDownDirective, NgTemplateOutlet],\n\thostDirectives: [CdkListbox],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[attr.aria-labelledBy]': 'labelledBy()',\n\t\t'[attr.aria-controlledBy]': \"id() +'--trigger'\",\n\t\t'[id]': \"id() + '--content'\",\n\t\t'[attr.dir]': '_selectService.dir()',\n\t},\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: flex;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tflex-direction: column;\n\t\t\t\toutline: none;\n\t\t\t\tpointer-events: auto;\n\t\t\t}\n\n\t\t\t[data-brn-select-viewport] {\n\t\t\t\tscrollbar-width: none;\n\t\t\t\t-ms-overflow-style: none;\n\t\t\t\t-webkit-overflow-scrolling: touch;\n\t\t\t}\n\n\t\t\t[data-brn-select-viewport]::-webkit-scrollbar {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t`,\n\t],\n\ttemplate: `\n\t\t<ng-template #scrollUp>\n\t\t\t<ng-content select=\"hlm-select-scroll-up\" />\n\t\t\t<ng-content select=\"brnSelectScrollUp\" />\n\t\t</ng-template>\n\t\t<ng-container *ngTemplateOutlet=\"canScrollUp() && scrollUpBtn() ? scrollUp : null\" />\n\t\t<div\n\t\t\tdata-brn-select-viewport\n\t\t\t#viewport\n\t\t\t(scroll)=\"handleScroll()\"\n\t\t\tstyle=\"flex: 1 1 0%;\n\t\t\tposition: relative;\n\t\t\twidth:100%;\n\t\t\toverflow:auto;\n\t\t\tmin-height: 36px;\n padding-bottom: 2px;\n margin-bottom: -2px;\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-template #scrollDown>\n\t\t\t<ng-content select=\"brnSelectScrollDown\" />\n\t\t\t<ng-content select=\"hlm-select-scroll-down\" />\n\t\t</ng-template>\n\t\t<ng-container *ngTemplateOutlet=\"canScrollDown() && scrollDownBtn() ? scrollDown : null\" />\n\t`,\n})\nexport class BrnSelectContentComponent implements AfterViewInit {\n\tprivate readonly _el: ElementRef<HTMLElement> = inject(ElementRef);\n\tprivate readonly _cdkListbox = inject(CdkListbox, { host: true });\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprotected readonly _selectService = inject(BrnSelectService);\n\n\tprotected readonly labelledBy = this._selectService.labelId;\n\tprotected readonly id = this._selectService.id;\n\tprotected readonly canScrollUp = signal(false);\n\tprotected readonly canScrollDown = signal(false);\n\n\tprotected initialSelectedOptions$ = toObservable(this._selectService.selectedOptions);\n\n\tprotected viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n\n\tprotected scrollUpBtn = contentChild(BrnSelectScrollUpDirective);\n\n\tprotected scrollDownBtn = contentChild(BrnSelectScrollDownDirective);\n\n\tprotected _options = contentChildren(BrnSelectOptionDirective, { descendants: true });\n\n\tconstructor() {\n\t\tthis._cdkListbox.valueChange\n\t\t\t.asObservable()\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((val: ListboxValueChangeEvent<unknown>) => this._selectService.listBoxValueChangeEvent$.next(val));\n\n\t\teffect(() => {\n\t\t\tthis._cdkListbox.multiple = this._selectService.multiple();\n\t\t\tthis._selectService.isExpanded() && setTimeout(() => this.updateArrowDisplay());\n\t\t});\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.setInitiallySelectedOptions();\n\t}\n\n\tprivate setInitiallySelectedOptions() {\n\t\tthis.initialSelectedOptions$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((selectedOptions) => {\n\t\t\t// Reapplying cdkLibstbox multiple because seems this is running before effect that\n\t\t\t// updates cdklistbox, reapplying multiple true so we can set the multiple initial options\n\t\t\tif (this._selectService.multiple()) {\n\t\t\t\tthis._cdkListbox.multiple = true;\n\t\t\t}\n\n\t\t\tfor (const cdkOption of this._selectService.possibleOptions()) {\n\t\t\t\tif (selectedOptions.includes(cdkOption)) {\n\t\t\t\t\tcdkOption?.select();\n\t\t\t\t} else {\n\t\t\t\t\tcdkOption?.deselect();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const cdkOption of selectedOptions) {\n\t\t\t\tcdkOption?.select();\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic updateArrowDisplay(): void {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this.viewport().nativeElement;\n\t\tthis.canScrollUp.set(scrollTop > 0);\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\t\tthis.canScrollDown.set(Math.ceil(scrollTop) < maxScroll);\n\t}\n\n\tpublic handleScroll() {\n\t\tthis.updateArrowDisplay();\n\t}\n\n\tpublic focusList(): void {\n\t\tthis._cdkListbox.focus();\n\t}\n\n\tpublic moveFocusUp() {\n\t\tthis.viewport().nativeElement.scrollBy({ top: -SCROLLBY_PIXELS, behavior: 'smooth' });\n\t\tif (this.viewport().nativeElement.scrollTop === 0) {\n\t\t\tthis.scrollUpBtn()?.stopEmittingEvents();\n\t\t}\n\t}\n\n\tpublic moveFocusDown() {\n\t\tthis.viewport().nativeElement.scrollBy({ top: SCROLLBY_PIXELS, behavior: 'smooth' });\n\t\tconst viewportSize = this._el.nativeElement.scrollHeight;\n\t\tconst viewportScrollPosition = this.viewport().nativeElement.scrollTop;\n\t\tif (\n\t\t\tviewportSize + viewportScrollPosition + SCROLLBY_PIXELS >\n\t\t\tthis.viewport().nativeElement.scrollHeight + SCROLLBY_PIXELS / 2\n\t\t) {\n\t\t\tthis.scrollDownBtn()?.stopEmittingEvents();\n\t\t}\n\t}\n}\n","import { Directive, signal } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectGroup]',\n\tstandalone: true,\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.aria-labelledby]': 'labelledBy()',\n\t},\n})\nexport class BrnSelectGroupDirective {\n\tpublic readonly labelledBy = signal('');\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnLabelDirective } from '@spartan-ng/brain/label';\nimport { BrnSelectGroupDirective } from './brn-select-group.directive';\n\n@Directive({\n\tselector: '[brnSelectLabel]',\n\thostDirectives: [BrnLabelDirective],\n\tstandalone: true,\n})\nexport class BrnSelectLabelDirective {\n\tprivate readonly _group = inject(BrnSelectGroupDirective, { optional: true });\n\tprivate readonly _label = inject(BrnLabelDirective, { host: true });\n\n\tconstructor() {\n\t\tthis._group?.labelledBy.set(this._label.id());\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BrnSelectService } from './brn-select.service';\n\n@Component({\n\tselector: 'brn-select-value, hlm-select-value',\n\ttemplate: `\n\t\t{{ value || placeholder() }}\n\t`,\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t\t-webkit-line-clamp: 1;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t`,\n\t],\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BrnSelectValueComponent {\n\tprivate readonly _selectService = inject(BrnSelectService);\n\n\tpublic readonly id = computed(() => `${this._selectService.id()}--value`);\n\tpublic readonly placeholder = computed(() => this._selectService.placeholder());\n\tpublic value: string | null = null;\n\n\tpublic readonly transformFn = input<(values: (string | undefined)[]) => any>((values) => (values ?? []).join(', '));\n\n\tconstructor() {\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\t// In certain cases (when using a computed signal for value) where the value of the select and the options are\n\t\t// changed dynamically, the template does not update until the next frame. To work around this we can use a simple\n\t\t// string variable in the template and manually trigger change detection when we update it.\n\t\ttoObservable(this._selectService.selectedOptions)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (value.length === 0) {\n\t\t\t\t\tthis.value = null;\n\t\t\t\t\tcdr.detectChanges();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedLabels = value.map((selectedOption) => selectedOption?.getLabel());\n\n\t\t\t\tif (this._selectService.dir() === 'rtl') {\n\t\t\t\t\tselectedLabels.reverse();\n\t\t\t\t}\n\t\t\t\tconst result = this.transformFn()(selectedLabels);\n\t\t\t\tthis.value = result;\n\t\t\t\tcdr.detectChanges();\n\t\t\t});\n\t}\n}\n","import { CdkListbox, CdkListboxModule, CdkOption } from '@angular/cdk/listbox';\nimport {\n\tCdkConnectedOverlay,\n\ttype ConnectedOverlayPositionChange,\n\ttype ConnectedPosition,\n\tOverlayModule,\n} from '@angular/cdk/overlay';\nimport {\n\tAfterContentInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype DoCheck,\n\ttype Signal,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport {\n\ttype ExposesSide,\n\ttype ExposesState,\n\tprovideExposedSideProviderExisting,\n\tprovideExposesStateProviderExisting,\n} from '@spartan-ng/brain/core';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ChangeFn, ErrorStateMatcher, ErrorStateTracker, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnLabelDirective } from '@spartan-ng/brain/label';\nimport { Subject, combineLatest, of } from 'rxjs';\nimport { delay, map, switchMap } from 'rxjs/operators';\nimport { BrnSelectContentComponent } from './brn-select-content.component';\nimport { BrnSelectService } from './brn-select.service';\n\nexport type BrnReadDirection = 'ltr' | 'rtl';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'brn-select, hlm-select',\n\tstandalone: true,\n\timports: [OverlayModule, CdkListboxModule],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\tBrnSelectService,\n\t\tCdkListbox,\n\t\tprovideExposedSideProviderExisting(() => BrnSelectComponent),\n\t\tprovideExposesStateProviderExisting(() => BrnSelectComponent),\n\t\t{\n\t\t\tprovide: BrnFormFieldControl,\n\t\t\tuseExisting: BrnSelectComponent,\n\t\t},\n\t],\n\ttemplate: `\n\t\t@if (!labelProvided() && placeholder()) {\n\t\t\t<label class=\"hidden\" [attr.id]=\"backupLabelId()\">{{ placeholder() }}</label>\n\t\t} @else {\n\t\t\t<ng-content select=\"label[hlmLabel],label[brnLabel]\" />\n\t\t}\n\n\t\t<div cdk-overlay-origin (click)=\"toggle()\" #trigger=\"cdkOverlayOrigin\">\n\t\t\t<ng-content select=\"hlm-select-trigger,[brnSelectTrigger]\" />\n\t\t</div>\n\t\t<ng-template\n\t\t\tcdk-connected-overlay\n\t\t\tcdkConnectedOverlayLockPosition\n\t\t\tcdkConnectedOverlayHasBackdrop\n\t\t\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t\t\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t\t\t[cdkConnectedOverlayOpen]=\"_delayedExpanded()\"\n\t\t\t[cdkConnectedOverlayPositions]=\"_positions\"\n\t\t\t[cdkConnectedOverlayWidth]=\"triggerWidth() > 0 ? triggerWidth() : 'auto'\"\n\t\t\t(backdropClick)=\"close()\"\n\t\t\t(detach)=\"close()\"\n\t\t\t(positionChange)=\"_positionChanges$.next($event)\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ng-template>\n\t`,\n})\nexport class BrnSelectComponent<T = unknown>\n\timplements ControlValueAccessor, AfterContentInit, DoCheck, ExposesSide, ExposesState, BrnFormFieldControl\n{\n\tprivate readonly _selectService = inject(BrnSelectService);\n\n\tpublic readonly triggerWidth = this._selectService.triggerWidth;\n\n\tpublic readonly multiple = input<boolean>(false);\n\tpublic readonly placeholder = input<string>('');\n\tpublic readonly disabled = input<boolean>(false);\n\tpublic readonly dir = input<BrnReadDirection>('ltr');\n\tprivate readonly _disabledFromSetDisabledState = signal(false);\n\n\tprotected selectLabel = contentChild(BrnLabelDirective, { descendants: false });\n\t/** Overlay pane containing the options. */\n\tprotected selectContent = contentChild.required(BrnSelectContentComponent);\n\n\tprotected options = contentChildren(CdkOption, { descendants: true });\n\tprotected options$ = toObservable(this.options);\n\tprotected optionsAndIndex$ = this.options$.pipe(map((options, index) => [options, index] as const));\n\n\t/** Overlay pane containing the options. */\n\tprotected _overlayDir = viewChild(CdkConnectedOverlay);\n\n\tpublic readonly openedChange = output<boolean>();\n\n\tpublic readonly closeDelay = input<number>(100);\n\tpublic readonly isExpanded = this._selectService.isExpanded;\n\tprotected readonly _delayedExpanded = toSignal(\n\t\ttoObservable(this.isExpanded).pipe(\n\t\t\tswitchMap((expanded) => (!expanded ? of(expanded).pipe(delay(this.closeDelay())) : of(expanded))),\n\t\t\ttakeUntilDestroyed(),\n\t\t),\n\t\t{ initialValue: false },\n\t);\n\tpublic readonly state = computed(() => (this.isExpanded() ? 'open' : 'closed'));\n\n\tprotected readonly _positionChanges$ = new Subject<ConnectedOverlayPositionChange>();\n\tpublic readonly side: Signal<'top' | 'bottom' | 'left' | 'right'> = toSignal(\n\t\tthis._positionChanges$.pipe(\n\t\t\tmap<ConnectedOverlayPositionChange, 'top' | 'bottom' | 'left' | 'right'>((change) =>\n\t\t\t\t// todo: better translation or adjusting hlm to take that into account\n\t\t\t\tchange.connectionPair.originY === 'center'\n\t\t\t\t\t? change.connectionPair.originX === 'start'\n\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t: 'right'\n\t\t\t\t\t: change.connectionPair.originY,\n\t\t\t),\n\t\t),\n\t\t{ initialValue: 'bottom' },\n\t);\n\n\tpublic readonly backupLabelId = computed(() => this._selectService.labelId());\n\tpublic readonly labelProvided = signal(false);\n\n\tpublic readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onChange: ChangeFn<T> = () => {};\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouched: TouchFn = () => {};\n\n\tprivate readonly _shouldEmitValueChange = signal(false);\n\n\t/*\n\t * This position config ensures that the top \"start\" corner of the overlay\n\t * is aligned with with the top \"start\" of the origin by default (overlapping\n\t * the trigger completely). If the panel cannot fit below the trigger, it\n\t * will fall back to a position above the trigger.\n\t */\n\tprotected _positions: ConnectedPosition[] = [\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'bottom',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'top',\n\t\t},\n\t\t{\n\t\t\toriginX: 'end',\n\t\t\toriginY: 'bottom',\n\t\t\toverlayX: 'end',\n\t\t\toverlayY: 'top',\n\t\t},\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'top',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'bottom',\n\t\t},\n\t\t{\n\t\t\toriginX: 'end',\n\t\t\toriginY: 'top',\n\t\t\toverlayX: 'end',\n\t\t\toverlayY: 'bottom',\n\t\t},\n\t];\n\n\tpublic errorStateTracker: ErrorStateTracker;\n\n\tprivate readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n\tprivate readonly _parentForm = inject(NgForm, { optional: true });\n\tprivate readonly _parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n\tpublic errorState = computed(() => this.errorStateTracker.errorState());\n\n\tpublic writeValue$ = new Subject<T>();\n\n\tconstructor() {\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tmultiple: this.multiple,\n\t\t\tplaceholder: this.placeholder,\n\t\t\tdisabled: this.disabled,\n\t\t\tdisabledBySetDisabled: this._disabledFromSetDisabledState,\n\t\t\tdir: this.dir,\n\t\t}));\n\t\tthis.handleOptionChanges();\n\t\tthis.handleInitialOptionSelect();\n\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tid: `brn-select-${nextId++}`,\n\t\t}));\n\t\tif (this.ngControl !== null) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\n\t\t// Watch for Listbox Selection Changes to trigger Collapse and Value Change\n\t\tthis._selectService.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe(() => {\n\t\t\tif (!this.multiple()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\t// we set shouldEmitValueChange to true because we want to propagate the value change\n\t\t\t// as a result of user interaction\n\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t});\n\n\t\t/**\n\t\t * Listening to value changes in order to trigger forms api on change\n\t\t * ShouldEmitValueChange simply ensures we only propagate value change when a user makes a selection\n\t\t * we don't propagate changes made from outside the component (ex. patch value or initial value from form control)\n\t\t */\n\t\ttoObservable(this._selectService.value).subscribe((value) => {\n\t\t\tif (this._shouldEmitValueChange()) {\n\t\t\t\tthis._onChange((value ?? null) as T);\n\t\t\t}\n\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t});\n\n\t\tthis.errorStateTracker = new ErrorStateTracker(\n\t\t\tthis._defaultErrorStateMatcher,\n\t\t\tthis.ngControl,\n\t\t\tthis._parentFormGroup,\n\t\t\tthis._parentForm,\n\t\t);\n\t}\n\n\tpublic ngAfterContentInit(): void {\n\t\t// Check if Label Directive Provided and pass to service\n\t\tconst label = this.selectLabel();\n\t\tif (label) {\n\t\t\tthis.labelProvided.set(true);\n\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlabelId: label.id(),\n\t\t\t}));\n\t\t} else if (this.placeholder()) {\n\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlabelId: `${state.id}--label`,\n\t\t\t}));\n\t\t}\n\t}\n\n\tngDoCheck() {\n\t\tthis.errorStateTracker.updateErrorState();\n\t}\n\n\tpublic toggle(): void {\n\t\tif (this.isExpanded()) {\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\tpublic open(): void {\n\t\tif (!this._canOpen()) return;\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tisExpanded: true,\n\t\t}));\n\t\tthis.openedChange.emit(true);\n\t\tthis._moveFocusToCDKList();\n\t}\n\n\tpublic close(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tif (this._selectService.selectTrigger) {\n\t\t\tthis._selectService.selectTrigger.focus();\n\t\t}\n\n\t\tthis.openedChange.emit(false);\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tisExpanded: false,\n\t\t}));\n\t\tthis._onTouched();\n\t}\n\n\tprotected _canOpen(): boolean {\n\t\treturn !this.isExpanded() && !this.disabled() && this.options()?.length > 0;\n\t}\n\n\tprivate _moveFocusToCDKList(): void {\n\t\tsetTimeout(() => {\n\t\t\tthis.selectContent()?.focusList();\n\t\t});\n\t}\n\n\tpublic writeValue(value: T): void {\n\t\tthis.writeValue$.next(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean) {\n\t\tthis._disabledFromSetDisabledState.set(isDisabled);\n\t}\n\n\t/**\n\t * Once writeValue is called and options are available we can handle setting the initial options\n\t * @private\n\t */\n\tprivate handleInitialOptionSelect() {\n\t\t// Write value cannot be handled until options are available, so we wait until both are available with a combineLatest\n\t\tcombineLatest([this.writeValue$, this.options$])\n\t\t\t.pipe(\n\t\t\t\tmap((values, index) => [...values, index]),\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t)\n\t\t\t.subscribe(([value, _, index]) => {\n\t\t\t\tthis._shouldEmitValueChange.set(false);\n\t\t\t\tthis._selectService.setInitialSelectedOptions(value);\n\t\t\t\t// the first time this observable emits a value we are simply setting the initial state\n\t\t\t\t// this change should not count as changing the state of the select, so we need to mark as pristine\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tthis.ngControl?.control?.markAsPristine();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * When options change, our current selected options may become invalid\n\t * Here we will automatically update our current selected options so that they are always inline with the possibleOptions\n\t * @private\n\t */\n\tprivate handleOptionChanges() {\n\t\tthis.optionsAndIndex$.pipe(takeUntilDestroyed()).subscribe(([options, index]) => {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.handleInvalidOptions(options);\n\t\t\t}\n\t\t\tthis.updatePossibleOptions(options);\n\t\t});\n\t}\n\n\t/**\n\t * Check that our \"selectedOptions\" are still valid when \"possibleOptions\" is about to be updated\n\t */\n\tprivate handleInvalidOptions(options: readonly CdkOption[]) {\n\t\tconst selectedOptions = this._selectService.selectedOptions();\n\t\tconst availableOptionSet = new Set<CdkOption | null>(options);\n\t\tif (this._selectService.multiple()) {\n\t\t\tconst filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));\n\t\t\t// only update if there was an actual change\n\t\t\tif (selectedOptions.length !== filteredOptions.length) {\n\t\t\t\t// update should result in a value change since we are deselecting a value\n\t\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t\t\tconst value = filteredOptions.map((o) => (o?.value as string) ?? '');\n\t\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: filteredOptions,\n\t\t\t\t\tvalue: value,\n\t\t\t\t}));\n\t\t\t\tthis._onChange((value ?? null) as T);\n\t\t\t}\n\t\t} else {\n\t\t\tconst selectedOption = selectedOptions[0] ?? null;\n\t\t\tif (selectedOption !== null && !availableOptionSet.has(selectedOption)) {\n\t\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: [],\n\t\t\t\t\tvalue: '',\n\t\t\t\t}));\n\t\t\t\tthis._onChange('' as T);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sync the updated options with \"possibleOptions\" in the select service\n\t */\n\tprivate updatePossibleOptions(options: readonly CdkOption[]) {\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tpossibleOptions: options as CdkOption[],\n\t\t}));\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport {\n\tBrnSelectContentComponent,\n\tBrnSelectScrollDownDirective,\n\tBrnSelectScrollUpDirective,\n} from './lib/brn-select-content.component';\nimport { BrnSelectGroupDirective } from './lib/brn-select-group.directive';\nimport { BrnSelectLabelDirective } from './lib/brn-select-label.directive';\nimport { BrnSelectOptionDirective } from './lib/brn-select-option.directive';\nimport { BrnSelectValueComponent } from './lib/brn-select-value.component';\nimport { BrnSelectComponent } from './lib/brn-select.component';\nimport { BrnSelectTriggerDirective } from './lib/brn-select.service';\nexport * from './lib/brn-select-content.component';\nexport * from './lib/brn-select-group.directive';\nexport * from './lib/brn-select-label.directive';\nexport * from './lib/brn-select-option.directive';\nexport * from './lib/brn-select-value.component';\nexport * from './lib/brn-select.component';\nexport * from './lib/brn-select.service';\n\nexport const BrnSelectImports = [\n\tBrnSelectComponent,\n\tBrnSelectContentComponent,\n\tBrnSelectTriggerDirective,\n\tBrnSelectOptionDirective,\n\tBrnSelectValueComponent,\n\tBrnSelectScrollDownDirective,\n\tBrnSelectScrollUpDirective,\n\tBrnSelectGroupDirective,\n\tBrnSelectLabelDirective,\n] as const;\n\n@NgModule({\n\timports: [...BrnSelectImports],\n\texports: [...BrnSelectImports],\n})\nexport class BrnSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"spartan-ng-brain-select.mjs","sources":["../../../../libs/brain/select/src/lib/brn-select.service.ts","../../../../libs/brain/select/src/lib/brn-select-option.directive.ts","../../../../libs/brain/select/src/lib/brn-select-content.component.ts","../../../../libs/brain/select/src/lib/brn-select-group.directive.ts","../../../../libs/brain/select/src/lib/brn-select-label.directive.ts","../../../../libs/brain/select/src/lib/brn-select-value.component.ts","../../../../libs/brain/select/src/lib/brn-select.component.ts","../../../../libs/brain/select/src/index.ts","../../../../libs/brain/select/src/spartan-ng-brain-select.ts"],"sourcesContent":["import type { CdkOption, ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterViewInit,\n\tDirective,\n\tElementRef,\n\tInjectable,\n\tOnDestroy,\n\tPLATFORM_ID,\n\tSignal,\n\tcomputed,\n\tinject,\n\tsignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\n@Directive({\n\tselector: '[brnSelectTrigger]',\n\tstandalone: true,\n\thost: {\n\t\trole: 'combobox',\n\t\t'[attr.id]': 'selectTriggerId()',\n\t\t'[disabled]': 'selectDisable()',\n\t\t'[attr.aria-expanded]': 'isExpanded()',\n\t\t'[attr.aria-controls]': \"selectContentId() + ''\",\n\t\t'[attr.aria-labelledBy]': 'selectTriggerLabelledBy()',\n\t\t'aria-autocomplete': 'none',\n\t\t'[attr.dir]': '_selectService.dir()',\n\t\t'[class.ng-invalid]': 'this._ngControl?.invalid || null',\n\t\t'[class.ng-dirty]': 'this._ngControl?.dirty || null',\n\t\t'[class.ng-valid]': 'this._ngControl?.valid || null',\n\t\t'[class.ng-touched]': 'this._ngControl?.touched || null',\n\t\t'[class.ng-untouched]': 'this._ngControl?.untouched || null',\n\t\t'[class.ng-pristine]': 'this._ngControl?.pristine || null',\n\t\ttype: 'button',\n\t},\n})\nexport class BrnSelectTriggerDirective implements AfterViewInit, OnDestroy {\n\tprivate readonly _el = inject(ElementRef);\n\tprotected readonly _selectService = inject(BrnSelectService);\n\tprotected readonly _ngControl = inject(NgControl, { optional: true });\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tpublic readonly isExpanded = this._selectService.isExpanded;\n\tpublic readonly selectTriggerId = computed(() => `${this._selectService.id()}--trigger`);\n\tpublic readonly selectContentId = computed(() => `${this._selectService.id()}--content`);\n\tpublic readonly selectDisable = computed(() => this._selectService.disabled());\n\tpublic readonly selectTriggerLabelledBy = computed(() => {\n\t\tif (this._selectService.value() && this._selectService.value().length > 0) {\n\t\t\treturn `${this._selectService.labelId()} ${this._selectService.id()}--value`;\n\t\t}\n\t\treturn this._selectService.labelId();\n\t});\n\n\tprivate _resizeObserver?: ResizeObserver;\n\n\tconstructor() {\n\t\tif (!this._selectService) return;\n\t\tthis._selectService._setSelectTrigger(this);\n\t}\n\n\tngAfterViewInit() {\n\t\tthis._selectService.setTriggerWidth(this._el.nativeElement.offsetWidth);\n\n\t\t// if we are on the client, listen for element resize events\n\t\tif (isPlatformBrowser(this._platform)) {\n\t\t\tthis._resizeObserver = new ResizeObserver(() =>\n\t\t\t\tthis._selectService.setTriggerWidth(this._el.nativeElement.offsetWidth),\n\t\t\t);\n\n\t\t\tthis._resizeObserver.observe(this._el.nativeElement);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._resizeObserver?.disconnect();\n\t}\n\n\tpublic focus() {\n\t\tthis._el.nativeElement.focus();\n\t}\n}\n\ntype BrnReadDirection = 'ltr' | 'rtl';\n\n@Injectable()\nexport class BrnSelectService {\n\tpublic readonly state = signal<{\n\t\tid: string;\n\t\tlabelId: string;\n\t\tpanelId: string;\n\t\tplaceholder: Signal<string>;\n\t\tisExpanded: boolean;\n\t\tmultiple: Signal<boolean>;\n\t\tdisabled: Signal<boolean>;\n\t\tdisabledBySetDisabled: Signal<boolean>;\n\t\tdir: Signal<BrnReadDirection>;\n\t\tselectedOptions: Array<CdkOption | null>;\n\t\tpossibleOptions: Array<CdkOption | null>;\n\t\tvalue: string | string[];\n\t\ttriggerWidth: number;\n\t}>({\n\t\tid: '',\n\t\tlabelId: '',\n\t\tpanelId: '',\n\t\tisExpanded: false,\n\t\tplaceholder: signal(''),\n\t\tmultiple: signal(false),\n\t\tdisabled: signal(false),\n\t\tdisabledBySetDisabled: signal(false),\n\t\tdir: signal('ltr' as BrnReadDirection),\n\t\tselectedOptions: [],\n\t\tpossibleOptions: [],\n\t\tvalue: '',\n\t\ttriggerWidth: 0,\n\t});\n\n\tpublic readonly id = computed(() => this.state().id);\n\tpublic readonly labelId = computed(() => this.state().labelId);\n\tpublic readonly panelId = computed(() => this.state().panelId);\n\tpublic readonly placeholder = computed(() => this.state().placeholder());\n\tpublic readonly disabled = computed(() => this.state().disabled() || this.state().disabledBySetDisabled());\n\tpublic readonly isExpanded = computed(() => this.state().isExpanded);\n\tpublic readonly multiple = computed(() => this.state().multiple());\n\tpublic readonly dir = computed(() => this.state().dir());\n\tpublic readonly selectedOptions = computed(() => this.state().selectedOptions);\n\tpublic readonly value = computed(() => this.state().value);\n\tpublic readonly triggerWidth = computed(() => this.state().triggerWidth);\n\tpublic readonly possibleOptions = computed(() => this.state().possibleOptions);\n\n\tprivate readonly _multiple$ = toObservable(this.multiple);\n\n\tpublic readonly listBoxValueChangeEvent$ = new Subject<ListboxValueChangeEvent<unknown>>();\n\n\tprivate _selectTrigger?: BrnSelectTriggerDirective;\n\tpublic get selectTrigger() {\n\t\treturn this._selectTrigger;\n\t}\n\n\tconstructor() {\n\t\tthis.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe((listBoxChange) => {\n\t\t\tconst updatedSelections = this.multiple() ? this.getUpdatedOptions(listBoxChange) : [listBoxChange.option];\n\t\t\tconst value = this.multiple() ? listBoxChange.value : listBoxChange.value[0];\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions: [...updatedSelections],\n\t\t\t\tvalue: value as string | string[],\n\t\t\t}));\n\t\t});\n\n\t\t// We need to skip the first value because we don't want to deselect all options when the component is initialized with a preselected value e.g. by the form control\n\t\tthis._multiple$.pipe(skip(1), takeUntilDestroyed()).subscribe((multiple) => {\n\t\t\tif (!multiple && this.value().length > 1) {\n\t\t\t\tthis.deselectAllOptions();\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic setTriggerWidth(triggerWidth: number) {\n\t\tthis.state.update((s) => ({ ...s, triggerWidth }));\n\t}\n\n\tpublic getUpdatedOptions(latestListboxChange: ListboxValueChangeEvent<unknown>): Array<CdkOption | null> {\n\t\tconst isNewSelection = latestListboxChange.value.findIndex((value) => value === latestListboxChange.option?.value);\n\t\tif (isNewSelection === -1) {\n\t\t\tconst removedOptionIndex = this.selectedOptions().findIndex((option) => latestListboxChange.option === option);\n\t\t\tconst options = this.selectedOptions();\n\t\t\toptions.splice(removedOptionIndex, 1);\n\t\t\treturn options;\n\t\t}\n\t\treturn [...this.selectedOptions(), latestListboxChange.option];\n\t}\n\n\tpublic deselectAllOptions() {\n\t\tthis.state.update((state) => ({\n\t\t\t...state,\n\t\t\tselectedOptions: [],\n\t\t\tvalue: [],\n\t\t}));\n\t}\n\n\t// Needed due to https://github.com/angular/angular/issues/20810\n\tpublic _setSelectTrigger(trigger: BrnSelectTriggerDirective) {\n\t\tthis._selectTrigger = trigger;\n\t}\n\n\tpublic setInitialSelectedOptions(value: unknown) {\n\t\tthis.selectOptionByValue(value);\n\t\tthis.state.update((state) => ({\n\t\t\t...state,\n\t\t\tvalue: value as string | string[],\n\t\t\tinitialSelectedOptions: this.selectedOptions(),\n\t\t\tselectedOptions: this.selectedOptions(),\n\t\t}));\n\t}\n\n\t/**\n\t * Sync the updated options with \"possibleOptions\" in the select service\n\t */\n\tpublic updatePossibleOptions(options: readonly CdkOption[]) {\n\t\tthis.state.update((state) => ({\n\t\t\t...state,\n\t\t\tpossibleOptions: options as CdkOption[],\n\t\t}));\n\t}\n\n\tprivate selectOptionByValue(value: unknown) {\n\t\tconst options = this.possibleOptions();\n\t\tif (value === null || value === undefined) {\n\t\t\tconst nullOrUndefinedOption = options.find((o) => o && o.value === value);\n\t\t\tif (!nullOrUndefinedOption) {\n\t\t\t\tthis.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: [],\n\t\t\t\t\tvalue: this.multiple() ? [] : '',\n\t\t\t\t}));\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tconst selectedOptions = options.filter((option) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn value.includes(option?.value as string);\n\t\t\t\t}\n\t\t\t\treturn value === option?.value;\n\t\t\t});\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions,\n\t\t\t\tvalue: value as string[],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst selectedOption = options.find((option) => option?.value === value);\n\t\t\tif (!selectedOption) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tselectedOptions: [selectedOption as CdkOption | null],\n\t\t\t\tvalue: selectedOption.value as string,\n\t\t\t}));\n\t\t}\n\t}\n}\n","import type { FocusableOption } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkOption } from '@angular/cdk/listbox';\nimport {\n\tAfterContentChecked,\n\tDirective,\n\tElementRef,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n} from '@angular/core';\nimport { BrnSelectService } from './brn-select.service';\n\n@Directive({\n\tselector: '[brnOption]',\n\tstandalone: true,\n\thostDirectives: [CdkOption],\n\thost: {\n\t\t'(mouseenter)': 'hover()',\n\t\t'(blur)': 'blur()',\n\t\t'[attr.dir]': '_selectService.dir()',\n\t\t'[attr.data-disabled]': \"disabledSignal() ? '' : undefined\",\n\t},\n})\nexport class BrnSelectOptionDirective implements FocusableOption, AfterContentChecked {\n\tprivate readonly _cdkSelectOption = inject(CdkOption, { host: true });\n\tprotected readonly _selectService = inject(BrnSelectService);\n\n\tprivate readonly _focused = signal<boolean>(false);\n\tpublic readonly elementRef = inject(ElementRef);\n\n\tpublic readonly selected = computed(() => {\n\t\tif (Array.isArray(this._selectService.value())) {\n\t\t\tconst itemFound = (this._selectService.value() as Array<unknown>).find(\n\t\t\t\t(val) => val === this._cdkSelectOption.value,\n\t\t\t);\n\t\t\treturn !!itemFound;\n\t\t}\n\t\treturn this._cdkSelectOption.value === this._selectService.value();\n\t});\n\tpublic readonly focused = computed(() => this._focused());\n\tpublic readonly checkedState = computed(() => (this.selected() ? 'checked' : 'unchecked'));\n\tpublic readonly dir = computed(() => this._selectService.dir());\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._cdkSelectOption.value = this.value();\n\t\t});\n\t\teffect(() => {\n\t\t\tthis._cdkSelectOption.disabled = this.disabledSignal();\n\t\t});\n\t}\n\tngAfterContentChecked(): void {\n\t\tthis._cdkSelectOption.value = this.value();\n\t}\n\n\tpublic value = input<unknown | null>(null);\n\n\t// we use \"disabledSignal\" here because disabled is already defined in the FocusableOption interface\n\tpublic readonly disabledSignal = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\tprotected hover(): void {\n\t\tthis.focus();\n\t}\n\n\tpublic focus(): void {\n\t\tthis._cdkSelectOption.focus();\n\t\tthis._focused.set(true);\n\t}\n\n\tpublic blur(): void {\n\t\tthis._focused.set(false);\n\t}\n}\n","import { CdkListbox, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n\ttype AfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tElementRef,\n\tcontentChild,\n\tcontentChildren,\n\teffect,\n\tinject,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BrnSelectOptionDirective } from './brn-select-option.directive';\nimport { BrnSelectService } from './brn-select.service';\n\nimport { Directive } from '@angular/core';\nimport { Subject, fromEvent, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nconst SCROLLBY_PIXELS = 100;\n\n@Directive({\n\tselector: '[brnSelectScrollUp], brn-select-scroll-up, hlm-select-scroll-up:not(noHlm)',\n\tstandalone: true,\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'(mouseenter)': 'startEmittingEvents()',\n\t},\n})\nexport class BrnSelectScrollUpDirective {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _selectContent = inject(BrnSelectContentComponent);\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tpublic startEmittingEvents(): void {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\tinterval(100)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.moveFocusUp());\n\t}\n\n\tpublic stopEmittingEvents(): void {\n\t\tthis._endReached.next(true);\n\t}\n}\n\n@Directive({\n\tselector: '[brnSelectScrollDown], brn-select-scroll-down, hlm-select-scroll-down:not(noHlm)',\n\tstandalone: true,\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'(mouseenter)': 'startEmittingEvents()',\n\t},\n})\nexport class BrnSelectScrollDownDirective {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _selectContent = inject(BrnSelectContentComponent);\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\tpublic startEmittingEvents(): void {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\tinterval(100)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.moveFocusDown());\n\t}\n\n\tpublic stopEmittingEvents(): void {\n\t\tthis._endReached.next(true);\n\t}\n}\n\n@Component({\n\tselector: 'brn-select-content, hlm-select-content:not(noHlm)',\n\tstandalone: true,\n\timports: [BrnSelectScrollUpDirective, BrnSelectScrollDownDirective, NgTemplateOutlet],\n\thostDirectives: [CdkListbox],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[attr.aria-labelledBy]': 'labelledBy()',\n\t\t'[attr.aria-controlledBy]': \"id() +'--trigger'\",\n\t\t'[id]': \"id() + '--content'\",\n\t\t'[attr.dir]': '_selectService.dir()',\n\t},\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: flex;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tflex-direction: column;\n\t\t\t\toutline: none;\n\t\t\t\tpointer-events: auto;\n\t\t\t}\n\n\t\t\t[data-brn-select-viewport] {\n\t\t\t\tscrollbar-width: none;\n\t\t\t\t-ms-overflow-style: none;\n\t\t\t\t-webkit-overflow-scrolling: touch;\n\t\t\t}\n\n\t\t\t[data-brn-select-viewport]::-webkit-scrollbar {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t`,\n\t],\n\ttemplate: `\n\t\t<ng-template #scrollUp>\n\t\t\t<ng-content select=\"hlm-select-scroll-up\" />\n\t\t\t<ng-content select=\"brnSelectScrollUp\" />\n\t\t</ng-template>\n\t\t<ng-container *ngTemplateOutlet=\"canScrollUp() && scrollUpBtn() ? scrollUp : null\" />\n\t\t<div\n\t\t\tdata-brn-select-viewport\n\t\t\t#viewport\n\t\t\t(scroll)=\"handleScroll()\"\n\t\t\tstyle=\"flex: 1 1 0%;\n\t\t\tposition: relative;\n\t\t\twidth:100%;\n\t\t\toverflow:auto;\n\t\t\tmin-height: 36px;\n padding-bottom: 2px;\n margin-bottom: -2px;\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</div>\n\t\t<ng-template #scrollDown>\n\t\t\t<ng-content select=\"brnSelectScrollDown\" />\n\t\t\t<ng-content select=\"hlm-select-scroll-down\" />\n\t\t</ng-template>\n\t\t<ng-container *ngTemplateOutlet=\"canScrollDown() && scrollDownBtn() ? scrollDown : null\" />\n\t`,\n})\nexport class BrnSelectContentComponent implements AfterViewInit {\n\tprivate readonly _el: ElementRef<HTMLElement> = inject(ElementRef);\n\tprivate readonly _cdkListbox = inject(CdkListbox, { host: true });\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprotected readonly _selectService = inject(BrnSelectService);\n\n\tprotected readonly labelledBy = this._selectService.labelId;\n\tprotected readonly id = this._selectService.id;\n\tprotected readonly canScrollUp = signal(false);\n\tprotected readonly canScrollDown = signal(false);\n\n\tprotected initialSelectedOptions$ = toObservable(this._selectService.selectedOptions);\n\n\tprotected viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n\n\tprotected scrollUpBtn = contentChild(BrnSelectScrollUpDirective);\n\n\tprotected scrollDownBtn = contentChild(BrnSelectScrollDownDirective);\n\n\tprotected _options = contentChildren(BrnSelectOptionDirective, { descendants: true });\n\n\tconstructor() {\n\t\tthis._cdkListbox.valueChange\n\t\t\t.asObservable()\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((val: ListboxValueChangeEvent<unknown>) => this._selectService.listBoxValueChangeEvent$.next(val));\n\n\t\teffect(() => {\n\t\t\tthis._cdkListbox.multiple = this._selectService.multiple();\n\t\t\tthis._selectService.isExpanded() && setTimeout(() => this.updateArrowDisplay());\n\t\t});\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.setInitiallySelectedOptions();\n\t}\n\n\tprivate setInitiallySelectedOptions() {\n\t\tthis.initialSelectedOptions$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((selectedOptions) => {\n\t\t\t// Reapplying cdkLibstbox multiple because seems this is running before effect that\n\t\t\t// updates cdklistbox, reapplying multiple true so we can set the multiple initial options\n\t\t\tif (this._selectService.multiple()) {\n\t\t\t\tthis._cdkListbox.multiple = true;\n\t\t\t}\n\n\t\t\tfor (const cdkOption of this._selectService.possibleOptions()) {\n\t\t\t\tif (selectedOptions.includes(cdkOption)) {\n\t\t\t\t\tcdkOption?.select();\n\t\t\t\t} else {\n\t\t\t\t\tcdkOption?.deselect();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const cdkOption of selectedOptions) {\n\t\t\t\tcdkOption?.select();\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic updateArrowDisplay(): void {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this.viewport().nativeElement;\n\t\tthis.canScrollUp.set(scrollTop > 0);\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\t\tthis.canScrollDown.set(Math.ceil(scrollTop) < maxScroll);\n\t}\n\n\tpublic handleScroll() {\n\t\tthis.updateArrowDisplay();\n\t}\n\n\tpublic focusList(): void {\n\t\tthis._cdkListbox.focus();\n\t}\n\n\tpublic moveFocusUp() {\n\t\tthis.viewport().nativeElement.scrollBy({ top: -SCROLLBY_PIXELS, behavior: 'smooth' });\n\t\tif (this.viewport().nativeElement.scrollTop === 0) {\n\t\t\tthis.scrollUpBtn()?.stopEmittingEvents();\n\t\t}\n\t}\n\n\tpublic moveFocusDown() {\n\t\tthis.viewport().nativeElement.scrollBy({ top: SCROLLBY_PIXELS, behavior: 'smooth' });\n\t\tconst viewportSize = this._el.nativeElement.scrollHeight;\n\t\tconst viewportScrollPosition = this.viewport().nativeElement.scrollTop;\n\t\tif (\n\t\t\tviewportSize + viewportScrollPosition + SCROLLBY_PIXELS >\n\t\t\tthis.viewport().nativeElement.scrollHeight + SCROLLBY_PIXELS / 2\n\t\t) {\n\t\t\tthis.scrollDownBtn()?.stopEmittingEvents();\n\t\t}\n\t}\n}\n","import { Directive, signal } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectGroup]',\n\tstandalone: true,\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.aria-labelledby]': 'labelledBy()',\n\t},\n})\nexport class BrnSelectGroupDirective {\n\tpublic readonly labelledBy = signal('');\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnLabelDirective } from '@spartan-ng/brain/label';\nimport { BrnSelectGroupDirective } from './brn-select-group.directive';\n\n@Directive({\n\tselector: '[brnSelectLabel]',\n\thostDirectives: [BrnLabelDirective],\n\tstandalone: true,\n})\nexport class BrnSelectLabelDirective {\n\tprivate readonly _group = inject(BrnSelectGroupDirective, { optional: true });\n\tprivate readonly _label = inject(BrnLabelDirective, { host: true });\n\n\tconstructor() {\n\t\tthis._group?.labelledBy.set(this._label.id());\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BrnSelectService } from './brn-select.service';\n\n@Component({\n\tselector: 'brn-select-value, hlm-select-value',\n\ttemplate: `\n\t\t{{ value || placeholder() }}\n\t`,\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t\t-webkit-line-clamp: 1;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t`,\n\t],\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BrnSelectValueComponent {\n\tprivate readonly _selectService = inject(BrnSelectService);\n\n\tpublic readonly id = computed(() => `${this._selectService.id()}--value`);\n\tpublic readonly placeholder = computed(() => this._selectService.placeholder());\n\tpublic value: string | null = null;\n\n\tpublic readonly transformFn = input<(values: (string | undefined)[]) => any>((values) => (values ?? []).join(', '));\n\n\tconstructor() {\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\t// In certain cases (when using a computed signal for value) where the value of the select and the options are\n\t\t// changed dynamically, the template does not update until the next frame. To work around this we can use a simple\n\t\t// string variable in the template and manually trigger change detection when we update it.\n\t\ttoObservable(this._selectService.selectedOptions)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (value.length === 0) {\n\t\t\t\t\tthis.value = null;\n\t\t\t\t\tcdr.detectChanges();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedLabels = value.map((selectedOption) => selectedOption?.getLabel());\n\n\t\t\t\tif (this._selectService.dir() === 'rtl') {\n\t\t\t\t\tselectedLabels.reverse();\n\t\t\t\t}\n\t\t\t\tconst result = this.transformFn()(selectedLabels);\n\t\t\t\tthis.value = result;\n\t\t\t\tcdr.detectChanges();\n\t\t\t});\n\t}\n}\n","import { CdkListbox, CdkListboxModule, CdkOption } from '@angular/cdk/listbox';\nimport {\n\tCdkConnectedOverlay,\n\ttype ConnectedOverlayPositionChange,\n\ttype ConnectedPosition,\n\tOverlayModule,\n} from '@angular/cdk/overlay';\nimport {\n\tAfterContentInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype DoCheck,\n\ttype Signal,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport {\n\ttype ExposesSide,\n\ttype ExposesState,\n\tprovideExposedSideProviderExisting,\n\tprovideExposesStateProviderExisting,\n} from '@spartan-ng/brain/core';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ChangeFn, ErrorStateMatcher, ErrorStateTracker, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnLabelDirective } from '@spartan-ng/brain/label';\nimport { Subject, combineLatest, of } from 'rxjs';\nimport { delay, map, switchMap } from 'rxjs/operators';\nimport { BrnSelectContentComponent } from './brn-select-content.component';\nimport { BrnSelectService } from './brn-select.service';\n\nexport type BrnReadDirection = 'ltr' | 'rtl';\n\nlet nextId = 0;\n\n@Component({\n\tselector: 'brn-select, hlm-select',\n\tstandalone: true,\n\timports: [OverlayModule, CdkListboxModule],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\tBrnSelectService,\n\t\tCdkListbox,\n\t\tprovideExposedSideProviderExisting(() => BrnSelectComponent),\n\t\tprovideExposesStateProviderExisting(() => BrnSelectComponent),\n\t\t{\n\t\t\tprovide: BrnFormFieldControl,\n\t\t\tuseExisting: BrnSelectComponent,\n\t\t},\n\t],\n\ttemplate: `\n\t\t@if (!labelProvided() && placeholder()) {\n\t\t\t<label class=\"hidden\" [attr.id]=\"backupLabelId()\">{{ placeholder() }}</label>\n\t\t} @else {\n\t\t\t<ng-content select=\"label[hlmLabel],label[brnLabel]\" />\n\t\t}\n\n\t\t<div cdk-overlay-origin (click)=\"toggle()\" #trigger=\"cdkOverlayOrigin\">\n\t\t\t<ng-content select=\"hlm-select-trigger,[brnSelectTrigger]\" />\n\t\t</div>\n\t\t<ng-template\n\t\t\tcdk-connected-overlay\n\t\t\tcdkConnectedOverlayLockPosition\n\t\t\tcdkConnectedOverlayHasBackdrop\n\t\t\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t\t\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t\t\t[cdkConnectedOverlayOpen]=\"_delayedExpanded()\"\n\t\t\t[cdkConnectedOverlayPositions]=\"_positions\"\n\t\t\t[cdkConnectedOverlayWidth]=\"triggerWidth() > 0 ? triggerWidth() : 'auto'\"\n\t\t\t(backdropClick)=\"close()\"\n\t\t\t(detach)=\"close()\"\n\t\t\t(positionChange)=\"_positionChanges$.next($event)\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ng-template>\n\t`,\n})\nexport class BrnSelectComponent<T = unknown>\n\timplements ControlValueAccessor, AfterContentInit, DoCheck, ExposesSide, ExposesState, BrnFormFieldControl\n{\n\tprivate readonly _selectService = inject(BrnSelectService);\n\n\tpublic readonly triggerWidth = this._selectService.triggerWidth;\n\n\tpublic readonly multiple = input<boolean>(false);\n\tpublic readonly placeholder = input<string>('');\n\tpublic readonly disabled = input<boolean>(false);\n\tpublic readonly dir = input<BrnReadDirection>('ltr');\n\tprivate readonly _disabledFromSetDisabledState = signal(false);\n\n\tprotected selectLabel = contentChild(BrnLabelDirective, { descendants: false });\n\t/** Overlay pane containing the options. */\n\tprotected selectContent = contentChild.required(BrnSelectContentComponent);\n\n\tprotected options = contentChildren(CdkOption, { descendants: true });\n\tprotected options$ = toObservable(this.options);\n\tprotected optionsAndIndex$ = this.options$.pipe(map((options, index) => [options, index] as const));\n\n\t/** Overlay pane containing the options. */\n\tprotected _overlayDir = viewChild(CdkConnectedOverlay);\n\n\tpublic readonly openedChange = output<boolean>();\n\n\tpublic readonly closeDelay = input<number>(100);\n\tpublic readonly isExpanded = this._selectService.isExpanded;\n\tprotected readonly _delayedExpanded = toSignal(\n\t\ttoObservable(this.isExpanded).pipe(\n\t\t\tswitchMap((expanded) => (!expanded ? of(expanded).pipe(delay(this.closeDelay())) : of(expanded))),\n\t\t\ttakeUntilDestroyed(),\n\t\t),\n\t\t{ initialValue: false },\n\t);\n\tpublic readonly state = computed(() => (this.isExpanded() ? 'open' : 'closed'));\n\n\tprotected readonly _positionChanges$ = new Subject<ConnectedOverlayPositionChange>();\n\tpublic readonly side: Signal<'top' | 'bottom' | 'left' | 'right'> = toSignal(\n\t\tthis._positionChanges$.pipe(\n\t\t\tmap<ConnectedOverlayPositionChange, 'top' | 'bottom' | 'left' | 'right'>((change) =>\n\t\t\t\t// todo: better translation or adjusting hlm to take that into account\n\t\t\t\tchange.connectionPair.originY === 'center'\n\t\t\t\t\t? change.connectionPair.originX === 'start'\n\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t: 'right'\n\t\t\t\t\t: change.connectionPair.originY,\n\t\t\t),\n\t\t),\n\t\t{ initialValue: 'bottom' },\n\t);\n\n\tpublic readonly backupLabelId = computed(() => this._selectService.labelId());\n\tpublic readonly labelProvided = signal(false);\n\n\tpublic readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onChange: ChangeFn<T> = () => {};\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouched: TouchFn = () => {};\n\n\tprivate readonly _shouldEmitValueChange = signal(false);\n\n\t/*\n\t * This position config ensures that the top \"start\" corner of the overlay\n\t * is aligned with with the top \"start\" of the origin by default (overlapping\n\t * the trigger completely). If the panel cannot fit below the trigger, it\n\t * will fall back to a position above the trigger.\n\t */\n\tprotected _positions: ConnectedPosition[] = [\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'bottom',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'top',\n\t\t},\n\t\t{\n\t\t\toriginX: 'end',\n\t\t\toriginY: 'bottom',\n\t\t\toverlayX: 'end',\n\t\t\toverlayY: 'top',\n\t\t},\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'top',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'bottom',\n\t\t},\n\t\t{\n\t\t\toriginX: 'end',\n\t\t\toriginY: 'top',\n\t\t\toverlayX: 'end',\n\t\t\toverlayY: 'bottom',\n\t\t},\n\t];\n\n\tpublic errorStateTracker: ErrorStateTracker;\n\n\tprivate readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n\tprivate readonly _parentForm = inject(NgForm, { optional: true });\n\tprivate readonly _parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n\tpublic errorState = computed(() => this.errorStateTracker.errorState());\n\n\tpublic writeValue$ = new Subject<T>();\n\n\tconstructor() {\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tmultiple: this.multiple,\n\t\t\tplaceholder: this.placeholder,\n\t\t\tdisabled: this.disabled,\n\t\t\tdisabledBySetDisabled: this._disabledFromSetDisabledState,\n\t\t\tdir: this.dir,\n\t\t}));\n\t\tthis.handleOptionChanges();\n\t\tthis.handleInitialOptionSelect();\n\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tid: `brn-select-${nextId++}`,\n\t\t}));\n\t\tif (this.ngControl !== null) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\n\t\t// Watch for Listbox Selection Changes to trigger Collapse and Value Change\n\t\tthis._selectService.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe(() => {\n\t\t\tif (!this.multiple()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\t// we set shouldEmitValueChange to true because we want to propagate the value change\n\t\t\t// as a result of user interaction\n\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t});\n\n\t\t/**\n\t\t * Listening to value changes in order to trigger forms api on change\n\t\t * ShouldEmitValueChange simply ensures we only propagate value change when a user makes a selection\n\t\t * we don't propagate changes made from outside the component (ex. patch value or initial value from form control)\n\t\t */\n\t\ttoObservable(this._selectService.value).subscribe((value) => {\n\t\t\tif (this._shouldEmitValueChange()) {\n\t\t\t\tthis._onChange((value ?? null) as T);\n\t\t\t}\n\t\t\tthis._shouldEmitValueChange.set(true);\n\t\t});\n\n\t\tthis.errorStateTracker = new ErrorStateTracker(\n\t\t\tthis._defaultErrorStateMatcher,\n\t\t\tthis.ngControl,\n\t\t\tthis._parentFormGroup,\n\t\t\tthis._parentForm,\n\t\t);\n\t}\n\n\tpublic ngAfterContentInit(): void {\n\t\t// Check if Label Directive Provided and pass to service\n\t\tconst label = this.selectLabel();\n\t\tif (label) {\n\t\t\tthis.labelProvided.set(true);\n\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlabelId: label.id(),\n\t\t\t}));\n\t\t} else if (this.placeholder()) {\n\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlabelId: `${state.id}--label`,\n\t\t\t}));\n\t\t}\n\t}\n\n\tngDoCheck() {\n\t\tthis.errorStateTracker.updateErrorState();\n\t}\n\n\tpublic toggle(): void {\n\t\tif (this.isExpanded()) {\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\tpublic open(): void {\n\t\tif (!this._canOpen()) return;\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tisExpanded: true,\n\t\t}));\n\t\tthis.openedChange.emit(true);\n\t\tthis._moveFocusToCDKList();\n\t}\n\n\tpublic close(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tif (this._selectService.selectTrigger) {\n\t\t\tthis._selectService.selectTrigger.focus();\n\t\t}\n\n\t\tthis.openedChange.emit(false);\n\t\tthis._selectService.state.update((state) => ({\n\t\t\t...state,\n\t\t\tisExpanded: false,\n\t\t}));\n\t\tthis._onTouched();\n\t}\n\n\tprotected _canOpen(): boolean {\n\t\treturn !this.isExpanded() && !this.disabled() && this.options()?.length > 0;\n\t}\n\n\tprivate _moveFocusToCDKList(): void {\n\t\tsetTimeout(() => {\n\t\t\tthis.selectContent()?.focusList();\n\t\t});\n\t}\n\n\tpublic writeValue(value: T): void {\n\t\tthis.writeValue$.next(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean) {\n\t\tthis._disabledFromSetDisabledState.set(isDisabled);\n\t}\n\n\t/**\n\t * Once writeValue is called and options are available we can handle setting the initial options\n\t * @private\n\t */\n\tprivate handleInitialOptionSelect() {\n\t\t// Write value cannot be handled until options are available, so we wait until both are available with a combineLatest\n\t\tcombineLatest([this.writeValue$, this.options$])\n\t\t\t.pipe(\n\t\t\t\tmap((values, index) => [...values, index]),\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t)\n\t\t\t.subscribe(([value, _, index]) => {\n\t\t\t\tthis._shouldEmitValueChange.set(false);\n\t\t\t\tthis._selectService.setInitialSelectedOptions(value);\n\t\t\t\t// the first time this observable emits a value we are simply setting the initial state\n\t\t\t\t// this change should not count as changing the state of the select, so we need to mark as pristine\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tthis.ngControl?.control?.markAsPristine();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * When options change, our current selected options may become invalid\n\t * Here we will automatically update our current selected options so that they are always inline with the possibleOptions\n\t * @private\n\t */\n\tprivate handleOptionChanges() {\n\t\tthis.optionsAndIndex$.pipe(takeUntilDestroyed()).subscribe(([options, index]) => {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.handleInvalidOptions(options);\n\t\t\t}\n\t\t\tthis._selectService.updatePossibleOptions(options);\n\t\t});\n\t}\n\n\t/**\n\t * Check that our \"selectedOptions\" are still valid when \"possibleOptions\" is about to be updated\n\t */\n\tprivate handleInvalidOptions(options: readonly CdkOption[]) {\n\t\tconst selectedOptions = this._selectService.selectedOptions();\n\t\tconst availableOptionSet = new Set<CdkOption | null>(options);\n\t\tif (this._selectService.multiple()) {\n\t\t\tconst filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));\n\t\t\tif (selectedOptions.length !== filteredOptions.length) {\n\t\t\t\tconst value = filteredOptions.map((o) => (o?.value as string) ?? '');\n\t\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: filteredOptions,\n\t\t\t\t\tvalue: value,\n\t\t\t\t}));\n\t\t\t}\n\t\t} else {\n\t\t\tconst selectedOption = selectedOptions[0] ?? null;\n\t\t\tif (selectedOption !== null && !availableOptionSet.has(selectedOption)) {\n\t\t\t\tthis._selectService.state.update((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tselectedOptions: [],\n\t\t\t\t\tvalue: '',\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport {\n\tBrnSelectContentComponent,\n\tBrnSelectScrollDownDirective,\n\tBrnSelectScrollUpDirective,\n} from './lib/brn-select-content.component';\nimport { BrnSelectGroupDirective } from './lib/brn-select-group.directive';\nimport { BrnSelectLabelDirective } from './lib/brn-select-label.directive';\nimport { BrnSelectOptionDirective } from './lib/brn-select-option.directive';\nimport { BrnSelectValueComponent } from './lib/brn-select-value.component';\nimport { BrnSelectComponent } from './lib/brn-select.component';\nimport { BrnSelectTriggerDirective } from './lib/brn-select.service';\nexport * from './lib/brn-select-content.component';\nexport * from './lib/brn-select-group.directive';\nexport * from './lib/brn-select-label.directive';\nexport * from './lib/brn-select-option.directive';\nexport * from './lib/brn-select-value.component';\nexport * from './lib/brn-select.component';\nexport * from './lib/brn-select.service';\n\nexport const BrnSelectImports = [\n\tBrnSelectComponent,\n\tBrnSelectContentComponent,\n\tBrnSelectTriggerDirective,\n\tBrnSelectOptionDirective,\n\tBrnSelectValueComponent,\n\tBrnSelectScrollDownDirective,\n\tBrnSelectScrollUpDirective,\n\tBrnSelectGroupDirective,\n\tBrnSelectLabelDirective,\n] as const;\n\n@NgModule({\n\timports: [...BrnSelectImports],\n\texports: [...BrnSelectImports],\n})\nexport class BrnSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spartan-ng/brain",
3
- "version": "0.0.1-alpha.401",
3
+ "version": "0.0.1-alpha.402",
4
4
  "sideEffects": false,
5
5
  "exports": {
6
6
  "./hlm-tailwind-preset": {
@@ -51,18 +51,18 @@
51
51
  "esm": "./esm2022/collapsible/spartan-ng-brain-collapsible.mjs",
52
52
  "default": "./fesm2022/spartan-ng-brain-collapsible.mjs"
53
53
  },
54
- "./command": {
55
- "types": "./command/index.d.ts",
56
- "esm2022": "./esm2022/command/spartan-ng-brain-command.mjs",
57
- "esm": "./esm2022/command/spartan-ng-brain-command.mjs",
58
- "default": "./fesm2022/spartan-ng-brain-command.mjs"
59
- },
60
54
  "./core": {
61
55
  "types": "./core/index.d.ts",
62
56
  "esm2022": "./esm2022/core/spartan-ng-brain-core.mjs",
63
57
  "esm": "./esm2022/core/spartan-ng-brain-core.mjs",
64
58
  "default": "./fesm2022/spartan-ng-brain-core.mjs"
65
59
  },
60
+ "./command": {
61
+ "types": "./command/index.d.ts",
62
+ "esm2022": "./esm2022/command/spartan-ng-brain-command.mjs",
63
+ "esm": "./esm2022/command/spartan-ng-brain-command.mjs",
64
+ "default": "./fesm2022/spartan-ng-brain-command.mjs"
65
+ },
66
66
  "./date-time": {
67
67
  "types": "./date-time/index.d.ts",
68
68
  "esm2022": "./esm2022/date-time/spartan-ng-brain-date-time.mjs",
@@ -73,10 +73,6 @@ export declare class BrnSelectComponent<T = unknown> implements ControlValueAcce
73
73
  * Check that our "selectedOptions" are still valid when "possibleOptions" is about to be updated
74
74
  */
75
75
  private handleInvalidOptions;
76
- /**
77
- * Sync the updated options with "possibleOptions" in the select service
78
- */
79
- private updatePossibleOptions;
80
76
  static ɵfac: i0.ɵɵFactoryDeclaration<BrnSelectComponent<any>, never>;
81
77
  static ɵcmp: i0.ɵɵComponentDeclaration<BrnSelectComponent<any>, "brn-select, hlm-select", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "openedChange": "openedChange"; }, ["selectLabel", "selectContent", "options"], ["label[hlmLabel],label[brnLabel]", "hlm-select-trigger,[brnSelectTrigger]", "*"], true, never>;
82
78
  }
@@ -60,6 +60,10 @@ export declare class BrnSelectService {
60
60
  deselectAllOptions(): void;
61
61
  _setSelectTrigger(trigger: BrnSelectTriggerDirective): void;
62
62
  setInitialSelectedOptions(value: unknown): void;
63
+ /**
64
+ * Sync the updated options with "possibleOptions" in the select service
65
+ */
66
+ updatePossibleOptions(options: readonly CdkOption[]): void;
63
67
  private selectOptionByValue;
64
68
  static ɵfac: i0.ɵɵFactoryDeclaration<BrnSelectService, never>;
65
69
  static ɵprov: i0.ɵɵInjectableDeclaration<BrnSelectService>;