ng-prime-tools 1.1.22 → 1.1.23
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.
|
@@ -12582,13 +12582,17 @@ class PTReleaseNotesPageComponent {
|
|
|
12582
12582
|
*/
|
|
12583
12583
|
this.totalAllRecords = 0;
|
|
12584
12584
|
/**
|
|
12585
|
-
* Current zero-based page.
|
|
12585
|
+
* Current zero-based server page.
|
|
12586
12586
|
*/
|
|
12587
12587
|
this.page = 0;
|
|
12588
12588
|
/**
|
|
12589
12589
|
* Current server page size.
|
|
12590
12590
|
*/
|
|
12591
12591
|
this.rows = 10;
|
|
12592
|
+
/**
|
|
12593
|
+
* Available server page sizes.
|
|
12594
|
+
*/
|
|
12595
|
+
this.rowsPerPageOptions = [5, 10, 20, 50];
|
|
12592
12596
|
this.config = {};
|
|
12593
12597
|
this.queryChange = new EventEmitter();
|
|
12594
12598
|
this.searchText = '';
|
|
@@ -12600,6 +12604,7 @@ class PTReleaseNotesPageComponent {
|
|
|
12600
12604
|
.pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$))
|
|
12601
12605
|
.subscribe(() => {
|
|
12602
12606
|
this.page = 0;
|
|
12607
|
+
this.collapseAllDetails();
|
|
12603
12608
|
this.emitQueryChange();
|
|
12604
12609
|
});
|
|
12605
12610
|
}
|
|
@@ -12711,7 +12716,14 @@ class PTReleaseNotesPageComponent {
|
|
|
12711
12716
|
return 'pi pi-sparkles';
|
|
12712
12717
|
}
|
|
12713
12718
|
getRowsPerPageOptions() {
|
|
12714
|
-
|
|
12719
|
+
const values = (this.rowsPerPageOptions ?? [])
|
|
12720
|
+
.filter((value) => Number.isFinite(value) && value > 0)
|
|
12721
|
+
.map((value) => Math.floor(value));
|
|
12722
|
+
const uniqueValues = Array.from(new Set(values));
|
|
12723
|
+
if (this.rows > 0 && !uniqueValues.includes(this.rows)) {
|
|
12724
|
+
uniqueValues.push(this.rows);
|
|
12725
|
+
}
|
|
12726
|
+
return uniqueValues.sort((a, b) => a - b);
|
|
12715
12727
|
}
|
|
12716
12728
|
showCurrentPageReport() {
|
|
12717
12729
|
return true;
|
|
@@ -12733,6 +12745,7 @@ class PTReleaseNotesPageComponent {
|
|
|
12733
12745
|
}
|
|
12734
12746
|
this.selectedFilter = filter;
|
|
12735
12747
|
this.page = 0;
|
|
12748
|
+
this.collapseAllDetails();
|
|
12736
12749
|
this.emitQueryChange();
|
|
12737
12750
|
}
|
|
12738
12751
|
isFilterSelected(filter) {
|
|
@@ -12748,13 +12761,37 @@ class PTReleaseNotesPageComponent {
|
|
|
12748
12761
|
}
|
|
12749
12762
|
this.searchText = '';
|
|
12750
12763
|
this.page = 0;
|
|
12764
|
+
this.collapseAllDetails();
|
|
12751
12765
|
this.emitQueryChange();
|
|
12752
12766
|
}
|
|
12767
|
+
/**
|
|
12768
|
+
* PrimeNG server-side pagination.
|
|
12769
|
+
*
|
|
12770
|
+
* Important:
|
|
12771
|
+
* - changing only the page -> use event.page
|
|
12772
|
+
* - changing rows per page -> reset to page 0
|
|
12773
|
+
*
|
|
12774
|
+
* Resetting on size change avoids keeping an offset
|
|
12775
|
+
* calculated from the previous page size.
|
|
12776
|
+
*/
|
|
12753
12777
|
onPageChange(event) {
|
|
12754
|
-
const
|
|
12755
|
-
const
|
|
12756
|
-
|
|
12757
|
-
|
|
12778
|
+
const previousRows = Math.max(1, this.rows);
|
|
12779
|
+
const nextRows = event.rows !== undefined && event.rows !== null && event.rows > 0
|
|
12780
|
+
? event.rows
|
|
12781
|
+
: previousRows;
|
|
12782
|
+
const rowsChanged = nextRows !== previousRows;
|
|
12783
|
+
this.rows = nextRows;
|
|
12784
|
+
if (rowsChanged) {
|
|
12785
|
+
this.page = 0;
|
|
12786
|
+
}
|
|
12787
|
+
else if (event.page !== undefined && event.page !== null) {
|
|
12788
|
+
this.page = Math.max(0, event.page);
|
|
12789
|
+
}
|
|
12790
|
+
else {
|
|
12791
|
+
const nextFirst = event.first ?? 0;
|
|
12792
|
+
this.page = Math.max(0, Math.floor(nextFirst / this.rows));
|
|
12793
|
+
}
|
|
12794
|
+
this.collapseAllDetails();
|
|
12758
12795
|
this.emitQueryChange();
|
|
12759
12796
|
}
|
|
12760
12797
|
getReleaseClasses(release) {
|
|
@@ -12771,13 +12808,14 @@ class PTReleaseNotesPageComponent {
|
|
|
12771
12808
|
return classes.join(' ');
|
|
12772
12809
|
}
|
|
12773
12810
|
getNewCount(release) {
|
|
12774
|
-
return release.newCount ??
|
|
12811
|
+
return release.newCount ?? this.getDetailsByType(release, 'NEW').length;
|
|
12775
12812
|
}
|
|
12776
12813
|
getImprovementCount(release) {
|
|
12777
|
-
return release.improvementCount ??
|
|
12814
|
+
return (release.improvementCount ??
|
|
12815
|
+
this.getDetailsByType(release, 'IMPROVEMENT').length);
|
|
12778
12816
|
}
|
|
12779
12817
|
getBugFixCount(release) {
|
|
12780
|
-
return release.bugFixCount ??
|
|
12818
|
+
return (release.bugFixCount ?? this.getDetailsByType(release, 'BUG_FIX').length);
|
|
12781
12819
|
}
|
|
12782
12820
|
getTotalChangesCount(release) {
|
|
12783
12821
|
return (this.getNewCount(release) +
|
|
@@ -12797,11 +12835,17 @@ class PTReleaseNotesPageComponent {
|
|
|
12797
12835
|
return this.getBugFixCount(release) > 0;
|
|
12798
12836
|
}
|
|
12799
12837
|
hasDetails(release) {
|
|
12800
|
-
return (release
|
|
12838
|
+
return this.getDetails(release).length > 0;
|
|
12801
12839
|
}
|
|
12802
12840
|
getDetails(release) {
|
|
12803
12841
|
return release.details ?? [];
|
|
12804
12842
|
}
|
|
12843
|
+
getDetailsByType(release, type) {
|
|
12844
|
+
return this.getDetails(release).filter((detail) => detail.type === type);
|
|
12845
|
+
}
|
|
12846
|
+
hasDetailsByType(release, type) {
|
|
12847
|
+
return this.getDetailsByType(release, type).length > 0;
|
|
12848
|
+
}
|
|
12805
12849
|
isDetailsExpanded(release) {
|
|
12806
12850
|
return this.expandedReleaseIds.has(String(release.id));
|
|
12807
12851
|
}
|
|
@@ -12816,6 +12860,43 @@ class PTReleaseNotesPageComponent {
|
|
|
12816
12860
|
}
|
|
12817
12861
|
this.expandedReleaseIds.add(releaseId);
|
|
12818
12862
|
}
|
|
12863
|
+
hasExpandableReleases() {
|
|
12864
|
+
return this.getDisplayedReleases().some((release) => !release.disabled && this.hasDetails(release));
|
|
12865
|
+
}
|
|
12866
|
+
areAllDetailsExpanded() {
|
|
12867
|
+
const expandableReleases = this.getDisplayedReleases().filter((release) => !release.disabled && this.hasDetails(release));
|
|
12868
|
+
if (expandableReleases.length === 0) {
|
|
12869
|
+
return false;
|
|
12870
|
+
}
|
|
12871
|
+
return expandableReleases.every((release) => this.expandedReleaseIds.has(String(release.id)));
|
|
12872
|
+
}
|
|
12873
|
+
toggleAllDetails() {
|
|
12874
|
+
if (!this.hasExpandableReleases()) {
|
|
12875
|
+
return;
|
|
12876
|
+
}
|
|
12877
|
+
if (this.areAllDetailsExpanded()) {
|
|
12878
|
+
this.collapseAllDetails();
|
|
12879
|
+
return;
|
|
12880
|
+
}
|
|
12881
|
+
this.expandAllDetails();
|
|
12882
|
+
}
|
|
12883
|
+
expandAllDetails() {
|
|
12884
|
+
this.getDisplayedReleases().forEach((release) => {
|
|
12885
|
+
if (release.disabled || !this.hasDetails(release)) {
|
|
12886
|
+
return;
|
|
12887
|
+
}
|
|
12888
|
+
this.expandedReleaseIds.add(String(release.id));
|
|
12889
|
+
});
|
|
12890
|
+
}
|
|
12891
|
+
collapseAllDetails() {
|
|
12892
|
+
this.expandedReleaseIds.clear();
|
|
12893
|
+
}
|
|
12894
|
+
getToggleAllDetailsText() {
|
|
12895
|
+
if (this.areAllDetailsExpanded()) {
|
|
12896
|
+
return this.language === 'FR' ? 'Tout réduire' : 'Collapse all';
|
|
12897
|
+
}
|
|
12898
|
+
return this.language === 'FR' ? 'Tout développer' : 'Expand all';
|
|
12899
|
+
}
|
|
12819
12900
|
getDetailsButtonText(release) {
|
|
12820
12901
|
return this.isDetailsExpanded(release)
|
|
12821
12902
|
? this.resolvedConfig.hideDetailsText
|
|
@@ -12837,29 +12918,41 @@ class PTReleaseNotesPageComponent {
|
|
|
12837
12918
|
}
|
|
12838
12919
|
}
|
|
12839
12920
|
getDetailTypeLabel(detail) {
|
|
12840
|
-
|
|
12921
|
+
return this.getDetailTypeSectionLabel(detail.type);
|
|
12922
|
+
}
|
|
12923
|
+
getDetailTypeSectionLabel(type) {
|
|
12924
|
+
switch (type) {
|
|
12841
12925
|
case 'NEW':
|
|
12842
12926
|
return this.resolvedConfig.newLabel;
|
|
12843
12927
|
case 'IMPROVEMENT':
|
|
12844
12928
|
return this.resolvedConfig.improvementLabel;
|
|
12845
12929
|
case 'BUG_FIX':
|
|
12846
12930
|
return this.resolvedConfig.bugFixLabel;
|
|
12847
|
-
default:
|
|
12848
|
-
return '';
|
|
12849
12931
|
}
|
|
12850
12932
|
}
|
|
12851
|
-
|
|
12852
|
-
switch (
|
|
12933
|
+
getDetailTypeSectionIcon(type) {
|
|
12934
|
+
switch (type) {
|
|
12935
|
+
case 'NEW':
|
|
12936
|
+
return 'pi pi-plus-circle';
|
|
12937
|
+
case 'IMPROVEMENT':
|
|
12938
|
+
return 'pi pi-arrow-up-right';
|
|
12939
|
+
case 'BUG_FIX':
|
|
12940
|
+
return 'pi pi-wrench';
|
|
12941
|
+
}
|
|
12942
|
+
}
|
|
12943
|
+
getDetailTypeSectionClass(type) {
|
|
12944
|
+
switch (type) {
|
|
12853
12945
|
case 'NEW':
|
|
12854
12946
|
return 'new';
|
|
12855
12947
|
case 'IMPROVEMENT':
|
|
12856
12948
|
return 'improvement';
|
|
12857
12949
|
case 'BUG_FIX':
|
|
12858
12950
|
return 'bug-fix';
|
|
12859
|
-
default:
|
|
12860
|
-
return '';
|
|
12861
12951
|
}
|
|
12862
12952
|
}
|
|
12953
|
+
getDetailClass(detail) {
|
|
12954
|
+
return this.getDetailTypeSectionClass(detail.type);
|
|
12955
|
+
}
|
|
12863
12956
|
onDetailClick(detail, event) {
|
|
12864
12957
|
event.stopPropagation();
|
|
12865
12958
|
if (detail.disabled || !detail.link?.trim()) {
|
|
@@ -12877,11 +12970,11 @@ class PTReleaseNotesPageComponent {
|
|
|
12877
12970
|
});
|
|
12878
12971
|
}
|
|
12879
12972
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PTReleaseNotesPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12880
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PTReleaseNotesPageComponent, isStandalone: false, selector: "pt-release-notes-page", inputs: { releases: "releases", loading: "loading", totalRecords: "totalRecords", totalAllRecords: "totalAllRecords", totalUnreadRecords: "totalUnreadRecords", totalReadRecords: "totalReadRecords", page: "page", rows: "rows", config: "config" }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "@if (resolvedConfig.visible) {\n <div class=\"pt-release-notes-page\">\n <div class=\"pt-release-notes-page-header\">\n <div class=\"pt-release-notes-page-heading\">\n <div class=\"pt-release-notes-page-title-row\">\n <div class=\"pt-release-notes-page-title-icon\">\n <i [class]=\"resolvedConfig.icon\"></i>\n </div>\n\n <div>\n <h2 class=\"pt-release-notes-page-title\">\n {{ getTitle() }}\n </h2>\n\n <div class=\"pt-release-notes-page-subtitle\">\n {{ getSubtitle() }}\n </div>\n </div>\n </div>\n\n @if (showCounters()) {\n <div class=\"pt-release-notes-page-counters\">\n <span class=\"pt-release-notes-page-counter\">\n {{ getTotalCount() }}\n version(s)\n </span>\n\n @if (getUnreadCount() > 0) {\n <span class=\"pt-release-notes-page-counter unread\">\n {{ getUnreadCount() }}\n non lue(s)\n </span>\n }\n\n @if (getReadCount() > 0) {\n <span class=\"pt-release-notes-page-counter read\">\n {{ getReadCount() }}\n lue(s)\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-toolbar\">\n <div class=\"pt-release-notes-page-filters\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('ALL')\"\n (click)=\"selectFilter('ALL')\"\n >\n {{ getAllLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getTotalCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('UNREAD')\"\n (click)=\"selectFilter('UNREAD')\"\n >\n {{ getUnreadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getUnreadCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('READ')\"\n (click)=\"selectFilter('READ')\"\n >\n {{ getReadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getReadCount() }}\n </span>\n </button>\n </div>\n\n <div class=\"pt-release-notes-page-search\">\n <i class=\"pi pi-search\"></i>\n\n <input\n type=\"text\"\n [value]=\"searchText\"\n [placeholder]=\"getSearchPlaceholder()\"\n (input)=\"onSearch($any($event.target).value)\"\n />\n\n @if (hasSearch()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-search-clear\"\n aria-label=\"Effacer la recherche\"\n (click)=\"clearSearch()\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n\n @if (hasReleases()) {\n <div class=\"pt-release-notes-page-list\">\n @for (release of getDisplayedReleases(); track release.id) {\n <div [class]=\"getReleaseClasses(release)\">\n <div class=\"pt-release-notes-page-item-top\">\n <div class=\"pt-release-notes-page-item-icon-wrapper\">\n <div class=\"pt-release-notes-page-item-icon\">\n <i class=\"pi pi-sparkles\"></i>\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-item-content\">\n <div class=\"pt-release-notes-page-version-row\">\n <span class=\"pt-release-notes-page-version\">\n v{{ release.version }}\n </span>\n\n <span class=\"pt-release-notes-page-item-title\">\n {{ release.title }}\n </span>\n </div>\n\n @if (release.summary) {\n <div class=\"pt-release-notes-page-summary\">\n {{ release.summary }}\n </div>\n }\n\n @if (release.date) {\n <div class=\"pt-release-notes-page-metadata\">\n <span>\n <i class=\"pi pi-calendar\"></i>\n\n {{ release.date | date: \"dd/MM/yyyy\" }}\n </span>\n </div>\n }\n\n @if (hasCounters(release)) {\n <div class=\"pt-release-notes-page-stats\">\n @if (hasNewItems(release)) {\n <span class=\"pt-release-notes-page-stat new\">\n <i class=\"pi pi-plus-circle\"></i>\n\n <strong>\n {{ getNewCount(release) }}\n </strong>\n\n {{ resolvedConfig.newLabel }}\n </span>\n }\n\n @if (hasImprovements(release)) {\n <span class=\"pt-release-notes-page-stat improvement\">\n <i class=\"pi pi-arrow-up-right\"></i>\n\n <strong>\n {{ getImprovementCount(release) }}\n </strong>\n\n {{ resolvedConfig.improvementLabel }}\n </span>\n }\n\n @if (hasBugFixes(release)) {\n <span class=\"pt-release-notes-page-stat bug-fix\">\n <i class=\"pi pi-wrench\"></i>\n\n <strong>\n {{ getBugFixCount(release) }}\n </strong>\n\n {{ resolvedConfig.bugFixLabel }}\n </span>\n }\n </div>\n }\n </div>\n\n @if (release.read !== true) {\n <span class=\"pt-release-notes-page-unread-indicator\"></span>\n }\n </div>\n\n @if (hasDetails(release) && isDetailsExpanded(release)) {\n <div class=\"pt-release-notes-page-details\">\n @for (detail of getDetails(release); track detail.id) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"[\n getDetailClass(detail),\n detail.styleClass || '',\n ]\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-type\">\n {{ getDetailTypeLabel(detail) }}\n </div>\n\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div class=\"pt-release-notes-page-detail-description\">\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n }\n\n @if (hasDetails(release)) {\n <div class=\"pt-release-notes-page-details-action\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-details-button\"\n [disabled]=\"release.disabled\"\n (click)=\"toggleDetails(release)\"\n >\n <span>\n {{ getDetailsButtonText(release) }}\n </span>\n\n <i\n class=\"pi\"\n [ngClass]=\"\n isDetailsExpanded(release)\n ? 'pi-chevron-up'\n : 'pi-chevron-down'\n \"\n ></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n } @else if (!loading) {\n <div class=\"pt-release-notes-page-empty\">\n <div class=\"pt-release-notes-page-empty-icon\">\n <i [class]=\"getEmptyIcon()\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-empty-text\">\n @if (hasSearch()) {\n {{ getNoSearchResultText() }}\n } @else {\n {{ getEmptyText() }}\n }\n </div>\n </div>\n }\n\n @if (loading) {\n <div class=\"pt-release-notes-page-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n\n <span>\n {{ resolvedConfig.loadingText }}\n </span>\n </div>\n }\n\n @if (showPagination()) {\n <div class=\"pt-release-notes-page-pagination\">\n <p-paginator\n [first]=\"getFirst()\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"getRowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [currentPageReportTemplate]=\"getCurrentPageReportTemplate()\"\n (onPageChange)=\"onPageChange($event)\"\n ></p-paginator>\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%}.pt-release-notes-page{position:relative;width:100%;background:var(--pt-release-notes-page-bg, #ffffff);border:1px solid var(--pt-release-notes-page-border, #e5e7eb);border-radius:14px;overflow:visible}.pt-release-notes-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-heading{display:flex;flex-direction:column;gap:.85rem}.pt-release-notes-page-title-row{display:flex;align-items:center;gap:.8rem}.pt-release-notes-page-title-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-title-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-title-icon-color, #3f2564);font-size:1.15rem}.pt-release-notes-page-title{margin:0;color:var(--pt-release-notes-page-title-color, #1f2937);font-size:1.25rem;font-weight:700}.pt-release-notes-page-subtitle{margin-top:.2rem;color:var(--pt-release-notes-page-subtitle-color, #6b7280);font-size:.875rem}.pt-release-notes-page-counters{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.pt-release-notes-page-counter{display:inline-flex;align-items:center;padding:.3rem .65rem;border-radius:999px;background:var(--pt-release-notes-page-counter-bg, #f3f4f6);color:var(--pt-release-notes-page-counter-color, #4b5563);font-size:.78rem;font-weight:600}.pt-release-notes-page-counter.unread{background:var(--pt-release-notes-page-unread-counter-bg, #f3f0f8);color:var(--pt-release-notes-page-unread-counter-color, #3f2564)}.pt-release-notes-page-counter.read{background:var(--pt-release-notes-page-read-counter-bg, #ecfdf5);color:var(--pt-release-notes-page-read-counter-color, #15803d)}.pt-release-notes-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-filters{display:flex;align-items:center;gap:.4rem}.pt-release-notes-page-filter{display:flex;align-items:center;gap:.45rem;padding:.5rem .85rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:var(--pt-release-notes-page-filter-bg, #ffffff);color:var(--pt-release-notes-page-filter-color, #4b5563);font-size:.82rem;font-weight:600;cursor:pointer}.pt-release-notes-page-filter:hover{background:#f9fafb}.pt-release-notes-page-filter.selected{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564)}.pt-release-notes-page-filter-count{min-width:20px;padding:.1rem .35rem;border-radius:999px;background:#0000000d;text-align:center;font-size:.72rem}.pt-release-notes-page-search{position:relative;display:flex;align-items:center;width:min(360px,100%)}.pt-release-notes-page-search>.pi-search{position:absolute;left:.85rem;color:#9ca3af}.pt-release-notes-page-search input{width:100%;padding:.65rem 2.5rem .65rem 2.4rem;border:1px solid #d1d5db;border-radius:8px;outline:none;font-size:.85rem}.pt-release-notes-page-search input:focus{border-color:var(--pt-release-notes-page-primary, #3f2564);box-shadow:0 0 0 2px #3f256414}.pt-release-notes-page-search-clear{position:absolute;right:.6rem;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;color:#6b7280;cursor:pointer}.pt-release-notes-page-list{width:100%}.pt-release-notes-page-item{position:relative;padding:1.1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-item-bg, #ffffff);transition:background .15s ease}.pt-release-notes-page-item:last-child{border-bottom:0}.pt-release-notes-page-item:hover{background:var(--pt-release-notes-page-item-hover-bg, #f9fafb)}.pt-release-notes-page-item.unread{background:var(--pt-release-notes-page-unread-bg, #faf8fd)}.pt-release-notes-page-item.unread:hover{background:var(--pt-release-notes-page-unread-hover-bg, #f6f2fa)}.pt-release-notes-page-item.disabled{opacity:.55}.pt-release-notes-page-item-top{position:relative;display:flex;align-items:flex-start;gap:1rem}.pt-release-notes-page-item-icon-wrapper{flex:0 0 auto}.pt-release-notes-page-item-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-item-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:1rem}.pt-release-notes-page-item-content{flex:1 1 auto;min-width:0}.pt-release-notes-page-version-row{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem}.pt-release-notes-page-version{display:inline-flex;align-items:center;padding:.25rem .55rem;border-radius:6px;background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:800}.pt-release-notes-page-item-title{color:var(--pt-release-notes-page-text-color, #1f2937);font-size:.9rem;font-weight:700}.pt-release-notes-page-item.unread .pt-release-notes-page-item-title{font-weight:700}.pt-release-notes-page-summary{margin-top:.45rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.85rem;line-height:1.5}.pt-release-notes-page-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:1rem;margin-top:.5rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.78rem}.pt-release-notes-page-metadata span{display:inline-flex;align-items:center;gap:.35rem}.pt-release-notes-page-stats{display:flex;align-items:center;flex-wrap:wrap;gap:.45rem;margin-top:.8rem}.pt-release-notes-page-stat{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border-radius:999px;font-size:.72rem;font-weight:600}.pt-release-notes-page-stat.new{background:#dcfce7;color:#15803d}.pt-release-notes-page-stat.improvement{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-stat.bug-fix{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-unread-indicator{position:absolute;top:50%;right:-1rem;width:7px;height:7px;border-radius:50%;background:var(--pt-release-notes-page-unread-indicator, #3f2564);transform:translateY(-50%)}.pt-release-notes-page-details{display:flex;flex-direction:column;gap:.35rem;margin-top:1rem;margin-left:58px;padding-top:1rem;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-detail{display:flex;align-items:flex-start;gap:.75rem;width:100%;padding:.7rem;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.pt-release-notes-page-detail:hover:not(:disabled){background:#f9fafb}.pt-release-notes-page-detail.disabled{opacity:.55;cursor:default}.pt-release-notes-page-detail-icon{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-icon{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-icon{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-icon{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-content{flex:1;min-width:0}.pt-release-notes-page-detail-type{margin-bottom:.2rem;font-size:.68rem;font-weight:700;text-transform:uppercase}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-type{color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-type{color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-type{color:#b91c1c}.pt-release-notes-page-detail-title{color:#1f2937;font-size:.84rem;font-weight:700}.pt-release-notes-page-detail-description{margin-top:.25rem;color:#6b7280;font-size:.78rem;line-height:1.5}.pt-release-notes-page-detail-link{flex:0 0 auto;align-self:center;color:#6b7280;font-size:.72rem}.pt-release-notes-page-details-action{display:flex;justify-content:center;margin-top:.8rem;margin-left:58px}.pt-release-notes-page-details-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.45rem .75rem;border:0;border-radius:7px;background:transparent;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer}.pt-release-notes-page-details-button:hover:not(:disabled){background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-details-button:disabled{opacity:.5;cursor:default}.pt-release-notes-page-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;padding:3rem;color:#6b7280;text-align:center}.pt-release-notes-page-empty-icon{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin-bottom:1rem;border-radius:50%;background:#f3f4f6;color:#9ca3af;font-size:1.6rem}.pt-release-notes-page-empty-text{max-width:450px;font-size:.9rem}.pt-release-notes-page-loading{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:100px;color:#6b7280;font-size:.85rem}.pt-release-notes-page-pagination{display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem 1rem;box-sizing:border-box;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-pagination-bg, #ffffff)}.pt-release-notes-page-pagination ::ng-deep .p-paginator{width:100%;border:0;background:transparent}@media(max-width:768px){.pt-release-notes-page-header,.pt-release-notes-page-toolbar{flex-direction:column;align-items:stretch}.pt-release-notes-page-filters{overflow-x:auto}.pt-release-notes-page-search{width:100%}.pt-release-notes-page-item{padding:1rem 1.1rem}.pt-release-notes-page-details,.pt-release-notes-page-details-action{margin-left:0}.pt-release-notes-page-unread-indicator{right:0}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2$6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "appendTo"], outputs: ["onPageChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12973
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PTReleaseNotesPageComponent, isStandalone: false, selector: "pt-release-notes-page", inputs: { releases: "releases", loading: "loading", totalRecords: "totalRecords", totalAllRecords: "totalAllRecords", totalUnreadRecords: "totalUnreadRecords", totalReadRecords: "totalReadRecords", page: "page", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", config: "config" }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "@if (resolvedConfig.visible) {\n <div class=\"pt-release-notes-page\">\n <div class=\"pt-release-notes-page-header\">\n <div class=\"pt-release-notes-page-heading\">\n <div class=\"pt-release-notes-page-title-row\">\n <div class=\"pt-release-notes-page-title-icon\">\n <i [class]=\"resolvedConfig.icon\"></i>\n </div>\n\n <div>\n <h2 class=\"pt-release-notes-page-title\">\n {{ getTitle() }}\n </h2>\n\n <div class=\"pt-release-notes-page-subtitle\">\n {{ getSubtitle() }}\n </div>\n </div>\n </div>\n\n @if (showCounters()) {\n <div class=\"pt-release-notes-page-counters\">\n <span class=\"pt-release-notes-page-counter\">\n {{ getTotalCount() }}\n version(s)\n </span>\n\n @if (getUnreadCount() > 0) {\n <span class=\"pt-release-notes-page-counter unread\">\n {{ getUnreadCount() }}\n non lue(s)\n </span>\n }\n\n @if (getReadCount() > 0) {\n <span class=\"pt-release-notes-page-counter read\">\n {{ getReadCount() }}\n lue(s)\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-toolbar\">\n <div class=\"pt-release-notes-page-toolbar-left\">\n <div class=\"pt-release-notes-page-filters\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('ALL')\"\n (click)=\"selectFilter('ALL')\"\n >\n {{ getAllLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getTotalCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('UNREAD')\"\n (click)=\"selectFilter('UNREAD')\"\n >\n {{ getUnreadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getUnreadCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('READ')\"\n (click)=\"selectFilter('READ')\"\n >\n {{ getReadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getReadCount() }}\n </span>\n </button>\n </div>\n\n @if (hasExpandableReleases()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-expand-all\"\n [class.expanded]=\"areAllDetailsExpanded()\"\n (click)=\"toggleAllDetails()\"\n >\n <i\n class=\"pi\"\n [ngClass]=\"\n areAllDetailsExpanded()\n ? 'pi-angle-double-up'\n : 'pi-angle-double-down'\n \"\n ></i>\n\n <span>\n {{ getToggleAllDetailsText() }}\n </span>\n </button>\n }\n </div>\n\n <div class=\"pt-release-notes-page-search\">\n <i class=\"pi pi-search\"></i>\n\n <input\n type=\"text\"\n [value]=\"searchText\"\n [placeholder]=\"getSearchPlaceholder()\"\n (input)=\"onSearch($any($event.target).value)\"\n />\n\n @if (hasSearch()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-search-clear\"\n aria-label=\"Effacer la recherche\"\n (click)=\"clearSearch()\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n\n @if (hasReleases()) {\n <div class=\"pt-release-notes-page-list\">\n @for (release of getDisplayedReleases(); track release.id) {\n <div [class]=\"getReleaseClasses(release)\">\n <div class=\"pt-release-notes-page-item-top\">\n <div class=\"pt-release-notes-page-item-icon-wrapper\">\n <div class=\"pt-release-notes-page-item-icon\">\n <i class=\"pi pi-sparkles\"></i>\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-item-content\">\n <div class=\"pt-release-notes-page-version-row\">\n <span class=\"pt-release-notes-page-version\">\n v{{ release.version }}\n </span>\n\n <span class=\"pt-release-notes-page-item-title\">\n {{ release.title }}\n </span>\n </div>\n\n @if (release.summary) {\n <div class=\"pt-release-notes-page-summary\">\n {{ release.summary }}\n </div>\n }\n\n @if (release.date) {\n <div class=\"pt-release-notes-page-metadata\">\n <span>\n <i class=\"pi pi-calendar\"></i>\n\n {{ release.date | date: \"dd/MM/yyyy\" }}\n </span>\n </div>\n }\n\n @if (hasCounters(release)) {\n <div class=\"pt-release-notes-page-stats\">\n @if (hasNewItems(release)) {\n <span class=\"pt-release-notes-page-stat new\">\n <i class=\"pi pi-plus-circle\"></i>\n\n <strong>\n {{ getNewCount(release) }}\n </strong>\n\n {{ resolvedConfig.newLabel }}\n </span>\n }\n\n @if (hasImprovements(release)) {\n <span class=\"pt-release-notes-page-stat improvement\">\n <i class=\"pi pi-arrow-up-right\"></i>\n\n <strong>\n {{ getImprovementCount(release) }}\n </strong>\n\n {{ resolvedConfig.improvementLabel }}\n </span>\n }\n\n @if (hasBugFixes(release)) {\n <span class=\"pt-release-notes-page-stat bug-fix\">\n <i class=\"pi pi-wrench\"></i>\n\n <strong>\n {{ getBugFixCount(release) }}\n </strong>\n\n {{ resolvedConfig.bugFixLabel }}\n </span>\n }\n </div>\n }\n </div>\n\n @if (release.read !== true) {\n <span class=\"pt-release-notes-page-unread-indicator\"></span>\n }\n </div>\n\n @if (hasDetails(release) && isDetailsExpanded(release)) {\n <div class=\"pt-release-notes-page-details\">\n @if (hasDetailsByType(release, \"NEW\")) {\n <section class=\"pt-release-notes-page-detail-section new\">\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-plus-circle\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.newLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"NEW\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"NEW\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail new\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n\n @if (hasDetailsByType(release, \"IMPROVEMENT\")) {\n <section\n class=\"pt-release-notes-page-detail-section improvement\"\n >\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-arrow-up-right\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.improvementLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"IMPROVEMENT\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"IMPROVEMENT\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail improvement\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n\n @if (hasDetailsByType(release, \"BUG_FIX\")) {\n <section class=\"pt-release-notes-page-detail-section bug-fix\">\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-wrench\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.bugFixLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"BUG_FIX\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"BUG_FIX\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail bug-fix\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n </div>\n }\n\n @if (hasDetails(release)) {\n <div class=\"pt-release-notes-page-details-action\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-details-button\"\n [disabled]=\"release.disabled\"\n (click)=\"toggleDetails(release)\"\n >\n <span>\n {{ getDetailsButtonText(release) }}\n </span>\n\n <i\n class=\"pi\"\n [ngClass]=\"\n isDetailsExpanded(release)\n ? 'pi-chevron-up'\n : 'pi-chevron-down'\n \"\n ></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n } @else if (!loading) {\n <div class=\"pt-release-notes-page-empty\">\n <div class=\"pt-release-notes-page-empty-icon\">\n <i [class]=\"getEmptyIcon()\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-empty-text\">\n @if (hasSearch()) {\n {{ getNoSearchResultText() }}\n } @else {\n {{ getEmptyText() }}\n }\n </div>\n </div>\n }\n\n @if (loading) {\n <div class=\"pt-release-notes-page-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n\n <span>\n {{ resolvedConfig.loadingText }}\n </span>\n </div>\n }\n\n @if (showPagination()) {\n <div class=\"pt-release-notes-page-pagination\">\n <p-paginator\n [first]=\"getFirst()\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"getRowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [currentPageReportTemplate]=\"getCurrentPageReportTemplate()\"\n (onPageChange)=\"onPageChange($event)\"\n ></p-paginator>\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%}.pt-release-notes-page{position:relative;width:100%;background:var(--pt-release-notes-page-bg, #ffffff);border:1px solid var(--pt-release-notes-page-border, #e5e7eb);border-radius:14px;overflow:visible}.pt-release-notes-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-heading{display:flex;flex-direction:column;gap:.85rem}.pt-release-notes-page-title-row{display:flex;align-items:center;gap:.8rem}.pt-release-notes-page-title-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-title-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-title-icon-color, #3f2564);font-size:1.15rem}.pt-release-notes-page-title{margin:0;color:var(--pt-release-notes-page-title-color, #1f2937);font-size:1.25rem;font-weight:700}.pt-release-notes-page-subtitle{margin-top:.2rem;color:var(--pt-release-notes-page-subtitle-color, #6b7280);font-size:.875rem}.pt-release-notes-page-counters{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.pt-release-notes-page-counter{display:inline-flex;align-items:center;padding:.3rem .65rem;border-radius:999px;background:var(--pt-release-notes-page-counter-bg, #f3f4f6);color:var(--pt-release-notes-page-counter-color, #4b5563);font-size:.78rem;font-weight:600}.pt-release-notes-page-counter.unread{background:var(--pt-release-notes-page-unread-counter-bg, #f3f0f8);color:var(--pt-release-notes-page-unread-counter-color, #3f2564)}.pt-release-notes-page-counter.read{background:var(--pt-release-notes-page-read-counter-bg, #ecfdf5);color:var(--pt-release-notes-page-read-counter-color, #15803d)}.pt-release-notes-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-toolbar-left{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;min-width:0}.pt-release-notes-page-filters{display:flex;align-items:center;gap:.4rem}.pt-release-notes-page-filter{display:flex;align-items:center;gap:.45rem;padding:.5rem .85rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:var(--pt-release-notes-page-filter-bg, #ffffff);color:var(--pt-release-notes-page-filter-color, #4b5563);font-size:.82rem;font-weight:600;cursor:pointer}.pt-release-notes-page-filter:hover{background:#f9fafb}.pt-release-notes-page-filter.selected{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564)}.pt-release-notes-page-filter-count{min-width:20px;padding:.1rem .35rem;border-radius:999px;background:#0000000d;text-align:center;font-size:.72rem}.pt-release-notes-page-expand-all{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:34px;padding:.45rem .75rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:#fff;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer;transition:background .15s ease,border-color .15s ease}.pt-release-notes-page-expand-all:hover,.pt-release-notes-page-expand-all.expanded{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-search{position:relative;display:flex;align-items:center;width:min(360px,100%)}.pt-release-notes-page-search>.pi-search{position:absolute;left:.85rem;color:#9ca3af}.pt-release-notes-page-search input{width:100%;padding:.65rem 2.5rem .65rem 2.4rem;border:1px solid #d1d5db;border-radius:8px;outline:none;font-size:.85rem}.pt-release-notes-page-search input:focus{border-color:var(--pt-release-notes-page-primary, #3f2564);box-shadow:0 0 0 2px #3f256414}.pt-release-notes-page-search-clear{position:absolute;right:.6rem;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;color:#6b7280;cursor:pointer}.pt-release-notes-page-list{width:100%}.pt-release-notes-page-item{position:relative;padding:1.1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-item-bg, #ffffff);transition:background .15s ease}.pt-release-notes-page-item:last-child{border-bottom:0}.pt-release-notes-page-item:hover{background:var(--pt-release-notes-page-item-hover-bg, #f9fafb)}.pt-release-notes-page-item.unread{background:var(--pt-release-notes-page-unread-bg, #faf8fd)}.pt-release-notes-page-item.unread:hover{background:var(--pt-release-notes-page-unread-hover-bg, #f6f2fa)}.pt-release-notes-page-item.disabled{opacity:.55}.pt-release-notes-page-item-top{position:relative;display:flex;align-items:flex-start;gap:1rem}.pt-release-notes-page-item-icon-wrapper{flex:0 0 auto}.pt-release-notes-page-item-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-item-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:1rem}.pt-release-notes-page-item-content{flex:1 1 auto;min-width:0}.pt-release-notes-page-version-row{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem}.pt-release-notes-page-version{display:inline-flex;align-items:center;padding:.25rem .55rem;border-radius:6px;background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:800}.pt-release-notes-page-item-title{color:var(--pt-release-notes-page-text-color, #1f2937);font-size:.9rem;font-weight:700}.pt-release-notes-page-summary{margin-top:.45rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.85rem;line-height:1.5}.pt-release-notes-page-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:1rem;margin-top:.5rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.78rem}.pt-release-notes-page-metadata span{display:inline-flex;align-items:center;gap:.35rem}.pt-release-notes-page-stats{display:flex;align-items:center;flex-wrap:wrap;gap:.45rem;margin-top:.8rem}.pt-release-notes-page-stat{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border-radius:999px;font-size:.72rem;font-weight:600}.pt-release-notes-page-stat.new{background:#dcfce7;color:#15803d}.pt-release-notes-page-stat.improvement{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-stat.bug-fix{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-unread-indicator{position:absolute;top:50%;right:-1rem;width:7px;height:7px;border-radius:50%;background:var(--pt-release-notes-page-unread-indicator, #3f2564);transform:translateY(-50%)}.pt-release-notes-page-details{display:flex;flex-direction:column;gap:1rem;margin-top:1rem;margin-left:58px;padding-top:1rem;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-detail-section{overflow:hidden;border:1px solid #e5e7eb;border-radius:10px;background:#fff}.pt-release-notes-page-detail-section-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.65rem .85rem;border-bottom:1px solid #e5e7eb}.pt-release-notes-page-detail-section-title{display:flex;align-items:center;gap:.55rem;font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.015em}.pt-release-notes-page-detail-section-icon{display:inline-flex;align-items:center;justify-content:center;width:27px;height:27px;border-radius:7px}.pt-release-notes-page-detail-section-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 .4rem;border-radius:999px;font-size:.7rem;font-weight:800}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-header{background:#f0fdf4}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-title{color:#15803d}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-count{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-header{background:#eff6ff}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-title{color:#1d4ed8}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-count{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-header{background:#fef2f2}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-title{color:#b91c1c}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-count{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-section-content{display:flex;flex-direction:column;padding:.35rem}.pt-release-notes-page-detail{display:flex;align-items:flex-start;gap:.75rem;width:100%;padding:.7rem;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.pt-release-notes-page-detail:hover:not(:disabled){background:#f9fafb}.pt-release-notes-page-detail.disabled{opacity:.55;cursor:default}.pt-release-notes-page-detail-icon{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-icon{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-icon{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-icon{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-content{flex:1;min-width:0}.pt-release-notes-page-detail-title{color:#1f2937;font-size:.84rem;font-weight:700}.pt-release-notes-page-detail-description{margin-top:.25rem;color:#6b7280;font-size:.78rem;line-height:1.5}.pt-release-notes-page-detail-link{flex:0 0 auto;align-self:center;color:#6b7280;font-size:.72rem}.pt-release-notes-page-details-action{display:flex;justify-content:center;margin-top:.8rem;margin-left:58px}.pt-release-notes-page-details-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.45rem .75rem;border:0;border-radius:7px;background:transparent;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer}.pt-release-notes-page-details-button:hover:not(:disabled){background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-details-button:disabled{opacity:.5;cursor:default}.pt-release-notes-page-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;padding:3rem;color:#6b7280;text-align:center}.pt-release-notes-page-empty-icon{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin-bottom:1rem;border-radius:50%;background:#f3f4f6;color:#9ca3af;font-size:1.6rem}.pt-release-notes-page-empty-text{max-width:450px;font-size:.9rem}.pt-release-notes-page-loading{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:100px;color:#6b7280;font-size:.85rem}.pt-release-notes-page-pagination{display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem 1rem;box-sizing:border-box;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-pagination-bg, #ffffff)}.pt-release-notes-page-pagination ::ng-deep .p-paginator{width:100%;border:0;background:transparent}@media(max-width:768px){.pt-release-notes-page-header,.pt-release-notes-page-toolbar,.pt-release-notes-page-toolbar-left{flex-direction:column;align-items:stretch}.pt-release-notes-page-filters{overflow-x:auto}.pt-release-notes-page-expand-all{align-self:flex-start}.pt-release-notes-page-search{width:100%}.pt-release-notes-page-item{padding:1rem 1.1rem}.pt-release-notes-page-details,.pt-release-notes-page-details-action{margin-left:0}.pt-release-notes-page-unread-indicator{right:0}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2$6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "appendTo"], outputs: ["onPageChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12881
12974
|
}
|
|
12882
12975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PTReleaseNotesPageComponent, decorators: [{
|
|
12883
12976
|
type: Component,
|
|
12884
|
-
args: [{ selector: 'pt-release-notes-page', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (resolvedConfig.visible) {\n <div class=\"pt-release-notes-page\">\n <div class=\"pt-release-notes-page-header\">\n <div class=\"pt-release-notes-page-heading\">\n <div class=\"pt-release-notes-page-title-row\">\n <div class=\"pt-release-notes-page-title-icon\">\n <i [class]=\"resolvedConfig.icon\"></i>\n </div>\n\n <div>\n <h2 class=\"pt-release-notes-page-title\">\n {{ getTitle() }}\n </h2>\n\n <div class=\"pt-release-notes-page-subtitle\">\n {{ getSubtitle() }}\n </div>\n </div>\n </div>\n\n @if (showCounters()) {\n <div class=\"pt-release-notes-page-counters\">\n <span class=\"pt-release-notes-page-counter\">\n {{ getTotalCount() }}\n version(s)\n </span>\n\n @if (getUnreadCount() > 0) {\n <span class=\"pt-release-notes-page-counter unread\">\n {{ getUnreadCount() }}\n non lue(s)\n </span>\n }\n\n @if (getReadCount() > 0) {\n <span class=\"pt-release-notes-page-counter read\">\n {{ getReadCount() }}\n lue(s)\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-toolbar\">\n <div class=\"pt-release-notes-page-filters\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('ALL')\"\n (click)=\"selectFilter('ALL')\"\n >\n {{ getAllLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getTotalCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('UNREAD')\"\n (click)=\"selectFilter('UNREAD')\"\n >\n {{ getUnreadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getUnreadCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('READ')\"\n (click)=\"selectFilter('READ')\"\n >\n {{ getReadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getReadCount() }}\n </span>\n </button>\n </div>\n\n <div class=\"pt-release-notes-page-search\">\n <i class=\"pi pi-search\"></i>\n\n <input\n type=\"text\"\n [value]=\"searchText\"\n [placeholder]=\"getSearchPlaceholder()\"\n (input)=\"onSearch($any($event.target).value)\"\n />\n\n @if (hasSearch()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-search-clear\"\n aria-label=\"Effacer la recherche\"\n (click)=\"clearSearch()\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n\n @if (hasReleases()) {\n <div class=\"pt-release-notes-page-list\">\n @for (release of getDisplayedReleases(); track release.id) {\n <div [class]=\"getReleaseClasses(release)\">\n <div class=\"pt-release-notes-page-item-top\">\n <div class=\"pt-release-notes-page-item-icon-wrapper\">\n <div class=\"pt-release-notes-page-item-icon\">\n <i class=\"pi pi-sparkles\"></i>\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-item-content\">\n <div class=\"pt-release-notes-page-version-row\">\n <span class=\"pt-release-notes-page-version\">\n v{{ release.version }}\n </span>\n\n <span class=\"pt-release-notes-page-item-title\">\n {{ release.title }}\n </span>\n </div>\n\n @if (release.summary) {\n <div class=\"pt-release-notes-page-summary\">\n {{ release.summary }}\n </div>\n }\n\n @if (release.date) {\n <div class=\"pt-release-notes-page-metadata\">\n <span>\n <i class=\"pi pi-calendar\"></i>\n\n {{ release.date | date: \"dd/MM/yyyy\" }}\n </span>\n </div>\n }\n\n @if (hasCounters(release)) {\n <div class=\"pt-release-notes-page-stats\">\n @if (hasNewItems(release)) {\n <span class=\"pt-release-notes-page-stat new\">\n <i class=\"pi pi-plus-circle\"></i>\n\n <strong>\n {{ getNewCount(release) }}\n </strong>\n\n {{ resolvedConfig.newLabel }}\n </span>\n }\n\n @if (hasImprovements(release)) {\n <span class=\"pt-release-notes-page-stat improvement\">\n <i class=\"pi pi-arrow-up-right\"></i>\n\n <strong>\n {{ getImprovementCount(release) }}\n </strong>\n\n {{ resolvedConfig.improvementLabel }}\n </span>\n }\n\n @if (hasBugFixes(release)) {\n <span class=\"pt-release-notes-page-stat bug-fix\">\n <i class=\"pi pi-wrench\"></i>\n\n <strong>\n {{ getBugFixCount(release) }}\n </strong>\n\n {{ resolvedConfig.bugFixLabel }}\n </span>\n }\n </div>\n }\n </div>\n\n @if (release.read !== true) {\n <span class=\"pt-release-notes-page-unread-indicator\"></span>\n }\n </div>\n\n @if (hasDetails(release) && isDetailsExpanded(release)) {\n <div class=\"pt-release-notes-page-details\">\n @for (detail of getDetails(release); track detail.id) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"[\n getDetailClass(detail),\n detail.styleClass || '',\n ]\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-type\">\n {{ getDetailTypeLabel(detail) }}\n </div>\n\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div class=\"pt-release-notes-page-detail-description\">\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n }\n\n @if (hasDetails(release)) {\n <div class=\"pt-release-notes-page-details-action\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-details-button\"\n [disabled]=\"release.disabled\"\n (click)=\"toggleDetails(release)\"\n >\n <span>\n {{ getDetailsButtonText(release) }}\n </span>\n\n <i\n class=\"pi\"\n [ngClass]=\"\n isDetailsExpanded(release)\n ? 'pi-chevron-up'\n : 'pi-chevron-down'\n \"\n ></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n } @else if (!loading) {\n <div class=\"pt-release-notes-page-empty\">\n <div class=\"pt-release-notes-page-empty-icon\">\n <i [class]=\"getEmptyIcon()\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-empty-text\">\n @if (hasSearch()) {\n {{ getNoSearchResultText() }}\n } @else {\n {{ getEmptyText() }}\n }\n </div>\n </div>\n }\n\n @if (loading) {\n <div class=\"pt-release-notes-page-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n\n <span>\n {{ resolvedConfig.loadingText }}\n </span>\n </div>\n }\n\n @if (showPagination()) {\n <div class=\"pt-release-notes-page-pagination\">\n <p-paginator\n [first]=\"getFirst()\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"getRowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [currentPageReportTemplate]=\"getCurrentPageReportTemplate()\"\n (onPageChange)=\"onPageChange($event)\"\n ></p-paginator>\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%}.pt-release-notes-page{position:relative;width:100%;background:var(--pt-release-notes-page-bg, #ffffff);border:1px solid var(--pt-release-notes-page-border, #e5e7eb);border-radius:14px;overflow:visible}.pt-release-notes-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-heading{display:flex;flex-direction:column;gap:.85rem}.pt-release-notes-page-title-row{display:flex;align-items:center;gap:.8rem}.pt-release-notes-page-title-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-title-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-title-icon-color, #3f2564);font-size:1.15rem}.pt-release-notes-page-title{margin:0;color:var(--pt-release-notes-page-title-color, #1f2937);font-size:1.25rem;font-weight:700}.pt-release-notes-page-subtitle{margin-top:.2rem;color:var(--pt-release-notes-page-subtitle-color, #6b7280);font-size:.875rem}.pt-release-notes-page-counters{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.pt-release-notes-page-counter{display:inline-flex;align-items:center;padding:.3rem .65rem;border-radius:999px;background:var(--pt-release-notes-page-counter-bg, #f3f4f6);color:var(--pt-release-notes-page-counter-color, #4b5563);font-size:.78rem;font-weight:600}.pt-release-notes-page-counter.unread{background:var(--pt-release-notes-page-unread-counter-bg, #f3f0f8);color:var(--pt-release-notes-page-unread-counter-color, #3f2564)}.pt-release-notes-page-counter.read{background:var(--pt-release-notes-page-read-counter-bg, #ecfdf5);color:var(--pt-release-notes-page-read-counter-color, #15803d)}.pt-release-notes-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-filters{display:flex;align-items:center;gap:.4rem}.pt-release-notes-page-filter{display:flex;align-items:center;gap:.45rem;padding:.5rem .85rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:var(--pt-release-notes-page-filter-bg, #ffffff);color:var(--pt-release-notes-page-filter-color, #4b5563);font-size:.82rem;font-weight:600;cursor:pointer}.pt-release-notes-page-filter:hover{background:#f9fafb}.pt-release-notes-page-filter.selected{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564)}.pt-release-notes-page-filter-count{min-width:20px;padding:.1rem .35rem;border-radius:999px;background:#0000000d;text-align:center;font-size:.72rem}.pt-release-notes-page-search{position:relative;display:flex;align-items:center;width:min(360px,100%)}.pt-release-notes-page-search>.pi-search{position:absolute;left:.85rem;color:#9ca3af}.pt-release-notes-page-search input{width:100%;padding:.65rem 2.5rem .65rem 2.4rem;border:1px solid #d1d5db;border-radius:8px;outline:none;font-size:.85rem}.pt-release-notes-page-search input:focus{border-color:var(--pt-release-notes-page-primary, #3f2564);box-shadow:0 0 0 2px #3f256414}.pt-release-notes-page-search-clear{position:absolute;right:.6rem;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;color:#6b7280;cursor:pointer}.pt-release-notes-page-list{width:100%}.pt-release-notes-page-item{position:relative;padding:1.1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-item-bg, #ffffff);transition:background .15s ease}.pt-release-notes-page-item:last-child{border-bottom:0}.pt-release-notes-page-item:hover{background:var(--pt-release-notes-page-item-hover-bg, #f9fafb)}.pt-release-notes-page-item.unread{background:var(--pt-release-notes-page-unread-bg, #faf8fd)}.pt-release-notes-page-item.unread:hover{background:var(--pt-release-notes-page-unread-hover-bg, #f6f2fa)}.pt-release-notes-page-item.disabled{opacity:.55}.pt-release-notes-page-item-top{position:relative;display:flex;align-items:flex-start;gap:1rem}.pt-release-notes-page-item-icon-wrapper{flex:0 0 auto}.pt-release-notes-page-item-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-item-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:1rem}.pt-release-notes-page-item-content{flex:1 1 auto;min-width:0}.pt-release-notes-page-version-row{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem}.pt-release-notes-page-version{display:inline-flex;align-items:center;padding:.25rem .55rem;border-radius:6px;background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:800}.pt-release-notes-page-item-title{color:var(--pt-release-notes-page-text-color, #1f2937);font-size:.9rem;font-weight:700}.pt-release-notes-page-item.unread .pt-release-notes-page-item-title{font-weight:700}.pt-release-notes-page-summary{margin-top:.45rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.85rem;line-height:1.5}.pt-release-notes-page-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:1rem;margin-top:.5rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.78rem}.pt-release-notes-page-metadata span{display:inline-flex;align-items:center;gap:.35rem}.pt-release-notes-page-stats{display:flex;align-items:center;flex-wrap:wrap;gap:.45rem;margin-top:.8rem}.pt-release-notes-page-stat{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border-radius:999px;font-size:.72rem;font-weight:600}.pt-release-notes-page-stat.new{background:#dcfce7;color:#15803d}.pt-release-notes-page-stat.improvement{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-stat.bug-fix{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-unread-indicator{position:absolute;top:50%;right:-1rem;width:7px;height:7px;border-radius:50%;background:var(--pt-release-notes-page-unread-indicator, #3f2564);transform:translateY(-50%)}.pt-release-notes-page-details{display:flex;flex-direction:column;gap:.35rem;margin-top:1rem;margin-left:58px;padding-top:1rem;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-detail{display:flex;align-items:flex-start;gap:.75rem;width:100%;padding:.7rem;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.pt-release-notes-page-detail:hover:not(:disabled){background:#f9fafb}.pt-release-notes-page-detail.disabled{opacity:.55;cursor:default}.pt-release-notes-page-detail-icon{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-icon{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-icon{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-icon{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-content{flex:1;min-width:0}.pt-release-notes-page-detail-type{margin-bottom:.2rem;font-size:.68rem;font-weight:700;text-transform:uppercase}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-type{color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-type{color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-type{color:#b91c1c}.pt-release-notes-page-detail-title{color:#1f2937;font-size:.84rem;font-weight:700}.pt-release-notes-page-detail-description{margin-top:.25rem;color:#6b7280;font-size:.78rem;line-height:1.5}.pt-release-notes-page-detail-link{flex:0 0 auto;align-self:center;color:#6b7280;font-size:.72rem}.pt-release-notes-page-details-action{display:flex;justify-content:center;margin-top:.8rem;margin-left:58px}.pt-release-notes-page-details-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.45rem .75rem;border:0;border-radius:7px;background:transparent;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer}.pt-release-notes-page-details-button:hover:not(:disabled){background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-details-button:disabled{opacity:.5;cursor:default}.pt-release-notes-page-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;padding:3rem;color:#6b7280;text-align:center}.pt-release-notes-page-empty-icon{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin-bottom:1rem;border-radius:50%;background:#f3f4f6;color:#9ca3af;font-size:1.6rem}.pt-release-notes-page-empty-text{max-width:450px;font-size:.9rem}.pt-release-notes-page-loading{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:100px;color:#6b7280;font-size:.85rem}.pt-release-notes-page-pagination{display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem 1rem;box-sizing:border-box;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-pagination-bg, #ffffff)}.pt-release-notes-page-pagination ::ng-deep .p-paginator{width:100%;border:0;background:transparent}@media(max-width:768px){.pt-release-notes-page-header,.pt-release-notes-page-toolbar{flex-direction:column;align-items:stretch}.pt-release-notes-page-filters{overflow-x:auto}.pt-release-notes-page-search{width:100%}.pt-release-notes-page-item{padding:1rem 1.1rem}.pt-release-notes-page-details,.pt-release-notes-page-details-action{margin-left:0}.pt-release-notes-page-unread-indicator{right:0}}\n"] }]
|
|
12977
|
+
args: [{ selector: 'pt-release-notes-page', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (resolvedConfig.visible) {\n <div class=\"pt-release-notes-page\">\n <div class=\"pt-release-notes-page-header\">\n <div class=\"pt-release-notes-page-heading\">\n <div class=\"pt-release-notes-page-title-row\">\n <div class=\"pt-release-notes-page-title-icon\">\n <i [class]=\"resolvedConfig.icon\"></i>\n </div>\n\n <div>\n <h2 class=\"pt-release-notes-page-title\">\n {{ getTitle() }}\n </h2>\n\n <div class=\"pt-release-notes-page-subtitle\">\n {{ getSubtitle() }}\n </div>\n </div>\n </div>\n\n @if (showCounters()) {\n <div class=\"pt-release-notes-page-counters\">\n <span class=\"pt-release-notes-page-counter\">\n {{ getTotalCount() }}\n version(s)\n </span>\n\n @if (getUnreadCount() > 0) {\n <span class=\"pt-release-notes-page-counter unread\">\n {{ getUnreadCount() }}\n non lue(s)\n </span>\n }\n\n @if (getReadCount() > 0) {\n <span class=\"pt-release-notes-page-counter read\">\n {{ getReadCount() }}\n lue(s)\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-toolbar\">\n <div class=\"pt-release-notes-page-toolbar-left\">\n <div class=\"pt-release-notes-page-filters\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('ALL')\"\n (click)=\"selectFilter('ALL')\"\n >\n {{ getAllLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getTotalCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('UNREAD')\"\n (click)=\"selectFilter('UNREAD')\"\n >\n {{ getUnreadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getUnreadCount() }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"pt-release-notes-page-filter\"\n [class.selected]=\"isFilterSelected('READ')\"\n (click)=\"selectFilter('READ')\"\n >\n {{ getReadLabel() }}\n\n <span class=\"pt-release-notes-page-filter-count\">\n {{ getReadCount() }}\n </span>\n </button>\n </div>\n\n @if (hasExpandableReleases()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-expand-all\"\n [class.expanded]=\"areAllDetailsExpanded()\"\n (click)=\"toggleAllDetails()\"\n >\n <i\n class=\"pi\"\n [ngClass]=\"\n areAllDetailsExpanded()\n ? 'pi-angle-double-up'\n : 'pi-angle-double-down'\n \"\n ></i>\n\n <span>\n {{ getToggleAllDetailsText() }}\n </span>\n </button>\n }\n </div>\n\n <div class=\"pt-release-notes-page-search\">\n <i class=\"pi pi-search\"></i>\n\n <input\n type=\"text\"\n [value]=\"searchText\"\n [placeholder]=\"getSearchPlaceholder()\"\n (input)=\"onSearch($any($event.target).value)\"\n />\n\n @if (hasSearch()) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-search-clear\"\n aria-label=\"Effacer la recherche\"\n (click)=\"clearSearch()\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n\n @if (hasReleases()) {\n <div class=\"pt-release-notes-page-list\">\n @for (release of getDisplayedReleases(); track release.id) {\n <div [class]=\"getReleaseClasses(release)\">\n <div class=\"pt-release-notes-page-item-top\">\n <div class=\"pt-release-notes-page-item-icon-wrapper\">\n <div class=\"pt-release-notes-page-item-icon\">\n <i class=\"pi pi-sparkles\"></i>\n </div>\n </div>\n\n <div class=\"pt-release-notes-page-item-content\">\n <div class=\"pt-release-notes-page-version-row\">\n <span class=\"pt-release-notes-page-version\">\n v{{ release.version }}\n </span>\n\n <span class=\"pt-release-notes-page-item-title\">\n {{ release.title }}\n </span>\n </div>\n\n @if (release.summary) {\n <div class=\"pt-release-notes-page-summary\">\n {{ release.summary }}\n </div>\n }\n\n @if (release.date) {\n <div class=\"pt-release-notes-page-metadata\">\n <span>\n <i class=\"pi pi-calendar\"></i>\n\n {{ release.date | date: \"dd/MM/yyyy\" }}\n </span>\n </div>\n }\n\n @if (hasCounters(release)) {\n <div class=\"pt-release-notes-page-stats\">\n @if (hasNewItems(release)) {\n <span class=\"pt-release-notes-page-stat new\">\n <i class=\"pi pi-plus-circle\"></i>\n\n <strong>\n {{ getNewCount(release) }}\n </strong>\n\n {{ resolvedConfig.newLabel }}\n </span>\n }\n\n @if (hasImprovements(release)) {\n <span class=\"pt-release-notes-page-stat improvement\">\n <i class=\"pi pi-arrow-up-right\"></i>\n\n <strong>\n {{ getImprovementCount(release) }}\n </strong>\n\n {{ resolvedConfig.improvementLabel }}\n </span>\n }\n\n @if (hasBugFixes(release)) {\n <span class=\"pt-release-notes-page-stat bug-fix\">\n <i class=\"pi pi-wrench\"></i>\n\n <strong>\n {{ getBugFixCount(release) }}\n </strong>\n\n {{ resolvedConfig.bugFixLabel }}\n </span>\n }\n </div>\n }\n </div>\n\n @if (release.read !== true) {\n <span class=\"pt-release-notes-page-unread-indicator\"></span>\n }\n </div>\n\n @if (hasDetails(release) && isDetailsExpanded(release)) {\n <div class=\"pt-release-notes-page-details\">\n @if (hasDetailsByType(release, \"NEW\")) {\n <section class=\"pt-release-notes-page-detail-section new\">\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-plus-circle\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.newLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"NEW\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"NEW\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail new\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n\n @if (hasDetailsByType(release, \"IMPROVEMENT\")) {\n <section\n class=\"pt-release-notes-page-detail-section improvement\"\n >\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-arrow-up-right\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.improvementLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"IMPROVEMENT\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"IMPROVEMENT\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail improvement\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n\n @if (hasDetailsByType(release, \"BUG_FIX\")) {\n <section class=\"pt-release-notes-page-detail-section bug-fix\">\n <div class=\"pt-release-notes-page-detail-section-header\">\n <div class=\"pt-release-notes-page-detail-section-title\">\n <span class=\"pt-release-notes-page-detail-section-icon\">\n <i class=\"pi pi-wrench\"></i>\n </span>\n\n <span>\n {{ resolvedConfig.bugFixLabel }}\n </span>\n </div>\n\n <span class=\"pt-release-notes-page-detail-section-count\">\n {{ getDetailsByType(release, \"BUG_FIX\").length }}\n </span>\n </div>\n\n <div class=\"pt-release-notes-page-detail-section-content\">\n @for (\n detail of getDetailsByType(release, \"BUG_FIX\");\n track detail.id\n ) {\n <button\n type=\"button\"\n class=\"pt-release-notes-page-detail bug-fix\"\n [class.disabled]=\"detail.disabled\"\n [ngClass]=\"detail.styleClass || ''\"\n [disabled]=\"detail.disabled\"\n (click)=\"onDetailClick(detail, $event)\"\n >\n <div class=\"pt-release-notes-page-detail-icon\">\n <i [ngClass]=\"getDetailIcon(detail)\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-detail-content\">\n <div class=\"pt-release-notes-page-detail-title\">\n {{ detail.title }}\n </div>\n\n @if (detail.description) {\n <div\n class=\"pt-release-notes-page-detail-description\"\n >\n {{ detail.description }}\n </div>\n }\n </div>\n\n @if (detail.link) {\n <i\n class=\"pi pi-arrow-right pt-release-notes-page-detail-link\"\n ></i>\n }\n </button>\n }\n </div>\n </section>\n }\n </div>\n }\n\n @if (hasDetails(release)) {\n <div class=\"pt-release-notes-page-details-action\">\n <button\n type=\"button\"\n class=\"pt-release-notes-page-details-button\"\n [disabled]=\"release.disabled\"\n (click)=\"toggleDetails(release)\"\n >\n <span>\n {{ getDetailsButtonText(release) }}\n </span>\n\n <i\n class=\"pi\"\n [ngClass]=\"\n isDetailsExpanded(release)\n ? 'pi-chevron-up'\n : 'pi-chevron-down'\n \"\n ></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n } @else if (!loading) {\n <div class=\"pt-release-notes-page-empty\">\n <div class=\"pt-release-notes-page-empty-icon\">\n <i [class]=\"getEmptyIcon()\"></i>\n </div>\n\n <div class=\"pt-release-notes-page-empty-text\">\n @if (hasSearch()) {\n {{ getNoSearchResultText() }}\n } @else {\n {{ getEmptyText() }}\n }\n </div>\n </div>\n }\n\n @if (loading) {\n <div class=\"pt-release-notes-page-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n\n <span>\n {{ resolvedConfig.loadingText }}\n </span>\n </div>\n }\n\n @if (showPagination()) {\n <div class=\"pt-release-notes-page-pagination\">\n <p-paginator\n [first]=\"getFirst()\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"getRowsPerPageOptions()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n [currentPageReportTemplate]=\"getCurrentPageReportTemplate()\"\n (onPageChange)=\"onPageChange($event)\"\n ></p-paginator>\n </div>\n }\n </div>\n}\n", styles: [":host{display:block;width:100%}.pt-release-notes-page{position:relative;width:100%;background:var(--pt-release-notes-page-bg, #ffffff);border:1px solid var(--pt-release-notes-page-border, #e5e7eb);border-radius:14px;overflow:visible}.pt-release-notes-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-heading{display:flex;flex-direction:column;gap:.85rem}.pt-release-notes-page-title-row{display:flex;align-items:center;gap:.8rem}.pt-release-notes-page-title-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-title-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-title-icon-color, #3f2564);font-size:1.15rem}.pt-release-notes-page-title{margin:0;color:var(--pt-release-notes-page-title-color, #1f2937);font-size:1.25rem;font-weight:700}.pt-release-notes-page-subtitle{margin-top:.2rem;color:var(--pt-release-notes-page-subtitle-color, #6b7280);font-size:.875rem}.pt-release-notes-page-counters{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.pt-release-notes-page-counter{display:inline-flex;align-items:center;padding:.3rem .65rem;border-radius:999px;background:var(--pt-release-notes-page-counter-bg, #f3f4f6);color:var(--pt-release-notes-page-counter-color, #4b5563);font-size:.78rem;font-weight:600}.pt-release-notes-page-counter.unread{background:var(--pt-release-notes-page-unread-counter-bg, #f3f0f8);color:var(--pt-release-notes-page-unread-counter-color, #3f2564)}.pt-release-notes-page-counter.read{background:var(--pt-release-notes-page-read-counter-bg, #ecfdf5);color:var(--pt-release-notes-page-read-counter-color, #15803d)}.pt-release-notes-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-toolbar-left{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;min-width:0}.pt-release-notes-page-filters{display:flex;align-items:center;gap:.4rem}.pt-release-notes-page-filter{display:flex;align-items:center;gap:.45rem;padding:.5rem .85rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:var(--pt-release-notes-page-filter-bg, #ffffff);color:var(--pt-release-notes-page-filter-color, #4b5563);font-size:.82rem;font-weight:600;cursor:pointer}.pt-release-notes-page-filter:hover{background:#f9fafb}.pt-release-notes-page-filter.selected{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564)}.pt-release-notes-page-filter-count{min-width:20px;padding:.1rem .35rem;border-radius:999px;background:#0000000d;text-align:center;font-size:.72rem}.pt-release-notes-page-expand-all{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;min-height:34px;padding:.45rem .75rem;border:1px solid var(--pt-release-notes-page-filter-border, #e5e7eb);border-radius:8px;background:#fff;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer;transition:background .15s ease,border-color .15s ease}.pt-release-notes-page-expand-all:hover,.pt-release-notes-page-expand-all.expanded{border-color:var(--pt-release-notes-page-primary, #3f2564);background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-search{position:relative;display:flex;align-items:center;width:min(360px,100%)}.pt-release-notes-page-search>.pi-search{position:absolute;left:.85rem;color:#9ca3af}.pt-release-notes-page-search input{width:100%;padding:.65rem 2.5rem .65rem 2.4rem;border:1px solid #d1d5db;border-radius:8px;outline:none;font-size:.85rem}.pt-release-notes-page-search input:focus{border-color:var(--pt-release-notes-page-primary, #3f2564);box-shadow:0 0 0 2px #3f256414}.pt-release-notes-page-search-clear{position:absolute;right:.6rem;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:0;background:transparent;color:#6b7280;cursor:pointer}.pt-release-notes-page-list{width:100%}.pt-release-notes-page-item{position:relative;padding:1.1rem 1.5rem;border-bottom:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-item-bg, #ffffff);transition:background .15s ease}.pt-release-notes-page-item:last-child{border-bottom:0}.pt-release-notes-page-item:hover{background:var(--pt-release-notes-page-item-hover-bg, #f9fafb)}.pt-release-notes-page-item.unread{background:var(--pt-release-notes-page-unread-bg, #faf8fd)}.pt-release-notes-page-item.unread:hover{background:var(--pt-release-notes-page-unread-hover-bg, #f6f2fa)}.pt-release-notes-page-item.disabled{opacity:.55}.pt-release-notes-page-item-top{position:relative;display:flex;align-items:flex-start;gap:1rem}.pt-release-notes-page-item-icon-wrapper{flex:0 0 auto}.pt-release-notes-page-item-icon{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--pt-release-notes-page-item-icon-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:1rem}.pt-release-notes-page-item-content{flex:1 1 auto;min-width:0}.pt-release-notes-page-version-row{display:flex;align-items:center;flex-wrap:wrap;gap:.65rem}.pt-release-notes-page-version{display:inline-flex;align-items:center;padding:.25rem .55rem;border-radius:6px;background:var(--pt-release-notes-page-selected-bg, #f3f0f8);color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:800}.pt-release-notes-page-item-title{color:var(--pt-release-notes-page-text-color, #1f2937);font-size:.9rem;font-weight:700}.pt-release-notes-page-summary{margin-top:.45rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.85rem;line-height:1.5}.pt-release-notes-page-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:1rem;margin-top:.5rem;color:var(--pt-release-notes-page-metadata-color, #6b7280);font-size:.78rem}.pt-release-notes-page-metadata span{display:inline-flex;align-items:center;gap:.35rem}.pt-release-notes-page-stats{display:flex;align-items:center;flex-wrap:wrap;gap:.45rem;margin-top:.8rem}.pt-release-notes-page-stat{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;border-radius:999px;font-size:.72rem;font-weight:600}.pt-release-notes-page-stat.new{background:#dcfce7;color:#15803d}.pt-release-notes-page-stat.improvement{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-stat.bug-fix{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-unread-indicator{position:absolute;top:50%;right:-1rem;width:7px;height:7px;border-radius:50%;background:var(--pt-release-notes-page-unread-indicator, #3f2564);transform:translateY(-50%)}.pt-release-notes-page-details{display:flex;flex-direction:column;gap:1rem;margin-top:1rem;margin-left:58px;padding-top:1rem;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb)}.pt-release-notes-page-detail-section{overflow:hidden;border:1px solid #e5e7eb;border-radius:10px;background:#fff}.pt-release-notes-page-detail-section-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.65rem .85rem;border-bottom:1px solid #e5e7eb}.pt-release-notes-page-detail-section-title{display:flex;align-items:center;gap:.55rem;font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.015em}.pt-release-notes-page-detail-section-icon{display:inline-flex;align-items:center;justify-content:center;width:27px;height:27px;border-radius:7px}.pt-release-notes-page-detail-section-count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 .4rem;border-radius:999px;font-size:.7rem;font-weight:800}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-header{background:#f0fdf4}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-title{color:#15803d}.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.new .pt-release-notes-page-detail-section-count{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-header{background:#eff6ff}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-title{color:#1d4ed8}.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.improvement .pt-release-notes-page-detail-section-count{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-header{background:#fef2f2}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-title{color:#b91c1c}.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-icon,.pt-release-notes-page-detail-section.bug-fix .pt-release-notes-page-detail-section-count{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-section-content{display:flex;flex-direction:column;padding:.35rem}.pt-release-notes-page-detail{display:flex;align-items:flex-start;gap:.75rem;width:100%;padding:.7rem;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.pt-release-notes-page-detail:hover:not(:disabled){background:#f9fafb}.pt-release-notes-page-detail.disabled{opacity:.55;cursor:default}.pt-release-notes-page-detail-icon{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px}.pt-release-notes-page-detail.new .pt-release-notes-page-detail-icon{background:#dcfce7;color:#15803d}.pt-release-notes-page-detail.improvement .pt-release-notes-page-detail-icon{background:#dbeafe;color:#1d4ed8}.pt-release-notes-page-detail.bug-fix .pt-release-notes-page-detail-icon{background:#fee2e2;color:#b91c1c}.pt-release-notes-page-detail-content{flex:1;min-width:0}.pt-release-notes-page-detail-title{color:#1f2937;font-size:.84rem;font-weight:700}.pt-release-notes-page-detail-description{margin-top:.25rem;color:#6b7280;font-size:.78rem;line-height:1.5}.pt-release-notes-page-detail-link{flex:0 0 auto;align-self:center;color:#6b7280;font-size:.72rem}.pt-release-notes-page-details-action{display:flex;justify-content:center;margin-top:.8rem;margin-left:58px}.pt-release-notes-page-details-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.45rem .75rem;border:0;border-radius:7px;background:transparent;color:var(--pt-release-notes-page-primary, #3f2564);font-size:.78rem;font-weight:700;cursor:pointer}.pt-release-notes-page-details-button:hover:not(:disabled){background:var(--pt-release-notes-page-selected-bg, #f3f0f8)}.pt-release-notes-page-details-button:disabled{opacity:.5;cursor:default}.pt-release-notes-page-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:280px;padding:3rem;color:#6b7280;text-align:center}.pt-release-notes-page-empty-icon{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin-bottom:1rem;border-radius:50%;background:#f3f4f6;color:#9ca3af;font-size:1.6rem}.pt-release-notes-page-empty-text{max-width:450px;font-size:.9rem}.pt-release-notes-page-loading{display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:100px;color:#6b7280;font-size:.85rem}.pt-release-notes-page-pagination{display:flex;align-items:center;justify-content:center;width:100%;padding:.75rem 1rem;box-sizing:border-box;border-top:1px solid var(--pt-release-notes-page-border, #e5e7eb);background:var(--pt-release-notes-page-pagination-bg, #ffffff)}.pt-release-notes-page-pagination ::ng-deep .p-paginator{width:100%;border:0;background:transparent}@media(max-width:768px){.pt-release-notes-page-header,.pt-release-notes-page-toolbar,.pt-release-notes-page-toolbar-left{flex-direction:column;align-items:stretch}.pt-release-notes-page-filters{overflow-x:auto}.pt-release-notes-page-expand-all{align-self:flex-start}.pt-release-notes-page-search{width:100%}.pt-release-notes-page-item{padding:1rem 1.1rem}.pt-release-notes-page-details,.pt-release-notes-page-details-action{margin-left:0}.pt-release-notes-page-unread-indicator{right:0}}\n"] }]
|
|
12885
12978
|
}], ctorParameters: () => [], propDecorators: { releases: [{
|
|
12886
12979
|
type: Input
|
|
12887
12980
|
}], loading: [{
|
|
@@ -12898,6 +12991,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
12898
12991
|
type: Input
|
|
12899
12992
|
}], rows: [{
|
|
12900
12993
|
type: Input
|
|
12994
|
+
}], rowsPerPageOptions: [{
|
|
12995
|
+
type: Input
|
|
12901
12996
|
}], config: [{
|
|
12902
12997
|
type: Input
|
|
12903
12998
|
}], queryChange: [{
|