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
  */
@@ -338,12 +350,15 @@ class CommonConstants {
338
350
  CommonConstants.NOT_FOUND_INDEX = -1;
339
351
  CommonConstants.EMPTY_STRING = '';
340
352
  CommonConstants.MOUSE_BUTTON_LEFT = 0;
341
- CommonConstants.FULL_PERCENTAGE = 100;
353
+ CommonConstants.FULL_PERCENTAGE = 100;
354
+ CommonConstants.COMMON_TEXT_DELIMETER = '/';
342
355
 
343
356
  class DateTimeConstants {
344
357
  }
345
358
  DateTimeConstants.DAYS_IN_WEEK = 7;
346
359
  DateTimeConstants.HOURS_IN_SHORT_TIME = 12;
360
+ DateTimeConstants.HOURS_IN_TIME = 24;
361
+ DateTimeConstants.MIDNIGHT_HOUR = 0;
347
362
  DateTimeConstants.MINUTES_IN_HOUR = 60;
348
363
  DateTimeConstants.DAYS_OF_WEEK = ["S", "M", "T", "W", "T", "F", "S"];
349
364
  DateTimeConstants.DAYS_OF_WEEK_3 = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
@@ -438,7 +453,7 @@ function isAsyncData(data) {
438
453
  * @returns Extended object with new property
439
454
  */
440
455
  function addPropertyToObject(obj, property, value = null) {
441
- if (!isDefined(property) && !obj.hasOwnProperty(property)) {
456
+ if (isDefined(property) && !obj.hasOwnProperty(property)) {
442
457
  let newObj = {};
443
458
  newObj[property] = value;
444
459
  obj = Object.assign(Object.assign({}, obj), newObj);
@@ -497,6 +512,13 @@ const nameof = (name) => name;
497
512
  */
498
513
  function isNumeric(number) {
499
514
  return !isNaN(parseFloat(number));
515
+ }
516
+ /**
517
+ * Return true if current browser is Chrome
518
+ * @returns If current browser is Chrome
519
+ */
520
+ function isChromeBrowser() {
521
+ return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
500
522
  }
501
523
 
502
524
  /**
@@ -535,8 +557,9 @@ function trim(value) {
535
557
  * @returns Date with minute value
536
558
  */
537
559
  function setMinutes(date, minute) {
538
- date.setMinutes(minute);
539
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
560
+ const result = new Date(date);
561
+ result.setMinutes(minute);
562
+ return result;
540
563
  }
541
564
  /**
542
565
  * Set hours for date
@@ -545,8 +568,9 @@ function setMinutes(date, minute) {
545
568
  * @returns Date with hour value
546
569
  */
547
570
  function setHours(date, hour) {
548
- date.setHours(hour);
549
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
571
+ const result = new Date(date);
572
+ result.setHours(hour);
573
+ return result;
550
574
  }
551
575
  /**
552
576
  * Set day for date value
@@ -566,8 +590,52 @@ function setDay(date, dayNumber) {
566
590
  * @returns Date with year value
567
591
  */
568
592
  function setYear(date, year) {
569
- date.setFullYear(year);
570
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
593
+ const result = new Date(date);
594
+ result.setFullYear(year);
595
+ return result;
596
+ }
597
+ /**
598
+ * Set seconds for date
599
+ * @param date Date value
600
+ * @param value Seconds value
601
+ * @returns Date with minute value
602
+ */
603
+ function setSeconds(date, value) {
604
+ const result = new Date(date);
605
+ result.setSeconds(value);
606
+ return result;
607
+ }
608
+ /**
609
+ * Set milliseconds for date
610
+ * @param date Date value
611
+ * @param value Milliseconds value
612
+ * @returns Date with minute value
613
+ */
614
+ function setMilliseconds(date, value) {
615
+ const result = new Date(date);
616
+ result.setMilliseconds(value);
617
+ return result;
618
+ }
619
+ /**
620
+ * Set 0 for seconds and milliseconds of date
621
+ * @param date Date value
622
+ * @returns Date with minute value
623
+ */
624
+ function setDefaultSecondsAndMiliseconds(date) {
625
+ const result = new Date(date);
626
+ result.setSeconds(0);
627
+ result.setMilliseconds(0);
628
+ return result;
629
+ }
630
+ /**
631
+ * Get next date
632
+ * @param date Date value
633
+ * @returns Next date
634
+ */
635
+ function getNextDate(date) {
636
+ const nextDate = new Date(date);
637
+ nextDate.setDate(date.getDate() + 1);
638
+ return nextDate;
571
639
  }
572
640
  /**
573
641
  * Get next month as date
@@ -689,9 +757,10 @@ function getWeeksNumberInMonth(date) {
689
757
  * @returns True if first and second date are equal
690
758
  */
691
759
  function isEqualDates(date1, date2) {
692
- date1.setHours(0, 0, 0, 0);
693
- date2.setHours(0, 0, 0, 0);
694
- return date1.getTime() === date2.getTime();
760
+ const date1Value = new Date(date1), date2Value = new Date(date2);
761
+ date1Value.setHours(0, 0, 0, 0);
762
+ date2Value.setHours(0, 0, 0, 0);
763
+ return date1Value.getTime() === date2Value.getTime();
695
764
  }
696
765
  /**
697
766
  * Return true if first date greater than second date
@@ -773,7 +842,8 @@ function readAsDataURL(file, onLoad) {
773
842
  reader.onload = () => onLoad(reader.result);
774
843
  reader.readAsDataURL(file);
775
844
  }
776
- throw new Error('File utils | Read as data URL function --> File is empty.');
845
+ else
846
+ throw new Error('File utils | Read as data URL function --> File is empty.');
777
847
  }
778
848
  /**
779
849
  * Return true if file is image
@@ -781,7 +851,7 @@ function readAsDataURL(file, onLoad) {
781
851
  * @returns True if file is image
782
852
  */
783
853
  function isImage(file) {
784
- return (/\.(gif|jpe?g|jpg|tiff|png|webp|bmp)$/i).test(file.name);
854
+ return isDefined(file) && (/\.(gif|jpe?g|jpg|tiff|png|webp|bmp)$/i).test(file.name);
785
855
  }
786
856
 
787
857
  /**
@@ -809,6 +879,14 @@ function getValueFromCssLikeValue(value, type = UIConstants.CSS_PIXELS) {
809
879
  function getCalcValue(part, value = 100) {
810
880
  return `calc(${value}${UIConstants.CSS_PERCENTAGE} / ${part} )`;
811
881
  }
882
+ /**
883
+ * Return CCS like rotate value
884
+ * @param value value as degrees
885
+ * @returns Rotate value
886
+ */
887
+ function getRotateValue(value) {
888
+ return `rotate(${value}deg)`;
889
+ }
812
890
  /**
813
891
  * Add classes to HTML element
814
892
  * @param element HTML element
@@ -961,6 +1039,14 @@ function skip(collection, page, size) {
961
1039
  }
962
1040
  return collection;
963
1041
  }
1042
+ function sort(collection, direction = SortingDirection.Ascending) {
1043
+ if (any(collection)) {
1044
+ return direction == SortingDirection.Ascending
1045
+ ? collection.sort((a, b) => a - b)
1046
+ : collection.sort((a, b) => b - a);
1047
+ }
1048
+ return collection;
1049
+ }
964
1050
  /**
965
1051
  * Return sorted collection of objects by property
966
1052
  * @param collection Array of items
@@ -1069,13 +1155,26 @@ function addItem(collection, item, predicate) {
1069
1155
  collection.push(item);
1070
1156
  return true;
1071
1157
  }
1158
+ /**
1159
+ * Delete item from collection
1160
+ * @param collection Array of items
1161
+ * @param item Item to delete
1162
+ * @returns True if successfully removed
1163
+ */
1164
+ function removeItem(collection, item) {
1165
+ if (isDefined(item) && hasItem(collection, item)) {
1166
+ collection.splice(collection.indexOf(item), 1);
1167
+ return true;
1168
+ }
1169
+ return false;
1170
+ }
1072
1171
  /**
1073
1172
  * Delete item from collection by predicate
1074
1173
  * @param collection Array of items
1075
1174
  * @param predicate Function to define remove logic
1076
1175
  * @returns True if successfully removed
1077
1176
  */
1078
- function removeItem(collection, predicate) {
1177
+ function removeItemBy(collection, predicate) {
1079
1178
  const foundItem = firstOrDefault(collection, predicate);
1080
1179
  if (isDefined(foundItem)) {
1081
1180
  collection.splice(collection.indexOf(foundItem), 1);
@@ -1083,7 +1182,13 @@ function removeItem(collection, predicate) {
1083
1182
  }
1084
1183
  return false;
1085
1184
  }
1086
- function updateItem(collection, predicate, newItem) {
1185
+ /**
1186
+ * Update item in collection by predicate
1187
+ * @param collection Array of items
1188
+ * @param predicate Function to define item for deleting
1189
+ * @returns True if successfully removed
1190
+ */
1191
+ function updateItemBy(collection, predicate, newItem) {
1087
1192
  const itemIndex = collection.findIndex(predicate);
1088
1193
  if (itemIndex !== CommonConstants.NOT_FOUND_INDEX) {
1089
1194
  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
  }] } });
@@ -1423,7 +1647,7 @@ class LoaderService {
1423
1647
  */
1424
1648
  remove(id = LoaderConstants.GLOBAL_LOADER_ID) {
1425
1649
  const loaders = this.loaderSubject.getValue();
1426
- if (removeItem(loaders, loader => loader.id == id)) {
1650
+ if (removeItemBy(loaders, loader => loader.id == id)) {
1427
1651
  this.loaderSubject.next(loaders);
1428
1652
  }
1429
1653
  }
@@ -1435,7 +1659,7 @@ class LoaderService {
1435
1659
  const loaders = this.loaderSubject.getValue(), ILoaderEvent = { id, status }, loader = firstOrDefault(loaders, (loader) => loader.id == id);
1436
1660
  if (isDefined(loader) && (loader === null || loader === void 0 ? void 0 : loader.status) == status)
1437
1661
  return this.selectLoaderById(id);
1438
- const updatedLoaders = updateItem(loaders, (loader) => loader.id == id, ILoaderEvent);
1662
+ const updatedLoaders = updateItemBy(loaders, (loader) => loader.id == id, ILoaderEvent);
1439
1663
  if (isDefined(updatedLoaders)) {
1440
1664
  this.loaderSubject.next(updatedLoaders);
1441
1665
  }
@@ -1686,7 +1910,7 @@ class ModalComponent {
1686
1910
  }
1687
1911
  }
1688
1912
  ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ModalComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
1689
- 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: [
1913
+ 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: [
1690
1914
  trigger('hideOverlay', [
1691
1915
  state('initial', style({ opacity: 1, visibility: 'visible' })),
1692
1916
  state('void', style({ opacity: 0, visibility: 'hidden' })),
@@ -1731,7 +1955,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1731
1955
  state('void', style({ opacity: 0, visibility: 'hidden', transform: 'scale(1.2)' })),
1732
1956
  transition('* => void', animate('400ms cubic-bezier(.55, 0, .1, 1)'))
1733
1957
  ])
1734
- ], 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"] }]
1958
+ ], 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"] }]
1735
1959
  }], ctorParameters: function () { return [{ type: ModalService }]; }, propDecorators: { body: [{
1736
1960
  type: Input
1737
1961
  }], header: [{
@@ -1779,9 +2003,7 @@ class ModalOpenOnClickDirective {
1779
2003
  }
1780
2004
  ngOnInit() {
1781
2005
  this._closeSubscription = this.modalService.close$
1782
- .subscribe(() => {
1783
- this.viewContainer.clear();
1784
- });
2006
+ .subscribe(() => this.viewContainer.clear());
1785
2007
  }
1786
2008
  ngOnDestroy() {
1787
2009
  var _a;
@@ -1801,6 +2023,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1801
2023
  args: ['sfcModalOpenOnClick']
1802
2024
  }] } });
1803
2025
 
2026
+ class ModalOpenDirective {
2027
+ constructor(templateRef, viewContainer, modalService) {
2028
+ this.templateRef = templateRef;
2029
+ this.viewContainer = viewContainer;
2030
+ this.modalService = modalService;
2031
+ this._closeSubscription = this.modalService.close$.subscribe(() => this.viewContainer.clear());
2032
+ this._openSubscription = this.modalService.open$
2033
+ .subscribe(() => {
2034
+ this.viewContainer.clear();
2035
+ this.viewContainer.createEmbeddedView(this.templateRef);
2036
+ });
2037
+ }
2038
+ ngOnDestroy() {
2039
+ this._closeSubscription.unsubscribe();
2040
+ this._openSubscription.unsubscribe();
2041
+ }
2042
+ }
2043
+ 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 });
2044
+ ModalOpenDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: ModalOpenDirective, selector: "[sfcModalOpen]", ngImport: i0 });
2045
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ModalOpenDirective, decorators: [{
2046
+ type: Directive,
2047
+ args: [{
2048
+ selector: '[sfcModalOpen]'
2049
+ }]
2050
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ModalService }]; } });
2051
+
1804
2052
  class HamburgerComponent {
1805
2053
  constructor() {
1806
2054
  this.open = false;
@@ -1852,21 +2100,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1852
2100
  class ToggleSwitcherComponent {
1853
2101
  constructor() {
1854
2102
  this.active = false;
2103
+ this.disabled = false;
1855
2104
  this.onClick = () => this.active = !this.active;
1856
2105
  this.leftModel = { label: 'Left' };
1857
2106
  this.rightModel = { label: 'Right' };
1858
2107
  }
1859
2108
  }
1860
2109
  ToggleSwitcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ToggleSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1861
- 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"] }] });
2110
+ 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"] }] });
1862
2111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ToggleSwitcherComponent, decorators: [{
1863
2112
  type: Component,
1864
- 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"] }]
2113
+ 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"] }]
1865
2114
  }], ctorParameters: function () { return []; }, propDecorators: { active: [{
1866
2115
  type: Input
1867
2116
  }, {
1868
2117
  type: HostBinding,
1869
2118
  args: ['class.' + UIClass.Active]
2119
+ }], disabled: [{
2120
+ type: Input
2121
+ }, {
2122
+ type: HostBinding,
2123
+ args: ['class.' + UIClass.Disabled]
1870
2124
  }], leftModel: [{
1871
2125
  type: Input
1872
2126
  }], rightModel: [{
@@ -1876,28 +2130,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1876
2130
  args: ['click']
1877
2131
  }] } });
