pdm-ui-kit 1.2.0 → 1.2.1

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.
@@ -26,10 +26,40 @@ export class PdmPaginationComponent {
26
26
  }
27
27
  get visiblePages() {
28
28
  const total = Math.max(1, this.pageCount);
29
- if (total <= Math.max(1, this.maxVisible)) {
29
+ const current = Math.min(Math.max(1, this.page), total);
30
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
31
+ if (total <= maxNumericPages) {
30
32
  return Array.from({ length: total }, (_, i) => i + 1);
31
33
  }
32
- return [1, 2, 'ellipsis', total];
34
+ const middleSlots = maxNumericPages - 2;
35
+ let start = current - Math.floor((middleSlots - 1) / 2);
36
+ let end = start + middleSlots - 1;
37
+ if (start < 2) {
38
+ start = 2;
39
+ end = start + middleSlots - 1;
40
+ }
41
+ if (end > total - 1) {
42
+ end = total - 1;
43
+ start = end - middleSlots + 1;
44
+ }
45
+ const pages = [1];
46
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
47
+ pages.push(pageNumber);
48
+ }
49
+ pages.push(total);
50
+ return pages.reduce((result, pageNumber) => {
51
+ const previous = result[result.length - 1];
52
+ if (typeof previous === 'number') {
53
+ if (pageNumber - previous === 2) {
54
+ result.push(previous + 1);
55
+ }
56
+ else if (pageNumber - previous > 2) {
57
+ result.push('ellipsis');
58
+ }
59
+ }
60
+ result.push(pageNumber);
61
+ return result;
62
+ }, []);
33
63
  }
