ngx-sfc-common 0.0.35 → 0.0.36

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.
@@ -149,6 +149,49 @@ var ItemsView;
149
149
  ItemsView["Cards"] = "cards";
150
150
  })(ItemsView || (ItemsView = {}));
151
151
 
152
+ var Color;
153
+ (function (Color) {
154
+ // white
155
+ Color["White_0"] = "#fff";
156
+ Color["White_1"] = "#e6e9ed";
157
+ // grey
158
+ Color["Grey_0"] = "#ccd1d9";
159
+ Color["Grey_1"] = "#aab2bd";
160
+ Color["Grey_2"] = "#656d78";
161
+ // black
162
+ Color["Black_0"] = "#34323d";
163
+ Color["Black_1"] = "#1b1d1f";
164
+ Color["Black_2"] = "#000";
165
+ // red
166
+ Color["Red_0"] = "#ed5565";
167
+ Color["Red_1"] = "#da4453";
168
+ // orange
169
+ Color["Orange_0"] = "#fc6e51";
170
+ Color["Orange_1"] = "#e9573f";
171
+ // yellow
172
+ Color["Yellow_0"] = "#ffce54";
173
+ Color["Yellow_1"] = "#fcbb42";
174
+ Color["Yellow_2"] = "#f8e976";
175
+ // green
176
+ Color["Green_0"] = "#a0d468";
177
+ Color["Green_1"] = "#8cc152";
178
+ Color["Green_2"] = "#48cfad";
179
+ Color["Green_3"] = "#37bc9b";
180
+ Color["Green_4"] = "#2bbbad";
181
+ // blue
182
+ Color["Blue_0"] = "#4fc1e9";
183
+ Color["Blue_1"] = "#3bafda";
184
+ Color["Blue_2"] = "#5d9cec";
185
+ Color["Blue_3"] = "#4a89dc";
186
+ // magenta
187
+ Color["Magenta_0"] = "#ac92ec";
188
+ Color["Magenta_1"] = "#967adc";
189
+ // pink
190
+ Color["Pink_0"] = "#ec87c0";
191
+ Color["Pink_1"] = "#d770ad";
192
+ })(Color || (Color = {}));
193
+ ;
194
+
152
195
  /**
153
196
  * Create a new injection token for injecting the Document into a component.
154
197
  */
@@ -487,9 +530,11 @@ CommonConstants.EMPTY_STRING = '';
487
530
  CommonConstants.DEFAULT_KEY_VALUE = 0;
488
531
  CommonConstants.MOUSE_BUTTON_LEFT = 0;
489
532
  CommonConstants.FULL_PERCENTAGE = 100;
533
+ CommonConstants.LOW_PERCENTAGE = 0;
490
534
  CommonConstants.COMMON_TEXT_DELIMETER = '/';
491
535
  CommonConstants.PERCENTAGE_SYMBOL = '%';
492
- CommonConstants.DOT = '.';
536
+ CommonConstants.DOT = '.';
537
+ CommonConstants.ASTERISK = '*';
493
538
 
494
539
  class DateTimeConstants {
495
540
  }
@@ -897,6 +942,21 @@ function updateItemBy(collection, predicate, newItem) {
897
942
  }
898
943
  return null;
899
944
  }
945
+ /**
946
+ * Toggle item in array
947
+ * @param arr Array of items
948
+ * @param item Item to toggle
949
+ * @returns Toggling result array
950
+ */
951
+ function toggleItem(array, item) {
952
+ if (hasItem(array, item)) {
953
+ removeItem(array, item);
954
+ }
955
+ else {
956
+ addItem(array, item);
957
+ }
958
+ return array;
959
+ }
900
960
  /**
901
961
  * Return collection or empty if collection is not defined
902
962
  * @param collection Array of items
@@ -1497,44 +1557,194 @@ function stopAndPreventPropagation(event) {
1497
1557
  /**
1498
1558
  * Update property in object by key
1499
1559
  * @param obj Object to change
1500
- * @param propertyKey Property to change
1560
+ * @param key Property to change
1501
1561
  * @param newPropertyValue New property value
1502
- * @param oldPropertyValue Old property value
1562
+ * @param options Options for array types
1503
1563
  * @returns Updated object
1504
1564
  */
