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.
@@ -150,6 +150,49 @@ var ItemsView;
150
150
  ItemsView["Cards"] = "cards";
151
151
  })(ItemsView || (ItemsView = {}));
152
152
 
153
+ var Color;
154
+ (function (Color) {
155
+ // white
156
+ Color["White_0"] = "#fff";
157
+ Color["White_1"] = "#e6e9ed";
158
+ // grey
159
+ Color["Grey_0"] = "#ccd1d9";
160
+ Color["Grey_1"] = "#aab2bd";
161
+ Color["Grey_2"] = "#656d78";
162
+ // black
163
+ Color["Black_0"] = "#34323d";
164
+ Color["Black_1"] = "#1b1d1f";
165
+ Color["Black_2"] = "#000";
166
+ // red
167
+ Color["Red_0"] = "#ed5565";
168
+ Color["Red_1"] = "#da4453";
169
+ // orange
170
+ Color["Orange_0"] = "#fc6e51";
171
+ Color["Orange_1"] = "#e9573f";
172
+ // yellow
173
+ Color["Yellow_0"] = "#ffce54";
174
+ Color["Yellow_1"] = "#fcbb42";
175
+ Color["Yellow_2"] = "#f8e976";
176
+ // green
177
+ Color["Green_0"] = "#a0d468";
178
+ Color["Green_1"] = "#8cc152";
179
+ Color["Green_2"] = "#48cfad";
180
+ Color["Green_3"] = "#37bc9b";
181
+ Color["Green_4"] = "#2bbbad";
182
+ // blue
183
+ Color["Blue_0"] = "#4fc1e9";
184
+ Color["Blue_1"] = "#3bafda";
185
+ Color["Blue_2"] = "#5d9cec";
186
+ Color["Blue_3"] = "#4a89dc";
187
+ // magenta
188
+ Color["Magenta_0"] = "#ac92ec";
189
+ Color["Magenta_1"] = "#967adc";
190
+ // pink
191
+ Color["Pink_0"] = "#ec87c0";
192
+ Color["Pink_1"] = "#d770ad";
193
+ })(Color || (Color = {}));
194
+ ;
195
+
153
196
  /**
154
197
  * Create a new injection token for injecting the Document into a component.
155
198
  */
@@ -491,9 +534,11 @@ CommonConstants.EMPTY_STRING = '';
491
534
  CommonConstants.DEFAULT_KEY_VALUE = 0;
492
535
  CommonConstants.MOUSE_BUTTON_LEFT = 0;
493
536
  CommonConstants.FULL_PERCENTAGE = 100;
537
+ CommonConstants.LOW_PERCENTAGE = 0;
494
538
  CommonConstants.COMMON_TEXT_DELIMETER = '/';
495
539
  CommonConstants.PERCENTAGE_SYMBOL = '%';
496
- CommonConstants.DOT = '.';
540
+ CommonConstants.DOT = '.';
541
+ CommonConstants.ASTERISK = '*';
497
542
 
498
543
  class DateTimeConstants {
499
544
  }
@@ -898,6 +943,21 @@ function updateItemBy(collection, predicate, newItem) {
898
943
  }
899
944
  return null;
900
945
  }
946
+ /**
947
+ * Toggle item in array
948
+ * @param arr Array of items
949
+ * @param item Item to toggle
950
+ * @returns Toggling result array
951
+ */
952
+ function toggleItem(array, item) {
953
+ if (hasItem(array, item)) {
954
+ removeItem(array, item);
955
+ }
956
+ else {
957
+ addItem(array, item);
958
+ }
959
+ return array;
960
+ }
901
961
  /**
902
962
  * Return collection or empty if collection is not defined
903
963
  * @param collection Array of items
@@ -1498,44 +1558,194 @@ function stopAndPreventPropagation(event) {
1498
1558
  /**
1499
1559
  * Update property in object by key
1500
1560
  * @param obj Object to change
1501
- * @param propertyKey Property to change
1561
+ * @param key Property to change
1502
1562
  * @param newPropertyValue New property value
1503
- * @param oldPropertyValue Old property value
1563
+ * @param options Options for array types
1504
1564
  * @returns Updated object
1505
1565
  */
