ryzen-ui 0.2.15 → 0.2.17
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.
- package/fesm2022/ryzen-ui.mjs +235 -70
- package/fesm2022/ryzen-ui.mjs.map +1 -1
- package/index.d.ts +44 -2
- package/package.json +1 -1
package/fesm2022/ryzen-ui.mjs
CHANGED
|
@@ -139,18 +139,7 @@ class DatePickerComponent {
|
|
|
139
139
|
_monthName = computed(() => this._monthNames[this._viewDate().getMonth()], ...(ngDevMode ? [{ debugName: "_monthName" }] : []));
|
|
140
140
|
_year = computed(() => this._viewDate().getFullYear(), ...(ngDevMode ? [{ debugName: "_year" }] : []));
|
|
141
141
|
_decadeLabel = computed(() => `${this._decade()} - ${this._decade() + 9}`, ...(ngDevMode ? [{ debugName: "_decadeLabel" }] : []));
|
|
142
|
-
_appendToParent = computed(() => {
|
|
143
|
-
const a = this.appendTo();
|
|
144
|
-
if (a)
|
|
145
|
-
return a === 'body';
|
|
146
|
-
const cb = this.config().appendToBody;
|
|
147
|
-
if (cb !== undefined)
|
|
148
|
-
return cb;
|
|
149
|
-
const cp = this.config().appendToParent;
|
|
150
|
-
if (cp !== undefined)
|
|
151
|
-
return !cp;
|
|
152
|
-
return true;
|
|
153
|
-
}, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
142
|
+
_appendToParent = computed(() => true, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
154
143
|
_panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null, ...(ngDevMode ? [{ debugName: "_panelFixed" }] : []));
|
|
155
144
|
_showTodayBtn = computed(() => this.config().showTodayButton !== false, ...(ngDevMode ? [{ debugName: "_showTodayBtn" }] : []));
|
|
156
145
|
_showYearNav = computed(() => this.config().showYearNavigation !== false, ...(ngDevMode ? [{ debugName: "_showYearNav" }] : []));
|
|
@@ -439,18 +428,7 @@ class DropDownComponent {
|
|
|
439
428
|
_panelWidth = signal(0, ...(ngDevMode ? [{ debugName: "_panelWidth" }] : []));
|
|
440
429
|
_panelEl = null;
|
|
441
430
|
_searchQuery = signal('', ...(ngDevMode ? [{ debugName: "_searchQuery" }] : []));
|
|
442
|
-
_appendToParent = computed(() => {
|
|
443
|
-
const a = this.appendTo();
|
|
444
|
-
if (a)
|
|
445
|
-
return a === 'body';
|
|
446
|
-
const cb = this.config().appendToBody;
|
|
447
|
-
if (cb !== undefined)
|
|
448
|
-
return cb;
|
|
449
|
-
const cp = this.config().appendToParent;
|
|
450
|
-
if (cp !== undefined)
|
|
451
|
-
return !cp;
|
|
452
|
-
return true;
|
|
453
|
-
}, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
431
|
+
_appendToParent = computed(() => true, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
454
432
|
_panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null, ...(ngDevMode ? [{ debugName: "_panelFixed" }] : []));
|
|
455
433
|
_maxHeight = computed(() => this.config().maxHeight ?? '256px', ...(ngDevMode ? [{ debugName: "_maxHeight" }] : []));
|
|
456
434
|
_selectedLabel = computed(() => {
|
|
@@ -549,9 +527,20 @@ class DropDownComponent {
|
|
|
549
527
|
this.value.set(null);
|
|
550
528
|
}
|
|
551
529
|
_onWindowScroll() {
|
|
552
|
-
if (this._isOpen()
|
|
553
|
-
|
|
530
|
+
if (!this._isOpen() || !this._appendToParent())
|
|
531
|
+
return;
|
|
532
|
+
const rect = this._elementRef.nativeElement.getBoundingClientRect();
|
|
533
|
+
const dir = this._direction();
|
|
534
|
+
if (dir === 'up' || dir === 'down') {
|
|
535
|
+
this._panelDirection.set(dir);
|
|
554
536
|
}
|
|
537
|
+
else {
|
|
538
|
+
const panelH = Math.min(320, parseInt(this._maxHeight()));
|
|
539
|
+
this._panelDirection.set(window.innerHeight - rect.bottom >= panelH + 60 ? 'down' : 'up');
|
|
540
|
+
}
|
|
541
|
+
this._panelX.set(rect.left);
|
|
542
|
+
this._panelY.set(this._panelDirection() === 'down' ? rect.bottom : rect.top);
|
|
543
|
+
this._panelWidth.set(rect.width);
|
|
555
544
|
}
|
|
556
545
|
_onDocClick(event) {
|
|
557
546
|
if (!this._isOpen())
|
|
@@ -718,18 +707,7 @@ class MultiSelectComponent {
|
|
|
718
707
|
_panelWidth = signal(0, ...(ngDevMode ? [{ debugName: "_panelWidth" }] : []));
|
|
719
708
|
_panelEl = null;
|
|
720
709
|
_searchQuery = signal('', ...(ngDevMode ? [{ debugName: "_searchQuery" }] : []));
|
|
721
|
-
_appendToParent = computed(() => {
|
|
722
|
-
const a = this.appendTo();
|
|
723
|
-
if (a)
|
|
724
|
-
return a === 'body';
|
|
725
|
-
const cb = this.config().appendToBody;
|
|
726
|
-
if (cb !== undefined)
|
|
727
|
-
return cb;
|
|
728
|
-
const cp = this.config().appendToParent;
|
|
729
|
-
if (cp !== undefined)
|
|
730
|
-
return !cp;
|
|
731
|
-
return true;
|
|
732
|
-
}, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
710
|
+
_appendToParent = computed(() => true, ...(ngDevMode ? [{ debugName: "_appendToParent" }] : []));
|
|
733
711
|
_panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null, ...(ngDevMode ? [{ debugName: "_panelFixed" }] : []));
|
|
734
712
|
_maxHeight = computed(() => this.config().maxHeight ?? '256px', ...(ngDevMode ? [{ debugName: "_maxHeight" }] : []));
|
|
735
713
|
_selectedLabels = computed(() => {
|
|
@@ -869,9 +847,13 @@ class MultiSelectComponent {
|
|
|
869
847
|
this.value.set([]);
|
|
870
848
|
}
|
|
871
849
|
_onWindowScroll() {
|
|
872
|
-
if (this._isOpen()
|
|
873
|
-
|
|
874
|
-
|
|
850
|
+
if (!this._isOpen() || !this._appendToParent())
|
|
851
|
+
return;
|
|
852
|
+
const rect = this._elementRef.nativeElement.getBoundingClientRect();
|
|
853
|
+
this._panelDirection.set(window.innerHeight - rect.bottom >= 320 ? 'down' : 'up');
|
|
854
|
+
this._panelX.set(rect.left);
|
|
855
|
+
this._panelY.set(this._panelDirection() === 'down' ? rect.bottom : rect.top);
|
|
856
|
+
this._panelWidth.set(rect.width);
|
|
875
857
|
}
|
|
876
858
|
_onDocClick(event) {
|
|
877
859
|
if (!this._isOpen())
|
|
@@ -1553,12 +1535,34 @@ class TableComponent {
|
|
|
1553
1535
|
exportable = input(false, ...(ngDevMode ? [{ debugName: "exportable" }] : []));
|
|
1554
1536
|
columnToggle = input(false, ...(ngDevMode ? [{ debugName: "columnToggle" }] : []));
|
|
1555
1537
|
expandable = input(false, ...(ngDevMode ? [{ debugName: "expandable" }] : []));
|
|
1538
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
1539
|
+
showGridlines = input(false, ...(ngDevMode ? [{ debugName: "showGridlines" }] : []));
|
|
1540
|
+
sortMode = input('single', ...(ngDevMode ? [{ debugName: "sortMode" }] : []));
|
|
1541
|
+
alwaysShowPaginator = input(true, ...(ngDevMode ? [{ debugName: "alwaysShowPaginator" }] : []));
|
|
1542
|
+
showFirstLastIcon = input(true, ...(ngDevMode ? [{ debugName: "showFirstLastIcon" }] : []));
|
|
1543
|
+
currentPageReport = input('{currentPage} of {totalPages}', ...(ngDevMode ? [{ debugName: "currentPageReport" }] : []));
|
|
1544
|
+
showCurrentPageReport = input(false, ...(ngDevMode ? [{ debugName: "showCurrentPageReport" }] : []));
|
|
1545
|
+
resetPageOnSort = input(true, ...(ngDevMode ? [{ debugName: "resetPageOnSort" }] : []));
|
|
1546
|
+
metaKeySelection = input(false, ...(ngDevMode ? [{ debugName: "metaKeySelection" }] : []));
|
|
1547
|
+
customSort = input(null, ...(ngDevMode ? [{ debugName: "customSort" }] : []));
|
|
1548
|
+
globalFilterFields = input(null, ...(ngDevMode ? [{ debugName: "globalFilterFields" }] : []));
|
|
1549
|
+
lazy = input(false, ...(ngDevMode ? [{ debugName: "lazy" }] : []));
|
|
1550
|
+
totalRecords = input(0, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
|
|
1551
|
+
responsiveLayout = input('scroll', ...(ngDevMode ? [{ debugName: "responsiveLayout" }] : []));
|
|
1552
|
+
groupRowsBy = input('', ...(ngDevMode ? [{ debugName: "groupRowsBy" }] : []));
|
|
1553
|
+
rowGroupMode = input(null, ...(ngDevMode ? [{ debugName: "rowGroupMode" }] : []));
|
|
1556
1554
|
sortChange = output();
|
|
1557
1555
|
pageChange = output();
|
|
1558
1556
|
selectedRows = output();
|
|
1557
|
+
rowClick = output();
|
|
1558
|
+
rowDblClick = output();
|
|
1559
|
+
selectAllChange = output();
|
|
1560
|
+
filterChange = output();
|
|
1561
|
+
selection = model([], ...(ngDevMode ? [{ debugName: "selection" }] : []));
|
|
1559
1562
|
rowDetail;
|
|
1560
1563
|
_sortKey = signal('', ...(ngDevMode ? [{ debugName: "_sortKey" }] : []));
|
|
1561
1564
|
_sortDir = signal('', ...(ngDevMode ? [{ debugName: "_sortDir" }] : []));
|
|
1565
|
+
_multiSortMeta = signal([], ...(ngDevMode ? [{ debugName: "_multiSortMeta" }] : []));
|
|
1562
1566
|
_searchQuery = signal('', ...(ngDevMode ? [{ debugName: "_searchQuery" }] : []));
|
|
1563
1567
|
_filters = signal({}, ...(ngDevMode ? [{ debugName: "_filters" }] : []));
|
|
1564
1568
|
_page = signal(1, ...(ngDevMode ? [{ debugName: "_page" }] : []));
|
|
@@ -1571,6 +1575,19 @@ class TableComponent {
|
|
|
1571
1575
|
_columnToggleOpen = signal(false, ...(ngDevMode ? [{ debugName: "_columnToggleOpen" }] : []));
|
|
1572
1576
|
_exportOpen = signal(false, ...(ngDevMode ? [{ debugName: "_exportOpen" }] : []));
|
|
1573
1577
|
_resizing = null;
|
|
1578
|
+
_tableClass = computed(() => {
|
|
1579
|
+
const cls = ['rz-tbl'];
|
|
1580
|
+
if (this.size() === 'sm')
|
|
1581
|
+
cls.push('rz-tbl-sm');
|
|
1582
|
+
if (this.size() === 'lg')
|
|
1583
|
+
cls.push('rz-tbl-lg');
|
|
1584
|
+
if (this.showGridlines())
|
|
1585
|
+
cls.push('rz-tbl-gridlines');
|
|
1586
|
+
if (this.striped())
|
|
1587
|
+
cls.push('rz-tbl-striped');
|
|
1588
|
+
return cls.join(' ');
|
|
1589
|
+
}, ...(ngDevMode ? [{ debugName: "_tableClass" }] : []));
|
|
1590
|
+
_hidePaginator = computed(() => this.pageable() && !this.alwaysShowPaginator() && this._totalPages() <= 1, ...(ngDevMode ? [{ debugName: "_hidePaginator" }] : []));
|
|
1574
1591
|
constructor() {
|
|
1575
1592
|
effect(() => { this._pageSize.set(this.pageSize()); });
|
|
1576
1593
|
effect(() => {
|
|
@@ -1578,6 +1595,9 @@ class TableComponent {
|
|
|
1578
1595
|
this._filters();
|
|
1579
1596
|
this._page.set(1);
|
|
1580
1597
|
});
|
|
1598
|
+
effect(() => {
|
|
1599
|
+
this._hiddenColumns.set(new Set(this.columns().filter(c => c.hidden).map(c => c.key)));
|
|
1600
|
+
});
|
|
1581
1601
|
}
|
|
1582
1602
|
_displayColumns = computed(() => this.columns().filter(c => !this._hiddenColumns().has(c.key)), ...(ngDevMode ? [{ debugName: "_displayColumns" }] : []));
|
|
1583
1603
|
_colCount = computed(() => {
|
|
@@ -1590,32 +1610,103 @@ class TableComponent {
|
|
|
1590
1610
|
}, ...(ngDevMode ? [{ debugName: "_colCount" }] : []));
|
|
1591
1611
|
_filteredRows = computed(() => {
|
|
1592
1612
|
let data = this.rows();
|
|
1593
|
-
|
|
1594
|
-
const
|
|
1595
|
-
if (
|
|
1613
|
+
// Multi-sort
|
|
1614
|
+
const multiMeta = this._multiSortMeta();
|
|
1615
|
+
if (this.sortMode() === 'multiple' && multiMeta.length > 0) {
|
|
1596
1616
|
data = [...data].sort((a, b) => {
|
|
1597
|
-
const
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1617
|
+
for (const s of multiMeta) {
|
|
1618
|
+
if (!s.direction)
|
|
1619
|
+
continue;
|
|
1620
|
+
const aVal = a[s.key];
|
|
1621
|
+
const bVal = b[s.key];
|
|
1622
|
+
const dir = s.direction === 'asc' ? 1 : -1;
|
|
1623
|
+
if (aVal < bVal)
|
|
1624
|
+
return -1 * dir;
|
|
1625
|
+
if (aVal > bVal)
|
|
1626
|
+
return 1 * dir;
|
|
1627
|
+
}
|
|
1604
1628
|
return 0;
|
|
1605
1629
|
});
|
|
1606
1630
|
}
|
|
1631
|
+
else {
|
|
1632
|
+
// Single sort
|
|
1633
|
+
const key = this._sortKey();
|
|
1634
|
+
const dir = this._sortDir();
|
|
1635
|
+
if (key && dir) {
|
|
1636
|
+
const custom = this.customSort();
|
|
1637
|
+
if (custom) {
|
|
1638
|
+
data = [...data].sort((a, b) => custom(a, b, key, dir));
|
|
1639
|
+
}
|
|
1640
|
+
else {
|
|
1641
|
+
data = [...data].sort((a, b) => {
|
|
1642
|
+
const aVal = a[key];
|
|
1643
|
+
const bVal = b[key];
|
|
1644
|
+
const direction = dir === 'asc' ? 1 : -1;
|
|
1645
|
+
if (aVal < bVal)
|
|
1646
|
+
return -1 * direction;
|
|
1647
|
+
if (aVal > bVal)
|
|
1648
|
+
return 1 * direction;
|
|
1649
|
+
return 0;
|
|
1650
|
+
});
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
}
|
|
1654
|
+
// Global search
|
|
1607
1655
|
const query = this._searchQuery().toLowerCase().trim();
|
|
1608
1656
|
if (query) {
|
|
1609
|
-
|
|
1657
|
+
const fields = this.globalFilterFields();
|
|
1658
|
+
data = data.filter(row => {
|
|
1659
|
+
const values = fields
|
|
1660
|
+
? fields.map(f => String(row[f] ?? ''))
|
|
1661
|
+
: Object.values(row).map(v => String(v));
|
|
1662
|
+
return values.some(v => v.toLowerCase().includes(query));
|
|
1663
|
+
});
|
|
1610
1664
|
}
|
|
1665
|
+
// Column filters
|
|
1611
1666
|
const filters = this._filters();
|
|
1612
1667
|
for (const [fk, fv] of Object.entries(filters)) {
|
|
1613
1668
|
if (fv)
|
|
1614
1669
|
data = data.filter(row => String(row[fk]) === fv);
|
|
1615
1670
|
}
|
|
1671
|
+
// Row grouping
|
|
1672
|
+
const groupBy = this.groupRowsBy();
|
|
1673
|
+
const groupMode = this.rowGroupMode();
|
|
1674
|
+
if (groupBy && groupMode) {
|
|
1675
|
+
data = [...data].sort((a, b) => {
|
|
1676
|
+
const aVal = String(a[groupBy] ?? '');
|
|
1677
|
+
const bVal = String(b[groupBy] ?? '');
|
|
1678
|
+
if (aVal < bVal)
|
|
1679
|
+
return -1;
|
|
1680
|
+
if (aVal > bVal)
|
|
1681
|
+
return 1;
|
|
1682
|
+
return 0;
|
|
1683
|
+
});
|
|
1684
|
+
}
|
|
1616
1685
|
return data;
|
|
1617
1686
|
}, ...(ngDevMode ? [{ debugName: "_filteredRows" }] : []));
|
|
1687
|
+
_groupedRows = computed(() => {
|
|
1688
|
+
const groupBy = this.groupRowsBy();
|
|
1689
|
+
const groupMode = this.rowGroupMode();
|
|
1690
|
+
if (!groupBy || !groupMode)
|
|
1691
|
+
return null;
|
|
1692
|
+
const groups = [];
|
|
1693
|
+
const seen = new Set();
|
|
1694
|
+
for (const row of this._filteredRows()) {
|
|
1695
|
+
const val = String(row[groupBy] ?? '');
|
|
1696
|
+
if (!seen.has(val)) {
|
|
1697
|
+
seen.add(val);
|
|
1698
|
+
groups.push({ key: val, rows: [row] });
|
|
1699
|
+
}
|
|
1700
|
+
else {
|
|
1701
|
+
groups[groups.length - 1].rows.push(row);
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
return groups;
|
|
1705
|
+
}, ...(ngDevMode ? [{ debugName: "_groupedRows" }] : []));
|
|
1618
1706
|
_displayRows = computed(() => {
|
|
1707
|
+
if (this.lazy()) {
|
|
1708
|
+
return this.rows();
|
|
1709
|
+
}
|
|
1619
1710
|
if (!this.pageable())
|
|
1620
1711
|
return this._filteredRows();
|
|
1621
1712
|
const total = this._filteredRows().length;
|
|
@@ -1627,9 +1718,13 @@ class TableComponent {
|
|
|
1627
1718
|
const start = (page - 1) * size;
|
|
1628
1719
|
return this._filteredRows().slice(start, start + size);
|
|
1629
1720
|
}, ...(ngDevMode ? [{ debugName: "_displayRows" }] : []));
|
|
1630
|
-
_totalPages = computed(() =>
|
|
1721
|
+
_totalPages = computed(() => {
|
|
1722
|
+
if (this.lazy())
|
|
1723
|
+
return Math.max(1, Math.ceil(this.totalRecords() / this._pageSize()));
|
|
1724
|
+
return this.pageable() ? Math.max(1, Math.ceil(this._filteredRows().length / this._pageSize())) : 1;
|
|
1725
|
+
}, ...(ngDevMode ? [{ debugName: "_totalPages" }] : []));
|
|
1631
1726
|
_pageInfo = computed(() => {
|
|
1632
|
-
const total = this._filteredRows().length;
|
|
1727
|
+
const total = this.lazy() ? this.totalRecords() : this._filteredRows().length;
|
|
1633
1728
|
const page = this._page();
|
|
1634
1729
|
const size = this._pageSize();
|
|
1635
1730
|
const from = total > 0 ? (page - 1) * size + 1 : 0;
|
|
@@ -1673,27 +1768,92 @@ class TableComponent {
|
|
|
1673
1768
|
_filterCols = computed(() => this._displayColumns().filter(c => c.filterable && c.filterOptions), ...(ngDevMode ? [{ debugName: "_filterCols" }] : []));
|
|
1674
1769
|
_footerCols = computed(() => this._displayColumns().filter(c => c.footer), ...(ngDevMode ? [{ debugName: "_footerCols" }] : []));
|
|
1675
1770
|
_footerText = computed(() => this._footerCols().map(c => c.footer(this._filteredRows())).join(' · '), ...(ngDevMode ? [{ debugName: "_footerText" }] : []));
|
|
1771
|
+
_currentPageReportText = computed(() => {
|
|
1772
|
+
const info = this._pageInfo();
|
|
1773
|
+
return this.currentPageReport()
|
|
1774
|
+
.replace('{currentPage}', String(this._page()))
|
|
1775
|
+
.replace('{totalPages}', String(this._totalPages()))
|
|
1776
|
+
.replace('{rows}', String(this._pageSize()))
|
|
1777
|
+
.replace('{first}', String(info.from))
|
|
1778
|
+
.replace('{last}', String(info.to))
|
|
1779
|
+
.replace('{totalRecords}', String(info.total));
|
|
1780
|
+
}, ...(ngDevMode ? [{ debugName: "_currentPageReportText" }] : []));
|
|
1676
1781
|
_sortIcon(key) {
|
|
1782
|
+
if (this.sortMode() === 'multiple') {
|
|
1783
|
+
const meta = this._multiSortMeta().find(m => m.key === key);
|
|
1784
|
+
if (!meta || !meta.direction)
|
|
1785
|
+
return 'pi pi-sort-alt';
|
|
1786
|
+
return meta.direction === 'asc' ? 'pi pi-sort-up' : 'pi pi-sort-down';
|
|
1787
|
+
}
|
|
1677
1788
|
if (this._sortKey() !== key || !this._sortDir())
|
|
1678
1789
|
return 'pi pi-sort-alt';
|
|
1679
1790
|
return this._sortDir() === 'asc' ? 'pi pi-sort-up' : 'pi pi-sort-down';
|
|
1680
1791
|
}
|
|
1681
1792
|
_toggleSort(key) {
|
|
1682
|
-
if (this.
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1793
|
+
if (this.sortMode() === 'multiple') {
|
|
1794
|
+
this._multiSortMeta.update(meta => {
|
|
1795
|
+
const idx = meta.findIndex(m => m.key === key);
|
|
1796
|
+
if (idx === -1)
|
|
1797
|
+
return [...meta, { key, direction: 'asc' }];
|
|
1798
|
+
const current = meta[idx];
|
|
1799
|
+
if (current.direction === 'asc') {
|
|
1800
|
+
const next = [...meta];
|
|
1801
|
+
next[idx] = { ...next[idx], direction: 'desc' };
|
|
1802
|
+
return next;
|
|
1803
|
+
}
|
|
1804
|
+
return meta.filter(m => m.key !== key);
|
|
1805
|
+
});
|
|
1806
|
+
}
|
|
1807
|
+
else {
|
|
1808
|
+
if (this._sortKey() === key) {
|
|
1809
|
+
if (this._sortDir() === 'asc')
|
|
1810
|
+
this._sortDir.set('desc');
|
|
1811
|
+
else if (this._sortDir() === 'desc') {
|
|
1812
|
+
this._sortDir.set('');
|
|
1813
|
+
this._sortKey.set('');
|
|
1814
|
+
}
|
|
1815
|
+
else
|
|
1816
|
+
this._sortDir.set('asc');
|
|
1688
1817
|
}
|
|
1689
|
-
else
|
|
1818
|
+
else {
|
|
1819
|
+
this._sortKey.set(key);
|
|
1690
1820
|
this._sortDir.set('asc');
|
|
1821
|
+
}
|
|
1691
1822
|
}
|
|
1692
|
-
|
|
1693
|
-
this.
|
|
1694
|
-
|
|
1823
|
+
if (this.resetPageOnSort())
|
|
1824
|
+
this._page.set(1);
|
|
1825
|
+
const multiMeta = this._multiSortMeta();
|
|
1826
|
+
this.sortChange.emit({
|
|
1827
|
+
key: this._sortKey() || key,
|
|
1828
|
+
direction: this._sortDir() || 'asc',
|
|
1829
|
+
multiSortMeta: this.sortMode() === 'multiple' ? multiMeta : undefined,
|
|
1830
|
+
});
|
|
1831
|
+
}
|
|
1832
|
+
_onRowClick(row, index, event) {
|
|
1833
|
+
if (this.selectable()) {
|
|
1834
|
+
if (this.metaKeySelection()) {
|
|
1835
|
+
const key = this.selectionKey();
|
|
1836
|
+
const val = key ? row[key] : null;
|
|
1837
|
+
if (val == null)
|
|
1838
|
+
return;
|
|
1839
|
+
this._selectedKeys.update(s => {
|
|
1840
|
+
const next = new Set(s);
|
|
1841
|
+
if (next.has(val))
|
|
1842
|
+
next.delete(val);
|
|
1843
|
+
else
|
|
1844
|
+
next.add(val);
|
|
1845
|
+
return next;
|
|
1846
|
+
});
|
|
1847
|
+
this._emitSelection();
|
|
1848
|
+
}
|
|
1849
|
+
else {
|
|
1850
|
+
this._toggleSelect(row);
|
|
1851
|
+
}
|
|
1695
1852
|
}
|
|
1696
|
-
this.
|
|
1853
|
+
this.rowClick.emit({ row, index, event });
|
|
1854
|
+
}
|
|
1855
|
+
_onRowDblClick(row, index, event) {
|
|
1856
|
+
this.rowDblClick.emit({ row, index, event });
|
|
1697
1857
|
}
|
|
1698
1858
|
_onSearch(value) { this._searchQuery.set(value ?? ''); }
|
|
1699
1859
|
_setFilter(key, value) {
|
|
@@ -1704,6 +1864,7 @@ class TableComponent {
|
|
|
1704
1864
|
}
|
|
1705
1865
|
return { ...f, [key]: value };
|
|
1706
1866
|
});
|
|
1867
|
+
this.filterChange.emit(this._filters());
|
|
1707
1868
|
}
|
|
1708
1869
|
_colWidth(col) { return this._columnWidths()[col.key] || col.width || 'auto'; }
|
|
1709
1870
|
_onResizeStart(event, key) {
|
|
@@ -1778,6 +1939,7 @@ class TableComponent {
|
|
|
1778
1939
|
return;
|
|
1779
1940
|
if (this._isAllSelected()) {
|
|
1780
1941
|
this._selectedKeys.set(new Set());
|
|
1942
|
+
this.selectAllChange.emit(false);
|
|
1781
1943
|
}
|
|
1782
1944
|
else {
|
|
1783
1945
|
const keys = new Set();
|
|
@@ -1787,17 +1949,20 @@ class TableComponent {
|
|
|
1787
1949
|
keys.add(val);
|
|
1788
1950
|
}
|
|
1789
1951
|
this._selectedKeys.set(keys);
|
|
1952
|
+
this.selectAllChange.emit(true);
|
|
1790
1953
|
}
|
|
1791
1954
|
this._emitSelection();
|
|
1792
1955
|
}
|
|
1793
1956
|
_emitSelection() {
|
|
1794
|
-
const
|
|
1957
|
+
const sel = this._selectedKeys();
|
|
1795
1958
|
const key = this.selectionKey();
|
|
1796
1959
|
if (!key) {
|
|
1797
1960
|
this.selectedRows.emit([]);
|
|
1798
1961
|
return;
|
|
1799
1962
|
}
|
|
1800
|
-
this.
|
|
1963
|
+
const selected = this.rows().filter(row => { const val = row[key]; return val != null && sel.has(val); });
|
|
1964
|
+
this.selectedRows.emit(selected);
|
|
1965
|
+
this.selection.set(selected);
|
|
1801
1966
|
}
|
|
1802
1967
|
_isColumnVisible(k) { return !this._hiddenColumns().has(k); }
|
|
1803
1968
|
_toggleColumn(k) { this._hiddenColumns.update(h => { const n = new Set(h); if (n.has(k))
|
|
@@ -1888,7 +2053,7 @@ class TableComponent {
|
|
|
1888
2053
|
}
|
|
1889
2054
|
_trackByIndex(index) { return index; }
|
|
1890
2055
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1891
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: TableComponent, isStandalone: true, selector: "app-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, skeletonRows: { classPropertyName: "skeletonRows", publicName: "skeletonRows", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, pageable: { classPropertyName: "pageable", publicName: "pageable", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selectionKey: { classPropertyName: "selectionKey", publicName: "selectionKey", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, columnToggle: { classPropertyName: "columnToggle", publicName: "columnToggle", isSignal: true, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", pageChange: "pageChange", selectedRows: "selectedRows" }, host: { listeners: { "document:mousemove": "_onDocMouseMove($event)", "document:mouseup": "_onDocMouseUp()", "document:click": "_onDocClick($event)" } }, queries: [{ propertyName: "rowDetail", first: true, predicate: ["rowDetail"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (loading()) {\n <app-table-skeleton [rows]=\"skeletonRows()\" [columns]=\"_skeletonCols()\" />\n} @else {\n <div class=\"rz-tbl-wrapper\"\n [style.width]=\"width() || '100%'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n <table class=\"rz-tbl\" style=\"table-layout:fixed\">\n <thead\n [style.position]=\"stickyHeader() ? 'sticky' : undefined\"\n [style.top]=\"stickyHeader() ? '0' : undefined\"\n [style.z-index]=\"stickyHeader() ? '2' : undefined\"\n >\n <tr>\n @if (selectable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n >\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isAllSelected()\"\n (change)=\"_toggleSelectAll()\"\n />\n </th>\n }\n @if (expandable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n ></th>\n }\n @for (col of _displayColumns(); track col.key) {\n <th\n class=\"rz-tbl-header\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width]=\"_colWidth(col)\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n [class.rz-tbl-sortable]=\"col.sortable && sortable()\"\n (click)=\"sortable() && col.sortable && _toggleSort(col.key)\"\n >\n {{ col.header }}\n @if (col.sortable && sortable()) {\n <i class=\"pi rz-tbl-sort-icon\" [class]=\"_sortIcon(col.key)\"></i>\n }\n @if (resizable()) {\n <div class=\"rz-tbl-resize-handle\"\n (mousedown)=\"_onResizeStart($event,col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n @if (searchable() || _filterCols().length || exportable()) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n [style.border-bottom]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.padding]=\"'8px 12px'\"\n [style.vertical-align]=\"'middle'\"\n >\n <div class=\"rz-tbl-toolbar\">\n @if (searchable()) {\n <app-search-input\n (valueChange)=\"_onSearch($event)\"\n placeholder=\"Search table...\"\n size=\"sm\"\n style=\"padding-bottom:0\"\n />\n }\n @for (col of _filterCols(); track col.key) {\n <app-drop-down\n [options]=\"col.filterOptions ?? []\"\n [placeholder]=\"'Filter ' + col.header\"\n size=\"sm\"\n [searchable]=\"true\"\n [config]=\"{ appendToParent: true }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_setFilter(col.key, $event)\"\n />\n }\n @if (columnToggle()) {\n <div data-col-toggle class=\"rz-tbl-col-toggle\">\n <button\n type=\"button\"\n (click)=\"_columnToggleOpen.set(!_columnToggleOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-list rz-tbl-icon\"></i> Columns</button>\n @if (_columnToggleOpen()) {\n <div class=\"rz-tbl-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (col of columns(); track col.key) {\n <label class=\"rz-tbl-dropdown-label\">\n <input type=\"checkbox\"\n [checked]=\"_isColumnVisible(col.key)\"\n (change)=\"_toggleColumn(col.key)\"\n />\n {{ col.header }}\n </label>\n }\n </div>\n }\n </div>\n }\n @if (exportable()) {\n <div data-export-toggle class=\"rz-tbl-export-wrap\">\n <button\n type=\"button\"\n (click)=\"_exportOpen.set(!_exportOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-download rz-tbl-icon\"></i> Export</button>\n @if (_exportOpen()) {\n <div class=\"rz-tbl-export-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (fmt of ['Excel', 'PDF']; track fmt) {\n <button\n type=\"button\"\n (click)=\"fmt === 'Excel' ? _exportExcel() : _exportPdf(); _exportOpen.set(false)\"\n class=\"rz-tbl-export-opt\"\n >{{ fmt }}</button>\n }\n </div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </thead>\n <tbody>\n @if (_displayRows().length === 0) {\n <tr>\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-empty\">{{ emptyMessage() }}</td>\n </tr>\n } @else {\n @for (row of _displayRows(); track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row)\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex)\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n @if (_footerCols().length) {\n <tr class=\"rz-tbl-footer-row\"\n [style.border-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n >\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-cell\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >{{ _footerText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n @if (pageable() && _totalPages() > 1) {\n <div class=\"rz-tbl-paginator\">\n <div class=\"rz-tbl-page-info\">\n <span>{{ _pageInfo().from }}\u2013{{ _pageInfo().to }} of {{ _pageInfo().total }}</span>\n <app-drop-down\n [options]=\"_pageSizeOptions()\"\n [value]=\"'' + _pageSize()\"\n size=\"sm\"\n [config]=\"{ direction: 'up' }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_onPageSizeChange($event)\"\n />\n </div>\n <div class=\"rz-tbl-page-btns\">\n <button type=\"button\" (click)=\"_goToPage(1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-left rz-tbl-page-icon\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_page() - 1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-left rz-tbl-page-icon\"></i></button>\n @for (p of _visiblePages(); track p) {\n <button type=\"button\" (click)=\"_goToPage(p)\"\n class=\"rz-tbl-page-btn\"\n [style.background-color]=\"p === _page() ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"p === _page() ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >{{ p }}</button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() + 1)\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-right rz-tbl-page-icon\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_totalPages())\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-right rz-tbl-page-icon\"></i></button>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{display:contents}.rz-tbl-wrapper{overflow-x:auto;position:relative;border-radius:var(--radius-md, .5rem)}.rz-tbl{width:100%;border-collapse:collapse}.rz-tbl-header{position:relative;padding:.625rem .75rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.rz-tbl-header-checkbox{padding:.625rem .75rem;font-size:.75rem;white-space:nowrap;text-align:center;width:40px}.rz-tbl-sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.rz-tbl-checkbox{cursor:pointer}.rz-tbl-sort-icon{margin-left:.375rem;font-size:.625rem;vertical-align:middle}.rz-tbl-resize-handle{position:absolute;inset-inline-end:2px;top:0;bottom:0;width:6px;cursor:col-resize;z-index:10;border-inline-end:2px solid var(--color-accent, oklch(.64 .2 50));opacity:.5;transition:opacity .15s}.rz-tbl-header:hover .rz-tbl-resize-handle{opacity:1}.rz-tbl-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.375rem}.rz-tbl-toolbar-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:1px solid var(--color-border-light, oklch(.91 .01 260));cursor:pointer;color:var(--color-text, oklch(.14 .01 260));background:transparent;transition:opacity .2s}.rz-tbl-toolbar-btn:hover{opacity:.8}.rz-tbl-icon{font-size:.625rem}.rz-tbl-col-toggle{position:relative;margin-left:auto}.rz-tbl-export-wrap{position:relative}.rz-tbl-dropdown{position:absolute;top:100%;right:0;margin-top:.25rem;min-width:140px;padding:.375rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-dropdown-label{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;white-space:nowrap;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-dropdown-label:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-export-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;min-width:100px;padding:.25rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-export-opt{display:block;width:100%;text-align:left;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;border:none;background:transparent;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-export-opt:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-empty{padding:2rem .75rem;text-align:center;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-row{border-bottom:1px solid var(--color-border-light, oklch(.91 .01 260));transition:background-color .15s}.rz-tbl-row-hoverable:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-cell{padding:.625rem .75rem;font-size:.875rem;color:var(--color-text, oklch(.14 .01 260));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rz-tbl-cell-center{padding:.625rem .75rem;text-align:center}.rz-tbl-actions{display:flex;align-items:center;gap:.25rem}.rz-tbl-action-btn{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:none;cursor:pointer;background:transparent;transition:opacity .15s}.rz-tbl-action-btn:disabled{cursor:not-allowed}.rz-tbl-expand-btn{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm, .25rem);color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s}.rz-tbl-expand-btn:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-detail{padding:.75rem;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-footer-row{border-top:2px solid var(--color-primary, oklch(.32 .09 258));font-weight:500}.rz-tbl-paginator{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-page-info{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-page-btns{display:flex;align-items:center;gap:.125rem}.rz-tbl-page-btn{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);border:none;cursor:pointer;background:transparent;color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s,color .15s;font-weight:500}.rz-tbl-page-btn:disabled{opacity:.3;cursor:not-allowed}.rz-tbl-page-icon{font-size:.625rem}\n"], dependencies: [{ kind: "component", type: SearchInputComponent, selector: "app-search-input", inputs: ["value", "placeholder", "size", "disabled", "accentColor", "hint", "errorMessage", "error", "width"], outputs: ["valueChange"] }, { kind: "component", type: DropDownComponent, selector: "app-drop-down", inputs: ["value", "options", "placeholder", "size", "disabled", "accentColor", "searchable", "hint", "errorMessage", "error", "width", "config", "appendTo"], outputs: ["valueChange"] }, { kind: "component", type: TableSkeletonComponent, selector: "app-table-skeleton", inputs: ["rows", "columns"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TooltipComponent, selector: "app-tooltip", inputs: ["text", "position", "disabled", "alwaysShow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2056
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: TableComponent, isStandalone: true, selector: "app-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, skeletonRows: { classPropertyName: "skeletonRows", publicName: "skeletonRows", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, pageable: { classPropertyName: "pageable", publicName: "pageable", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selectionKey: { classPropertyName: "selectionKey", publicName: "selectionKey", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, columnToggle: { classPropertyName: "columnToggle", publicName: "columnToggle", isSignal: true, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showGridlines: { classPropertyName: "showGridlines", publicName: "showGridlines", isSignal: true, isRequired: false, transformFunction: null }, sortMode: { classPropertyName: "sortMode", publicName: "sortMode", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowPaginator: { classPropertyName: "alwaysShowPaginator", publicName: "alwaysShowPaginator", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: true, isRequired: false, transformFunction: null }, currentPageReport: { classPropertyName: "currentPageReport", publicName: "currentPageReport", isSignal: true, isRequired: false, transformFunction: null }, showCurrentPageReport: { classPropertyName: "showCurrentPageReport", publicName: "showCurrentPageReport", isSignal: true, isRequired: false, transformFunction: null }, resetPageOnSort: { classPropertyName: "resetPageOnSort", publicName: "resetPageOnSort", isSignal: true, isRequired: false, transformFunction: null }, metaKeySelection: { classPropertyName: "metaKeySelection", publicName: "metaKeySelection", isSignal: true, isRequired: false, transformFunction: null }, customSort: { classPropertyName: "customSort", publicName: "customSort", isSignal: true, isRequired: false, transformFunction: null }, globalFilterFields: { classPropertyName: "globalFilterFields", publicName: "globalFilterFields", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: true, isRequired: false, transformFunction: null }, groupRowsBy: { classPropertyName: "groupRowsBy", publicName: "groupRowsBy", isSignal: true, isRequired: false, transformFunction: null }, rowGroupMode: { classPropertyName: "rowGroupMode", publicName: "rowGroupMode", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChange: "sortChange", pageChange: "pageChange", selectedRows: "selectedRows", rowClick: "rowClick", rowDblClick: "rowDblClick", selectAllChange: "selectAllChange", filterChange: "filterChange", selection: "selectionChange" }, host: { listeners: { "document:mousemove": "_onDocMouseMove($event)", "document:mouseup": "_onDocMouseUp()", "document:click": "_onDocClick($event)" } }, queries: [{ propertyName: "rowDetail", first: true, predicate: ["rowDetail"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (loading()) {\n <app-table-skeleton [rows]=\"skeletonRows()\" [columns]=\"_skeletonCols()\" />\n} @else {\n <div class=\"rz-tbl-wrapper\"\n [style.width]=\"width() || '100%'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [class.rz-tbl-stack]=\"responsiveLayout() === 'stack'\"\n >\n <table [class]=\"_tableClass()\" style=\"table-layout:fixed\">\n <thead\n [style.position]=\"stickyHeader() ? 'sticky' : undefined\"\n [style.top]=\"stickyHeader() ? '0' : undefined\"\n [style.z-index]=\"stickyHeader() ? '2' : undefined\"\n >\n <tr>\n @if (selectable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n >\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isAllSelected()\"\n (change)=\"_toggleSelectAll()\"\n />\n </th>\n }\n @if (expandable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n ></th>\n }\n @for (col of _displayColumns(); track col.key) {\n <th\n class=\"rz-tbl-header\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width]=\"_colWidth(col)\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n [class.rz-tbl-sortable]=\"col.sortable && sortable()\"\n (click)=\"sortable() && col.sortable && _toggleSort(col.key)\"\n >\n {{ col.header }}\n @if (col.sortable && sortable()) {\n <i class=\"pi rz-tbl-sort-icon\" [class]=\"_sortIcon(col.key)\"></i>\n }\n @if (resizable()) {\n <div class=\"rz-tbl-resize-handle\"\n (mousedown)=\"_onResizeStart($event,col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n @if (searchable() || _filterCols().length || exportable() || columnToggle()) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n [style.border-bottom]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.padding]=\"'8px 12px'\"\n [style.vertical-align]=\"'middle'\"\n >\n <div class=\"rz-tbl-toolbar\">\n @if (searchable()) {\n <app-search-input\n (valueChange)=\"_onSearch($event)\"\n placeholder=\"Search table...\"\n size=\"sm\"\n style=\"padding-bottom:0\"\n />\n }\n @for (col of _filterCols(); track col.key) {\n <app-drop-down\n [options]=\"col.filterOptions ?? []\"\n [placeholder]=\"'Filter ' + col.header\"\n size=\"sm\"\n [searchable]=\"true\"\n [config]=\"{ appendToParent: true }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_setFilter(col.key, $event)\"\n />\n }\n @if (columnToggle()) {\n <div data-col-toggle class=\"rz-tbl-col-toggle\">\n <button\n type=\"button\"\n (click)=\"_columnToggleOpen.set(!_columnToggleOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-list rz-tbl-icon\"></i> Columns</button>\n @if (_columnToggleOpen()) {\n <div class=\"rz-tbl-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (col of columns(); track col.key) {\n <label class=\"rz-tbl-dropdown-label\">\n <input type=\"checkbox\"\n [checked]=\"_isColumnVisible(col.key)\"\n (change)=\"_toggleColumn(col.key)\"\n />\n {{ col.header }}\n </label>\n }\n </div>\n }\n </div>\n }\n @if (exportable()) {\n <div data-export-toggle class=\"rz-tbl-export-wrap\">\n <button\n type=\"button\"\n (click)=\"_exportOpen.set(!_exportOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-download rz-tbl-icon\"></i> Export</button>\n @if (_exportOpen()) {\n <div class=\"rz-tbl-export-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (fmt of ['Excel', 'PDF']; track fmt) {\n <button\n type=\"button\"\n (click)=\"fmt === 'Excel' ? _exportExcel() : _exportPdf(); _exportOpen.set(false)\"\n class=\"rz-tbl-export-opt\"\n >{{ fmt }}</button>\n }\n </div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </thead>\n <tbody>\n @if (_displayRows().length === 0) {\n <tr>\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-empty\">{{ emptyMessage() }}</td>\n </tr>\n } @else {\n @if (_groupedRows(); as groups) {\n @for (group of groups; track group.key) {\n @if (rowGroupMode() === 'subheader') {\n <tr class=\"rz-tbl-group-header\">\n <td [attr.colspan]=\"_colCount()\">{{ group.key }}</td>\n </tr>\n }\n @for (row of group.rows; track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [class.rz-tbl-row-selected]=\"selectable() && _isSelected(row)\"\n (click)=\"_onRowClick(row, rowIndex, $event)\"\n (dblclick)=\"_onRowDblClick(row, rowIndex, $event)\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row); $event.stopPropagation()\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex); $event.stopPropagation()\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n [attr.data-label]=\"responsiveLayout() === 'stack' ? col.header : null\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n }\n } @else {\n @for (row of _displayRows(); track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [class.rz-tbl-row-selected]=\"selectable() && _isSelected(row)\"\n (click)=\"_onRowClick(row, rowIndex, $event)\"\n (dblclick)=\"_onRowDblClick(row, rowIndex, $event)\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row); $event.stopPropagation()\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex); $event.stopPropagation()\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n [attr.data-label]=\"responsiveLayout() === 'stack' ? col.header : null\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n }\n @if (_footerCols().length) {\n <tr class=\"rz-tbl-footer-row\"\n [style.border-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n >\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-cell\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >{{ _footerText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n @if (pageable() && !_hidePaginator()) {\n <div class=\"rz-tbl-paginator\">\n <div class=\"rz-tbl-page-info\">\n @if (showCurrentPageReport()) {\n <span>{{ _currentPageReportText() }}</span>\n } @else {\n <span>{{ _pageInfo().from }}\u2013{{ _pageInfo().to }} of {{ _pageInfo().total }}</span>\n }\n <app-drop-down\n [options]=\"_pageSizeOptions()\"\n [value]=\"'' + _pageSize()\"\n size=\"sm\"\n [config]=\"{ direction: 'up' }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_onPageSizeChange($event)\"\n />\n </div>\n <div class=\"rz-tbl-page-btns\">\n @if (showFirstLastIcon()) {\n <button type=\"button\" (click)=\"_goToPage(1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-left rz-tbl-page-icon\"></i></button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() - 1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-left rz-tbl-page-icon\"></i></button>\n @for (p of _visiblePages(); track p) {\n <button type=\"button\" (click)=\"_goToPage(p)\"\n class=\"rz-tbl-page-btn\"\n [style.background-color]=\"p === _page() ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"p === _page() ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >{{ p }}</button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() + 1)\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-right rz-tbl-page-icon\"></i></button>\n @if (showFirstLastIcon()) {\n <button type=\"button\" (click)=\"_goToPage(_totalPages())\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-right rz-tbl-page-icon\"></i></button>\n }\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{display:contents}.rz-tbl-wrapper{overflow-x:auto;position:relative;border-radius:var(--radius-md, .5rem)}.rz-tbl{width:100%;border-collapse:collapse}.rz-tbl-sm .rz-tbl-header,.rz-tbl-sm .rz-tbl-cell,.rz-tbl-sm .rz-tbl-cell-center{padding:.375rem .5rem;font-size:.75rem}.rz-tbl-lg .rz-tbl-header,.rz-tbl-lg .rz-tbl-cell,.rz-tbl-lg .rz-tbl-cell-center{padding:.875rem 1rem;font-size:1rem}.rz-tbl-gridlines .rz-tbl-header,.rz-tbl-gridlines .rz-tbl-cell,.rz-tbl-gridlines .rz-tbl-cell-center{border:1px solid var(--color-border-light, oklch(.91 .01 260))}.rz-tbl-striped .rz-tbl-row:nth-child(2n) td{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-header{position:relative;padding:.625rem .75rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.rz-tbl-header-checkbox{padding:.625rem .75rem;font-size:.75rem;white-space:nowrap;text-align:center;width:40px}.rz-tbl-sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.rz-tbl-checkbox{cursor:pointer}.rz-tbl-sort-icon{margin-left:.375rem;font-size:.625rem;vertical-align:middle}.rz-tbl-resize-handle{position:absolute;inset-inline-end:2px;top:0;bottom:0;width:6px;cursor:col-resize;z-index:10;border-inline-end:2px solid var(--color-accent, oklch(.64 .2 50));opacity:.5;transition:opacity .15s}.rz-tbl-header:hover .rz-tbl-resize-handle{opacity:1}.rz-tbl-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.375rem}.rz-tbl-toolbar-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:1px solid var(--color-border-light, oklch(.91 .01 260));cursor:pointer;color:var(--color-text, oklch(.14 .01 260));background:transparent;transition:opacity .2s}.rz-tbl-toolbar-btn:hover{opacity:.8}.rz-tbl-icon{font-size:.625rem}.rz-tbl-col-toggle{position:relative;margin-left:auto}.rz-tbl-export-wrap{position:relative}.rz-tbl-dropdown{position:absolute;top:100%;right:0;margin-top:.25rem;min-width:140px;padding:.375rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-dropdown-label{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;white-space:nowrap;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-dropdown-label:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-export-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;min-width:100px;padding:.25rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-export-opt{display:block;width:100%;text-align:left;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;border:none;background:transparent;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-export-opt:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-empty{padding:2rem .75rem;text-align:center;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-row{border-bottom:1px solid var(--color-border-light, oklch(.91 .01 260));transition:background-color .15s}.rz-tbl-row-hoverable:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-row-selected{background-color:color-mix(in srgb,var(--color-primary, oklch(.32 .09 258)) 8%,transparent)!important}.rz-tbl-cell{padding:.625rem .75rem;font-size:.875rem;color:var(--color-text, oklch(.14 .01 260));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rz-tbl-cell-center{padding:.625rem .75rem;text-align:center}.rz-tbl-actions{display:flex;align-items:center;gap:.25rem}.rz-tbl-action-btn{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:none;cursor:pointer;background:transparent;transition:opacity .15s}.rz-tbl-action-btn:disabled{cursor:not-allowed}.rz-tbl-expand-btn{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm, .25rem);color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s}.rz-tbl-expand-btn:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-detail{padding:.75rem;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-footer-row{border-top:2px solid var(--color-primary, oklch(.32 .09 258));font-weight:500}.rz-tbl-paginator{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-page-info{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-page-btns{display:flex;align-items:center;gap:.125rem}.rz-tbl-page-btn{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);border:none;cursor:pointer;background:transparent;color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s,color .15s;font-weight:500}.rz-tbl-page-btn:disabled{opacity:.3;cursor:not-allowed}.rz-tbl-page-icon{font-size:.625rem}.rz-tbl-group-header td{padding:.5rem .75rem;font-size:.8rem;font-weight:700;background-color:var(--color-surface-alt, oklch(.975 .005 260));color:var(--color-text, oklch(.14 .01 260));text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--color-primary, oklch(.32 .09 258))}.rz-tbl-stack table,.rz-tbl-stack thead,.rz-tbl-stack tbody,.rz-tbl-stack th,.rz-tbl-stack td,.rz-tbl-stack tr{display:block}.rz-tbl-stack thead tr{position:absolute;top:-9999px;left:-9999px}.rz-tbl-stack tr{border:1px solid var(--color-border-light, oklch(.91 .01 260));margin-bottom:.5rem;border-radius:var(--radius-md, .5rem);overflow:hidden}.rz-tbl-stack td{border:none;position:relative;padding-left:50%!important;white-space:normal;text-overflow:clip}.rz-tbl-stack td:before{content:attr(data-label);position:absolute;left:.75rem;width:calc(50% - 1rem);font-weight:600;font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted, oklch(.48 .01 260));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: SearchInputComponent, selector: "app-search-input", inputs: ["value", "placeholder", "size", "disabled", "accentColor", "hint", "errorMessage", "error", "width"], outputs: ["valueChange"] }, { kind: "component", type: DropDownComponent, selector: "app-drop-down", inputs: ["value", "options", "placeholder", "size", "disabled", "accentColor", "searchable", "hint", "errorMessage", "error", "width", "config", "appendTo"], outputs: ["valueChange"] }, { kind: "component", type: TableSkeletonComponent, selector: "app-table-skeleton", inputs: ["rows", "columns"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TooltipComponent, selector: "app-tooltip", inputs: ["text", "position", "disabled", "alwaysShow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1892
2057
|
}
|
|
1893
2058
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TableComponent, decorators: [{
|
|
1894
2059
|
type: Component,
|
|
@@ -1896,8 +2061,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
|
|
|
1896
2061
|
'(document:mousemove)': '_onDocMouseMove($event)',
|
|
1897
2062
|
'(document:mouseup)': '_onDocMouseUp()',
|
|
1898
2063
|
'(document:click)': '_onDocClick($event)',
|
|
1899
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading()) {\n <app-table-skeleton [rows]=\"skeletonRows()\" [columns]=\"_skeletonCols()\" />\n} @else {\n <div class=\"rz-tbl-wrapper\"\n [style.width]=\"width() || '100%'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n <table class=\"rz-tbl\" style=\"table-layout:fixed\">\n <thead\n [style.position]=\"stickyHeader() ? 'sticky' : undefined\"\n [style.top]=\"stickyHeader() ? '0' : undefined\"\n [style.z-index]=\"stickyHeader() ? '2' : undefined\"\n >\n <tr>\n @if (selectable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n >\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isAllSelected()\"\n (change)=\"_toggleSelectAll()\"\n />\n </th>\n }\n @if (expandable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n ></th>\n }\n @for (col of _displayColumns(); track col.key) {\n <th\n class=\"rz-tbl-header\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width]=\"_colWidth(col)\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n [class.rz-tbl-sortable]=\"col.sortable && sortable()\"\n (click)=\"sortable() && col.sortable && _toggleSort(col.key)\"\n >\n {{ col.header }}\n @if (col.sortable && sortable()) {\n <i class=\"pi rz-tbl-sort-icon\" [class]=\"_sortIcon(col.key)\"></i>\n }\n @if (resizable()) {\n <div class=\"rz-tbl-resize-handle\"\n (mousedown)=\"_onResizeStart($event,col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n @if (searchable() || _filterCols().length || exportable()) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n [style.border-bottom]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.padding]=\"'8px 12px'\"\n [style.vertical-align]=\"'middle'\"\n >\n <div class=\"rz-tbl-toolbar\">\n @if (searchable()) {\n <app-search-input\n (valueChange)=\"_onSearch($event)\"\n placeholder=\"Search table...\"\n size=\"sm\"\n style=\"padding-bottom:0\"\n />\n }\n @for (col of _filterCols(); track col.key) {\n <app-drop-down\n [options]=\"col.filterOptions ?? []\"\n [placeholder]=\"'Filter ' + col.header\"\n size=\"sm\"\n [searchable]=\"true\"\n [config]=\"{ appendToParent: true }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_setFilter(col.key, $event)\"\n />\n }\n @if (columnToggle()) {\n <div data-col-toggle class=\"rz-tbl-col-toggle\">\n <button\n type=\"button\"\n (click)=\"_columnToggleOpen.set(!_columnToggleOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-list rz-tbl-icon\"></i> Columns</button>\n @if (_columnToggleOpen()) {\n <div class=\"rz-tbl-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (col of columns(); track col.key) {\n <label class=\"rz-tbl-dropdown-label\">\n <input type=\"checkbox\"\n [checked]=\"_isColumnVisible(col.key)\"\n (change)=\"_toggleColumn(col.key)\"\n />\n {{ col.header }}\n </label>\n }\n </div>\n }\n </div>\n }\n @if (exportable()) {\n <div data-export-toggle class=\"rz-tbl-export-wrap\">\n <button\n type=\"button\"\n (click)=\"_exportOpen.set(!_exportOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-download rz-tbl-icon\"></i> Export</button>\n @if (_exportOpen()) {\n <div class=\"rz-tbl-export-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (fmt of ['Excel', 'PDF']; track fmt) {\n <button\n type=\"button\"\n (click)=\"fmt === 'Excel' ? _exportExcel() : _exportPdf(); _exportOpen.set(false)\"\n class=\"rz-tbl-export-opt\"\n >{{ fmt }}</button>\n }\n </div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </thead>\n <tbody>\n @if (_displayRows().length === 0) {\n <tr>\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-empty\">{{ emptyMessage() }}</td>\n </tr>\n } @else {\n @for (row of _displayRows(); track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row)\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex)\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n @if (_footerCols().length) {\n <tr class=\"rz-tbl-footer-row\"\n [style.border-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n >\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-cell\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >{{ _footerText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n @if (pageable() && _totalPages() > 1) {\n <div class=\"rz-tbl-paginator\">\n <div class=\"rz-tbl-page-info\">\n <span>{{ _pageInfo().from }}\u2013{{ _pageInfo().to }} of {{ _pageInfo().total }}</span>\n <app-drop-down\n [options]=\"_pageSizeOptions()\"\n [value]=\"'' + _pageSize()\"\n size=\"sm\"\n [config]=\"{ direction: 'up' }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_onPageSizeChange($event)\"\n />\n </div>\n <div class=\"rz-tbl-page-btns\">\n <button type=\"button\" (click)=\"_goToPage(1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-left rz-tbl-page-icon\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_page() - 1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-left rz-tbl-page-icon\"></i></button>\n @for (p of _visiblePages(); track p) {\n <button type=\"button\" (click)=\"_goToPage(p)\"\n class=\"rz-tbl-page-btn\"\n [style.background-color]=\"p === _page() ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"p === _page() ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >{{ p }}</button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() + 1)\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-right rz-tbl-page-icon\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_totalPages())\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-right rz-tbl-page-icon\"></i></button>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{display:contents}.rz-tbl-wrapper{overflow-x:auto;position:relative;border-radius:var(--radius-md, .5rem)}.rz-tbl{width:100%;border-collapse:collapse}.rz-tbl-header{position:relative;padding:.625rem .75rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.rz-tbl-header-checkbox{padding:.625rem .75rem;font-size:.75rem;white-space:nowrap;text-align:center;width:40px}.rz-tbl-sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.rz-tbl-checkbox{cursor:pointer}.rz-tbl-sort-icon{margin-left:.375rem;font-size:.625rem;vertical-align:middle}.rz-tbl-resize-handle{position:absolute;inset-inline-end:2px;top:0;bottom:0;width:6px;cursor:col-resize;z-index:10;border-inline-end:2px solid var(--color-accent, oklch(.64 .2 50));opacity:.5;transition:opacity .15s}.rz-tbl-header:hover .rz-tbl-resize-handle{opacity:1}.rz-tbl-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.375rem}.rz-tbl-toolbar-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:1px solid var(--color-border-light, oklch(.91 .01 260));cursor:pointer;color:var(--color-text, oklch(.14 .01 260));background:transparent;transition:opacity .2s}.rz-tbl-toolbar-btn:hover{opacity:.8}.rz-tbl-icon{font-size:.625rem}.rz-tbl-col-toggle{position:relative;margin-left:auto}.rz-tbl-export-wrap{position:relative}.rz-tbl-dropdown{position:absolute;top:100%;right:0;margin-top:.25rem;min-width:140px;padding:.375rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-dropdown-label{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;white-space:nowrap;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-dropdown-label:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-export-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;min-width:100px;padding:.25rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-export-opt{display:block;width:100%;text-align:left;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;border:none;background:transparent;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-export-opt:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-empty{padding:2rem .75rem;text-align:center;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-row{border-bottom:1px solid var(--color-border-light, oklch(.91 .01 260));transition:background-color .15s}.rz-tbl-row-hoverable:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-cell{padding:.625rem .75rem;font-size:.875rem;color:var(--color-text, oklch(.14 .01 260));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rz-tbl-cell-center{padding:.625rem .75rem;text-align:center}.rz-tbl-actions{display:flex;align-items:center;gap:.25rem}.rz-tbl-action-btn{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:none;cursor:pointer;background:transparent;transition:opacity .15s}.rz-tbl-action-btn:disabled{cursor:not-allowed}.rz-tbl-expand-btn{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm, .25rem);color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s}.rz-tbl-expand-btn:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-detail{padding:.75rem;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-footer-row{border-top:2px solid var(--color-primary, oklch(.32 .09 258));font-weight:500}.rz-tbl-paginator{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-page-info{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-page-btns{display:flex;align-items:center;gap:.125rem}.rz-tbl-page-btn{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);border:none;cursor:pointer;background:transparent;color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s,color .15s;font-weight:500}.rz-tbl-page-btn:disabled{opacity:.3;cursor:not-allowed}.rz-tbl-page-icon{font-size:.625rem}\n"] }]
|
|
1900
|
-
}], ctorParameters: () => [], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], striped: [{ type: i0.Input, args: [{ isSignal: true, alias: "striped", required: false }] }], hoverable: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], filterable: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterable", required: false }] }], skeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonRows", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], pageable: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageable", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selectionKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionKey", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], exportable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportable", required: false }] }], columnToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnToggle", required: false }] }], expandable: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandable", required: false }] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }], selectedRows: [{ type: i0.Output, args: ["selectedRows"] }], rowDetail: [{
|
|
2064
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading()) {\n <app-table-skeleton [rows]=\"skeletonRows()\" [columns]=\"_skeletonCols()\" />\n} @else {\n <div class=\"rz-tbl-wrapper\"\n [style.width]=\"width() || '100%'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [class.rz-tbl-stack]=\"responsiveLayout() === 'stack'\"\n >\n <table [class]=\"_tableClass()\" style=\"table-layout:fixed\">\n <thead\n [style.position]=\"stickyHeader() ? 'sticky' : undefined\"\n [style.top]=\"stickyHeader() ? '0' : undefined\"\n [style.z-index]=\"stickyHeader() ? '2' : undefined\"\n >\n <tr>\n @if (selectable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n >\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isAllSelected()\"\n (change)=\"_toggleSelectAll()\"\n />\n </th>\n }\n @if (expandable()) {\n <th class=\"rz-tbl-header-checkbox\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n ></th>\n }\n @for (col of _displayColumns(); track col.key) {\n <th\n class=\"rz-tbl-header\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width]=\"_colWidth(col)\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n [class.rz-tbl-sortable]=\"col.sortable && sortable()\"\n (click)=\"sortable() && col.sortable && _toggleSort(col.key)\"\n >\n {{ col.header }}\n @if (col.sortable && sortable()) {\n <i class=\"pi rz-tbl-sort-icon\" [class]=\"_sortIcon(col.key)\"></i>\n }\n @if (resizable()) {\n <div class=\"rz-tbl-resize-handle\"\n (mousedown)=\"_onResizeStart($event,col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n @if (searchable() || _filterCols().length || exportable() || columnToggle()) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n [style.border-bottom]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.padding]=\"'8px 12px'\"\n [style.vertical-align]=\"'middle'\"\n >\n <div class=\"rz-tbl-toolbar\">\n @if (searchable()) {\n <app-search-input\n (valueChange)=\"_onSearch($event)\"\n placeholder=\"Search table...\"\n size=\"sm\"\n style=\"padding-bottom:0\"\n />\n }\n @for (col of _filterCols(); track col.key) {\n <app-drop-down\n [options]=\"col.filterOptions ?? []\"\n [placeholder]=\"'Filter ' + col.header\"\n size=\"sm\"\n [searchable]=\"true\"\n [config]=\"{ appendToParent: true }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_setFilter(col.key, $event)\"\n />\n }\n @if (columnToggle()) {\n <div data-col-toggle class=\"rz-tbl-col-toggle\">\n <button\n type=\"button\"\n (click)=\"_columnToggleOpen.set(!_columnToggleOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-list rz-tbl-icon\"></i> Columns</button>\n @if (_columnToggleOpen()) {\n <div class=\"rz-tbl-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (col of columns(); track col.key) {\n <label class=\"rz-tbl-dropdown-label\">\n <input type=\"checkbox\"\n [checked]=\"_isColumnVisible(col.key)\"\n (change)=\"_toggleColumn(col.key)\"\n />\n {{ col.header }}\n </label>\n }\n </div>\n }\n </div>\n }\n @if (exportable()) {\n <div data-export-toggle class=\"rz-tbl-export-wrap\">\n <button\n type=\"button\"\n (click)=\"_exportOpen.set(!_exportOpen())\"\n class=\"rz-tbl-toolbar-btn\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n ><i class=\"pi pi-download rz-tbl-icon\"></i> Export</button>\n @if (_exportOpen()) {\n <div class=\"rz-tbl-export-dropdown\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n @for (fmt of ['Excel', 'PDF']; track fmt) {\n <button\n type=\"button\"\n (click)=\"fmt === 'Excel' ? _exportExcel() : _exportPdf(); _exportOpen.set(false)\"\n class=\"rz-tbl-export-opt\"\n >{{ fmt }}</button>\n }\n </div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </thead>\n <tbody>\n @if (_displayRows().length === 0) {\n <tr>\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-empty\">{{ emptyMessage() }}</td>\n </tr>\n } @else {\n @if (_groupedRows(); as groups) {\n @for (group of groups; track group.key) {\n @if (rowGroupMode() === 'subheader') {\n <tr class=\"rz-tbl-group-header\">\n <td [attr.colspan]=\"_colCount()\">{{ group.key }}</td>\n </tr>\n }\n @for (row of group.rows; track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [class.rz-tbl-row-selected]=\"selectable() && _isSelected(row)\"\n (click)=\"_onRowClick(row, rowIndex, $event)\"\n (dblclick)=\"_onRowDblClick(row, rowIndex, $event)\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row); $event.stopPropagation()\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex); $event.stopPropagation()\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n [attr.data-label]=\"responsiveLayout() === 'stack' ? col.header : null\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n }\n } @else {\n @for (row of _displayRows(); track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"rz-tbl-row\"\n [class.rz-tbl-row-hoverable]=\"hoverable()\"\n [class.rz-tbl-row-selected]=\"selectable() && _isSelected(row)\"\n (click)=\"_onRowClick(row, rowIndex, $event)\"\n (dblclick)=\"_onRowDblClick(row, rowIndex, $event)\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"rz-tbl-cell-center\">\n <input type=\"checkbox\" class=\"rz-tbl-checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row); $event.stopPropagation()\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"rz-tbl-cell-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex); $event.stopPropagation()\"\n class=\"rz-tbl-expand-btn\"\n >\n <i class=\"pi rz-tbl-icon\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"rz-tbl-cell\"\n [attr.data-label]=\"responsiveLayout() === 'stack' ? col.header : null\"\n >\n @if (col.actions) {\n <div class=\"rz-tbl-actions\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"rz-tbl-action-btn\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"rz-tbl-icon\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"rz-tbl-row\">\n <td [attr.colspan]=\"_colCount()\" [style.padding]=\"'0'\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"rz-tbl-detail\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n }\n @if (_footerCols().length) {\n <tr class=\"rz-tbl-footer-row\"\n [style.border-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n >\n <td [attr.colspan]=\"_colCount()\" class=\"rz-tbl-cell\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >{{ _footerText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n @if (pageable() && !_hidePaginator()) {\n <div class=\"rz-tbl-paginator\">\n <div class=\"rz-tbl-page-info\">\n @if (showCurrentPageReport()) {\n <span>{{ _currentPageReportText() }}</span>\n } @else {\n <span>{{ _pageInfo().from }}\u2013{{ _pageInfo().to }} of {{ _pageInfo().total }}</span>\n }\n <app-drop-down\n [options]=\"_pageSizeOptions()\"\n [value]=\"'' + _pageSize()\"\n size=\"sm\"\n [config]=\"{ direction: 'up' }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_onPageSizeChange($event)\"\n />\n </div>\n <div class=\"rz-tbl-page-btns\">\n @if (showFirstLastIcon()) {\n <button type=\"button\" (click)=\"_goToPage(1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-left rz-tbl-page-icon\"></i></button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() - 1)\" [disabled]=\"_page() === 1\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-left rz-tbl-page-icon\"></i></button>\n @for (p of _visiblePages(); track p) {\n <button type=\"button\" (click)=\"_goToPage(p)\"\n class=\"rz-tbl-page-btn\"\n [style.background-color]=\"p === _page() ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"p === _page() ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >{{ p }}</button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() + 1)\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-right rz-tbl-page-icon\"></i></button>\n @if (showFirstLastIcon()) {\n <button type=\"button\" (click)=\"_goToPage(_totalPages())\" [disabled]=\"_page() === _totalPages()\"\n class=\"rz-tbl-page-btn\"\n ><i class=\"pi pi-angle-double-right rz-tbl-page-icon\"></i></button>\n }\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{display:contents}.rz-tbl-wrapper{overflow-x:auto;position:relative;border-radius:var(--radius-md, .5rem)}.rz-tbl{width:100%;border-collapse:collapse}.rz-tbl-sm .rz-tbl-header,.rz-tbl-sm .rz-tbl-cell,.rz-tbl-sm .rz-tbl-cell-center{padding:.375rem .5rem;font-size:.75rem}.rz-tbl-lg .rz-tbl-header,.rz-tbl-lg .rz-tbl-cell,.rz-tbl-lg .rz-tbl-cell-center{padding:.875rem 1rem;font-size:1rem}.rz-tbl-gridlines .rz-tbl-header,.rz-tbl-gridlines .rz-tbl-cell,.rz-tbl-gridlines .rz-tbl-cell-center{border:1px solid var(--color-border-light, oklch(.91 .01 260))}.rz-tbl-striped .rz-tbl-row:nth-child(2n) td{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-header{position:relative;padding:.625rem .75rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.rz-tbl-header-checkbox{padding:.625rem .75rem;font-size:.75rem;white-space:nowrap;text-align:center;width:40px}.rz-tbl-sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.rz-tbl-checkbox{cursor:pointer}.rz-tbl-sort-icon{margin-left:.375rem;font-size:.625rem;vertical-align:middle}.rz-tbl-resize-handle{position:absolute;inset-inline-end:2px;top:0;bottom:0;width:6px;cursor:col-resize;z-index:10;border-inline-end:2px solid var(--color-accent, oklch(.64 .2 50));opacity:.5;transition:opacity .15s}.rz-tbl-header:hover .rz-tbl-resize-handle{opacity:1}.rz-tbl-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.375rem}.rz-tbl-toolbar-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:1px solid var(--color-border-light, oklch(.91 .01 260));cursor:pointer;color:var(--color-text, oklch(.14 .01 260));background:transparent;transition:opacity .2s}.rz-tbl-toolbar-btn:hover{opacity:.8}.rz-tbl-icon{font-size:.625rem}.rz-tbl-col-toggle{position:relative;margin-left:auto}.rz-tbl-export-wrap{position:relative}.rz-tbl-dropdown{position:absolute;top:100%;right:0;margin-top:.25rem;min-width:140px;padding:.375rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-dropdown-label{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;white-space:nowrap;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-dropdown-label:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-export-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;min-width:100px;padding:.25rem;border-radius:var(--radius-md, .5rem);box-shadow:0 4px 12px #0000001a;z-index:50;border:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-export-opt{display:block;width:100%;text-align:left;padding:.375rem .5rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;border:none;background:transparent;color:var(--color-text, oklch(.14 .01 260));transition:background-color .2s}.rz-tbl-export-opt:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-empty{padding:2rem .75rem;text-align:center;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-row{border-bottom:1px solid var(--color-border-light, oklch(.91 .01 260));transition:background-color .15s}.rz-tbl-row-hoverable:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-row-selected{background-color:color-mix(in srgb,var(--color-primary, oklch(.32 .09 258)) 8%,transparent)!important}.rz-tbl-cell{padding:.625rem .75rem;font-size:.875rem;color:var(--color-text, oklch(.14 .01 260));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rz-tbl-cell-center{padding:.625rem .75rem;text-align:center}.rz-tbl-actions{display:flex;align-items:center;gap:.25rem}.rz-tbl-action-btn{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;border-radius:var(--radius-md, .5rem);border:none;cursor:pointer;background:transparent;transition:opacity .15s}.rz-tbl-action-btn:disabled{cursor:not-allowed}.rz-tbl-expand-btn{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm, .25rem);color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s}.rz-tbl-expand-btn:hover{background-color:var(--color-surface-alt, oklch(.975 .005 260))}.rz-tbl-detail{padding:.75rem;font-size:.875rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-footer-row{border-top:2px solid var(--color-primary, oklch(.32 .09 258));font-weight:500}.rz-tbl-paginator{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--color-border-light, oklch(.91 .01 260));background:var(--color-surface, oklch(.99 0 0))}.rz-tbl-page-info{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--color-text-muted, oklch(.48 .01 260))}.rz-tbl-page-btns{display:flex;align-items:center;gap:.125rem}.rz-tbl-page-btn{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;font-size:.75rem;border-radius:var(--radius-sm, .25rem);border:none;cursor:pointer;background:transparent;color:var(--color-text-muted, oklch(.48 .01 260));transition:background-color .15s,color .15s;font-weight:500}.rz-tbl-page-btn:disabled{opacity:.3;cursor:not-allowed}.rz-tbl-page-icon{font-size:.625rem}.rz-tbl-group-header td{padding:.5rem .75rem;font-size:.8rem;font-weight:700;background-color:var(--color-surface-alt, oklch(.975 .005 260));color:var(--color-text, oklch(.14 .01 260));text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--color-primary, oklch(.32 .09 258))}.rz-tbl-stack table,.rz-tbl-stack thead,.rz-tbl-stack tbody,.rz-tbl-stack th,.rz-tbl-stack td,.rz-tbl-stack tr{display:block}.rz-tbl-stack thead tr{position:absolute;top:-9999px;left:-9999px}.rz-tbl-stack tr{border:1px solid var(--color-border-light, oklch(.91 .01 260));margin-bottom:.5rem;border-radius:var(--radius-md, .5rem);overflow:hidden}.rz-tbl-stack td{border:none;position:relative;padding-left:50%!important;white-space:normal;text-overflow:clip}.rz-tbl-stack td:before{content:attr(data-label);position:absolute;left:.75rem;width:calc(50% - 1rem);font-weight:600;font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted, oklch(.48 .01 260));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
2065
|
+
}], ctorParameters: () => [], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], striped: [{ type: i0.Input, args: [{ isSignal: true, alias: "striped", required: false }] }], hoverable: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], filterable: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterable", required: false }] }], skeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonRows", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], pageable: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageable", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selectionKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionKey", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], exportable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportable", required: false }] }], columnToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnToggle", required: false }] }], expandable: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandable", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showGridlines: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGridlines", required: false }] }], sortMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortMode", required: false }] }], alwaysShowPaginator: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysShowPaginator", required: false }] }], showFirstLastIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFirstLastIcon", required: false }] }], currentPageReport: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPageReport", required: false }] }], showCurrentPageReport: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCurrentPageReport", required: false }] }], resetPageOnSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetPageOnSort", required: false }] }], metaKeySelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "metaKeySelection", required: false }] }], customSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "customSort", required: false }] }], globalFilterFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "globalFilterFields", required: false }] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], totalRecords: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalRecords", required: false }] }], responsiveLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsiveLayout", required: false }] }], groupRowsBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupRowsBy", required: false }] }], rowGroupMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowGroupMode", required: false }] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }], selectedRows: [{ type: i0.Output, args: ["selectedRows"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDblClick: [{ type: i0.Output, args: ["rowDblClick"] }], selectAllChange: [{ type: i0.Output, args: ["selectAllChange"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }], selection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }, { type: i0.Output, args: ["selectionChange"] }], rowDetail: [{
|
|
1901
2066
|
type: ContentChild,
|
|
1902
2067
|
args: ['rowDetail', { read: TemplateRef, static: false }]
|
|
1903
2068
|
}] } });
|