1505
- function updatePropertyByKey(obj, propertyKey, newPropertyValue, oldPropertyValue) {
1565
+ function updatePropertyByKey(obj, key, newPropertyValue, options = {}) {
1566
+ const { arrayMode = "toggle", arrayToggleValue = newPropertyValue } = options;
1567
+ // Arrays: map recursively over items
1506
1568
  if (Array.isArray(obj)) {
1507
- return obj.map(item => {
1508
- return isObject(item) && item !== null
1509
- ? updatePropertyByKey(item, propertyKey, newPropertyValue, oldPropertyValue)
1510
- : item;
1569
+ let changed = false;
1570
+ const mapped = obj.map(item => {
1571
+ const updated = updatePropertyByKey(item, key, newPropertyValue, options);
1572
+ if (updated !== item)
1573
+ changed = true;
1574
+ return updated;
1511
1575
  });
1512
- }
1513
- else if (isObject(obj) && obj !== null) {
1514
- const updatedObj = {};
1515
- for (const key in obj) {
1516
- if (key === propertyKey) {
1517
- if (Array.isArray(obj[key])) {
1518
- if (hasItem(obj[key], oldPropertyValue)) {
1519
- removeItem(obj[key], oldPropertyValue);
1576
+ return changed ? mapped : obj;
1577
+ }
1578
+ // Plain objects: iterate over keys immutably
1579
+ if (isObject(obj)) {
1580
+ const source = obj;
1581
+ let changed = false;
1582
+ const result = {};
1583
+ for (const propertyKey of Object.keys(source)) {
1584
+ const value = source[propertyKey];
1585
+ if (propertyKey === key) {
1586
+ // Matched key: apply update
1587
+ if (Array.isArray(value)) {
1588
+ if (arrayMode === "toggle") {
1589
+ const updatedArray = toggleItem(value, arrayToggleValue);
1590
+ result[propertyKey] = updatedArray;
1591
+ if (updatedArray !== value)
1592
+ changed = true;
1520
1593
  }
1521
1594
  else {
1522
- addItem(obj[key], oldPropertyValue);
1595
+ // replace mode
1596
+ if (!Array.isArray(newPropertyValue)) {
1597
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
1598
+ }
1599
+ const replaced = [...newPropertyValue];
1600
+ result[propertyKey] = replaced;
1601
+ changed = true;
1523
1602
  }
1524
- updatedObj[key] = obj[key];
1525
1603
  }
1526
1604
  else {
1527
- updatedObj[key] = newPropertyValue;
1605
+ // Non-array leaf -> set to newPropertyValue
1606
+ result[propertyKey] = newPropertyValue;
1607
+ if (result[propertyKey] !== value)
1608
+ changed = true;
1528
1609
  }
1529
1610
  }
1530
1611
  else {
1531
- updatedObj[key] = updatePropertyByKey(obj[key], propertyKey, newPropertyValue, oldPropertyValue);
1612
+ // Recurse into nested values
1613
+ const updatedVal = updatePropertyByKey(value, key, newPropertyValue, options);
1614
+ result[propertyKey] = updatedVal;
1615
+ if (updatedVal !== value)
1616
+ changed = true;
1532
1617
  }
1533
1618
  }
1534
- return updatedObj;
1619
+ return changed ? result : obj;
1535
1620
  }
1621
+ // Primitives or non-plain objects (Date, Map, etc.): return as-is
1536
1622
  return obj;
1537
1623
  }
1624
+ /**
1625
+ * Update property in object by path
1626
+ * @param obj Object to change
1627
+ * @param path Property to change
1628
+ * @param newPropertyValue New property value
1629
+ * @param previousPropertyValue New property value
1630
+ * @param options Options for array types
1631
+ * @returns Updated object
1632
+ */
1633
+ function updatePropertyByPath(obj, path, newPropertyValue, previousPropertyValue, options = {}) {
1634
+ const { arrayMode = "toggle" } = options;
1635
+ const segments = Array.isArray(path) ? path : _pathToSegments(path);
1636
+ /**
1637
+ * Parses a path string like:
1638
+ * - "a.b.c"
1639
+ * - "a.b[0].c"
1640
+ * - "items[*].tags"
1641
+ * into segments: ["a","b",0,"c"] or ["items","*", "tags"]
1642
+ *
1643
+ * Supported:
1644
+ * - Dot notation
1645
+ * - Bracket numbers: [0]
1646
+ * - Wildcard: [*] or .* (as a segment "*")
1647
+ *
1648
+ * Not supported:
1649
+ * - Quoted property names in brackets (e.g., ["foo bar"])
1650
+ * - Escaped dots in keys
1651
+ * @param path Property path
1652
+ * @returns Path segments
1653
+ */
1654
+ function _pathToSegments(path) {
1655
+ // Normalize brackets to dot form (e.g., a[0].b -> a.0.b, a[*].b -> a.*.b)
1656
+ const normalized = path
1657
+ .replace(/\[(\d+)\]/g, ".$1")
1658
+ .replace(/\[\*\]/g, ".*");
1659
+ const rawSegments = normalized.split(".").filter(s => s.length > 0);
1660
+ return rawSegments.map(seg => {
1661
+ if (seg === "*")
1662
+ return "*";
1663
+ const n = Number(seg);
1664
+ if (!Number.isNaN(n) && seg.trim() !== "" && String(n) === seg) {
1665
+ return n;
1666
+ }
1667
+ return seg;
1668
+ });
1669
+ }
1670
+ function _apply(current, remaining) {
1671
+ // Base: reached target path
1672
+ if (remaining.length === 0) {
1673
+ if (Array.isArray(current)) {
1674
+ if (arrayMode === "toggle") {
1675
+ return toggleItem(current, previousPropertyValue);
1676
+ }
1677
+ // replace mode
1678
+ if (!Array.isArray(newPropertyValue)) {
1679
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
1680
+ }
1681
+ return [...newPropertyValue];
1682
+ }
1683
+ // Non-array leaf -> set to newPropertyValue
1684
+ return newPropertyValue;
1685
+ }
1686
+ const [seg, ...rest] = remaining;
1687
+ // Wildcard handling
1688
+ if (seg === "*") {
1689
+ if (Array.isArray(current)) {
1690
+ // Map each element
1691
+ return current.map(item => _apply(item, rest));
1692
+ }
1693
+ if (isObject(current)) {
1694
+ const objCurr = current;
1695
+ const result = {};
1696
+ for (const key of Object.keys(objCurr)) {
1697
+ result[key] = _apply(objCurr[key], rest);
1698
+ }
1699
+ return result;
1700
+ }
1701
+ // If not object/array, nothing to expand -> return as-is
1702
+ return current;
1703
+ }
1704
+ // Numeric index -> navigate arrays
1705
+ if (typeof seg === "number") {
1706
+ if (!Array.isArray(current)) {
1707
+ // Path expects array here, but current isn't an array => no-op
1708
+ return current;
1709
+ }
1710
+ const arr = current;
1711
+ if (seg < 0 || seg >= arr.length) {
1712
+ // Out of bounds -> no-op (alternatively, you could extend the array)
1713
+ return current;
1714
+ }
1715
+ const updatedItem = _apply(arr[seg], rest);
1716
+ if (updatedItem === arr[seg]) {
1717
+ return current; // no structural change
1718
+ }
1719
+ const newArr = arr.slice();
1720
+ newArr[seg] = updatedItem;
1721
+ return newArr;
1722
+ }
1723
+ // String key -> navigate objects
1724
+ if (isObject(current)) {
1725
+ const objCurr = current;
1726
+ const nextVal = objCurr[seg];
1727
+ const updatedVal = _apply(nextVal, rest);
1728
+ if (updatedVal === nextVal) {
1729
+ return current; // no structural change
1730
+ }
1731
+ return { ...objCurr, [seg]: updatedVal };
1732
+ }
1733
+ // If we cannot traverse further (e.g., null, primitive, or array when expecting object) -> no-op
1734
+ return current;
1735
+ }
1736
+ return _apply(obj, segments);
1737
+ }
1738
+ /**
1739
+ * Get changed property key
1740
+ * @param previous Previous value
1741
+ * @param current Currency value
1742
+ * @returns Key of property that was changed
1743
+ */
1744
+ function findChangedPropertyKey(previous, current) {
1745
+ const path = findChangedPropertyPath(previous, current), parts = path?.split('.');
1746
+ return parts && parts.length ? parts[parts.length - 1] : undefined;
1747
+ }
1538
1748
  /**
1539
1749
  * Get changed property path
1540
1750
  * @param previous Previous value
@@ -1559,16 +1769,6 @@ function findChangedPropertyPath(previous, current, parentKey = '') {
1559
1769
  }
1560
1770
  return null;
1561
1771
  }
1562
- /**
1563
- * Get changed property key
1564
- * @param previous Previous value
1565
- * @param current Currency value
1566
- * @returns Key of property that was changed
1567
- */
1568
- function findChangedPropertyKey(previous, current) {
1569
- const path = findChangedPropertyPath(previous, current), parts = path?.split('.');
1570
- return parts && parts.length ? parts[parts.length - 1] : undefined;
1571
- }
1572
1772
  /**
1573
1773
  * Clone object without any reference
1574
1774
  * @param value Object to clone
@@ -3118,10 +3318,10 @@ class PaginationComponent {
3118
3318
  }
3119
3319
  }
3120
3320
  PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }], target: i0.ɵɵFactoryTarget.Component });
3121
- PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PaginationComponent, selector: "sfc-pagination", inputs: { count: "count", full: "full", limits: "limits", page: "page", total: "total", size: "size" }, ngImport: i0, template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"model.any\">\r\n <li [sfcShowHideElement]=\"model.previousPage\" (click)=\"onPageClick(model.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of model.range\" (click)=\"model.page !== page && onPageClick(page)\">\r\n <button [class.active]=\"model.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"model.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"model.lastPage\" (click)=\"onPageClick(model.total)\">\r\n <button>{{model.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"model.nextPage\" (click)=\"onPageClick(model.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{transition:color .5s ease;background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{transition:color .5s ease;outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{transition:background .5s ease;border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active){transition:color .5s ease}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{transition:background .5s ease;color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: ShowHideElementDirective, selector: "[sfcShowHideElement]", inputs: ["sfcShowHideElement", "delay"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }] });
3321
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PaginationComponent, selector: "sfc-pagination", inputs: { count: "count", full: "full", limits: "limits", page: "page", total: "total", size: "size" }, ngImport: i0, template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"model.any\">\r\n <li [sfcShowHideElement]=\"model.previousPage\" (click)=\"onPageClick(model.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of model.range\" (click)=\"model.page !== page && onPageClick(page)\">\r\n <button [class.active]=\"model.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"model.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"model.lastPage\" (click)=\"onPageClick(model.total)\">\r\n <button>{{model.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"model.nextPage\" (click)=\"onPageClick(model.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:1em;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{transition:color .5s ease;background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{transition:color .5s ease;outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{transition:background .5s ease;border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active){transition:color .5s ease}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{transition:background .5s ease;color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: ShowHideElementDirective, selector: "[sfcShowHideElement]", inputs: ["sfcShowHideElement", "delay"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }] });
3122
3322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, decorators: [{
3123
3323
  type: Component,
3124
- args: [{ selector: 'sfc-pagination', template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"model.any\">\r\n <li [sfcShowHideElement]=\"model.previousPage\" (click)=\"onPageClick(model.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of model.range\" (click)=\"model.page !== page && onPageClick(page)\">\r\n <button [class.active]=\"model.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"model.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"model.lastPage\" (click)=\"onPageClick(model.total)\">\r\n <button>{{model.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"model.nextPage\" (click)=\"onPageClick(model.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{transition:color .5s ease;background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{transition:color .5s ease;outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{transition:background .5s ease;border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active){transition:color .5s ease}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{transition:background .5s ease;color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"] }]
3324
+ args: [{ selector: 'sfc-pagination', template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"model.any\">\r\n <li [sfcShowHideElement]=\"model.previousPage\" (click)=\"onPageClick(model.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"model.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of model.range\" (click)=\"model.page !== page && onPageClick(page)\">\r\n <button [class.active]=\"model.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"model.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"model.lastPage\" (click)=\"onPageClick(model.total)\">\r\n <button>{{model.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"model.nextPage\" (click)=\"onPageClick(model.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:1em;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{transition:color .5s ease;background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{transition:color .5s ease;outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{transition:background .5s ease;border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active){transition:color .5s ease}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{transition:background .5s ease;color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"] }]
3125
3325
  }], ctorParameters: function () { return [{ type: PaginationService }]; }, propDecorators: { count: [{
3126
3326
  type: Input
3127
3327
  }], full: [{
@@ -3178,10 +3378,10 @@ class LoadMoreButtonComponent {
3178
3378
  }
3179
3379
  }
3180
3380
  LoadMoreButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3181
- LoadMoreButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", 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,:host-context(.sfc-default-theme) :host .container{background:#fff}:host-context(.sfc-dark-theme) :host .container{background:transparent}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s ease;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}: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:#ffce54}\n"], dependencies: [{ kind: "component", type: i1$2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }] });
3381
+ LoadMoreButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", 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,:host-context(.sfc-default-theme) :host .container{background:#fff}:host-context(.sfc-dark-theme) :host .container{background:transparent}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s ease;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700}:host .container .button:hover{color:#ffce54}\n"], dependencies: [{ kind: "component", type: i1$2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }] });
3182
3382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, decorators: [{
3183
3383
  type: Component,
3184
- 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,:host-context(.sfc-default-theme) :host .container{background:#fff}:host-context(.sfc-dark-theme) :host .container{background:transparent}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s ease;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}: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:#ffce54}\n"] }]
3384
+ 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,:host-context(.sfc-default-theme) :host .container{background:#fff}:host-context(.sfc-dark-theme) :host .container{background:transparent}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s ease;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700}:host .container .button:hover{color:#ffce54}\n"] }]
3185
3385
  }], propDecorators: { label: [{
3186
3386
  type: Input
3187
3387
  }], icon: [{
@@ -3788,6 +3988,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3788
3988
  * Generated bundle index. Do not edit.
3789
3989
  */
3790
3990
 
3791
- export { BounceLoaderComponent, BrowserDocumentRef, BrowserWindowRef, ButtonComponent, ButtonType, CheckmarkComponent, CheckmarkType, CircleLoaderComponent, CircleLoaderType, ClickOutsideDirective, CloseComponent, CollapseExpandComponent, CollapseExpandContainerComponent, CollapseExpandDirective, CommonConstants, Compare, ComponentReferenceDirective, ComponentSize, ComponentSizeDirective, DOCUMENT, DOCUMENT_PROVIDERS, DateTimeConstants, DefaultModalFooterComponent, DefaultModalHeaderComponent, DelimeterComponent, DestroyParentDirective, Direction, DocumentRef, DomChangesDirective, DotComponent, DotsComponent, HamburgerComponent, HamburgerMenuComponent, IconComponent, IfDirective, ImageLoadDirective, ImageLoadService, ItemsView, LoadContainerChangesSource, LoadContainerComponent, LoadContainerLoadType, LoadContainerType, LoadMoreButtonComponent, LoadMoreService, LoaderService, MediaLimits, MessageComponent, ModalComponent, ModalOpenDirective, ModalOpenOnClickDirective, ModalService, ModalTemplate, MouseDownDirective, NgxSfcCommonModule, NotificationType, ObservableBehaviorModel, ObservableModel, PaginationComponent, PaginationConstants, PaginationService, Position, ReloadService, RepeatPipe, ResizeService, ScrollIntoViewDirective, ScrollTrackerDirective, Select, Sequence, ShowHideElementDirective, SortByPipe, SortingDirection, SortingService, State, SwitchMultiCasePipe, TagComponent, TemplateContentComponent, TemplateReferenceDirective, Theme, ThrowElementOnHoverDirective, ToggleComponent, ToggleSwitcherComponent, TooltipComponent, TooltipType, UIClass, UIConstants, WINDOW, WINDOW_PROVIDERS, WindowRef, addClasses, addItem, addPropertyToObject, all, any, browserDocumentProvider, browserWindowProvider, buildHttpParams, contains, convertDateToTimestamp, convertFromBase64String, convertTimestampToDate, convertToBase64String, convertUTCDateToLocalDate, count, deepClone, distinct, documentFactory, documentProvider, findChangedPropertyKey, findChangedPropertyPath, firstItem, firstOrDefault, generateGuid, getAge, getCalcValue, getCollectionOrEmpty, getCssLikeValue, getFileExtension, getFirstDayOfMonth, getFirstDayOfMonthByYearAndMonth, getFirstDayOfYear, getLastDayOfMonth, getLastDayOfMonthByYearAndMonth, getLastDayOfYear, getNextDate, getNextMonth, getNextYear, getPreviousDate, getPreviousMonth, getPreviousYear, getRotateValue, getValueFromCssLikeValue, getWeeksNumberInMonth, hasAnyItem, hasItem, hasItemBy, hasObjectItem, hexToRgb, isArraysEquals, isAsyncData, isChromeBrowser, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDateTimeLessOrEqual, isDefined, isEmail, isEqual, isEqualDateTimes, isEqualDates, isImage, isJsonString, isNullOrEmptyString, isNumeric, isObject, isString, isTimeGreatOrEqual, isTimeLessOrEqual, lastItem, max, mergeDeep, nameof, parseBoolean, parseFileSize, readAsDataURL, remove, removeClasses, removeItem, removeItemBy, removePropertyFromObject, replaceRgbOpacity, rgbToHex, setDay, setDefaultSecondsAndMiliseconds, setHours, setMilliseconds, setMinutes, setSeconds, setYear, skip, sort, sortBy, sortByPath, stopAndPreventPropagation, sum, trim, updateItemBy, updatePropertyByKey, where, windowFactory, windowProvider };
3991
+ export { BounceLoaderComponent, BrowserDocumentRef, BrowserWindowRef, ButtonComponent, ButtonType, CheckmarkComponent, CheckmarkType, CircleLoaderComponent, CircleLoaderType, ClickOutsideDirective, CloseComponent, CollapseExpandComponent, CollapseExpandContainerComponent, CollapseExpandDirective, Color, CommonConstants, Compare, ComponentReferenceDirective, ComponentSize, ComponentSizeDirective, DOCUMENT, DOCUMENT_PROVIDERS, DateTimeConstants, DefaultModalFooterComponent, DefaultModalHeaderComponent, DelimeterComponent, DestroyParentDirective, Direction, DocumentRef, DomChangesDirective, DotComponent, DotsComponent, HamburgerComponent, HamburgerMenuComponent, IconComponent, IfDirective, ImageLoadDirective, ImageLoadService, ItemsView, LoadContainerChangesSource, LoadContainerComponent, LoadContainerLoadType, LoadContainerType, LoadMoreButtonComponent, LoadMoreService, LoaderService, MediaLimits, MessageComponent, ModalComponent, ModalOpenDirective, ModalOpenOnClickDirective, ModalService, ModalTemplate, MouseDownDirective, NgxSfcCommonModule, NotificationType, ObservableBehaviorModel, ObservableModel, PaginationComponent, PaginationConstants, PaginationService, Position, ReloadService, RepeatPipe, ResizeService, ScrollIntoViewDirective, ScrollTrackerDirective, Select, Sequence, ShowHideElementDirective, SortByPipe, SortingDirection, SortingService, State, SwitchMultiCasePipe, TagComponent, TemplateContentComponent, TemplateReferenceDirective, Theme, ThrowElementOnHoverDirective, ToggleComponent, ToggleSwitcherComponent, TooltipComponent, TooltipType, UIClass, UIConstants, WINDOW, WINDOW_PROVIDERS, WindowRef, addClasses, addItem, addPropertyToObject, all, any, browserDocumentProvider, browserWindowProvider, buildHttpParams, contains, convertDateToTimestamp, convertFromBase64String, convertTimestampToDate, convertToBase64String, convertUTCDateToLocalDate, count, deepClone, distinct, documentFactory, documentProvider, findChangedPropertyKey, findChangedPropertyPath, firstItem, firstOrDefault, generateGuid, getAge, getCalcValue, getCollectionOrEmpty, getCssLikeValue, getFileExtension, getFirstDayOfMonth, getFirstDayOfMonthByYearAndMonth, getFirstDayOfYear, getLastDayOfMonth, getLastDayOfMonthByYearAndMonth, getLastDayOfYear, getNextDate, getNextMonth, getNextYear, getPreviousDate, getPreviousMonth, getPreviousYear, getRotateValue, getValueFromCssLikeValue, getWeeksNumberInMonth, hasAnyItem, hasItem, hasItemBy, hasObjectItem, hexToRgb, isArraysEquals, isAsyncData, isChromeBrowser, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDateTimeLessOrEqual, isDefined, isEmail, isEqual, isEqualDateTimes, isEqualDates, isImage, isJsonString, isNullOrEmptyString, isNumeric, isObject, isString, isTimeGreatOrEqual, isTimeLessOrEqual, lastItem, max, mergeDeep, nameof, parseBoolean, parseFileSize, readAsDataURL, remove, removeClasses, removeItem, removeItemBy, removePropertyFromObject, replaceRgbOpacity, rgbToHex, setDay, setDefaultSecondsAndMiliseconds, setHours, setMilliseconds, setMinutes, setSeconds, setYear, skip, sort, sortBy, sortByPath, stopAndPreventPropagation, sum, toggleItem, trim, updateItemBy, updatePropertyByKey, updatePropertyByPath, where, windowFactory, windowProvider };
3792
3992
  //# sourceMappingURL=ngx-sfc-common.mjs.map
3793
3993
  //# sourceMappingURL=ngx-sfc-common.mjs.map