ngx-sfc-common 0.0.4 → 0.0.5

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 (84) hide show
  1. package/_ngx-sfc-common.styles.scss +25 -0
  2. package/esm2020/lib/components/button/button.component.mjs +7 -6
  3. package/esm2020/lib/components/checkmark/checkmark-type.enum.mjs +6 -0
  4. package/esm2020/lib/components/checkmark/checkmark.component.mjs +21 -8
  5. package/esm2020/lib/components/index.mjs +7 -2
  6. package/esm2020/lib/components/load-container/load-container.component.mjs +161 -0
  7. package/esm2020/lib/components/load-container/load-container.constants.mjs +5 -0
  8. package/esm2020/lib/components/load-container/load-container.enum.mjs +6 -0
  9. package/esm2020/lib/components/load-container/models/load-container.model.mjs +2 -0
  10. package/esm2020/lib/components/load-container/models/load-more-parameters.model.mjs +2 -0
  11. package/esm2020/lib/components/load-container/models/load-more.model.mjs +2 -0
  12. package/esm2020/lib/components/load-container/service/load-more.service.mjs +27 -0
  13. package/esm2020/lib/components/load-more-button/load-more-button.component.mjs +31 -0
  14. package/esm2020/lib/components/loader/service/loader.service.mjs +4 -4
  15. package/esm2020/lib/components/modal/directive/click/modal-open-on-click.directive.mjs +48 -0
  16. package/esm2020/lib/components/modal/directive/open/modal-open.directive.mjs +29 -0
  17. package/esm2020/lib/components/modal/footer/default/default-modal-footer.component.mjs +1 -1
  18. package/esm2020/lib/components/modal/modal.component.mjs +3 -3
  19. package/esm2020/lib/components/modal/service/modal.service.mjs +1 -1
  20. package/esm2020/lib/components/toggle-switcher/toggle-switcher.component.mjs +9 -3
  21. package/esm2020/lib/constants/common.constants.mjs +2 -1
  22. package/esm2020/lib/constants/date-time.constants.mjs +3 -1
  23. package/esm2020/lib/constants/file.constants.mjs +2 -0
  24. package/esm2020/lib/constants/index.mjs +1 -1
  25. package/esm2020/lib/directives/component-size/component-size.directive.mjs +23 -10
  26. package/esm2020/lib/directives/dom-changes/dom-changes.directive.mjs +32 -0
  27. package/esm2020/lib/directives/index.mjs +4 -1
  28. package/esm2020/lib/directives/scroll-into-view/scroll-into-view.directive.mjs +29 -0
  29. package/esm2020/lib/directives/scroll-tracker/scroll-tracker.directive.mjs +39 -0
  30. package/esm2020/lib/enums/index.mjs +2 -1
  31. package/esm2020/lib/enums/sequence.enum.mjs +9 -0
  32. package/esm2020/lib/enums/ui.enum.mjs +4 -1
  33. package/esm2020/lib/ngx-sfc-common.module.mjs +41 -8
  34. package/esm2020/lib/pipes/index.mjs +2 -0
  35. package/esm2020/lib/pipes/switch-multi-case/switch-multi-case.pipe.mjs +16 -0
  36. package/esm2020/lib/utils/collections.utils.mjs +30 -3
  37. package/esm2020/lib/utils/common.utils.mjs +9 -2
  38. package/esm2020/lib/utils/date-time.utils.mjs +57 -10
  39. package/esm2020/lib/utils/file.utils.mjs +4 -3
  40. package/esm2020/lib/utils/index.mjs +5 -5
  41. package/esm2020/lib/utils/ui.utils.mjs +9 -1
  42. package/esm2020/public-api.mjs +2 -1
  43. package/fesm2015/ngx-sfc-common.mjs +558 -52
  44. package/fesm2015/ngx-sfc-common.mjs.map +1 -1
  45. package/fesm2020/ngx-sfc-common.mjs +558 -52
  46. package/fesm2020/ngx-sfc-common.mjs.map +1 -1
  47. package/lib/components/checkmark/checkmark-type.enum.d.ts +4 -0
  48. package/lib/components/checkmark/checkmark.component.d.ts +5 -2
  49. package/lib/components/index.d.ts +11 -1
  50. package/lib/components/load-container/load-container.component.d.ts +49 -0
  51. package/lib/components/load-container/load-container.constants.d.ts +4 -0
  52. package/lib/components/load-container/load-container.enum.d.ts +4 -0
  53. package/lib/components/load-container/models/load-container.model.d.ts +11 -0
  54. package/lib/components/load-container/models/load-more-parameters.model.d.ts +4 -0
  55. package/lib/components/load-container/models/load-more.model.d.ts +4 -0
  56. package/lib/components/load-container/service/load-more.service.d.ts +12 -0
  57. package/lib/components/load-more-button/load-more-button.component.d.ts +12 -0
  58. package/lib/components/modal/directive/{modal-open-on-click.directive.d.ts → click/modal-open-on-click.directive.d.ts} +1 -1
  59. package/lib/components/modal/directive/open/modal-open.directive.d.ts +14 -0
  60. package/lib/components/modal/service/modal.service.d.ts +1 -1
  61. package/lib/components/toggle-switcher/toggle-switcher.component.d.ts +2 -1
  62. package/lib/constants/common.constants.d.ts +1 -0
  63. package/lib/constants/date-time.constants.d.ts +2 -0
  64. package/lib/constants/file.constants.d.ts +1 -0
  65. package/lib/constants/index.d.ts +1 -0
  66. package/lib/directives/component-size/component-size.directive.d.ts +7 -2
  67. package/lib/directives/dom-changes/dom-changes.directive.d.ts +12 -0
  68. package/lib/directives/index.d.ts +3 -0
  69. package/lib/directives/scroll-into-view/scroll-into-view.directive.d.ts +7 -0
  70. package/lib/directives/scroll-tracker/scroll-tracker.directive.d.ts +11 -0
  71. package/lib/enums/index.d.ts +1 -0
  72. package/lib/enums/sequence.enum.d.ts +7 -0
  73. package/lib/enums/ui.enum.d.ts +4 -1
  74. package/lib/ngx-sfc-common.module.d.ts +28 -21
  75. package/lib/pipes/index.d.ts +1 -0
  76. package/lib/pipes/switch-multi-case/switch-multi-case.pipe.d.ts +7 -0
  77. package/lib/utils/collections.utils.d.ts +16 -2
  78. package/lib/utils/common.utils.d.ts +5 -0
  79. package/lib/utils/date-time.utils.d.ts +26 -0
  80. package/lib/utils/index.d.ts +4 -4
  81. package/lib/utils/ui.utils.d.ts +6 -0
  82. package/package.json +1 -1
  83. package/public-api.d.ts +1 -0
  84. package/esm2020/lib/components/modal/directive/modal-open-on-click.directive.mjs +0 -50
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, PLATFORM_ID, EventEmitter, Directive, Inject, Input, Output, HostListener, Component, HostBinding, ContentChildren, NgModule } from '@angular/core';
2
+ import { InjectionToken, Injectable, PLATFORM_ID, EventEmitter, Directive, Inject, Input, Output, HostListener, Pipe, Component, HostBinding, ContentChildren, ViewChild, NgModule } from '@angular/core';
3
3
  import * as i1$2 from '@angular/common';
4
4
  import { isPlatformBrowser, CommonModule } from '@angular/common';
5
5
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
6
- import { Subject, fromEvent, Observable, startWith, BehaviorSubject, filter, distinctUntilChanged, map, EMPTY, combineLatest } from 'rxjs';
7
- import * as i1 from '@angular/platform-browser';
8
6
  import * as i1$1 from '@fortawesome/angular-fontawesome';
9
7
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
8
+ import { Subject, fromEvent, Observable, startWith, BehaviorSubject, filter, distinctUntilChanged, map, EMPTY, combineLatest, tap, switchMap, withLatestFrom, of } from 'rxjs';
9
+ import * as i1 from '@angular/platform-browser';
10
10
  import { trigger, state, style, transition, group, query, animate, animateChild } from '@angular/animations';
11
- import { faTimes, faWindowRestore, faCheck, faChevronLeft, faChevronRight, faChevronUp, faChevronDown } from '@fortawesome/free-solid-svg-icons';
11
+ import { faTimes, faWindowRestore, faCheck, faChevronLeft, faChevronRight, faChevronUp, faChevronDown, faChevronCircleDown } from '@fortawesome/free-solid-svg-icons';
12
12
 