1506
- function updatePropertyByKey(obj, propertyKey, newPropertyValue, oldPropertyValue) {
1566
+ function updatePropertyByKey(obj, key, newPropertyValue, options = {}) {
1567
+ const { arrayMode = "toggle", arrayToggleValue = newPropertyValue } = options;
1568
+ // Arrays: map recursively over items
1507
1569
  if (Array.isArray(obj)) {
1508
- return obj.map(item => {
1509
- return isObject(item) && item !== null
1510
- ? updatePropertyByKey(item, propertyKey, newPropertyValue, oldPropertyValue)
1511
- : item;
1570
+ let changed = false;
1571
+ const mapped = obj.map(item => {
1572
+ const updated = updatePropertyByKey(item, key, newPropertyValue, options);
1573
+ if (updated !== item)
1574
+ changed = true;
1575
+ return updated;
1512
1576
  });
1513
- }
1514
- else if (isObject(obj) && obj !== null) {
1515
- const updatedObj = {};
1516
- for (const key in obj) {
1517
- if (key === propertyKey) {
1518
- if (Array.isArray(obj[key])) {
1519
- if (hasItem(obj[key], oldPropertyValue)) {
1520
- removeItem(obj[key], oldPropertyValue);
1577
+ return changed ? mapped : obj;
1578
+ }
1579
+ // Plain objects: iterate over keys immutably
1580
+ if (isObject(obj)) {
1581
+ const source = obj;
1582
+ let changed = false;
1583
+ const result = {};
1584
+ for (const propertyKey of Object.keys(source)) {
1585
+ const value = source[propertyKey];
1586
+ if (propertyKey === key) {
1587
+ // Matched key: apply update
1588
+ if (Array.isArray(value)) {
1589
+ if (arrayMode === "toggle") {
1590
+ const updatedArray = toggleItem(value, arrayToggleValue);
1591
+ result[propertyKey] = updatedArray;
1592
+ if (updatedArray !== value)
1593
+ changed = true;
1521
1594
  }
1522
1595
  else {
1523
- addItem(obj[key], oldPropertyValue);
1596
+ // replace mode
1597
+ if (!Array.isArray(newPropertyValue)) {
1598
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
1599
+ }
1600
+ const replaced = [...newPropertyValue];
1601
+ result[propertyKey] = replaced;
1602
+ changed = true;
1524
1603
  }
1525
- updatedObj[key] = obj[key];
1526
1604
  }
1527
1605
  else {
1528
- updatedObj[key] = newPropertyValue;
1606
+ // Non-array leaf -> set to newPropertyValue
1607
+ result[propertyKey] = newPropertyValue;
1608
+ if (result[propertyKey] !== value)
1609
+ changed = true;
1529
1610
  }
1530
1611
  }
1531
1612
  else {
1532
- updatedObj[key] = updatePropertyByKey(obj[key], propertyKey, newPropertyValue, oldPropertyValue);
1613
+ // Recurse into nested values
1614
+ const updatedVal = updatePropertyByKey(value, key, newPropertyValue, options);
1615
+ result[propertyKey] = updatedVal;
1616
+ if (updatedVal !== value)
1617
+ changed = true;
1533
1618
  }
1534
1619
  }
1535
- return updatedObj;
1620
+ return changed ? result : obj;
1536
1621
  }
1622
+ // Primitives or non-plain objects (Date, Map, etc.): return as-is
1537
1623
  return obj;
1538
1624
  }
1625
+ /**
1626
+ * Update property in object by path
1627
+ * @param obj Object to change
1628
+ * @param path Property to change
1629
+ * @param newPropertyValue New property value
1630
+ * @param previousPropertyValue New property value
1631
+ * @param options Options for array types
1632
+ * @returns Updated object
1633
+ */
1634
+ function updatePropertyByPath(obj, path, newPropertyValue, previousPropertyValue, options = {}) {
1635
+ const { arrayMode = "toggle" } = options;
1636
+ const segments = Array.isArray(path) ? path : _pathToSegments(path);
1637
+ /**
1638
+ * Parses a path string like:
1639
+ * - "a.b.c"
1640
+ * - "a.b[0].c"
1641
+ * - "items[*].tags"
1642
+ * into segments: ["a","b",0,"c"] or ["items","*", "tags"]
1643
+ *
1644
+ * Supported:
1645
+ * - Dot notation
1646
+ * - Bracket numbers: [0]
1647
+ * - Wildcard: [*] or .* (as a segment "*")
1648
+ *
1649
+ * Not supported:
1650
+ * - Quoted property names in brackets (e.g., ["foo bar"])
1651
+ * - Escaped dots in keys
1652
+ * @param path Property path
1653
+ * @returns Path segments
1654
+ */
1655
+ function _pathToSegments(path) {
1656
+ // Normalize brackets to dot form (e.g., a[0].b -> a.0.b, a[*].b -> a.*.b)
1657
+ const normalized = path
1658
+ .replace(/\[(\d+)\]/g, ".$1")
1659
+ .replace(/\[\*\]/g, ".*");
1660
+ const rawSegments = normalized.split(".").filter(s => s.length > 0);
1661
+ return rawSegments.map(seg => {
1662
+ if (seg === "*")
1663
+ return "*";
1664
+ const n = Number(seg);
1665
+ if (!Number.isNaN(n) && seg.trim() !== "" && String(n) === seg) {
1666
+ return n;
1667
+ }
1668
+ return seg;
1669
+ });
1670
+ }
1671
+ function _apply(current, remaining) {
1672
+ // Base: reached target path
1673
+ if (remaining.length === 0) {
1674
+ if (Array.isArray(current)) {
1675
+ if (arrayMode === "toggle") {
1676
+ return toggleItem(current, previousPropertyValue);
1677
+ }
1678
+ // replace mode
1679
+ if (!Array.isArray(newPropertyValue)) {
1680
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
1681
+ }
1682
+ return [...newPropertyValue];
1683
+ }
1684
+ // Non-array leaf -> set to newPropertyValue
1685
+ return newPropertyValue;
1686
+ }
1687
+ const [seg, ...rest] = remaining;
1688
+ // Wildcard handling
1689
+ if (seg === "*") {
1690
+ if (Array.isArray(current)) {
1691
+ // Map each element
1692
+ return current.map(item => _apply(item, rest));
1693
+ }
1694
+ if (isObject(current)) {
1695
+ const objCurr = current;
1696
+ const result = {};
1697
+ for (const key of Object.keys(objCurr)) {
1698
+ result[key] = _apply(objCurr[key], rest);
1699
+ }
1700
+ return result;
1701
+ }
1702
+ // If not object/array, nothing to expand -> return as-is
1703
+ return current;
1704
+ }
1705
+ // Numeric index -> navigate arrays
1706
+ if (typeof seg === "number") {
1707
+ if (!Array.isArray(current)) {
1708
+ // Path expects array here, but current isn't an array => no-op
1709
+ return current;
1710
+ }
1711
+ const arr = current;
1712
+ if (seg < 0 || seg >= arr.length) {
1713
+ // Out of bounds -> no-op (alternatively, you could extend the array)
1714
+ return current;
1715
+ }
1716
+ const updatedItem = _apply(arr[seg], rest);
1717
+ if (updatedItem === arr[seg]) {
1718
+ return current; // no structural change
1719
+ }
1720
+ const newArr = arr.slice();
1721
+ newArr[seg] = updatedItem;
1722
+ return newArr;
1723
+ }
1724
+ // String key -> navigate objects
1725
+ if (isObject(current)) {
1726
+ const objCurr = current;
1727
+ const nextVal = objCurr[seg];
1728
+ const updatedVal = _apply(nextVal, rest);
1729
+ if (updatedVal === nextVal) {
1730
+ return current; // no structural change
1731
+ }
1732
+ return Object.assign(Object.assign({}, objCurr), { [seg]: updatedVal });
1733
+ }
1734
+ // If we cannot traverse further (e.g., null, primitive, or array when expecting object) -> no-op
1735
+ return current;
1736
+ }
1737
+ return _apply(obj, segments);
1738
+ }
1739
+ /**
1740
+ * Get changed property key
1741
+ * @param previous Previous value
1742
+ * @param current Currency value
1743
+ * @returns Key of property that was changed
1744
+ */
1745
+ function findChangedPropertyKey(previous, current) {
1746
+ const path = findChangedPropertyPath(previous, current), parts = path === null || path === void 0 ? void 0 : path.split('.');
1747
+ return parts && parts.length ? parts[parts.length - 1] : undefined;
1748
+ }
1539
1749
  /**
1540
1750
  * Get changed property path
1541
1751
  * @param previous Previous value
@@ -1560,16 +1770,6 @@ function findChangedPropertyPath(previous, current, parentKey = '') {
1560
1770
  }
1561
1771
  return null;
1562
1772
  }
1563
- /**
1564
- * Get changed property key
1565
- * @param previous Previous value
1566
- * @param current Currency value
1567
- * @returns Key of property that was changed
1568
- */
1569
- function findChangedPropertyKey(previous, current) {
1570
- const path = findChangedPropertyPath(previous, current), parts = path === null || path === void 0 ? void 0 : path.split('.');
1571
- return parts && parts.length ? parts[parts.length - 1] : undefined;
1572
- }
1573
1773
  /**
1574
1774
  * Clone object without any reference
1575
1775
  * @param value Object to clone
@@ -3129,10 +3329,10 @@ class PaginationComponent {
3129
3329
  }
3130
3330
  }
3131
3331
  PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }], target: i0.ɵɵFactoryTarget.Component });
3132
- 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"] }] });
3332
+ 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"] }] });
3133
3333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, decorators: [{
3134
3334
  type: Component,
3135
- 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"] }]
3335
+ 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"] }]
3136
3336
  }], ctorParameters: function () { return [{ type: PaginationService }]; }, propDecorators: { count: [{
3137
3337
  type: Input
3138
3338
  }], full: [{
@@ -3189,10 +3389,10 @@ class LoadMoreButtonComponent {
3189
3389
  }
3190
3390
  }
3191
3391
  LoadMoreButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3192
- 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"] }] });
3392
+ 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"] }] });
3193
3393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, decorators: [{
3194
3394
  type: Component,
3195
- 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"] }]
3395
+ 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"] }]
3196
3396
  }], propDecorators: { label: [{
3197
3397
  type: Input
3198
3398
  }], icon: [{
@@ -3806,6 +4006,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3806
4006
  * Generated bundle index. Do not edit.
3807
4007
  */
3808
4008
 
3809
- 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 };
4009
+ 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 };
3810
4010
  //# sourceMappingURL=ngx-sfc-common.mjs.map
3811
4011
  //# sourceMappingURL=ngx-sfc-common.mjs.map