1878
2132
 
2133
+ var CheckmarkType;
2134
+ (function (CheckmarkType) {
2135
+ CheckmarkType["Square"] = "square";
2136
+ CheckmarkType["Rounded"] = "rounded";
2137
+ })(CheckmarkType || (CheckmarkType = {}));
2138
+
1879
2139
  class CheckmarkComponent {
1880
2140
  constructor() {
1881
2141
  this.active = false;
2142
+ this.disabled = false;
1882
2143
  this.icon = faCheck;
1883
- this.onClick = () => this.active = !this.active;
2144
+ this.type = CheckmarkType.Rounded;
2145
+ this.showNotActive = true;
1884
2146
  }
1885
2147
  }
1886
2148
  CheckmarkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CheckmarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1887
- 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"] }] });
2149
+ 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"] }] });
1888
2150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: CheckmarkComponent, decorators: [{
1889
2151
  type: Component,
1890
- 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"] }]
2152
+ 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"] }]
1891
2153
  }], propDecorators: { active: [{
1892
2154
  type: Input
1893
2155
  }, {
1894
2156
  type: HostBinding,
1895
2157
  args: ['class.' + UIClass.Active]
2158
+ }], disabled: [{
2159
+ type: Input
2160
+ }, {
2161
+ type: HostBinding,
2162
+ args: ['class.' + UIClass.Disabled]
1896
2163
  }], icon: [{
1897
2164
  type: Input
1898
- }], onClick: [{
1899
- type: HostListener,
1900
- args: ['click']
2165
+ }], type: [{
2166
+ type: Input
2167
+ }, {
2168
+ type: HostBinding,
2169
+ args: ['class']
2170
+ }], showNotActive: [{
2171
+ type: Input
1901
2172
  }] } });