13
13
  /**
14
14
  * Component sizes
@@ -78,6 +78,7 @@ var UIClass;
78
78
  UIClass["Active"] = "active";
79
79
  UIClass["Valid"] = "valid";
80
80
  UIClass["Invalid"] = "invalid";
81
+ UIClass["InnerInvalid"] = "inner-invalid";
81
82
  UIClass["Enabled"] = "enabled";
82
83
  UIClass["Disabled"] = "disabled";
83
84
  UIClass["Selected"] = "selected";
@@ -94,9 +95,20 @@ var UIClass;
94
95
  UIClass["Bordered"] = "bordered";
95
96
  UIClass["Even"] = "even";
96
97
  UIClass["Pointer"] = "pointer";
98
+ UIClass["Default"] = "default";
99
+ UIClass["Initialization"] = "initialization";
97
100
  })(UIClass || (UIClass = {}));
98
101
  ;
99
102
 
103
+ /**
104
+ * Sequence types
105
+ */
106
+ var Sequence;
107
+ (function (Sequence) {
108
+ Sequence["Previous"] = "previous";
109
+ Sequence["Next"] = "next";
110
+ })(Sequence || (Sequence = {}));
111
+
100
112
  /**
101
113
  * Create a new injection token for injecting the Document into a component.
102
114
  */
@@ -335,12 +347,15 @@ class CommonConstants {
335
347
  CommonConstants.NOT_FOUND_INDEX = -1;
336
348
  CommonConstants.EMPTY_STRING = '';
337
349
  CommonConstants.MOUSE_BUTTON_LEFT = 0;
338
- CommonConstants.FULL_PERCENTAGE = 100;
350
+ CommonConstants.FULL_PERCENTAGE = 100;
351
+ CommonConstants.COMMON_TEXT_DELIMETER = '/';
339
352
 
340
353
  class DateTimeConstants {
341
354
  }
342
355
  DateTimeConstants.DAYS_IN_WEEK = 7;
343
356
  DateTimeConstants.HOURS_IN_SHORT_TIME = 12;
357
+ DateTimeConstants.HOURS_IN_TIME = 24;
358
+ DateTimeConstants.MIDNIGHT_HOUR = 0;
344
359
  DateTimeConstants.MINUTES_IN_HOUR = 60;
345
360
  DateTimeConstants.DAYS_OF_WEEK = ["S", "M", "T", "W", "T", "F", "S"];
346
361
  DateTimeConstants.DAYS_OF_WEEK_3 = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
@@ -435,7 +450,7 @@ function isAsyncData(data) {
435
450
  * @returns Extended object with new property
436
451
  */
437
452
  function addPropertyToObject(obj, property, value = null) {
438
- if (!isDefined(property) && !obj.hasOwnProperty(property)) {
453
+ if (isDefined(property) && !obj.hasOwnProperty(property)) {
439
454
  let newObj = {};
440
455
  newObj[property] = value;
441
456
  obj = { ...obj, ...newObj };
@@ -494,6 +509,13 @@ const nameof = (name) => name;
494
509
  */
495
510
  function isNumeric(number) {
496
511
  return !isNaN(parseFloat(number));
512
+ }
513
+ /**
514
+ * Return true if current browser is Chrome
515
+ * @returns If current browser is Chrome
516
+ */
517
+ function isChromeBrowser() {
518
+ return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
497
519
  }
498
520
 
499
521
  /**
@@ -532,8 +554,9 @@ function trim(value) {
532
554
  * @returns Date with minute value
533
555
  */
534
556
  function setMinutes(date, minute) {
535
- date.setMinutes(minute);
536
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
557
+ const result = new Date(date);
558
+ result.setMinutes(minute);
559
+ return result;
537
560
  }
538
561
  /**
539
562
  * Set hours for date
@@ -542,8 +565,9 @@ function setMinutes(date, minute) {
542
565
  * @returns Date with hour value
543
566
  */
544
567
  function setHours(date, hour) {
545
- date.setHours(hour);
546
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
568
+ const result = new Date(date);
569
+ result.setHours(hour);
570
+ return result;
547
571
  }
548
572
  /**
549
573
  * Set day for date value
@@ -563,8 +587,52 @@ function setDay(date, dayNumber) {
563
587
  * @returns Date with year value
564
588
  */
565
589
  function setYear(date, year) {
566
- date.setFullYear(year);
567
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
590
+ const result = new Date(date);
591
+ result.setFullYear(year);
592
+ return result;
593
+ }
594
+ /**
595
+ * Set seconds for date
596
+ * @param date Date value
597
+ * @param value Seconds value
598
+ * @returns Date with minute value
599
+ */
600
+ function setSeconds(date, value) {
601
+ const result = new Date(date);
602
+ result.setSeconds(value);
603
+ return result;
604
+ }
605
+ /**
606
+ * Set milliseconds for date
607
+ * @param date Date value
608
+ * @param value Milliseconds value
609
+ * @returns Date with minute value
610
+ */
611
+ function setMilliseconds(date, value) {
612
+ const result = new Date(date);
613
+ result.setMilliseconds(value);
614
+ return result;
615
+ }
616
+ /**
617
+ * Set 0 for seconds and milliseconds of date
618
+ * @param date Date value
619
+ * @returns Date with minute value
620
+ */
621
+ function setDefaultSecondsAndMiliseconds(date) {
622
+ const result = new Date(date);
623
+ result.setSeconds(0);
624
+ result.setMilliseconds(0);
625
+ return result;
626
+ }
627
+ /**
628
+ * Get next date
629
+ * @param date Date value
630
+ * @returns Next date
631
+ */
632
+ function getNextDate(date) {
633
+ const nextDate = new Date(date);
634
+ nextDate.setDate(date.getDate() + 1);
635
+ return nextDate;
568
636
  }
569
637
  /**
570
638
  * Get next month as date
@@ -686,9 +754,10 @@ function getWeeksNumberInMonth(date) {
686
754
  * @returns True if first and second date are equal
687
755
  */
688
756
  function isEqualDates(date1, date2) {
689
- date1.setHours(0, 0, 0, 0);
690
- date2.setHours(0, 0, 0, 0);
691
- return date1.getTime() === date2.getTime();
757
+ const date1Value = new Date(date1), date2Value = new Date(date2);
758
+ date1Value.setHours(0, 0, 0, 0);
759
+ date2Value.setHours(0, 0, 0, 0);
760
+ return date1Value.getTime() === date2Value.getTime();
692
761
  }
693
762
  /**
694
763
  * Return true if first date greater than second date
@@ -770,7 +839,8 @@ function readAsDataURL(file, onLoad) {
770
839
  reader.onload = () => onLoad(reader.result);
771
840
  reader.readAsDataURL(file);
772
841
  }
773
- throw new Error('File utils | Read as data URL function --> File is empty.');
842
+ else
843
+ throw new Error('File utils | Read as data URL function --> File is empty.');
774
844
  }
775
845
  /**
776
846
  * Return true if file is image
@@ -778,7 +848,7 @@ function readAsDataURL(file, onLoad) {
778
848
  * @returns True if file is image
779
849
  */
780
850
  function isImage(file) {
781
- return (/\.(gif|jpe?g|jpg|tiff|png|webp|bmp)$/i).test(file.name);
851
+ return isDefined(file) && (/\.(gif|jpe?g|jpg|tiff|png|webp|bmp)$/i).test(file.name);
782
852
  }
783
853
 
784
854
  /**
@@ -806,6 +876,14 @@ function getValueFromCssLikeValue(value, type = UIConstants.CSS_PIXELS) {
806
876
  function getCalcValue(part, value = 100) {
807
877
  return `calc(${value}${UIConstants.CSS_PERCENTAGE} / ${part} )`;
808
878
  }
879
+ /**
880
+ * Return CCS like rotate value
881
+ * @param value value as degrees
882
+ * @returns Rotate value
883
+ */
884
+ function getRotateValue(value) {
885
+ return `rotate(${value}deg)`;
886
+ }
809
887
  /**
810
888
  * Add classes to HTML element
811
889
  * @param element HTML element
@@ -958,6 +1036,14 @@ function skip(collection, page, size) {
958
1036
  }
959
1037
  return collection;
960
1038
  }
1039
+ function sort(collection, direction = SortingDirection.Ascending) {
1040
+ if (any(collection)) {
1041
+ return direction == SortingDirection.Ascending
1042
+ ? collection.sort((a, b) => a - b)
1043
+ : collection.sort((a, b) => b - a);
1044
+ }
1045
+ return collection;
1046
+ }
961
1047
  /**
962
1048
  * Return sorted collection of objects by property
963
1049
  * @param collection Array of items
@@ -1066,13 +1152,26 @@ function addItem(collection, item, predicate) {
1066
1152
  collection.push(item);
1067
1153
  return true;
1068
1154
  }
1155
+ /**
1156
+ * Delete item from collection
1157
+ * @param collection Array of items
1158
+ * @param item Item to delete
1159
+ * @returns True if successfully removed
1160
+ */
1161
+ function removeItem(collection, item) {
1162
+ if (isDefined(item) && hasItem(collection, item)) {
1163
+ collection.splice(collection.indexOf(item), 1);
1164
+ return true;
1165
+ }
1166
+ return false;
1167
+ }
1069
1168
  /**
1070
1169
  * Delete item from collection by predicate
1071
1170
  * @param collection Array of items
1072
1171
  * @param predicate Function to define remove logic
1073
1172
  * @returns True if successfully removed
1074
1173
  */
1075
- function removeItem(collection, predicate) {
1174
+ function removeItemBy(collection, predicate) {
1076
1175
  const foundItem = firstOrDefault(collection, predicate);
1077
1176
  if (isDefined(foundItem)) {
1078
1177
  collection.splice(collection.indexOf(foundItem), 1);
@@ -1080,7 +1179,13 @@ function removeItem(collection, predicate) {
1080
1179
  }
1081
1180
  return false;
1082
1181
  }
1083
- function updateItem(collection, predicate, newItem) {
1182
+ /**
1183
+ * Update item in collection by predicate
1184
+ * @param collection Array of items
1185
+ * @param predicate Function to define item for deleting
1186
+ * @returns True if successfully removed
1187
+ */
1188
+ function updateItemBy(collection, predicate, newItem) {
1084
1189
  const itemIndex = collection.findIndex(predicate);
1085
1190
  if (itemIndex !== CommonConstants.NOT_FOUND_INDEX) {
1086
1191
  const result = collection.slice(0);
@@ -1193,27 +1298,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1193
1298
  class ComponentSizeDirective {
1194
1299
  constructor(el) {
1195
1300
  this.el = el;
1196
- this.style.fontSize = this.getSizeValue(this.size);
1301
+ this._customSize = null;
1302
+ this.style.fontSize = getCssLikeValue(this.getSizeProportion(), UIConstants.CSS_EM);
1197
1303
  }
1198
1304
  set size(value) {
1199
- this.style.fontSize = this.getSizeValue(value);
1305
+ this._size = value;
1306
+ this.style.fontSize = getCssLikeValue(this.getSizeProportion(), UIConstants.CSS_EM);
1307
+ }
1308
+ get size() {
1309
+ return this._size;
1200
1310
  }
1201
1311
  set customSize(value) {
1202
- this.style.fontSize = getCssLikeValue(value, UIConstants.CSS_EM);
1312
+ this._customSize = value;
1313
+ if (this._customSize)
1314
+ this.style.fontSize = getCssLikeValue(this._customSize, UIConstants.CSS_EM);
1315
+ }
1316
+ get customSize() {
1317
+ return this._customSize;
1318
+ }
1319
+ get proportion() {
1320
+ return this.customSize || this.getSizeProportion();
1203
1321
  }
1204
1322
  get style() {
1205
1323
  return this.el.nativeElement.style;
1206
1324
  }
1207
- getSizeValue(value) {
1208
- switch (value) {
1325
+ getSizeProportion() {
1326
+ switch (this.size) {
1209
1327
  case ComponentSize.Small:
1210
- return getCssLikeValue(0.5, UIConstants.CSS_EM);
1328
+ return 0.5;
1211
1329
  case ComponentSize.Medium:
1212
- return getCssLikeValue(1, UIConstants.CSS_EM);
1330
+ return 1;
1213
1331
  case ComponentSize.Large:
1214
- return getCssLikeValue(2, UIConstants.CSS_EM);
1332
+ return 2;
1215
1333
  default:
1216
- return getCssLikeValue(1, UIConstants.CSS_EM);
1334
+ return 1;
1217
1335
  }
1218
1336
  }
1219
1337
  }
@@ -1256,6 +1374,111 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1256
1374
  type: Input
1257
1375
  }] } });
1258
1376
 
1377
+ class DomChangesDirective {
1378
+ constructor(elementRef) {
1379
+ this.elementRef = elementRef;
1380
+ this.sfcDomChanges = new EventEmitter();
1381
+ this.options = {
1382
+ attributes: true,
1383
+ childList: true,
1384
+ characterData: true
1385
+ };
1386
+ const element = this.elementRef.nativeElement;
1387
+ this.changes = new MutationObserver((mutations) => mutations.forEach((mutation) => this.sfcDomChanges.emit(mutation)));
1388
+ this.changes.observe(element, this.options);
1389
+ }
1390
+ ngOnDestroy() {
1391
+ this.changes.disconnect();
1392
+ }
1393
+ }
1394
+ DomChangesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DomChangesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1395
+ DomChangesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: DomChangesDirective, selector: "[sfcDomChanges]", inputs: { options: "options" }, outputs: { sfcDomChanges: "sfcDomChanges" }, ngImport: i0 });
1396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DomChangesDirective, decorators: [{
1397
+ type: Directive,
1398
+ args: [{
1399
+ selector: '[sfcDomChanges]'
1400
+ }]
1401
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { sfcDomChanges: [{
1402
+ type: Output
1403
+ }], options: [{
1404
+ type: Input
1405
+ }] } });
1406
+
1407
+ class ScrollTrackerDirective {
1408
+ constructor() {
1409
+ this.positions = [];
1410
+ this.sfcScrollTracker = new EventEmitter();
1411
+ }
1412
+ onScroll(event) {
1413
+ const position = this.getPosition(event);
1414
+ if (position && hasItem(this.positions, position))
1415
+ this.sfcScrollTracker.emit(position);
1416
+ }
1417
+ getPosition(event) {
1418
+ const tracker = event.target, limit = tracker.scrollHeight - tracker.clientHeight, scrollTopFixed = tracker.scrollTop.toFixed();
1419
+ if (scrollTopFixed >= limit)
1420
+ return Position.Bottom;
1421
+ else if (scrollTopFixed <= 0)
1422
+ return Position.Top;
1423
+ return null;
1424
+ }
1425
+ }
1426
+ ScrollTrackerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ScrollTrackerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1427
+ ScrollTrackerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: ScrollTrackerDirective, selector: "[sfcScrollTracker]", inputs: { positions: "positions" }, outputs: { sfcScrollTracker: "sfcScrollTracker" }, host: { listeners: { "scroll": "onScroll($event)" } }, ngImport: i0 });
1428
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ScrollTrackerDirective, decorators: [{
1429
+ type: Directive,
1430
+ args: [{
1431
+ selector: '[sfcScrollTracker]'
1432
+ }]
1433
+ }], propDecorators: { positions: [{
1434
+ type: Input
1435
+ }], sfcScrollTracker: [{
1436
+ type: Output
1437
+ }], onScroll: [{
1438
+ type: HostListener,
1439
+ args: ['scroll', ['$event']]
1440
+ }] } });
1441
+
1442
+ class ScrollIntoViewDirective {
1443
+ constructor() {
1444
+ this.options = { behavior: 'smooth', block: 'center', inline: 'start' };
1445
+ }
1446
+ set sfcScrollIntoView(value) {
1447
+ if (!isDefined(value))
1448
+ return;
1449
+ if (isChromeBrowser())
1450
+ value.scrollIntoViewIfNeeded();
1451
+ else
1452
+ value.scrollIntoView(this.options);
1453
+ }
1454
+ }
1455
+ ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ScrollIntoViewDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1456
+ ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: ScrollIntoViewDirective, selector: "[sfcScrollIntoView]", inputs: { sfcScrollIntoView: "sfcScrollIntoView", options: "options" }, ngImport: i0 });
1457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
1458
+ type: Directive,
1459
+ args: [{
1460
+ selector: '[sfcScrollIntoView]'
1461
+ }]
1462
+ }], propDecorators: { sfcScrollIntoView: [{
1463
+ type: Input
1464
+ }], options: [{
1465
+ type: Input
1466
+ }] } });
1467
+
1468
+ class SwitchMultiCasePipe {
1469
+ transform(cases, switchOption) {
1470
+ return cases.includes(switchOption) ? switchOption : !switchOption;
1471
+ }
1472
+ }
1473
+ SwitchMultiCasePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SwitchMultiCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1474
+ SwitchMultiCasePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SwitchMultiCasePipe, name: "sfcSwitchMultiCase" });
1475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SwitchMultiCasePipe, decorators: [{
1476
+ type: Pipe,
1477
+ args: [{
1478
+ name: 'sfcSwitchMultiCase'
1479
+ }]
1480
+ }] });
1481
+
1259
1482
  var ButtonType;
