ngx-techlify-core 11.3.0-beta.1 → 11.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/bundles/ngx-techlify-core.umd.js +587 -131
  2. package/bundles/ngx-techlify-core.umd.js.map +1 -1
  3. package/bundles/ngx-techlify-core.umd.min.js +2 -2
  4. package/bundles/ngx-techlify-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.js +7 -1
  6. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.js +9 -1
  7. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.js +10 -2
  8. package/esm2015/lib/material.module.js +24 -56
  9. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.js +15 -0
  10. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.js +269 -0
  11. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.js +25 -0
  12. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.js +168 -0
  13. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.js +29 -0
  14. package/esm2015/lib/timeline-filter/timeline-filter.component.js +21 -5
  15. package/esm2015/public-api.js +6 -4
  16. package/fesm2015/ngx-techlify-core.js +486 -135
  17. package/fesm2015/ngx-techlify-core.js.map +1 -1
  18. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.d.ts +5 -0
  19. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.d.ts +7 -0
  20. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.d.ts +7 -0
  21. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.d.ts +12 -0
  22. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.d.ts +76 -0
  23. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.d.ts +2 -0
  24. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.d.ts +58 -0
  25. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.d.ts +2 -0
  26. package/lib/timeline-filter/timeline-filter.component.d.ts +4 -2
  27. package/ngx-techlify-core.metadata.json +1 -1
  28. package/package.json +1 -1
  29. package/public-api.d.ts +5 -3
  30. package/esm2015/lib/image-for-model/image-for-model-routing.module.js +0 -12
  31. package/esm2015/lib/image-for-model/image-for-model.component.js +0 -94
  32. package/esm2015/lib/image-for-model/image-for-model.module.js +0 -23
  33. package/lib/image-for-model/image-for-model-routing.module.d.ts +0 -2
  34. package/lib/image-for-model/image-for-model.component.d.ts +0 -26
  35. package/lib/image-for-model/image-for-model.module.d.ts +0 -2