34
64
  setPage(next) {
35
65
  if (next < 1 || next > this.pageCount || next === this.page) {
@@ -69,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
69
99
  }], rowsPerPageChange: [{
70
100
  type: Output
71
101
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBc0MxRDtJQXBDQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7bUhBL0NVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHFWQ1JuQyx3ekZBbUVBOzJGRDNEYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGRtTmF0aXZlU2VsZWN0T3B0aW9uIH0gZnJvbSAncGRtLXVpLWtpdC9zcmMvbmF0aXZlLXNlbGVjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VDb3VudCA9IDE7XG4gIEBJbnB1dCgpIG1heFZpc2libGUgPSA0O1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2VMYWJlbCA9ICdSb3dzIHBlciBwYWdlJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2UgPSAxMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwLCA1MF07XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3NQZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgZ2V0IHJvd3NQZXJQYWdlU2VsZWN0T3B0aW9ucygpOiBQZG1OYXRpdmVTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICBsYWJlbDogU3RyaW5nKHZhbHVlKSxcbiAgICAgIHZhbHVlOiBTdHJpbmcodmFsdWUpXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IHJvd3NQZXJQYWdlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucm93c1BlclBhZ2UpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxudW1iZXIgfCAnZWxsaXBzaXMnPiB7XG4gICAgY29uc3QgdG90YWwgPSBNYXRoLm1heCgxLCB0aGlzLnBhZ2VDb3VudCk7XG4gICAgaWYgKHRvdGFsIDw9IE1hdGgubWF4KDEsIHRoaXMubWF4VmlzaWJsZSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBbMSwgMiwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gc206dy1bMTIwcHhdXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJvd3NQZXJQYWdlQ2hhbmdlVmFsdWUoJGV2ZW50KVwiXG4gICAgPjwvcGRtLXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPHVsIGNsYXNzPVwibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMSBwLTBcIj5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPj0gcGFnZUNvdW50XCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSArIDEpXCJcbiAgICAgID5cbiAgICAgICAgTmV4dFxuICAgICAgICA8cGRtLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uYXY+XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBMEUxRDtJQXhFQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJ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SUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O21IQW5GVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxVkNSbkMsd3pGQW1FQTsyRkQzRGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBkbU5hdGl2ZVNlbGVjdE9wdGlvbiB9IGZyb20gJ3BkbS11aS1raXQvc3JjL25hdGl2ZS1zZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZG0tcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtUGFnaW5hdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuICBASW5wdXQoKSBwYWdlQ291bnQgPSAxO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlID0gNDtcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlTGFiZWwgPSAnUm93cyBwZXIgcGFnZSc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlID0gMTA7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGdldCByb3dzUGVyUGFnZVNlbGVjdE9wdGlvbnMoKTogUGRtTmF0aXZlU2VsZWN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IFN0cmluZyh2YWx1ZSksXG4gICAgICB2YWx1ZTogU3RyaW5nKHZhbHVlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCByb3dzUGVyUGFnZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnJvd3NQZXJQYWdlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8bnVtYmVyIHwgJ2VsbGlwc2lzJz4ge1xuICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgoMSwgdGhpcy5wYWdlQ291bnQpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihNYXRoLm1heCgxLCB0aGlzLnBhZ2UpLCB0b3RhbCk7XG4gICAgY29uc3QgbWF4TnVtZXJpY1BhZ2VzID0gTWF0aC5tYXgoMywgTWF0aC5mbG9vcih0aGlzLm1heFZpc2libGUpKTtcblxuICAgIGlmICh0b3RhbCA8PSBtYXhOdW1lcmljUGFnZXMpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pZGRsZVNsb3RzID0gbWF4TnVtZXJpY1BhZ2VzIC0gMjtcbiAgICBsZXQgc3RhcnQgPSBjdXJyZW50IC0gTWF0aC5mbG9vcigobWlkZGxlU2xvdHMgLSAxKSAvIDIpO1xuICAgIGxldCBlbmQgPSBzdGFydCArIG1pZGRsZVNsb3RzIC0gMTtcblxuICAgIGlmIChzdGFydCA8IDIpIHtcbiAgICAgIHN0YXJ0ID0gMjtcbiAgICAgIGVuZCA9IHN0YXJ0ICsgbWlkZGxlU2xvdHMgLSAxO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0b3RhbCAtIDEpIHtcbiAgICAgIGVuZCA9IHRvdGFsIC0gMTtcbiAgICAgIHN0YXJ0ID0gZW5kIC0gbWlkZGxlU2xvdHMgKyAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gWzFdO1xuICAgIGZvciAobGV0IHBhZ2VOdW1iZXIgPSBzdGFydDsgcGFnZU51bWJlciA8PSBlbmQ7IHBhZ2VOdW1iZXIgKz0gMSkge1xuICAgICAgcGFnZXMucHVzaChwYWdlTnVtYmVyKTtcbiAgICB9XG4gICAgcGFnZXMucHVzaCh0b3RhbCk7XG5cbiAgICByZXR1cm4gcGFnZXMucmVkdWNlPEFycmF5PG51bWJlciB8ICdlbGxpcHNpcyc+PigocmVzdWx0LCBwYWdlTnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgcHJldmlvdXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChwYWdlTnVtYmVyIC0gcHJldmlvdXMgPT09IDIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChwcmV2aW91cyArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSBwcmV2aW91cyA+IDIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnZWxsaXBzaXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChwYWdlTnVtYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gc206dy1bMTIwcHhdXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJvd3NQZXJQYWdlQ2hhbmdlVmFsdWUoJGV2ZW50KVwiXG4gICAgPjwvcGRtLXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPHVsIGNsYXNzPVwibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMSBwLTBcIj5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPj0gcGFnZUNvdW50XCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSArIDEpXCJcbiAgICAgID5cbiAgICAgICAgTmV4dFxuICAgICAgICA8cGRtLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uYXY+XG4iXX0=
@@ -26,10 +26,40 @@ export class PdmPaginationComponent {
26
26
  }
27
27
  get visiblePages() {
28
28
  const total = Math.max(1, this.pageCount);
29
- if (total <= Math.max(1, this.maxVisible)) {
29
+ const current = Math.min(Math.max(1, this.page), total);
30
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
31
+ if (total <= maxNumericPages) {
30
32
  return Array.from({ length: total }, (_, i) => i + 1);
31
33
  }
32
- return [1, 2, 'ellipsis', total];
34
+ const middleSlots = maxNumericPages - 2;
35
+ let start = current - Math.floor((middleSlots - 1) / 2);
36
+ let end = start + middleSlots - 1;
37
+ if (start < 2) {
38
+ start = 2;
39
+ end = start + middleSlots - 1;
40
+ }
41
+ if (end > total - 1) {
42
+ end = total - 1;
43
+ start = end - middleSlots + 1;
44
+ }
45
+ const pages = [1];
46
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
47
+ pages.push(pageNumber);
48
+ }
49
+ pages.push(total);
50
+ return pages.reduce((result, pageNumber) => {
51
+ const previous = result[result.length - 1];
52
+ if (typeof previous === 'number') {
53
+ if (pageNumber - previous === 2) {
54
+ result.push(previous + 1);
55
+ }
56
+ else if (pageNumber - previous > 2) {
57
+ result.push('ellipsis');
58
+ }
59
+ }
60
+ result.push(pageNumber);
61
+ return result;
62
+ }, []);
33
63
  }
34
64
  setPage(next) {
35
65
  if (next < 1 || next > this.pageCount || next === this.page) {
@@ -69,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
69
99
  }], rowsPerPageChange: [{
70
100
  type: Output
71
101
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBc0MxRDtJQXBDQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7bUhBL0NVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHFWQ1JuQyx3ekZBbUVBOzJGRDNEYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGRtTmF0aXZlU2VsZWN0T3B0aW9uIH0gZnJvbSAncGRtLXVpLWtpdC9zcmMvbmF0aXZlLXNlbGVjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VDb3VudCA9IDE7XG4gIEBJbnB1dCgpIG1heFZpc2libGUgPSA0O1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2VMYWJlbCA9ICdSb3dzIHBlciBwYWdlJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2UgPSAxMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwLCA1MF07XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3NQZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgZ2V0IHJvd3NQZXJQYWdlU2VsZWN0T3B0aW9ucygpOiBQZG1OYXRpdmVTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICBsYWJlbDogU3RyaW5nKHZhbHVlKSxcbiAgICAgIHZhbHVlOiBTdHJpbmcodmFsdWUpXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IHJvd3NQZXJQYWdlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucm93c1BlclBhZ2UpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxudW1iZXIgfCAnZWxsaXBzaXMnPiB7XG4gICAgY29uc3QgdG90YWwgPSBNYXRoLm1heCgxLCB0aGlzLnBhZ2VDb3VudCk7XG4gICAgaWYgKHRvdGFsIDw9IE1hdGgubWF4KDEsIHRoaXMubWF4VmlzaWJsZSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBbMSwgMiwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gc206dy1bMTIwcHhdXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJvd3NQZXJQYWdlQ2hhbmdlVmFsdWUoJGV2ZW50KVwiXG4gICAgPjwvcGRtLXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPHVsIGNsYXNzPVwibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMSBwLTBcIj5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPj0gcGFnZUNvdW50XCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSArIDEpXCJcbiAgICAgID5cbiAgICAgICAgTmV4dFxuICAgICAgICA8cGRtLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uYXY+XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBMEUxRDtJQXhFQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFF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UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O21IQW5GVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxVkNSbkMsd3pGQW1FQTsyRkQzRGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBkbU5hdGl2ZVNlbGVjdE9wdGlvbiB9IGZyb20gJ3BkbS11aS1raXQvc3JjL25hdGl2ZS1zZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZG0tcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtUGFnaW5hdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuICBASW5wdXQoKSBwYWdlQ291bnQgPSAxO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlID0gNDtcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlTGFiZWwgPSAnUm93cyBwZXIgcGFnZSc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlID0gMTA7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGdldCByb3dzUGVyUGFnZVNlbGVjdE9wdGlvbnMoKTogUGRtTmF0aXZlU2VsZWN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IFN0cmluZyh2YWx1ZSksXG4gICAgICB2YWx1ZTogU3RyaW5nKHZhbHVlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCByb3dzUGVyUGFnZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnJvd3NQZXJQYWdlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8bnVtYmVyIHwgJ2VsbGlwc2lzJz4ge1xuICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgoMSwgdGhpcy5wYWdlQ291bnQpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihNYXRoLm1heCgxLCB0aGlzLnBhZ2UpLCB0b3RhbCk7XG4gICAgY29uc3QgbWF4TnVtZXJpY1BhZ2VzID0gTWF0aC5tYXgoMywgTWF0aC5mbG9vcih0aGlzLm1heFZpc2libGUpKTtcblxuICAgIGlmICh0b3RhbCA8PSBtYXhOdW1lcmljUGFnZXMpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pZGRsZVNsb3RzID0gbWF4TnVtZXJpY1BhZ2VzIC0gMjtcbiAgICBsZXQgc3RhcnQgPSBjdXJyZW50IC0gTWF0aC5mbG9vcigobWlkZGxlU2xvdHMgLSAxKSAvIDIpO1xuICAgIGxldCBlbmQgPSBzdGFydCArIG1pZGRsZVNsb3RzIC0gMTtcblxuICAgIGlmIChzdGFydCA8IDIpIHtcbiAgICAgIHN0YXJ0ID0gMjtcbiAgICAgIGVuZCA9IHN0YXJ0ICsgbWlkZGxlU2xvdHMgLSAxO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0b3RhbCAtIDEpIHtcbiAgICAgIGVuZCA9IHRvdGFsIC0gMTtcbiAgICAgIHN0YXJ0ID0gZW5kIC0gbWlkZGxlU2xvdHMgKyAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gWzFdO1xuICAgIGZvciAobGV0IHBhZ2VOdW1iZXIgPSBzdGFydDsgcGFnZU51bWJlciA8PSBlbmQ7IHBhZ2VOdW1iZXIgKz0gMSkge1xuICAgICAgcGFnZXMucHVzaChwYWdlTnVtYmVyKTtcbiAgICB9XG4gICAgcGFnZXMucHVzaCh0b3RhbCk7XG5cbiAgICByZXR1cm4gcGFnZXMucmVkdWNlPEFycmF5PG51bWJlciB8ICdlbGxpcHNpcyc+PigocmVzdWx0LCBwYWdlTnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgcHJldmlvdXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChwYWdlTnVtYmVyIC0gcHJldmlvdXMgPT09IDIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChwcmV2aW91cyArIDEpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSBwcmV2aW91cyA+IDIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnZWxsaXBzaXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaChwYWdlTnVtYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gc206dy1bMTIwcHhdXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJvd3NQZXJQYWdlQ2hhbmdlVmFsdWUoJGV2ZW50KVwiXG4gICAgPjwvcGRtLXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPHVsIGNsYXNzPVwibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMSBwLTBcIj5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPj0gcGFnZUNvdW50XCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSArIDEpXCJcbiAgICAgID5cbiAgICAgICAgTmV4dFxuICAgICAgICA8cGRtLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uYXY+XG4iXX0=
@@ -30,10 +30,40 @@ class PdmPaginationComponent {
30
30
  }
31
31
  get visiblePages() {
32
32
  const total = Math.max(1, this.pageCount);
33
- if (total <= Math.max(1, this.maxVisible)) {
33
+ const current = Math.min(Math.max(1, this.page), total);
34
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
35
+ if (total <= maxNumericPages) {
34
36
  return Array.from({ length: total }, (_, i) => i + 1);
35
37
  }
36
- return [1, 2, 'ellipsis', total];
38
+ const middleSlots = maxNumericPages - 2;
39
+ let start = current - Math.floor((middleSlots - 1) / 2);
40
+ let end = start + middleSlots - 1;
41
+ if (start < 2) {
42
+ start = 2;
43
+ end = start + middleSlots - 1;
44
+ }
45
+ if (end > total - 1) {
46
+ end = total - 1;
47
+ start = end - middleSlots + 1;
48
+ }
49
+ const pages = [1];
50
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
51
+ pages.push(pageNumber);
52
+ }
53
+ pages.push(total);
54
+ return pages.reduce((result, pageNumber) => {
55
+ const previous = result[result.length - 1];
56
+ if (typeof previous === 'number') {
57
+ if (pageNumber - previous === 2) {
58
+ result.push(previous + 1);
59
+ }
60
+ else if (pageNumber - previous > 2) {
61
+ result.push('ellipsis');
62
+ }
63
+ }
64
+ result.push(pageNumber);
65
+ return result;
66
+ }, []);
37
67
  }
38
68
  setPage(next) {
39
69
  if (next < 1 || next > this.pageCount || next === this.page) {
@@ -1 +1 @@
1
- {"version":3,"file":"pdm-ui-kit-src-pagination.mjs","sources":["../../../src/pagination/pagination.component.ts","../../../src/pagination/pagination.component.html","../../../src/pagination/pagination.module.ts","../../../src/pagination/pdm-ui-kit-src-pagination.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { PdmNativeSelectOption } from 'pdm-ui-kit/src/native-select';\n\n@Component({\n selector: 'pdm-pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmPaginationComponent {\n @Input() page = 1;\n @Input() pageCount = 1;\n @Input() maxVisible = 4;\n @Input() className = '';\n @Input() rowsPerPageLabel = 'Rows per page';\n @Input() rowsPerPage = 10;\n @Input() rowsPerPageOptions: number[] = [10, 20, 30, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() rowsPerPageChange = new EventEmitter<number>();\n\n get rowsPerPageSelectOptions(): PdmNativeSelectOption[] {\n return this.rowsPerPageOptions.map((value) => ({\n label: String(value),\n value: String(value)\n }));\n }\n\n get rowsPerPageValue(): string {\n return String(this.rowsPerPage);\n }\n\n get visiblePages(): Array<number | 'ellipsis'> {\n const total = Math.max(1, this.pageCount);\n if (total <= Math.max(1, this.maxVisible)) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n return [1, 2, 'ellipsis', total];\n }\n\n setPage(next: number): void {\n if (next < 1 || next > this.pageCount || next === this.page) {\n return;\n }\n\n this.pageChange.emit(next);\n }\n\n onRowsPerPageChangeValue(value: string): void {\n const next = Number(value);\n if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {\n return;\n }\n\n this.rowsPerPageChange.emit(next);\n }\n}\n","<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[100px] sm:w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none box-border border border-solid border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none box-border border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmSelectModule } from \"pdm-ui-kit/src/select\";\nimport { PdmPaginationComponent } from \"./pagination.component\";\n\nconst COMPONENTS = [PdmPaginationComponent];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule, PdmSelectModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmPaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdm-ui-kit-src-pagination.mjs","sources":["../../../src/pagination/pagination.component.ts","../../../src/pagination/pagination.component.html","../../../src/pagination/pagination.module.ts","../../../src/pagination/pdm-ui-kit-src-pagination.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { PdmNativeSelectOption } from 'pdm-ui-kit/src/native-select';\n\n@Component({\n selector: 'pdm-pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmPaginationComponent {\n @Input() page = 1;\n @Input() pageCount = 1;\n @Input() maxVisible = 4;\n @Input() className = '';\n @Input() rowsPerPageLabel = 'Rows per page';\n @Input() rowsPerPage = 10;\n @Input() rowsPerPageOptions: number[] = [10, 20, 30, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() rowsPerPageChange = new EventEmitter<number>();\n\n get rowsPerPageSelectOptions(): PdmNativeSelectOption[] {\n return this.rowsPerPageOptions.map((value) => ({\n label: String(value),\n value: String(value)\n }));\n }\n\n get rowsPerPageValue(): string {\n return String(this.rowsPerPage);\n }\n\n get visiblePages(): Array<number | 'ellipsis'> {\n const total = Math.max(1, this.pageCount);\n const current = Math.min(Math.max(1, this.page), total);\n const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));\n\n if (total <= maxNumericPages) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const middleSlots = maxNumericPages - 2;\n let start = current - Math.floor((middleSlots - 1) / 2);\n let end = start + middleSlots - 1;\n\n if (start < 2) {\n start = 2;\n end = start + middleSlots - 1;\n }\n\n if (end > total - 1) {\n end = total - 1;\n start = end - middleSlots + 1;\n }\n\n const pages = [1];\n for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {\n pages.push(pageNumber);\n }\n pages.push(total);\n\n return pages.reduce<Array<number | 'ellipsis'>>((result, pageNumber) => {\n const previous = result[result.length - 1];\n\n if (typeof previous === 'number') {\n if (pageNumber - previous === 2) {\n result.push(previous + 1);\n } else if (pageNumber - previous > 2) {\n result.push('ellipsis');\n }\n }\n\n result.push(pageNumber);\n return result;\n }, []);\n }\n\n setPage(next: number): void {\n if (next < 1 || next > this.pageCount || next === this.page) {\n return;\n }\n\n this.pageChange.emit(next);\n }\n\n onRowsPerPageChangeValue(value: string): void {\n const next = Number(value);\n if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {\n return;\n }\n\n this.rowsPerPageChange.emit(next);\n }\n}\n","<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[100px] sm:w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none box-border border border-solid border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none box-border border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmSelectModule } from \"pdm-ui-kit/src/select\";\nimport { PdmPaginationComponent } from \"./pagination.component\";\n\nconst COMPONENTS = [PdmPaginationComponent];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule, PdmSelectModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmPaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -5575,10 +5575,40 @@ class PdmPaginationComponent {
5575
5575
  }
5576
5576
  get visiblePages() {
5577
5577
  const total = Math.max(1, this.pageCount);
5578
- if (total <= Math.max(1, this.maxVisible)) {
5578
+ const current = Math.min(Math.max(1, this.page), total);
5579
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
5580
+ if (total <= maxNumericPages) {
5579
5581
  return Array.from({ length: total }, (_, i) => i + 1);
5580
5582
  }
5581
- return [1, 2, 'ellipsis', total];
5583
+ const middleSlots = maxNumericPages - 2;
5584
+ let start = current - Math.floor((middleSlots - 1) / 2);
5585
+ let end = start + middleSlots - 1;
5586
+ if (start < 2) {
5587
+ start = 2;
5588
+ end = start + middleSlots - 1;
5589
+ }
5590
+ if (end > total - 1) {
5591
+ end = total - 1;
5592
+ start = end - middleSlots + 1;
5593
+ }
5594
+ const pages = [1];
5595
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
5596
+ pages.push(pageNumber);
5597
+ }
5598
+ pages.push(total);
5599
+ return pages.reduce((result, pageNumber) => {
5600
+ const previous = result[result.length - 1];
5601
+ if (typeof previous === 'number') {
5602
+ if (pageNumber - previous === 2) {
5603
+ result.push(previous + 1);
5604
+ }
5605
+ else if (pageNumber - previous > 2) {
5606
+ result.push('ellipsis');
5607
+ }
5608
+ }
5609
+ result.push(pageNumber);
5610
+ return result;
5611
+ }, []);
5582
5612
  }
5583
5613
  setPage(next) {
5584
5614
  if (next < 1 || next > this.pageCount || next === this.page) {