1260
1483
  (function (ButtonType) {
1261
1484
  ButtonType["Bordered"] = "bordered";
@@ -1274,17 +1497,15 @@ class ButtonComponent {
1274
1497
  }
1275
1498
  get classes() {
1276
1499
  const classes = {};
1277
- if (this.disabled)
1278
- classes[UIClass.Disabled] = true;
1279
1500
  distinct(this.types).forEach(type => classes[type] = true);
1280
1501
  return classes;
1281
1502
  }
1282
1503
  }
1283
1504
  ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1284
- ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ButtonComponent, selector: "sfc-button", inputs: { text: "text", iconBefore: "iconBefore", iconAfter: "iconAfter", disabled: "disabled", types: "types" }, ngImport: i0, template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{text}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [".button.texted:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.texted:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.texted:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered{border:solid 2px}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){border-color:#ccd1d9}.button.filled{color:#fff!important;border-color:#545e61;background:#545e61}.button.filled:hover{color:#fff!important;border-color:#aab2bd;background:#aab2bd}.button.filled.disabled{color:#fff!important;border-color:#bdbdbd;background:#bdbdbd}.button.rounded{border:solid 2px;border-radius:20px;padding:.4em 1.2em}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){color:#ccd1d9}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){color:#ccd1d9}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}.button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .5s ease,border-color .5s ease,background .5s ease}.button:hover{color:#2bbbad;border-color:#2bbbad}.button.disabled{pointer-events:none}.button.disabled,:host-context(.sfc-default-theme) .button.disabled{color:#bdbdbd}:host-context(.sfc-dark-theme) .button.disabled{color:#656d78}.button.disabled,:host-context(.sfc-default-theme) .button.disabled{border-color:#bdbdbd}:host-context(.sfc-dark-theme) .button.disabled{border-color:#656d78}.button .icon{padding:3px}.button .text{padding:3px;white-space:initial}.button .text:empty{display:none}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1505
+ ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ButtonComponent, selector: "sfc-button", inputs: { text: "text", iconBefore: "iconBefore", iconAfter: "iconAfter", disabled: "disabled", types: "types" }, host: { properties: { "class.disabled": "this.disabled" } }, ngImport: i0, template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{text}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [".button.texted:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.texted:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.texted:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered{border:solid 2px}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){border-color:#ccd1d9}.button.filled{color:#fff!important;border-color:#545e61;background:#545e61}.button.filled:hover{color:#fff!important;border-color:#aab2bd;background:#aab2bd}.button.filled.disabled{color:#fff!important;border-color:#bdbdbd;background:#bdbdbd}.button.rounded{border:solid 2px;border-radius:20px;padding:.4em 1.2em}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){color:#ccd1d9}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){color:#ccd1d9}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}:host .button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .5s ease,border-color .5s ease,background .5s ease}:host .button:hover{color:#2bbbad;border-color:#2bbbad}:host .button .icon{padding:3px}:host .button .text{padding:3px;white-space:initial}:host .button .text:empty{display:none}:host.disabled{pointer-events:none}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{color:#656d78}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{border-color:#656d78}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1285
1506
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ButtonComponent, decorators: [{
1286
1507
  type: Component,
1287
- args: [{ selector: 'sfc-button', template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{text}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [".button.texted:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.texted:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.texted:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered{border:solid 2px}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){border-color:#ccd1d9}.button.filled{color:#fff!important;border-color:#545e61;background:#545e61}.button.filled:hover{color:#fff!important;border-color:#aab2bd;background:#aab2bd}.button.filled.disabled{color:#fff!important;border-color:#bdbdbd;background:#bdbdbd}.button.rounded{border:solid 2px;border-radius:20px;padding:.4em 1.2em}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){color:#ccd1d9}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){color:#ccd1d9}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}.button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .5s ease,border-color .5s ease,background .5s ease}.button:hover{color:#2bbbad;border-color:#2bbbad}.button.disabled{pointer-events:none}.button.disabled,:host-context(.sfc-default-theme) .button.disabled{color:#bdbdbd}:host-context(.sfc-dark-theme) .button.disabled{color:#656d78}.button.disabled,:host-context(.sfc-default-theme) .button.disabled{border-color:#bdbdbd}:host-context(.sfc-dark-theme) .button.disabled{border-color:#656d78}.button .icon{padding:3px}.button .text{padding:3px;white-space:initial}.button .text:empty{display:none}\n"] }]
1508
+ args: [{ selector: 'sfc-button', template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{text}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [".button.texted:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.texted:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.texted:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered{border:solid 2px}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){color:#ccd1d9}.button.bordered:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.bordered:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.bordered:not(:hover):not(.disabled){border-color:#ccd1d9}.button.filled{color:#fff!important;border-color:#545e61;background:#545e61}.button.filled:hover{color:#fff!important;border-color:#aab2bd;background:#aab2bd}.button.filled.disabled{color:#fff!important;border-color:#bdbdbd;background:#bdbdbd}.button.rounded{border:solid 2px;border-radius:20px;padding:.4em 1.2em}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){color:#ccd1d9}.button.rounded:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.rounded:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.rounded:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){color:#ccd1d9}.button.circled:not(:hover):not(.disabled),:host-context(.sfc-default-theme) .button.circled:not(:hover):not(.disabled){border-color:#545e61}:host-context(.sfc-dark-theme) .button.circled:not(:hover):not(.disabled){border-color:#ccd1d9}.button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}:host .button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .5s ease,border-color .5s ease,background .5s ease}:host .button:hover{color:#2bbbad;border-color:#2bbbad}:host .button .icon{padding:3px}:host .button .text{padding:3px;white-space:initial}:host .button .text:empty{display:none}:host.disabled{pointer-events:none}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{color:#656d78}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{border-color:#656d78}\n"] }]
1288
1509
  }], propDecorators: { text: [{
1289
1510
  type: Input
1290
1511
  }], iconBefore: [{
@@ -1293,6 +1514,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1293
1514
  type: Input
1294
1515
  }], disabled: [{
1295
1516
  type: Input
1517
+ }, {
1518
+ type: HostBinding,
1519
+ args: [`class.${UIClass.Disabled}`]
1296
1520
  }], types: [{
1297
1521
  type: Input
1298
1522
  }] } });
@@ -1420,7 +1644,7 @@ class LoaderService {
1420
1644
  */
1421
1645
  remove(id = LoaderConstants.GLOBAL_LOADER_ID) {
1422
1646
  const loaders = this.loaderSubject.getValue();
1423
- if (removeItem(loaders, loader => loader.id == id)) {
1647
+ if (removeItemBy(loaders, loader => loader.id == id)) {
1424
1648
  this.loaderSubject.next(loaders);
1425
1649
  }
1426
1650
  }
@@ -1432,7 +1656,7 @@ class LoaderService {
1432
1656
  const loaders = this.loaderSubject.getValue(), ILoaderEvent = { id, status }, loader = firstOrDefault(loaders, (loader) => loader.id == id);
1433
1657
  if (isDefined(loader) && loader?.status == status)
1434
1658
  return this.selectLoaderById(id);
1435
- const updatedLoaders = updateItem(loaders, (loader) => loader.id == id, ILoaderEvent);
1659
+ const updatedLoaders = updateItemBy(loaders, (loader) => loader.id == id, ILoaderEvent);
1436
1660
  if (isDefined(updatedLoaders)) {
1437
1661
  this.loaderSubject.next(updatedLoaders);
1438
1662
  }
@@ -1680,7 +1904,7 @@ class ModalComponent {
1680
1904
  }
1681
1905
  }
1682
1906
  ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ModalComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
1683
- ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ModalComponent, selector: "sfc-modal", inputs: { body: "body", header: "header", footer: "footer", defaultHeaderModel: "defaultHeaderModel", defaultFooterModel: "defaultFooterModel", hideOnEsc: "hideOnEsc", hideOnClickOutside: "hideOnClickOutside" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyDownHandler()" } }, queries: [{ propertyName: "templates", predicate: TemplateReferenceDirective, read: TemplateReferenceDirective }], ngImport: i0, template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.7em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;overflow-y:auto;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;flex:0 0 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;justify-content:center}\n"], components: [{ type: TemplateContentComponent, selector: "sfc-template-content", inputs: ["contextData", "referenceContent", "templateType", "templatesContent", "defaultContent"] }, { type: DefaultModalHeaderComponent, selector: "sfc-default-modal-header", inputs: ["model"] }, { type: DefaultModalFooterComponent, selector: "sfc-default-modal-footer", inputs: ["model"] }], animations: [
1907
+ ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ModalComponent, selector: "sfc-modal", inputs: { body: "body", header: "header", footer: "footer", defaultHeaderModel: "defaultHeaderModel", defaultFooterModel: "defaultFooterModel", hideOnEsc: "hideOnEsc", hideOnClickOutside: "hideOnClickOutside" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyDownHandler()" } }, queries: [{ propertyName: "templates", predicate: TemplateReferenceDirective, read: TemplateReferenceDirective }], ngImport: i0, template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.7em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;flex:0 0 auto;justify-content:center}.overlay .content>div.body{overflow-y:auto;flex:0}\n"], components: [{ type: TemplateContentComponent, selector: "sfc-template-content", inputs: ["contextData", "referenceContent", "templateType", "templatesContent", "defaultContent"] }, { type: DefaultModalHeaderComponent, selector: "sfc-default-modal-header", inputs: ["model"] }, { type: DefaultModalFooterComponent, selector: "sfc-default-modal-footer", inputs: ["model"] }], animations: [
1684
1908
  trigger('hideOverlay', [
1685
1909
  state('initial', style({ opacity: 1, visibility: 'visible' })),
1686
1910
  state('void', style({ opacity: 0, visibility: 'hidden' })),
@@ -1725,7 +1949,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1725
1949
  state('void', style({ opacity: 0, visibility: 'hidden', transform: 'scale(1.2)' })),
1726
1950
  transition('* => void', animate('400ms cubic-bezier(.55, 0, .1, 1)'))
1727
1951
  ])
1728
- ], template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.7em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;overflow-y:auto;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;flex:0 0 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;justify-content:center}\n"] }]
1952
+ ], template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.7em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;flex:0 0 auto;justify-content:center}.overlay .content>div.body{overflow-y:auto;flex:0}\n"] }]
1729
1953
  }], ctorParameters: function () { return [{ type: ModalService }]; }, propDecorators: { body: [{
1730
1954
  type: Input
1731
1955
  }], header: [{
@@ -1773,9 +1997,7 @@ class ModalOpenOnClickDirective {
1773
1997
  }
1774
1998
  ngOnInit() {
1775
1999
  this._closeSubscription = this.modalService.close$
1776
- .subscribe(() => {
1777
- this.viewContainer.clear();
1778
- });
2000
+ .subscribe(() => this.viewContainer.clear());
1779
2001
  }
1780
2002
  ngOnDestroy() {
1781
2003
  this._closeSubscription?.unsubscribe();
@@ -1794,6 +2016,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1794
2016
  args: ['sfcModalOpenOnClick']
1795
2017
  }] } });
