@seniorsistemas/angular-components 19.9.3 → 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/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
- package/drawer/README.md +9 -2
- package/drawer/lib/drawer/drawer.component.d.ts +12 -1
- package/editor/lib/editor/editor.component.d.ts +1 -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/button/lib/button/button.component.mjs +3 -3
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +33 -11
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -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/models/paginator.models.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +19 -13
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
- 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/side-sheet/lib/side-sheet/side-sheet.component.mjs +6 -5
- package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +58 -8
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +11 -3
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +1 -1
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/token-list/lib/token-list/token-list.component.mjs +7 -3
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
- package/esm2022/utils/lib/utils/utils.mjs +49 -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-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +32 -9
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +17 -17
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.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 +18 -12
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.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-side-sheet.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +57 -7
- 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-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
- package/fesm2022/seniorsistemas-angular-components-table-header.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 +2 -2
- 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/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.module.d.ts +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 +1 -3
- package/paginator/lib/models/paginator.models.d.ts +1 -0
- package/paginator/lib/paginator/paginator.component.d.ts +3 -1
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
- 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/side-sheet/README.md +4 -4
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +1 -0
- package/speech-recognition/README.md +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +4 -1
- package/split-button/README.md +2 -0
- package/split-button/lib/split-button/split-button.component.d.ts +5 -1
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
- package/token-list/lib/token-list/token-list.component.d.ts +3 -1
- package/utils/lib/utils/utils.d.ts +21 -0
|
@@ -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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"}
|
|
@@ -32,10 +32,11 @@ class PaginatorComponent {
|
|
|
32
32
|
/** @description Emitido sempre que a página ou o número de itens por página muda. */
|
|
33
33
|
pageChange = output();
|
|
34
34
|
currentPageEffect = effect(() => {
|
|
35
|
+
const totalPages = this.totalPages();
|
|
35
36
|
const page = this.currentPage() - 1;
|
|
36
37
|
this.pageChange.emit({
|
|
37
38
|
page,
|
|
38
|
-
pageCount:
|
|
39
|
+
pageCount: totalPages,
|
|
39
40
|
rows: this.rows(),
|
|
40
41
|
first: this.rows() * page,
|
|
41
42
|
});
|
|
@@ -49,7 +50,12 @@ class PaginatorComponent {
|
|
|
49
50
|
const nextPage = this.currentPage() + 1;
|
|
50
51
|
return nextPage <= this.totalPages();
|
|
51
52
|
});
|
|
52
|
-
|
|
53
|
+
requestedPage = signal(1);
|
|
54
|
+
/** @description Página atual, sempre reajustada para o intervalo válido de `[1, totalPages]`. */
|
|
55
|
+
currentPage = computed(() => {
|
|
56
|
+
const maxPage = Math.max(this.totalPages(), 1);
|
|
57
|
+
return Math.min(Math.max(this.requestedPage(), 1), maxPage);
|
|
58
|
+
});
|
|
53
59
|
buttons = computed(() => {
|
|
54
60
|
const navigationPageButtons = [];
|
|
55
61
|
const maxPageButtons = this.MAX_PAGE_BUTTONS;
|
|
@@ -84,6 +90,7 @@ class PaginatorComponent {
|
|
|
84
90
|
FIRST_PAGE_BUTTON = {
|
|
85
91
|
clicked: this.goFirstPage.bind(this),
|
|
86
92
|
icon: 'fas fa-step-backward',
|
|
93
|
+
ariaLabelKey: 'platform.angular_components.aria_first_page',
|
|
87
94
|
validate: computed(() => {
|
|
88
95
|
return !this.hasPreviousPage();
|
|
89
96
|
}),
|
|
@@ -91,6 +98,7 @@ class PaginatorComponent {
|
|
|
91
98
|
PREVIOUS_PAGE_BUTTON = {
|
|
92
99
|
clicked: this.goPreviousPage.bind(this),
|
|
93
100
|
icon: 'fas fa-caret-left',
|
|
101
|
+
ariaLabelKey: 'platform.angular_components.aria_previous_page',
|
|
94
102
|
validate: computed(() => {
|
|
95
103
|
return !this.hasPreviousPage();
|
|
96
104
|
}),
|
|
@@ -98,6 +106,7 @@ class PaginatorComponent {
|
|
|
98
106
|
LAST_PAGE_BUTTON = {
|
|
99
107
|
clicked: this.goLastPage.bind(this),
|
|
100
108
|
icon: 'fas fa-step-forward',
|
|
109
|
+
ariaLabelKey: 'platform.angular_components.aria_last_page',
|
|
101
110
|
validate: computed(() => {
|
|
102
111
|
return !this.hasNextPage();
|
|
103
112
|
}),
|
|
@@ -105,16 +114,13 @@ class PaginatorComponent {
|
|
|
105
114
|
NEXT_PAGE_BUTTON = {
|
|
106
115
|
clicked: this.goNextPage.bind(this),
|
|
107
116
|
icon: 'fas fa-caret-right',
|
|
117
|
+
ariaLabelKey: 'platform.angular_components.aria_next_page',
|
|
108
118
|
validate: computed(() => {
|
|
109
119
|
return !this.hasNextPage();
|
|
110
120
|
}),
|
|
111
121
|
};
|
|
112
122
|
totalPages = computed(() => {
|
|
113
|
-
|
|
114
|
-
const _pages = totalRecords / this.rows();
|
|
115
|
-
const pages = Math.ceil(_pages);
|
|
116
|
-
const isExactPages = _pages === pages;
|
|
117
|
-
return isExactPages ? pages : pages + 1;
|
|
123
|
+
return Math.ceil(this.totalRecords() / this.rows());
|
|
118
124
|
});
|
|
119
125
|
ngOnDestroy() {
|
|
120
126
|
this.currentPageEffect.destroy();
|
|
@@ -134,26 +140,26 @@ class PaginatorComponent {
|
|
|
134
140
|
if (!this.hasNextPage()) {
|
|
135
141
|
return;
|
|
136
142
|
}
|
|
137
|
-
this.currentPage
|
|
143
|
+
this.goToPage(this.currentPage() + 1);
|
|
138
144
|
}
|
|
139
145
|
goPreviousPage() {
|
|
140
146
|
if (!this.hasPreviousPage()) {
|
|
141
147
|
return;
|
|
142
148
|
}
|
|
143
|
-
this.currentPage
|
|
149
|
+
this.goToPage(this.currentPage() - 1);
|
|
144
150
|
}
|
|
145
151
|
goLastPage() {
|
|
146
152
|
this.goToPage(this.totalPages());
|
|
147
153
|
}
|
|
148
154
|
goToPage(pageIndex) {
|
|
149
|
-
this.
|
|
155
|
+
this.requestedPage.set(pageIndex);
|
|
150
156
|
}
|
|
151
157
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
-
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 <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 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\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\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" }] });
|
|
153
159
|
}
|
|
154
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
155
161
|
type: Component,
|
|
156
|
-
args: [{ selector: 's-paginator', standalone: true, imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule], 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 <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 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\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\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" }]
|
|
162
|
+
args: [{ selector: 's-paginator', standalone: true, imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule], 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" }]
|
|
157
163
|
}] });
|
|
158
164
|
|
|
159
165
|
/**
|
|
@@ -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 page = this.currentPage() - 1;\n this.pageChange.emit({\n page,\n pageCount: this.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 protected readonly currentPage = signal(1);\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 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 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 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 validate: computed(() => {\n return !this.hasNextPage();\n }),\n };\n\n private totalPages = computed(() => {\n const totalRecords = this.totalRecords();\n const _pages = totalRecords / this.rows();\n const pages = Math.ceil(_pages);\n const isExactPages = _pages === pages;\n return isExactPages ? pages : pages + 1;\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.currentPage.update((value) => value + 1);\n }\n\n private goPreviousPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n this.currentPage.update((value) => value - 1);\n }\n\n private goLastPage(): void {\n this.goToPage(this.totalPages());\n }\n\n private goToPage(pageIndex: number): void {\n this.currentPage.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 <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 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\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\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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"}
|