1902
2173
 
1903
2174
  class PaginationConstants {
@@ -2126,6 +2397,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2126
2397
  args: ['click']
2127
2398
  }] } });
2128
2399
 
2400
+ class LoadMoreService {
2401
+ constructor() {
2402
+ this.START_PAGE = 1;
2403
+ this._page = this.START_PAGE;
2404
+ this.moreSubject = new Subject();
2405
+ this.more$ = this.moreSubject.asObservable();
2406
+ }
2407
+ more() {
2408
+ this._page++;
2409
+ this.moreSubject.next(this._page);
2410
+ }
2411
+ reset() {
2412
+ this._page = this.START_PAGE;
2413
+ }
2414
+ }
2415
+ LoadMoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2416
+ LoadMoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, providedIn: 'root' });
2417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreService, decorators: [{
2418
+ type: Injectable,
2419
+ args: [{
2420
+ providedIn: 'root'
2421
+ }]
2422
+ }] });
2423
+
2424
+ var LoadContainerType;
2425
+ (function (LoadContainerType) {
2426
+ LoadContainerType["Dropdown"] = "dropdown";
2427
+ LoadContainerType["Table"] = "table";
2428
+ })(LoadContainerType || (LoadContainerType = {}));
2429
+
2430
+ class LoadContainerConstants {
2431
+ }
2432
+ LoadContainerConstants.DEFAULT_PAGE_SIZE = 5;
2433
+ LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL = 'Not found';
2434
+
2435
+ class LoadMoreButtonComponent {
2436
+ constructor() {
2437
+ this.DEFAULT_LABEL = 'Show more';
2438
+ this.icon = faChevronCircleDown;
2439
+ this.more = new EventEmitter();
2440
+ }
2441
+ ngOnInit() {
2442
+ if (isNullOrEmptyString(this.label))
2443
+ this.label = this.DEFAULT_LABEL;
2444
+ }
2445
+ }
2446
+ LoadMoreButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2447
+ 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"] }] });
2448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadMoreButtonComponent, decorators: [{
2449
+ type: Component,
2450
+ 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"] }]
2451
+ }], propDecorators: { label: [{
2452
+ type: Input
2453
+ }], icon: [{
2454
+ type: Input
2455
+ }], more: [{
2456
+ type: Output
2457
+ }] } });
2458
+
2459
+ class LoadContainerComponent {
2460
+ constructor(loaderService, loadMoreService) {
2461
+ this.loaderService = loaderService;
2462
+ this.loadMoreService = loadMoreService;
2463
+ this.ComponentSize = ComponentSize;
2464
+ this.Position = Position;
2465
+ this.type = LoadContainerType.Dropdown;
2466
+ this.open = false;
2467
+ this.size = LoadContainerConstants.DEFAULT_PAGE_SIZE;
2468
+ this.loadMore = true;
2469
+ this.showEmpty = true;
2470
+ this.showLoadMoreButton = true;
2471
+ this.notFoundLabel = LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL;
2472
+ this.handleError = new EventEmitter();
2473
+ this.handleSuccess = new EventEmitter();
2474
+ this.handleLoading = new EventEmitter();
2475
+ this.next = false;
2476
+ this.empty = false;
2477
+ this._loading = false;
2478
+ }
2479
+ set model(model) {
2480
+ if (isDefined(model)) {
2481
+ const parameters$ = this.buildParameters(model.predicate$), data$ = isDefined(model.loader) ?
2482
+ this.buildDynamic(parameters$, model.loader) : this.buildStatic(parameters$, model);
2483
+ if (isDefined(this._subscription))
2484
+ this._subscription.unsubscribe();
2485
+ this._subscription = data$.subscribe({
2486
+ next: (result) => this.success(result),
2487
+ error: (error) => this.error(error)
2488
+ });
2489
+ }
2490
+ }
2491
+ get scrollPosition() {
2492
+ return !this.allowLoadMore || this.showLoadMoreButton ? [] : [Position.Bottom];
2493
+ }
2494
+ get allowLoadMore() { return this.next && this.loadMore; }
2495
+ get hideLoadMoreButton() { return !(this.allowLoadMore && this.showLoadMoreButton); }
2496
+ get isEmpty() { return this.empty && this.showEmpty; }
2497
+ set loading(value) {
2498
+ this._loading = value;
2499
+ if (value)
2500
+ this.loaderService.show(this.id, true);
2501
+ else
2502
+ this.loaderService.hide(this.id);
2503
+ this.handleLoading.emit(value);
2504
+ }
2505
+ ngOnDestroy() {
2506
+ if (this._subscription)
2507
+ this._subscription.unsubscribe();
2508
+ }
2509
+ more(event) {
2510
+ event.preventDefault();
2511
+ this.loadMoreService.more();
2512
+ }
2513
+ onScroll() {
2514
+ if (this.allowLoadMore)
2515
+ this.loadMoreService.more();
2516
+ }
2517
+ success(result) {
2518
+ this.next = result.next;
2519
+ this.loading = false;
2520
+ this.empty = !any(result.items);
2521
+ this.handleSuccess.emit(result);
2522
+ }
2523
+ error(error) {
2524
+ this.loading = false;
2525
+ this.empty = false;
2526
+ this.handleError.emit(error);
2527
+ }
2528
+ buildParameters(predicate$) {
2529
+ const parameters$ = (predicate$ || EMPTY.pipe(startWith(null))).pipe(tap(() => {
2530
+ if (isDefined(this.contentEl))
2531
+ this.contentEl.nativeElement.scrollTop = 0;
2532
+ this.loadMoreService.reset();
2533
+ }), switchMap((value) => {
2534
+ return this.loadMoreService.more$.pipe(startWith(this.loadMoreService.START_PAGE), tap(() => this.loading = true), map((page) => {
2535
+ return { params: value, page: page };
2536
+ }));
2537
+ }));
2538
+ return parameters$;
2539
+ }
2540
+ buildDynamic(parameters$, loader) {
2541
+ return parameters$.pipe(switchMap((parameters) => loader(parameters)));
2542
+ }
2543
+ buildStatic(parameters$, model) {
2544
+ return parameters$.pipe(withLatestFrom(model.data$ || of([])), map(([parameters, items]) => {
2545
+ const filtered = model.filter ? model.filter(items, parameters) : items, data = filtered ? {
2546
+ items: skip(filtered, parameters.page, this.size),
2547
+ next: parameters.page < Math.ceil(filtered.length / this.size)
2548
+ } : { items: [], next: false };
2549
+ return data;
2550
+ }));
2551
+ }
2552
+ }
2553
+ 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 });
2554
+ 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"] }] });
2555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: LoadContainerComponent, decorators: [{
2556
+ type: Component,
2557
+ 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"] }]
2558
+ }], ctorParameters: function () { return [{ type: LoaderService }, { type: LoadMoreService }]; }, propDecorators: { id: [{
2559
+ type: Input
2560
+ }], type: [{
2561
+ type: Input
2562
+ }, {
2563
+ type: HostBinding,
2564
+ args: ['class']
2565
+ }], open: [{
2566
+ type: Input
2567
+ }, {
2568
+ type: HostBinding,
2569
+ args: [`class.${UIClass.Open}`]
2570
+ }], size: [{
2571
+ type: Input
2572
+ }], loadMore: [{
2573
+ type: Input
2574
+ }], showEmpty: [{
2575
+ type: Input
2576
+ }], showLoadMoreButton: [{
2577
+ type: Input
2578
+ }], loadMoreLabel: [{
2579
+ type: Input
2580
+ }], notFoundLabel: [{
2581
+ type: Input
2582
+ }], model: [{
2583
+ type: Input
2584
+ }], scrollTarget: [{
2585
+ type: Input
2586
+ }], handleError: [{
2587
+ type: Output
2588
+ }], handleSuccess: [{
2589
+ type: Output
2590
+ }], handleLoading: [{
2591
+ type: Output
2592
+ }], contentEl: [{
2593
+ type: ViewChild,
2594
+ args: ['content']
2595
+ }], isEmpty: [{
2596
+ type: HostBinding,
2597
+ args: [`class.${UIClass.Empty}`]
2598
+ }], _loading: [{
2599
+ type: HostBinding,
2600
+ args: [`class.${UIClass.Loading}`]
2601
+ }] } });
2602
+
2129
2603
  class NgxSfcCommonModule {
2130
2604
  }