1796
2018
 
2019
+ class ModalOpenDirective {
2020
+ constructor(templateRef, viewContainer, modalService) {
2021
+ this.templateRef = templateRef;
2022
+ this.viewContainer = viewContainer;
2023
+ this.modalService = modalService;
2024
+ this._closeSubscription = this.modalService.close$.subscribe(() => this.viewContainer.clear());
2025
+ this._openSubscription = this.modalService.open$
2026
+ .subscribe(() => {
2027
+ this.viewContainer.clear();
2028
+ this.viewContainer.createEmbeddedView(this.templateRef);
2029
+ });
2030
+ }
2031
+ ngOnDestroy() {
2032
+ this._closeSubscription.unsubscribe();
2033
+ this._openSubscription.unsubscribe();
2034
+ }
2035
+ }
2036
+ ModalOpenDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ModalOpenDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: ModalService }], target: i0.ɵɵFactoryTarget.Directive });
2037
+ ModalOpenDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: ModalOpenDirective, selector: "[sfcModalOpen]", ngImport: i0 });
2038
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ModalOpenDirective, decorators: [{
2039
+ type: Directive,
2040
+ args: [{
2041
+ selector: '[sfcModalOpen]'
2042
+ }]
2043
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ModalService }]; } });
2044
+
1797
2045
  class HamburgerComponent {
1798
2046
  constructor() {
1799
2047
  this.open = false;
@@ -1845,21 +2093,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1845
2093
  class ToggleSwitcherComponent {
1846
2094
  constructor() {
1847
2095
  this.active = false;
2096
+ this.disabled = false;
1848
2097
  this.onClick = () => this.active = !this.active;
1849
2098
  this.leftModel = { label: 'Left' };
1850
2099
  this.rightModel = { label: 'Right' };
1851
2100
  }
1852
2101
  }
1853
2102
  ToggleSwitcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ToggleSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1854
- ToggleSwitcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ToggleSwitcherComponent, selector: "sfc-toggle-switcher", inputs: { active: "active", leftModel: "leftModel", rightModel: "rightModel" }, host: { listeners: { "click": "onClick()" }, properties: { "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host .container .names p fa-icon{margin-right:.25em}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2103
+ ToggleSwitcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ToggleSwitcherComponent, selector: "sfc-toggle-switcher", inputs: { active: "active", disabled: "disabled", leftModel: "leftModel", rightModel: "rightModel" }, host: { listeners: { "click": "onClick()" }, properties: { "class.active": "this.active", "class.disabled": "this.disabled" } }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host .container .names p fa-icon{margin-right:.25em}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}:host.disabled{pointer-events:none}:host.disabled .container,:host-context(.sfc-default-theme) :host.disabled .container{background-color:#f6f6f6}:host-context(.sfc-dark-theme) :host.disabled .container{background-color:#656d78}:host.disabled .container .toggle{box-shadow:none}:host.disabled .container .toggle,:host-context(.sfc-default-theme) :host.disabled .container .toggle{background-color:#e6e9ed}:host-context(.sfc-dark-theme) :host.disabled .container .toggle{background-color:#aab2bd}:host.disabled .container .names,:host-context(.sfc-default-theme) :host.disabled .container .names{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .container .names{color:#e9e9e9}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1855
2104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ToggleSwitcherComponent, decorators: [{
1856
2105
  type: Component,
1857
- args: [{ selector: 'sfc-toggle-switcher', template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host .container .names p fa-icon{margin-right:.25em}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}\n"] }]
2106
+ args: [{ selector: 'sfc-toggle-switcher', template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host .container .names p fa-icon{margin-right:.25em}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}:host.disabled{pointer-events:none}:host.disabled .container,:host-context(.sfc-default-theme) :host.disabled .container{background-color:#f6f6f6}:host-context(.sfc-dark-theme) :host.disabled .container{background-color:#656d78}:host.disabled .container .toggle{box-shadow:none}:host.disabled .container .toggle,:host-context(.sfc-default-theme) :host.disabled .container .toggle{background-color:#e6e9ed}:host-context(.sfc-dark-theme) :host.disabled .container .toggle{background-color:#aab2bd}:host.disabled .container .names,:host-context(.sfc-default-theme) :host.disabled .container .names{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .container .names{color:#e9e9e9}\n"] }]
1858
2107
  }], ctorParameters: function () { return []; }, propDecorators: { active: [{
1859
2108
  type: Input
1860
2109
  }, {
1861
2110
  type: HostBinding,
1862
2111
  args: ['class.' + UIClass.Active]
2112
+ }], disabled: [{
2113
+ type: Input
2114
+ }, {
2115
+ type: HostBinding,
2116
+ args: ['class.' + UIClass.Disabled]
1863
2117
  }], leftModel: [{
1864
2118
  type: Input
1865
2119
  }], rightModel: [{
@@ -1869,28 +2123,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1869
2123
  args: ['click']
1870
2124
  }] } });
1871
2125
 
2126
+ var CheckmarkType;
2127
+ (function (CheckmarkType) {
2128
+ CheckmarkType["Square"] = "square";
2129
+ CheckmarkType["Rounded"] = "rounded";
2130
+ })(CheckmarkType || (CheckmarkType = {}));
2131
+
1872
2132
  class CheckmarkComponent {
1873
2133
  constructor() {
1874
2134
  this.active = false;
2135
+ this.disabled = false;
1875
2136
  this.icon = faCheck;
1876
- this.onClick = () => this.active = !this.active;
2137
+ this.type = CheckmarkType.Rounded;
2138
+ this.showNotActive = true;
1877
2139
  }
1878
2140
  }
1879
2141
  CheckmarkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CheckmarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1880
- CheckmarkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: CheckmarkComponent, selector: "sfc-checkmark", inputs: { active: "active", icon: "icon" }, host: { listeners: { "click": "onClick()" }, properties: { "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#ccd1d9}:host .check{border-radius:50%;border:.18em solid;background:#fff;border-color:#ccd1d9;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .3s ease}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#2bbbad}:host .check:hover fa-icon{color:#2bbbad}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#2bbbad;background:#2bbbad}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
2142
+ CheckmarkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: CheckmarkComponent, selector: "sfc-checkmark", inputs: { active: "active", disabled: "disabled", icon: "icon", type: "type", showNotActive: "showNotActive" }, host: { properties: { "class.active": "this.active", "class.disabled": "this.disabled", "class": "this.type" } }, ngImport: i0, template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon *ngIf=\"showNotActive || active\" [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#ccd1d9}:host .check{border:.18em solid;background:#fff;border-color:#ccd1d9;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .3s ease}:host .check,:host-context(.sfc-default-theme) :host .check{background:#fff}:host-context(.sfc-dark-theme) :host .check{background:transparent}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#2bbbad}:host .check:hover fa-icon{color:#2bbbad}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#2bbbad;background:#2bbbad}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}:host.rounded .check{border-radius:50%}:host.disabled{pointer-events:none}:host.disabled .check{color:#fff;border-style:dashed}:host.disabled .check,:host-context(.sfc-default-theme) :host.disabled .check{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .check{border-color:#656d78}:host.disabled.active .check,:host-context(.sfc-default-theme) :host.disabled.active .check{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled.active .check{background:#656d78}\n"], components: [{ type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1881
2143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CheckmarkComponent, decorators: [{
1882
2144
  type: Component,
1883
- args: [{ selector: 'sfc-checkmark', template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#ccd1d9}:host .check{border-radius:50%;border:.18em solid;background:#fff;border-color:#ccd1d9;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .3s ease}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#2bbbad}:host .check:hover fa-icon{color:#2bbbad}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#2bbbad;background:#2bbbad}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}\n"] }]
2145
+ args: [{ selector: 'sfc-checkmark', template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon *ngIf=\"showNotActive || active\" [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#ccd1d9}:host .check{border:.18em solid;background:#fff;border-color:#ccd1d9;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .3s ease}:host .check,:host-context(.sfc-default-theme) :host .check{background:#fff}:host-context(.sfc-dark-theme) :host .check{background:transparent}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#2bbbad}:host .check:hover fa-icon{color:#2bbbad}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#2bbbad;background:#2bbbad}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}:host.rounded .check{border-radius:50%}:host.disabled{pointer-events:none}:host.disabled .check{color:#fff;border-style:dashed}:host.disabled .check,:host-context(.sfc-default-theme) :host.disabled .check{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .check{border-color:#656d78}:host.disabled.active .check,:host-context(.sfc-default-theme) :host.disabled.active .check{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled.active .check{background:#656d78}\n"] }]
1884
2146
  }], propDecorators: { active: [{
1885
2147
  type: Input
1886
2148
  }, {
1887
2149
  type: HostBinding,
1888
2150
  args: ['class.' + UIClass.Active]
2151
+ }], disabled: [{
2152
+ type: Input
2153
+ }, {
2154
+ type: HostBinding,
2155
+ args: ['class.' + UIClass.Disabled]
1889
2156
  }], icon: [{
1890
2157
  type: Input
1891
- }], onClick: [{
1892
- type: HostListener,
1893
- args: ['click']
2158
+ }], type: [{
2159
+ type: Input
2160
+ }, {
2161
+ type: HostBinding,
2162
+ args: ['class']
2163
+ }], showNotActive: [{
2164
+ type: Input
1894
2165
  }] } });
1895
2166
 
1896
2167
  class PaginationConstants {
@@ -2119,6 +2390,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2119
2390
  args: ['click']
2120
2391
  }] } });
2121
2392
 
2393
+ class LoadMoreService {
2394
+ constructor() {
2395
+ this.START_PAGE = 1;
2396
+ this._page = this.START_PAGE;
2397
+ this.moreSubject = new Subject();
2398
+ this.more$ = this.moreSubject.asObservable();
2399
+ }
2400
+ more() {
2401
+ this._page++;
2402
+ this.moreSubject.next(this._page);
2403
+ }
2404
+ reset() {
2405
+ this._page = this.START_PAGE;
2406
+ }
2407
+ }
2408
+ LoadMoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2409
+ LoadMoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, providedIn: 'root' });
2410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, decorators: [{
2411
+ type: Injectable,
2412
+ args: [{
2413
+ providedIn: 'root'
2414
+ }]
2415
+ }] });
2416
+
2417
+ var LoadContainerType;
2418
+ (function (LoadContainerType) {
2419
+ LoadContainerType["Dropdown"] = "dropdown";
2420
+ LoadContainerType["Table"] = "table";
2421
+ })(LoadContainerType || (LoadContainerType = {}));
2422
+
2423
+ class LoadContainerConstants {
2424
+ }
2425
+ LoadContainerConstants.DEFAULT_PAGE_SIZE = 5;
2426
+ LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL = 'Not found';
2427
+
2428
+ class LoadMoreButtonComponent {
2429
+ constructor() {
2430
+ this.DEFAULT_LABEL = 'Show more';
2431
+ this.icon = faChevronCircleDown;
2432
+ this.more = new EventEmitter();
2433
+ }
2434
+ ngOnInit() {
2435
+ if (isNullOrEmptyString(this.label))
2436
+ this.label = this.DEFAULT_LABEL;
2437
+ }
2438
+ }
2439
+ LoadMoreButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2440
+ LoadMoreButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: LoadMoreButtonComponent, selector: "sfc-load-more-button", inputs: { label: "label", icon: "icon" }, outputs: { more: "more" }, ngImport: i0, template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <div class=\"button\" (sfcMouseDown)=\"more.emit($event)\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n <span>{{label}}</span>\r\n </div>\r\n</div>", styles: [":host{cursor:default}:host .container{text-align:center}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;color:#545e61;transition:color .5s;padding:.5em 0 1em}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700;text-transform:uppercase}:host .container .button:hover{color:#2bbbad}\n"], components: [{ type: DelimeterComponent, selector: "sfc-delimeter" }, { type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }] });
2441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreButtonComponent, decorators: [{
2442
+ type: Component,
2443
+ args: [{ selector: 'sfc-load-more-button', template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <div class=\"button\" (sfcMouseDown)=\"more.emit($event)\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n <span>{{label}}</span>\r\n </div>\r\n</div>", styles: [":host{cursor:default}:host .container{text-align:center}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;color:#545e61;transition:color .5s;padding:.5em 0 1em}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700;text-transform:uppercase}:host .container .button:hover{color:#2bbbad}\n"] }]
2444
+ }], propDecorators: { label: [{
2445
+ type: Input
2446
+ }], icon: [{
2447
+ type: Input
2448
+ }], more: [{
2449
+ type: Output
2450
+ }] } });
2451
+
2452
+ class LoadContainerComponent {
2453
+ constructor(loaderService, loadMoreService) {
2454
+ this.loaderService = loaderService;
2455
+ this.loadMoreService = loadMoreService;
2456
+ this.ComponentSize = ComponentSize;
2457
+ this.Position = Position;
2458
+ this.type = LoadContainerType.Dropdown;
2459
+ this.open = false;
2460
+ this.size = LoadContainerConstants.DEFAULT_PAGE_SIZE;
2461
+ this.loadMore = true;
2462
+ this.showEmpty = true;
2463
+ this.showLoadMoreButton = true;
2464
+ this.notFoundLabel = LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL;
2465
+ this.handleError = new EventEmitter();
2466
+ this.handleSuccess = new EventEmitter();
2467
+ this.handleLoading = new EventEmitter();
2468
+ this.next = false;
2469
+ this.empty = false;
2470
+ this._loading = false;
2471
+ }
2472
+ set model(model) {
2473
+ if (isDefined(model)) {
2474
+ const parameters$ = this.buildParameters(model.predicate$), data$ = isDefined(model.loader) ?
2475
+ this.buildDynamic(parameters$, model.loader) : this.buildStatic(parameters$, model);
2476
+ if (isDefined(this._subscription))
2477
+ this._subscription.unsubscribe();
2478
+ this._subscription = data$.subscribe({
2479
+ next: (result) => this.success(result),
2480
+ error: (error) => this.error(error)
2481
+ });
2482
+ }
2483
+ }
2484
+ get scrollPosition() {
2485
+ return !this.allowLoadMore || this.showLoadMoreButton ? [] : [Position.Bottom];
2486
+ }
2487
+ get allowLoadMore() { return this.next && this.loadMore; }
2488
+ get hideLoadMoreButton() { return !(this.allowLoadMore && this.showLoadMoreButton); }
2489
+ get isEmpty() { return this.empty && this.showEmpty; }
2490
+ set loading(value) {
2491
+ this._loading = value;
2492
+ if (value)
2493
+ this.loaderService.show(this.id, true);
2494
+ else
2495
+ this.loaderService.hide(this.id);
2496
+ this.handleLoading.emit(value);
2497
+ }
2498
+ ngOnDestroy() {
2499
+ if (this._subscription)
2500
+ this._subscription.unsubscribe();
2501
+ }
2502
+ more(event) {
2503
+ event.preventDefault();
2504
+ this.loadMoreService.more();
2505
+ }
2506
+ onScroll() {
2507
+ if (this.allowLoadMore)
2508
+ this.loadMoreService.more();
2509
+ }
2510
+ success(result) {
2511
+ this.next = result.next;
2512
+ this.loading = false;
2513
+ this.empty = !any(result.items);
2514
+ this.handleSuccess.emit(result);
2515
+ }
2516
+ error(error) {
2517
+ this.loading = false;
2518
+ this.empty = false;
2519
+ this.handleError.emit(error);
2520
+ }
2521
+ buildParameters(predicate$) {
2522
+ const parameters$ = (predicate$ || EMPTY.pipe(startWith(null))).pipe(tap(() => {
2523
+ if (isDefined(this.contentEl))
2524
+ this.contentEl.nativeElement.scrollTop = 0;
2525
+ this.loadMoreService.reset();
2526
+ }), switchMap((value) => {
2527
+ return this.loadMoreService.more$.pipe(startWith(this.loadMoreService.START_PAGE), tap(() => this.loading = true), map((page) => {
2528
+ return { params: value, page: page };
2529
+ }));
2530
+ }));
2531
+ return parameters$;
2532
+ }
2533
+ buildDynamic(parameters$, loader) {
2534
+ return parameters$.pipe(switchMap((parameters) => loader(parameters)));
2535
+ }
2536
+ buildStatic(parameters$, model) {
2537
+ return parameters$.pipe(withLatestFrom(model.data$ || of([])), map(([parameters, items]) => {
2538
+ const filtered = model.filter ? model.filter(items, parameters) : items, data = filtered ? {
2539
+ items: skip(filtered, parameters.page, this.size),
2540
+ next: parameters.page < Math.ceil(filtered.length / this.size)
2541
+ } : { items: [], next: false };
2542
+ return data;
2543
+ }));
2544
+ }
2545
+ }
2546
+ LoadContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadContainerComponent, deps: [{ token: LoaderService }, { token: LoadMoreService }], target: i0.ɵɵFactoryTarget.Component });
2547
+ LoadContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: LoadContainerComponent, selector: "sfc-load-container", inputs: { id: "id", type: "type", open: "open", size: "size", loadMore: "loadMore", showEmpty: "showEmpty", showLoadMoreButton: "showLoadMoreButton", loadMoreLabel: "loadMoreLabel", notFoundLabel: "notFoundLabel", model: "model", scrollTarget: "scrollTarget" }, outputs: { handleError: "handleError", handleSuccess: "handleSuccess", handleLoading: "handleLoading" }, host: { properties: { "class": "this.type", "class.open": "this.open", "class.empty": "this.isEmpty", "class.loading": "this._loading" } }, providers: [LoadMoreService], viewQueries: [{ propertyName: "contentEl", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n <sfc-bounce-loader [id]=\"id\" [sfcComponentSize]=\"ComponentSize.Small\"></sfc-bounce-loader>\r\n <div #content class=\"content\" [sfcScrollIntoView]=\"scrollTarget\" (sfcScrollTracker)=\"onScroll()\" [positions]=\"scrollPosition\">\r\n <ng-content></ng-content>\r\n <div (sfcMouseDown)=\"$event.preventDefault()\">\r\n <sfc-load-more-button [hidden]=\"hideLoadMoreButton\" (more)=\"more($event)\" [label]=\"loadMoreLabel\">\r\n </sfc-load-more-button>\r\n <div *ngIf=\"isEmpty\" class=\"empty\">{{notFoundLabel}}</div>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{width:100%;height:inherit;position:relative}:host .container{height:inherit;background:#fff}:host .container .content{cursor:initial;overflow-y:auto;height:inherit}:host .container .content sfc-load-more-button ::ng-deep sfc-delimeter{background:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 17%,rgba(0,0,0,.3) 83%,rgba(0,0,0,0) 100%)}:host .container .content .empty{display:flex;align-items:center;justify-content:center;color:#545e61;cursor:default;height:100%;font-size:.8em;-webkit-user-select:none;user-select:none;padding:.7em}:host.dropdown .container .content{display:none;opacity:0;max-height:12.5em;box-shadow:0 .125em .125em #00000024,0 .18em .06em -.125em #0000001f,0 .06em .31em #0003}:host.dropdown.open .container .content{display:block;opacity:1}:host ::ng-deep ::-webkit-scrollbar{width:.375em;height:.375em}:host ::ng-deep ::-webkit-scrollbar-track{border-radius:.625em;background:rgba(0,0,0,.1)}:host ::ng-deep ::-webkit-scrollbar-thumb{border-radius:.625em;background:rgba(0,0,0,.2)}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}:host ::ng-deep ::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,.6)}\n"], components: [{ type: BounceLoaderComponent, selector: "sfc-bounce-loader" }, { type: LoadMoreButtonComponent, selector: "sfc-load-more-button", inputs: ["label", "icon"], outputs: ["more"] }], directives: [{ type: ComponentSizeDirective, selector: "[sfcComponentSize]", inputs: ["sfcComponentSize", "customSize"] }, { type: ScrollIntoViewDirective, selector: "[sfcScrollIntoView]", inputs: ["sfcScrollIntoView", "options"] }, { type: ScrollTrackerDirective, selector: "[sfcScrollTracker]", inputs: ["positions"], outputs: ["sfcScrollTracker"] }, { type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }, { type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2548
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadContainerComponent, decorators: [{
2549
+ type: Component,
2550
+ args: [{ selector: 'sfc-load-container', providers: [LoadMoreService], template: "<div class=\"container\">\r\n <sfc-bounce-loader [id]=\"id\" [sfcComponentSize]=\"ComponentSize.Small\"></sfc-bounce-loader>\r\n <div #content class=\"content\" [sfcScrollIntoView]=\"scrollTarget\" (sfcScrollTracker)=\"onScroll()\" [positions]=\"scrollPosition\">\r\n <ng-content></ng-content>\r\n <div (sfcMouseDown)=\"$event.preventDefault()\">\r\n <sfc-load-more-button [hidden]=\"hideLoadMoreButton\" (more)=\"more($event)\" [label]=\"loadMoreLabel\">\r\n </sfc-load-more-button>\r\n <div *ngIf=\"isEmpty\" class=\"empty\">{{notFoundLabel}}</div>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{width:100%;height:inherit;position:relative}:host .container{height:inherit;background:#fff}:host .container .content{cursor:initial;overflow-y:auto;height:inherit}:host .container .content sfc-load-more-button ::ng-deep sfc-delimeter{background:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 17%,rgba(0,0,0,.3) 83%,rgba(0,0,0,0) 100%)}:host .container .content .empty{display:flex;align-items:center;justify-content:center;color:#545e61;cursor:default;height:100%;font-size:.8em;-webkit-user-select:none;user-select:none;padding:.7em}:host.dropdown .container .content{display:none;opacity:0;max-height:12.5em;box-shadow:0 .125em .125em #00000024,0 .18em .06em -.125em #0000001f,0 .06em .31em #0003}:host.dropdown.open .container .content{display:block;opacity:1}:host ::ng-deep ::-webkit-scrollbar{width:.375em;height:.375em}:host ::ng-deep ::-webkit-scrollbar-track{border-radius:.625em;background:rgba(0,0,0,.1)}:host ::ng-deep ::-webkit-scrollbar-thumb{border-radius:.625em;background:rgba(0,0,0,.2)}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}:host ::ng-deep ::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,.6)}\n"] }]
2551
+ }], ctorParameters: function () { return [{ type: LoaderService }, { type: LoadMoreService }]; }, propDecorators: { id: [{
2552
+ type: Input
2553
+ }], type: [{
2554
+ type: Input
2555
+ }, {
2556
+ type: HostBinding,
2557
+ args: ['class']
2558
+ }], open: [{
2559
+ type: Input
2560
+ }, {
2561
+ type: HostBinding,
2562
+ args: [`class.${UIClass.Open}`]
2563
+ }], size: [{
2564
+ type: Input
2565
+ }], loadMore: [{
2566
+ type: Input
2567
+ }], showEmpty: [{
2568
+ type: Input
2569
+ }], showLoadMoreButton: [{
2570
+ type: Input
2571
+ }], loadMoreLabel: [{
2572
+ type: Input
2573
+ }], notFoundLabel: [{
2574
+ type: Input
2575
+ }], model: [{
2576
+ type: Input
2577
+ }], scrollTarget: [{
2578
+ type: Input
2579
+ }], handleError: [{
2580
+ type: Output
2581
+ }], handleSuccess: [{
2582
+ type: Output
2583
+ }], handleLoading: [{
2584
+ type: Output
2585
+ }], contentEl: [{
2586
+ type: ViewChild,
2587
+ args: ['content']
2588
+ }], isEmpty: [{
2589
+ type: HostBinding,
2590
+ args: [`class.${UIClass.Empty}`]
2591
+ }], _loading: [{
2592
+ type: HostBinding,
2593
+ args: [`class.${UIClass.Loading}`]
2594
+ }] } });
2595
+
2122
2596
  class NgxSfcCommonModule {
2123
2597
  }
