@ng-nest/ui 19.0.2 → 19.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/color-picker/color-picker-portal.component.d.ts +3 -2
- package/color-picker/color-picker.component.d.ts +1 -2
- package/core/interfaces/identify.type.d.ts +5 -0
- package/fesm2022/ng-nest-ui-color-picker.mjs +7 -8
- package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-comment.mjs +7 -8
- package/fesm2022/ng-nest-ui-comment.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-icon.mjs +33 -65
- package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tree.mjs +34 -13
- package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
- package/icon/icon.component.d.ts +3 -8
- package/icon/icon.service.d.ts +6 -2
- package/package.json +46 -46
- package/tree/tree.component.d.ts +1 -0
- package/tree/tree.property.d.ts +28 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, output, Component, signal, ViewEncapsulation, ChangeDetectionStrategy, computed, NgModule } from '@angular/core';
|
|
3
|
-
import { XPropertyFunction, XToDataArray, XToNumber, XIsEmpty
|
|
3
|
+
import { XPropertyFunction, XToDataArray, XToNumber, XIsEmpty } from '@ng-nest/ui/core';
|
|
4
4
|
import { XI18nPipe } from '@ng-nest/ui/i18n';
|
|
5
5
|
import { XAvatarComponent } from '@ng-nest/ui/avatar';
|
|
6
6
|
import { XButtonComponent, XButtonsComponent } from '@ng-nest/ui/button';
|
|
@@ -107,19 +107,17 @@ class XCommentReplyComponent extends XCommentReplyProperty {
|
|
|
107
107
|
this.sureClick.emit(this.inputValue());
|
|
108
108
|
}
|
|
109
109
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XCommentReplyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
110
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.1", type: XCommentReplyComponent, isStandalone: true, selector: "x-comment-reply", usesInheritance: true, ngImport: i0, template: "<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button type=\"primary\" flat (click)=\"sureOnClick()\">{{
|
|
110
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.1", type: XCommentReplyComponent, isStandalone: true, selector: "x-comment-reply", usesInheritance: true, ngImport: i0, template: "<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button class=\"x-comment-sure-button\" type=\"primary\" flat (click)=\"sureOnClick()\">{{\r\n 'comment.sure' | xI18n\r\n }}</x-button>\r\n </div>\r\n</div>\r\n", styles: [".x-comment-reply{margin:0;padding:0}.x-comment-reply-buttons{display:flex;justify-content:space-between;align-items:center;margin-top:.625rem}.x-comment-reply-buttons .x-button-icon{padding:0}.x-comment-reply-buttons .x-button-icon>.x-button-inner>.x-icon{font-size:1.25rem}.x-comment-reply-buttons .x-buttons:not(.x-buttons-space)>.x-button:not(:first-child){margin-left:.5rem}.x-comment-reply-input{width:100%}.x-comment-reply-sure{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "pipe", type: XI18nPipe, name: "xI18n" }, { kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
111
111
|
}
|
|
112
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XCommentReplyComponent, decorators: [{
|
|
113
113
|
type: Component,
|
|
114
|
-
args: [{ selector: `${XCommentReplyPrefix}`, imports: [FormsModule, XInputComponent, XI18nPipe, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button type=\"primary\" flat (click)=\"sureOnClick()\">{{
|
|
114
|
+
args: [{ selector: `${XCommentReplyPrefix}`, imports: [FormsModule, XInputComponent, XI18nPipe, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button class=\"x-comment-sure-button\" type=\"primary\" flat (click)=\"sureOnClick()\">{{\r\n 'comment.sure' | xI18n\r\n }}</x-button>\r\n </div>\r\n</div>\r\n", styles: [".x-comment-reply{margin:0;padding:0}.x-comment-reply-buttons{display:flex;justify-content:space-between;align-items:center;margin-top:.625rem}.x-comment-reply-buttons .x-button-icon{padding:0}.x-comment-reply-buttons .x-button-icon>.x-button-inner>.x-icon{font-size:1.25rem}.x-comment-reply-buttons .x-buttons:not(.x-buttons-space)>.x-button:not(:first-child){margin-left:.5rem}.x-comment-reply-input{width:100%}.x-comment-reply-sure{display:flex;align-items:center}\n"] }]
|
|
115
115
|
}] });
|
|
116
116
|
|
|
117
117
|
class XCommentComponent extends XCommentProperty {
|
|
118
118
|
constructor() {
|
|
119
119
|
super(...arguments);
|
|
120
|
-
this.nodes = computed(() => this.data()
|
|
121
|
-
.filter((dt) => XIsEmpty(dt.pid))
|
|
122
|
-
.map((dt) => XGetChildren(this.data(), dt, 0)));
|
|
120
|
+
this.nodes = computed(() => this.data().filter((dt) => XIsEmpty(dt.pid)));
|
|
123
121
|
}
|
|
124
122
|
likeOnClick(node) {
|
|
125
123
|
this.likeClick.emit(node);
|
|
@@ -134,6 +132,7 @@ class XCommentComponent extends XCommentProperty {
|
|
|
134
132
|
}
|
|
135
133
|
sureOnClick(content, node) {
|
|
136
134
|
node.replyContent = content;
|
|
135
|
+
this.sureClick.emit(node);
|
|
137
136
|
}
|
|
138
137
|
moreOnClick(node) {
|
|
139
138
|
this.moreClick.emit(node);
|
|
@@ -142,7 +141,7 @@ class XCommentComponent extends XCommentProperty {
|
|
|
142
141
|
return node.count > node.children?.length;
|
|
143
142
|
}
|
|
144
143
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XCommentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: XCommentComponent, isStandalone: true, selector: "x-comment", usesInheritance: true, ngImport: i0, template: "<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button
|
|
144
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: XCommentComponent, isStandalone: true, selector: "x-comment", usesInheritance: true, ngImport: i0, template: "<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"node.commentShow!\"\r\n (click)=\"commentOnClick(node)\"\r\n text\r\n >\r\n {{ 'comment.comments' | xI18n }} {{ node.count ? node.count : '' }}\r\n </x-button>\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(node)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ node.likes ? node.likes : '' }}\r\n </x-button>\r\n </x-buttons>\r\n </div>\r\n @if (node.commentShow) {\r\n <x-comment-reply [maxlength]=\"contentMax()\" (sureClick)=\"sureOnClick($event, node)\"></x-comment-reply>\r\n }\r\n <ul>\r\n @for (child of node.children; track child.id) {\r\n <li>\r\n <div>\r\n <div>\r\n <x-link>{{ child.author }}</x-link>\r\n @if (child.replyAuthor) {\r\n <span class=\"x-comment-reply\">{{ 'comment.reply' | xI18n }}</span>\r\n <x-link>{{ child.replyAuthor }}</x-link>\r\n }\r\n \uFF1A\r\n <span>\r\n <x-text-retract [content]=\"child.content\"></x-text-retract>\r\n </span>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <span class=\"x-comment-time\">{{ child.datetime | xTimeAgo }}</span>\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-reply-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"child.commentShow!\"\r\n (click)=\"replyOnClick(child)\"\r\n text\r\n >{{ 'comment.reply' | xI18n }}</x-button\r\n >\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(child)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ child.likes ? child.likes : '' }}</x-button\r\n >\r\n </x-buttons>\r\n </div>\r\n @if (child.commentShow) {\r\n <x-comment-reply\r\n [maxlength]=\"contentMax()\"\r\n (sureClick)=\"sureOnClick($event, child)\"\r\n ></x-comment-reply>\r\n }\r\n </div>\r\n </li>\r\n }\r\n @if (hasMore(node)) {\r\n <li class=\"x-comment-more\">\r\n <x-link\r\n class=\"x-comment-more-button\"\r\n icon=\"fto-chevron-right\"\r\n type=\"primary\"\r\n (click)=\"moreOnClick(node)\"\r\n iconRight\r\n >{{ 'comment.more' | xI18n }}\r\n </x-link>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".x-comment{margin:0;padding:0}.x-comment{font-size:var(--x-font-size);box-sizing:border-box}.x-comment p{line-height:1.5;margin:.375rem 0}.x-comment-content{margin-left:1rem;flex:1}.x-comment-content ul,.x-comment-content li{margin:0;padding:0;list-style:none}.x-comment-content>ul{margin-top:.375rem}.x-comment-content>ul>li{padding:0 var(--x-font-size);background-color:var(--x-background);transition:.3s}.x-comment-content>ul>li>div{padding:.5rem 0}.x-comment-content>ul>li>div>p>span{color:var(--x-text-300)}.x-comment-content>ul>li>div>.x-comment-action{display:flex;justify-content:space-between;align-items:center}.x-comment-content>ul>li>div>.x-comment-action>.x-comment-time{margin-left:0}.x-comment-content>ul>li:not(:last-child)>div{border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-comment-content>ul>li.x-comment-more{padding:var(--x-font-size)}.x-comment-content>ul>li:hover{background-color:var(--x-background-a100);border-color:transparent}.x-comment-content .x-comment-reply{margin:var(--x-font-size) 0 1rem}.x-comment-author{margin:.25rem 0;display:inline-flex;align-items:center;color:var(--x-text-300)}.x-comment-author>.x-button{padding:0}.x-comment-time{margin-left:.5rem;color:var(--x-text-400);font-size:var(--x-font-size)}.x-comment-action{text-align:right}.x-comment-action>.x-buttons>.x-button{padding:0}.x-comment-action>.x-buttons:not(.x-buttons-space)>.x-button:not(:first-child){margin-left:.65rem}.x-comment-item{display:flex;padding:1rem 0;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-comment-item:first-child{padding-top:0}.x-comment-reply{margin:0 .75rem}\n"], dependencies: [{ kind: "pipe", type: XI18nPipe, name: "xI18n" }, { kind: "component", type: XLinkComponent, selector: "x-link" }, { kind: "component", type: XAvatarComponent, selector: "x-avatar" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XButtonsComponent, selector: "x-buttons" }, { kind: "component", type: XTextRetractComponent, selector: "x-text-retract" }, { kind: "pipe", type: XTimeAgoPipe, name: "xTimeAgo" }, { kind: "component", type: XCommentReplyComponent, selector: "x-comment-reply" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
146
145
|
}
|
|
147
146
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: XCommentComponent, decorators: [{
|
|
148
147
|
type: Component,
|
|
@@ -155,7 +154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
155
154
|
XTextRetractComponent,
|
|
156
155
|
XTimeAgoPipe,
|
|
157
156
|
XCommentReplyComponent
|
|
158
|
-
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button
|
|
157
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"node.commentShow!\"\r\n (click)=\"commentOnClick(node)\"\r\n text\r\n >\r\n {{ 'comment.comments' | xI18n }} {{ node.count ? node.count : '' }}\r\n </x-button>\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(node)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ node.likes ? node.likes : '' }}\r\n </x-button>\r\n </x-buttons>\r\n </div>\r\n @if (node.commentShow) {\r\n <x-comment-reply [maxlength]=\"contentMax()\" (sureClick)=\"sureOnClick($event, node)\"></x-comment-reply>\r\n }\r\n <ul>\r\n @for (child of node.children; track child.id) {\r\n <li>\r\n <div>\r\n <div>\r\n <x-link>{{ child.author }}</x-link>\r\n @if (child.replyAuthor) {\r\n <span class=\"x-comment-reply\">{{ 'comment.reply' | xI18n }}</span>\r\n <x-link>{{ child.replyAuthor }}</x-link>\r\n }\r\n \uFF1A\r\n <span>\r\n <x-text-retract [content]=\"child.content\"></x-text-retract>\r\n </span>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <span class=\"x-comment-time\">{{ child.datetime | xTimeAgo }}</span>\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-reply-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"child.commentShow!\"\r\n (click)=\"replyOnClick(child)\"\r\n text\r\n >{{ 'comment.reply' | xI18n }}</x-button\r\n >\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(child)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ child.likes ? child.likes : '' }}</x-button\r\n >\r\n </x-buttons>\r\n </div>\r\n @if (child.commentShow) {\r\n <x-comment-reply\r\n [maxlength]=\"contentMax()\"\r\n (sureClick)=\"sureOnClick($event, child)\"\r\n ></x-comment-reply>\r\n }\r\n </div>\r\n </li>\r\n }\r\n @if (hasMore(node)) {\r\n <li class=\"x-comment-more\">\r\n <x-link\r\n class=\"x-comment-more-button\"\r\n icon=\"fto-chevron-right\"\r\n type=\"primary\"\r\n (click)=\"moreOnClick(node)\"\r\n iconRight\r\n >{{ 'comment.more' | xI18n }}\r\n </x-link>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".x-comment{margin:0;padding:0}.x-comment{font-size:var(--x-font-size);box-sizing:border-box}.x-comment p{line-height:1.5;margin:.375rem 0}.x-comment-content{margin-left:1rem;flex:1}.x-comment-content ul,.x-comment-content li{margin:0;padding:0;list-style:none}.x-comment-content>ul{margin-top:.375rem}.x-comment-content>ul>li{padding:0 var(--x-font-size);background-color:var(--x-background);transition:.3s}.x-comment-content>ul>li>div{padding:.5rem 0}.x-comment-content>ul>li>div>p>span{color:var(--x-text-300)}.x-comment-content>ul>li>div>.x-comment-action{display:flex;justify-content:space-between;align-items:center}.x-comment-content>ul>li>div>.x-comment-action>.x-comment-time{margin-left:0}.x-comment-content>ul>li:not(:last-child)>div{border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-comment-content>ul>li.x-comment-more{padding:var(--x-font-size)}.x-comment-content>ul>li:hover{background-color:var(--x-background-a100);border-color:transparent}.x-comment-content .x-comment-reply{margin:var(--x-font-size) 0 1rem}.x-comment-author{margin:.25rem 0;display:inline-flex;align-items:center;color:var(--x-text-300)}.x-comment-author>.x-button{padding:0}.x-comment-time{margin-left:.5rem;color:var(--x-text-400);font-size:var(--x-font-size)}.x-comment-action{text-align:right}.x-comment-action>.x-buttons>.x-button{padding:0}.x-comment-action>.x-buttons:not(.x-buttons-space)>.x-button:not(:first-child){margin-left:.65rem}.x-comment-item{display:flex;padding:1rem 0;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-comment-item:first-child{padding-top:0}.x-comment-reply{margin:0 .75rem}\n"] }]
|
|
159
158
|
}] });
|
|
160
159
|
|
|
161
160
|
class XCommentModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-nest-ui-comment.mjs","sources":["../../../../lib/ng-nest/ui/comment/comment.property.ts","../../../../lib/ng-nest/ui/comment/comment-reply.component.ts","../../../../lib/ng-nest/ui/comment/comment-reply.component.html","../../../../lib/ng-nest/ui/comment/comment.component.ts","../../../../lib/ng-nest/ui/comment/comment.component.html","../../../../lib/ng-nest/ui/comment/comment.module.ts","../../../../lib/ng-nest/ui/comment/ng-nest-ui-comment.ts"],"sourcesContent":["import { XPropertyFunction, XToDataArray, XToNumber } from '@ng-nest/ui/core';\r\nimport { Component, input, output } from '@angular/core';\r\nimport type { XDate, XParentIdentityProperty, XNumber, XDataArray } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Comment\r\n * @selector x-comment\r\n * @decorator component\r\n */\r\nexport const XCommentPrefix = 'x-comment';\r\nconst X_COMMENT_CONFIG_NAME = 'comment';\r\n\r\n/**\r\n * Comment Property\r\n */\r\n@Component({ selector: `${XCommentPrefix}-property`, template: '' })\r\nexport class XCommentProperty extends XPropertyFunction(X_COMMENT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 评论数据\r\n * @en_US Comment data\r\n */\r\n readonly data = input<XCommentNode[], XDataArray<XCommentNode>>([], { transform: XToDataArray });\r\n /**\r\n * @zh_CN 评论最大字数\r\n * @en_US Maximum number of comments\r\n */\r\n readonly contentMax = input<number, XNumber>(this.config?.contentMax ?? 512, { transform: XToNumber });\r\n /**\r\n * @zh_CN 点赞的事件\r\n * @en_US Like events\r\n */\r\n readonly likeClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 评论的事件\r\n * @en_US Commented event\r\n */\r\n readonly commentClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 回复的事件\r\n * @en_US Reply event\r\n */\r\n readonly replyClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 确认提交的事件\r\n * @en_US Confirm the submitted event\r\n */\r\n readonly sureClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 更多的事件\r\n * @en_US More events\r\n */\r\n readonly moreClick = output<XCommentNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Comment 数据对象\r\n * @en_US Comment data object\r\n */\r\nexport interface XCommentNode extends XParentIdentityProperty<XCommentNode> {\r\n /**\r\n * @zh_CN 作者\r\n * @en_US Author\r\n */\r\n author?: string;\r\n /**\r\n * @zh_CN 作者头像地址\r\n * @en_US Author avatar address\r\n */\r\n src?: string;\r\n /**\r\n * @zh_CN 发布时间\r\n * @en_US release time\r\n */\r\n datetime?: XDate;\r\n /**\r\n * @zh_CN 发布内容\r\n * @en_US Publish content\r\n */\r\n content?: string;\r\n /**\r\n * @zh_CN 点赞数量\r\n * @en_US Like number\r\n */\r\n likes?: number;\r\n /**\r\n * @zh_CN 评论数量\r\n * @en_US Number of comments\r\n */\r\n count?: number;\r\n /**\r\n * @zh_CN 回复作者\r\n * @en_US Reply to author\r\n */\r\n replyAuthor?: string;\r\n /**\r\n * @zh_CN 点击评论/回复提交的内容\r\n * @en_US Click to comment/reply to submitted content\r\n */\r\n replyContent?: string;\r\n /**\r\n * @zh_CN 显示评论/回复框\r\n * @en_US Show comment/reply box\r\n */\r\n commentShow?: boolean;\r\n}\r\n\r\n/**\r\n * Comment Reply\r\n * @selector x-comment-reply\r\n * @decorator component\r\n */\r\nexport const XCommentReplyPrefix = 'x-comment-reply';\r\n\r\n/**\r\n * Comment Reply Property\r\n */\r\n@Component({ selector: `${XCommentReplyPrefix}-property`, template: '' })\r\nexport class XCommentReplyProperty extends XPropertyFunction(X_COMMENT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 回复的最大字数\r\n * @en_US Maximum number of words to reply\r\n */\r\n readonly maxlength = input<number, XNumber>(this.config?.maxlength ?? 512, { transform: XToNumber });\r\n /**\r\n * @zh_CN 回复确认的事件\r\n * @en_US Reply to confirmed event\r\n */\r\n readonly sureClick = output<string>();\r\n}\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, signal } from '@angular/core';\r\nimport { XCommentReplyPrefix, XCommentReplyProperty } from './comment.property';\r\nimport { XI18nPipe } from '@ng-nest/ui/i18n';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: `${XCommentReplyPrefix}`,\r\n imports: [FormsModule, XInputComponent, XI18nPipe, XButtonComponent],\r\n templateUrl: './comment-reply.component.html',\r\n styleUrls: ['./comment-reply.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XCommentReplyComponent extends XCommentReplyProperty {\r\n inputValue = signal<string>('');\r\n\r\n sureOnClick() {\r\n this.sureClick.emit(this.inputValue());\r\n }\r\n}\r\n","<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button type=\"primary\" flat (click)=\"sureOnClick()\">{{ 'comment.sure' | xI18n }}</x-button>\r\n </div>\r\n</div>\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed } from '@angular/core';\r\nimport { XCommentPrefix, XCommentProperty } from './comment.property';\r\nimport { XIsEmpty, XGetChildren } from '@ng-nest/ui/core';\r\nimport { XI18nPipe } from '@ng-nest/ui/i18n';\r\nimport { XAvatarComponent } from '@ng-nest/ui/avatar';\r\nimport { XButtonComponent, XButtonsComponent } from '@ng-nest/ui/button';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\nimport { XTextRetractComponent } from '@ng-nest/ui/text-retract';\r\nimport { XTimeAgoPipe } from '@ng-nest/ui/time-ago';\r\nimport { XCommentReplyComponent } from './comment-reply.component';\r\nimport type { XCommentNode } from './comment.property';\r\n\r\n@Component({\r\n selector: `${XCommentPrefix}`,\r\n imports: [\r\n XI18nPipe,\r\n XLinkComponent,\r\n XAvatarComponent,\r\n XButtonComponent,\r\n XButtonsComponent,\r\n XTextRetractComponent,\r\n XTimeAgoPipe,\r\n XCommentReplyComponent\r\n ],\r\n templateUrl: './comment.component.html',\r\n styleUrls: ['./comment.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XCommentComponent extends XCommentProperty {\r\n nodes = computed(() =>\r\n this.data()\r\n .filter((dt) => XIsEmpty(dt.pid))\r\n .map((dt) => XGetChildren<XCommentNode>(this.data(), dt, 0))\r\n );\r\n\r\n likeOnClick(node: XCommentNode) {\r\n this.likeClick.emit(node);\r\n }\r\n\r\n commentOnClick(node: XCommentNode) {\r\n node.commentShow = !node.commentShow;\r\n this.commentClick.emit(node);\r\n }\r\n\r\n replyOnClick(node: XCommentNode) {\r\n node.commentShow = !node.commentShow;\r\n this.replyClick.emit(node);\r\n }\r\n\r\n sureOnClick(content: string, node: XCommentNode) {\r\n node.replyContent = content;\r\n }\r\n\r\n moreOnClick(node: XCommentNode) {\r\n this.moreClick.emit(node);\r\n }\r\n\r\n hasMore(node: XCommentNode) {\r\n return (node.count as number) > (node.children?.length as number);\r\n }\r\n}\r\n","<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button icon=\"fto-message-square\" [activated]=\"node.commentShow!\" (click)=\"commentOnClick(node)\" text>\r\n {{ 'comment.comments' | xI18n }} {{ node.count ? node.count : '' }}\r\n </x-button>\r\n <x-button icon=\"fto-thumbs-up\" (click)=\"likeOnClick(node)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ node.likes ? node.likes : '' }}\r\n </x-button>\r\n </x-buttons>\r\n </div>\r\n @if (node.commentShow) {\r\n <x-comment-reply [maxlength]=\"contentMax()\" (sureClick)=\"sureOnClick($event, node)\"></x-comment-reply>\r\n }\r\n <ul>\r\n @for (child of node.children; track child.id) {\r\n <li>\r\n <div>\r\n <div>\r\n <x-link>{{ child.author }}</x-link>\r\n @if (child.replyAuthor) {\r\n <span class=\"x-comment-reply\">{{ 'comment.reply' | xI18n }}</span>\r\n <x-link>{{ child.replyAuthor }}</x-link>\r\n }\r\n :\r\n <span>\r\n <x-text-retract [content]=\"child.content\"></x-text-retract>\r\n </span>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <span class=\"x-comment-time\">{{ child.datetime | xTimeAgo }}</span>\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n icon=\"fto-message-square\"\r\n [activated]=\"child.commentShow!\"\r\n (click)=\"replyOnClick(child)\"\r\n text\r\n >{{ 'comment.reply' | xI18n }}</x-button\r\n >\r\n <x-button icon=\"fto-thumbs-up\" (click)=\"likeOnClick(child)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ child.likes ? child.likes : '' }}</x-button\r\n >\r\n </x-buttons>\r\n </div>\r\n @if (child.commentShow) {\r\n <x-comment-reply\r\n [maxlength]=\"contentMax()\"\r\n (sureClick)=\"sureOnClick($event, child)\"\r\n ></x-comment-reply>\r\n }\r\n </div>\r\n </li>\r\n }\r\n @if (hasMore(node)) {\r\n <li class=\"x-comment-more\">\r\n <x-link icon=\"fto-chevron-right\" type=\"primary\" (click)=\"moreOnClick(node)\" iconRight\r\n >{{ 'comment.more' | xI18n }}\r\n </x-link>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XCommentComponent } from './comment.component';\r\nimport { XCommentReplyComponent } from './comment-reply.component';\r\n\r\n@NgModule({\r\n exports: [XCommentComponent, XCommentReplyComponent],\r\n imports: [XCommentComponent, XCommentReplyComponent]\r\n})\r\nexport class XCommentModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAIA;;;;AAIG;AACI,MAAM,cAAc,GAAG;AAC9B,MAAM,qBAAqB,GAAG,SAAS;AAEvC;;AAEG;MAEU,gBAAiB,SAAQ,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;AAD9E,IAAA,WAAA,GAAA;;AAEE;;;AAGG;QACM,IAAI,CAAA,IAAA,GAAG,KAAK,CAA2C,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAChG;;;AAGG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACtG;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAAgB;AAC3C;;;AAGG;QACM,IAAY,CAAA,YAAA,GAAG,MAAM,EAAgB;AAC9C;;;AAGG;QACM,IAAU,CAAA,UAAA,GAAG,MAAM,EAAgB;AAC5C;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAAgB;AAC3C;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAAgB;AAC5C;iIApCY,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,0fADkC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FACpD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,SAAS;mBAAC,EAAE,QAAQ,EAAE,CAAG,EAAA,cAAc,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;;AA2FnE;;;;AAIG;AACI,MAAM,mBAAmB,GAAG;AAEnC;;AAEG;MAEU,qBAAsB,SAAQ,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;AADnF,IAAA,WAAA,GAAA;;AAEE;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACpG;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,MAAM,EAAU;AACtC;iIAXY,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,gSADkC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FACzD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,CAAG,EAAA,mBAAmB,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;;;ACrGlE,MAAO,sBAAuB,SAAQ,qBAAqB,CAAA;AARjE,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,EAAE,CAAC;AAKhC;IAHC,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;;iIAJ7B,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfnC,iaAWA,EDFY,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,kgBAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMxD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAG,mBAAmB,CAAE,CAAA,EAAA,OAAA,EACzB,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,CAAC,iBAGrD,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iaAAA,EAAA,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA;;;AEgB3C,MAAO,iBAAkB,SAAQ,gBAAgB,CAAA;AAjBvD,IAAA,WAAA,GAAA;;QAkBE,IAAK,CAAA,KAAA,GAAG,QAAQ,CAAC,MACf,IAAI,CAAC,IAAI;AACN,aAAA,MAAM,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;AAC/B,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,YAAY,CAAe,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAC/D;AA2BF;AAzBC,IAAA,WAAW,CAAC,IAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG3B,IAAA,cAAc,CAAC,IAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,IAAA,YAAY,CAAC,IAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG5B,WAAW,CAAC,OAAe,EAAE,IAAkB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;AAG7B,IAAA,WAAW,CAAC,IAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG3B,IAAA,OAAO,CAAC,IAAkB,EAAA;QACxB,OAAQ,IAAI,CAAC,KAAgB,GAAI,IAAI,CAAC,QAAQ,EAAE,MAAiB;;iIA9BxD,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,4FC7B9B,8iHAgFA,EAAA,MAAA,EAAA,CAAA,qnDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDjEI,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,cAAc,EACd,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,qDAChB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EACrB,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAY,iDACZ,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;+BACE,CAAG,EAAA,cAAc,EAAE,EACpB,OAAA,EAAA;wBACP,SAAS;wBACT,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;wBAChB,iBAAiB;wBACjB,qBAAqB;wBACrB,YAAY;wBACZ;AACD,qBAAA,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8iHAAA,EAAA,MAAA,EAAA,CAAA,qnDAAA,CAAA,EAAA;;;MEnBpC,cAAc,CAAA;iIAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,iBAAiB,EAAE,sBAAsB,CADzC,EAAA,OAAA,EAAA,CAAA,iBAAiB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;kIAGxC,cAAc,EAAA,OAAA,EAAA,CAFf,iBAAiB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAExC,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;AACpD,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,sBAAsB;AACpD,iBAAA;;;ACPD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ng-nest-ui-comment.mjs","sources":["../../../../lib/ng-nest/ui/comment/comment.property.ts","../../../../lib/ng-nest/ui/comment/comment-reply.component.ts","../../../../lib/ng-nest/ui/comment/comment-reply.component.html","../../../../lib/ng-nest/ui/comment/comment.component.ts","../../../../lib/ng-nest/ui/comment/comment.component.html","../../../../lib/ng-nest/ui/comment/comment.module.ts","../../../../lib/ng-nest/ui/comment/ng-nest-ui-comment.ts"],"sourcesContent":["import { XPropertyFunction, XToDataArray, XToNumber } from '@ng-nest/ui/core';\r\nimport { Component, input, output } from '@angular/core';\r\nimport type { XDate, XParentIdentityProperty, XNumber, XDataArray } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Comment\r\n * @selector x-comment\r\n * @decorator component\r\n */\r\nexport const XCommentPrefix = 'x-comment';\r\nconst X_COMMENT_CONFIG_NAME = 'comment';\r\n\r\n/**\r\n * Comment Property\r\n */\r\n@Component({ selector: `${XCommentPrefix}-property`, template: '' })\r\nexport class XCommentProperty extends XPropertyFunction(X_COMMENT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 评论数据\r\n * @en_US Comment data\r\n */\r\n readonly data = input<XCommentNode[], XDataArray<XCommentNode>>([], { transform: XToDataArray });\r\n /**\r\n * @zh_CN 评论最大字数\r\n * @en_US Maximum number of comments\r\n */\r\n readonly contentMax = input<number, XNumber>(this.config?.contentMax ?? 512, { transform: XToNumber });\r\n /**\r\n * @zh_CN 点赞的事件\r\n * @en_US Like events\r\n */\r\n readonly likeClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 评论的事件\r\n * @en_US Commented event\r\n */\r\n readonly commentClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 回复的事件\r\n * @en_US Reply event\r\n */\r\n readonly replyClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 确认提交的事件\r\n * @en_US Confirm the submitted event\r\n */\r\n readonly sureClick = output<XCommentNode>();\r\n /**\r\n * @zh_CN 更多的事件\r\n * @en_US More events\r\n */\r\n readonly moreClick = output<XCommentNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Comment 数据对象\r\n * @en_US Comment data object\r\n */\r\nexport interface XCommentNode extends XParentIdentityProperty<XCommentNode> {\r\n /**\r\n * @zh_CN 作者\r\n * @en_US Author\r\n */\r\n author?: string;\r\n /**\r\n * @zh_CN 作者头像地址\r\n * @en_US Author avatar address\r\n */\r\n src?: string;\r\n /**\r\n * @zh_CN 发布时间\r\n * @en_US release time\r\n */\r\n datetime?: XDate;\r\n /**\r\n * @zh_CN 发布内容\r\n * @en_US Publish content\r\n */\r\n content?: string;\r\n /**\r\n * @zh_CN 点赞数量\r\n * @en_US Like number\r\n */\r\n likes?: number;\r\n /**\r\n * @zh_CN 评论数量\r\n * @en_US Number of comments\r\n */\r\n count?: number;\r\n /**\r\n * @zh_CN 回复作者\r\n * @en_US Reply to author\r\n */\r\n replyAuthor?: string;\r\n /**\r\n * @zh_CN 点击评论/回复提交的内容\r\n * @en_US Click to comment/reply to submitted content\r\n */\r\n replyContent?: string;\r\n /**\r\n * @zh_CN 显示评论/回复框\r\n * @en_US Show comment/reply box\r\n */\r\n commentShow?: boolean;\r\n}\r\n\r\n/**\r\n * Comment Reply\r\n * @selector x-comment-reply\r\n * @decorator component\r\n */\r\nexport const XCommentReplyPrefix = 'x-comment-reply';\r\n\r\n/**\r\n * Comment Reply Property\r\n */\r\n@Component({ selector: `${XCommentReplyPrefix}-property`, template: '' })\r\nexport class XCommentReplyProperty extends XPropertyFunction(X_COMMENT_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 回复的最大字数\r\n * @en_US Maximum number of words to reply\r\n */\r\n readonly maxlength = input<number, XNumber>(this.config?.maxlength ?? 512, { transform: XToNumber });\r\n /**\r\n * @zh_CN 回复确认的事件\r\n * @en_US Reply to confirmed event\r\n */\r\n readonly sureClick = output<string>();\r\n}\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, signal } from '@angular/core';\r\nimport { XCommentReplyPrefix, XCommentReplyProperty } from './comment.property';\r\nimport { XI18nPipe } from '@ng-nest/ui/i18n';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: `${XCommentReplyPrefix}`,\r\n imports: [FormsModule, XInputComponent, XI18nPipe, XButtonComponent],\r\n templateUrl: './comment-reply.component.html',\r\n styleUrls: ['./comment-reply.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XCommentReplyComponent extends XCommentReplyProperty {\r\n inputValue = signal<string>('');\r\n\r\n sureOnClick() {\r\n this.sureClick.emit(this.inputValue());\r\n }\r\n}\r\n","<div #commentReply class=\"x-comment-reply\">\r\n <x-input\r\n class=\"x-comment-reply-input\"\r\n [placeholder]=\"'comment.placeholder' | xI18n\"\r\n [maxlength]=\"maxlength()\"\r\n [(ngModel)]=\"inputValue\"\r\n ></x-input>\r\n <div class=\"x-comment-reply-buttons\">\r\n <x-button class=\"x-comment-sure-button\" type=\"primary\" flat (click)=\"sureOnClick()\">{{\r\n 'comment.sure' | xI18n\r\n }}</x-button>\r\n </div>\r\n</div>\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed } from '@angular/core';\r\nimport { XCommentPrefix, XCommentProperty } from './comment.property';\r\nimport { XIsEmpty } from '@ng-nest/ui/core';\r\nimport { XI18nPipe } from '@ng-nest/ui/i18n';\r\nimport { XAvatarComponent } from '@ng-nest/ui/avatar';\r\nimport { XButtonComponent, XButtonsComponent } from '@ng-nest/ui/button';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\nimport { XTextRetractComponent } from '@ng-nest/ui/text-retract';\r\nimport { XTimeAgoPipe } from '@ng-nest/ui/time-ago';\r\nimport { XCommentReplyComponent } from './comment-reply.component';\r\nimport type { XCommentNode } from './comment.property';\r\n\r\n@Component({\r\n selector: `${XCommentPrefix}`,\r\n imports: [\r\n XI18nPipe,\r\n XLinkComponent,\r\n XAvatarComponent,\r\n XButtonComponent,\r\n XButtonsComponent,\r\n XTextRetractComponent,\r\n XTimeAgoPipe,\r\n XCommentReplyComponent\r\n ],\r\n templateUrl: './comment.component.html',\r\n styleUrls: ['./comment.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XCommentComponent extends XCommentProperty {\r\n nodes = computed(() => this.data().filter((dt) => XIsEmpty(dt.pid)));\r\n\r\n likeOnClick(node: XCommentNode) {\r\n this.likeClick.emit(node);\r\n }\r\n\r\n commentOnClick(node: XCommentNode) {\r\n node.commentShow = !node.commentShow;\r\n this.commentClick.emit(node);\r\n }\r\n\r\n replyOnClick(node: XCommentNode) {\r\n node.commentShow = !node.commentShow;\r\n this.replyClick.emit(node);\r\n }\r\n\r\n sureOnClick(content: string, node: XCommentNode) {\r\n node.replyContent = content;\r\n this.sureClick.emit(node);\r\n }\r\n\r\n moreOnClick(node: XCommentNode) {\r\n this.moreClick.emit(node);\r\n }\r\n\r\n hasMore(node: XCommentNode) {\r\n return (node.count as number) > (node.children?.length as number);\r\n }\r\n}\r\n","<div #comment class=\"x-comment\">\r\n <div class=\"x-comment-list\">\r\n @for (node of nodes(); track node.id) {\r\n <div class=\"x-comment-item\">\r\n <div class=\"x-comment-avatar\">\r\n <x-avatar [src]=\"node.src\"></x-avatar>\r\n </div>\r\n <div class=\"x-comment-content\">\r\n <div class=\"x-comment-author\">\r\n <x-link>{{ node.author }}</x-link>\r\n <span class=\"x-comment-time\">{{ node.datetime | xTimeAgo }}</span>\r\n </div>\r\n <div>\r\n <x-text-retract [content]=\"node.content\"></x-text-retract>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"node.commentShow!\"\r\n (click)=\"commentOnClick(node)\"\r\n text\r\n >\r\n {{ 'comment.comments' | xI18n }} {{ node.count ? node.count : '' }}\r\n </x-button>\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(node)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ node.likes ? node.likes : '' }}\r\n </x-button>\r\n </x-buttons>\r\n </div>\r\n @if (node.commentShow) {\r\n <x-comment-reply [maxlength]=\"contentMax()\" (sureClick)=\"sureOnClick($event, node)\"></x-comment-reply>\r\n }\r\n <ul>\r\n @for (child of node.children; track child.id) {\r\n <li>\r\n <div>\r\n <div>\r\n <x-link>{{ child.author }}</x-link>\r\n @if (child.replyAuthor) {\r\n <span class=\"x-comment-reply\">{{ 'comment.reply' | xI18n }}</span>\r\n <x-link>{{ child.replyAuthor }}</x-link>\r\n }\r\n :\r\n <span>\r\n <x-text-retract [content]=\"child.content\"></x-text-retract>\r\n </span>\r\n </div>\r\n <div class=\"x-comment-action\">\r\n <span class=\"x-comment-time\">{{ child.datetime | xTimeAgo }}</span>\r\n <x-buttons boxShadow=\"false\">\r\n <x-button\r\n class=\"x-comment-reply-button\"\r\n icon=\"fto-message-square\"\r\n [activated]=\"child.commentShow!\"\r\n (click)=\"replyOnClick(child)\"\r\n text\r\n >{{ 'comment.reply' | xI18n }}</x-button\r\n >\r\n <x-button class=\"x-comment-like\" icon=\"fto-thumbs-up\" (click)=\"likeOnClick(child)\" text>\r\n {{ 'comment.giveALike' | xI18n }} {{ child.likes ? child.likes : '' }}</x-button\r\n >\r\n </x-buttons>\r\n </div>\r\n @if (child.commentShow) {\r\n <x-comment-reply\r\n [maxlength]=\"contentMax()\"\r\n (sureClick)=\"sureOnClick($event, child)\"\r\n ></x-comment-reply>\r\n }\r\n </div>\r\n </li>\r\n }\r\n @if (hasMore(node)) {\r\n <li class=\"x-comment-more\">\r\n <x-link\r\n class=\"x-comment-more-button\"\r\n icon=\"fto-chevron-right\"\r\n type=\"primary\"\r\n (click)=\"moreOnClick(node)\"\r\n iconRight\r\n >{{ 'comment.more' | xI18n }}\r\n </x-link>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XCommentComponent } from './comment.component';\r\nimport { XCommentReplyComponent } from './comment-reply.component';\r\n\r\n@NgModule({\r\n exports: [XCommentComponent, XCommentReplyComponent],\r\n imports: [XCommentComponent, XCommentReplyComponent]\r\n})\r\nexport class XCommentModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|