2131
2605
  NgxSfcCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NgxSfcCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -2138,6 +2612,9 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2138
2612
  MouseDownDirective,
2139
2613
  ComponentSizeDirective,
2140
2614
  DestroyParentDirective,
2615
+ DomChangesDirective,
2616
+ ScrollTrackerDirective,
2617
+ ScrollIntoViewDirective,
2141
2618
  // components
2142
2619
  ButtonComponent,
2143
2620
  TooltipComponent,
@@ -2150,14 +2627,19 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2150
2627
  DotsComponent,
2151
2628
  PaginationComponent,
2152
2629
  SortingComponent,
2630
+ LoadMoreButtonComponent,
2631
+ LoadContainerComponent,
2153
2632
  // loaders
2154
2633
  BounceLoaderComponent,
2155
2634
  CircleLoaderComponent,
2156
2635
  // modal
2157
2636
  ModalComponent,
2637
+ ModalOpenDirective,
2158
2638
  ModalOpenOnClickDirective,
2159
2639
  DefaultModalHeaderComponent,
2160
- DefaultModalFooterComponent
2640
+ DefaultModalFooterComponent,
2641
+ // pipes
2642
+ SwitchMultiCasePipe
2161
2643
  ], imports: [CommonModule,
2162
2644
  BrowserAnimationsModule,
2163
2645
  FontAwesomeModule], exports: [
@@ -2169,6 +2651,9 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2169
2651
  MouseDownDirective,
2170
2652
  ComponentSizeDirective,
2171
2653
  DestroyParentDirective,
2654
+ DomChangesDirective,
2655
+ ScrollTrackerDirective,
2656
+ ScrollIntoViewDirective,
2172
2657
  // components
2173
2658
  ButtonComponent,
2174
2659
  TooltipComponent,
@@ -2181,14 +2666,19 @@ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
2181
2666
  HamburgerComponent,
2182
2667
  PaginationComponent,
2183
2668
  SortingComponent,
2669
+ LoadMoreButtonComponent,
2670
+ LoadContainerComponent,
2184
2671
  // loaders
2185
2672
  BounceLoaderComponent,
2186
2673
  CircleLoaderComponent,
2187
2674
  // modal
2188
2675
  ModalComponent,
2676
+ ModalOpenDirective,
2189
2677
  ModalOpenOnClickDirective,
2190
2678
  DefaultModalHeaderComponent,
2191
- DefaultModalFooterComponent
2679
+ DefaultModalFooterComponent,
2680
+ // pipes
2681
+ SwitchMultiCasePipe
2192
2682
  ] });
