@theseam/ui-common 1.0.2-beta.33 → 1.0.2-beta.39

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.
@@ -36,6 +36,16 @@ interface DataFilter {
36
36
  * Name used when referencing filter by string.
37
37
  */
38
38
  name: string;
39
+ /**
40
+ * Optional override for the filter name used in `filterState()`.
41
+ *
42
+ * When multiple instances of the same filter type exist on a page, each
43
+ * instance shares the same `name`. Set `filterName` to give an instance a
44
+ * distinct key so that filter-state mappers can differentiate them.
45
+ *
46
+ * If unset, `filterState()` falls back to `name`.
47
+ */
48
+ filterName?: string;
39
49
  /**
40
50
  * Unique value to prevent a filter being used more than once if it ends up
41
51
  * being registered more than once.
@@ -109,6 +119,7 @@ declare class DataFilterSearchComponent implements OnInit, OnDestroy, IDataFilte
109
119
  static ngAcceptInputType_caseSensitive: BooleanInput;
110
120
  readonly name = "search";
111
121
  readonly uid: string;
122
+ filterName: string | undefined;
112
123
  _control: UntypedFormControl;
113
124
  properties: string[] | undefined | null;
114
125
  omitProperties: string[] | undefined | null;
@@ -127,7 +138,7 @@ declare class DataFilterSearchComponent implements OnInit, OnDestroy, IDataFilte
127
138
  filter<T>(data: T[]): Observable<T[]>;
128
139
  filterState(): DataFilterState;
129
140
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFilterSearchComponent, [null, { optional: true; }]>;
130
- static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterSearchComponent, "seam-data-filter-search", never, { "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconTpl": { "alias": "iconTpl"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
141
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterSearchComponent, "seam-data-filter-search", never, { "filterName": { "alias": "filterName"; "required": false; }; "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconTpl": { "alias": "iconTpl"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
131
142
  }
132
143
 
133
144
  declare const DATA_FILTER_TEXT: any;
@@ -140,6 +151,7 @@ declare class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter
140
151
  static ngAcceptInputType_caseSensitive: BooleanInput;
141
152
  readonly name = "text";
142
153
  readonly uid: string;
154
+ filterName: string | undefined;
143
155
  _control: UntypedFormControl;
144
156
  properties: string[] | undefined | null;
145
157
  omitProperties: string[] | undefined | null;
@@ -157,7 +169,7 @@ declare class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter
157
169
  filter<T>(data: T[]): Observable<T[]>;
158
170
  filterState(): DataFilterState;
159
171
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFilterTextComponent, [null, { optional: true; }]>;
160
- static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterTextComponent, "seam-data-filter-text", never, { "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "iconTpl": { "alias": "iconTpl"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
172
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterTextComponent, "seam-data-filter-text", never, { "filterName": { "alias": "filterName"; "required": false; }; "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "iconTpl": { "alias": "iconTpl"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
161
173
  }
162
174
 
163
175
  declare const DATA_FILTER_TOGGLE_BUTTON: any;
@@ -179,6 +191,7 @@ declare class DataFilterToggleButtonsComponent implements OnInit, OnDestroy, IDa
179
191
  private _filterOptions;
180
192
  readonly name = "toggle-buttons";
181
193
  readonly uid: string;
194
+ filterName: string | undefined;
182
195
  _control: UntypedFormControl;
183
196
  properties: string[] | undefined;
184
197
  omitProperties: string[] | undefined;
@@ -197,7 +210,7 @@ declare class DataFilterToggleButtonsComponent implements OnInit, OnDestroy, IDa
197
210
  filter<T>(data: T[]): Observable<T[]>;
198
211
  filterState(): DataFilterState;
199
212
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFilterToggleButtonsComponent, [null, { optional: true; }]>;
200
- static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterToggleButtonsComponent, "seam-data-filter-toggle-buttons", never, { "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "selectionToggleable": { "alias": "selectionToggleable"; "required": false; }; "buttons": { "alias": "buttons"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
213
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataFilterToggleButtonsComponent, "seam-data-filter-toggle-buttons", never, { "filterName": { "alias": "filterName"; "required": false; }; "properties": { "alias": "properties"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "selectionToggleable": { "alias": "selectionToggleable"; "required": false; }; "buttons": { "alias": "buttons"; "required": false; }; "exact": { "alias": "exact"; "required": false; }; "caseSensitive": { "alias": "caseSensitive"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
201
214
  }
202
215
 
203
216
  declare class TheSeamDataFiltersModule {
@@ -101,6 +101,7 @@ class DataFilterTextComponent {
101
101
  static ngAcceptInputType_caseSensitive;
102
102
  name = 'text';
103
103
  uid = `text__${_uid$2++}`;
104
+ filterName;
104
105
  _control = new UntypedFormControl();
105
106
  properties = this._optDefault('properties');
106
107
  omitProperties = this._optDefault('omitProperties');
@@ -147,7 +148,7 @@ class DataFilterTextComponent {
147
148
  filterState() {
148
149
  return {
149
150
  // id:
150
- name: this.name,
151
+ name: this.filterName ?? this.name,
151
152
  state: {
152
153
  value: this._control.value,
153
154
  options: this.options,
@@ -155,7 +156,7 @@ class DataFilterTextComponent {
155
156
  };
156
157
  }
157
158
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterTextComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
158
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterTextComponent, isStandalone: false, selector: "seam-data-filter-text", inputs: { properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_TEXT], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block}.data-filter-text-has-icon>input{padding-left:30px}.data-filter-text-has-icon ::ng-deep fa-icon{position:absolute;top:3px;left:10px;bottom:0}.data-filter-text-has-icon ::ng-deep fa-icon .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput], seam-rich-text[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }] });
159
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterTextComponent, isStandalone: false, selector: "seam-data-filter-text", inputs: { filterName: "filterName", properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_TEXT], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block}.data-filter-text-has-icon>input{padding-left:30px}.data-filter-text-has-icon ::ng-deep fa-icon{position:absolute;top:3px;left:10px;bottom:0}.data-filter-text-has-icon ::ng-deep fa-icon .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput], seam-rich-text[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }] });
159
160
  }
160
161
  __decorate([
161
162
  InputBoolean()
@@ -174,7 +175,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
174
175
  }, {
175
176
  type: Inject,
176
177
  args: [THESEAM_DATA_FILTER_OPTIONS]
177
- }] }], propDecorators: { properties: [{
178
+ }] }], propDecorators: { filterName: [{
179
+ type: Input
180
+ }], properties: [{
178
181
  type: Input
179
182
  }], omitProperties: [{
180
183
  type: Input
@@ -212,6 +215,7 @@ class DataFilterSearchComponent {
212
215
  static ngAcceptInputType_caseSensitive;
213
216
  name = 'search';
214
217
  uid = `search__${_uid$1++}`;
218
+ filterName;
215
219
  _control = new UntypedFormControl();
216
220
  properties = this._optDefault('properties');
217
221
  omitProperties = this._optDefault('omitProperties');
@@ -259,7 +263,7 @@ class DataFilterSearchComponent {
259
263
  filterState() {
260
264
  return {
261
265
  // id:
262
- name: this.name,
266
+ name: this.filterName ?? this.name,
263
267
  state: {
264
268
  value: this._control.value,
265
269
  options: this.options,
@@ -267,7 +271,7 @@ class DataFilterSearchComponent {
267
271
  };
268
272
  }
269
273
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterSearchComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
270
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterSearchComponent, isStandalone: false, selector: "seam-data-filter-search", inputs: { properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", icon: "icon", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_SEARCH], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [":host{display:flex;flex:0 1 300px}.data-filter-search-has-icon{width:100%}.data-filter-search-has-icon>input{padding-left:30px}.data-filter-search-has-icon .data-filter-search--icon-wrapper{position:absolute;top:3px;left:10px;bottom:0}.data-filter-search-has-icon .data-filter-search--icon-wrapper ::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput], seam-rich-text[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
274
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterSearchComponent, isStandalone: false, selector: "seam-data-filter-search", inputs: { filterName: "filterName", properties: "properties", omitProperties: "omitProperties", exact: "exact", caseSensitive: "caseSensitive", placeholder: "placeholder", icon: "icon", iconTpl: "iconTpl", value: "value" }, providers: [DATA_FILTER_SEARCH], ngImport: i0, template: "<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n", styles: [":host{display:flex;flex:0 1 300px}.data-filter-search-has-icon{width:100%}.data-filter-search-has-icon>input{padding-left:30px}.data-filter-search-has-icon .data-filter-search--icon-wrapper{position:absolute;top:3px;left:10px;bottom:0}.data-filter-search-has-icon .data-filter-search--icon-wrapper ::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.InputDirective, selector: "input[seamInput], textarea[seamInput], ng-select[seamInput], seam-tel-input[seamInput], quill-editor[seamInput], seam-google-maps[seamInput], seam-rich-text[seamInput]", inputs: ["seamInputSize", "id", "type", "placeholder", "required", "disabled", "readonly"], exportAs: ["seamInput"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
271
275
  }
272
276
  __decorate([
273
277
  InputBoolean()
@@ -286,7 +290,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
286
290
  }, {
287
291
  type: Inject,
288
292
  args: [THESEAM_DATA_FILTER_OPTIONS]
289
- }] }], propDecorators: { properties: [{
293
+ }] }], propDecorators: { filterName: [{
294
+ type: Input
295
+ }], properties: [{
290
296
  type: Input
291
297
  }], omitProperties: [{
292
298
  type: Input
@@ -365,6 +371,7 @@ class DataFilterToggleButtonsComponent {
365
371
  _filterOptions;
366
372
  name = 'toggle-buttons';
367
373
  uid = `toggle-buttons__${_uid++}`;
374
+ filterName;
368
375
  _control = new UntypedFormControl();
369
376
  properties = this._optDefault('properties');
370
377
  omitProperties = this._optDefault('omitProperties');
@@ -424,7 +431,7 @@ class DataFilterToggleButtonsComponent {
424
431
  filterState() {
425
432
  return {
426
433
  // id:
427
- name: this.name,
434
+ name: this.filterName ?? this.name,
428
435
  state: {
429
436
  value: this._control.value,
430
437
  options: this.options,
@@ -432,7 +439,7 @@ class DataFilterToggleButtonsComponent {
432
439
  };
433
440
  }
434
441
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterToggleButtonsComponent, deps: [{ token: THESEAM_DATA_FILTER_CONTAINER }, { token: THESEAM_DATA_FILTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
435
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterToggleButtonsComponent, isStandalone: false, selector: "seam-data-filter-toggle-buttons", inputs: { properties: "properties", omitProperties: "omitProperties", multiple: "multiple", selectionToggleable: "selectionToggleable", buttons: "buttons", exact: "exact", caseSensitive: "caseSensitive", value: "value" }, providers: [DATA_FILTER_TOGGLE_BUTTON], ngImport: i0, template: "<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.ToggleGroupDirective, selector: "[seamToggleGroup]", inputs: ["value", "disabled", "multiple", "selectionToggleable"], outputs: ["change"], exportAs: ["seamToggleGroup"] }, { kind: "directive", type: i3$1.ToggleGroupOptionDirective, selector: "[seamToggleGroupOption]", inputs: ["seamToggleGroupOption", "selected"], outputs: ["selectionChange"], exportAs: ["seamToggleGroupOption"] }] });
442
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DataFilterToggleButtonsComponent, isStandalone: false, selector: "seam-data-filter-toggle-buttons", inputs: { filterName: "filterName", properties: "properties", omitProperties: "omitProperties", multiple: "multiple", selectionToggleable: "selectionToggleable", buttons: "buttons", exact: "exact", caseSensitive: "caseSensitive", value: "value" }, providers: [DATA_FILTER_TOGGLE_BUTTON], ngImport: i0, template: "<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.ToggleGroupDirective, selector: "[seamToggleGroup]", inputs: ["value", "disabled", "multiple", "selectionToggleable"], outputs: ["change"], exportAs: ["seamToggleGroup"] }, { kind: "directive", type: i3$1.ToggleGroupOptionDirective, selector: "[seamToggleGroupOption]", inputs: ["seamToggleGroupOption", "selected"], outputs: ["selectionChange"], exportAs: ["seamToggleGroupOption"] }] });
436
443
  }
437
444
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataFilterToggleButtonsComponent, decorators: [{
438
445
  type: Component,
@@ -445,7 +452,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
445
452
  }, {
446
453
  type: Inject,
447
454
  args: [THESEAM_DATA_FILTER_OPTIONS]
448
- }] }], propDecorators: { properties: [{
455
+ }] }], propDecorators: { filterName: [{
456
+ type: Input
457
+ }], properties: [{
449
458
  type: Input
450
459
  }], omitProperties: [{
451
460
  type: Input
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-data-filters.mjs","sources":["../../../projects/ui-common/data-filters/data-filter.ts","../../../projects/ui-common/data-filters/data-filter-def.ts","../../../projects/ui-common/data-filters/data-filter-container.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.html","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.html","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.html","../../../projects/ui-common/data-filters/data-filters.module.ts","../../../projects/ui-common/data-filters/theseam-ui-common-data-filters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { map, startWith, switchMap } from 'rxjs/operators'\n\nexport type DataFilterFunction = <T>(data: T[]) => Observable<T[]>\n\n/**\n * State of the filter that would allow an external operation to apply the\n * filtering.\n *\n * This is primarily for server-side filtering.\n */\nexport interface DataFilterState {\n /**\n * DataFilter's name.\n */\n name: string\n\n /**\n * Anything necessary for an external implementation to apply this filter.\n */\n state: { [key: string]: any }\n}\n\n// TODO: Consider adding something, such as a priority or order, to allow the\n// order the filter functions are called in to be declared/influenced\n// externally. This would allow the filters that will most likely filter out\n// many records quickly to be run before the heavy processing filters.\nexport interface DataFilter {\n /**\n * Name used when referencing filter by string.\n */\n name: string\n\n /**\n * Unique value to prevent a filter being used more than once if it ends up\n * being registered more than once.\n */\n uid: string\n\n /**\n *\n */\n filterStateChanges: Observable<DataFilterState>\n\n /**\n * Filters the data based on the conditions of the filter.\n */\n filter<T>(data: T[]): Observable<T[]>\n\n /**\n *\n */\n filterState(): DataFilterState\n}\n\nexport const THESEAM_DATA_FILTER = new InjectionToken<DataFilter>(\n 'TheSeamDataFilter',\n)\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>(\n 'TheSeamDataFilterOptions',\n)\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(filterFn))\n}\n\nexport function composeDataFilters(filters: DataFilter[]) {\n const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)))\n return (source$: Observable<any>) => {\n let src$ = source$\n for (const f of filterFunctions) {\n src$ = src$.pipe(f)\n }\n return src$\n }\n}\n\nexport function composeDataFilterStates(\n filters: DataFilter[],\n): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(\n filters.map((f) =>\n f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState()),\n ),\n ),\n )\n}\n\n/** @deprecated Use `DataFilter` instead. */\nexport type IDataFilter = DataFilter\n\n/** @deprecated Use `IDataFilterFunction` instead. */\nexport type IDataFilterFunction = DataFilterFunction\n","import { InjectionToken } from '@angular/core'\n\nimport { IDataFilter } from './data-filter'\n\nexport interface IDataFilterDef<T = any> {\n name: string\n\n /**\n * Component that controls the filter.\n */\n component: IDataFilter\n}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>(\n 'TheSeamDataFilter',\n)\n","import { InjectionToken } from '@angular/core'\nimport { IDataFilter } from './data-filter'\n\nexport interface DataFilterContainer {\n filters(): IDataFilter[]\n\n addFilter(dataFilter: IDataFilter): void\n\n removeFilter(dataFilter: IDataFilter): void\n}\n\nexport const THESEAM_DATA_FILTER_CONTAINER =\n new InjectionToken<DataFilterContainer>('DataFilterContainer')\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { ITextFilterOptions } from './text-filter-options'\n\nexport const DATA_FILTER_TEXT: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterTextComponent),\n multi: true,\n}\n\nexport const DefaultTextFilterOptions: ITextFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function textDataFilter(\n data: any[],\n text: string,\n options = DefaultTextFilterOptions,\n) {\n if (!data || !text) {\n return data\n }\n\n if (data.length <= 0) {\n return data\n }\n\n let props = options ? options.properties : undefined\n if (!props) {\n props = []\n let keys = Object.keys(data[0])\n if (options && options.omitProperties) {\n keys = keys.filter(\n (key) => !(options.omitProperties || []).find((p) => p === key),\n )\n }\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(data[0], key)) {\n props.push(key)\n }\n }\n }\n\n const filtered: any[] = []\n\n for (const item of data) {\n for (const p of props) {\n let value1 = `${item[p]}`\n let value2 = text\n\n if (!options.caseSensitive) {\n value1 = value1.toLowerCase()\n value2 = value2.toLowerCase()\n }\n\n if (item[p] && value1.indexOf(value2) !== (options.exact ? 0 : -1)) {\n filtered.push(item)\n break\n }\n }\n }\n\n return filtered\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-text',\n templateUrl: './data-filter-text.component.html',\n styleUrls: ['./data-filter-text.component.scss'],\n providers: [DATA_FILTER_TEXT],\n standalone: false,\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null\n @Input() iconTpl: TemplateRef<HTMLElement> | undefined | null\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ITextFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultTextFilterOptions[prop]\n }\n\n get options(): ITextFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => textDataFilter(data, v, this.options)),\n startWith(textDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { SeamIcon } from '@theseam/ui-common/icon'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\n\nimport { ISearchFilterOptions } from './search-filter-options'\n\nexport const DATA_FILTER_SEARCH: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterSearchComponent),\n multi: true,\n}\n\nexport const DefaultSearchFilterOptions: ISearchFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function searchDataFilter(\n data: any[],\n values: string,\n options = DefaultSearchFilterOptions,\n) {\n return textDataFilter(data, values, options)\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-search',\n templateUrl: './data-filter-search.component.html',\n styleUrls: ['./data-filter-search.component.scss'],\n providers: [DATA_FILTER_SEARCH],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DataFilterSearchComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null = 'Search...'\n @Input() icon: SeamIcon | undefined | null = faSearch\n @Input() iconTpl?: TemplateRef<HTMLElement>\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ISearchFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultSearchFilterOptions[prop]\n }\n\n get options(): ISearchFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => searchDataFilter(data, v, this.options)),\n startWith(searchDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { coerceArray } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'\n\nimport { hasProperty, isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\nimport { ITextFilterOptions } from '../data-filter-text/text-filter-options'\n\nexport const DATA_FILTER_TOGGLE_BUTTON: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterToggleButtonsComponent),\n multi: true,\n}\n\nexport interface IToggleButton {\n name: string\n value: string\n comparator?: (value: any, row: any, index: number) => -1 | 0 | 1\n}\n\nexport interface IToggleButtonsFilterOptions extends ITextFilterOptions {\n selectionToggleable: boolean\n multiple: boolean\n buttons: IToggleButton[]\n initialValue?: any\n}\n\nexport const DefaultToggleButtonsFilterOptions: IToggleButtonsFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n multiple: false,\n selectionToggleable: false,\n buttons: [],\n exact: false,\n caseSensitive: false,\n}\n\nexport function toggleButtonsFilter(\n data: any[],\n values: string[],\n options = DefaultToggleButtonsFilterOptions,\n) {\n if (!data || !values) {\n return data\n }\n\n const customComparatorBtns: IToggleButton[] = []\n for (const btn of options.buttons) {\n if (btn.comparator) {\n customComparatorBtns.push(btn)\n }\n }\n\n let _data = data\n for (const val of values) {\n if (val === '') {\n continue\n }\n\n let cmp\n for (const btn of customComparatorBtns) {\n if (btn.value === val) {\n cmp = btn.comparator\n }\n }\n if (cmp) {\n const filtered: any[] = []\n for (let i = 0; i < _data.length; i++) {\n if (cmp(val, _data[i], i) !== -1) {\n filtered.push(_data[i])\n }\n }\n _data = filtered\n } else {\n _data = textDataFilter(_data, val, {\n properties: options.properties,\n omitProperties: options.omitProperties,\n exact: options.exact,\n caseSensitive: options.caseSensitive,\n })\n }\n }\n return _data\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-toggle-buttons',\n templateUrl: './data-filter-toggle-buttons.component.html',\n styleUrls: ['./data-filter-toggle-buttons.component.scss'],\n providers: [DATA_FILTER_TOGGLE_BUTTON],\n standalone: false,\n})\nexport class DataFilterToggleButtonsComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\n\n _control = new UntypedFormControl()\n\n @Input() properties = this._optDefault('properties')\n @Input() omitProperties = this._optDefault('omitProperties')\n @Input() multiple = this._optDefault('multiple')\n @Input() selectionToggleable = this._optDefault('selectionToggleable')\n @Input() buttons = this._optDefault('buttons')\n @Input() exact = this._optDefault('exact')\n @Input() caseSensitive = this._optDefault('caseSensitive')\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n // console.log('_value', _value, this._control.value)\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: IToggleButtonsFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n // tap(v => console.log('v', v)),\n switchMap(() => of(this.filterState())),\n // tap(v => console.log('v2', v)),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (\n this._filterOptions &&\n hasProperty(this._filterOptions, 'initialValue')\n ) {\n this.value = this._optDefault('initialValue')\n }\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultToggleButtonsFilterOptions[prop]\n }\n\n get options(): IToggleButtonsFilterOptions {\n return {\n properties: this.properties,\n omitProperties: this.omitProperties,\n multiple: this.multiple,\n selectionToggleable: this.selectionToggleable,\n buttons: this.buttons,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(\n toggleButtonsFilter(\n data,\n coerceArray(this._control.value),\n this.options,\n ),\n ),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamToggleGroupModule } from '@theseam/ui-common/toggle-group'\n\nimport { THESEAM_DATA_FILTER_DEF } from './data-filter-def'\nimport { DataFilterSearchComponent } from './filters/data-filter-search/data-filter-search.component'\nimport { DataFilterTextComponent } from './filters/data-filter-text/data-filter-text.component'\nimport { DataFilterToggleButtonsComponent } from './filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component'\n\nconst filterComponents = [\n DataFilterSearchComponent,\n DataFilterTextComponent,\n DataFilterToggleButtonsComponent,\n]\n\nconst filterDefProviders = [\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'search', component: DataFilterSearchComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'text', component: DataFilterTextComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: {\n name: 'toggle-buttons',\n component: DataFilterToggleButtonsComponent,\n },\n multi: true,\n },\n]\n\n@NgModule({\n declarations: [...filterComponents],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule,\n ],\n providers: [...filterDefProviders],\n exports: [...filterComponents],\n})\nexport class TheSeamDataFiltersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-data-filters.mjs","sources":["../../../projects/ui-common/data-filters/data-filter.ts","../../../projects/ui-common/data-filters/data-filter-def.ts","../../../projects/ui-common/data-filters/data-filter-container.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-text/data-filter-text.component.html","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-search/data-filter-search.component.html","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.ts","../../../projects/ui-common/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.html","../../../projects/ui-common/data-filters/data-filters.module.ts","../../../projects/ui-common/data-filters/theseam-ui-common-data-filters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { map, startWith, switchMap } from 'rxjs/operators'\n\nexport type DataFilterFunction = <T>(data: T[]) => Observable<T[]>\n\n/**\n * State of the filter that would allow an external operation to apply the\n * filtering.\n *\n * This is primarily for server-side filtering.\n */\nexport interface DataFilterState {\n /**\n * DataFilter's name.\n */\n name: string\n\n /**\n * Anything necessary for an external implementation to apply this filter.\n */\n state: { [key: string]: any }\n}\n\n// TODO: Consider adding something, such as a priority or order, to allow the\n// order the filter functions are called in to be declared/influenced\n// externally. This would allow the filters that will most likely filter out\n// many records quickly to be run before the heavy processing filters.\nexport interface DataFilter {\n /**\n * Name used when referencing filter by string.\n */\n name: string\n\n /**\n * Optional override for the filter name used in `filterState()`.\n *\n * When multiple instances of the same filter type exist on a page, each\n * instance shares the same `name`. Set `filterName` to give an instance a\n * distinct key so that filter-state mappers can differentiate them.\n *\n * If unset, `filterState()` falls back to `name`.\n */\n filterName?: string\n\n /**\n * Unique value to prevent a filter being used more than once if it ends up\n * being registered more than once.\n */\n uid: string\n\n /**\n *\n */\n filterStateChanges: Observable<DataFilterState>\n\n /**\n * Filters the data based on the conditions of the filter.\n */\n filter<T>(data: T[]): Observable<T[]>\n\n /**\n *\n */\n filterState(): DataFilterState\n}\n\nexport const THESEAM_DATA_FILTER = new InjectionToken<DataFilter>(\n 'TheSeamDataFilter',\n)\nexport const THESEAM_DATA_FILTER_OPTIONS = new InjectionToken<object>(\n 'TheSeamDataFilterOptions',\n)\n\nexport function filterOperator<T>(filterFn: DataFilterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(filterFn))\n}\n\nexport function composeDataFilters(filters: DataFilter[]) {\n const filterFunctions = filters.map((f) => filterOperator(f.filter.bind(f)))\n return (source$: Observable<any>) => {\n let src$ = source$\n for (const f of filterFunctions) {\n src$ = src$.pipe(f)\n }\n return src$\n }\n}\n\nexport function composeDataFilterStates(\n filters: DataFilter[],\n): Observable<DataFilterState[]> {\n if (filters.length === 0) {\n return of([])\n }\n\n return combineLatest(\n filters.map((f) =>\n f.filterStateChanges.pipe(\n startWith(undefined),\n map(() => f.filterState()),\n ),\n ),\n )\n}\n\n/** @deprecated Use `DataFilter` instead. */\nexport type IDataFilter = DataFilter\n\n/** @deprecated Use `IDataFilterFunction` instead. */\nexport type IDataFilterFunction = DataFilterFunction\n","import { InjectionToken } from '@angular/core'\n\nimport { IDataFilter } from './data-filter'\n\nexport interface IDataFilterDef<T = any> {\n name: string\n\n /**\n * Component that controls the filter.\n */\n component: IDataFilter\n}\n\nexport const THESEAM_DATA_FILTER_DEF = new InjectionToken<IDataFilterDef[]>(\n 'TheSeamDataFilter',\n)\n","import { InjectionToken } from '@angular/core'\nimport { IDataFilter } from './data-filter'\n\nexport interface DataFilterContainer {\n filters(): IDataFilter[]\n\n addFilter(dataFilter: IDataFilter): void\n\n removeFilter(dataFilter: IDataFilter): void\n}\n\nexport const THESEAM_DATA_FILTER_CONTAINER =\n new InjectionToken<DataFilterContainer>('DataFilterContainer')\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { ITextFilterOptions } from './text-filter-options'\n\nexport const DATA_FILTER_TEXT: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterTextComponent),\n multi: true,\n}\n\nexport const DefaultTextFilterOptions: ITextFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function textDataFilter(\n data: any[],\n text: string,\n options = DefaultTextFilterOptions,\n) {\n if (!data || !text) {\n return data\n }\n\n if (data.length <= 0) {\n return data\n }\n\n let props = options ? options.properties : undefined\n if (!props) {\n props = []\n let keys = Object.keys(data[0])\n if (options && options.omitProperties) {\n keys = keys.filter(\n (key) => !(options.omitProperties || []).find((p) => p === key),\n )\n }\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(data[0], key)) {\n props.push(key)\n }\n }\n }\n\n const filtered: any[] = []\n\n for (const item of data) {\n for (const p of props) {\n let value1 = `${item[p]}`\n let value2 = text\n\n if (!options.caseSensitive) {\n value1 = value1.toLowerCase()\n value2 = value2.toLowerCase()\n }\n\n if (item[p] && value1.indexOf(value2) !== (options.exact ? 0 : -1)) {\n filtered.push(item)\n break\n }\n }\n }\n\n return filtered\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-text',\n templateUrl: './data-filter-text.component.html',\n styleUrls: ['./data-filter-text.component.scss'],\n providers: [DATA_FILTER_TEXT],\n standalone: false,\n})\nexport class DataFilterTextComponent implements OnInit, OnDestroy, IDataFilter {\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'text'\n public readonly uid = `text__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null\n @Input() iconTpl: TemplateRef<HTMLElement> | undefined | null\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ITextFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ITextFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultTextFilterOptions[prop]\n }\n\n get options(): ITextFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => textDataFilter(data, v, this.options)),\n startWith(textDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-text-has-icon]=\"iconTpl\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Text filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n</div>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators'\n\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { SeamIcon } from '@theseam/ui-common/icon'\nimport { isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\n\nimport { ISearchFilterOptions } from './search-filter-options'\n\nexport const DATA_FILTER_SEARCH: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterSearchComponent),\n multi: true,\n}\n\nexport const DefaultSearchFilterOptions: ISearchFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n exact: false,\n caseSensitive: false,\n}\n\nexport function searchDataFilter(\n data: any[],\n values: string,\n options = DefaultSearchFilterOptions,\n) {\n return textDataFilter(data, values, options)\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-search',\n templateUrl: './data-filter-search.component.html',\n styleUrls: ['./data-filter-search.component.scss'],\n providers: [DATA_FILTER_SEARCH],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DataFilterSearchComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n static ngAcceptInputType_exact: BooleanInput\n static ngAcceptInputType_caseSensitive: BooleanInput\n\n public readonly name = 'search'\n public readonly uid = `search__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties: string[] | undefined | null =\n this._optDefault('properties')\n @Input() omitProperties: string[] | undefined | null =\n this._optDefault('omitProperties')\n @Input() @InputBoolean() exact: boolean = this._optDefault('exact')\n @Input() @InputBoolean() caseSensitive: boolean =\n this._optDefault('caseSensitive')\n\n @Input() placeholder: string | undefined | null = 'Search...'\n @Input() icon: SeamIcon | undefined | null = faSearch\n @Input() iconTpl?: TemplateRef<HTMLElement>\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? `${value}` : ''\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: ISearchFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n switchMap(() => of(this.filterState())),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof ISearchFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultSearchFilterOptions[prop]\n }\n\n get options(): ISearchFilterOptions {\n return {\n properties: this.properties ?? undefined,\n omitProperties: this.omitProperties ?? undefined,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => searchDataFilter(data, v, this.options)),\n startWith(searchDataFilter(data, this._control.value, this.options)),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"position-relative\"\n [class.data-filter-search-has-icon]=\"iconTpl || icon\"\n (click)=\"inp.focus()\"\n>\n <label [attr.for]=\"inp.id\" class=\"sr-only\">Search filter</label>\n <input\n seamInput\n #inp=\"seamInput\"\n seamInputSize=\"sm\"\n [formControl]=\"_control\"\n [placeholder]=\"placeholder\"\n />\n <ng-container *ngIf=\"iconTpl; else searchIconTpl\">\n <div class=\"data-filter-search--icon-wrapper\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </div>\n </ng-container>\n <ng-template #searchIconTpl>\n <ng-container *ngIf=\"icon\">\n <div class=\"data-filter-search--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\"></seam-icon>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { coerceArray } from '@angular/cdk/coercion'\nimport {\n Component,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core'\nimport { UntypedFormControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'\n\nimport { hasProperty, isNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport {\n DataFilterState,\n IDataFilter,\n THESEAM_DATA_FILTER,\n THESEAM_DATA_FILTER_OPTIONS,\n} from '../../data-filter'\nimport { THESEAM_DATA_FILTER_CONTAINER } from '../../data-filter-container'\nimport type { DataFilterContainer } from '../../data-filter-container'\nimport { textDataFilter } from '../data-filter-text/data-filter-text.component'\nimport { ITextFilterOptions } from '../data-filter-text/text-filter-options'\n\nexport const DATA_FILTER_TOGGLE_BUTTON: any = {\n provide: THESEAM_DATA_FILTER,\n useExisting: forwardRef(() => DataFilterToggleButtonsComponent),\n multi: true,\n}\n\nexport interface IToggleButton {\n name: string\n value: string\n comparator?: (value: any, row: any, index: number) => -1 | 0 | 1\n}\n\nexport interface IToggleButtonsFilterOptions extends ITextFilterOptions {\n selectionToggleable: boolean\n multiple: boolean\n buttons: IToggleButton[]\n initialValue?: any\n}\n\nexport const DefaultToggleButtonsFilterOptions: IToggleButtonsFilterOptions = {\n properties: undefined,\n omitProperties: undefined,\n multiple: false,\n selectionToggleable: false,\n buttons: [],\n exact: false,\n caseSensitive: false,\n}\n\nexport function toggleButtonsFilter(\n data: any[],\n values: string[],\n options = DefaultToggleButtonsFilterOptions,\n) {\n if (!data || !values) {\n return data\n }\n\n const customComparatorBtns: IToggleButton[] = []\n for (const btn of options.buttons) {\n if (btn.comparator) {\n customComparatorBtns.push(btn)\n }\n }\n\n let _data = data\n for (const val of values) {\n if (val === '') {\n continue\n }\n\n let cmp\n for (const btn of customComparatorBtns) {\n if (btn.value === val) {\n cmp = btn.comparator\n }\n }\n if (cmp) {\n const filtered: any[] = []\n for (let i = 0; i < _data.length; i++) {\n if (cmp(val, _data[i], i) !== -1) {\n filtered.push(_data[i])\n }\n }\n _data = filtered\n } else {\n _data = textDataFilter(_data, val, {\n properties: options.properties,\n omitProperties: options.omitProperties,\n exact: options.exact,\n caseSensitive: options.caseSensitive,\n })\n }\n }\n return _data\n}\n\nlet _uid = 0\n\n@Component({\n selector: 'seam-data-filter-toggle-buttons',\n templateUrl: './data-filter-toggle-buttons.component.html',\n styleUrls: ['./data-filter-toggle-buttons.component.scss'],\n providers: [DATA_FILTER_TOGGLE_BUTTON],\n standalone: false,\n})\nexport class DataFilterToggleButtonsComponent\n implements OnInit, OnDestroy, IDataFilter\n{\n public readonly name = 'toggle-buttons'\n public readonly uid = `toggle-buttons__${_uid++}`\n\n @Input() filterName: string | undefined\n\n _control = new UntypedFormControl()\n\n @Input() properties = this._optDefault('properties')\n @Input() omitProperties = this._optDefault('omitProperties')\n @Input() multiple = this._optDefault('multiple')\n @Input() selectionToggleable = this._optDefault('selectionToggleable')\n @Input() buttons = this._optDefault('buttons')\n @Input() exact = this._optDefault('exact')\n @Input() caseSensitive = this._optDefault('caseSensitive')\n\n @Input()\n set value(value: string | string[]) {\n const _value = !isNullOrUndefined(value) ? coerceArray(value) : undefined\n // console.log('_value', _value, this._control.value)\n if (this._control.value !== _value) {\n this._control.setValue(_value)\n }\n }\n\n public readonly filterStateChanges: Observable<DataFilterState>\n\n constructor(\n @Inject(THESEAM_DATA_FILTER_CONTAINER)\n private _filterContainer: DataFilterContainer,\n @Optional()\n @Inject(THESEAM_DATA_FILTER_OPTIONS)\n private _filterOptions: IToggleButtonsFilterOptions | null,\n ) {\n this.filterStateChanges = this._control.valueChanges.pipe(\n // tap(v => console.log('v', v)),\n switchMap(() => of(this.filterState())),\n // tap(v => console.log('v2', v)),\n shareReplay({ bufferSize: 1, refCount: true }),\n )\n }\n\n ngOnInit() {\n this._filterContainer.addFilter(this)\n if (\n this._filterOptions &&\n hasProperty(this._filterOptions, 'initialValue')\n ) {\n this.value = this._optDefault('initialValue')\n }\n }\n\n ngOnDestroy() {\n this._filterContainer.removeFilter(this)\n }\n\n private _optDefault<K extends keyof IToggleButtonsFilterOptions>(prop: K) {\n if (\n this._filterOptions &&\n Object.prototype.hasOwnProperty.call(this._filterOptions, prop)\n ) {\n return this._filterOptions[prop]\n }\n return DefaultToggleButtonsFilterOptions[prop]\n }\n\n get options(): IToggleButtonsFilterOptions {\n return {\n properties: this.properties,\n omitProperties: this.omitProperties,\n multiple: this.multiple,\n selectionToggleable: this.selectionToggleable,\n buttons: this.buttons,\n exact: this.exact,\n caseSensitive: this.caseSensitive,\n }\n }\n\n public filter<T>(data: T[]): Observable<T[]> {\n return this._control.valueChanges.pipe(\n map((v) => toggleButtonsFilter(data, coerceArray(v), this.options)),\n startWith(\n toggleButtonsFilter(\n data,\n coerceArray(this._control.value),\n this.options,\n ),\n ),\n )\n }\n\n public filterState(): DataFilterState {\n return {\n // id:\n name: this.filterName ?? this.name,\n state: {\n value: this._control.value,\n options: this.options,\n },\n }\n }\n}\n","<div\n class=\"btn-group\"\n role=\"group\"\n aria-label=\"Progress Filter\"\n *ngIf=\"options as opts\"\n [formControl]=\"_control\"\n seamToggleGroup\n [multiple]=\"opts.multiple\"\n [selectionToggleable]=\"opts.selectionToggleable\"\n>\n <ng-container *ngFor=\"let btn of buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm px-4\"\n [seamToggleGroupOption]=\"btn.value\"\n #opt=\"seamToggleGroupOption\"\n [class.btn-lightgray]=\"!opt.selected\"\n [class.btn-primary]=\"opt.selected\"\n (click)=\"opt.selected = !opt.selected\"\n >\n {{ btn.name || btn.value }}\n </button>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamToggleGroupModule } from '@theseam/ui-common/toggle-group'\n\nimport { THESEAM_DATA_FILTER_DEF } from './data-filter-def'\nimport { DataFilterSearchComponent } from './filters/data-filter-search/data-filter-search.component'\nimport { DataFilterTextComponent } from './filters/data-filter-text/data-filter-text.component'\nimport { DataFilterToggleButtonsComponent } from './filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component'\n\nconst filterComponents = [\n DataFilterSearchComponent,\n DataFilterTextComponent,\n DataFilterToggleButtonsComponent,\n]\n\nconst filterDefProviders = [\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'search', component: DataFilterSearchComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: { name: 'text', component: DataFilterTextComponent },\n multi: true,\n },\n {\n provide: THESEAM_DATA_FILTER_DEF,\n useValue: {\n name: 'toggle-buttons',\n component: DataFilterToggleButtonsComponent,\n },\n multi: true,\n },\n]\n\n@NgModule({\n declarations: [...filterComponents],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TheSeamFormFieldModule,\n FontAwesomeModule,\n TheSeamToggleGroupModule,\n TheSeamIconModule,\n ],\n providers: [...filterDefProviders],\n exports: [...filterComponents],\n})\nexport class TheSeamDataFiltersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_uid","i3"],"mappings":"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"}
@@ -1365,9 +1365,61 @@ function fractionalDigitsCount(value) {
1365
1365
  return a[1].length;
1366
1366
  }
1367
1367
 
1368
+ // NOTE: Based on https://www.npmjs.com/package/strip-outer
1369
+ const escapeRegExp$1 = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
1370
+ /**
1371
+ * Strip a substring from the start/end of a string.
1372
+ */
1373
+ function stripOuter(input, substring) {
1374
+ const escaped = escapeRegExp$1(substring);
1375
+ return input.replace(new RegExp(`^${escaped}|${escaped}$`, 'g'), '');
1376
+ }
1377
+
1378
+ // NOTE: Based on https://www.npmjs.com/package/trim-repeated
1379
+ const escapeRegExp = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
1380
+ /**
1381
+ * Trim a consecutively repeated substring: foo--bar---baz → foo-bar-baz.
1382
+ */
1383
+ function trimRepeated(str, target) {
1384
+ return str.replace(new RegExp(`(?:${escapeRegExp(target)}){2,}`, 'g'), target);
1385
+ }
1386
+
1387
+ // NOTE: Mostly based on https://www.npmjs.com/package/filenamify
1388
+ const MAX_FILENAME_LENGTH = 100;
1389
+ // eslint-disable-next-line no-control-regex
1390
+ const reReserved = /[<>:"/\\|?*\x00-\x1F]/g;
1391
+ const reWindowsNames = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i;
1392
+ const reControlChars = /[\u0000-\u001f\u0080-\u009f]/g; // eslint-disable-line no-control-regex
1393
+ const reRelativePath = /^\.+/;
1394
+ const defaultOptions = {
1395
+ replacement: '_',
1396
+ maxLength: MAX_FILENAME_LENGTH,
1397
+ };
1398
+ function sanitizeFilename(filename, options) {
1399
+ const opts = {
1400
+ ...defaultOptions,
1401
+ ...(options || {}),
1402
+ };
1403
+ const replacement = opts.replacement === undefined ? '!' : opts.replacement;
1404
+ if (reReserved.test(replacement) && reControlChars.test(replacement)) {
1405
+ throw new Error('Replacement string cannot contain reserved filename characters');
1406
+ }
1407
+ let s = filename;
1408
+ s = s.replace(reReserved, replacement);
1409
+ s = s.replace(reControlChars, replacement);
1410
+ s = s.replace(reRelativePath, replacement);
1411
+ if (replacement.length > 0) {
1412
+ s = trimRepeated(s, replacement);
1413
+ s = s.length > 1 ? stripOuter(s, replacement) : s;
1414
+ }
1415
+ s = reWindowsNames.test(s) ? s + replacement : s;
1416
+ s = s.slice(0, opts.maxLength);
1417
+ return s;
1418
+ }
1419
+
1368
1420
  /**
1369
1421
  * Generated bundle index. Do not edit.
1370
1422
  */
1371
1423
 
1372
- export { IS_FEATURE_COLLECTION_VALIDATOR_NAME, IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME, MIN_MAX_POINTS_VALIDATOR_NAME, NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME, NO_INNER_RINGS_VALIDATOR_NAME, NO_KINKS_VALIDATOR_NAME, PollingTickerOptions, Refreshable, activatedRoutesWithDataProperty, arrayMoveImmutable, arrayMoveMutable, calcPercentage, closePolygons, coerceFeatureCollection, createPadding, deleteProperties, deleteProperty, fileBufferToBlob, fileBufferToObjectUrl, fileDataFromBuffer, fractionalDigitsCount, geoJsonToArea, getAttribute, getClosestWidgetCdkDrag, getControlName, getControlPath, hasAttribute, hasProperty, hasRequiredControl, isAbsoluteUrl, isEmptyInputValue, isEmptyUrlRoute, isFeatureCollectionValidator, isNullOrUndefined, isNullOrUndefinedOrEmpty, isNumeric, isOnlyGeometryTypes, isOnlyGeometryTypesValidator, leafChildRoute, loadStyle, loadStyleSheet, mapEach, mergePolygons, minMaxPointsValidator, noEmptyFeatureCollectionValidator, noInnerRingsValidator, noKinksValidator, notNullOrUndefined, notNullOrUndefinedOrEmpty, observeControlIsDifferent, observeControlStatus, observeControlValid, observeControlValue, observeControlValueChange, observeQueryList, openBlob, padEnd, padStart, phoneNumberMask, pollingTicker, readFileAsDataUrlAsync, readFileAsync, readGeoFile, routeSnapshotPathFull, routeSnapshotPathRelative, splitMultiPolygons, subscriberCount, tapFirst, toggleAttribute, waitOnConditionAsync, waitOnNonPendingStatus, willHaveDataProp, withoutProperties, withoutProperty, wrapIntoObservable };
1424
+ export { IS_FEATURE_COLLECTION_VALIDATOR_NAME, IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME, MIN_MAX_POINTS_VALIDATOR_NAME, NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME, NO_INNER_RINGS_VALIDATOR_NAME, NO_KINKS_VALIDATOR_NAME, PollingTickerOptions, Refreshable, activatedRoutesWithDataProperty, arrayMoveImmutable, arrayMoveMutable, calcPercentage, closePolygons, coerceFeatureCollection, createPadding, deleteProperties, deleteProperty, fileBufferToBlob, fileBufferToObjectUrl, fileDataFromBuffer, fractionalDigitsCount, geoJsonToArea, getAttribute, getClosestWidgetCdkDrag, getControlName, getControlPath, hasAttribute, hasProperty, hasRequiredControl, isAbsoluteUrl, isEmptyInputValue, isEmptyUrlRoute, isFeatureCollectionValidator, isNullOrUndefined, isNullOrUndefinedOrEmpty, isNumeric, isOnlyGeometryTypes, isOnlyGeometryTypesValidator, leafChildRoute, loadStyle, loadStyleSheet, mapEach, mergePolygons, minMaxPointsValidator, noEmptyFeatureCollectionValidator, noInnerRingsValidator, noKinksValidator, notNullOrUndefined, notNullOrUndefinedOrEmpty, observeControlIsDifferent, observeControlStatus, observeControlValid, observeControlValue, observeControlValueChange, observeQueryList, openBlob, padEnd, padStart, phoneNumberMask, pollingTicker, readFileAsDataUrlAsync, readFileAsync, readGeoFile, routeSnapshotPathFull, routeSnapshotPathRelative, sanitizeFilename, splitMultiPolygons, stripOuter, subscriberCount, tapFirst, toggleAttribute, trimRepeated, waitOnConditionAsync, waitOnNonPendingStatus, willHaveDataProp, withoutProperties, withoutProperty, wrapIntoObservable };
1373
1425
  //# sourceMappingURL=theseam-ui-common-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-utils.mjs","sources":["../../../projects/ui-common/utils/get-attribute.ts","../../../projects/ui-common/utils/has-attribute.ts","../../../projects/ui-common/utils/cdk/get-closest-widget-cdk-drag.ts","../../../projects/ui-common/utils/form/get-control-name.ts","../../../projects/ui-common/utils/form/get-control-path.ts","../../../projects/ui-common/utils/form/observe-control-value.ts","../../../projects/ui-common/utils/form/observe-control-is-different.ts","../../../projects/ui-common/utils/form/wait-on-non-pending-status.ts","../../../projects/ui-common/utils/form/observe-control-status.ts","../../../projects/ui-common/utils/form/observe-control-valid.ts","../../../projects/ui-common/utils/form/observe-control-value-change.ts","../../../projects/ui-common/utils/has-property.ts","../../../projects/ui-common/utils/form/has-required-control.ts","../../../projects/ui-common/utils/form/is-empty-input-value.ts","../../../projects/ui-common/utils/operators/map-each.ts","../../../projects/ui-common/utils/operators/tap-first.ts","../../../projects/ui-common/utils/router/leaf-child-route.ts","../../../projects/ui-common/utils/router/will-have-data-prop.ts","../../../projects/ui-common/utils/router/operators/activated-routes-with-data-property.ts","../../../projects/ui-common/utils/router/route-snapshot-path-relative.ts","../../../projects/ui-common/utils/router/route-snapshot-path-full.ts","../../../projects/ui-common/utils/router/is-empty-url-route.ts","../../../projects/ui-common/utils/geo-json/coerce-feature-collection.ts","../../../projects/ui-common/utils/geo-json/geo-json-to-area.ts","../../../projects/ui-common/utils/geo-json/is-feature-collection.validator.ts","../../../projects/ui-common/utils/geo-json/is-only-geometry-types.ts","../../../projects/ui-common/utils/geo-json/is-only-geometry-types.validator.ts","../../../projects/ui-common/utils/geo-json/merge-polygons.ts","../../../projects/ui-common/utils/not-null-or-undefined.ts","../../../projects/ui-common/utils/geo-json/min-max-points.validator.ts","../../../projects/ui-common/utils/geo-json/no-empty-feature-collection.validator.ts","../../../projects/ui-common/utils/geo-json/no-inner-rings.validator.ts","../../../projects/ui-common/utils/geo-json/no-kinks.validator.ts","../../../projects/ui-common/utils/file-utils.ts","../../../projects/ui-common/utils/obj-utils.ts","../../../projects/ui-common/utils/geo-json/read-geo-file.ts","../../../projects/ui-common/utils/geo-json/split-multi-polygons.ts","../../../projects/ui-common/utils/geo-json/close-polygons.ts","../../../projects/ui-common/utils/array-move.ts","../../../projects/ui-common/utils/calc-percentage.ts","../../../projects/ui-common/utils/toggle-attribute.ts","../../../projects/ui-common/utils/input-masks.ts","../../../projects/ui-common/utils/is-null-or-undefined.ts","../../../projects/ui-common/utils/is-null-or-undefined-or-empty.ts","../../../projects/ui-common/utils/load-style.ts","../../../projects/ui-common/utils/load-style-sheet.ts","../../../projects/ui-common/utils/not-null-or-undefined-or-empty.ts","../../../projects/ui-common/utils/wait-on-condition-async.ts","../../../projects/ui-common/utils/polling-ticker.ts","../../../projects/ui-common/utils/refreshable.ts","../../../projects/ui-common/utils/wrap-into-observable.ts","../../../projects/ui-common/utils/is-absolute-url.ts","../../../projects/ui-common/utils/subscriber-count.ts","../../../projects/ui-common/utils/observe-query-list.ts","../../../projects/ui-common/utils/create-padding.ts","../../../projects/ui-common/utils/pad-end.ts","../../../projects/ui-common/utils/pad-start.ts","../../../projects/ui-common/utils/is-numeric.ts","../../../projects/ui-common/utils/fractional-digits-count.ts","../../../projects/ui-common/utils/theseam-ui-common-utils.ts"],"sourcesContent":["/**\n *\n */\nexport function getAttribute<E extends HTMLElement>(\n element: E,\n name: string,\n): string | null {\n return element.getAttribute(name)\n}\n","/**\n *\n */\nexport function hasAttribute<E extends HTMLElement>(\n element: E,\n name: string,\n): boolean {\n return element.hasAttribute(name)\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop'\nimport { ElementRef } from '@angular/core'\n\nimport { getAttribute } from '../get-attribute'\nimport { hasAttribute } from '../has-attribute'\n\n/**\n * Finds the closest CdkDrag to an element by looking at the DOM.\n * @param element Element relative to which to look for a cdkDrag.\n * @param openDialogs References to the currently available cdkDrag.\n */\nexport function getClosestWidgetCdkDrag(\n element: ElementRef<HTMLElement>,\n dragDirectives: CdkDrag<any>[],\n) {\n let parent: HTMLElement | null = element.nativeElement.parentElement\n\n while (\n parent &&\n !(\n parent.classList.contains('cdk-drag') &&\n hasAttribute(parent, 'data-widget-id')\n )\n ) {\n parent = parent.parentElement\n }\n\n const parentId = parent ? getAttribute(parent, 'data-widget-id') : null\n return parentId\n ? dragDirectives.find(\n (drag) =>\n getAttribute(drag.getRootElement(), 'data-widget-id') === parentId,\n )\n : null\n}\n","import { AbstractControl } from '@angular/forms'\n\n/**\n * Get the name of the control.\n *\n * Example:\n *\n * ```js\n * const group = new FormGroup({\n * name: new Control(),\n * age: new Control()\n * })\n *\n * for (const c of group.controls) {\n * console.log(getControlName(c))\n * }\n *\n * // Output:\n * // >> 'name'\n * // >> 'age'\n * ```\n */\nexport function getControlName(c: AbstractControl): string | null {\n if (!c.parent) {\n return null\n }\n // NOTE: Typed as 'any' because using string for array index is not valid for\n // array index type, but it works and we actually want the index as a string\n // anyway.\n const controls: any = c.parent.controls\n return Object.keys(controls).find((name) => c === controls[name]) || null\n}\n","import { AbstractControl } from '@angular/forms'\n\nimport { getControlName } from './get-control-name'\n\n/**\n * Get the path to a control.\n *\n * The path is built by walking back the `parent` properties until `parent` is\n * `null`.\n *\n * Example:\n *\n * ```js\n * const group = new FormGroup({\n * name: new FormControl(),\n * address: new FormGroup({\n * city: new FormControl(),\n * state: new FormControl()\n * })\n * })\n *\n * const control = group.get('address.city')\n * console.log(getControlPath(control))\n *\n * // Output:\n * >> 'address.city'\n * ```\n *\n */\nexport function getControlPath(\n c: AbstractControl,\n path: string = '',\n): string | null {\n let _path = path\n _path = getControlName(c) + _path\n\n if (c.parent && getControlName(c.parent)) {\n _path = `.${_path}`\n return getControlPath(c.parent, _path)\n } else {\n return _path\n }\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { startWith, switchMap } from 'rxjs/operators'\n\n/**\n * Observe the value of a control.\n */\nexport function observeControlValue<T = any>(\n control: AbstractControl,\n): Observable<T> {\n return of(control).pipe(\n switchMap((_control) =>\n _control.valueChanges.pipe(startWith(_control.value)),\n ),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map } from 'rxjs/operators'\n\nimport { observeControlValue } from './observe-control-value'\n\n/**\n * Observe the changed state of the input value from the time this function is\n * called.\n *\n * When this function is called the value is stored. Each time the control's\n * value changes the value is compared with the initial value. Currenly the\n * values are compared as stringified objects using `JSON.stringify`.\n *\n * TODO: Allow the value compare implementation to be optionally changed.\n */\nexport function observeControlIsDifferent(\n control: AbstractControl,\n): Observable<boolean> {\n const _initial = JSON.stringify(control.value)\n return observeControlValue(control).pipe(\n map((value) => JSON.stringify(value) !== _initial),\n distinctUntilChanged(),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { interval, merge, Observable } from 'rxjs'\nimport { filter, map, mapTo, startWith, take } from 'rxjs/operators'\n\n/**\n * Wait on the status of a form control to not be `'PENDING'`.\n *\n * NOTE: This function is mainly just a work around for an issue where\n * `statusChanges` sometimes emits `'Pending'` without emitting another state\n * when complete. Seems to happen with async validators if the value changes\n * before completing, even if the validator completes(subscription `complete`\n * if observable).\n */\nexport function waitOnNonPendingStatus(\n control: AbstractControl,\n): Observable<string> {\n return merge(\n control.statusChanges,\n interval(30).pipe(\n mapTo(control),\n map((c) => c.status),\n ),\n )\n .pipe(startWith(control.status))\n .pipe(filter((v) => v !== 'PENDING'))\n .pipe(take(1))\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { startWith, switchMap } from 'rxjs/operators'\n\nimport { waitOnNonPendingStatus } from './wait-on-non-pending-status'\n\n/**\n * Observe the status of a control using a work around for status not changing\n * after pending.\n */\nexport function observeControlStatus(\n control: AbstractControl,\n): Observable<string> {\n return of(control).pipe(\n switchMap((_control) =>\n _control.statusChanges\n .pipe(startWith(_control.status))\n .pipe(\n switchMap((status) =>\n status === 'PENDING'\n ? waitOnNonPendingStatus(control).pipe(startWith(status))\n : of(status),\n ),\n ),\n ),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map, pairwise, startWith } from 'rxjs/operators'\n\nimport { observeControlStatus } from './observe-control-status'\n\n/**\n * Observe the valid state of a control.\n *\n * By default `waitOnPending` is false and the control states map to:\n * 'VALID' => true\n * 'INVALID' => false\n * 'PENDING' => false\n *\n * If `waitOnPending` is true the valid result when 'PENDING' remains the same\n * as it was before 'PENDING' until it is no longer 'PENDING'.\n */\nexport function observeControlValid(\n control: AbstractControl,\n waitOnPending: boolean = false,\n): Observable<boolean> {\n if (waitOnPending) {\n return observeControlStatus(control)\n .pipe(distinctUntilChanged())\n .pipe(startWith(undefined))\n .pipe(pairwise())\n .pipe(map((v) => ({ previous: v[0], current: v[1] })))\n .pipe(map((v) => (v.current === 'PENDING' ? v.previous : v.current)))\n .pipe(map((status) => status === 'VALID'))\n } else {\n return observeControlStatus(control)\n .pipe(distinctUntilChanged())\n .pipe(map((status) => status === 'VALID'))\n }\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { map, pairwise, startWith } from 'rxjs/operators'\n\nimport { observeControlValue } from './observe-control-value'\n\n/**\n * Observe the value of a control with the previous.\n */\nexport function observeControlValueChange(\n control: AbstractControl,\n): Observable<{ previous: any; current: any }> {\n return observeControlValue(control).pipe(\n startWith(undefined),\n pairwise(),\n map((v) => ({ previous: v[0], current: v[1] })),\n )\n}\n","// Source: https://stackoverflow.com/a/59361497/7926298\nexport function hasProperty<T extends object, K extends keyof T>(\n style: T,\n prop: K,\n // ): style is T & { [P in K]-?: Exclude<T[K], undefined> } {\n): style is T & Required<Record<K, Exclude<T[K], undefined>>> {\n return (\n Object.prototype.hasOwnProperty.call(style, prop) &&\n style[prop] !== undefined\n )\n}\n","import { AbstractControl } from '@angular/forms'\n\nimport { hasProperty } from '../has-property'\n\n/**\n * Check if control has a required control.\n *\n * ----------------------------------------------------------------------------\n * NOTE: I am not sure about if this should be used or not.\n *\n * From my understanding this assumes that all the validators do not have some\n * unexpected side-effect from being called like this. It could be argued that\n * the validator is flawed and should be fixed if that is the case, but I am not\n * convinced that is correct yet.\n *\n * An example that I think is valid for this argument: A FormControl configured\n * to only check validators when a specific condition happens, because of a\n * reason that it has to do a long process. In that situation should this\n * function be smart enough to consider that or is it up to the validator to\n * consider this function possibly being used.\n *\n * This seems to assume the required validator will always be a synchronous\n * validator. That is a valid assumption if thinking about showing a required\n * state in the UI, but a FormControl does not neccessarily have to be used in\n * UI. So, I think it could be valid to have an async validator that uses the\n * name `required` for it error, but I do not have a good example, so I could be\n * wrong.\n * ----------------------------------------------------------------------------\n *\n * Source: https://gist.github.com/jsdevtom/5589af349a395b37e699b67417ef025b\n * @experimental\n * @ignore\n */\nexport function hasRequiredControl(abstractControl: AbstractControl): boolean {\n if (abstractControl.validator) {\n const validator = abstractControl.validator({} as AbstractControl)\n if (validator && validator.required) {\n return true\n }\n }\n\n const _abstractControl: any = abstractControl\n if (hasProperty(_abstractControl, 'controls')) {\n for (const controlName in _abstractControl.controls) {\n if (_abstractControl.controls[controlName]) {\n if (hasRequiredControl(_abstractControl.controls[controlName])) {\n return true\n }\n }\n }\n }\n\n return false\n}\n","// Source: https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts#L16\nexport function isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0\n}\n","import { from, Observable } from 'rxjs'\nimport { map, switchMap, toArray } from 'rxjs/operators'\n\nexport function mapEach<T, R>(predicate: (value: T) => R) {\n return (source$: Observable<T[]>): Observable<R[]> =>\n source$.pipe(\n switchMap((v) =>\n from(v).pipe(\n map((m) => predicate(m)),\n toArray(),\n ),\n ),\n )\n}\n","import { Observable } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Like tap, but only calls predicate on first emission.\n */\nexport function tapFirst<T>(predicate: (value: T) => void) {\n let _initialized = false\n return (source$: Observable<T>): Observable<T> =>\n source$.pipe(\n tap((v) => {\n if (!_initialized) {\n predicate(v)\n _initialized = true\n }\n }),\n )\n}\n","import { ActivatedRoute } from '@angular/router'\n\nexport function leafChildRoute(activatedRoute: ActivatedRoute): ActivatedRoute {\n let route = activatedRoute\n while (route.firstChild) {\n route = route.firstChild\n }\n return route\n}\n","import { ActivatedRoute } from '@angular/router'\n\nfunction hasRouteConfigDataProp(route: ActivatedRoute, prop: string): boolean {\n return !!(\n route &&\n route.routeConfig &&\n route.routeConfig.data &&\n Object.prototype.hasOwnProperty.call(route.routeConfig.data, prop)\n )\n}\n\nfunction hasRouteConfigResolveProp(\n route: ActivatedRoute,\n prop: string,\n): boolean {\n return !!(\n route &&\n route.routeConfig &&\n route.routeConfig.resolve &&\n Object.prototype.hasOwnProperty.call(route.routeConfig.resolve, prop)\n )\n}\n\nexport function willHaveDataProp(route: ActivatedRoute, prop: string): boolean {\n return (\n hasRouteConfigDataProp(route, prop) ||\n hasRouteConfigResolveProp(route, prop)\n )\n}\n","import { ActivatedRoute, Data } from '@angular/router'\nimport { combineLatest, Observable } from 'rxjs'\nimport { map, switchMap } from 'rxjs/operators'\n\nimport { leafChildRoute } from '../leaf-child-route'\nimport { willHaveDataProp } from '../will-have-data-prop'\n\nexport interface IActivatedRouteWithData {\n route: ActivatedRoute\n data: Data\n}\n\nexport function activatedRoutesWithDataProperty(\n prop: string,\n mustHaveDefined: boolean = false,\n) {\n const _data = (r: ActivatedRoute) =>\n r.data.pipe(map((_d) => ({ route: r, data: _d })))\n return (\n source$: Observable<ActivatedRoute>,\n ): Observable<IActivatedRouteWithData[]> =>\n source$.pipe(\n map((route) => leafChildRoute(route)),\n map((route) => route.pathFromRoot),\n switchMap((routes) => combineLatest(routes.map((r) => _data(r)))),\n map((v) =>\n v.filter((_v) => Object.prototype.hasOwnProperty.call(_v.data, prop)),\n ),\n map((v) =>\n mustHaveDefined\n ? v.filter((_v) => willHaveDataProp(_v.route, prop))\n : v,\n ),\n )\n}\n","import { ActivatedRouteSnapshot } from '@angular/router'\n\nexport function routeSnapshotPathRelative(route: ActivatedRouteSnapshot) {\n return route.url.reduce(\n (path, urlSegment) => `${path}/${urlSegment.path}`,\n '',\n )\n}\n","import { ActivatedRouteSnapshot } from '@angular/router'\n\nimport { routeSnapshotPathRelative } from './route-snapshot-path-relative'\n\nexport function routeSnapshotPathFull(route: ActivatedRouteSnapshot) {\n return route.pathFromRoot.reduce(\n (path, _route) => path + routeSnapshotPathRelative(_route),\n '',\n )\n}\n","import { ActivatedRoute } from '@angular/router'\n\nexport function isEmptyUrlRoute(activatedRoute: ActivatedRoute): boolean {\n return activatedRoute.snapshot.url.length === 0\n}\n","import { FeatureCollection } from 'geojson'\n\n// TODO: Make this more thorough and maybe error on unrecognized.\nexport function coerceFeatureCollection(value: any): FeatureCollection | null {\n return parseValue(value)\n}\n\n/**\n * Parses the value to a FeatureCollection object or null if it is not a\n * FeatureCollection.\n */\nfunction parseValue(value: any): FeatureCollection | null {\n const _value = parseStringValue(value)\n if (isFeatureCollectionValue(_value)) {\n return _value\n }\n return null\n}\n\n/**\n * Tries to parse the value to an object, in case the value is a stringified\n * json.\n */\nfunction parseStringValue(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value)\n } catch {\n return null\n }\n }\n\n return value\n}\n\n/**\n * Checks if the value is a FeatureCollection.\n *\n * NOTE: This is not a thorough FeatureCollection check. It only checks that the\n * value is an object resembling a GeoJSON.FeatureCollection, enough for the\n * validator.\n */\nfunction isFeatureCollectionValue(value: any): value is FeatureCollection {\n if (value === undefined || value === null) {\n return false\n }\n return value.type === 'FeatureCollection' && Array.isArray(value.features)\n}\n","import area from '@turf/area'\nimport { AreaUnits, convertArea } from '@turf/helpers'\nimport {\n GeoJSON,\n Feature,\n FeatureCollection,\n Geometry,\n GeoJsonProperties,\n} from 'geojson'\n\n/**\n *\n */\nexport function geoJsonToArea(\n geoJson:\n | GeoJSON\n | Feature<any, GeoJsonProperties>\n | FeatureCollection<any, GeoJsonProperties>\n | Geometry,\n units: AreaUnits = 'acres',\n): number {\n const areaMSqr = area(geoJson as any)\n const acres = convertArea(areaMSqr, 'meters', units)\n return acres\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const IS_FEATURE_COLLECTION_VALIDATOR_NAME = 'is-feature-collection'\n\nexport function isFeatureCollectionValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return {\n [IS_FEATURE_COLLECTION_VALIDATOR_NAME]: {\n reason: `Must be a FeatureCollection.`,\n },\n }\n }\n\n return null\n }\n}\n","import { FeatureCollection, Geometry } from 'geojson'\n\n/**\n * Returns true if the GeoJSON is only specifies geometries.\n */\nexport function isOnlyGeometryTypes(\n featureCollection: FeatureCollection,\n types: Geometry['type'][],\n): boolean {\n if (types.length === 0) {\n if (featureCollection.features.length > 0) {\n // If no types are specified then there can't be any specified types found.\n return false\n } else {\n // If no types are specified and there are no features then there is\n // nothing to say a specified type isn't found.\n return true\n }\n }\n\n for (const f of featureCollection.features) {\n if (types.indexOf(f.geometry.type) === -1) {\n return false\n }\n }\n\n return true\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { Geometry } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\nimport { isOnlyGeometryTypes } from './is-only-geometry-types'\n\nexport const IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME = 'is-only-geometry-types'\n\nexport function isOnlyGeometryTypesValidator(\n types: Geometry['type'][],\n): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n // If there isn't a FeatureCollection then there is nothing to validate.\n // Use 'isFeatureCollection' to validate the value is a FeatureCollection.\n return null\n }\n\n if (!isOnlyGeometryTypes(value, types)) {\n const typesNotAllowed = value.features\n .map((f) => f.geometry.type)\n .filter((t) => types.indexOf(t) === -1)\n const distinctTypesNotAllowed = Array.from(new Set(typesNotAllowed))\n return {\n [IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME]: {\n reason: `Only geometry type${types.length === 1 ? '' : 's'} ${types.join(', ')} allowed.`,\n notAllowedGeometryTypesFound: distinctTypesNotAllowed,\n },\n }\n }\n\n return null\n }\n}\n","import { Feature, FeatureCollection, MultiPolygon } from 'geojson'\n\n/**\n * Merge Polygon and MultiPolygon geometries into a single MultiPolygon. Any\n * properties, other than 'coordinates', of the Polygons and MultiPolygons will\n * be lost.\n *\n * NOTE: Polygons and MultPolygons in a GeometryCollection will not be merged.\n */\nexport function mergePolygons(featureCollection: FeatureCollection): void {\n const multiPolygon: MultiPolygon = {\n type: 'MultiPolygon',\n coordinates: [],\n }\n\n for (let i = 0; i < featureCollection.features.length; i++) {\n const f = featureCollection.features[i]\n if (f.geometry.type === 'Polygon') {\n multiPolygon.coordinates.push(f.geometry.coordinates)\n featureCollection.features.splice(i, 1)\n i--\n } else if (f.geometry.type === 'MultiPolygon') {\n multiPolygon.coordinates.push(...f.geometry.coordinates)\n featureCollection.features.splice(i, 1)\n i--\n }\n }\n\n if (multiPolygon.coordinates.length > 0) {\n const feature: Feature = {\n type: 'Feature',\n geometry: multiPolygon,\n properties: {},\n }\n featureCollection.features.push(feature)\n }\n}\n","export function notNullOrUndefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { notNullOrUndefined } from '../not-null-or-undefined'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const MIN_MAX_POINTS_VALIDATOR_NAME = 'min-max-points'\n\nexport function minMaxPointsValidator(\n min: number | undefined = 3,\n max?: number | undefined,\n): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n if (collectionViolatesMinMax(value, min, max)) {\n const reason = notNullOrUndefined(max)\n ? `A polygon must have between ${min} and ${max} points.`\n : `A polygon must have at least ${min} points.`\n return {\n [MIN_MAX_POINTS_VALIDATOR_NAME]: {\n reason,\n },\n }\n }\n return null\n }\n}\n\n/**\n * Checks if a FeatureCollection contains any geometries with an incomplete polygon.\n *\n * NOTE: Does not consider GeometryCollection.\n */\nfunction collectionViolatesMinMax(\n featureCollection: FeatureCollection,\n min: number,\n max: number | undefined,\n): boolean {\n for (const f of featureCollection.features) {\n if (f.geometry.type === 'Polygon') {\n if (polygonViolatesMinMax(f.geometry.coordinates[0].length, min, max)) {\n return true\n }\n } else if (f.geometry.type === 'MultiPolygon') {\n for (const coords of f.geometry.coordinates) {\n if (polygonViolatesMinMax(coords[0].length, min, max)) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nfunction polygonViolatesMinMax(\n coordinateLength: number,\n min: number,\n max: number | undefined,\n): boolean {\n if (\n coordinateLength < min ||\n (notNullOrUndefined(max) && max > min && coordinateLength > max)\n ) {\n return true\n }\n\n return false\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME =\n 'no-empty-feature-collection'\n\nexport function noEmptyFeatureCollectionValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n if (value.features.length === 0) {\n return {\n [NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME]: {\n reason: `FeatureCollection must have a value.`,\n },\n }\n }\n\n return null\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const NO_INNER_RINGS_VALIDATOR_NAME = 'no-inner-rings'\n\n/**\n * Validates that a FeatureCollection does not contain any Polygon with inner\n * rings(\"holes\").\n *\n * NOTE: Only considers Polygon and MultiPolygon. Does not consider\n * GeometryCollection.\n */\nexport function noInnerRingsValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n // If there isn't a FeatureCollection then there is nothing to validate.\n // Use 'isFeatureCollection' to validate the value is a FeatureCollection.\n return null\n }\n\n if (hasInnerRing(value)) {\n return {\n [NO_INNER_RINGS_VALIDATOR_NAME]: {\n reason: `A shape cannot have an inner ring.`,\n },\n }\n }\n\n return null\n }\n}\n\n/**\n * Checks if a FeatureCollection contains any geometries with an inner\n * ring(\"hole\").\n *\n * NOTE: Does not consider GeometryCollection.\n */\nfunction hasInnerRing(featureCollection: FeatureCollection): boolean {\n for (const f of featureCollection.features) {\n // The spec says the right-hand rule must be followed, but also specifies\n // that tools should not reject polygons that do not follow the right-hand\n // rule. It does specify that the first ring must be the exterior ring and\n // the others must be the interior. So, this should be safe to just check\n // if there are multiple rings, instead of checking their winding orders.\n //\n // Polygon spec: https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6\n if (f.geometry.type === 'Polygon') {\n if (f.geometry.coordinates.length > 1) {\n return true\n }\n } else if (f.geometry.type === 'MultiPolygon') {\n for (const coords of f.geometry.coordinates) {\n if (coords.length > 1) {\n return true\n }\n }\n }\n }\n\n return false\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport kinks from '@turf/kinks'\nimport { Feature, FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nconst kinkableGeometryTypes = [\n 'LineString',\n 'MultiLineString',\n 'MultiPolygon',\n 'Polygon',\n]\n\nexport const NO_KINKS_VALIDATOR_NAME = 'no-kinks'\n\nexport function noKinksValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n const kinksFound: { feature: Feature; kinks: FeatureCollection }[] = []\n for (const f of value.features) {\n if (kinkableGeometryTypes.indexOf(f.geometry.type) !== -1) {\n const _kinks = kinks(f as any)\n if (_kinks.features.length > 0) {\n kinksFound.push({\n feature: f,\n kinks: _kinks,\n })\n }\n }\n }\n\n if (kinksFound.length > 0) {\n return {\n [NO_KINKS_VALIDATOR_NAME]: {\n reason: 'Paths should not intersect themselves.',\n featuresWithKink: kinksFound,\n },\n }\n }\n\n return null\n }\n}\n","import { fileTypeFromBuffer } from 'file-type'\n\nexport function readFileAsync(file: Blob): Promise<ArrayBuffer | null> {\n return new Promise<ArrayBuffer | null>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n resolve(reader.result as ArrayBuffer | null)\n }\n reader.readAsArrayBuffer(file)\n })\n}\n\nexport async function readFileAsDataUrlAsync(\n file: Blob,\n): Promise<string | null> {\n return new Promise<string | null>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n resolve(reader.result as string | null)\n }\n reader.readAsDataURL(file)\n })\n}\n\n/** Coerce a buffer to an ArrayBuffer suitable for use as a BlobPart. */\nfunction toArrayBuffer(buffer: Uint8Array | ArrayBuffer): ArrayBuffer {\n if (buffer instanceof ArrayBuffer) {\n return buffer\n }\n // Slice to get an owned ArrayBuffer, avoiding SharedArrayBuffer TS issues with BlobPart.\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n ) as ArrayBuffer\n}\n\nexport async function fileBufferToBlob(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<Blob> {\n const fType = await fileTypeFromBuffer(buffer)\n const mime = fType ? fType.mime : defaultMime\n return new Blob([toArrayBuffer(buffer)], { type: mime })\n}\n\nexport async function fileBufferToObjectUrl(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<string> {\n const file = await fileBufferToBlob(buffer, defaultMime)\n return URL.createObjectURL(file)\n}\n\nexport interface IFileData {\n ext?: string\n mime?: string\n blob: Blob\n}\n\nexport async function fileDataFromBuffer(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<IFileData> {\n const fType = await fileTypeFromBuffer(buffer)\n const ext = fType?.ext\n const mime = fType ? fType.mime : defaultMime\n const blob = new Blob([toArrayBuffer(buffer)], { type: mime })\n return { ext, mime, blob }\n}\n\nexport function openBlob(blob: Blob, target?: string, filename?: string) {\n const url = URL.createObjectURL(blob)\n const win = window.open(url, target)\n // TODO: Consider if always setting opener to null is to restrictive\n // if (win && target && target.toLowerCase() === '_blank') {\n // win.opener = null\n // }\n}\n","/** Returns object without property */\nexport function withoutProperty<T, K extends keyof T>(\n obj: T,\n propName: K,\n): Pick<T, Exclude<keyof T, K>> {\n const { [propName]: _, ...without } = obj\n return without\n}\n\n/** Returns object without properties */\nexport function withoutProperties<T, K extends keyof T>(\n obj: T,\n propNames: K[],\n): Pick<T, Exclude<keyof T, K>> {\n let without: any = obj\n for (const propName of propNames) {\n without = withoutProperty(without, propName)\n }\n return without\n}\n\n/** Delete property of object */\nexport function deleteProperty<T extends object, K extends keyof T>(\n obj: T,\n propName: K,\n): void {\n if (Object.prototype.hasOwnProperty.call(obj, propName)) {\n delete obj[propName]\n }\n}\n\n/** Delete properties of object */\nexport function deleteProperties<T extends object, K extends keyof T>(\n obj: T,\n propNames: K[],\n): void {\n for (const propName of propNames) {\n deleteProperty(obj, propName)\n }\n}\n","import { fileTypeFromBuffer } from 'file-type'\nimport { FeatureCollection } from 'geojson'\nimport shp from 'shpjs'\n\nimport { readFileAsync } from '../file-utils'\nimport { withoutProperty } from '../obj-utils'\n\n/**\n * Reads a File, or buffer of file content, in GeoJSON or ESRI Shapefile format\n * and returns a GeoJSON `FeatureCollection`.\n */\nexport async function readGeoFile(\n fileOrBuffer: File | ArrayBuffer,\n): Promise<FeatureCollection> {\n const buffer = await coerceToArrayBuffer(fileOrBuffer)\n const fType = await fileTypeFromBuffer(buffer)\n\n if (fType?.ext === 'shp') {\n return parseShpFile(buffer)\n } else if (fType?.mime === 'application/zip') {\n return parseShpZip(buffer)\n }\n\n return parseGeoJson(buffer)\n}\n\nasync function coerceToArrayBuffer(\n fileOrBuffer: File | ArrayBuffer,\n): Promise<ArrayBuffer> {\n if (fileOrBuffer instanceof File) {\n const arrBuf = await readFileAsync(fileOrBuffer)\n if (arrBuf === null) {\n throw new Error('Could not read file.')\n }\n return arrBuf\n }\n\n return fileOrBuffer\n}\n\nasync function parseShpFile(buffer: ArrayBuffer): Promise<FeatureCollection> {\n const geometries = await shp.parseShp(buffer, undefined as any)\n const featCollection: FeatureCollection = {\n type: 'FeatureCollection',\n features: geometries.map((geom) => ({\n type: 'Feature',\n geometry: geom,\n properties: {},\n })),\n }\n return featCollection\n}\n\nasync function parseShpZip(buffer: ArrayBuffer): Promise<FeatureCollection> {\n let featCollection = await shp.parseZip(buffer, undefined as any)\n if (Array.isArray(featCollection)) {\n if (featCollection.length === 0) {\n throw Error(`Shape data not found.`)\n } else if (featCollection.length > 1) {\n throw Error(`Multiple shape files not supported.`)\n }\n featCollection = featCollection[0]\n }\n return withoutProperty(featCollection, 'fileName')\n}\n\nfunction parseGeoJson(buffer: ArrayBuffer): FeatureCollection {\n const json = JSON.parse(new TextDecoder().decode(buffer))\n\n if (json?.type === 'FeatureCollection' && Array.isArray(json?.features)) {\n return json as FeatureCollection\n }\n\n throw Error(`Unable to parse as GeoJSON.`)\n}\n","import { Feature, FeatureCollection, MultiPolygon, Polygon } from 'geojson'\n\n/**\n * Split all MultiPolygon into Polygon. Any properties, other than\n * 'coordinates', of the MultiPolygons will be lost.\n *\n * NOTE: MultiPolygons in a GeometryCollection will not be split.\n */\nexport function splitMultiPolygons(featureCollection: FeatureCollection): void {\n for (let i = 0; i < featureCollection.features.length; i++) {\n if (featureCollection.features[i]) {\n const geometry = featureCollection.features[i].geometry\n if (geometry.type === 'MultiPolygon') {\n const features = splitMultPolygon(geometry).map(\n (p) =>\n ({\n type: 'Feature',\n geometry: p,\n properties: {},\n }) as Feature,\n )\n featureCollection.features.splice(i, 1, ...features)\n i += Math.max(features.length - 1, 0)\n }\n }\n }\n}\n\nfunction splitMultPolygon(multiPolygon: MultiPolygon): Polygon[] {\n return multiPolygon.coordinates.map((c) => ({\n type: 'Polygon',\n coordinates: c,\n }))\n}\n","import { Feature, FeatureCollection, MultiPolygon, Polygon } from 'geojson'\n\n/**\n * Close all polygons in the GeoJSON.\n *\n * Google Maps requires that polygons be closed, but not all libraries have that\n * requirement. This may add redundent points to the GeoJSON, but it will ensure\n * that the GeoJSON is valid for Google Maps.\n */\nexport function closePolygons(\n geoJson: FeatureCollection | Feature | Polygon | MultiPolygon,\n) {\n if (geoJson.type === 'FeatureCollection') {\n for (const f of geoJson.features) {\n closePolygonsFeature(f)\n }\n } else if (geoJson.type === 'Feature') {\n closePolygonsFeature(geoJson)\n }\n}\n\nfunction closePolygonsFeature(feature: Feature): void {\n if (feature.geometry.type === 'Polygon') {\n closePolygon(feature.geometry)\n } else if (feature.geometry.type === 'MultiPolygon') {\n closeMultiPolygon(feature.geometry)\n }\n}\n\nfunction closePolygon(polygon: Polygon): void {\n for (const c of polygon.coordinates) {\n c.push(c[0])\n }\n}\n\nfunction closeMultiPolygon(multiPolygon: MultiPolygon): void {\n for (const p of multiPolygon.coordinates) {\n for (const c of p) {\n c.push(c[0])\n }\n }\n}\n","// Based on source: https://github.com/sindresorhus/array-move/blob/main/index.js\n\n/**\n Moves the item to the new position in the input array. Useful for huge arrays\n where absolute performance is needed.\n\n @param array - The array to modify.\n @param fromIndex - The index of item to move. If negative, it will begin that\n many elements from the end.\n @param toIndex - The index of where to move the item. If negative, it will\n begin that many elements from the end.\n @example\n ```\n import { arrayMoveMutable } from '@theseam/ui-common/utils';\n\n const input = ['a', 'b', 'c'];\n arrayMoveMutable(input, 1, 2);\n console.log(input);\n //=> ['a', 'c', 'b']\n ```\n*/\nexport function arrayMoveMutable(\n array: unknown[],\n fromIndex: number,\n toIndex: number,\n): void {\n const startIndex = fromIndex < 0 ? array.length + fromIndex : fromIndex\n\n if (startIndex >= 0 && startIndex < array.length) {\n const endIndex = toIndex < 0 ? array.length + toIndex : toIndex\n\n const [item] = array.splice(fromIndex, 1)\n array.splice(endIndex, 0, item)\n }\n}\n\n/**\n Clones the given `array`, moves the item to a new position in the new array,\n and then returns the new array. The given `array` is not mutated.\n\n @param array - The array with the item to move.\n @param fromIndex - The index of item to move. If negative, it will begin that\n many elements from the end.\n @param toIndex - The index of where to move the item. If negative, it will\n begin that many elements from the end.\n @returns A new array with the item moved to the new position.\n @example\n ```\n import { arrayMoveImmutable } from '@theseam/ui-common/utils';\n\n const input = ['a', 'b', 'c'];\n const array1 = arrayMoveImmutable(input, 1, 2);\n console.log(array1);\n //=> ['a', 'c', 'b']\n\n const array2 = arrayMoveImmutable(input, -1, 0);\n console.log(array2);\n //=> ['c', 'a', 'b']\n\n const array3 = arrayMoveImmutable(input, -2, -3);\n console.log(array3);\n //=> ['b', 'a', 'c']\n ```\n*/\nexport function arrayMoveImmutable<ValueType>(\n array: readonly ValueType[],\n fromIndex: number,\n toIndex: number,\n): ValueType[] {\n const newArray = [...array]\n arrayMoveMutable(newArray, fromIndex, toIndex)\n return newArray\n}\n","export function calcPercentage(total: number, n: number) {\n return total && total > 0 ? (n / total) * 100 : 0\n}\n","/**\n * Polyfil for `Element.toggleAttribute`\n *\n * Toggles a value without a value. Useful for attributes, such as `disabled`,\n * `readonly`, and `hidden`, that only needs to exist on the `Element` without\n * requiring a value.\n *\n * Most browsers natively support this feature, but IE, which we still try to\n * support for at least the main parts of the app, has \"Unknown\" support of this\n * feature. Until IE support is dropped this polyfil should be used to toggle an\n * attribute.\n *\n * Source:\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute#Polyfill\n */\nexport function toggleAttribute(\n element: HTMLElement,\n name: string,\n force: boolean,\n): boolean {\n let _force = force\n if (_force !== void 0) {\n _force = !!_force\n }\n\n if (element.getAttribute(name) !== null) {\n if (_force) {\n return true\n }\n\n element.removeAttribute(name)\n return false\n } else {\n if (_force === false) {\n return false\n }\n\n element.setAttribute(name, '')\n return true\n }\n}\n","export const phoneNumberMask = [\n '(',\n /[1-9]/,\n /\\d/,\n /\\d/,\n ')',\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n '-',\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n]\n","export function isNullOrUndefined<T>(\n value: T | null | undefined,\n): value is null | undefined {\n return value === undefined || value === null\n}\n","export function isNullOrUndefinedOrEmpty(\n value: string | null | undefined,\n trim: boolean = true,\n): value is string | null | undefined {\n return (\n value === undefined ||\n value === null ||\n (trim ? value.trim() : value).length === 0\n )\n}\n","export function loadStyle(content: string): Promise<HTMLStyleElement> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('style')\n s.onload = () => resolve(s)\n s.onerror = (e) => {\n document.head.removeChild(s)\n reject(e)\n }\n s.innerHTML = content\n document.head.appendChild(s)\n })\n}\n","export function loadStyleSheet(path: string): Promise<HTMLLinkElement> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('link')\n s.onload = () => resolve(s)\n s.onerror = (e) => {\n document.head.removeChild(s)\n reject(e)\n }\n s.rel = 'stylesheet'\n s.href = path\n document.head.appendChild(s)\n })\n}\n","export function notNullOrUndefinedOrEmpty(\n value: string | null | undefined,\n trim: boolean = true,\n): value is string {\n return (\n value !== null &&\n value !== undefined &&\n (trim ? value.trim() : value).length > 0\n )\n}\n","export async function waitOnConditionAsync(\n condition: () => boolean,\n timeoutDuration: number = -1,\n throwOnTimeout: boolean = true,\n): Promise<any> {\n const timeStart: any = new Date()\n\n const _waitFunc = (callbackFn: (boolean: boolean) => any) => {\n let conditionSuccess = false\n\n if (condition()) {\n callbackFn(true)\n conditionSuccess = true\n }\n\n if (!conditionSuccess) {\n const timeNow: any = new Date()\n const duration = timeNow - timeStart\n if (timeoutDuration > -1 && duration > timeoutDuration) {\n if (throwOnTimeout) {\n throw new Error('Timed out waiting on condition.')\n } else {\n callbackFn(false)\n }\n }\n\n setTimeout(() => {\n _waitFunc(callbackFn)\n }, 30)\n }\n }\n\n return new Promise((resolve, reject) => {\n const fn = (b: boolean) => {\n resolve(b)\n }\n _waitFunc(fn)\n })\n}\n","import { isObservable, Observable, Subscriber, Subscription } from 'rxjs'\n\nclass IntervalTimer {\n private _intervalTime: number\n private _intervalId: number | null = null\n\n constructor(\n private _callback: () => void,\n intervalTime: number,\n startOnInit: boolean = true,\n ) {\n this._intervalTime = intervalTime\n if (startOnInit) {\n this.start()\n }\n }\n\n set intervalTime(time: number) {\n this._intervalTime = time\n }\n\n public start(): void {\n if (this._intervalId === null) {\n this._intervalId = window.setInterval(() => {\n this._callback()\n }, this._intervalTime)\n }\n }\n\n public stop(): void {\n if (this._intervalId !== null) {\n clearInterval(this._intervalId)\n this._intervalId = null\n }\n }\n\n public reset(newIntervalTime?: number): void {\n if (newIntervalTime) {\n this.intervalTime = newIntervalTime\n }\n this.stop()\n this.start()\n }\n}\n\nexport type PollingActionFn<R> = () => R | Observable<R>\n\nexport class PollingTickerOptions {\n emitOnInit?: boolean = true\n}\n\n// TODO: Simplify complexity.\n\n/**\n * Call an action and emits the result to its subscriber on an interval or when\n * ticker emits. When the ticker emits, the interval time will reset.\n *\n * When subscribed to, the action will be called and emitted right away unless\n * the `emitOnInit` option is set to false.\n */\nexport function pollingTicker<R>(\n action: PollingActionFn<R>,\n pollingInterval?: number,\n ticker?: Observable<number | void>,\n options?: PollingTickerOptions,\n): Observable<R> {\n return new Observable((subscriber: Subscriber<R>) => {\n const _opts = { ...new PollingTickerOptions(), ...(options || {}) }\n\n let timer: IntervalTimer | null = null\n let actionSub: Subscription | null = null\n let tickerSub: Subscription | null = null\n\n try {\n const handleAction = () => {\n if (timer) {\n timer.stop()\n }\n\n const actionResult = action()\n\n if (isObservable(actionResult)) {\n if (actionSub) {\n actionSub.unsubscribe()\n }\n actionSub = actionResult.subscribe(\n (v: R) => {\n subscriber.next(v)\n if (timer) {\n timer.reset()\n }\n },\n (err) => {\n subscriber.error(err)\n },\n () => {\n actionSub = null\n if (timer) {\n timer.start()\n }\n },\n )\n } else {\n subscriber.next(actionResult)\n }\n if (timer) {\n timer.start()\n }\n }\n\n if (_opts.emitOnInit) {\n handleAction()\n }\n\n if (pollingInterval) {\n timer = new IntervalTimer(() => {\n handleAction()\n }, pollingInterval)\n }\n\n if (ticker) {\n tickerSub = ticker.subscribe((newPollingInterval) => {\n if (newPollingInterval && timer) {\n timer.stop()\n if (newPollingInterval) {\n timer.intervalTime = newPollingInterval\n }\n }\n handleAction()\n if (timer) {\n timer.reset()\n }\n })\n }\n } catch (err) {\n subscriber.error(err)\n }\n\n return () => {\n if (timer) {\n timer.stop()\n }\n if (actionSub) {\n actionSub.unsubscribe()\n }\n if (tickerSub) {\n tickerSub.unsubscribe()\n }\n }\n })\n}\n","import { BehaviorSubject, isObservable, Observable, Subject } from 'rxjs'\nimport {\n distinctUntilChanged,\n mapTo,\n publishReplay,\n refCount,\n shareReplay,\n skip,\n take,\n tap,\n} from 'rxjs/operators'\n\nimport { tapFirst } from './operators/tap-first'\nimport { pollingTicker } from './polling-ticker'\n\nexport class Refreshable<T> {\n private _initialized = false\n private _pollingInterval = new BehaviorSubject<number>(0)\n private _ticker = new Subject<void>()\n private _pending = new BehaviorSubject<boolean>(false)\n\n public data$: Observable<T>\n public pending$: Observable<boolean>\n\n constructor(action: () => T | Observable<T>, pollingInterval?: number) {\n if (pollingInterval !== null && pollingInterval !== undefined) {\n this._pollingInterval.next(pollingInterval)\n }\n\n this.pending$ = this._pending\n .asObservable()\n .pipe(distinctUntilChanged(), shareReplay(1))\n\n this.data$ = pollingTicker(\n this._actionHandler(action),\n pollingInterval,\n this._ticker,\n ).pipe(\n tapFirst(() => (this._initialized = true)),\n publishReplay(),\n refCount(),\n )\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n /**\n * Intercepts the action call to monitor pending state\n */\n private _actionHandler = (action: () => T | Observable<T>) => {\n return () => {\n this._pending.next(true)\n\n const actionResult = action()\n if (isObservable(actionResult)) {\n return actionResult.pipe(\n tap(() => {\n this._pending.next(false)\n }),\n )\n } else {\n this._pending.next(true)\n return actionResult\n }\n }\n }\n\n /**\n * Selects the data observable\n */\n public select(refresh?: boolean): Observable<T> {\n if (refresh && this._initialized && !this._pending.value) {\n this._ticker.next()\n }\n return this.data$\n }\n\n public refresh(): Observable<void> {\n let result$: Observable<any>\n\n if (this._initialized) {\n // TODO: Add a test and maybe refactor this to be more clear. It worked in\n // my manual tests, but there may be some situations where this doesn't\n // work, since the ticker isn't the only way to trigger a refresh. Right\n // now it should be fine, but if an async operator is added to be run\n // each time `data$` is subscribed to, then this could fail if the data\n // emits one extra time before the ticker is triggered.\n let _polled = false\n result$ = this.data$.pipe(\n tap((_) => !_polled && (_polled = true) && this._ticker.next()),\n skip(1),\n )\n } else {\n result$ = this.data$\n }\n\n return result$.pipe(take(1), mapTo(undefined))\n }\n}\n","import { from, isObservable, Observable } from 'rxjs'\n\nexport function wrapIntoObservable<T>(\n value: T | Promise<T> | Observable<T>,\n): Observable<T> {\n if (isObservable(value)) {\n return value\n }\n\n return from(Promise.resolve(value))\n}\n","/**\n * Explaination:\n * ^ - beginning of the string\n * (?: - beginning of a non-captured group\n * [a-z]+ - any character of 'a' to 'z' 1 or more times\n * : - string (colon character)\n * )? - end of the non-captured group. Group appearing 0 or 1 times\n * // - string (two forward slash characters)\n * 'i' - non case-sensitive flag\n *\n * source: https://stackoverflow.com/a/19709846\n */\nconst IS_ABSOLUTE_URL_REGEX = new RegExp('^(?:[a-z]+:)?//', 'i')\n\nexport function isAbsoluteUrl(url: string): boolean {\n return IS_ABSOLUTE_URL_REGEX.test(url)\n}\n","import { Observable, Subscriber } from 'rxjs'\n\nexport type SubscriberCountChangedFn = (\n description: string,\n count: number,\n reason: 'subscribed' | 'unsubscribed',\n) => void\n\n/**\n * This is just for helping debug observables that aren't being unsubscribed\n * from correctly.\n *\n * If description is 'foo' then you can check the how many observers are\n * subscribed with the expression `__subscriberCounts['foo']`. In a debugger you\n * can add the expression to the \"Watch\" expressions or in Chrome Devtools\n * Console you can add it to the live expressions(Add live expressions by\n * clicking the eye the the left of the Console filter input).\n */\nexport function subscriberCount<T>(\n sourceObservable: Observable<T>,\n description: string,\n countChangedFn: SubscriberCountChangedFn | undefined | null = logOnChange,\n) {\n let counter = 0\n return new Observable((subscriber: Subscriber<T>) => {\n const subscription = sourceObservable.subscribe(subscriber)\n counter++\n if (countChangedFn !== undefined && countChangedFn !== null) {\n countChangedFn(description, counter, 'subscribed')\n }\n setGlobalSubscriberCount(description, counter)\n\n return () => {\n subscription.unsubscribe()\n counter--\n if (countChangedFn !== undefined && countChangedFn !== null) {\n countChangedFn(description, counter, 'unsubscribed')\n }\n setGlobalSubscriberCount(description, counter)\n }\n })\n}\n\nconst logOnChange: SubscriberCountChangedFn = (\n description: string,\n count: number,\n reason: 'subscribed' | 'unsubscribed',\n) => {\n // eslint-disable-next-line no-console\n console.log(`${description} subscriptions: ${count} [${reason}]`)\n}\n\nfunction getGlobalSubscriberCounts(): { [description: string]: number } {\n const w = window as any\n if (w.__subscriberCounts === undefined || w.__subscriberCounts === null) {\n w.__subscriberCounts = {}\n }\n return w.__subscriberCounts\n}\n\nfunction setGlobalSubscriberCount(description: string, count: number): void {\n getGlobalSubscriberCounts()[description] = count\n}\n","import { QueryList } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { map, startWith } from 'rxjs/operators'\n\nexport function observeQueryList<T>(\n queryList: QueryList<T>,\n emitCurrentValue = true,\n): Observable<T[]> {\n return queryList.changes.pipe(\n startWith(queryList),\n map((v) => v.toArray() as T[]),\n )\n}\n","export function createPadding(len: number, chars: string): string {\n // if (chars.length <= len) {\n // return chars\n // }\n\n if (chars.length === 0) {\n throw Error(`Padding characters must be at least 1 char length.`)\n }\n\n let str = chars\n while (str.length < len) {\n str += chars\n }\n\n if (str.length > len) {\n str = str.slice(0, len)\n }\n\n return str\n}\n","import { createPadding } from './create-padding'\n\nexport function padEnd(\n stringToPad: string,\n paddingLength: number | undefined = 0,\n paddingChars: string | undefined = ' ',\n): string {\n const strLength = paddingLength ? stringToPad.length : 0\n\n if (!paddingLength || strLength >= paddingLength) {\n return stringToPad\n }\n\n return stringToPad + createPadding(paddingLength - strLength, paddingChars)\n}\n","import { createPadding } from './create-padding'\n\nexport function padStart(\n stringToPad: string,\n paddingLength: number | undefined = 0,\n paddingChars: string | undefined = ' ',\n): string {\n const strLength = paddingLength ? stringToPad.length : 0\n\n if (!paddingLength || strLength >= paddingLength) {\n return stringToPad\n }\n\n return createPadding(paddingLength - strLength, paddingChars) + stringToPad\n}\n","export function isNumeric(value: any): boolean {\n return !isNaN(Number(value) - parseFloat(value))\n}\n","import { isNumeric } from './is-numeric'\n\n/**\n * Returns the number of fractional digits.\n *\n * NOTE: This is intended for input validation, so trailing 0's will be included\n * in the total. Also, localization is not considered, so '.' is assumed to be\n * the fractional separator.\n */\nexport function fractionalDigitsCount(value: string): number | null {\n if (!isNumeric(value)) {\n return null\n }\n\n const a = value.split('.')\n if (a.length !== 2) {\n return null\n }\n\n return a[1].length\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-utils.mjs","sources":["../../../projects/ui-common/utils/get-attribute.ts","../../../projects/ui-common/utils/has-attribute.ts","../../../projects/ui-common/utils/cdk/get-closest-widget-cdk-drag.ts","../../../projects/ui-common/utils/form/get-control-name.ts","../../../projects/ui-common/utils/form/get-control-path.ts","../../../projects/ui-common/utils/form/observe-control-value.ts","../../../projects/ui-common/utils/form/observe-control-is-different.ts","../../../projects/ui-common/utils/form/wait-on-non-pending-status.ts","../../../projects/ui-common/utils/form/observe-control-status.ts","../../../projects/ui-common/utils/form/observe-control-valid.ts","../../../projects/ui-common/utils/form/observe-control-value-change.ts","../../../projects/ui-common/utils/has-property.ts","../../../projects/ui-common/utils/form/has-required-control.ts","../../../projects/ui-common/utils/form/is-empty-input-value.ts","../../../projects/ui-common/utils/operators/map-each.ts","../../../projects/ui-common/utils/operators/tap-first.ts","../../../projects/ui-common/utils/router/leaf-child-route.ts","../../../projects/ui-common/utils/router/will-have-data-prop.ts","../../../projects/ui-common/utils/router/operators/activated-routes-with-data-property.ts","../../../projects/ui-common/utils/router/route-snapshot-path-relative.ts","../../../projects/ui-common/utils/router/route-snapshot-path-full.ts","../../../projects/ui-common/utils/router/is-empty-url-route.ts","../../../projects/ui-common/utils/geo-json/coerce-feature-collection.ts","../../../projects/ui-common/utils/geo-json/geo-json-to-area.ts","../../../projects/ui-common/utils/geo-json/is-feature-collection.validator.ts","../../../projects/ui-common/utils/geo-json/is-only-geometry-types.ts","../../../projects/ui-common/utils/geo-json/is-only-geometry-types.validator.ts","../../../projects/ui-common/utils/geo-json/merge-polygons.ts","../../../projects/ui-common/utils/not-null-or-undefined.ts","../../../projects/ui-common/utils/geo-json/min-max-points.validator.ts","../../../projects/ui-common/utils/geo-json/no-empty-feature-collection.validator.ts","../../../projects/ui-common/utils/geo-json/no-inner-rings.validator.ts","../../../projects/ui-common/utils/geo-json/no-kinks.validator.ts","../../../projects/ui-common/utils/file-utils.ts","../../../projects/ui-common/utils/obj-utils.ts","../../../projects/ui-common/utils/geo-json/read-geo-file.ts","../../../projects/ui-common/utils/geo-json/split-multi-polygons.ts","../../../projects/ui-common/utils/geo-json/close-polygons.ts","../../../projects/ui-common/utils/array-move.ts","../../../projects/ui-common/utils/calc-percentage.ts","../../../projects/ui-common/utils/toggle-attribute.ts","../../../projects/ui-common/utils/input-masks.ts","../../../projects/ui-common/utils/is-null-or-undefined.ts","../../../projects/ui-common/utils/is-null-or-undefined-or-empty.ts","../../../projects/ui-common/utils/load-style.ts","../../../projects/ui-common/utils/load-style-sheet.ts","../../../projects/ui-common/utils/not-null-or-undefined-or-empty.ts","../../../projects/ui-common/utils/wait-on-condition-async.ts","../../../projects/ui-common/utils/polling-ticker.ts","../../../projects/ui-common/utils/refreshable.ts","../../../projects/ui-common/utils/wrap-into-observable.ts","../../../projects/ui-common/utils/is-absolute-url.ts","../../../projects/ui-common/utils/subscriber-count.ts","../../../projects/ui-common/utils/observe-query-list.ts","../../../projects/ui-common/utils/create-padding.ts","../../../projects/ui-common/utils/pad-end.ts","../../../projects/ui-common/utils/pad-start.ts","../../../projects/ui-common/utils/is-numeric.ts","../../../projects/ui-common/utils/fractional-digits-count.ts","../../../projects/ui-common/utils/strip-outer.ts","../../../projects/ui-common/utils/trim-repeated.ts","../../../projects/ui-common/utils/sanitize-filename.ts","../../../projects/ui-common/utils/theseam-ui-common-utils.ts"],"sourcesContent":["/**\n *\n */\nexport function getAttribute<E extends HTMLElement>(\n element: E,\n name: string,\n): string | null {\n return element.getAttribute(name)\n}\n","/**\n *\n */\nexport function hasAttribute<E extends HTMLElement>(\n element: E,\n name: string,\n): boolean {\n return element.hasAttribute(name)\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop'\nimport { ElementRef } from '@angular/core'\n\nimport { getAttribute } from '../get-attribute'\nimport { hasAttribute } from '../has-attribute'\n\n/**\n * Finds the closest CdkDrag to an element by looking at the DOM.\n * @param element Element relative to which to look for a cdkDrag.\n * @param openDialogs References to the currently available cdkDrag.\n */\nexport function getClosestWidgetCdkDrag(\n element: ElementRef<HTMLElement>,\n dragDirectives: CdkDrag<any>[],\n) {\n let parent: HTMLElement | null = element.nativeElement.parentElement\n\n while (\n parent &&\n !(\n parent.classList.contains('cdk-drag') &&\n hasAttribute(parent, 'data-widget-id')\n )\n ) {\n parent = parent.parentElement\n }\n\n const parentId = parent ? getAttribute(parent, 'data-widget-id') : null\n return parentId\n ? dragDirectives.find(\n (drag) =>\n getAttribute(drag.getRootElement(), 'data-widget-id') === parentId,\n )\n : null\n}\n","import { AbstractControl } from '@angular/forms'\n\n/**\n * Get the name of the control.\n *\n * Example:\n *\n * ```js\n * const group = new FormGroup({\n * name: new Control(),\n * age: new Control()\n * })\n *\n * for (const c of group.controls) {\n * console.log(getControlName(c))\n * }\n *\n * // Output:\n * // >> 'name'\n * // >> 'age'\n * ```\n */\nexport function getControlName(c: AbstractControl): string | null {\n if (!c.parent) {\n return null\n }\n // NOTE: Typed as 'any' because using string for array index is not valid for\n // array index type, but it works and we actually want the index as a string\n // anyway.\n const controls: any = c.parent.controls\n return Object.keys(controls).find((name) => c === controls[name]) || null\n}\n","import { AbstractControl } from '@angular/forms'\n\nimport { getControlName } from './get-control-name'\n\n/**\n * Get the path to a control.\n *\n * The path is built by walking back the `parent` properties until `parent` is\n * `null`.\n *\n * Example:\n *\n * ```js\n * const group = new FormGroup({\n * name: new FormControl(),\n * address: new FormGroup({\n * city: new FormControl(),\n * state: new FormControl()\n * })\n * })\n *\n * const control = group.get('address.city')\n * console.log(getControlPath(control))\n *\n * // Output:\n * >> 'address.city'\n * ```\n *\n */\nexport function getControlPath(\n c: AbstractControl,\n path: string = '',\n): string | null {\n let _path = path\n _path = getControlName(c) + _path\n\n if (c.parent && getControlName(c.parent)) {\n _path = `.${_path}`\n return getControlPath(c.parent, _path)\n } else {\n return _path\n }\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { startWith, switchMap } from 'rxjs/operators'\n\n/**\n * Observe the value of a control.\n */\nexport function observeControlValue<T = any>(\n control: AbstractControl,\n): Observable<T> {\n return of(control).pipe(\n switchMap((_control) =>\n _control.valueChanges.pipe(startWith(_control.value)),\n ),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map } from 'rxjs/operators'\n\nimport { observeControlValue } from './observe-control-value'\n\n/**\n * Observe the changed state of the input value from the time this function is\n * called.\n *\n * When this function is called the value is stored. Each time the control's\n * value changes the value is compared with the initial value. Currenly the\n * values are compared as stringified objects using `JSON.stringify`.\n *\n * TODO: Allow the value compare implementation to be optionally changed.\n */\nexport function observeControlIsDifferent(\n control: AbstractControl,\n): Observable<boolean> {\n const _initial = JSON.stringify(control.value)\n return observeControlValue(control).pipe(\n map((value) => JSON.stringify(value) !== _initial),\n distinctUntilChanged(),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { interval, merge, Observable } from 'rxjs'\nimport { filter, map, mapTo, startWith, take } from 'rxjs/operators'\n\n/**\n * Wait on the status of a form control to not be `'PENDING'`.\n *\n * NOTE: This function is mainly just a work around for an issue where\n * `statusChanges` sometimes emits `'Pending'` without emitting another state\n * when complete. Seems to happen with async validators if the value changes\n * before completing, even if the validator completes(subscription `complete`\n * if observable).\n */\nexport function waitOnNonPendingStatus(\n control: AbstractControl,\n): Observable<string> {\n return merge(\n control.statusChanges,\n interval(30).pipe(\n mapTo(control),\n map((c) => c.status),\n ),\n )\n .pipe(startWith(control.status))\n .pipe(filter((v) => v !== 'PENDING'))\n .pipe(take(1))\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable, of } from 'rxjs'\nimport { startWith, switchMap } from 'rxjs/operators'\n\nimport { waitOnNonPendingStatus } from './wait-on-non-pending-status'\n\n/**\n * Observe the status of a control using a work around for status not changing\n * after pending.\n */\nexport function observeControlStatus(\n control: AbstractControl,\n): Observable<string> {\n return of(control).pipe(\n switchMap((_control) =>\n _control.statusChanges\n .pipe(startWith(_control.status))\n .pipe(\n switchMap((status) =>\n status === 'PENDING'\n ? waitOnNonPendingStatus(control).pipe(startWith(status))\n : of(status),\n ),\n ),\n ),\n )\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map, pairwise, startWith } from 'rxjs/operators'\n\nimport { observeControlStatus } from './observe-control-status'\n\n/**\n * Observe the valid state of a control.\n *\n * By default `waitOnPending` is false and the control states map to:\n * 'VALID' => true\n * 'INVALID' => false\n * 'PENDING' => false\n *\n * If `waitOnPending` is true the valid result when 'PENDING' remains the same\n * as it was before 'PENDING' until it is no longer 'PENDING'.\n */\nexport function observeControlValid(\n control: AbstractControl,\n waitOnPending: boolean = false,\n): Observable<boolean> {\n if (waitOnPending) {\n return observeControlStatus(control)\n .pipe(distinctUntilChanged())\n .pipe(startWith(undefined))\n .pipe(pairwise())\n .pipe(map((v) => ({ previous: v[0], current: v[1] })))\n .pipe(map((v) => (v.current === 'PENDING' ? v.previous : v.current)))\n .pipe(map((status) => status === 'VALID'))\n } else {\n return observeControlStatus(control)\n .pipe(distinctUntilChanged())\n .pipe(map((status) => status === 'VALID'))\n }\n}\n","import { AbstractControl } from '@angular/forms'\nimport { Observable } from 'rxjs'\nimport { map, pairwise, startWith } from 'rxjs/operators'\n\nimport { observeControlValue } from './observe-control-value'\n\n/**\n * Observe the value of a control with the previous.\n */\nexport function observeControlValueChange(\n control: AbstractControl,\n): Observable<{ previous: any; current: any }> {\n return observeControlValue(control).pipe(\n startWith(undefined),\n pairwise(),\n map((v) => ({ previous: v[0], current: v[1] })),\n )\n}\n","// Source: https://stackoverflow.com/a/59361497/7926298\nexport function hasProperty<T extends object, K extends keyof T>(\n style: T,\n prop: K,\n // ): style is T & { [P in K]-?: Exclude<T[K], undefined> } {\n): style is T & Required<Record<K, Exclude<T[K], undefined>>> {\n return (\n Object.prototype.hasOwnProperty.call(style, prop) &&\n style[prop] !== undefined\n )\n}\n","import { AbstractControl } from '@angular/forms'\n\nimport { hasProperty } from '../has-property'\n\n/**\n * Check if control has a required control.\n *\n * ----------------------------------------------------------------------------\n * NOTE: I am not sure about if this should be used or not.\n *\n * From my understanding this assumes that all the validators do not have some\n * unexpected side-effect from being called like this. It could be argued that\n * the validator is flawed and should be fixed if that is the case, but I am not\n * convinced that is correct yet.\n *\n * An example that I think is valid for this argument: A FormControl configured\n * to only check validators when a specific condition happens, because of a\n * reason that it has to do a long process. In that situation should this\n * function be smart enough to consider that or is it up to the validator to\n * consider this function possibly being used.\n *\n * This seems to assume the required validator will always be a synchronous\n * validator. That is a valid assumption if thinking about showing a required\n * state in the UI, but a FormControl does not neccessarily have to be used in\n * UI. So, I think it could be valid to have an async validator that uses the\n * name `required` for it error, but I do not have a good example, so I could be\n * wrong.\n * ----------------------------------------------------------------------------\n *\n * Source: https://gist.github.com/jsdevtom/5589af349a395b37e699b67417ef025b\n * @experimental\n * @ignore\n */\nexport function hasRequiredControl(abstractControl: AbstractControl): boolean {\n if (abstractControl.validator) {\n const validator = abstractControl.validator({} as AbstractControl)\n if (validator && validator.required) {\n return true\n }\n }\n\n const _abstractControl: any = abstractControl\n if (hasProperty(_abstractControl, 'controls')) {\n for (const controlName in _abstractControl.controls) {\n if (_abstractControl.controls[controlName]) {\n if (hasRequiredControl(_abstractControl.controls[controlName])) {\n return true\n }\n }\n }\n }\n\n return false\n}\n","// Source: https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts#L16\nexport function isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0\n}\n","import { from, Observable } from 'rxjs'\nimport { map, switchMap, toArray } from 'rxjs/operators'\n\nexport function mapEach<T, R>(predicate: (value: T) => R) {\n return (source$: Observable<T[]>): Observable<R[]> =>\n source$.pipe(\n switchMap((v) =>\n from(v).pipe(\n map((m) => predicate(m)),\n toArray(),\n ),\n ),\n )\n}\n","import { Observable } from 'rxjs'\nimport { tap } from 'rxjs/operators'\n\n/**\n * Like tap, but only calls predicate on first emission.\n */\nexport function tapFirst<T>(predicate: (value: T) => void) {\n let _initialized = false\n return (source$: Observable<T>): Observable<T> =>\n source$.pipe(\n tap((v) => {\n if (!_initialized) {\n predicate(v)\n _initialized = true\n }\n }),\n )\n}\n","import { ActivatedRoute } from '@angular/router'\n\nexport function leafChildRoute(activatedRoute: ActivatedRoute): ActivatedRoute {\n let route = activatedRoute\n while (route.firstChild) {\n route = route.firstChild\n }\n return route\n}\n","import { ActivatedRoute } from '@angular/router'\n\nfunction hasRouteConfigDataProp(route: ActivatedRoute, prop: string): boolean {\n return !!(\n route &&\n route.routeConfig &&\n route.routeConfig.data &&\n Object.prototype.hasOwnProperty.call(route.routeConfig.data, prop)\n )\n}\n\nfunction hasRouteConfigResolveProp(\n route: ActivatedRoute,\n prop: string,\n): boolean {\n return !!(\n route &&\n route.routeConfig &&\n route.routeConfig.resolve &&\n Object.prototype.hasOwnProperty.call(route.routeConfig.resolve, prop)\n )\n}\n\nexport function willHaveDataProp(route: ActivatedRoute, prop: string): boolean {\n return (\n hasRouteConfigDataProp(route, prop) ||\n hasRouteConfigResolveProp(route, prop)\n )\n}\n","import { ActivatedRoute, Data } from '@angular/router'\nimport { combineLatest, Observable } from 'rxjs'\nimport { map, switchMap } from 'rxjs/operators'\n\nimport { leafChildRoute } from '../leaf-child-route'\nimport { willHaveDataProp } from '../will-have-data-prop'\n\nexport interface IActivatedRouteWithData {\n route: ActivatedRoute\n data: Data\n}\n\nexport function activatedRoutesWithDataProperty(\n prop: string,\n mustHaveDefined: boolean = false,\n) {\n const _data = (r: ActivatedRoute) =>\n r.data.pipe(map((_d) => ({ route: r, data: _d })))\n return (\n source$: Observable<ActivatedRoute>,\n ): Observable<IActivatedRouteWithData[]> =>\n source$.pipe(\n map((route) => leafChildRoute(route)),\n map((route) => route.pathFromRoot),\n switchMap((routes) => combineLatest(routes.map((r) => _data(r)))),\n map((v) =>\n v.filter((_v) => Object.prototype.hasOwnProperty.call(_v.data, prop)),\n ),\n map((v) =>\n mustHaveDefined\n ? v.filter((_v) => willHaveDataProp(_v.route, prop))\n : v,\n ),\n )\n}\n","import { ActivatedRouteSnapshot } from '@angular/router'\n\nexport function routeSnapshotPathRelative(route: ActivatedRouteSnapshot) {\n return route.url.reduce(\n (path, urlSegment) => `${path}/${urlSegment.path}`,\n '',\n )\n}\n","import { ActivatedRouteSnapshot } from '@angular/router'\n\nimport { routeSnapshotPathRelative } from './route-snapshot-path-relative'\n\nexport function routeSnapshotPathFull(route: ActivatedRouteSnapshot) {\n return route.pathFromRoot.reduce(\n (path, _route) => path + routeSnapshotPathRelative(_route),\n '',\n )\n}\n","import { ActivatedRoute } from '@angular/router'\n\nexport function isEmptyUrlRoute(activatedRoute: ActivatedRoute): boolean {\n return activatedRoute.snapshot.url.length === 0\n}\n","import { FeatureCollection } from 'geojson'\n\n// TODO: Make this more thorough and maybe error on unrecognized.\nexport function coerceFeatureCollection(value: any): FeatureCollection | null {\n return parseValue(value)\n}\n\n/**\n * Parses the value to a FeatureCollection object or null if it is not a\n * FeatureCollection.\n */\nfunction parseValue(value: any): FeatureCollection | null {\n const _value = parseStringValue(value)\n if (isFeatureCollectionValue(_value)) {\n return _value\n }\n return null\n}\n\n/**\n * Tries to parse the value to an object, in case the value is a stringified\n * json.\n */\nfunction parseStringValue(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value)\n } catch {\n return null\n }\n }\n\n return value\n}\n\n/**\n * Checks if the value is a FeatureCollection.\n *\n * NOTE: This is not a thorough FeatureCollection check. It only checks that the\n * value is an object resembling a GeoJSON.FeatureCollection, enough for the\n * validator.\n */\nfunction isFeatureCollectionValue(value: any): value is FeatureCollection {\n if (value === undefined || value === null) {\n return false\n }\n return value.type === 'FeatureCollection' && Array.isArray(value.features)\n}\n","import area from '@turf/area'\nimport { AreaUnits, convertArea } from '@turf/helpers'\nimport {\n GeoJSON,\n Feature,\n FeatureCollection,\n Geometry,\n GeoJsonProperties,\n} from 'geojson'\n\n/**\n *\n */\nexport function geoJsonToArea(\n geoJson:\n | GeoJSON\n | Feature<any, GeoJsonProperties>\n | FeatureCollection<any, GeoJsonProperties>\n | Geometry,\n units: AreaUnits = 'acres',\n): number {\n const areaMSqr = area(geoJson as any)\n const acres = convertArea(areaMSqr, 'meters', units)\n return acres\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const IS_FEATURE_COLLECTION_VALIDATOR_NAME = 'is-feature-collection'\n\nexport function isFeatureCollectionValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return {\n [IS_FEATURE_COLLECTION_VALIDATOR_NAME]: {\n reason: `Must be a FeatureCollection.`,\n },\n }\n }\n\n return null\n }\n}\n","import { FeatureCollection, Geometry } from 'geojson'\n\n/**\n * Returns true if the GeoJSON is only specifies geometries.\n */\nexport function isOnlyGeometryTypes(\n featureCollection: FeatureCollection,\n types: Geometry['type'][],\n): boolean {\n if (types.length === 0) {\n if (featureCollection.features.length > 0) {\n // If no types are specified then there can't be any specified types found.\n return false\n } else {\n // If no types are specified and there are no features then there is\n // nothing to say a specified type isn't found.\n return true\n }\n }\n\n for (const f of featureCollection.features) {\n if (types.indexOf(f.geometry.type) === -1) {\n return false\n }\n }\n\n return true\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { Geometry } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\nimport { isOnlyGeometryTypes } from './is-only-geometry-types'\n\nexport const IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME = 'is-only-geometry-types'\n\nexport function isOnlyGeometryTypesValidator(\n types: Geometry['type'][],\n): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n // If there isn't a FeatureCollection then there is nothing to validate.\n // Use 'isFeatureCollection' to validate the value is a FeatureCollection.\n return null\n }\n\n if (!isOnlyGeometryTypes(value, types)) {\n const typesNotAllowed = value.features\n .map((f) => f.geometry.type)\n .filter((t) => types.indexOf(t) === -1)\n const distinctTypesNotAllowed = Array.from(new Set(typesNotAllowed))\n return {\n [IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME]: {\n reason: `Only geometry type${types.length === 1 ? '' : 's'} ${types.join(', ')} allowed.`,\n notAllowedGeometryTypesFound: distinctTypesNotAllowed,\n },\n }\n }\n\n return null\n }\n}\n","import { Feature, FeatureCollection, MultiPolygon } from 'geojson'\n\n/**\n * Merge Polygon and MultiPolygon geometries into a single MultiPolygon. Any\n * properties, other than 'coordinates', of the Polygons and MultiPolygons will\n * be lost.\n *\n * NOTE: Polygons and MultPolygons in a GeometryCollection will not be merged.\n */\nexport function mergePolygons(featureCollection: FeatureCollection): void {\n const multiPolygon: MultiPolygon = {\n type: 'MultiPolygon',\n coordinates: [],\n }\n\n for (let i = 0; i < featureCollection.features.length; i++) {\n const f = featureCollection.features[i]\n if (f.geometry.type === 'Polygon') {\n multiPolygon.coordinates.push(f.geometry.coordinates)\n featureCollection.features.splice(i, 1)\n i--\n } else if (f.geometry.type === 'MultiPolygon') {\n multiPolygon.coordinates.push(...f.geometry.coordinates)\n featureCollection.features.splice(i, 1)\n i--\n }\n }\n\n if (multiPolygon.coordinates.length > 0) {\n const feature: Feature = {\n type: 'Feature',\n geometry: multiPolygon,\n properties: {},\n }\n featureCollection.features.push(feature)\n }\n}\n","export function notNullOrUndefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { notNullOrUndefined } from '../not-null-or-undefined'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const MIN_MAX_POINTS_VALIDATOR_NAME = 'min-max-points'\n\nexport function minMaxPointsValidator(\n min: number | undefined = 3,\n max?: number | undefined,\n): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n if (collectionViolatesMinMax(value, min, max)) {\n const reason = notNullOrUndefined(max)\n ? `A polygon must have between ${min} and ${max} points.`\n : `A polygon must have at least ${min} points.`\n return {\n [MIN_MAX_POINTS_VALIDATOR_NAME]: {\n reason,\n },\n }\n }\n return null\n }\n}\n\n/**\n * Checks if a FeatureCollection contains any geometries with an incomplete polygon.\n *\n * NOTE: Does not consider GeometryCollection.\n */\nfunction collectionViolatesMinMax(\n featureCollection: FeatureCollection,\n min: number,\n max: number | undefined,\n): boolean {\n for (const f of featureCollection.features) {\n if (f.geometry.type === 'Polygon') {\n if (polygonViolatesMinMax(f.geometry.coordinates[0].length, min, max)) {\n return true\n }\n } else if (f.geometry.type === 'MultiPolygon') {\n for (const coords of f.geometry.coordinates) {\n if (polygonViolatesMinMax(coords[0].length, min, max)) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nfunction polygonViolatesMinMax(\n coordinateLength: number,\n min: number,\n max: number | undefined,\n): boolean {\n if (\n coordinateLength < min ||\n (notNullOrUndefined(max) && max > min && coordinateLength > max)\n ) {\n return true\n }\n\n return false\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME =\n 'no-empty-feature-collection'\n\nexport function noEmptyFeatureCollectionValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n if (value.features.length === 0) {\n return {\n [NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME]: {\n reason: `FeatureCollection must have a value.`,\n },\n }\n }\n\n return null\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport { FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nexport const NO_INNER_RINGS_VALIDATOR_NAME = 'no-inner-rings'\n\n/**\n * Validates that a FeatureCollection does not contain any Polygon with inner\n * rings(\"holes\").\n *\n * NOTE: Only considers Polygon and MultiPolygon. Does not consider\n * GeometryCollection.\n */\nexport function noInnerRingsValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n // If there isn't a FeatureCollection then there is nothing to validate.\n // Use 'isFeatureCollection' to validate the value is a FeatureCollection.\n return null\n }\n\n if (hasInnerRing(value)) {\n return {\n [NO_INNER_RINGS_VALIDATOR_NAME]: {\n reason: `A shape cannot have an inner ring.`,\n },\n }\n }\n\n return null\n }\n}\n\n/**\n * Checks if a FeatureCollection contains any geometries with an inner\n * ring(\"hole\").\n *\n * NOTE: Does not consider GeometryCollection.\n */\nfunction hasInnerRing(featureCollection: FeatureCollection): boolean {\n for (const f of featureCollection.features) {\n // The spec says the right-hand rule must be followed, but also specifies\n // that tools should not reject polygons that do not follow the right-hand\n // rule. It does specify that the first ring must be the exterior ring and\n // the others must be the interior. So, this should be safe to just check\n // if there are multiple rings, instead of checking their winding orders.\n //\n // Polygon spec: https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6\n if (f.geometry.type === 'Polygon') {\n if (f.geometry.coordinates.length > 1) {\n return true\n }\n } else if (f.geometry.type === 'MultiPolygon') {\n for (const coords of f.geometry.coordinates) {\n if (coords.length > 1) {\n return true\n }\n }\n }\n }\n\n return false\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms'\n\nimport kinks from '@turf/kinks'\nimport { Feature, FeatureCollection } from 'geojson'\n\nimport { isEmptyInputValue } from '../form/is-empty-input-value'\nimport { coerceFeatureCollection } from './coerce-feature-collection'\n\nconst kinkableGeometryTypes = [\n 'LineString',\n 'MultiLineString',\n 'MultiPolygon',\n 'Polygon',\n]\n\nexport const NO_KINKS_VALIDATOR_NAME = 'no-kinks'\n\nexport function noKinksValidator(): ValidatorFn {\n return (control: AbstractControl) => {\n // Don't need to validate if there isn't a value. Use `Validators.required` for that.\n if (isEmptyInputValue(control.value)) {\n return null // don't validate empty values to allow optional controls\n }\n\n const value = coerceFeatureCollection(control.value)\n\n if (value === null) {\n return null\n }\n\n const kinksFound: { feature: Feature; kinks: FeatureCollection }[] = []\n for (const f of value.features) {\n if (kinkableGeometryTypes.indexOf(f.geometry.type) !== -1) {\n const _kinks = kinks(f as any)\n if (_kinks.features.length > 0) {\n kinksFound.push({\n feature: f,\n kinks: _kinks,\n })\n }\n }\n }\n\n if (kinksFound.length > 0) {\n return {\n [NO_KINKS_VALIDATOR_NAME]: {\n reason: 'Paths should not intersect themselves.',\n featuresWithKink: kinksFound,\n },\n }\n }\n\n return null\n }\n}\n","import { fileTypeFromBuffer } from 'file-type'\n\nexport function readFileAsync(file: Blob): Promise<ArrayBuffer | null> {\n return new Promise<ArrayBuffer | null>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n resolve(reader.result as ArrayBuffer | null)\n }\n reader.readAsArrayBuffer(file)\n })\n}\n\nexport async function readFileAsDataUrlAsync(\n file: Blob,\n): Promise<string | null> {\n return new Promise<string | null>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n resolve(reader.result as string | null)\n }\n reader.readAsDataURL(file)\n })\n}\n\n/** Coerce a buffer to an ArrayBuffer suitable for use as a BlobPart. */\nfunction toArrayBuffer(buffer: Uint8Array | ArrayBuffer): ArrayBuffer {\n if (buffer instanceof ArrayBuffer) {\n return buffer\n }\n // Slice to get an owned ArrayBuffer, avoiding SharedArrayBuffer TS issues with BlobPart.\n return buffer.buffer.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n ) as ArrayBuffer\n}\n\nexport async function fileBufferToBlob(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<Blob> {\n const fType = await fileTypeFromBuffer(buffer)\n const mime = fType ? fType.mime : defaultMime\n return new Blob([toArrayBuffer(buffer)], { type: mime })\n}\n\nexport async function fileBufferToObjectUrl(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<string> {\n const file = await fileBufferToBlob(buffer, defaultMime)\n return URL.createObjectURL(file)\n}\n\nexport interface IFileData {\n ext?: string\n mime?: string\n blob: Blob\n}\n\nexport async function fileDataFromBuffer(\n buffer: Uint8Array | ArrayBuffer,\n defaultMime: string = 'application/octet-stream',\n): Promise<IFileData> {\n const fType = await fileTypeFromBuffer(buffer)\n const ext = fType?.ext\n const mime = fType ? fType.mime : defaultMime\n const blob = new Blob([toArrayBuffer(buffer)], { type: mime })\n return { ext, mime, blob }\n}\n\nexport function openBlob(blob: Blob, target?: string, filename?: string) {\n const url = URL.createObjectURL(blob)\n const win = window.open(url, target)\n // TODO: Consider if always setting opener to null is to restrictive\n // if (win && target && target.toLowerCase() === '_blank') {\n // win.opener = null\n // }\n}\n","/** Returns object without property */\nexport function withoutProperty<T, K extends keyof T>(\n obj: T,\n propName: K,\n): Pick<T, Exclude<keyof T, K>> {\n const { [propName]: _, ...without } = obj\n return without\n}\n\n/** Returns object without properties */\nexport function withoutProperties<T, K extends keyof T>(\n obj: T,\n propNames: K[],\n): Pick<T, Exclude<keyof T, K>> {\n let without: any = obj\n for (const propName of propNames) {\n without = withoutProperty(without, propName)\n }\n return without\n}\n\n/** Delete property of object */\nexport function deleteProperty<T extends object, K extends keyof T>(\n obj: T,\n propName: K,\n): void {\n if (Object.prototype.hasOwnProperty.call(obj, propName)) {\n delete obj[propName]\n }\n}\n\n/** Delete properties of object */\nexport function deleteProperties<T extends object, K extends keyof T>(\n obj: T,\n propNames: K[],\n): void {\n for (const propName of propNames) {\n deleteProperty(obj, propName)\n }\n}\n","import { fileTypeFromBuffer } from 'file-type'\nimport { FeatureCollection } from 'geojson'\nimport shp from 'shpjs'\n\nimport { readFileAsync } from '../file-utils'\nimport { withoutProperty } from '../obj-utils'\n\n/**\n * Reads a File, or buffer of file content, in GeoJSON or ESRI Shapefile format\n * and returns a GeoJSON `FeatureCollection`.\n */\nexport async function readGeoFile(\n fileOrBuffer: File | ArrayBuffer,\n): Promise<FeatureCollection> {\n const buffer = await coerceToArrayBuffer(fileOrBuffer)\n const fType = await fileTypeFromBuffer(buffer)\n\n if (fType?.ext === 'shp') {\n return parseShpFile(buffer)\n } else if (fType?.mime === 'application/zip') {\n return parseShpZip(buffer)\n }\n\n return parseGeoJson(buffer)\n}\n\nasync function coerceToArrayBuffer(\n fileOrBuffer: File | ArrayBuffer,\n): Promise<ArrayBuffer> {\n if (fileOrBuffer instanceof File) {\n const arrBuf = await readFileAsync(fileOrBuffer)\n if (arrBuf === null) {\n throw new Error('Could not read file.')\n }\n return arrBuf\n }\n\n return fileOrBuffer\n}\n\nasync function parseShpFile(buffer: ArrayBuffer): Promise<FeatureCollection> {\n const geometries = await shp.parseShp(buffer, undefined as any)\n const featCollection: FeatureCollection = {\n type: 'FeatureCollection',\n features: geometries.map((geom) => ({\n type: 'Feature',\n geometry: geom,\n properties: {},\n })),\n }\n return featCollection\n}\n\nasync function parseShpZip(buffer: ArrayBuffer): Promise<FeatureCollection> {\n let featCollection = await shp.parseZip(buffer, undefined as any)\n if (Array.isArray(featCollection)) {\n if (featCollection.length === 0) {\n throw Error(`Shape data not found.`)\n } else if (featCollection.length > 1) {\n throw Error(`Multiple shape files not supported.`)\n }\n featCollection = featCollection[0]\n }\n return withoutProperty(featCollection, 'fileName')\n}\n\nfunction parseGeoJson(buffer: ArrayBuffer): FeatureCollection {\n const json = JSON.parse(new TextDecoder().decode(buffer))\n\n if (json?.type === 'FeatureCollection' && Array.isArray(json?.features)) {\n return json as FeatureCollection\n }\n\n throw Error(`Unable to parse as GeoJSON.`)\n}\n","import { Feature, FeatureCollection, MultiPolygon, Polygon } from 'geojson'\n\n/**\n * Split all MultiPolygon into Polygon. Any properties, other than\n * 'coordinates', of the MultiPolygons will be lost.\n *\n * NOTE: MultiPolygons in a GeometryCollection will not be split.\n */\nexport function splitMultiPolygons(featureCollection: FeatureCollection): void {\n for (let i = 0; i < featureCollection.features.length; i++) {\n if (featureCollection.features[i]) {\n const geometry = featureCollection.features[i].geometry\n if (geometry.type === 'MultiPolygon') {\n const features = splitMultPolygon(geometry).map(\n (p) =>\n ({\n type: 'Feature',\n geometry: p,\n properties: {},\n }) as Feature,\n )\n featureCollection.features.splice(i, 1, ...features)\n i += Math.max(features.length - 1, 0)\n }\n }\n }\n}\n\nfunction splitMultPolygon(multiPolygon: MultiPolygon): Polygon[] {\n return multiPolygon.coordinates.map((c) => ({\n type: 'Polygon',\n coordinates: c,\n }))\n}\n","import { Feature, FeatureCollection, MultiPolygon, Polygon } from 'geojson'\n\n/**\n * Close all polygons in the GeoJSON.\n *\n * Google Maps requires that polygons be closed, but not all libraries have that\n * requirement. This may add redundent points to the GeoJSON, but it will ensure\n * that the GeoJSON is valid for Google Maps.\n */\nexport function closePolygons(\n geoJson: FeatureCollection | Feature | Polygon | MultiPolygon,\n) {\n if (geoJson.type === 'FeatureCollection') {\n for (const f of geoJson.features) {\n closePolygonsFeature(f)\n }\n } else if (geoJson.type === 'Feature') {\n closePolygonsFeature(geoJson)\n }\n}\n\nfunction closePolygonsFeature(feature: Feature): void {\n if (feature.geometry.type === 'Polygon') {\n closePolygon(feature.geometry)\n } else if (feature.geometry.type === 'MultiPolygon') {\n closeMultiPolygon(feature.geometry)\n }\n}\n\nfunction closePolygon(polygon: Polygon): void {\n for (const c of polygon.coordinates) {\n c.push(c[0])\n }\n}\n\nfunction closeMultiPolygon(multiPolygon: MultiPolygon): void {\n for (const p of multiPolygon.coordinates) {\n for (const c of p) {\n c.push(c[0])\n }\n }\n}\n","// Based on source: https://github.com/sindresorhus/array-move/blob/main/index.js\n\n/**\n Moves the item to the new position in the input array. Useful for huge arrays\n where absolute performance is needed.\n\n @param array - The array to modify.\n @param fromIndex - The index of item to move. If negative, it will begin that\n many elements from the end.\n @param toIndex - The index of where to move the item. If negative, it will\n begin that many elements from the end.\n @example\n ```\n import { arrayMoveMutable } from '@theseam/ui-common/utils';\n\n const input = ['a', 'b', 'c'];\n arrayMoveMutable(input, 1, 2);\n console.log(input);\n //=> ['a', 'c', 'b']\n ```\n*/\nexport function arrayMoveMutable(\n array: unknown[],\n fromIndex: number,\n toIndex: number,\n): void {\n const startIndex = fromIndex < 0 ? array.length + fromIndex : fromIndex\n\n if (startIndex >= 0 && startIndex < array.length) {\n const endIndex = toIndex < 0 ? array.length + toIndex : toIndex\n\n const [item] = array.splice(fromIndex, 1)\n array.splice(endIndex, 0, item)\n }\n}\n\n/**\n Clones the given `array`, moves the item to a new position in the new array,\n and then returns the new array. The given `array` is not mutated.\n\n @param array - The array with the item to move.\n @param fromIndex - The index of item to move. If negative, it will begin that\n many elements from the end.\n @param toIndex - The index of where to move the item. If negative, it will\n begin that many elements from the end.\n @returns A new array with the item moved to the new position.\n @example\n ```\n import { arrayMoveImmutable } from '@theseam/ui-common/utils';\n\n const input = ['a', 'b', 'c'];\n const array1 = arrayMoveImmutable(input, 1, 2);\n console.log(array1);\n //=> ['a', 'c', 'b']\n\n const array2 = arrayMoveImmutable(input, -1, 0);\n console.log(array2);\n //=> ['c', 'a', 'b']\n\n const array3 = arrayMoveImmutable(input, -2, -3);\n console.log(array3);\n //=> ['b', 'a', 'c']\n ```\n*/\nexport function arrayMoveImmutable<ValueType>(\n array: readonly ValueType[],\n fromIndex: number,\n toIndex: number,\n): ValueType[] {\n const newArray = [...array]\n arrayMoveMutable(newArray, fromIndex, toIndex)\n return newArray\n}\n","export function calcPercentage(total: number, n: number) {\n return total && total > 0 ? (n / total) * 100 : 0\n}\n","/**\n * Polyfil for `Element.toggleAttribute`\n *\n * Toggles a value without a value. Useful for attributes, such as `disabled`,\n * `readonly`, and `hidden`, that only needs to exist on the `Element` without\n * requiring a value.\n *\n * Most browsers natively support this feature, but IE, which we still try to\n * support for at least the main parts of the app, has \"Unknown\" support of this\n * feature. Until IE support is dropped this polyfil should be used to toggle an\n * attribute.\n *\n * Source:\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute#Polyfill\n */\nexport function toggleAttribute(\n element: HTMLElement,\n name: string,\n force: boolean,\n): boolean {\n let _force = force\n if (_force !== void 0) {\n _force = !!_force\n }\n\n if (element.getAttribute(name) !== null) {\n if (_force) {\n return true\n }\n\n element.removeAttribute(name)\n return false\n } else {\n if (_force === false) {\n return false\n }\n\n element.setAttribute(name, '')\n return true\n }\n}\n","export const phoneNumberMask = [\n '(',\n /[1-9]/,\n /\\d/,\n /\\d/,\n ')',\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n '-',\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n]\n","export function isNullOrUndefined<T>(\n value: T | null | undefined,\n): value is null | undefined {\n return value === undefined || value === null\n}\n","export function isNullOrUndefinedOrEmpty(\n value: string | null | undefined,\n trim: boolean = true,\n): value is string | null | undefined {\n return (\n value === undefined ||\n value === null ||\n (trim ? value.trim() : value).length === 0\n )\n}\n","export function loadStyle(content: string): Promise<HTMLStyleElement> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('style')\n s.onload = () => resolve(s)\n s.onerror = (e) => {\n document.head.removeChild(s)\n reject(e)\n }\n s.innerHTML = content\n document.head.appendChild(s)\n })\n}\n","export function loadStyleSheet(path: string): Promise<HTMLLinkElement> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('link')\n s.onload = () => resolve(s)\n s.onerror = (e) => {\n document.head.removeChild(s)\n reject(e)\n }\n s.rel = 'stylesheet'\n s.href = path\n document.head.appendChild(s)\n })\n}\n","export function notNullOrUndefinedOrEmpty(\n value: string | null | undefined,\n trim: boolean = true,\n): value is string {\n return (\n value !== null &&\n value !== undefined &&\n (trim ? value.trim() : value).length > 0\n )\n}\n","export async function waitOnConditionAsync(\n condition: () => boolean,\n timeoutDuration: number = -1,\n throwOnTimeout: boolean = true,\n): Promise<any> {\n const timeStart: any = new Date()\n\n const _waitFunc = (callbackFn: (boolean: boolean) => any) => {\n let conditionSuccess = false\n\n if (condition()) {\n callbackFn(true)\n conditionSuccess = true\n }\n\n if (!conditionSuccess) {\n const timeNow: any = new Date()\n const duration = timeNow - timeStart\n if (timeoutDuration > -1 && duration > timeoutDuration) {\n if (throwOnTimeout) {\n throw new Error('Timed out waiting on condition.')\n } else {\n callbackFn(false)\n }\n }\n\n setTimeout(() => {\n _waitFunc(callbackFn)\n }, 30)\n }\n }\n\n return new Promise((resolve, reject) => {\n const fn = (b: boolean) => {\n resolve(b)\n }\n _waitFunc(fn)\n })\n}\n","import { isObservable, Observable, Subscriber, Subscription } from 'rxjs'\n\nclass IntervalTimer {\n private _intervalTime: number\n private _intervalId: number | null = null\n\n constructor(\n private _callback: () => void,\n intervalTime: number,\n startOnInit: boolean = true,\n ) {\n this._intervalTime = intervalTime\n if (startOnInit) {\n this.start()\n }\n }\n\n set intervalTime(time: number) {\n this._intervalTime = time\n }\n\n public start(): void {\n if (this._intervalId === null) {\n this._intervalId = window.setInterval(() => {\n this._callback()\n }, this._intervalTime)\n }\n }\n\n public stop(): void {\n if (this._intervalId !== null) {\n clearInterval(this._intervalId)\n this._intervalId = null\n }\n }\n\n public reset(newIntervalTime?: number): void {\n if (newIntervalTime) {\n this.intervalTime = newIntervalTime\n }\n this.stop()\n this.start()\n }\n}\n\nexport type PollingActionFn<R> = () => R | Observable<R>\n\nexport class PollingTickerOptions {\n emitOnInit?: boolean = true\n}\n\n// TODO: Simplify complexity.\n\n/**\n * Call an action and emits the result to its subscriber on an interval or when\n * ticker emits. When the ticker emits, the interval time will reset.\n *\n * When subscribed to, the action will be called and emitted right away unless\n * the `emitOnInit` option is set to false.\n */\nexport function pollingTicker<R>(\n action: PollingActionFn<R>,\n pollingInterval?: number,\n ticker?: Observable<number | void>,\n options?: PollingTickerOptions,\n): Observable<R> {\n return new Observable((subscriber: Subscriber<R>) => {\n const _opts = { ...new PollingTickerOptions(), ...(options || {}) }\n\n let timer: IntervalTimer | null = null\n let actionSub: Subscription | null = null\n let tickerSub: Subscription | null = null\n\n try {\n const handleAction = () => {\n if (timer) {\n timer.stop()\n }\n\n const actionResult = action()\n\n if (isObservable(actionResult)) {\n if (actionSub) {\n actionSub.unsubscribe()\n }\n actionSub = actionResult.subscribe(\n (v: R) => {\n subscriber.next(v)\n if (timer) {\n timer.reset()\n }\n },\n (err) => {\n subscriber.error(err)\n },\n () => {\n actionSub = null\n if (timer) {\n timer.start()\n }\n },\n )\n } else {\n subscriber.next(actionResult)\n }\n if (timer) {\n timer.start()\n }\n }\n\n if (_opts.emitOnInit) {\n handleAction()\n }\n\n if (pollingInterval) {\n timer = new IntervalTimer(() => {\n handleAction()\n }, pollingInterval)\n }\n\n if (ticker) {\n tickerSub = ticker.subscribe((newPollingInterval) => {\n if (newPollingInterval && timer) {\n timer.stop()\n if (newPollingInterval) {\n timer.intervalTime = newPollingInterval\n }\n }\n handleAction()\n if (timer) {\n timer.reset()\n }\n })\n }\n } catch (err) {\n subscriber.error(err)\n }\n\n return () => {\n if (timer) {\n timer.stop()\n }\n if (actionSub) {\n actionSub.unsubscribe()\n }\n if (tickerSub) {\n tickerSub.unsubscribe()\n }\n }\n })\n}\n","import { BehaviorSubject, isObservable, Observable, Subject } from 'rxjs'\nimport {\n distinctUntilChanged,\n mapTo,\n publishReplay,\n refCount,\n shareReplay,\n skip,\n take,\n tap,\n} from 'rxjs/operators'\n\nimport { tapFirst } from './operators/tap-first'\nimport { pollingTicker } from './polling-ticker'\n\nexport class Refreshable<T> {\n private _initialized = false\n private _pollingInterval = new BehaviorSubject<number>(0)\n private _ticker = new Subject<void>()\n private _pending = new BehaviorSubject<boolean>(false)\n\n public data$: Observable<T>\n public pending$: Observable<boolean>\n\n constructor(action: () => T | Observable<T>, pollingInterval?: number) {\n if (pollingInterval !== null && pollingInterval !== undefined) {\n this._pollingInterval.next(pollingInterval)\n }\n\n this.pending$ = this._pending\n .asObservable()\n .pipe(distinctUntilChanged(), shareReplay(1))\n\n this.data$ = pollingTicker(\n this._actionHandler(action),\n pollingInterval,\n this._ticker,\n ).pipe(\n tapFirst(() => (this._initialized = true)),\n publishReplay(),\n refCount(),\n )\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n /**\n * Intercepts the action call to monitor pending state\n */\n private _actionHandler = (action: () => T | Observable<T>) => {\n return () => {\n this._pending.next(true)\n\n const actionResult = action()\n if (isObservable(actionResult)) {\n return actionResult.pipe(\n tap(() => {\n this._pending.next(false)\n }),\n )\n } else {\n this._pending.next(true)\n return actionResult\n }\n }\n }\n\n /**\n * Selects the data observable\n */\n public select(refresh?: boolean): Observable<T> {\n if (refresh && this._initialized && !this._pending.value) {\n this._ticker.next()\n }\n return this.data$\n }\n\n public refresh(): Observable<void> {\n let result$: Observable<any>\n\n if (this._initialized) {\n // TODO: Add a test and maybe refactor this to be more clear. It worked in\n // my manual tests, but there may be some situations where this doesn't\n // work, since the ticker isn't the only way to trigger a refresh. Right\n // now it should be fine, but if an async operator is added to be run\n // each time `data$` is subscribed to, then this could fail if the data\n // emits one extra time before the ticker is triggered.\n let _polled = false\n result$ = this.data$.pipe(\n tap((_) => !_polled && (_polled = true) && this._ticker.next()),\n skip(1),\n )\n } else {\n result$ = this.data$\n }\n\n return result$.pipe(take(1), mapTo(undefined))\n }\n}\n","import { from, isObservable, Observable } from 'rxjs'\n\nexport function wrapIntoObservable<T>(\n value: T | Promise<T> | Observable<T>,\n): Observable<T> {\n if (isObservable(value)) {\n return value\n }\n\n return from(Promise.resolve(value))\n}\n","/**\n * Explaination:\n * ^ - beginning of the string\n * (?: - beginning of a non-captured group\n * [a-z]+ - any character of 'a' to 'z' 1 or more times\n * : - string (colon character)\n * )? - end of the non-captured group. Group appearing 0 or 1 times\n * // - string (two forward slash characters)\n * 'i' - non case-sensitive flag\n *\n * source: https://stackoverflow.com/a/19709846\n */\nconst IS_ABSOLUTE_URL_REGEX = new RegExp('^(?:[a-z]+:)?//', 'i')\n\nexport function isAbsoluteUrl(url: string): boolean {\n return IS_ABSOLUTE_URL_REGEX.test(url)\n}\n","import { Observable, Subscriber } from 'rxjs'\n\nexport type SubscriberCountChangedFn = (\n description: string,\n count: number,\n reason: 'subscribed' | 'unsubscribed',\n) => void\n\n/**\n * This is just for helping debug observables that aren't being unsubscribed\n * from correctly.\n *\n * If description is 'foo' then you can check the how many observers are\n * subscribed with the expression `__subscriberCounts['foo']`. In a debugger you\n * can add the expression to the \"Watch\" expressions or in Chrome Devtools\n * Console you can add it to the live expressions(Add live expressions by\n * clicking the eye the the left of the Console filter input).\n */\nexport function subscriberCount<T>(\n sourceObservable: Observable<T>,\n description: string,\n countChangedFn: SubscriberCountChangedFn | undefined | null = logOnChange,\n) {\n let counter = 0\n return new Observable((subscriber: Subscriber<T>) => {\n const subscription = sourceObservable.subscribe(subscriber)\n counter++\n if (countChangedFn !== undefined && countChangedFn !== null) {\n countChangedFn(description, counter, 'subscribed')\n }\n setGlobalSubscriberCount(description, counter)\n\n return () => {\n subscription.unsubscribe()\n counter--\n if (countChangedFn !== undefined && countChangedFn !== null) {\n countChangedFn(description, counter, 'unsubscribed')\n }\n setGlobalSubscriberCount(description, counter)\n }\n })\n}\n\nconst logOnChange: SubscriberCountChangedFn = (\n description: string,\n count: number,\n reason: 'subscribed' | 'unsubscribed',\n) => {\n // eslint-disable-next-line no-console\n console.log(`${description} subscriptions: ${count} [${reason}]`)\n}\n\nfunction getGlobalSubscriberCounts(): { [description: string]: number } {\n const w = window as any\n if (w.__subscriberCounts === undefined || w.__subscriberCounts === null) {\n w.__subscriberCounts = {}\n }\n return w.__subscriberCounts\n}\n\nfunction setGlobalSubscriberCount(description: string, count: number): void {\n getGlobalSubscriberCounts()[description] = count\n}\n","import { QueryList } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { map, startWith } from 'rxjs/operators'\n\nexport function observeQueryList<T>(\n queryList: QueryList<T>,\n emitCurrentValue = true,\n): Observable<T[]> {\n return queryList.changes.pipe(\n startWith(queryList),\n map((v) => v.toArray() as T[]),\n )\n}\n","export function createPadding(len: number, chars: string): string {\n // if (chars.length <= len) {\n // return chars\n // }\n\n if (chars.length === 0) {\n throw Error(`Padding characters must be at least 1 char length.`)\n }\n\n let str = chars\n while (str.length < len) {\n str += chars\n }\n\n if (str.length > len) {\n str = str.slice(0, len)\n }\n\n return str\n}\n","import { createPadding } from './create-padding'\n\nexport function padEnd(\n stringToPad: string,\n paddingLength: number | undefined = 0,\n paddingChars: string | undefined = ' ',\n): string {\n const strLength = paddingLength ? stringToPad.length : 0\n\n if (!paddingLength || strLength >= paddingLength) {\n return stringToPad\n }\n\n return stringToPad + createPadding(paddingLength - strLength, paddingChars)\n}\n","import { createPadding } from './create-padding'\n\nexport function padStart(\n stringToPad: string,\n paddingLength: number | undefined = 0,\n paddingChars: string | undefined = ' ',\n): string {\n const strLength = paddingLength ? stringToPad.length : 0\n\n if (!paddingLength || strLength >= paddingLength) {\n return stringToPad\n }\n\n return createPadding(paddingLength - strLength, paddingChars) + stringToPad\n}\n","export function isNumeric(value: any): boolean {\n return !isNaN(Number(value) - parseFloat(value))\n}\n","import { isNumeric } from './is-numeric'\n\n/**\n * Returns the number of fractional digits.\n *\n * NOTE: This is intended for input validation, so trailing 0's will be included\n * in the total. Also, localization is not considered, so '.' is assumed to be\n * the fractional separator.\n */\nexport function fractionalDigitsCount(value: string): number | null {\n if (!isNumeric(value)) {\n return null\n }\n\n const a = value.split('.')\n if (a.length !== 2) {\n return null\n }\n\n return a[1].length\n}\n","// NOTE: Based on https://www.npmjs.com/package/strip-outer\n\nconst escapeRegExp = (s: string) =>\n s.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n\n/**\n * Strip a substring from the start/end of a string.\n */\nexport function stripOuter(input: string, substring: string): string {\n const escaped = escapeRegExp(substring)\n return input.replace(new RegExp(`^${escaped}|${escaped}$`, 'g'), '')\n}\n","// NOTE: Based on https://www.npmjs.com/package/trim-repeated\n\nconst escapeRegExp = (s: string) =>\n s.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n\n/**\n * Trim a consecutively repeated substring: foo--bar---baz → foo-bar-baz.\n */\nexport function trimRepeated(str: string, target: string): string {\n return str.replace(new RegExp(`(?:${escapeRegExp(target)}){2,}`, 'g'), target)\n}\n","import { stripOuter } from './strip-outer'\nimport { trimRepeated } from './trim-repeated'\n\n// NOTE: Mostly based on https://www.npmjs.com/package/filenamify\n\nconst MAX_FILENAME_LENGTH = 100\n\n// eslint-disable-next-line no-control-regex\nconst reReserved = /[<>:\"/\\\\|?*\\x00-\\x1F]/g\nconst reWindowsNames = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i\nconst reControlChars = /[\\u0000-\\u001f\\u0080-\\u009f]/g // eslint-disable-line no-control-regex\nconst reRelativePath = /^\\.+/\n\nexport interface SanitizeFilenameOptions {\n /**\n * Replacement string.\n *\n * @default '_'\n */\n replacement?: string\n /**\n * Max file length.\n *\n * @default 100\n */\n maxLength?: number\n}\n\nconst defaultOptions: SanitizeFilenameOptions = {\n replacement: '_',\n maxLength: MAX_FILENAME_LENGTH,\n}\n\nexport function sanitizeFilename(\n filename: string,\n options?: SanitizeFilenameOptions,\n): string {\n const opts = {\n ...defaultOptions,\n ...(options || {}),\n }\n\n const replacement = opts.replacement === undefined ? '!' : opts.replacement\n\n if (reReserved.test(replacement) && reControlChars.test(replacement)) {\n throw new Error(\n 'Replacement string cannot contain reserved filename characters',\n )\n }\n\n let s = filename\n\n s = s.replace(reReserved, replacement)\n s = s.replace(reControlChars, replacement)\n s = s.replace(reRelativePath, replacement)\n\n if (replacement.length > 0) {\n s = trimRepeated(s, replacement)\n s = s.length > 1 ? stripOuter(s, replacement) : s\n }\n\n s = reWindowsNames.test(s) ? s + replacement : s\n s = s.slice(0, opts.maxLength)\n\n return s\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["escapeRegExp"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theseam/ui-common",
3
- "version": "1.0.2-beta.33",
3
+ "version": "1.0.2-beta.39",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^20.2.3",
6
6
  "@angular/common": "^20.3.0",
package/utils/index.d.ts CHANGED
@@ -429,5 +429,31 @@ declare function isNumeric(value: any): boolean;
429
429
  */
430
430
  declare function fractionalDigitsCount(value: string): number | null;
431
431
 
432
- export { IS_FEATURE_COLLECTION_VALIDATOR_NAME, IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME, MIN_MAX_POINTS_VALIDATOR_NAME, NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME, NO_INNER_RINGS_VALIDATOR_NAME, NO_KINKS_VALIDATOR_NAME, PollingTickerOptions, Refreshable, activatedRoutesWithDataProperty, arrayMoveImmutable, arrayMoveMutable, calcPercentage, closePolygons, coerceFeatureCollection, createPadding, deleteProperties, deleteProperty, fileBufferToBlob, fileBufferToObjectUrl, fileDataFromBuffer, fractionalDigitsCount, geoJsonToArea, getAttribute, getClosestWidgetCdkDrag, getControlName, getControlPath, hasAttribute, hasProperty, hasRequiredControl, isAbsoluteUrl, isEmptyInputValue, isEmptyUrlRoute, isFeatureCollectionValidator, isNullOrUndefined, isNullOrUndefinedOrEmpty, isNumeric, isOnlyGeometryTypes, isOnlyGeometryTypesValidator, leafChildRoute, loadStyle, loadStyleSheet, mapEach, mergePolygons, minMaxPointsValidator, noEmptyFeatureCollectionValidator, noInnerRingsValidator, noKinksValidator, notNullOrUndefined, notNullOrUndefinedOrEmpty, observeControlIsDifferent, observeControlStatus, observeControlValid, observeControlValue, observeControlValueChange, observeQueryList, openBlob, padEnd, padStart, phoneNumberMask, pollingTicker, readFileAsDataUrlAsync, readFileAsync, readGeoFile, routeSnapshotPathFull, routeSnapshotPathRelative, splitMultiPolygons, subscriberCount, tapFirst, toggleAttribute, waitOnConditionAsync, waitOnNonPendingStatus, willHaveDataProp, withoutProperties, withoutProperty, wrapIntoObservable };
433
- export type { IActivatedRouteWithData, IFileData, PollingActionFn, SubscriberCountChangedFn };
432
+ /**
433
+ * Strip a substring from the start/end of a string.
434
+ */
435
+ declare function stripOuter(input: string, substring: string): string;
436
+
437
+ /**
438
+ * Trim a consecutively repeated substring: foo--bar---baz → foo-bar-baz.
439
+ */
440
+ declare function trimRepeated(str: string, target: string): string;
441
+
442
+ interface SanitizeFilenameOptions {
443
+ /**
444
+ * Replacement string.
445
+ *
446
+ * @default '_'
447
+ */
448
+ replacement?: string;
449
+ /**
450
+ * Max file length.
451
+ *
452
+ * @default 100
453
+ */
454
+ maxLength?: number;
455
+ }
456
+ declare function sanitizeFilename(filename: string, options?: SanitizeFilenameOptions): string;
457
+
458
+ export { IS_FEATURE_COLLECTION_VALIDATOR_NAME, IS_ONLY_GEOMETRY_TYPES_VALIDATOR_NAME, MIN_MAX_POINTS_VALIDATOR_NAME, NO_EMPTY_FEATURE_COLLECTION_VALIDATOR_NAME, NO_INNER_RINGS_VALIDATOR_NAME, NO_KINKS_VALIDATOR_NAME, PollingTickerOptions, Refreshable, activatedRoutesWithDataProperty, arrayMoveImmutable, arrayMoveMutable, calcPercentage, closePolygons, coerceFeatureCollection, createPadding, deleteProperties, deleteProperty, fileBufferToBlob, fileBufferToObjectUrl, fileDataFromBuffer, fractionalDigitsCount, geoJsonToArea, getAttribute, getClosestWidgetCdkDrag, getControlName, getControlPath, hasAttribute, hasProperty, hasRequiredControl, isAbsoluteUrl, isEmptyInputValue, isEmptyUrlRoute, isFeatureCollectionValidator, isNullOrUndefined, isNullOrUndefinedOrEmpty, isNumeric, isOnlyGeometryTypes, isOnlyGeometryTypesValidator, leafChildRoute, loadStyle, loadStyleSheet, mapEach, mergePolygons, minMaxPointsValidator, noEmptyFeatureCollectionValidator, noInnerRingsValidator, noKinksValidator, notNullOrUndefined, notNullOrUndefinedOrEmpty, observeControlIsDifferent, observeControlStatus, observeControlValid, observeControlValue, observeControlValueChange, observeQueryList, openBlob, padEnd, padStart, phoneNumberMask, pollingTicker, readFileAsDataUrlAsync, readFileAsync, readGeoFile, routeSnapshotPathFull, routeSnapshotPathRelative, sanitizeFilename, splitMultiPolygons, stripOuter, subscriberCount, tapFirst, toggleAttribute, trimRepeated, waitOnConditionAsync, waitOnNonPendingStatus, willHaveDataProp, withoutProperties, withoutProperty, wrapIntoObservable };
459
+ export type { IActivatedRouteWithData, IFileData, PollingActionFn, SanitizeFilenameOptions, SubscriberCountChangedFn };