@@ -12,37 +12,22 @@ import { catchError, debounceTime, distinctUntilChanged, startWith, switchMap, f
12
12
  import { MAT_SNACK_BAR_DATA, MatSnackBar, MatSnackBarModule, MatSnackBarRef } from '@angular/material/snack-bar';
13
13
  import { FocusMonitor } from '@angular/cdk/a11y';
14
14
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
15
- import { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';
15
+ import { MatFormFieldControl, MatFormFieldModule, MatFormField, MAT_FORM_FIELD } from '@angular/material/form-field';
16
16
  import { SELECT_ITEM_HEIGHT_EM, MatSelect, MatSelectModule } from '@angular/material/select';
17
17
  import { MatIconModule } from '@angular/material/icon';
18
18
  import { Router, RouteReuseStrategy, RouterModule, NavigationEnd, ActivatedRoute } from '@angular/router';
19
+ import { MatTooltipModule } from '@angular/material/tooltip';
19
20
  import { MatCommonModule, MatLineModule, MatNativeDateModule, MatOptionModule, MatPseudoCheckboxModule, MatRippleModule } from '@angular/material/core';
20
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
21
- import { MatBadgeModule } from '@angular/material/badge';
22
21
  import { MatButtonModule } from '@angular/material/button';
23
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
24
- import { MatCardModule } from '@angular/material/card';
25
22
  import { MatCheckboxModule } from '@angular/material/checkbox';
26
- import { MatChipsModule } from '@angular/material/chips';
27
- import { MatDatepickerModule } from '@angular/material/datepicker';
28
- import { MatDividerModule } from '@angular/material/divider';
29
- import { MatExpansionModule } from '@angular/material/expansion';
30
- import { MatGridListModule } from '@angular/material/grid-list';
31
23
  import { MatInputModule } from '@angular/material/input';
32
- import { MatListModule } from '@angular/material/list';
33
24
  import { MatMenuModule } from '@angular/material/menu';
34
- import { MatPaginatorModule } from '@angular/material/paginator';
35
- import { MatProgressBarModule } from '@angular/material/progress-bar';
36
25
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
37
- import { MatRadioModule } from '@angular/material/radio';
38
- import { MatSidenavModule } from '@angular/material/sidenav';
39
- import { MatSlideToggleModule } from '@angular/material/slide-toggle';
40
- import { MatSliderModule } from '@angular/material/slider';
41
- import { MatStepperModule } from '@angular/material/stepper';
42
- import { MatTabsModule } from '@angular/material/tabs';
43
- import { MatToolbarModule } from '@angular/material/toolbar';
44
- import { MatTooltipModule } from '@angular/material/tooltip';
45
- import { MatTreeModule } from '@angular/material/tree';
26
+ import { MatCardModule } from '@angular/material/card';
27
+ import { MatDividerModule } from '@angular/material/divider';
28
+ import { MatChipsModule } from '@angular/material/chips';
29
+ import { MatDatepickerModule } from '@angular/material/datepicker';
30
+ import { MatListModule } from '@angular/material/list';
46
31
  import { FlexLayoutModule } from '@angular/flex-layout';
47
32
  import { InfiniteScrollModule } from 'ngx-infinite-scroll';
48
33
  import { NgxDocViewerModule } from 'ngx-doc-viewer';
@@ -50,6 +35,9 @@ import { Editor, NgxEditorModule } from 'ngx-editor';
50
35
  import { utils, writeFile, read } from 'xlsx';
51
36
  import { DomSanitizer } from '@angular/platform-browser';
52
37
  import { diff, formatters } from 'jsondiffpatch';
38
+ import { ENTER, COMMA } from '@angular/cdk/keycodes';
39
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
40
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
53
41
 
54
42
  class ActionPopup {
55
43
  }
@@ -2280,8 +2268,9 @@ Timeline.THIS_YEAR = 10;
2280
2268
  Timeline.LAST_YEAR = 11;
2281
2269
  Timeline.ALL = 12;
2282
2270
 
2283
- class TimelineFilterComponent {
2271
+ let TimelineFilterComponent = class TimelineFilterComponent {
2284
2272
  constructor() {
2273
+ this.timelineValue = new FormControl('');
2285
2274
  this.timelines = [
2286
2275
  { value: 1, viewValue: 'Custom' },
2287
2276
  { value: 2, viewValue: 'Today' },
@@ -2299,13 +2288,17 @@ class TimelineFilterComponent {
2299
2288
  this.labelText = 'Select Timeline';
2300
2289
  this.dateFrom = 'date_from';
2301
2290
  this.dateTo = 'date_to';
2291
+ this.appearance = "legacy";
2292
+ this.showClearbutton = false;
2302
2293
  this.showCustomDateFields = false;
2303
2294
  }
2304
2295
  set defaultValue(value) {
2305
- this.timelineValue = value;
2296
+ this.timelineValue.setValue(value);
2306
2297
  this.changeTimeline(value);
2307
2298
  }
2308
2299
  ngOnInit() {
2300
+ this.timelineValue.valueChanges.
2301
+ pipe(debounceTime(100), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => this.changeTimeline(value));
2309
2302
  }
2310
2303
  resetFieldValue(field) {
2311
2304
  this.form.get(field).setValue('');
@@ -2324,23 +2317,29 @@ class TimelineFilterComponent {
2324
2317
  this.showCustomDateFields = timeline.show_custom_field;
2325
2318
  }
2326
2319
  }
2327
- }
2320
+ };
2328
2321
  TimelineFilterComponent.decorators = [
2329
2322
  { type: Component, args: [{
2330
2323
  selector: 'app-timeline-filter',
2331
- template: "<ng-container [formGroup]=\"form\">\n <mat-form-field>\n <mat-label>{{labelText}}</mat-label>\n <mat-select (selectionChange)=\"changeTimeline($event.value)\" [value]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>",
2324
+ template: "<ng-container [formGroup]=\"form\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select [formControl]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button mat-button *ngIf=\"showClearbutton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>From Date</mat-label>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>To Date</mat-label>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>",
2332
2325
  styles: [""]
2333
2326
  },] }
2334
2327
  ];
2335
2328
  TimelineFilterComponent.ctorParameters = () => [];
2336
2329
  TimelineFilterComponent.propDecorators = {
2330
+ timelineValue: [{ type: Input }],
2337
2331
  timelines: [{ type: Input }],
2338
2332
  labelText: [{ type: Input }],
2339
2333
  dateFrom: [{ type: Input }],
2340
2334
  dateTo: [{ type: Input }],
2335
+ appearance: [{ type: Input }],
2336
+ showClearbutton: [{ type: Input }],
2341
2337
  form: [{ type: Input }],
2342
2338
  defaultValue: [{ type: Input }]
2343
2339
  };
2340
+ TimelineFilterComponent = __decorate([
2341
+ UntilDestroy()
2342
+ ], TimelineFilterComponent);
2344
2343
 
2345
2344
  class LoaderComponent {
2346
2345
  constructor() {
@@ -2648,57 +2647,34 @@ DataManager.ctorParameters = () => [
2648
2647
  { type: HttpService }
2649
2648
  ];
2650
2649
 
2651
- /*
2652
- * This module imports and re-exports all Angular Material modules for convenience,
2653
- * so only 1 module import is needed in your feature modules.
2654
- * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.
2655
- *
2656
- * To optimize your production builds, you should only import the components used in your app.
2657
- */
2658
2650
  class MaterialModule {
2659
2651
  }
2660
2652
  MaterialModule.decorators = [
2661
2653
  { type: NgModule, args: [{
2662
2654
  exports: [
2663
- MatAutocompleteModule,
2664
- MatBadgeModule,
2665
2655
  MatButtonModule,
2666
- MatButtonToggleModule,
2667
- MatCardModule,
2668
2656
  MatCheckboxModule,
2669
- MatChipsModule,
2670
2657
  MatCommonModule,
2671
- MatDatepickerModule,
2672
2658
  MatDialogModule,
2673
- MatDividerModule,
2674
- MatExpansionModule,
2675
2659
  MatFormFieldModule,
2676
- MatGridListModule,
2677
2660
  MatIconModule,
2678
2661
  MatInputModule,
2679
2662
  MatLineModule,
2680
- MatListModule,
2681
2663
  MatMenuModule,
2682
2664
  MatNativeDateModule,
2683
2665
  MatOptionModule,
2684
- MatPaginatorModule,
2685
- MatProgressBarModule,
2686
2666
  MatProgressSpinnerModule,
2687
2667
  MatPseudoCheckboxModule,
2688
- MatRadioModule,
2689
2668
  MatRippleModule,
2690
2669
  MatSelectModule,
2691
- MatSidenavModule,
2692
- MatSlideToggleModule,
2693
- MatSliderModule,
2694
- MatSnackBarModule,
2695
2670
  MatSortModule,
2696
- MatStepperModule,
2697
2671
  MatTableModule,
2698
- MatTabsModule,
2699
- MatToolbarModule,
2700
- MatTooltipModule,
2701
- MatTreeModule
2672
+ MatCardModule,
2673
+ MatDividerModule,
2674
+ MatChipsModule,
2675
+ MatDatepickerModule,
2676
+ MatListModule,
2677
+ MatTooltipModule
2702
2678
  ]
2703
2679
  },] }
2704
2680
  ];
@@ -3241,11 +3217,19 @@ EmailSubscriptionUserListComponent = __decorate([
3241
3217
  UntilDestroy()
3242
3218
  ], EmailSubscriptionUserListComponent);
3243
3219
 
3220
+ const esulr = {
3221
+ title: 'Email Subscription Users',
3222
+ permissions: {
3223
+ only: ['app_admin'],
3224
+ redirectTo: '/'
3225
+ }
3226
+ };
3244
3227
  const routes$4 = [
3245
3228
  {
3246
3229
  path: '',
3247
3230
  component: EmailSubscriptionUserListComponent,
3248
- canActivate: [AuthenticationGuard]
3231
+ canActivate: [AuthenticationGuard],
3232
+ data: esulr
3249
3233
  },
3250
3234
  ];
3251
3235
  class EmailSubscriptionUserListRoutingModule {
@@ -3632,11 +3616,19 @@ EmailSubscriptionTypeListComponent = __decorate([
3632
3616
  UntilDestroy()
3633
3617
  ], EmailSubscriptionTypeListComponent);
3634
3618
 
3619
+ const estlr = {
3620
+ title: 'Email Subscription Type',
3621
+ permissions: {
3622
+ only: ['client_admin'],
3623
+ redirectTo: '/'
3624
+ }
3625
+ };
3635
3626
  const routes$8 = [
3636
3627
  {
3637
3628
  path: '',
3638
3629
  component: EmailSubscriptionTypeListComponent,
3639
3630
  canActivate: [AuthenticationGuard],
3631
+ data: estlr
3640
3632
  },
3641
3633
  ];
3642
3634
  class EmailSubscriptionTypeListRoutingModule {
@@ -3733,11 +3725,17 @@ EmailSubscriptionForUserComponent = __decorate([
3733
3725
  UntilDestroy()
3734
3726
  ], EmailSubscriptionForUserComponent);
3735
3727
 
3728
+ const esfur = {
3729
+ permissions: {
3730
+ only: ['client_admin']
3731
+ }
3732
+ };
3736
3733
  const routes$9 = [
3737
3734
  {
3738
3735
  path: '',
3739
3736
  component: EmailSubscriptionForUserComponent,
3740
3737
  canActivate: [AuthenticationGuard],
3738
+ data: esfur
3741
3739
  },
3742
3740
  ];
3743
3741
  class EmailSubscriptionForUserRoutingModule {
@@ -5599,117 +5597,470 @@ LoginHistoryForUserModule.decorators = [
5599
5597
  },] }
5600
5598
  ];
5601
5599
 
5602
- const routes$n = [];
5603
- class ImageForModelRoutingModule {
5600
+ class TechlifyTaggerTagFormConfigModel {
5601
+ constructor() {
5602
+ this.selectable = true;
5603
+ this.removable = true;
5604
+ this.separatorKeysCodes = [ENTER, COMMA];
5605
+ this.placeholder = 'New Tag..';
5606
+ this.apiUrl = 'api/techlify-tagger-tags';
5607
+ this.createApiUrl = 'api/techlify-tagger-tags';
5608
+ this.isCreateable = true;
5609
+ this.isCacheTags = false;
5610
+ this.isSingle = false;
5611
+ }
5612
+ }
5613
+
5614
+ var TechlifyTaggerTagFormFieldComponent_1;
5615
+ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = class TechlifyTaggerTagFormFieldComponent {
5616
+ constructor(_focusMonitor, _elementRef, httpService, _formField, ngControl) {
5617
+ this._focusMonitor = _focusMonitor;
5618
+ this._elementRef = _elementRef;
5619
+ this.httpService = httpService;
5620
+ this._formField = _formField;
5621
+ this.ngControl = ngControl;
5622
+ this.stateChanges = new Subject();
5623
+ this.focused = false;
5624
+ this.controlType = 'techlify-tagger-form-field';
5625
+ this.id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent_1.nextId++}`;
5626
+ this.onChange = (_) => { };
5627
+ this.onTouched = () => { };
5628
+ this.tagInputCtrl = new FormControl();
5629
+ /**Pass the configuration for Techlify Tagger */
5630
+ this.config = new TechlifyTaggerTagFormConfigModel();
5631
+ /**Pass the default list of tags */
5632
+ this._allTags = [];
5633
+ /**Pass the Categories to filter for a model */
5634
+ this.categories = [];
5635
+ this._required = false;
5636
+ this._disabled = false;
5637
+ this._value = [];
5638
+ this.tagInputCtrl.valueChanges
5639
+ .subscribe(filterValue => {
5640
+ this.filterString = filterValue;
5641
+ });
5642
+ //Set Focus Monitor
5643
+ _focusMonitor.monitor(_elementRef, true).subscribe(origin => {
5644
+ if (this.focused && !origin) {
5645
+ this.onTouched();
5646
+ }
5647
+ this.focused = !!origin;
5648
+ this.stateChanges.next();
5649
+ });
5650
+ if (this.ngControl != null) {
5651
+ this.ngControl.valueAccessor = this;
5652
+ }
5653
+ }
5654
+ get allTags() {
5655
+ return this._allTags;
5656
+ }
5657
+ set allTags(value) {
5658
+ this._allTags = value;
5659
+ }
5660
+ get tags() {
5661
+ return this.allTags.filter(x => this.value.some(y => y == x.id));
5662
+ }
5663
+ //Default Getter and Setters for a Form Field Implementation
5664
+ get empty() {
5665
+ return this.value.length == 0;
5666
+ }
5667
+ get shouldLabelFloat() {
5668
+ return this.focused || !this.empty || this.tagInputCtrl.value;
5669
+ }
5670
+ get required() {
5671
+ return this._required;
5672
+ }
5673
+ set required(value) {
5674
+ this._required = coerceBooleanProperty(value);
5675
+ this.stateChanges.next();
5676
+ }
5677
+ get disabled() {
5678
+ return this._disabled;
5679
+ }
5680
+ set disabled(value) {
5681
+ this._disabled = coerceBooleanProperty(value);
5682
+ this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();
5683
+ this.stateChanges.next();
5684
+ }
5685
+ get value() {
5686
+ return this._value;
5687
+ }
5688
+ set value(tagIds) {
5689
+ this._value = tagIds || [];
5690
+ this.stateChanges.next();
5691
+ }
5692
+ get errorState() {
5693
+ return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);
5694
+ }
5695
+ get placeholder() {
5696
+ return this._placeholder;
5697
+ }
5698
+ set placeholder(value) {
5699
+ this._placeholder = value;
5700
+ this.stateChanges.next();
5701
+ }
5702
+ ngOnInit() {
5703
+ }
5704
+ ngOnChanges(changes) {
5705
+ //API to load all tags for the model type
5706
+ if (this.allTags.length == 0) {
5707
+ this.httpService
5708
+ .cache(!this.config.isCacheTags)
5709
+ .get(this.config.apiUrl, {
5710
+ params: {
5711
+ categories: this.categories.join(','),
5712
+ perPage: '1000'
5713
+ }
5714
+ }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
5715
+ this.allTags = result.data;
5716
+ });
5717
+ }
5718
+ //API to load only the selected tags for the model
5719
+ if (this.modelId && this.value.length == 0) {
5720
+ //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.
5721
+ this.httpService
5722
+ .cache(!this.config.isCacheTags)
5723
+ .get(this.config.apiUrl, {
5724
+ params: {
5725
+ categories: this.categories.join(','),
5726
+ model_type: this.modelType,
5727
+ model_id: this.modelId,
5728
+ perPage: '1000'
5729
+ }
5730
+ }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
5731
+ this.value = ((result === null || result === void 0 ? void 0 : result.data) || []).map((x) => x.id);
5732
+ this._handleInput();
5733
+ });
5734
+ }
5735
+ }
5736
+ init() {
5737
+ if (this.modelId && this.allTags.length == 0) {
5738
+ //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.
5739
+ this.httpService
5740
+ .cache(!this.config.isCacheTags)
5741
+ .get(this.config.apiUrl, {
5742
+ params: {
5743
+ categories: this.categories.join(','),
5744
+ model_type: this.modelType,
5745
+ model_id: this.modelId
5746
+ }
5747
+ }).pipe(untilDestroyed(this)).subscribe((result) => {
5748
+ this.allTags = result.data;
5749
+ });
5750
+ }
5751
+ }
5752
+ get filteredTags() {
5753
+ return this._filter();
5754
+ }
5755
+ setDescribedByIds(ids) {
5756
+ // Just a empty implementation for Mat Form Field Interface
5757
+ }
5758
+ onContainerClick() {
5759
+ // Just a empty implementation for Mat Form Field Interface
5760
+ }
5761
+ add(event) {
5762
+ return __awaiter(this, void 0, void 0, function* () {
5763
+ const value = (event.value || '').trim();
5764
+ // Add our tag
5765
+ // Validate for single mode
5766
+ if (!this.config.isSingle || (this.value.length === 0)) {
5767
+ if (value && this.config.isCreateable) {
5768
+ const tags = this.allTags;
5769
+ let tag = tags.find((item) => item.title.toLowerCase() == value.toLowerCase());
5770
+ if (!tag) {
5771
+ //No tag present in the list
5772
+ try {
5773
+ const result = yield this.httpService.post(this.config.createApiUrl, {
5774
+ title: value,
5775
+ description: value,
5776
+ category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''
5777
+ }).toPromise();
5778
+ tag = result.item;
5779
+ }
5780
+ catch (error) {
5781
+ return;
5782
+ }
5783
+ this.allTags.push(tag);
5784
+ }
5785
+ else {
5786
+ //Optionally clean the existing value, to avoid duplicate
5787
+ this.remove(tag);
5788
+ }
5789
+ this.value.push(tag.id);
5790
+ this._handleInput();
5791
+ }
5792
+ }
5793
+ // Clear the input value
5794
+ event.input.value = '';
5795
+ this.tagInputCtrl.setValue(null);
5796
+ });
5797
+ }
5798
+ remove(tag) {
5799
+ this.value = this.value.filter(x => x !== tag.id);
5800
+ this._handleInput();
5801
+ }
5802
+ selected(event) {
5803
+ // Validate for single mode
5804
+ if (!this.config.isSingle || (this.value.length === 0)) {
5805
+ //Clean the existing value, to avoid duplicate
5806
+ this.remove({ id: event.option.value });
5807
+ this.value.push(event.option.value);
5808
+ this._handleInput();
5809
+ }
5810
+ this.tagInput.nativeElement.value = '';
5811
+ this.tagInputCtrl.setValue(null);
5812
+ }
5813
+ _filter() {
5814
+ const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;
5815
+ const availableTags = this.allTags.filter((tag) => !this.value.some((item) => item == tag.id));
5816
+ return filterValue ? availableTags.filter((tag) => tag.title.toLowerCase().includes(filterValue)) : availableTags;
5817
+ }
5818
+ writeValue(tagIds) {
5819
+ this.value = tagIds || [];
5820
+ }
5821
+ registerOnChange(fn) {
5822
+ this.onChange = fn;
5823
+ }
5824
+ registerOnTouched(fn) {
5825
+ this.onTouched = fn;
5826
+ }
5827
+ setDisabledState(isDisabled) {
5828
+ this.disabled = isDisabled;
5829
+ }
5830
+ _handleInput() {
5831
+ this.onChange(this.value);
5832
+ }
5833
+ ngOnDestroy() {
5834
+ this.stateChanges.complete();
5835
+ this._focusMonitor.stopMonitoring(this._elementRef);
5836
+ }
5837
+ };
5838
+ TechlifyTaggerTagFormFieldComponent.nextId = 0;
5839
+ TechlifyTaggerTagFormFieldComponent.decorators = [
5840
+ { type: Component, args: [{
5841
+ selector: 'app-techlify-tagger-tag-form-field',
5842
+ template: "<mat-chip-list #chipList aria-label=\"Tag Selection\">\n <mat-chip *ngFor=\"let tag of tags\" [selectable]=\"config.selectable\" [removable]=\"config.removable\"\n (removed)=\"remove(tag)\">\n {{tag.title}}\n <button matChipRemove *ngIf=\"config.removable\" class=\"border-0\">\n <mat-icon class=\"mat-relative-icon\">cancel</mat-icon>\n </button>\n </mat-chip>\n <input placeholder=\"{{config.isCreateable? config.placeholder:''}}\" #tagInput [formControl]=\"tagInputCtrl\"\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeysCodes\" (matChipInputTokenEnd)=\"add($event)\"\n #trigger=\"matAutocompleteTrigger\" (click)=\"trigger.openPanel()\">\n</mat-chip-list>\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let tag of filteredTags\" [value]=\"tag.id\">\n {{tag.title}}\n </mat-option>\n</mat-autocomplete>",
5843
+ providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent_1 }],
5844
+ styles: [".mat-relative-icon{font-size:20px;position:relative;right:7px;top:-3px}"]
5845
+ },] }
5846
+ ];
5847
+ TechlifyTaggerTagFormFieldComponent.ctorParameters = () => [
5848
+ { type: FocusMonitor },
5849
+ { type: ElementRef },
5850
+ { type: HttpService },
5851
+ { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] },
5852
+ { type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
5853
+ ];
5854
+ TechlifyTaggerTagFormFieldComponent.propDecorators = {
5855
+ tagInput: [{ type: ViewChild, args: ['tagInput',] }],
5856
+ config: [{ type: Input }],
5857
+ modelType: [{ type: Input }],
5858
+ modelId: [{ type: Input }],
5859
+ allTags: [{ type: Input }],
5860
+ categories: [{ type: Input }],
5861
+ defaultCreateCategory: [{ type: Input }],
5862
+ required: [{ type: Input }],
5863
+ disabled: [{ type: Input }],
5864
+ value: [{ type: Input }],
5865
+ placeholder: [{ type: Input }]
5866
+ };
5867
+ TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = __decorate([
5868
+ UntilDestroy()
5869
+ ], TechlifyTaggerTagFormFieldComponent);
5870
+
5871
+ class TechlifyTaggerTagFormFieldModule {
5604
5872
  }
5605
- ImageForModelRoutingModule.decorators = [
5873
+ TechlifyTaggerTagFormFieldModule.decorators = [
5606
5874
  { type: NgModule, args: [{
5607
- imports: [RouterModule.forChild(routes$n)],
5608
- exports: [RouterModule]
5875
+ declarations: [
5876
+ TechlifyTaggerTagFormFieldComponent
5877
+ ],
5878
+ imports: [
5879
+ CommonModule,
5880
+ MaterialModule,
5881
+ FlexLayoutModule,
5882
+ MatAutocompleteModule,
5883
+ ReactiveFormsModule
5884
+ ],
5885
+ exports: [TechlifyTaggerTagFormFieldComponent]
5609
5886
  },] }
5610
5887
  ];
5611
5888
 
5612
- let ImageForModelComponent = class ImageForModelComponent {
5613
- constructor(http, alertService) {
5614
- this.http = http;
5615
- this.alertService = alertService;
5616
- this.containerId = 'file-upload';
5617
- this.imageFileChange = new EventEmitter();
5618
- this.imageUrlChange = new EventEmitter();
5619
- }
5620
- ngOnInit() {
5889
+ var TechlifyTaggerTagSelectorComponent_1;
5890
+ let TechlifyTaggerTagSelectorComponent = TechlifyTaggerTagSelectorComponent_1 = class TechlifyTaggerTagSelectorComponent {
5891
+ constructor(_focusMonitor, _elementRef, httpService, _formField, ngControl) {
5892
+ this._focusMonitor = _focusMonitor;
5893
+ this._elementRef = _elementRef;
5894
+ this.httpService = httpService;
5895
+ this._formField = _formField;
5896
+ this.ngControl = ngControl;
5897
+ /**Pass the Categories to filter for a model */
5898
+ this.categories = [];
5899
+ this.multiple = false;
5900
+ this.enableSearch = true;
5901
+ this.tagSelectorCtrl = new FormControl();
5902
+ this.showAllTags = false;
5903
+ this.useSelectButtonStyle = false;
5904
+ this.tags = [];
5905
+ this.stateChanges = new Subject();
5906
+ this.focused = false;
5907
+ this.controlType = 'techlify-tagger-selector';
5908
+ this.id = `techlify-tagger-selector-${TechlifyTaggerTagSelectorComponent_1.nextId++}`;
5909
+ this.onChange = (_) => { };
5910
+ this.onTouched = () => { };
5911
+ this._required = false;
5912
+ this._disabled = false;
5913
+ //Set Focus Monitor
5914
+ _focusMonitor.monitor(_elementRef, true).subscribe(origin => {
5915
+ if (this.focused && !origin) {
5916
+ this.onTouched();
5917
+ }
5918
+ this.focused = !!origin;
5919
+ this.stateChanges.next();
5920
+ });
5921
+ if (this.ngControl != null) {
5922
+ this.ngControl.valueAccessor = this;
5923
+ }
5621
5924
  }
5622
- /**Method tp validate the file size */
5623
- fileSizeAllowed(file) {
5624
- if (!Boolean(this.maxUploadSize)) {
5625
- return true;
5925
+ get apiUrl() {
5926
+ var _a;
5927
+ if (this.showAllTags) {
5928
+ return 'api/techlify-tagger-tags';
5626
5929
  }
5627
- else if (file.size / (1024 * 1024) < this.maxUploadSize) {
5628
- return true;
5930
+ else if (((_a = this.categories) === null || _a === void 0 ? void 0 : _a.length) > 0) {
5931
+ return 'api/techlify-tagger-tags?categories=' + this.categories.join(',');
5629
5932
  }
5630
5933
  else {
5631
- this.alertService.addAlert(`The size of the file exceeds the limit ${this.maxUploadSize} MB, kindly upload a file with size ${this.maxUploadSize} MB or below`, "warn");
5632
- return false;
5934
+ return '';
5633
5935
  }
5634
5936
  }
5635
- onselectFile(e) {
5636
- if (e.target.files && this.fileSizeAllowed(e.target.files[0])) {
5637
- this.uploadFile(e.target.files[0]);
5937
+ //Default Getter and Setters for a Form Field Implementation
5938
+ get empty() {
5939
+ return this.value.length == 0;
5940
+ }
5941
+ get shouldLabelFloat() {
5942
+ return this.focused || !this.empty;
5943
+ }
5944
+ get required() {
5945
+ return this._required;
5946
+ }
5947
+ set required(value) {
5948
+ this._required = coerceBooleanProperty(value);
5949
+ this.stateChanges.next();
5950
+ }
5951
+ get disabled() {
5952
+ return this._disabled;
5953
+ }
5954
+ set disabled(value) {
5955
+ this._disabled = coerceBooleanProperty(value);
5956
+ this._disabled ? this.tagSelectorCtrl.disable() : this.tagSelectorCtrl.enable();
5957
+ this.stateChanges.next();
5958
+ }
5959
+ get value() {
5960
+ return this._value;
5961
+ }
5962
+ set value(val) {
5963
+ this._value = val;
5964
+ this.tagSelectorCtrl.setValue(val);
5965
+ this.stateChanges.next();
5966
+ }
5967
+ get errorState() {
5968
+ return this.tagSelectorCtrl.dirty && this.required && (this.value.length == 0);
5969
+ }
5970
+ get placeholder() {
5971
+ return this._placeholder;
5972
+ }
5973
+ set placeholder(value) {
5974
+ this._placeholder = value;
5975
+ this.stateChanges.next();
5976
+ }
5977
+ ngOnInit() {
5978
+ if (this.useSelectButtonStyle) {
5979
+ this.httpService.get(this.apiUrl)
5980
+ .pipe(untilDestroyed(this))
5981
+ .subscribe((res) => {
5982
+ this.tags = res.data;
5983
+ });
5638
5984
  }
5639
5985
  }
5640
- uploadFile(file) {
5641
- const formData = new FormData();
5642
- formData.append("fileData", file);
5643
- this.http
5644
- .skipHeader()
5645
- .post(this.uploadUrl, formData)
5646
- .pipe(untilDestroyed(this))
5647
- .subscribe((result) => {
5648
- var _a, _b;
5649
- this.imageFile = (_a = result.item) === null || _a === void 0 ? void 0 : _a.file;
5650
- this.imageUrl = (_b = result.item) === null || _b === void 0 ? void 0 : _b.url;
5651
- this.imageFileChange.emit(this.imageFile);
5652
- this.imageUrlChange.emit(this.imageUrl);
5653
- });
5986
+ selectionChange(value) {
5987
+ this.value = value;
5988
+ this._handleInput();
5654
5989
  }
5655
- removeImage(event) {
5656
- event.stopPropagation();
5657
- this.http
5658
- .put(this.removeUrl, { file: this.imageFile })
5659
- .pipe(untilDestroyed(this))
5660
- .subscribe((result) => {
5661
- this.imageFile = '';
5662
- this.imageUrl = '';
5663
- this.imageFileChange.emit(this.imageFile);
5664
- this.imageUrlChange.emit(this.imageUrl);
5665
- });
5990
+ setDescribedByIds(ids) {
5991
+ // Just a empty implementation for Mat Form Field Interface
5666
5992
  }
5667
- viewImage(event) {
5668
- event.stopPropagation();
5669
- window.open(this.imageUrl, '_blank');
5993
+ onContainerClick() {
5994
+ // Just a empty implementation for Mat Form Field Interface
5995
+ }
5996
+ writeValue(val) {
5997
+ this.value = val;
5998
+ }
5999
+ registerOnChange(fn) {
6000
+ this.onChange = fn;
6001
+ }
6002
+ registerOnTouched(fn) {
6003
+ this.onTouched = fn;
6004
+ }
6005
+ setDisabledState(isDisabled) {
6006
+ this.disabled = isDisabled;
6007
+ }
6008
+ _handleInput() {
6009
+ this.onChange(this.value);
6010
+ }
6011
+ ngOnDestroy() {
6012
+ this.stateChanges.complete();
6013
+ this._focusMonitor.stopMonitoring(this._elementRef);
5670
6014
  }
5671
6015
  };
5672
- ImageForModelComponent.decorators = [
6016
+ TechlifyTaggerTagSelectorComponent.nextId = 0;
6017
+ TechlifyTaggerTagSelectorComponent.decorators = [
5673
6018
  { type: Component, args: [{
5674
- selector: 'app-image-for-model',
5675
- template: "<input [id]=\"containerId\" type=\"file\" (change)=\"onselectFile($event)\" accept=\"image/*\" />\n<label [for]=\"containerId\" id=\"file-drag\" [ngStyle]=\"containerStyle\">\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" id=\"file-image\" alt=\"Preview\">\n <div fxLayout *ngIf=\"imageUrl\" class=\"image-action\">\n <button type=\"button\" *ngIf=\"!disableRemove \" mat-icon-button color=\"accent\" (click)=\"removeImage($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button type=\"button\" *ngIf=\"enableView\" mat-icon-button color=\"primary\" (click)=\"viewImage($event)\">\n <mat-icon>preview</mat-icon>\n </button>\n </div>\n <div style=\"height: 100%;\" *ngIf=\"!imageUrl\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-icon>cloud_upload</mat-icon>\n <div>Select a file to upload</div>\n </div>\n</label>",
5676
- styles: ["input[type=file]{display:none}label{-webkit-user-select:none;border:3px solid #eee;border-radius:7px;clear:both;float:left;height:300px;padding:10px;text-align:center;transition:all .2s ease;user-select:none;width:300px}label:hover{border-color:#000;cursor:pointer}label #file-image{display:inline;height:100%;object-fit:cover;width:100%}label #file-image.hidden{display:none}.image-action{background:hsla(0,0%,88.2%,.2);position:relative;top:-35px}"]
6019
+ selector: 'app-techlify-tagger-tag-selector',
6020
+ template: "<app-searchable-selector *ngIf=\"apiUrl && !useSelectButtonStyle\" [formControl]=\"tagSelectorCtrl\" [apiUrl]=\"apiUrl\"\n [enableSearch]=\"enableSearch\" [multiple]=\"multiple\" (selectionChange)=\"selectionChange($event)\">\n</app-searchable-selector>\n\n<mat-button-toggle-group *ngIf=\"apiUrl && useSelectButtonStyle\" [formControl]=\"tagSelectorCtrl\" [multiple]=\"multiple\"\n (change)=\"selectionChange($event.value)\">\n <mat-button-toggle *ngFor=\"let tag of tags\" [value]=\"tag.id\">{{tag.title}}</mat-button-toggle>\n</mat-button-toggle-group>",
6021
+ providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagSelectorComponent_1 }],
6022
+ styles: [""]
5677
6023
  },] }
5678
6024
  ];
5679
- ImageForModelComponent.ctorParameters = () => [
6025
+ TechlifyTaggerTagSelectorComponent.ctorParameters = () => [
6026
+ { type: FocusMonitor },
6027
+ { type: ElementRef },
5680
6028
  { type: HttpService },
5681
- { type: AlertService }
6029
+ { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] },
6030
+ { type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
5682
6031
  ];
5683
- ImageForModelComponent.propDecorators = {
5684
- uploadUrl: [{ type: Input }],
5685
- removeUrl: [{ type: Input }],
5686
- imageFile: [{ type: Input }],
5687
- imageUrl: [{ type: Input }],
5688
- maxUploadSize: [{ type: Input }],
5689
- disableRemove: [{ type: Input }],
5690
- enableView: [{ type: Input }],
5691
- containerStyle: [{ type: Input }],
5692
- containerId: [{ type: Input }],
5693
- imageFileChange: [{ type: Output }],
5694
- imageUrlChange: [{ type: Output }]
6032
+ TechlifyTaggerTagSelectorComponent.propDecorators = {
6033
+ categories: [{ type: Input }],
6034
+ multiple: [{ type: Input }],
6035
+ enableSearch: [{ type: Input }],
6036
+ showAllTags: [{ type: Input }],
6037
+ useSelectButtonStyle: [{ type: Input }],
6038
+ required: [{ type: Input }],
6039
+ disabled: [{ type: Input }],
6040
+ value: [{ type: Input }],
6041
+ placeholder: [{ type: Input }]
5695
6042
  };
5696
- ImageForModelComponent = __decorate([
6043
+ TechlifyTaggerTagSelectorComponent = TechlifyTaggerTagSelectorComponent_1 = __decorate([
5697
6044
  UntilDestroy()
5698
- ], ImageForModelComponent);
6045
+ ], TechlifyTaggerTagSelectorComponent);
5699
6046
 
5700
- class ImageForModelModule {
6047
+ class TechlifyTaggerTagSelectorModule {
5701
6048
  }
5702
- ImageForModelModule.decorators = [
6049
+ TechlifyTaggerTagSelectorModule.decorators = [
5703
6050
  { type: NgModule, args: [{
5704
- declarations: [ImageForModelComponent],
6051
+ declarations: [
6052
+ TechlifyTaggerTagSelectorComponent
6053
+ ],
5705
6054
  imports: [
5706
6055
  CommonModule,
5707
6056
  MaterialModule,
5708
6057
  FlexLayoutModule,
6058
+ MatAutocompleteModule,
5709
6059
  ReactiveFormsModule,
5710
- ImageForModelRoutingModule
6060
+ SearchableSelectorModule,
6061
+ MatButtonToggleModule
5711
6062
  ],
5712
- exports: [ImageForModelComponent]
6063
+ exports: [TechlifyTaggerTagSelectorComponent]
5713
6064
  },] }
5714
6065
  ];
5715
6066
 
@@ -5721,5 +6072,5 @@ ImageForModelModule.decorators = [
5721
6072
  * Generated bundle index. Do not edit.
5722
6073
  */
5723
6074
 
5724
- export { ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, ConfigService, CoreModule, CredentialsService, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FailedItemsComponent, FailedItemsModule, FailedItemsRoutingModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImageForModelComponent, ImageForModelModule, ImageForModelRoutingModule, ImportConfig, ImportCsvComponent, ImportCsvModule, ImportCsvRoutingModule, ImportItemsComponent, ImportItemsModule, ImportItemsRoutingModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, MatSelectInfiniteScrollDirective, MaterialModule, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberSelector, PageEvent, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyConfig, TechlifyUpdateHistoryModule, TechlifyUpdateModule, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, UtilityModule, ViewerConfig, calculateTimeline, SnackModule as ɵa, SuccessSnackComponent as ɵb, EmailSubscriptionUserFormComponent as ɵba, EmailSubscriptionUserListComponent as ɵbb, AuthenticationGuard as ɵbc, CredentialsService as ɵbd, ConfigService as ɵbe, TechlifyConfig as ɵbf, EmailSubscriptionUserListFilterComponent as ɵbg, EmailSubscriptionTypeFormComponent as ɵbh, EmailSubscriptionTypeListComponent as ɵbi, EmailSubscriptionForUserComponent as ɵbj, TechlifyUpdatesListComponent as ɵbk, TechlifyUpdateService as ɵbl, TechlifyUpdateRoutingModule as ɵbm, TechlifyUpdateFormModule as ɵbn, TechlifyUpdateFormComponent as ɵbo, ReadMoreModule as ɵbp, ReadMoreComponent as ɵbq, TechlifyUpdateHistoryRoutingModule as ɵbr, TechlifyUpdateHistoryComponent as ɵbs, UpdateNotifierSnackComponent as ɵbt, UpdateViewModule as ɵbu, UpdateViewComponent as ɵbv, DataManager as ɵbw, ErrorSnackComponent as ɵc, HTTP_DYNAMIC_INTERCEPTORS as ɵd, HttpService as ɵe, RouteReusableStrategy as ɵf, ActionPopupComponent as ɵg, ActionPopup as ɵh, DataTableComponent as ɵi, DocumentViewerComponent as ɵj, EntityFileFormComponent as ɵk, FormValidatorService as ɵl, EntityFileService as ɵm, AlertService as ɵn, EntityFilesViewAllComponent as ɵo, FileDropperComponent as ɵp, NoteListComponent as ɵq, NoteService as ɵr, NoteFormComponent as ɵs, SearchableSelectorComponent as ɵt, MatSelectInfiniteScrollDirective as ɵu, NumItemsSelector as ɵv, NumberSelector as ɵw, TimelineFilterComponent as ɵx, TimelineFilterRoutingModule as ɵy, LoaderComponent as ɵz };
6075
+ export { ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, ConfigService, CoreModule, CredentialsService, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FailedItemsComponent, FailedItemsModule, FailedItemsRoutingModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImportConfig, ImportCsvComponent, ImportCsvModule, ImportCsvRoutingModule, ImportItemsComponent, ImportItemsModule, ImportItemsRoutingModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, MatSelectInfiniteScrollDirective, MaterialModule, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberSelector, PageEvent, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyConfig, TechlifyTaggerTagFormConfigModel, TechlifyTaggerTagFormFieldComponent, TechlifyTaggerTagFormFieldModule, TechlifyTaggerTagSelectorComponent, TechlifyTaggerTagSelectorModule, TechlifyUpdateHistoryModule, TechlifyUpdateModule, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, UtilityModule, ViewerConfig, calculateTimeline, esfur, estlr, esulr, SnackModule as ɵa, SuccessSnackComponent as ɵb, EmailSubscriptionUserFormComponent as ɵba, EmailSubscriptionUserListComponent as ɵbb, AuthenticationGuard as ɵbc, CredentialsService as ɵbd, ConfigService as ɵbe, TechlifyConfig as ɵbf, EmailSubscriptionUserListFilterComponent as ɵbg, EmailSubscriptionTypeFormComponent as ɵbh, EmailSubscriptionTypeListComponent as ɵbi, EmailSubscriptionForUserComponent as ɵbj, TechlifyUpdatesListComponent as ɵbk, TechlifyUpdateService as ɵbl, TechlifyUpdateRoutingModule as ɵbm, TechlifyUpdateFormModule as ɵbn, TechlifyUpdateFormComponent as ɵbo, ReadMoreModule as ɵbp, ReadMoreComponent as ɵbq, TechlifyUpdateHistoryRoutingModule as ɵbr, TechlifyUpdateHistoryComponent as ɵbs, UpdateNotifierSnackComponent as ɵbt, UpdateViewModule as ɵbu, UpdateViewComponent as ɵbv, DataManager as ɵbw, ErrorSnackComponent as ɵc, HTTP_DYNAMIC_INTERCEPTORS as ɵd, HttpService as ɵe, RouteReusableStrategy as ɵf, ActionPopupComponent as ɵg, ActionPopup as ɵh, DataTableComponent as ɵi, DocumentViewerComponent as ɵj, EntityFileFormComponent as ɵk, FormValidatorService as ɵl, EntityFileService as ɵm, AlertService as ɵn, EntityFilesViewAllComponent as ɵo, FileDropperComponent as ɵp, NoteListComponent as ɵq, NoteService as ɵr, NoteFormComponent as ɵs, SearchableSelectorComponent as ɵt, MatSelectInfiniteScrollDirective as ɵu, NumItemsSelector as ɵv, NumberSelector as ɵw, TimelineFilterComponent as ɵx, TimelineFilterRoutingModule as ɵy, LoaderComponent as ɵz };
5725
6076
  //# sourceMappingURL=ngx-techlify-core.js.map