2193
2683
  NgxSfcCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: NgxSfcCommonModule, providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS], imports: [[
2194
2684
  CommonModule,
@@ -2207,6 +2697,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2207
2697
  MouseDownDirective,
2208
2698
  ComponentSizeDirective,
2209
2699
  DestroyParentDirective,
2700
+ DomChangesDirective,
2701
+ ScrollTrackerDirective,
2702
+ ScrollIntoViewDirective,
2210
2703
  // components
2211
2704
  ButtonComponent,
2212
2705
  TooltipComponent,
@@ -2219,14 +2712,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2219
2712
  DotsComponent,
2220
2713
  PaginationComponent,
2221
2714
  SortingComponent,
2715
+ LoadMoreButtonComponent,
2716
+ LoadContainerComponent,
2222
2717
  // loaders
2223
2718
  BounceLoaderComponent,
2224
2719
  CircleLoaderComponent,
2225
2720
  // modal
2226
2721
  ModalComponent,
2722
+ ModalOpenDirective,
2227
2723
  ModalOpenOnClickDirective,
2228
2724
  DefaultModalHeaderComponent,
2229
- DefaultModalFooterComponent
2725
+ DefaultModalFooterComponent,
2726
+ // pipes
2727
+ SwitchMultiCasePipe
2230
2728
  ],
2231
2729
  imports: [
2232
2730
  CommonModule,
@@ -2242,6 +2740,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2242
2740
  MouseDownDirective,
2243
2741
  ComponentSizeDirective,
2244
2742
  DestroyParentDirective,
2743
+ DomChangesDirective,
2744
+ ScrollTrackerDirective,
2745
+ ScrollIntoViewDirective,
2245
2746
  // components
2246
2747
  ButtonComponent,
2247
2748
  TooltipComponent,
@@ -2254,14 +2755,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2254
2755
  HamburgerComponent,
2255
2756
  PaginationComponent,
2256
2757
  SortingComponent,
2758
+ LoadMoreButtonComponent,
2759
+ LoadContainerComponent,
2257
2760
  // loaders
2258
2761
  BounceLoaderComponent,
2259
2762
  CircleLoaderComponent,
2260
2763
  // modal
2261
2764
  ModalComponent,
2765
+ ModalOpenDirective,
2262
2766
  ModalOpenOnClickDirective,
2263
2767
  DefaultModalHeaderComponent,
2264
- DefaultModalFooterComponent
2768
+ DefaultModalFooterComponent,
2769
+ // pipes
2770
+ SwitchMultiCasePipe
2265
2771
  ],
2266
2772
  providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS]
2267
2773
  }]
@@ -2275,5 +2781,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
2275
2781
  * Generated bundle index. Do not edit.
2276
2782
  */
2277
2783
 
2278
- 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 };
2784
+ 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 };
2279
2785
  //# sourceMappingURL=ngx-sfc-common.mjs.map