2124
2598
  NgxSfcCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NgxSfcCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -2131,6 +2605,9 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2131
2605
  MouseDownDirective,
2132
2606
  ComponentSizeDirective,
2133
2607
  DestroyParentDirective,
2608
+ DomChangesDirective,
2609
+ ScrollTrackerDirective,
2610
+ ScrollIntoViewDirective,
2134
2611
  // components
2135
2612
  ButtonComponent,
2136
2613
  TooltipComponent,
@@ -2143,14 +2620,19 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2143
2620
  DotsComponent,
2144
2621
  PaginationComponent,
2145
2622
  SortingComponent,
2623
+ LoadMoreButtonComponent,
2624
+ LoadContainerComponent,
2146
2625
  // loaders
2147
2626
  BounceLoaderComponent,
2148
2627
  CircleLoaderComponent,
2149
2628
  // modal
2150
2629
  ModalComponent,
2630
+ ModalOpenDirective,
2151
2631
  ModalOpenOnClickDirective,
2152
2632
  DefaultModalHeaderComponent,
2153
- DefaultModalFooterComponent], imports: [CommonModule,
2633
+ DefaultModalFooterComponent,
2634
+ // pipes
2635
+ SwitchMultiCasePipe], imports: [CommonModule,
2154
2636
  BrowserAnimationsModule,
2155
2637
  FontAwesomeModule], exports: [
2156
2638
  // directives
@@ -2161,6 +2643,9 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2161
2643
  MouseDownDirective,
2162
2644
  ComponentSizeDirective,
2163
2645
  DestroyParentDirective,
2646
+ DomChangesDirective,
2647
+ ScrollTrackerDirective,
2648
+ ScrollIntoViewDirective,
2164
2649
  // components
2165
2650
  ButtonComponent,
2166
2651
  TooltipComponent,
@@ -2173,14 +2658,19 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2173
2658
  HamburgerComponent,
2174
2659
  PaginationComponent,
2175
2660
  SortingComponent,
2661
+ LoadMoreButtonComponent,
2662
+ LoadContainerComponent,
2176
2663
  // loaders
2177
2664
  BounceLoaderComponent,
2178
2665
  CircleLoaderComponent,
2179
2666
  // modal
2180
2667
  ModalComponent,
2668
+ ModalOpenDirective,
2181
2669
  ModalOpenOnClickDirective,
2182
2670
  DefaultModalHeaderComponent,
2183
- DefaultModalFooterComponent] });
2671
+ DefaultModalFooterComponent,
2672
+ // pipes
2673
+ SwitchMultiCasePipe] });
2184
2674
  NgxSfcCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NgxSfcCommonModule, providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS], imports: [[
2185
2675
  CommonModule,
2186
2676
  BrowserAnimationsModule,
@@ -2198,6 +2688,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2198
2688
  MouseDownDirective,
2199
2689
  ComponentSizeDirective,
2200
2690
  DestroyParentDirective,
2691
+ DomChangesDirective,
2692
+ ScrollTrackerDirective,
2693
+ ScrollIntoViewDirective,
2201
2694
  // components
2202
2695
  ButtonComponent,
2203
2696
  TooltipComponent,
@@ -2210,14 +2703,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2210
2703
  DotsComponent,
2211
2704
  PaginationComponent,
2212
2705
  SortingComponent,
2706
+ LoadMoreButtonComponent,
2707
+ LoadContainerComponent,
2213
2708
  // loaders
2214
2709
  BounceLoaderComponent,
2215
2710
  CircleLoaderComponent,
2216
2711
  // modal
2217
2712
  ModalComponent,
2713
+ ModalOpenDirective,
2218
2714
  ModalOpenOnClickDirective,
2219
2715
  DefaultModalHeaderComponent,
2220
- DefaultModalFooterComponent
2716
+ DefaultModalFooterComponent,
2717
+ // pipes
2718
+ SwitchMultiCasePipe
2221
2719
  ],
2222
2720
  imports: [
2223
2721
  CommonModule,
@@ -2233,6 +2731,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2233
2731
  MouseDownDirective,
2234
2732
  ComponentSizeDirective,
2235
2733
  DestroyParentDirective,
2734
+ DomChangesDirective,
2735
+ ScrollTrackerDirective,
2736
+ ScrollIntoViewDirective,
2236
2737
  // components
2237
2738
  ButtonComponent,
2238
2739
  TooltipComponent,
@@ -2245,14 +2746,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2245
2746
  HamburgerComponent,
2246
2747
  PaginationComponent,
2247
2748
  SortingComponent,
2749
+ LoadMoreButtonComponent,
2750
+ LoadContainerComponent,
2248
2751
  // loaders
2249
2752
  BounceLoaderComponent,
2250
2753
  CircleLoaderComponent,
2251
2754
  // modal
2252
2755
  ModalComponent,
2756
+ ModalOpenDirective,
2253
2757
  ModalOpenOnClickDirective,
2254
2758
  DefaultModalHeaderComponent,
2255
- DefaultModalFooterComponent
2759
+ DefaultModalFooterComponent,
2760
+ // pipes
2761
+ SwitchMultiCasePipe
2256
2762
  ],
2257
2763
  providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS]
