@seniorsistemas/angular-components 19.9.4 → 19.9.5
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/autocomplete/README.md +4 -0
- package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +7 -1
- package/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +3 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +10 -4
- package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +5 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
- package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
- package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +21 -3
- package/esm2022/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.mjs +14 -3
- package/esm2022/insights/lib/insights/insights.component.mjs +15 -4
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +2 -2
- package/esm2022/rating-scale/lib/rating-scale/models/rating-scale-node.mjs +1 -1
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +23 -3
- package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +5 -3
- package/esm2022/select/lib/select/select.component.mjs +6 -4
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +7 -3
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +11 -3
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +1 -1
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +1 -1
- package/esm2022/token-list/lib/token-list/token-list.component.mjs +7 -3
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +13 -5
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +47 -7
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +22 -2
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +9 -5
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +6 -2
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +10 -2
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +6 -2
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/insights/README.md +12 -0
- package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +22 -1
- package/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.d.ts +9 -1
- package/insights/lib/insights/insights.component.d.ts +9 -1
- package/package.json +7 -7
- package/rating-scale/README.md +38 -13
- package/rating-scale/lib/rating-scale/models/rating-scale-node.d.ts +8 -0
- package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +4 -1
- package/select/README.md +2 -0
- package/select/lib/select/components/select-option/select-option.component.d.ts +3 -1
- package/select/lib/select/select.component.d.ts +3 -1
- package/speech-recognition/README.md +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +3 -1
- package/split-button/README.md +2 -0
- package/split-button/lib/split-button/split-button.component.d.ts +5 -1
- package/token-list/lib/token-list/token-list.component.d.ts +3 -1
|
@@ -28,11 +28,27 @@ class InsightsCardComponent {
|
|
|
28
28
|
translateService = inject(TranslateService);
|
|
29
29
|
_destroyRef = inject(DestroyRef);
|
|
30
30
|
insight;
|
|
31
|
+
icons;
|
|
31
32
|
open = false;
|
|
32
33
|
isLoading = false;
|
|
33
34
|
content;
|
|
34
35
|
likeSelected = false;
|
|
35
36
|
dislikeSelected = false;
|
|
37
|
+
get lightbulbIconClass() {
|
|
38
|
+
return this.icons?.lightbulb ?? 'fal fa-lightbulb';
|
|
39
|
+
}
|
|
40
|
+
get copyIconClass() {
|
|
41
|
+
return this.icons?.copy ?? 'fal fa-copy';
|
|
42
|
+
}
|
|
43
|
+
get redoIconClass() {
|
|
44
|
+
return this.icons?.redo ?? 'fal fa-redo';
|
|
45
|
+
}
|
|
46
|
+
get thumbsUpIconClass() {
|
|
47
|
+
return this.icons?.thumbsUp ?? (this.likeSelected ? 'fas fa-thumbs-up' : 'fal fa-thumbs-up');
|
|
48
|
+
}
|
|
49
|
+
get thumbsDownIconClass() {
|
|
50
|
+
return this.icons?.thumbsDown ?? (this.dislikeSelected ? 'fas fa-thumbs-down' : 'fal fa-thumbs-down');
|
|
51
|
+
}
|
|
36
52
|
toggle() {
|
|
37
53
|
const newOpenState = !this.open;
|
|
38
54
|
this.open = newOpenState;
|
|
@@ -92,14 +108,16 @@ class InsightsCardComponent {
|
|
|
92
108
|
});
|
|
93
109
|
}
|
|
94
110
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InsightsCardComponent, isStandalone: true, selector: "s-insights-card", inputs: { insight: "insight" }, ngImport: i0, template: "<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n iconClass=\"
|
|
111
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InsightsCardComponent, isStandalone: true, selector: "s-insights-card", inputs: { insight: "insight", icons: "icons" }, ngImport: i0, template: "<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n [iconClass]=\"lightbulbIconClass\"\r\n ></s-badge>\r\n <span class=\"insight-title\">{{ insight.title }}</span>\r\n <span class=\"toggle-icon\">\r\n <i\r\n class=\"fas\"\r\n [ngClass]=\"{\r\n 'fa-angle-down': !open,\r\n 'fa-angle-up': open,\r\n }\"\r\n >\r\n </i>\r\n </span>\r\n </div>\r\n <div class=\"content\">\r\n @if (isLoading) {\r\n <s-insights-card-loader></s-insights-card-loader>\r\n } @else {\r\n @if (content) {\r\n <span\r\n class=\"text\"\r\n [innerHTML]=\"content\"\r\n ></span>\r\n <span class=\"insight-footer\">{{ 'platform.angular_components.insight_footer' | translate }}</span>\r\n } @else {\r\n <span class=\"text text--error\">{{\r\n 'platform.angular_components.error_loading_insight_alt' | translate\r\n }}</span>\r\n }\r\n <div class=\"options\">\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"copyContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"copyIconClass\"></i>\r\n </button>\r\n <button\r\n (click)=\"reloadContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"redoIconClass\"></i>\r\n </button>\r\n @if (insight.onLikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onLikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsUpIconClass\"></i>\r\n </button>\r\n }\r\n @if (insight.onDislikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onDislikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsDownIconClass\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".insights-card{background-color:#fff;border:1px solid #9ecad4;border-radius:4px;cursor:pointer;display:flex;flex-direction:column;overflow:hidden}.insights-card .header{align-items:center;background-color:#f1f7f8;border-bottom:1px solid #9ecad4;display:flex;gap:8px;min-height:60px;padding:8px 16px;-webkit-user-select:none;user-select:none}.insights-card .header .insight-title{color:#428bca;flex-grow:1;font-family:Open Sans,sans-serif;font-size:14px;line-height:150%}.insights-card .header .toggle-icon{color:#888b99;font-size:20px}.insights-card .content{align-items:center;justify-content:space-between;cursor:auto;display:flex;flex-direction:column;gap:16px;min-height:160px;padding:24px}.insights-card .content .text{color:#212533;font-family:Open Sans,sans-serif;font-size:14px;width:100%}.insights-card .content .text--error{text-align:center}.insights-card .content .insight-footer{color:#888b99;font-family:Open Sans,sans-serif;font-size:12px;text-align:center}.insights-card .content .options{display:flex;gap:8px}.insights-card .content .options .option{background-color:transparent;border:none;color:#428bca;cursor:pointer;font-size:12px}.insights-card .content .options .option:disabled{color:#c1c1cc;cursor:auto}.insights-card--close{border-color:#dedce5}.insights-card--close .header{background-color:#fbfafc;border:none;border-color:#dedce5}.insights-card--close .header .insight-title{color:#888b99}.insights-card--close .content{display:none}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "component", type: InsightsCardLoaderComponent, selector: "s-insights-card-loader" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
96
112
|
}
|
|
97
113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsCardComponent, decorators: [{
|
|
98
114
|
type: Component,
|
|
99
|
-
args: [{ selector: 's-insights-card', standalone: true, imports: [NgClass, BadgeComponent, InsightsCardLoaderComponent, TranslatePipe], template: "<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n iconClass=\"
|
|
115
|
+
args: [{ selector: 's-insights-card', standalone: true, imports: [NgClass, BadgeComponent, InsightsCardLoaderComponent, TranslatePipe], template: "<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n [iconClass]=\"lightbulbIconClass\"\r\n ></s-badge>\r\n <span class=\"insight-title\">{{ insight.title }}</span>\r\n <span class=\"toggle-icon\">\r\n <i\r\n class=\"fas\"\r\n [ngClass]=\"{\r\n 'fa-angle-down': !open,\r\n 'fa-angle-up': open,\r\n }\"\r\n >\r\n </i>\r\n </span>\r\n </div>\r\n <div class=\"content\">\r\n @if (isLoading) {\r\n <s-insights-card-loader></s-insights-card-loader>\r\n } @else {\r\n @if (content) {\r\n <span\r\n class=\"text\"\r\n [innerHTML]=\"content\"\r\n ></span>\r\n <span class=\"insight-footer\">{{ 'platform.angular_components.insight_footer' | translate }}</span>\r\n } @else {\r\n <span class=\"text text--error\">{{\r\n 'platform.angular_components.error_loading_insight_alt' | translate\r\n }}</span>\r\n }\r\n <div class=\"options\">\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"copyContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"copyIconClass\"></i>\r\n </button>\r\n <button\r\n (click)=\"reloadContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"redoIconClass\"></i>\r\n </button>\r\n @if (insight.onLikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onLikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsUpIconClass\"></i>\r\n </button>\r\n }\r\n @if (insight.onDislikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onDislikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsDownIconClass\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".insights-card{background-color:#fff;border:1px solid #9ecad4;border-radius:4px;cursor:pointer;display:flex;flex-direction:column;overflow:hidden}.insights-card .header{align-items:center;background-color:#f1f7f8;border-bottom:1px solid #9ecad4;display:flex;gap:8px;min-height:60px;padding:8px 16px;-webkit-user-select:none;user-select:none}.insights-card .header .insight-title{color:#428bca;flex-grow:1;font-family:Open Sans,sans-serif;font-size:14px;line-height:150%}.insights-card .header .toggle-icon{color:#888b99;font-size:20px}.insights-card .content{align-items:center;justify-content:space-between;cursor:auto;display:flex;flex-direction:column;gap:16px;min-height:160px;padding:24px}.insights-card .content .text{color:#212533;font-family:Open Sans,sans-serif;font-size:14px;width:100%}.insights-card .content .text--error{text-align:center}.insights-card .content .insight-footer{color:#888b99;font-family:Open Sans,sans-serif;font-size:12px;text-align:center}.insights-card .content .options{display:flex;gap:8px}.insights-card .content .options .option{background-color:transparent;border:none;color:#428bca;cursor:pointer;font-size:12px}.insights-card .content .options .option:disabled{color:#c1c1cc;cursor:auto}.insights-card--close{border-color:#dedce5}.insights-card--close .header{background-color:#fbfafc;border:none;border-color:#dedce5}.insights-card--close .header .insight-title{color:#888b99}.insights-card--close .content{display:none}\n"] }]
|
|
100
116
|
}], propDecorators: { insight: [{
|
|
101
117
|
type: Input,
|
|
102
118
|
args: [{ required: true }]
|
|
119
|
+
}], icons: [{
|
|
120
|
+
type: Input
|
|
103
121
|
}] } });
|
|
104
122
|
|
|
105
123
|
class InsightsSidebarComponent {
|
|
@@ -111,6 +129,13 @@ class InsightsSidebarComponent {
|
|
|
111
129
|
emptyTemplate = null;
|
|
112
130
|
noPermissionText;
|
|
113
131
|
noPermissionTemplate = null;
|
|
132
|
+
/**
|
|
133
|
+
* @description Ícone do botão de fechar o sidebar.
|
|
134
|
+
* @default 'far fa-chevron-double-right'
|
|
135
|
+
*/
|
|
136
|
+
closeIconClass = 'far fa-chevron-double-right';
|
|
137
|
+
/** @description Ícones customizáveis de cada `s-insights-card` renderizado no sidebar. */
|
|
138
|
+
icons;
|
|
114
139
|
closedSidebar = output();
|
|
115
140
|
openedSidebar = output();
|
|
116
141
|
opened = false;
|
|
@@ -132,11 +157,11 @@ class InsightsSidebarComponent {
|
|
|
132
157
|
this.closedSidebar.emit();
|
|
133
158
|
}
|
|
134
159
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
135
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InsightsSidebarComponent, isStandalone: true, selector: "s-insights-sidebar", inputs: { insights: "insights", hasPermission: "hasPermission", introText: "introText", introTemplate: "introTemplate", emptyText: "emptyText", emptyTemplate: "emptyTemplate", noPermissionText: "noPermissionText", noPermissionTemplate: "noPermissionTemplate" }, outputs: { closedSidebar: "closedSidebar", openedSidebar: "openedSidebar" }, ngImport: i0, template: "<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span class=\"
|
|
160
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InsightsSidebarComponent, isStandalone: true, selector: "s-insights-sidebar", inputs: { insights: "insights", hasPermission: "hasPermission", introText: "introText", introTemplate: "introTemplate", emptyText: "emptyText", emptyTemplate: "emptyTemplate", noPermissionText: "noPermissionText", noPermissionTemplate: "noPermissionTemplate", closeIconClass: "closeIconClass", icons: "icons" }, outputs: { closedSidebar: "closedSidebar", openedSidebar: "openedSidebar" }, ngImport: i0, template: "<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span [class]=\"closeIconClass\"></span>\r\n </button>\r\n <div class=\"title\">\r\n <span><ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container></span>\r\n <span>IAssist Insights</span>\r\n </div>\r\n </div>\r\n <div class=\"intro\">\r\n @if (hasPermission) {\r\n @if (insights.length) {\r\n @if (introTemplate) {\r\n <ng-container *ngTemplateOutlet=\"introTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ introText || 'platform.angular_components.insight_intro' | translate }}</span>\r\n }\r\n } @else {\r\n @if (emptyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ emptyText || 'platform.angular_components.insight_empty' | translate }}</span>\r\n }\r\n }\r\n } @else {\r\n @if (noPermissionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"noPermissionTemplate\"></ng-container>\r\n } @else {\r\n <span>{{ noPermissionText || 'platform.angular_components.insight_no_permission' | translate }}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"insights\">\r\n @if (insights.length) {\r\n @for (insight of insights; track insight) {\r\n <s-insights-card\r\n [insight]=\"insight\"\r\n [icons]=\"icons\"\r\n >\r\n </s-insights-card>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #iassistIcon>\r\n <div style=\"width: 28px; height: 28px\">\r\n <span *sSVGFactory=\"'iassist'\"></span>\r\n </div>\r\n</ng-template>\r\n", styles: [".sidebar{background-color:#fff;border-left:1px solid #dedce5;height:100%;overflow-x:hidden;position:fixed;right:-25%;transition:.5s;top:0;width:25%;z-index:1002}.sidebar .header{border-bottom:1px solid #dedce5;display:flex;gap:16px;padding:12px 20px}.sidebar .header .option{background-color:transparent;border:none;color:#428bca;cursor:pointer;font-size:16px;padding:12px}.sidebar .header .title{align-items:center;color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:16px;gap:16px;line-height:1;-webkit-user-select:none;user-select:none}.sidebar .intro{margin:8px 40px}.sidebar .intro .text{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:center;line-height:1.5;text-align:center;-webkit-user-select:none;user-select:none}.sidebar.opened{right:0}.sidebar.opened .insights{padding:12px}.insights{display:flex;flex-direction:column;gap:12px}@media (max-width: 1366px){.sidebar{right:-50%;width:50%}}@media (max-width: 768px){.sidebar{right:-75%;width:75%}}@media (max-width: 600px){.sidebar{right:-100%;width:100%}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InsightsCardComponent, selector: "s-insights-card", inputs: ["insight", "icons"] }, { kind: "directive", type: SVGFactoryDirective, selector: "[sSVGFactory]", inputs: ["sSVGFactory"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
136
161
|
}
|
|
137
162
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsSidebarComponent, decorators: [{
|
|
138
163
|
type: Component,
|
|
139
|
-
args: [{ selector: 's-insights-sidebar', standalone: true, imports: [NgTemplateOutlet, InsightsCardComponent, SVGFactoryDirective, TranslatePipe], template: "<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span class=\"
|
|
164
|
+
args: [{ selector: 's-insights-sidebar', standalone: true, imports: [NgTemplateOutlet, InsightsCardComponent, SVGFactoryDirective, TranslatePipe], template: "<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span [class]=\"closeIconClass\"></span>\r\n </button>\r\n <div class=\"title\">\r\n <span><ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container></span>\r\n <span>IAssist Insights</span>\r\n </div>\r\n </div>\r\n <div class=\"intro\">\r\n @if (hasPermission) {\r\n @if (insights.length) {\r\n @if (introTemplate) {\r\n <ng-container *ngTemplateOutlet=\"introTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ introText || 'platform.angular_components.insight_intro' | translate }}</span>\r\n }\r\n } @else {\r\n @if (emptyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ emptyText || 'platform.angular_components.insight_empty' | translate }}</span>\r\n }\r\n }\r\n } @else {\r\n @if (noPermissionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"noPermissionTemplate\"></ng-container>\r\n } @else {\r\n <span>{{ noPermissionText || 'platform.angular_components.insight_no_permission' | translate }}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"insights\">\r\n @if (insights.length) {\r\n @for (insight of insights; track insight) {\r\n <s-insights-card\r\n [insight]=\"insight\"\r\n [icons]=\"icons\"\r\n >\r\n </s-insights-card>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #iassistIcon>\r\n <div style=\"width: 28px; height: 28px\">\r\n <span *sSVGFactory=\"'iassist'\"></span>\r\n </div>\r\n</ng-template>\r\n", styles: [".sidebar{background-color:#fff;border-left:1px solid #dedce5;height:100%;overflow-x:hidden;position:fixed;right:-25%;transition:.5s;top:0;width:25%;z-index:1002}.sidebar .header{border-bottom:1px solid #dedce5;display:flex;gap:16px;padding:12px 20px}.sidebar .header .option{background-color:transparent;border:none;color:#428bca;cursor:pointer;font-size:16px;padding:12px}.sidebar .header .title{align-items:center;color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:16px;gap:16px;line-height:1;-webkit-user-select:none;user-select:none}.sidebar .intro{margin:8px 40px}.sidebar .intro .text{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:center;line-height:1.5;text-align:center;-webkit-user-select:none;user-select:none}.sidebar.opened{right:0}.sidebar.opened .insights{padding:12px}.insights{display:flex;flex-direction:column;gap:12px}@media (max-width: 1366px){.sidebar{right:-50%;width:50%}}@media (max-width: 768px){.sidebar{right:-75%;width:75%}}@media (max-width: 600px){.sidebar{right:-100%;width:100%}}\n"] }]
|
|
140
165
|
}], propDecorators: { insights: [{
|
|
141
166
|
type: Input
|
|
142
167
|
}], hasPermission: [{
|
|
@@ -153,6 +178,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
153
178
|
type: Input
|
|
154
179
|
}], noPermissionTemplate: [{
|
|
155
180
|
type: Input
|
|
181
|
+
}], closeIconClass: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], icons: [{
|
|
184
|
+
type: Input
|
|
156
185
|
}] } });
|
|
157
186
|
|
|
158
187
|
/**
|
|
@@ -181,6 +210,13 @@ class InsightsComponent {
|
|
|
181
210
|
emptyText;
|
|
182
211
|
/** @description Texto exibido quando o usuário não tem permissão. */
|
|
183
212
|
noPermissionText;
|
|
213
|
+
/**
|
|
214
|
+
* @description Ícone do botão de fechar o sidebar.
|
|
215
|
+
* @default 'far fa-chevron-double-right'
|
|
216
|
+
*/
|
|
217
|
+
closeIconClass = 'far fa-chevron-double-right';
|
|
218
|
+
/** @description Ícones customizáveis de cada card de insight exibido no sidebar. */
|
|
219
|
+
icons;
|
|
184
220
|
sidebar = null;
|
|
185
221
|
templates = null;
|
|
186
222
|
/** @description Emitido quando o painel de insights é aberto. */
|
|
@@ -217,7 +253,7 @@ class InsightsComponent {
|
|
|
217
253
|
this.noPermissionTemplate = this.getNoPermissionTemplate();
|
|
218
254
|
}
|
|
219
255
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
220
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InsightsComponent, isStandalone: true, selector: "s-insights, s-ia-insight", inputs: { insights: "insights", hasPermission: "hasPermission", introText: "introText", emptyText: "emptyText", noPermissionText: "noPermissionText" }, outputs: { openInsights: "openInsights", closedInsights: "closedInsights" }, providers: [
|
|
256
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InsightsComponent, isStandalone: true, selector: "s-insights, s-ia-insight", inputs: { insights: "insights", hasPermission: "hasPermission", introText: "introText", emptyText: "emptyText", noPermissionText: "noPermissionText", closeIconClass: "closeIconClass", icons: "icons" }, outputs: { openInsights: "openInsights", closedInsights: "closedInsights" }, providers: [
|
|
221
257
|
{
|
|
222
258
|
provide: DEPRECATED_CONFIG,
|
|
223
259
|
useValue: {
|
|
@@ -226,7 +262,7 @@ class InsightsComponent {
|
|
|
226
262
|
removalVersion: '20.0.0',
|
|
227
263
|
},
|
|
228
264
|
},
|
|
229
|
-
], queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "sidebar", first: true, predicate: InsightsSidebarComponent, descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n", dependencies: [{ kind: "component", type: InsightsSidebarComponent, selector: "s-insights-sidebar", inputs: ["insights", "hasPermission", "introText", "introTemplate", "emptyText", "emptyTemplate", "noPermissionText", "noPermissionTemplate"], outputs: ["closedSidebar", "openedSidebar"] }] });
|
|
265
|
+
], queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "sidebar", first: true, predicate: InsightsSidebarComponent, descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n [closeIconClass]=\"closeIconClass\"\n [icons]=\"icons\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n", dependencies: [{ kind: "component", type: InsightsSidebarComponent, selector: "s-insights-sidebar", inputs: ["insights", "hasPermission", "introText", "introTemplate", "emptyText", "emptyTemplate", "noPermissionText", "noPermissionTemplate", "closeIconClass", "icons"], outputs: ["closedSidebar", "openedSidebar"] }] });
|
|
230
266
|
}
|
|
231
267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InsightsComponent, decorators: [{
|
|
232
268
|
type: Component,
|
|
@@ -239,7 +275,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
239
275
|
removalVersion: '20.0.0',
|
|
240
276
|
},
|
|
241
277
|
},
|
|
242
|
-
], standalone: true, imports: [InsightsSidebarComponent], template: "<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n" }]
|
|
278
|
+
], standalone: true, imports: [InsightsSidebarComponent], template: "<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n [closeIconClass]=\"closeIconClass\"\n [icons]=\"icons\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n" }]
|
|
243
279
|
}], propDecorators: { insights: [{
|
|
244
280
|
type: Input
|
|
245
281
|
}], hasPermission: [{
|
|
@@ -250,6 +286,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
250
286
|
type: Input
|
|
251
287
|
}], noPermissionText: [{
|
|
252
288
|
type: Input
|
|
289
|
+
}], closeIconClass: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], icons: [{
|
|
292
|
+
type: Input
|
|
253
293
|
}], sidebar: [{
|
|
254
294
|
type: ViewChild,
|
|
255
295
|
args: [InsightsSidebarComponent]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-insights.mjs","sources":["../../projects/angular-components/insights/src/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.html","../../projects/angular-components/insights/src/lib/insights/components/insights-card/insights-card.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-card/insights-card.component.html","../../projects/angular-components/insights/src/lib/insights/components/insights-sidebar/insights-sidebar.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-sidebar/insights-sidebar.component.html","../../projects/angular-components/insights/src/lib/insights/insights.component.ts","../../projects/angular-components/insights/src/lib/insights/insights.component.html","../../projects/angular-components/insights/src/lib/insights/insights.module.ts","../../projects/angular-components/insights/src/seniorsistemas-angular-components-insights.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { SVGFactoryDirective } from '@seniorsistemas/angular-components/common';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-insights-card-loader',\r\n templateUrl: './insights-card-loader.component.html',\r\n styleUrls: ['./insights-card-loader.component.scss'],\r\n standalone: true,\r\n imports: [SVGFactoryDirective, TranslatePipe],\r\n})\r\nexport class InsightsCardLoaderComponent {}\r\n","<div class=\"insights-card-loader\">\n <div class=\"loader\">\n <div class=\"loader-icon\">\n <div *sSVGFactory=\"'iassist'\"></div>\n </div>\n </div>\n \n <span class=\"loader-label\">{{ \"platform.angular_components.loading_insight\" | translate }}</span>\n</div>\n","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { Component, DestroyRef, Input, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { ToastService } from '@seniorsistemas/angular-components/toast';\r\nimport { finalize, first } from 'rxjs/operators';\r\n\r\nimport { marked } from 'marked';\r\nimport { InsightsItem } from '../../models/insights-item';\r\nimport { NgClass } from '@angular/common';\r\nimport { BadgeComponent } from '@seniorsistemas/angular-components/badge';\r\nimport { InsightsCardLoaderComponent } from './components/insights-card-loader/insights-card-loader.component';\r\n\r\n@Component({\r\n selector: 's-insights-card',\r\n templateUrl: './insights-card.component.html',\r\n styleUrls: ['./insights-card.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, BadgeComponent, InsightsCardLoaderComponent, TranslatePipe],\r\n})\r\nexport class InsightsCardComponent {\r\n private readonly clipboard = inject(Clipboard);\r\n private readonly toastService = inject(ToastService);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input({ required: true })\r\n public insight!: InsightsItem;\r\n\r\n public open = false;\r\n public isLoading = false;\r\n public content?: string;\r\n\r\n public likeSelected = false;\r\n public dislikeSelected = false;\r\n\r\n public toggle(): void {\r\n const newOpenState = !this.open;\r\n this.open = newOpenState;\r\n if (newOpenState === true && this.insight.onOpenSidebar) {\r\n this.insight.onOpenSidebar();\r\n } else if (newOpenState === false && this.insight.onCloseSideBar) {\r\n this.insight.onCloseSideBar();\r\n }\r\n if (newOpenState === true) {\r\n this._requestInsight();\r\n }\r\n }\r\n\r\n public onLikeSelected(): void {\r\n if (this.likeSelected) {\r\n this.likeSelected = false;\r\n } else {\r\n this.likeSelected = true;\r\n this.dislikeSelected = false;\r\n this.insight.onLikeSelected?.();\r\n }\r\n }\r\n\r\n public onDislikeSelected(): void {\r\n if (this.dislikeSelected) {\r\n this.dislikeSelected = false;\r\n } else {\r\n this.dislikeSelected = true;\r\n this.likeSelected = false;\r\n this.insight.onDislikeSelected?.();\r\n }\r\n }\r\n\r\n public copyContent(): void {\r\n if (!this.content) return;\r\n\r\n this.insight.onCopy?.(this.content);\r\n\r\n if (this.clipboard.copy(this.content)) {\r\n this.toastService.show({\r\n severity: 'info',\r\n title: this.translateService.instant('platform.angular_components.copied_to_clipboard'),\r\n });\r\n }\r\n }\r\n\r\n public reloadContent(): void {\r\n this._requestInsight();\r\n }\r\n\r\n private _requestInsight(): void {\r\n this.isLoading = true;\r\n\r\n this.insight.request$\r\n .pipe(\r\n first(),\r\n finalize(() => (this.isLoading = false)),\r\n takeUntilDestroyed(this._destroyRef),\r\n )\r\n .subscribe(async (content: string) => {\r\n this.content = await marked(content);\r\n if (this.insight.onContentLoaded) {\r\n this.insight.onContentLoaded();\r\n }\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n iconClass=\"fal fa-lightbulb\"\r\n ></s-badge>\r\n <span class=\"insight-title\">{{ insight.title }}</span>\r\n <span class=\"toggle-icon\">\r\n <i\r\n class=\"fas\"\r\n [ngClass]=\"{\r\n 'fa-angle-down': !open,\r\n 'fa-angle-up': open,\r\n }\"\r\n >\r\n </i>\r\n </span>\r\n </div>\r\n <div class=\"content\">\r\n @if (isLoading) {\r\n <s-insights-card-loader></s-insights-card-loader>\r\n } @else {\r\n @if (content) {\r\n <span\r\n class=\"text\"\r\n [innerHTML]=\"content\"\r\n ></span>\r\n <span class=\"insight-footer\">{{ 'platform.angular_components.insight_footer' | translate }}</span>\r\n } @else {\r\n <span class=\"text text--error\">{{\r\n 'platform.angular_components.error_loading_insight_alt' | translate\r\n }}</span>\r\n }\r\n <div class=\"options\">\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"copyContent()\"\r\n class=\"option\"\r\n >\r\n <i class=\"fal fa-copy\"></i>\r\n </button>\r\n <button\r\n (click)=\"reloadContent()\"\r\n class=\"option\"\r\n >\r\n <i class=\"fal fa-redo\"></i>\r\n </button>\r\n @if (insight.onLikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onLikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i\r\n [ngClass]=\"{\r\n fal: !likeSelected,\r\n fas: likeSelected,\r\n 'fa-thumbs-up': true,\r\n }\"\r\n >\r\n </i>\r\n </button>\r\n }\r\n @if (insight.onDislikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onDislikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i\r\n [ngClass]=\"{\r\n fal: !dislikeSelected,\r\n fas: dislikeSelected,\r\n 'fa-thumbs-down': true,\r\n }\"\r\n ></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, output, TemplateRef } from '@angular/core';\r\n\r\nimport { InsightsItem } from '../../models/index';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { InsightsCardComponent } from '../insights-card/insights-card.component';\r\nimport { SVGFactoryDirective } from '@seniorsistemas/angular-components/common';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-insights-sidebar',\r\n templateUrl: './insights-sidebar.component.html',\r\n styleUrls: ['./insights-sidebar.component.scss'],\r\n standalone: true,\r\n imports: [NgTemplateOutlet, InsightsCardComponent, SVGFactoryDirective, TranslatePipe],\r\n})\r\nexport class InsightsSidebarComponent {\r\n @Input()\r\n public insights: InsightsItem[] = [];\r\n\r\n @Input()\r\n public hasPermission = false;\r\n\r\n @Input()\r\n public introText?: string;\r\n\r\n @Input()\r\n public introTemplate: TemplateRef<any> | null = null;\r\n\r\n @Input()\r\n public emptyText?: string;\r\n\r\n @Input()\r\n public emptyTemplate: TemplateRef<any> | null = null;\r\n\r\n @Input()\r\n public noPermissionText?: string;\r\n\r\n @Input()\r\n public noPermissionTemplate: TemplateRef<any> | null = null;\r\n\r\n public closedSidebar = output<void>();\r\n\r\n public openedSidebar = output<void>();\r\n\r\n public opened = false;\r\n\r\n public toggle(): void {\r\n const newState = !this.opened;\r\n if (newState) {\r\n this.open();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n public open(): void {\r\n this.opened = true;\r\n this.openedSidebar.emit();\r\n }\r\n\r\n public close(): void {\r\n this.opened = false;\r\n this.closedSidebar.emit();\r\n }\r\n}\r\n","<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span class=\"far fa-chevron-double-right\"></span>\r\n </button>\r\n <div class=\"title\">\r\n <span><ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container></span>\r\n <span>IAssist Insights</span>\r\n </div>\r\n </div>\r\n <div class=\"intro\">\r\n @if (hasPermission) {\r\n @if (insights.length) {\r\n @if (introTemplate) {\r\n <ng-container *ngTemplateOutlet=\"introTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ introText || 'platform.angular_components.insight_intro' | translate }}</span>\r\n }\r\n } @else {\r\n @if (emptyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ emptyText || 'platform.angular_components.insight_empty' | translate }}</span>\r\n }\r\n }\r\n } @else {\r\n @if (noPermissionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"noPermissionTemplate\"></ng-container>\r\n } @else {\r\n <span>{{ noPermissionText || 'platform.angular_components.insight_no_permission' | translate }}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"insights\">\r\n @if (insights.length) {\r\n @for (insight of insights; track insight) {\r\n <s-insights-card [insight]=\"insight\"> </s-insights-card>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #iassistIcon>\r\n <div style=\"width: 28px; height: 28px\">\r\n <span *sSVGFactory=\"'iassist'\"></span>\r\n </div>\r\n</ng-template>\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { DEPRECATED_CONFIG } from '@seniorsistemas/angular-components/common/deprecated-selector';\r\nimport { DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\r\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\r\n\r\nimport { InsightsSidebarComponent } from './components/insights-sidebar/insights-sidebar.component';\r\nimport { InsightsItem } from './models/insights-item';\r\nimport { InsightsTemplateTypes } from './models/insights-template-types';\r\n/**\r\n * @description Componente de painel lateral de insights com IA. Exibe uma lista de itens\r\n * de insights em um sidebar, suportando templates customizáveis para o conteúdo de\r\n * introdução, estado vazio e sem permissão. Também exporta como seletor legado `s-ia-insight`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-insights\r\n * [insights]=\"listaInsights\"\r\n * [hasPermission]=\"true\"\r\n * (openInsights)=\"onAbrir()\" />\r\n * ```\r\n *\r\n * @category Structure\r\n */\r\n@Component({\r\n selector: 's-insights, s-ia-insight',\r\n templateUrl: './insights.component.html',\r\n hostDirectives: [DeprecatedSelectorDirective],\r\n providers: [\r\n {\r\n provide: DEPRECATED_CONFIG,\r\n useValue: {\r\n oldSelector: 's-ia-insight',\r\n newSelector: 's-insights',\r\n removalVersion: '20.0.0',\r\n },\r\n },\r\n ],\r\n standalone: true,\r\n imports: [InsightsSidebarComponent],\r\n})\r\nexport class InsightsComponent implements AfterContentInit {\r\n /** @description Lista de itens de insight a serem exibidos no painel. @default [] */\r\n @Input()\r\n public insights: InsightsItem[] = [];\r\n\r\n /** @description Indica se o usuário tem permissão para ver os insights. @default true */\r\n @Input()\r\n public hasPermission = true;\r\n\r\n /** @description Texto de introdução exibido no topo do painel (quando sem template customizado). */\r\n @Input()\r\n public introText?: string;\r\n\r\n /** @description Texto exibido quando não há insights disponíveis. */\r\n @Input()\r\n public emptyText?: string;\r\n\r\n /** @description Texto exibido quando o usuário não tem permissão. */\r\n @Input()\r\n public noPermissionText?: string;\r\n\r\n @ViewChild(InsightsSidebarComponent)\r\n public sidebar: InsightsSidebarComponent | null = null;\r\n\r\n @ContentChildren(TemplateDirective)\r\n public templates: QueryList<TemplateDirective> | null = null;\r\n\r\n /** @description Emitido quando o painel de insights é aberto. */\r\n public openInsights = output<void>();\r\n\r\n /** @description Emitido quando o painel de insights é fechado. */\r\n public closedInsights = output<void>();\r\n\r\n public introTemplate: TemplateRef<any> | null = null;\r\n public emptyTemplate: TemplateRef<any> | null = null;\r\n public noPermissionTemplate: TemplateRef<any> | null = null;\r\n\r\n public ngAfterContentInit(): void {\r\n this._getTemplates();\r\n }\r\n\r\n public open(): void {\r\n this.sidebar?.open();\r\n }\r\n\r\n public close(): void {\r\n this.sidebar?.close();\r\n }\r\n\r\n public getIntroTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('intro');\r\n }\r\n\r\n public getNoPermissionTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('no-permission');\r\n }\r\n\r\n public getEmptyTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('empty');\r\n }\r\n\r\n private _getCustomTemplate(type: InsightsTemplateTypes): TemplateRef<any> | null {\r\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\r\n }\r\n\r\n private _getTemplates(): void {\r\n this.introTemplate = this.getIntroTemplate();\r\n this.emptyTemplate = this.getEmptyTemplate();\r\n this.noPermissionTemplate = this.getNoPermissionTemplate();\r\n }\r\n}\r\n","<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\r\n\r\nimport { InsightsComponent } from './insights.component';\r\n\r\n@NgModule({\r\n imports: [TemplateModule, InsightsComponent],\r\n exports: [InsightsComponent, TemplateModule],\r\n})\r\nexport class InsightsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-insights.mjs","sources":["../../projects/angular-components/insights/src/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.html","../../projects/angular-components/insights/src/lib/insights/components/insights-card/insights-card.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-card/insights-card.component.html","../../projects/angular-components/insights/src/lib/insights/components/insights-sidebar/insights-sidebar.component.ts","../../projects/angular-components/insights/src/lib/insights/components/insights-sidebar/insights-sidebar.component.html","../../projects/angular-components/insights/src/lib/insights/insights.component.ts","../../projects/angular-components/insights/src/lib/insights/insights.component.html","../../projects/angular-components/insights/src/lib/insights/insights.module.ts","../../projects/angular-components/insights/src/seniorsistemas-angular-components-insights.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { SVGFactoryDirective } from '@seniorsistemas/angular-components/common';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-insights-card-loader',\r\n templateUrl: './insights-card-loader.component.html',\r\n styleUrls: ['./insights-card-loader.component.scss'],\r\n standalone: true,\r\n imports: [SVGFactoryDirective, TranslatePipe],\r\n})\r\nexport class InsightsCardLoaderComponent {}\r\n","<div class=\"insights-card-loader\">\n <div class=\"loader\">\n <div class=\"loader-icon\">\n <div *sSVGFactory=\"'iassist'\"></div>\n </div>\n </div>\n \n <span class=\"loader-label\">{{ \"platform.angular_components.loading_insight\" | translate }}</span>\n</div>\n","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { Component, DestroyRef, Input, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { ToastService } from '@seniorsistemas/angular-components/toast';\r\nimport { finalize, first } from 'rxjs/operators';\r\n\r\nimport { marked } from 'marked';\r\nimport { InsightsItem } from '../../models/insights-item';\r\nimport { NgClass } from '@angular/common';\r\nimport { BadgeComponent } from '@seniorsistemas/angular-components/badge';\r\nimport { InsightsCardLoaderComponent } from './components/insights-card-loader/insights-card-loader.component';\r\n\r\n/**\r\n * @description Ícones customizáveis do `s-insights-card`. Chaves não informadas mantêm o ícone padrão.\r\n */\r\nexport interface InsightsCardIcons {\r\n /** Ícone do badge \"Insight\" no cabeçalho. Padrão: `fal fa-lightbulb`. */\r\n lightbulb?: string;\r\n /** Ícone do botão de copiar conteúdo. Padrão: `fal fa-copy`. */\r\n copy?: string;\r\n /** Ícone do botão de recarregar conteúdo. Padrão: `fal fa-redo`. */\r\n redo?: string;\r\n /** Ícone do botão de like. Padrão: `fal fa-thumbs-up` (não selecionado) / `fas fa-thumbs-up` (selecionado). */\r\n thumbsUp?: string;\r\n /** Ícone do botão de dislike. Padrão: `fal fa-thumbs-down` (não selecionado) / `fas fa-thumbs-down` (selecionado). */\r\n thumbsDown?: string;\r\n}\r\n\r\n@Component({\r\n selector: 's-insights-card',\r\n templateUrl: './insights-card.component.html',\r\n styleUrls: ['./insights-card.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, BadgeComponent, InsightsCardLoaderComponent, TranslatePipe],\r\n})\r\nexport class InsightsCardComponent {\r\n private readonly clipboard = inject(Clipboard);\r\n private readonly toastService = inject(ToastService);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input({ required: true })\r\n public insight!: InsightsItem;\r\n\r\n @Input()\r\n public icons?: InsightsCardIcons;\r\n\r\n public open = false;\r\n public isLoading = false;\r\n public content?: string;\r\n\r\n public likeSelected = false;\r\n public dislikeSelected = false;\r\n\r\n public get lightbulbIconClass(): string {\r\n return this.icons?.lightbulb ?? 'fal fa-lightbulb';\r\n }\r\n\r\n public get copyIconClass(): string {\r\n return this.icons?.copy ?? 'fal fa-copy';\r\n }\r\n\r\n public get redoIconClass(): string {\r\n return this.icons?.redo ?? 'fal fa-redo';\r\n }\r\n\r\n public get thumbsUpIconClass(): string {\r\n return this.icons?.thumbsUp ?? (this.likeSelected ? 'fas fa-thumbs-up' : 'fal fa-thumbs-up');\r\n }\r\n\r\n public get thumbsDownIconClass(): string {\r\n return this.icons?.thumbsDown ?? (this.dislikeSelected ? 'fas fa-thumbs-down' : 'fal fa-thumbs-down');\r\n }\r\n\r\n public toggle(): void {\r\n const newOpenState = !this.open;\r\n this.open = newOpenState;\r\n if (newOpenState === true && this.insight.onOpenSidebar) {\r\n this.insight.onOpenSidebar();\r\n } else if (newOpenState === false && this.insight.onCloseSideBar) {\r\n this.insight.onCloseSideBar();\r\n }\r\n if (newOpenState === true) {\r\n this._requestInsight();\r\n }\r\n }\r\n\r\n public onLikeSelected(): void {\r\n if (this.likeSelected) {\r\n this.likeSelected = false;\r\n } else {\r\n this.likeSelected = true;\r\n this.dislikeSelected = false;\r\n this.insight.onLikeSelected?.();\r\n }\r\n }\r\n\r\n public onDislikeSelected(): void {\r\n if (this.dislikeSelected) {\r\n this.dislikeSelected = false;\r\n } else {\r\n this.dislikeSelected = true;\r\n this.likeSelected = false;\r\n this.insight.onDislikeSelected?.();\r\n }\r\n }\r\n\r\n public copyContent(): void {\r\n if (!this.content) return;\r\n\r\n this.insight.onCopy?.(this.content);\r\n\r\n if (this.clipboard.copy(this.content)) {\r\n this.toastService.show({\r\n severity: 'info',\r\n title: this.translateService.instant('platform.angular_components.copied_to_clipboard'),\r\n });\r\n }\r\n }\r\n\r\n public reloadContent(): void {\r\n this._requestInsight();\r\n }\r\n\r\n private _requestInsight(): void {\r\n this.isLoading = true;\r\n\r\n this.insight.request$\r\n .pipe(\r\n first(),\r\n finalize(() => (this.isLoading = false)),\r\n takeUntilDestroyed(this._destroyRef),\r\n )\r\n .subscribe(async (content: string) => {\r\n this.content = await marked(content);\r\n if (this.insight.onContentLoaded) {\r\n this.insight.onContentLoaded();\r\n }\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"insights-card\"\r\n [ngClass]=\"{ 'insights-card--close': !open }\"\r\n>\r\n <div\r\n class=\"header\"\r\n (click)=\"toggle()\"\r\n >\r\n <s-badge\r\n text=\"Insight\"\r\n [iconClass]=\"lightbulbIconClass\"\r\n ></s-badge>\r\n <span class=\"insight-title\">{{ insight.title }}</span>\r\n <span class=\"toggle-icon\">\r\n <i\r\n class=\"fas\"\r\n [ngClass]=\"{\r\n 'fa-angle-down': !open,\r\n 'fa-angle-up': open,\r\n }\"\r\n >\r\n </i>\r\n </span>\r\n </div>\r\n <div class=\"content\">\r\n @if (isLoading) {\r\n <s-insights-card-loader></s-insights-card-loader>\r\n } @else {\r\n @if (content) {\r\n <span\r\n class=\"text\"\r\n [innerHTML]=\"content\"\r\n ></span>\r\n <span class=\"insight-footer\">{{ 'platform.angular_components.insight_footer' | translate }}</span>\r\n } @else {\r\n <span class=\"text text--error\">{{\r\n 'platform.angular_components.error_loading_insight_alt' | translate\r\n }}</span>\r\n }\r\n <div class=\"options\">\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"copyContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"copyIconClass\"></i>\r\n </button>\r\n <button\r\n (click)=\"reloadContent()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"redoIconClass\"></i>\r\n </button>\r\n @if (insight.onLikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onLikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsUpIconClass\"></i>\r\n </button>\r\n }\r\n @if (insight.onDislikeSelected) {\r\n <button\r\n [disabled]=\"!content\"\r\n (click)=\"onDislikeSelected()\"\r\n class=\"option\"\r\n >\r\n <i [class]=\"thumbsDownIconClass\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, output, TemplateRef } from '@angular/core';\r\n\r\nimport { InsightsItem } from '../../models/index';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { InsightsCardComponent, InsightsCardIcons } from '../insights-card/insights-card.component';\r\nimport { SVGFactoryDirective } from '@seniorsistemas/angular-components/common';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-insights-sidebar',\r\n templateUrl: './insights-sidebar.component.html',\r\n styleUrls: ['./insights-sidebar.component.scss'],\r\n standalone: true,\r\n imports: [NgTemplateOutlet, InsightsCardComponent, SVGFactoryDirective, TranslatePipe],\r\n})\r\nexport class InsightsSidebarComponent {\r\n @Input()\r\n public insights: InsightsItem[] = [];\r\n\r\n @Input()\r\n public hasPermission = false;\r\n\r\n @Input()\r\n public introText?: string;\r\n\r\n @Input()\r\n public introTemplate: TemplateRef<any> | null = null;\r\n\r\n @Input()\r\n public emptyText?: string;\r\n\r\n @Input()\r\n public emptyTemplate: TemplateRef<any> | null = null;\r\n\r\n @Input()\r\n public noPermissionText?: string;\r\n\r\n @Input()\r\n public noPermissionTemplate: TemplateRef<any> | null = null;\r\n\r\n /**\r\n * @description Ícone do botão de fechar o sidebar.\r\n * @default 'far fa-chevron-double-right'\r\n */\r\n @Input()\r\n public closeIconClass = 'far fa-chevron-double-right';\r\n\r\n /** @description Ícones customizáveis de cada `s-insights-card` renderizado no sidebar. */\r\n @Input()\r\n public icons?: InsightsCardIcons;\r\n\r\n public closedSidebar = output<void>();\r\n\r\n public openedSidebar = output<void>();\r\n\r\n public opened = false;\r\n\r\n public toggle(): void {\r\n const newState = !this.opened;\r\n if (newState) {\r\n this.open();\r\n } else {\r\n this.close();\r\n }\r\n }\r\n\r\n public open(): void {\r\n this.opened = true;\r\n this.openedSidebar.emit();\r\n }\r\n\r\n public close(): void {\r\n this.opened = false;\r\n this.closedSidebar.emit();\r\n }\r\n}\r\n","<div\r\n class=\"sidebar\"\r\n [class.opened]=\"opened\"\r\n>\r\n <div class=\"header\">\r\n <button\r\n (click)=\"close()\"\r\n class=\"option\"\r\n >\r\n <span [class]=\"closeIconClass\"></span>\r\n </button>\r\n <div class=\"title\">\r\n <span><ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container></span>\r\n <span>IAssist Insights</span>\r\n </div>\r\n </div>\r\n <div class=\"intro\">\r\n @if (hasPermission) {\r\n @if (insights.length) {\r\n @if (introTemplate) {\r\n <ng-container *ngTemplateOutlet=\"introTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ introText || 'platform.angular_components.insight_intro' | translate }}</span>\r\n }\r\n } @else {\r\n @if (emptyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n } @else {\r\n <span class=\"text\">{{ emptyText || 'platform.angular_components.insight_empty' | translate }}</span>\r\n }\r\n }\r\n } @else {\r\n @if (noPermissionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"noPermissionTemplate\"></ng-container>\r\n } @else {\r\n <span>{{ noPermissionText || 'platform.angular_components.insight_no_permission' | translate }}</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"insights\">\r\n @if (insights.length) {\r\n @for (insight of insights; track insight) {\r\n <s-insights-card\r\n [insight]=\"insight\"\r\n [icons]=\"icons\"\r\n >\r\n </s-insights-card>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #iassistIcon>\r\n <div style=\"width: 28px; height: 28px\">\r\n <span *sSVGFactory=\"'iassist'\"></span>\r\n </div>\r\n</ng-template>\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n output,\r\n QueryList,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { DEPRECATED_CONFIG } from '@seniorsistemas/angular-components/common/deprecated-selector';\r\nimport { DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\r\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\r\n\r\nimport { InsightsSidebarComponent } from './components/insights-sidebar/insights-sidebar.component';\r\nimport { InsightsCardIcons } from './components/insights-card/insights-card.component';\r\nimport { InsightsItem } from './models/insights-item';\r\nimport { InsightsTemplateTypes } from './models/insights-template-types';\r\n/**\r\n * @description Componente de painel lateral de insights com IA. Exibe uma lista de itens\r\n * de insights em um sidebar, suportando templates customizáveis para o conteúdo de\r\n * introdução, estado vazio e sem permissão. Também exporta como seletor legado `s-ia-insight`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-insights\r\n * [insights]=\"listaInsights\"\r\n * [hasPermission]=\"true\"\r\n * (openInsights)=\"onAbrir()\" />\r\n * ```\r\n *\r\n * @category Structure\r\n */\r\n@Component({\r\n selector: 's-insights, s-ia-insight',\r\n templateUrl: './insights.component.html',\r\n hostDirectives: [DeprecatedSelectorDirective],\r\n providers: [\r\n {\r\n provide: DEPRECATED_CONFIG,\r\n useValue: {\r\n oldSelector: 's-ia-insight',\r\n newSelector: 's-insights',\r\n removalVersion: '20.0.0',\r\n },\r\n },\r\n ],\r\n standalone: true,\r\n imports: [InsightsSidebarComponent],\r\n})\r\nexport class InsightsComponent implements AfterContentInit {\r\n /** @description Lista de itens de insight a serem exibidos no painel. @default [] */\r\n @Input()\r\n public insights: InsightsItem[] = [];\r\n\r\n /** @description Indica se o usuário tem permissão para ver os insights. @default true */\r\n @Input()\r\n public hasPermission = true;\r\n\r\n /** @description Texto de introdução exibido no topo do painel (quando sem template customizado). */\r\n @Input()\r\n public introText?: string;\r\n\r\n /** @description Texto exibido quando não há insights disponíveis. */\r\n @Input()\r\n public emptyText?: string;\r\n\r\n /** @description Texto exibido quando o usuário não tem permissão. */\r\n @Input()\r\n public noPermissionText?: string;\r\n\r\n /**\r\n * @description Ícone do botão de fechar o sidebar.\r\n * @default 'far fa-chevron-double-right'\r\n */\r\n @Input()\r\n public closeIconClass = 'far fa-chevron-double-right';\r\n\r\n /** @description Ícones customizáveis de cada card de insight exibido no sidebar. */\r\n @Input()\r\n public icons?: InsightsCardIcons;\r\n\r\n @ViewChild(InsightsSidebarComponent)\r\n public sidebar: InsightsSidebarComponent | null = null;\r\n\r\n @ContentChildren(TemplateDirective)\r\n public templates: QueryList<TemplateDirective> | null = null;\r\n\r\n /** @description Emitido quando o painel de insights é aberto. */\r\n public openInsights = output<void>();\r\n\r\n /** @description Emitido quando o painel de insights é fechado. */\r\n public closedInsights = output<void>();\r\n\r\n public introTemplate: TemplateRef<any> | null = null;\r\n public emptyTemplate: TemplateRef<any> | null = null;\r\n public noPermissionTemplate: TemplateRef<any> | null = null;\r\n\r\n public ngAfterContentInit(): void {\r\n this._getTemplates();\r\n }\r\n\r\n public open(): void {\r\n this.sidebar?.open();\r\n }\r\n\r\n public close(): void {\r\n this.sidebar?.close();\r\n }\r\n\r\n public getIntroTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('intro');\r\n }\r\n\r\n public getNoPermissionTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('no-permission');\r\n }\r\n\r\n public getEmptyTemplate(): TemplateRef<any> | null {\r\n return this._getCustomTemplate('empty');\r\n }\r\n\r\n private _getCustomTemplate(type: InsightsTemplateTypes): TemplateRef<any> | null {\r\n return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\r\n }\r\n\r\n private _getTemplates(): void {\r\n this.introTemplate = this.getIntroTemplate();\r\n this.emptyTemplate = this.getEmptyTemplate();\r\n this.noPermissionTemplate = this.getNoPermissionTemplate();\r\n }\r\n}\r\n","<s-insights-sidebar\n #sidebar\n [insights]=\"insights\"\n [hasPermission]=\"hasPermission\"\n [introText]=\"introText\"\n [introTemplate]=\"introTemplate\"\n [emptyText]=\"emptyText\"\n [emptyTemplate]=\"emptyTemplate\"\n [noPermissionText]=\"noPermissionText\"\n [noPermissionTemplate]=\"noPermissionTemplate\"\n [closeIconClass]=\"closeIconClass\"\n [icons]=\"icons\"\n (openedSidebar)=\"openInsights.emit()\"\n (closedSidebar)=\"closedInsights.emit()\"\n>\n</s-insights-sidebar>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\r\n\r\nimport { InsightsComponent } from './insights.component';\r\n\r\n@NgModule({\r\n imports: [TemplateModule, InsightsComponent],\r\n exports: [InsightsComponent, TemplateModule],\r\n})\r\nexport class InsightsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -155,7 +155,7 @@ class PaginatorComponent {
|
|
|
155
155
|
this.requestedPage.set(pageIndex);
|
|
156
156
|
}
|
|
157
157
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
158
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PaginatorComponent, isStandalone: true, selector: "s-paginator", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PaginatorComponent, isStandalone: true, selector: "s-paginator", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "checkIconClass", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
159
159
|
}
|
|
160
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
161
161
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-paginator.mjs","sources":["../../projects/angular-components/paginator/src/lib/paginator/paginator.component.ts","../../projects/angular-components/paginator/src/lib/paginator/paginator.component.html","../../projects/angular-components/paginator/src/seniorsistemas-angular-components-paginator.ts"],"sourcesContent":["import { Component, computed, effect, input, model, OnDestroy, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { SelectComponent } from '@seniorsistemas/angular-components/select';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { PageChange, PaginatorInternalButton } from '../models/paginator.models';\n/**\n * @description Componente de paginação standalone que exibe botões de páginas,\n * seletor de itens por página e navegação para primeira/última página.\n * Emite `pageChange` a cada mudança de página ou tamanho de página.\n *\n * @example\n * ```html\n * <s-paginator\n * [totalRecords]=\"total\"\n * [(rows)]=\"tamanhoPagina\"\n * (pageChange)=\"onPaginaMudou($event)\" />\n * ```\n *\n * @category Structure\n */\n@Component({\n selector: 's-paginator',\n standalone: true,\n imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule],\n templateUrl: './paginator.component.html',\n})\nexport class PaginatorComponent implements OnDestroy {\n /** @description Número total de registros. Campo obrigatório. */\n totalRecords = input.required<number>();\n /** @description Número de itens por página. Suporta two-way binding. @default 10 */\n rows = model(10);\n /** @description Opções do seletor de itens por página. @default [10, 20, 50, 100, 200] */\n rowsPerPageOptions = input<number[]>([10, 20, 50, 100, 200]);\n /** @description Emitido sempre que a página ou o número de itens por página muda. */\n pageChange = output<PageChange>();\n\n private readonly currentPageEffect = effect(() => {\n const totalPages = this.totalPages();\n const page = this.currentPage() - 1;\n this.pageChange.emit({\n page,\n pageCount: totalPages,\n rows: this.rows(),\n first: this.rows() * page,\n });\n });\n private readonly MAX_PAGE_BUTTONS = 5;\n private readonly hasPreviousPage = computed(() => {\n const previousPage = this.currentPage() - 1;\n return previousPage >= 1;\n });\n\n private readonly hasNextPage = computed(() => {\n const nextPage = this.currentPage() + 1;\n return nextPage <= this.totalPages();\n });\n\n private readonly requestedPage = signal(1);\n /** @description Página atual, sempre reajustada para o intervalo válido de `[1, totalPages]`. */\n protected readonly currentPage = computed(() => {\n const maxPage = Math.max(this.totalPages(), 1);\n return Math.min(Math.max(this.requestedPage(), 1), maxPage);\n });\n\n protected buttons = computed(() => {\n const navigationPageButtons: PaginatorInternalButton[] = [];\n const maxPageButtons = this.MAX_PAGE_BUTTONS;\n const currentPage = this.currentPage();\n const middle = Math.floor(maxPageButtons / 2);\n const _startPage = currentPage - middle;\n let startPage = _startPage < 1 ? 1 : _startPage;\n const _endPage = startPage + maxPageButtons - 1;\n const endPageIsMoreThanTotalPages = _endPage > this.totalPages();\n\n if (endPageIsMoreThanTotalPages) {\n const diff = _endPage - this.totalPages();\n const canModifyStartPage = startPage - diff >= 1;\n if (canModifyStartPage) {\n startPage = startPage - diff;\n }\n }\n const endPage = endPageIsMoreThanTotalPages ? this.totalPages() : _endPage;\n\n for (let i = startPage; i <= endPage; i++) {\n navigationPageButtons.push({\n clicked: (page) => this.goToPage(page.pageIndex as number),\n pageIndex: i,\n });\n }\n\n return [\n this.FIRST_PAGE_BUTTON,\n this.PREVIOUS_PAGE_BUTTON,\n ...navigationPageButtons,\n this.NEXT_PAGE_BUTTON,\n this.LAST_PAGE_BUTTON,\n ];\n });\n\n private readonly FIRST_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goFirstPage.bind(this),\n icon: 'fas fa-step-backward',\n ariaLabelKey: 'platform.angular_components.aria_first_page',\n validate: computed(() => {\n return !this.hasPreviousPage();\n }),\n };\n\n private readonly PREVIOUS_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goPreviousPage.bind(this),\n icon: 'fas fa-caret-left',\n ariaLabelKey: 'platform.angular_components.aria_previous_page',\n validate: computed(() => {\n return !this.hasPreviousPage();\n }),\n };\n\n private readonly LAST_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goLastPage.bind(this),\n icon: 'fas fa-step-forward',\n ariaLabelKey: 'platform.angular_components.aria_last_page',\n validate: computed(() => {\n return !this.hasNextPage();\n }),\n };\n\n private readonly NEXT_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goNextPage.bind(this),\n icon: 'fas fa-caret-right',\n ariaLabelKey: 'platform.angular_components.aria_next_page',\n validate: computed(() => {\n return !this.hasNextPage();\n }),\n };\n\n private totalPages = computed(() => {\n return Math.ceil(this.totalRecords() / this.rows());\n });\n\n public ngOnDestroy(): void {\n this.currentPageEffect.destroy();\n }\n\n protected rowsPerPageChange(): void {\n if (this.currentPage() !== 1) {\n this.goToPage(1);\n }\n }\n\n protected activatedButton(button: PaginatorInternalButton): void {\n button.clicked(button);\n }\n\n private goFirstPage(): void {\n this.goToPage(1);\n }\n\n private goNextPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n this.goToPage(this.currentPage() + 1);\n }\n\n private goPreviousPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n this.goToPage(this.currentPage() - 1);\n }\n\n private goLastPage(): void {\n this.goToPage(this.totalPages());\n }\n\n private goToPage(pageIndex: number): void {\n this.requestedPage.set(pageIndex);\n }\n}\n\n","<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-paginator.mjs","sources":["../../projects/angular-components/paginator/src/lib/paginator/paginator.component.ts","../../projects/angular-components/paginator/src/lib/paginator/paginator.component.html","../../projects/angular-components/paginator/src/seniorsistemas-angular-components-paginator.ts"],"sourcesContent":["import { Component, computed, effect, input, model, OnDestroy, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { SelectComponent } from '@seniorsistemas/angular-components/select';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { PageChange, PaginatorInternalButton } from '../models/paginator.models';\n/**\n * @description Componente de paginação standalone que exibe botões de páginas,\n * seletor de itens por página e navegação para primeira/última página.\n * Emite `pageChange` a cada mudança de página ou tamanho de página.\n *\n * @example\n * ```html\n * <s-paginator\n * [totalRecords]=\"total\"\n * [(rows)]=\"tamanhoPagina\"\n * (pageChange)=\"onPaginaMudou($event)\" />\n * ```\n *\n * @category Structure\n */\n@Component({\n selector: 's-paginator',\n standalone: true,\n imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule],\n templateUrl: './paginator.component.html',\n})\nexport class PaginatorComponent implements OnDestroy {\n /** @description Número total de registros. Campo obrigatório. */\n totalRecords = input.required<number>();\n /** @description Número de itens por página. Suporta two-way binding. @default 10 */\n rows = model(10);\n /** @description Opções do seletor de itens por página. @default [10, 20, 50, 100, 200] */\n rowsPerPageOptions = input<number[]>([10, 20, 50, 100, 200]);\n /** @description Emitido sempre que a página ou o número de itens por página muda. */\n pageChange = output<PageChange>();\n\n private readonly currentPageEffect = effect(() => {\n const totalPages = this.totalPages();\n const page = this.currentPage() - 1;\n this.pageChange.emit({\n page,\n pageCount: totalPages,\n rows: this.rows(),\n first: this.rows() * page,\n });\n });\n private readonly MAX_PAGE_BUTTONS = 5;\n private readonly hasPreviousPage = computed(() => {\n const previousPage = this.currentPage() - 1;\n return previousPage >= 1;\n });\n\n private readonly hasNextPage = computed(() => {\n const nextPage = this.currentPage() + 1;\n return nextPage <= this.totalPages();\n });\n\n private readonly requestedPage = signal(1);\n /** @description Página atual, sempre reajustada para o intervalo válido de `[1, totalPages]`. */\n protected readonly currentPage = computed(() => {\n const maxPage = Math.max(this.totalPages(), 1);\n return Math.min(Math.max(this.requestedPage(), 1), maxPage);\n });\n\n protected buttons = computed(() => {\n const navigationPageButtons: PaginatorInternalButton[] = [];\n const maxPageButtons = this.MAX_PAGE_BUTTONS;\n const currentPage = this.currentPage();\n const middle = Math.floor(maxPageButtons / 2);\n const _startPage = currentPage - middle;\n let startPage = _startPage < 1 ? 1 : _startPage;\n const _endPage = startPage + maxPageButtons - 1;\n const endPageIsMoreThanTotalPages = _endPage > this.totalPages();\n\n if (endPageIsMoreThanTotalPages) {\n const diff = _endPage - this.totalPages();\n const canModifyStartPage = startPage - diff >= 1;\n if (canModifyStartPage) {\n startPage = startPage - diff;\n }\n }\n const endPage = endPageIsMoreThanTotalPages ? this.totalPages() : _endPage;\n\n for (let i = startPage; i <= endPage; i++) {\n navigationPageButtons.push({\n clicked: (page) => this.goToPage(page.pageIndex as number),\n pageIndex: i,\n });\n }\n\n return [\n this.FIRST_PAGE_BUTTON,\n this.PREVIOUS_PAGE_BUTTON,\n ...navigationPageButtons,\n this.NEXT_PAGE_BUTTON,\n this.LAST_PAGE_BUTTON,\n ];\n });\n\n private readonly FIRST_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goFirstPage.bind(this),\n icon: 'fas fa-step-backward',\n ariaLabelKey: 'platform.angular_components.aria_first_page',\n validate: computed(() => {\n return !this.hasPreviousPage();\n }),\n };\n\n private readonly PREVIOUS_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goPreviousPage.bind(this),\n icon: 'fas fa-caret-left',\n ariaLabelKey: 'platform.angular_components.aria_previous_page',\n validate: computed(() => {\n return !this.hasPreviousPage();\n }),\n };\n\n private readonly LAST_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goLastPage.bind(this),\n icon: 'fas fa-step-forward',\n ariaLabelKey: 'platform.angular_components.aria_last_page',\n validate: computed(() => {\n return !this.hasNextPage();\n }),\n };\n\n private readonly NEXT_PAGE_BUTTON: PaginatorInternalButton = {\n clicked: this.goNextPage.bind(this),\n icon: 'fas fa-caret-right',\n ariaLabelKey: 'platform.angular_components.aria_next_page',\n validate: computed(() => {\n return !this.hasNextPage();\n }),\n };\n\n private totalPages = computed(() => {\n return Math.ceil(this.totalRecords() / this.rows());\n });\n\n public ngOnDestroy(): void {\n this.currentPageEffect.destroy();\n }\n\n protected rowsPerPageChange(): void {\n if (this.currentPage() !== 1) {\n this.goToPage(1);\n }\n }\n\n protected activatedButton(button: PaginatorInternalButton): void {\n button.clicked(button);\n }\n\n private goFirstPage(): void {\n this.goToPage(1);\n }\n\n private goNextPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n this.goToPage(this.currentPage() + 1);\n }\n\n private goPreviousPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n this.goToPage(this.currentPage() - 1);\n }\n\n private goLastPage(): void {\n this.goToPage(this.totalPages());\n }\n\n private goToPage(pageIndex: number): void {\n this.requestedPage.set(pageIndex);\n }\n}\n\n","<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,26 @@ class RatingScaleComponent {
|
|
|
39
39
|
value;
|
|
40
40
|
_onChange;
|
|
41
41
|
_onTouched;
|
|
42
|
+
ngOnChanges(changes) {
|
|
43
|
+
if (changes['nodes']) {
|
|
44
|
+
this.nodes?.forEach((node) => {
|
|
45
|
+
const hasSelectedIcon = !!node.selectedIcon;
|
|
46
|
+
const hasUnselectedIcon = !!node.unselectedIcon;
|
|
47
|
+
if (hasSelectedIcon !== hasUnselectedIcon) {
|
|
48
|
+
console.warn(`s-rating-scale: o nó "${node.id}" informou apenas um de "selectedIcon"/"unselectedIcon" — os dois devem ser informados juntos. Nenhum ícone será exibido para esse nó até que ambos sejam informados.`);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getNodeIconClass(node) {
|
|
54
|
+
if (node.selectedIcon && node.unselectedIcon) {
|
|
55
|
+
return this.value?.id === node.id ? node.selectedIcon : node.unselectedIcon;
|
|
56
|
+
}
|
|
57
|
+
if (node.selectedIcon || node.unselectedIcon) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return node.icon ? `fas ${node.icon}` : undefined;
|
|
61
|
+
}
|
|
42
62
|
writeValue(value) {
|
|
43
63
|
if (!this.disabled) {
|
|
44
64
|
this.value = value;
|
|
@@ -63,7 +83,7 @@ class RatingScaleComponent {
|
|
|
63
83
|
useExisting: forwardRef(() => RatingScaleComponent),
|
|
64
84
|
multi: true,
|
|
65
85
|
},
|
|
66
|
-
], ngImport: i0, template: "<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @
|
|
86
|
+
], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @let nodeIconClass = getNodeIconClass(node);\n @if (nodeIconClass) {\n <span\n class=\"m-1.5 text-base text-grayscale-60\"\n [ngClass]=\"nodeIconClass\">\n </span>\n }\n @if (node.title) {\n <span class=\"m-1.5 text-sm font-normal leading-[150%] text-grayscale-90\">{{ node.title }}</span>\n }\n </button>\n }\n </div>\n <div class=\"flex justify-between py-3\">\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ startLabel }}</span>\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ endLabel }}</span>\n </div>\n</div>", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
67
87
|
}
|
|
68
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingScaleComponent, decorators: [{
|
|
69
89
|
type: Component,
|
|
@@ -73,7 +93,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
73
93
|
useExisting: forwardRef(() => RatingScaleComponent),
|
|
74
94
|
multi: true,
|
|
75
95
|
},
|
|
76
|
-
], standalone: true, imports: [NgClass], template: "<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @
|
|
96
|
+
], standalone: true, imports: [NgClass], template: "<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @let nodeIconClass = getNodeIconClass(node);\n @if (nodeIconClass) {\n <span\n class=\"m-1.5 text-base text-grayscale-60\"\n [ngClass]=\"nodeIconClass\">\n </span>\n }\n @if (node.title) {\n <span class=\"m-1.5 text-sm font-normal leading-[150%] text-grayscale-90\">{{ node.title }}</span>\n }\n </button>\n }\n </div>\n <div class=\"flex justify-between py-3\">\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ startLabel }}</span>\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ endLabel }}</span>\n </div>\n</div>" }]
|
|
77
97
|
}], propDecorators: { nodes: [{
|
|
78
98
|
type: Input,
|
|
79
99
|
args: [{ required: true }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-rating-scale.mjs","sources":["../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.ts","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.html","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.module.ts","../../projects/angular-components/rating-scale/src/seniorsistemas-angular-components-rating-scale.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input, forwardRef } from '@angular/core';\r\n\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { RatingScaleNode } from './models/rating-scale-node';\r\n\r\n/**\r\n * @description Componente de escala de avaliação que permite ao usuário selecionar um nó de uma escala visual.\r\n * Implementa `ControlValueAccessor` para integração com Reactive Forms e Template-Driven Forms.\r\n * Ideal para pesquisas de satisfação (NPS, CSAT) e questionários de feedback.\r\n *\r\n * @example\r\n * ```html\r\n * <s-rating-scale\r\n * [nodes]=\"ratingNodes\"\r\n * startLabel=\"Péssimo\"\r\n * endLabel=\"Ótimo\"\r\n * [(ngModel)]=\"rating\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-rating-scale',\r\n templateUrl: './rating-scale.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RatingScaleComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class RatingScaleComponent implements ControlValueAccessor {\r\n /**\r\n * @description Lista de nós que compõem a escala de avaliação. Campo obrigatório.\r\n * Cada `RatingScaleNode` define o valor, rótulo e cor do item na escala.\r\n */\r\n @Input({ required: true })\r\n public nodes!: RatingScaleNode[];\r\n\r\n /** @description Rótulo exibido no início (extremidade esquerda) da escala. */\r\n @Input()\r\n public startLabel?: string;\r\n\r\n /** @description Rótulo exibido no final (extremidade direita) da escala. */\r\n @Input()\r\n public endLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, a escala fica desabilitada e o usuário não pode selecionar nenhum nó.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n public value?: RatingScaleNode;\r\n private _onChange?: (value: RatingScaleNode) => void;\r\n private _onTouched?: (value: RatingScaleNode) => void;\r\n\r\n public writeValue(value: RatingScaleNode): void {\r\n if (!this.disabled) {\r\n this.value = value;\r\n }\r\n }\r\n public registerOnChange(onChange: (value: RatingScaleNode) => void): void {\r\n this._onChange = onChange;\r\n }\r\n public registerOnTouched(onTouched: (value: RatingScaleNode) => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public onSelect(rating: RatingScaleNode) {\r\n this.value = rating;\r\n if (this._onChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-rating-scale.mjs","sources":["../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.ts","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.component.html","../../projects/angular-components/rating-scale/src/lib/rating-scale/rating-scale.module.ts","../../projects/angular-components/rating-scale/src/seniorsistemas-angular-components-rating-scale.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges, forwardRef } from '@angular/core';\r\n\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { RatingScaleNode } from './models/rating-scale-node';\r\n\r\n/**\r\n * @description Componente de escala de avaliação que permite ao usuário selecionar um nó de uma escala visual.\r\n * Implementa `ControlValueAccessor` para integração com Reactive Forms e Template-Driven Forms.\r\n * Ideal para pesquisas de satisfação (NPS, CSAT) e questionários de feedback.\r\n *\r\n * @example\r\n * ```html\r\n * <s-rating-scale\r\n * [nodes]=\"ratingNodes\"\r\n * startLabel=\"Péssimo\"\r\n * endLabel=\"Ótimo\"\r\n * [(ngModel)]=\"rating\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-rating-scale',\r\n templateUrl: './rating-scale.component.html',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RatingScaleComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class RatingScaleComponent implements ControlValueAccessor, OnChanges {\r\n /**\r\n * @description Lista de nós que compõem a escala de avaliação. Campo obrigatório.\r\n * Cada `RatingScaleNode` define o valor, rótulo e cor do item na escala.\r\n */\r\n @Input({ required: true })\r\n public nodes!: RatingScaleNode[];\r\n\r\n /** @description Rótulo exibido no início (extremidade esquerda) da escala. */\r\n @Input()\r\n public startLabel?: string;\r\n\r\n /** @description Rótulo exibido no final (extremidade direita) da escala. */\r\n @Input()\r\n public endLabel?: string;\r\n\r\n /**\r\n * @description Quando `true`, a escala fica desabilitada e o usuário não pode selecionar nenhum nó.\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n public value?: RatingScaleNode;\r\n private _onChange?: (value: RatingScaleNode) => void;\r\n private _onTouched?: (value: RatingScaleNode) => void;\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['nodes']) {\r\n this.nodes?.forEach((node) => {\r\n const hasSelectedIcon = !!node.selectedIcon;\r\n const hasUnselectedIcon = !!node.unselectedIcon;\r\n if (hasSelectedIcon !== hasUnselectedIcon) {\r\n console.warn(\r\n `s-rating-scale: o nó \"${node.id}\" informou apenas um de \"selectedIcon\"/\"unselectedIcon\" — os dois devem ser informados juntos. Nenhum ícone será exibido para esse nó até que ambos sejam informados.`,\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n public getNodeIconClass(node: RatingScaleNode): string | undefined {\r\n if (node.selectedIcon && node.unselectedIcon) {\r\n return this.value?.id === node.id ? node.selectedIcon : node.unselectedIcon;\r\n }\r\n if (node.selectedIcon || node.unselectedIcon) {\r\n return undefined;\r\n }\r\n return node.icon ? `fas ${node.icon}` : undefined;\r\n }\r\n\r\n public writeValue(value: RatingScaleNode): void {\r\n if (!this.disabled) {\r\n this.value = value;\r\n }\r\n }\r\n public registerOnChange(onChange: (value: RatingScaleNode) => void): void {\r\n this._onChange = onChange;\r\n }\r\n public registerOnTouched(onTouched: (value: RatingScaleNode) => void): void {\r\n this._onTouched = onTouched;\r\n }\r\n\r\n public onSelect(rating: RatingScaleNode) {\r\n this.value = rating;\r\n if (this._onChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","<div\n class=\"flex flex-col\"\n [class.opacity-50]=\"disabled\">\n <div class=\"flex\">\n @for (node of nodes; track node.id) {\n <button\n class=\"flex flex-grow items-center justify-center rounded-xbig border border-secondary bg-grayscale-0 p-2 mx-0.5 first:ml-0 last:mr-0\"\n [class.bg-hippie-blue-100]=\"value?.id === node.id && !disabled\"\n [class.border-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.text-criticality-blue]=\"value?.id === node.id && !disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.hover:bg-grayscale-20]=\"!disabled\"\n [class.focus:border-2]=\"!disabled\"\n [class.focus:outline-none]=\"!disabled\"\n tabindex=\"0\"\n (click)=\"onSelect(node)\">\n @let nodeIconClass = getNodeIconClass(node);\n @if (nodeIconClass) {\n <span\n class=\"m-1.5 text-base text-grayscale-60\"\n [ngClass]=\"nodeIconClass\">\n </span>\n }\n @if (node.title) {\n <span class=\"m-1.5 text-sm font-normal leading-[150%] text-grayscale-90\">{{ node.title }}</span>\n }\n </button>\n }\n </div>\n <div class=\"flex justify-between py-3\">\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ startLabel }}</span>\n <span class=\"font-open-sans text-sm font-normal leading-[150%] text-[#080808]\">{{ endLabel }}</span>\n </div>\n</div>","import { NgModule } from '@angular/core';\r\n\r\nimport { RatingScaleComponent } from './rating-scale.component';\r\n\r\n@NgModule({\r\n imports: [RatingScaleComponent],\r\n exports: [RatingScaleComponent],\r\n})\r\nexport class RatingScaleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|