2258
2764
  }]
@@ -2266,5 +2772,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2266
2772
  * Generated bundle index. Do not edit.
2267
2773
  */
2268
2774
 
2269
- export { BounceLoaderComponent, BrowserDocumentRef, BrowserWindowRef, ButtonComponent, ButtonType, CheckmarkComponent, CircleLoaderComponent, CircleLoaderType, ClickOutsideDirective, CloseComponent, CommonConstants, ComponentSize, ComponentSizeDirective, DOCUMENT, DOCUMENT_PROVIDERS, DateTimeConstants, DefaultModalFooterComponent, DefaultModalHeaderComponent, DelimeterComponent, DestroyParentDirective, Direction, DocumentRef, DotsComponent, HamburgerComponent, LoaderService, MediaLimits, ModalComponent, ModalOpenOnClickDirective, ModalService, ModalTemplate, MouseDownDirective, NgxSfcCommonModule, PaginationComponent, PaginationService, Position, ResizeService, ShowHideElementDirective, SortingComponent, SortingDirection, SortingService, TemplateContentComponent, TemplateReferenceDirective, Theme, ThrowElementOnHoverDirective, ToggleSwitcherComponent, TooltipComponent, TooltipType, UIClass, UIConstants, WINDOW, WINDOW_PROVIDERS, WindowRef, addClasses, addItem, addPropertyToObject, all, any, browserDocumentProvider, browserWindowProvider, contains, distinct, documentFactory, documentProvider, firstItem, firstOrDefault, getCalcValue, getCollectionOrEmpty, getCssLikeValue, getFileExtension, getFirstDayOfMonth, getFirstDayOfMonthByYearAndMonth, getFirstDayOfYear, getLastDayOfMonth, getLastDayOfMonthByYearAndMonth, getLastDayOfYear, getNextMonth, getNextYear, getPreviousMonth, getPreviousYear, getValueFromCssLikeValue, getWeeksNumberInMonth, hasItem, hasItemBy, hasObjectItem, hexToRgb, isAsyncData, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDefined, isEqualDates, isImage, isNullOrEmptyString, isNumeric, isObject, lastItem, max, mergeDeep, nameof, parseFileSize, readAsDataURL, remove, removeClasses, removeItem, removePropertyFromObject, replaceRgbOpacity, rgbToHex, setDay, setHours, setMinutes, setYear, skip, sortBy, sortByPath, sum, trim, updateItem, where, windowFactory, windowProvider };
2775
+ export { BounceLoaderComponent, BrowserDocumentRef, BrowserWindowRef, ButtonComponent, ButtonType, CheckmarkComponent, CheckmarkType, CircleLoaderComponent, CircleLoaderType, ClickOutsideDirective, CloseComponent, CommonConstants, ComponentSize, ComponentSizeDirective, DOCUMENT, DOCUMENT_PROVIDERS, DateTimeConstants, DefaultModalFooterComponent, DefaultModalHeaderComponent, DelimeterComponent, DestroyParentDirective, Direction, DocumentRef, DomChangesDirective, DotsComponent, HamburgerComponent, LoadContainerComponent, LoadContainerType, LoadMoreButtonComponent, LoaderService, MediaLimits, ModalComponent, ModalOpenDirective, ModalOpenOnClickDirective, ModalService, ModalTemplate, MouseDownDirective, NgxSfcCommonModule, PaginationComponent, PaginationService, Position, ResizeService, ScrollIntoViewDirective, ScrollTrackerDirective, Sequence, ShowHideElementDirective, SortingComponent, SortingDirection, SortingService, SwitchMultiCasePipe, TemplateContentComponent, TemplateReferenceDirective, Theme, ThrowElementOnHoverDirective, ToggleSwitcherComponent, TooltipComponent, TooltipType, UIClass, UIConstants, WINDOW, WINDOW_PROVIDERS, WindowRef, addClasses, addItem, addPropertyToObject, all, any, browserDocumentProvider, browserWindowProvider, contains, distinct, documentFactory, documentProvider, firstItem, firstOrDefault, getCalcValue, getCollectionOrEmpty, getCssLikeValue, getFileExtension, getFirstDayOfMonth, getFirstDayOfMonthByYearAndMonth, getFirstDayOfYear, getLastDayOfMonth, getLastDayOfMonthByYearAndMonth, getLastDayOfYear, getNextDate, getNextMonth, getNextYear, getPreviousMonth, getPreviousYear, getRotateValue, getValueFromCssLikeValue, getWeeksNumberInMonth, hasItem, hasItemBy, hasObjectItem, hexToRgb, isAsyncData, isChromeBrowser, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDefined, isEqualDates, isImage, isNullOrEmptyString, isNumeric, isObject, lastItem, max, mergeDeep, nameof, parseFileSize, readAsDataURL, remove, removeClasses, removeItem, removeItemBy, removePropertyFromObject, replaceRgbOpacity, rgbToHex, setDay, setDefaultSecondsAndMiliseconds, setHours, setMilliseconds, setMinutes, setSeconds, setYear, skip, sort, sortBy, sortByPath, sum, trim, updateItemBy, where, windowFactory, windowProvider };
2270
2776
  //# sourceMappingURL=ngx-sfc-common.mjs.map