@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
|
@@ -27,6 +27,8 @@ class TokenListComponent {
|
|
|
27
27
|
removableTokens = false;
|
|
28
28
|
/** @description Quando `true`, remove os eventos de ponteiro (hover/clique) dos tokens. @default false */
|
|
29
29
|
hidePointerEvents = false;
|
|
30
|
+
/** @description Classe do ícone do botão de remover token. @default 'far fa-times' */
|
|
31
|
+
removeIconClass = 'far fa-times';
|
|
30
32
|
/** @description Emitido quando o usuário clica em um token não desabilitado. */
|
|
31
33
|
tokenSelected = new EventEmitter();
|
|
32
34
|
/** @description Emitido quando o usuário remove um token não desabilitado. */
|
|
@@ -42,11 +44,11 @@ class TokenListComponent {
|
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TokenListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TokenListComponent, isStandalone: true, selector: "s-token-list", inputs: { id: "id", tokens: "tokens", removableTokens: "removableTokens", hidePointerEvents: "hidePointerEvents" }, outputs: { tokenSelected: "tokenSelected", tokenRemoved: "tokenRemoved" }, ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n class=\"
|
|
47
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TokenListComponent, isStandalone: true, selector: "s-token-list", inputs: { id: "id", tokens: "tokens", removableTokens: "removableTokens", hidePointerEvents: "hidePointerEvents", removeIconClass: "removeIconClass" }, outputs: { tokenSelected: "tokenSelected", tokenRemoved: "tokenRemoved" }, ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n [class]=\"removeIconClass\"\n (click)=\"onTokenRemoved(token)\"\n >\n </span>\n }\n </span>\n }\n</div>\n", styles: [".no-pointer-events{pointer-events:none}.token-list{align-items:center;display:inline-flex;flex-wrap:wrap;max-width:100%;padding:0 10px;text-transform:none}.token-list .token{align-items:center;background-color:#e5eaea;border:1px solid #697882;border-radius:4px;color:#212533;display:flex;font:400 12px/150% Open Sans,sans-serif;gap:8px;margin:2px 5px 0 0;max-width:100%;padding:2px 8px;-webkit-user-select:none;user-select:none}.token-list .token-label{max-width:50ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.token-list .token:not(.token--disabled):hover,.token-list .token:not(.token--disabled):focus{background-color:#ccc}.token-list .token a{text-decoration:none;color:#212533}.token-list .token--disabled{opacity:50%}.token-list .token--disabled a{cursor:default}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
46
48
|
}
|
|
47
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TokenListComponent, decorators: [{
|
|
48
50
|
type: Component,
|
|
49
|
-
args: [{ selector: 's-token-list', standalone: true, imports: [NgClass], template: "<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n class=\"
|
|
51
|
+
args: [{ selector: 's-token-list', standalone: true, imports: [NgClass], template: "<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n [class]=\"removeIconClass\"\n (click)=\"onTokenRemoved(token)\"\n >\n </span>\n }\n </span>\n }\n</div>\n", styles: [".no-pointer-events{pointer-events:none}.token-list{align-items:center;display:inline-flex;flex-wrap:wrap;max-width:100%;padding:0 10px;text-transform:none}.token-list .token{align-items:center;background-color:#e5eaea;border:1px solid #697882;border-radius:4px;color:#212533;display:flex;font:400 12px/150% Open Sans,sans-serif;gap:8px;margin:2px 5px 0 0;max-width:100%;padding:2px 8px;-webkit-user-select:none;user-select:none}.token-list .token-label{max-width:50ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.token-list .token:not(.token--disabled):hover,.token-list .token:not(.token--disabled):focus{background-color:#ccc}.token-list .token a{text-decoration:none;color:#212533}.token-list .token--disabled{opacity:50%}.token-list .token--disabled a{cursor:default}\n"] }]
|
|
50
52
|
}], propDecorators: { id: [{
|
|
51
53
|
type: Input
|
|
52
54
|
}], tokens: [{
|
|
@@ -56,6 +58,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
56
58
|
type: Input
|
|
57
59
|
}], hidePointerEvents: [{
|
|
58
60
|
type: Input
|
|
61
|
+
}], removeIconClass: [{
|
|
62
|
+
type: Input
|
|
59
63
|
}], tokenSelected: [{
|
|
60
64
|
type: Output
|
|
61
65
|
}], tokenRemoved: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-token-list.mjs","sources":["../../projects/angular-components/token-list/src/lib/token-list/token-list.component.ts","../../projects/angular-components/token-list/src/lib/token-list/token-list.component.html","../../projects/angular-components/token-list/src/lib/token-list/token-list.module.ts","../../projects/angular-components/token-list/src/seniorsistemas-angular-components-token-list.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { IToken } from './models/token';\r\n\r\n/**\r\n * @description Componente de lista de tokens (etiquetas) clicáveis e opcionalmente\r\n * removíveis. Emite eventos ao selecionar ou remover um token.\r\n *\r\n * @example\r\n * ```html\r\n * <s-token-list\r\n * [tokens]=\"listaDeTokens\"\r\n * [removableTokens]=\"true\"\r\n * (tokenSelected)=\"onTokenSelecionado($event)\"\r\n * (tokenRemoved)=\"onTokenRemovido($event)\" />\r\n * ```\r\n *\r\n * @category Summary\r\n */\r\n@Component({\r\n selector: 's-token-list',\r\n templateUrl: './token-list.component.html',\r\n styleUrls: ['./token-list.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class TokenListComponent {\r\n public static nextId = 0;\r\n\r\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\r\n @Input()\r\n public id = `s-token-list-${TokenListComponent.nextId++}`;\r\n\r\n /** @description Lista de tokens exibidos. Campo obrigatório. */\r\n @Input({ required: true })\r\n public tokens!: IToken[];\r\n\r\n /** @description Exibe o botão de remoção em cada token. @default false */\r\n @Input()\r\n public removableTokens = false;\r\n\r\n /** @description Quando `true`, remove os eventos de ponteiro (hover/clique) dos tokens. @default false */\r\n @Input()\r\n public hidePointerEvents = false;\r\n\r\n /** @description Emitido quando o usuário clica em um token não desabilitado. */\r\n @Output()\r\n public tokenSelected: EventEmitter<IToken> = new EventEmitter();\r\n\r\n /** @description Emitido quando o usuário remove um token não desabilitado. */\r\n @Output()\r\n public tokenRemoved: EventEmitter<IToken> = new EventEmitter();\r\n\r\n public onTokenSelected(token: IToken): void {\r\n if (!token.disabled) {\r\n this.tokenSelected.next(token);\r\n }\r\n }\r\n\r\n public onTokenRemoved(token: IToken): void {\r\n if (!token.disabled) {\r\n this.tokenRemoved.next(token);\r\n }\r\n }\r\n}\r\n","<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n class=\"
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-token-list.mjs","sources":["../../projects/angular-components/token-list/src/lib/token-list/token-list.component.ts","../../projects/angular-components/token-list/src/lib/token-list/token-list.component.html","../../projects/angular-components/token-list/src/lib/token-list/token-list.module.ts","../../projects/angular-components/token-list/src/seniorsistemas-angular-components-token-list.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { IToken } from './models/token';\r\n\r\n/**\r\n * @description Componente de lista de tokens (etiquetas) clicáveis e opcionalmente\r\n * removíveis. Emite eventos ao selecionar ou remover um token.\r\n *\r\n * @example\r\n * ```html\r\n * <s-token-list\r\n * [tokens]=\"listaDeTokens\"\r\n * [removableTokens]=\"true\"\r\n * (tokenSelected)=\"onTokenSelecionado($event)\"\r\n * (tokenRemoved)=\"onTokenRemovido($event)\" />\r\n * ```\r\n *\r\n * @category Summary\r\n */\r\n@Component({\r\n selector: 's-token-list',\r\n templateUrl: './token-list.component.html',\r\n styleUrls: ['./token-list.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class TokenListComponent {\r\n public static nextId = 0;\r\n\r\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\r\n @Input()\r\n public id = `s-token-list-${TokenListComponent.nextId++}`;\r\n\r\n /** @description Lista de tokens exibidos. Campo obrigatório. */\r\n @Input({ required: true })\r\n public tokens!: IToken[];\r\n\r\n /** @description Exibe o botão de remoção em cada token. @default false */\r\n @Input()\r\n public removableTokens = false;\r\n\r\n /** @description Quando `true`, remove os eventos de ponteiro (hover/clique) dos tokens. @default false */\r\n @Input()\r\n public hidePointerEvents = false;\r\n\r\n /** @description Classe do ícone do botão de remover token. @default 'far fa-times' */\r\n @Input()\r\n public removeIconClass = 'far fa-times';\r\n\r\n /** @description Emitido quando o usuário clica em um token não desabilitado. */\r\n @Output()\r\n public tokenSelected: EventEmitter<IToken> = new EventEmitter();\r\n\r\n /** @description Emitido quando o usuário remove um token não desabilitado. */\r\n @Output()\r\n public tokenRemoved: EventEmitter<IToken> = new EventEmitter();\r\n\r\n public onTokenSelected(token: IToken): void {\r\n if (!token.disabled) {\r\n this.tokenSelected.next(token);\r\n }\r\n }\r\n\r\n public onTokenRemoved(token: IToken): void {\r\n if (!token.disabled) {\r\n this.tokenRemoved.next(token);\r\n }\r\n }\r\n}\r\n","<div\n [id]=\"id\"\n class=\"token-list\"\n>\n @for (token of tokens; track $index) {\n <span\n [id]=\"token.id\"\n class=\"token\"\n [ngClass]=\"{\n 'no-pointer-events': hidePointerEvents,\n 'token--disabled': token.disabled,\n }\"\n >\n <a\n [id]=\"(token.id || 'token') + '-label'\"\n class=\"token-label\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </a>\n @if (removableTokens && !token.notRemovable) {\n <span\n [id]=\"token.id + '-remove'\"\n [class]=\"removeIconClass\"\n (click)=\"onTokenRemoved(token)\"\n >\n </span>\n }\n </span>\n }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TokenListComponent } from './token-list.component';\r\n\r\n@NgModule({\r\n imports: [TokenListComponent],\r\n exports: [TokenListComponent],\r\n})\r\nexport class TokenListModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -187,7 +187,8 @@ class TooltipDirective {
|
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
189
|
_createTooltip(useShowDelay = false, autoDestroy = true) {
|
|
190
|
-
const
|
|
190
|
+
const tooltipValue = this.tooltip();
|
|
191
|
+
const tooltipText = tooltipValue === undefined || tooltipValue === null ? '' : String(tooltipValue);
|
|
191
192
|
if (!tooltipText.length || this.overlayRef !== null)
|
|
192
193
|
return;
|
|
193
194
|
if (this.checkTruncatedText() && !this.contentIsTruncated)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-tooltip.mjs","sources":["../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.html","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.directive.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.module.ts","../../projects/angular-components/tooltip/src/seniorsistemas-angular-components-tooltip.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nimport { TooltipPositions } from './models/tooltip-position';\n\n/**\n * @description Componente de apresentação do tooltip. Utilizado internamente pela diretiva `TooltipDirective`.\n * O posicionamento é gerenciado pelo CDK Overlay via `TooltipDirective`.\n */\n@Component({\n selector: 's-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n standalone: true,\n imports: [NgClass],\n})\nexport class TooltipComponent {\n /** @description Texto ou HTML a ser exibido no tooltip. */\n public readonly tooltip = input<string>('');\n\n /** @description Posição do tooltip — usada para renderizar a seta no lado correto. */\n public readonly position = input<TooltipPositions>('top');\n\n /** @description Controla a visibilidade (opacidade) do tooltip via transição CSS. */\n public readonly visible = input<boolean>(false);\n\n /** @description Quando `true`, o conteúdo é renderizado como texto puro (escapa HTML). */\n public readonly escape = input<boolean>(false);\n}\n\n","<div\n class=\"tooltip relative max-w-[220px] break-words rounded-xsmall bg-grayscale-100 p-2 text-center font-open-sans text-sm font-normal leading-normal text-grayscale-0 transition-opacity duration-300\"\n [class.opacity-0]=\"!visible()\"\n [class.opacity-100]=\"visible()\"\n [class.tooltip--visible]=\"visible()\"\n [ngClass]=\"'tooltip--' + position()\"\n>\n @if (escape()) {\n <span class=\"tooltip__content\">\n {{ tooltip() }}\n </span>\n } @else {\n <span\n class=\"tooltip__content\"\n [innerHTML]=\"tooltip()\"\n >\n </span>\n }\n</div>\n\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n OnInit,\n Renderer2,\n inject,\n input,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DebounceUtils } from '@seniorsistemas/angular-components/common';\nimport { MobileBehavior } from './models/mobile-behavior';\nimport { TooltipEvent } from './models/tooltip-event';\nimport { TooltipPositions } from './models/tooltip-position';\nimport { TooltipComponent } from './tooltip.component';\n\n/**\n * @description Diretiva que exibe um tooltip (dica de ferramenta) flutuante ao interagir com o elemento hospedeiro.\n * Posiciona-se automaticamente considerando o espaço disponível na tela, utilizando o CDK Overlay.\n * Suporta eventos de hover, click e focus, além de comportamentos customizados para mobile.\n *\n * @example\n * ```html\n * <button sTooltip=\"Clique aqui\" tooltipPosition=\"top\">Ação</button>\n * ```\n *\n * @category Overlay\n */\n@Directive({\n selector: '[sTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnInit, OnDestroy {\n /**\n * @description Texto exibido no tooltip. Quando vazio ou `undefined`, o tooltip não é renderizado.\n */\n public readonly tooltip = input<string | undefined>(undefined, { alias: 'sTooltip' });\n\n /**\n * @description Posição preferencial do tooltip em relação ao elemento hospedeiro.\n * O tooltip se reposiciona automaticamente se não houver espaço suficiente.\n *\n * @default 'top'\n */\n public readonly tooltipPosition = input<TooltipPositions>('top');\n\n /**\n * @description Tempo em milissegundos antes do tooltip aparecer após o evento de ativação.\n *\n * @default 500\n */\n public readonly showDelay = input<number>(500);\n\n /**\n * @description Tempo em milissegundos que o tooltip permanece visível após aparecer.\n * Quando não informado, o tooltip permanece até o usuário sair do elemento.\n */\n public readonly displayTime = input<number | undefined>(undefined);\n\n /**\n * @description Evento do elemento hospedeiro que dispara a exibição do tooltip.\n * - `'hover'`: exibe ao passar o mouse (padrão).\n * - `'click'`: exibe ao clicar.\n * - `'focus'`: exibe ao focar no elemento.\n *\n * @default 'hover'\n */\n public readonly tooltipEvent = input<TooltipEvent>('hover');\n\n /**\n * @description Quando `true`, o conteúdo HTML do tooltip é escapado antes de ser renderizado.\n *\n * @default false\n */\n public readonly escape = input<boolean>(false);\n\n /**\n * @description Quando `false`, o tooltip nunca é exibido, mesmo que haja interação do usuário.\n * Útil para desabilitar tooltips dinamicamente.\n *\n * @default true\n */\n public readonly visible = input<boolean>(true);\n\n /**\n * @description Comportamento do tooltip em dispositivos móveis (touch).\n * - `'pressing'`: exibe ao pressionar e manter o toque (padrão).\n * - `'none'`: desabilita o tooltip em dispositivos táteis.\n *\n * @default 'pressing'\n */\n public readonly mobileBehavior = input<MobileBehavior>('pressing');\n\n /**\n * @description Referência a um input HTML para sincronizar a exibição do tooltip com o foco no campo.\n */\n public readonly focusedInputRef = input<HTMLInputElement | null>(null);\n\n /**\n * @description Quando `true`, o tooltip só é exibido se o texto do elemento estiver truncado (overflow).\n * Útil para cells de tabela ou elementos com `text-overflow: ellipsis`.\n *\n * @default false\n */\n public readonly checkTruncatedText = input<boolean>(false);\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly debounceUtils = inject(DebounceUtils);\n private readonly renderer = inject(Renderer2);\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<TooltipComponent> | null = null;\n private positionChangeSubscription: Subscription | null = null;\n private showTimeout?: number;\n private touchTimeout?: number;\n private tooltipCreatedByFocus = false;\n private readonly debounceCreateTooltipFunction = this.debounceUtils.debounceLeading(() =>\n this._createTooltip(true, true),\n );\n\n public ngOnInit(): void {\n this.validatePosition();\n this.updateTooltipVisibilityWhenFocusOnInput();\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n // whenever the component with the tooltip is clicked I destroy the tooltip.\n // whenever a key is pressed on the component with the tooltip I destroy the tooltip.\n @HostListener('click')\n @HostListener('keydown')\n public onClick(): void {\n if (\n this.tooltipEvent() === 'hover' &&\n !navigator.userAgent.match(/Android/i) &&\n !navigator.userAgent.match(/iPhone/i)\n ) {\n this.destroy();\n }\n }\n\n @HostListener('focus')\n public onFocus(): void {\n if (this.tooltipEvent() === 'focus') {\n this._createTooltip(true, true);\n }\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this.tooltipEvent() === 'focus') {\n this.destroy();\n }\n }\n\n @HostListener('mouseenter')\n public onMouseEnter(): void {\n if (this.tooltipEvent() === 'hover' || this.focusedInputRef()) {\n this.debounceCreateTooltipFunction();\n }\n }\n\n @HostListener('mouseleave')\n @HostListener('wheel')\n public onMouseLeave(): void {\n if ((this.tooltipEvent() === 'hover' || this.focusedInputRef()) && !this.tooltipCreatedByFocus) {\n this.destroy();\n }\n }\n\n @HostListener('touchstart')\n public onTouchStart(): void {\n if (this.tooltipEvent() === 'hover') {\n window.clearTimeout(this.touchTimeout);\n const delay = this.mobileBehavior() === 'pressing' ? this.showDelay() : 0;\n this.touchTimeout = window.setTimeout(() => {\n this._createTooltip(true, true);\n }, delay);\n }\n }\n\n @HostListener('touchend')\n public onTouchEnd(): void {\n if (this.tooltipEvent() === 'hover' && this.mobileBehavior() === 'pressing') {\n window.clearTimeout(this.touchTimeout);\n this.destroy();\n }\n }\n\n private validatePosition(): void {\n const containsPosition = ['top', 'right', 'bottom', 'left'].includes(this.tooltipPosition());\n if (!containsPosition) {\n throw new Error(`Tooltip position \"${this.tooltipPosition()}\" is unexpected`);\n }\n }\n\n /**\n * Manipula a visibilidade do tooltip quando houver uma referência de input.\n */\n private updateTooltipVisibilityWhenFocusOnInput(): void {\n const inputRef = this.focusedInputRef();\n if (!inputRef) return;\n\n this.renderer.listen(inputRef, 'focus', () => {\n this._createTooltip(false, false);\n this.tooltipCreatedByFocus = true;\n });\n this.renderer.listen(inputRef, 'blur', () => {\n this.destroy();\n this.tooltipCreatedByFocus = false;\n });\n }\n\n private _createTooltip(useShowDelay = false, autoDestroy = true): void {\n const tooltipText = this.tooltip() ?? '';\n if (!tooltipText.length || this.overlayRef !== null) return;\n\n if (this.checkTruncatedText() && !this.contentIsTruncated) return;\n\n const positionStrategy = this.buildPositionStrategy();\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy });\n\n const portal = new ComponentPortal(TooltipComponent);\n this.componentRef = this.overlayRef.attach(portal);\n\n this.componentRef.setInput('tooltip', tooltipText);\n this.componentRef.setInput('escape', this.escape());\n this.componentRef.setInput('position', this.tooltipPosition());\n\n this.positionChangeSubscription = positionStrategy.positionChanges.subscribe((change) => {\n const mappedPosition = this.mapCdkPositionToTooltipPosition(change.connectionPair);\n this.componentRef?.setInput('position', mappedPosition);\n });\n\n const delay = useShowDelay ? this.showDelay() : 0;\n this.showTimeout = window.setTimeout(() => {\n this.componentRef?.setInput('visible', this.visible());\n }, delay);\n\n if (autoDestroy && this.displayTime()) {\n window.setTimeout(() => {\n this.destroy();\n }, this.displayTime()!);\n }\n }\n\n private buildPositionStrategy(): FlexibleConnectedPositionStrategy {\n const preferred = this.tooltipPosition();\n const allPositions: TooltipPositions[] = ['top', 'bottom', 'left', 'right'];\n const orderedPositions = [preferred, ...allPositions.filter((p) => p !== preferred)];\n\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(orderedPositions.map((p) => this.getConnectedPosition(p)))\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private getConnectedPosition(pos: TooltipPositions): ConnectedPosition {\n const offset = 10;\n const positionMap: Record<TooltipPositions, ConnectedPosition> = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n };\n return positionMap[pos];\n }\n\n private mapCdkPositionToTooltipPosition(pair: { overlayX: string; overlayY: string }): TooltipPositions {\n if (pair.overlayY === 'bottom') return 'top';\n if (pair.overlayY === 'top') return 'bottom';\n if (pair.overlayX === 'end') return 'left';\n return 'right';\n }\n\n private destroy(): void {\n window.clearTimeout(this.showTimeout);\n window.clearTimeout(this.touchTimeout);\n this.positionChangeSubscription?.unsubscribe();\n this.positionChangeSubscription = null;\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n this.componentRef = null;\n }\n }\n\n private get contentIsTruncated(): boolean {\n const element = this.elementRef.nativeElement as HTMLElement;\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n }\n}\n\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TooltipDirective } from './tooltip.directive';\r\n\r\n@NgModule({\r\n imports: [TooltipDirective],\r\n exports: [TooltipDirective],\r\n})\r\nexport class TooltipModule {}\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-tooltip.mjs","sources":["../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.html","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.directive.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.module.ts","../../projects/angular-components/tooltip/src/seniorsistemas-angular-components-tooltip.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nimport { TooltipPositions } from './models/tooltip-position';\n\n/**\n * @description Componente de apresentação do tooltip. Utilizado internamente pela diretiva `TooltipDirective`.\n * O posicionamento é gerenciado pelo CDK Overlay via `TooltipDirective`.\n */\n@Component({\n selector: 's-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n standalone: true,\n imports: [NgClass],\n})\nexport class TooltipComponent {\n /** @description Texto ou HTML a ser exibido no tooltip. */\n public readonly tooltip = input<string>('');\n\n /** @description Posição do tooltip — usada para renderizar a seta no lado correto. */\n public readonly position = input<TooltipPositions>('top');\n\n /** @description Controla a visibilidade (opacidade) do tooltip via transição CSS. */\n public readonly visible = input<boolean>(false);\n\n /** @description Quando `true`, o conteúdo é renderizado como texto puro (escapa HTML). */\n public readonly escape = input<boolean>(false);\n}\n\n","<div\n class=\"tooltip relative max-w-[220px] break-words rounded-xsmall bg-grayscale-100 p-2 text-center font-open-sans text-sm font-normal leading-normal text-grayscale-0 transition-opacity duration-300\"\n [class.opacity-0]=\"!visible()\"\n [class.opacity-100]=\"visible()\"\n [class.tooltip--visible]=\"visible()\"\n [ngClass]=\"'tooltip--' + position()\"\n>\n @if (escape()) {\n <span class=\"tooltip__content\">\n {{ tooltip() }}\n </span>\n } @else {\n <span\n class=\"tooltip__content\"\n [innerHTML]=\"tooltip()\"\n >\n </span>\n }\n</div>\n\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n OnInit,\n Renderer2,\n inject,\n input,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DebounceUtils } from '@seniorsistemas/angular-components/common';\nimport { MobileBehavior } from './models/mobile-behavior';\nimport { TooltipEvent } from './models/tooltip-event';\nimport { TooltipPositions } from './models/tooltip-position';\nimport { TooltipComponent } from './tooltip.component';\n\n/**\n * @description Diretiva que exibe um tooltip (dica de ferramenta) flutuante ao interagir com o elemento hospedeiro.\n * Posiciona-se automaticamente considerando o espaço disponível na tela, utilizando o CDK Overlay.\n * Suporta eventos de hover, click e focus, além de comportamentos customizados para mobile.\n *\n * @example\n * ```html\n * <button sTooltip=\"Clique aqui\" tooltipPosition=\"top\">Ação</button>\n * ```\n *\n * @category Overlay\n */\n@Directive({\n selector: '[sTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnInit, OnDestroy {\n /**\n * @description Texto exibido no tooltip. Quando vazio ou `undefined`, o tooltip não é renderizado.\n */\n public readonly tooltip = input<string | undefined>(undefined, { alias: 'sTooltip' });\n\n /**\n * @description Posição preferencial do tooltip em relação ao elemento hospedeiro.\n * O tooltip se reposiciona automaticamente se não houver espaço suficiente.\n *\n * @default 'top'\n */\n public readonly tooltipPosition = input<TooltipPositions>('top');\n\n /**\n * @description Tempo em milissegundos antes do tooltip aparecer após o evento de ativação.\n *\n * @default 500\n */\n public readonly showDelay = input<number>(500);\n\n /**\n * @description Tempo em milissegundos que o tooltip permanece visível após aparecer.\n * Quando não informado, o tooltip permanece até o usuário sair do elemento.\n */\n public readonly displayTime = input<number | undefined>(undefined);\n\n /**\n * @description Evento do elemento hospedeiro que dispara a exibição do tooltip.\n * - `'hover'`: exibe ao passar o mouse (padrão).\n * - `'click'`: exibe ao clicar.\n * - `'focus'`: exibe ao focar no elemento.\n *\n * @default 'hover'\n */\n public readonly tooltipEvent = input<TooltipEvent>('hover');\n\n /**\n * @description Quando `true`, o conteúdo HTML do tooltip é escapado antes de ser renderizado.\n *\n * @default false\n */\n public readonly escape = input<boolean>(false);\n\n /**\n * @description Quando `false`, o tooltip nunca é exibido, mesmo que haja interação do usuário.\n * Útil para desabilitar tooltips dinamicamente.\n *\n * @default true\n */\n public readonly visible = input<boolean>(true);\n\n /**\n * @description Comportamento do tooltip em dispositivos móveis (touch).\n * - `'pressing'`: exibe ao pressionar e manter o toque (padrão).\n * - `'none'`: desabilita o tooltip em dispositivos táteis.\n *\n * @default 'pressing'\n */\n public readonly mobileBehavior = input<MobileBehavior>('pressing');\n\n /**\n * @description Referência a um input HTML para sincronizar a exibição do tooltip com o foco no campo.\n */\n public readonly focusedInputRef = input<HTMLInputElement | null>(null);\n\n /**\n * @description Quando `true`, o tooltip só é exibido se o texto do elemento estiver truncado (overflow).\n * Útil para cells de tabela ou elementos com `text-overflow: ellipsis`.\n *\n * @default false\n */\n public readonly checkTruncatedText = input<boolean>(false);\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly debounceUtils = inject(DebounceUtils);\n private readonly renderer = inject(Renderer2);\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<TooltipComponent> | null = null;\n private positionChangeSubscription: Subscription | null = null;\n private showTimeout?: number;\n private touchTimeout?: number;\n private tooltipCreatedByFocus = false;\n private readonly debounceCreateTooltipFunction = this.debounceUtils.debounceLeading(() =>\n this._createTooltip(true, true),\n );\n\n public ngOnInit(): void {\n this.validatePosition();\n this.updateTooltipVisibilityWhenFocusOnInput();\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n // whenever the component with the tooltip is clicked I destroy the tooltip.\n // whenever a key is pressed on the component with the tooltip I destroy the tooltip.\n @HostListener('click')\n @HostListener('keydown')\n public onClick(): void {\n if (\n this.tooltipEvent() === 'hover' &&\n !navigator.userAgent.match(/Android/i) &&\n !navigator.userAgent.match(/iPhone/i)\n ) {\n this.destroy();\n }\n }\n\n @HostListener('focus')\n public onFocus(): void {\n if (this.tooltipEvent() === 'focus') {\n this._createTooltip(true, true);\n }\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this.tooltipEvent() === 'focus') {\n this.destroy();\n }\n }\n\n @HostListener('mouseenter')\n public onMouseEnter(): void {\n if (this.tooltipEvent() === 'hover' || this.focusedInputRef()) {\n this.debounceCreateTooltipFunction();\n }\n }\n\n @HostListener('mouseleave')\n @HostListener('wheel')\n public onMouseLeave(): void {\n if ((this.tooltipEvent() === 'hover' || this.focusedInputRef()) && !this.tooltipCreatedByFocus) {\n this.destroy();\n }\n }\n\n @HostListener('touchstart')\n public onTouchStart(): void {\n if (this.tooltipEvent() === 'hover') {\n window.clearTimeout(this.touchTimeout);\n const delay = this.mobileBehavior() === 'pressing' ? this.showDelay() : 0;\n this.touchTimeout = window.setTimeout(() => {\n this._createTooltip(true, true);\n }, delay);\n }\n }\n\n @HostListener('touchend')\n public onTouchEnd(): void {\n if (this.tooltipEvent() === 'hover' && this.mobileBehavior() === 'pressing') {\n window.clearTimeout(this.touchTimeout);\n this.destroy();\n }\n }\n\n private validatePosition(): void {\n const containsPosition = ['top', 'right', 'bottom', 'left'].includes(this.tooltipPosition());\n if (!containsPosition) {\n throw new Error(`Tooltip position \"${this.tooltipPosition()}\" is unexpected`);\n }\n }\n\n /**\n * Manipula a visibilidade do tooltip quando houver uma referência de input.\n */\n private updateTooltipVisibilityWhenFocusOnInput(): void {\n const inputRef = this.focusedInputRef();\n if (!inputRef) return;\n\n this.renderer.listen(inputRef, 'focus', () => {\n this._createTooltip(false, false);\n this.tooltipCreatedByFocus = true;\n });\n this.renderer.listen(inputRef, 'blur', () => {\n this.destroy();\n this.tooltipCreatedByFocus = false;\n });\n }\n\n private _createTooltip(useShowDelay = false, autoDestroy = true): void {\n const tooltipValue = this.tooltip();\n const tooltipText = tooltipValue === undefined || tooltipValue === null ? '' : String(tooltipValue);\n if (!tooltipText.length || this.overlayRef !== null) return;\n\n if (this.checkTruncatedText() && !this.contentIsTruncated) return;\n\n const positionStrategy = this.buildPositionStrategy();\n const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy });\n\n const portal = new ComponentPortal(TooltipComponent);\n this.componentRef = this.overlayRef.attach(portal);\n\n this.componentRef.setInput('tooltip', tooltipText);\n this.componentRef.setInput('escape', this.escape());\n this.componentRef.setInput('position', this.tooltipPosition());\n\n this.positionChangeSubscription = positionStrategy.positionChanges.subscribe((change) => {\n const mappedPosition = this.mapCdkPositionToTooltipPosition(change.connectionPair);\n this.componentRef?.setInput('position', mappedPosition);\n });\n\n const delay = useShowDelay ? this.showDelay() : 0;\n this.showTimeout = window.setTimeout(() => {\n this.componentRef?.setInput('visible', this.visible());\n }, delay);\n\n if (autoDestroy && this.displayTime()) {\n window.setTimeout(() => {\n this.destroy();\n }, this.displayTime()!);\n }\n }\n\n private buildPositionStrategy(): FlexibleConnectedPositionStrategy {\n const preferred = this.tooltipPosition();\n const allPositions: TooltipPositions[] = ['top', 'bottom', 'left', 'right'];\n const orderedPositions = [preferred, ...allPositions.filter((p) => p !== preferred)];\n\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(orderedPositions.map((p) => this.getConnectedPosition(p)))\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private getConnectedPosition(pos: TooltipPositions): ConnectedPosition {\n const offset = 10;\n const positionMap: Record<TooltipPositions, ConnectedPosition> = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n };\n return positionMap[pos];\n }\n\n private mapCdkPositionToTooltipPosition(pair: { overlayX: string; overlayY: string }): TooltipPositions {\n if (pair.overlayY === 'bottom') return 'top';\n if (pair.overlayY === 'top') return 'bottom';\n if (pair.overlayX === 'end') return 'left';\n return 'right';\n }\n\n private destroy(): void {\n window.clearTimeout(this.showTimeout);\n window.clearTimeout(this.touchTimeout);\n this.positionChangeSubscription?.unsubscribe();\n this.positionChangeSubscription = null;\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n this.componentRef = null;\n }\n }\n\n private get contentIsTruncated(): boolean {\n const element = this.elementRef.nativeElement as HTMLElement;\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n }\n}\n\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TooltipDirective } from './tooltip.directive';\r\n\r\n@NgModule({\r\n imports: [TooltipDirective],\r\n exports: [TooltipDirective],\r\n})\r\nexport class TooltipModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -53,11 +53,57 @@ const getElementLeftoverContentAvailable = (element) => {
|
|
|
53
53
|
freeDistanceToRight,
|
|
54
54
|
};
|
|
55
55
|
};
|
|
56
|
+
let scrollLockCount = 0;
|
|
57
|
+
let previousBodyOverflow = null;
|
|
58
|
+
/**
|
|
59
|
+
* @description Libera um lock de scroll adquirido via `disableScroll`. Como múltiplos overlays
|
|
60
|
+
* (ex: Drawer, SideSheet) podem estar abertos ao mesmo tempo e todos chamam essa mesma função,
|
|
61
|
+
* o scroll só é de fato reativado quando o último lock pendente é liberado — e restaura o valor
|
|
62
|
+
* de `overflow` anterior ao primeiro `disableScroll`, em vez de sempre forçar `'auto'`.
|
|
63
|
+
*/
|
|
56
64
|
const enableScroll = () => {
|
|
57
|
-
|
|
65
|
+
if (scrollLockCount === 0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
scrollLockCount--;
|
|
69
|
+
if (scrollLockCount === 0) {
|
|
70
|
+
document.body.style.overflow = previousBodyOverflow ?? '';
|
|
71
|
+
previousBodyOverflow = null;
|
|
72
|
+
}
|
|
58
73
|
};
|
|
74
|
+
/**
|
|
75
|
+
* @description Bloqueia o scroll da página. Contabiliza quantos overlays pediram o bloqueio
|
|
76
|
+
* simultaneamente, para que fechar um não reative o scroll enquanto outro ainda estiver aberto.
|
|
77
|
+
*/
|
|
59
78
|
const disableScroll = () => {
|
|
60
|
-
|
|
79
|
+
if (scrollLockCount === 0) {
|
|
80
|
+
previousBodyOverflow = document.body.style.overflow;
|
|
81
|
+
document.body.style.overflow = 'hidden';
|
|
82
|
+
}
|
|
83
|
+
scrollLockCount++;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* @description Cria um controle de lock de scroll para uma instância (ex: um componente de
|
|
87
|
+
* overlay). Chamar `lock`/`unlock` várias vezes seguidas é seguro — cada instância só chama
|
|
88
|
+
* `disableScroll`/`enableScroll` (que ela mesma adquiriu, evitando liberar o lock de outro overlay
|
|
89
|
+
* por engano) na primeira vez que necessário.
|
|
90
|
+
*/
|
|
91
|
+
const createScrollLock = () => {
|
|
92
|
+
let locked = false;
|
|
93
|
+
return {
|
|
94
|
+
lock: () => {
|
|
95
|
+
if (!locked) {
|
|
96
|
+
disableScroll();
|
|
97
|
+
locked = true;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
unlock: () => {
|
|
101
|
+
if (locked) {
|
|
102
|
+
enableScroll();
|
|
103
|
+
locked = false;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
61
107
|
};
|
|
62
108
|
function deepClone(value, weakMap = new WeakMap()) {
|
|
63
109
|
if (value !== null && typeof value === 'object') {
|
|
@@ -117,5 +163,5 @@ function deepClone(value, weakMap = new WeakMap()) {
|
|
|
117
163
|
* Generated bundle index. Do not edit.
|
|
118
164
|
*/
|
|
119
165
|
|
|
120
|
-
export { Breakpoints, deepClone, disableScroll, enableScroll, getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement, isNullOrUndefined, randomHash };
|
|
166
|
+
export { Breakpoints, createScrollLock, deepClone, disableScroll, enableScroll, getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement, isNullOrUndefined, randomHash };
|
|
121
167
|
//# sourceMappingURL=seniorsistemas-angular-components-utils.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-utils.mjs","sources":["../../projects/angular-components/utils/src/lib/utils/breakpoints.ts","../../projects/angular-components/utils/src/lib/utils/utils.ts","../../projects/angular-components/utils/src/seniorsistemas-angular-components-utils.ts"],"sourcesContent":["export const Breakpoints = {\n SM_MIN: 0 as const,\n SM_MAX: 767 as const,\n MD_MIN: 768 as const,\n MD_MAX: 991 as const,\n LG_MIN: 992 as const,\n LG_MAX: 1199 as const,\n XL_MIN: 1200 as const,\n XL_MAX: Infinity,\n};\n","export type ElementPosition = {\n top: number;\n left: number;\n right: number;\n elementHeight: number;\n elementWidth: number;\n elementVerticalCenter: number;\n elementHorizontalCenter: number;\n};\n\nexport type ElementLeftoverPosition = {\n freeDistanceToBottom: number;\n freeDistanceToTop: number;\n freeDistanceToLeft: number;\n freeDistanceToRight: number;\n};\n\nexport const randomHash = (prefix = 'id') => {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}-${Date.now().toString(36)}`;\n};\nexport const isNullOrUndefined = (value: unknown) => value === null || value === undefined;\nexport const isMousePositionOutsideOfElement = (\n event: MouseEvent | PointerEvent,\n elementArea: {\n top: number;\n right: number;\n left: number;\n bottom: number;\n },\n) => {\n const eventX = event.clientX;\n const eventY = event.clientY;\n return (\n eventX < elementArea.left ||\n eventX >= elementArea.right ||\n eventY < elementArea.top ||\n eventY >= elementArea.bottom\n );\n};\n\nexport const getElementPositionInfo = (element: HTMLElement): ElementPosition => {\n const rect = element.getBoundingClientRect();\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\n\n const elementHeight = rect.height;\n const elementWidth = rect.width;\n const elementVerticalCenter = elementHeight / 2;\n const elementHorizontalCenter = elementWidth / 2;\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft,\n right: rect.left + scrollLeft + elementWidth,\n elementHeight,\n elementWidth,\n elementVerticalCenter,\n elementHorizontalCenter,\n };\n};\n\nexport const getElementLeftoverContentAvailable = (element: HTMLElement): ElementLeftoverPosition => {\n const windowWidth = window.innerWidth;\n const popoverElementTriggerRect = element.getBoundingClientRect();\n const freeDistanceToBottom = window.innerHeight - popoverElementTriggerRect.bottom;\n const freeDistanceToTop = popoverElementTriggerRect.top;\n const freeDistanceToLeft = popoverElementTriggerRect.left;\n const freeDistanceToRight = windowWidth - popoverElementTriggerRect.right;\n return {\n freeDistanceToBottom,\n freeDistanceToTop,\n freeDistanceToLeft,\n freeDistanceToRight,\n };\n};\n\nexport const enableScroll = (): void => {\n document.body.style.overflow = 'auto';\n};\n\nexport const disableScroll = (): void => {\n document.body.style.overflow = 'hidden';\n};\n\nexport function deepClone<T>(value: T, weakMap = new WeakMap()): T {\n if (value !== null && typeof value === 'object') {\n if (weakMap.has(value)) return weakMap.get(value);\n }\n\n if (value === null || typeof value !== 'object' || value instanceof Function) {\n return value;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as any;\n }\n\n if (Array.isArray(value)) {\n const arr: any[] = [];\n weakMap.set(value, arr);\n value.forEach((item, i) => {\n arr[i] = deepClone(item, weakMap);\n });\n return arr as any;\n }\n\n if (value instanceof Map) {\n const result = new Map();\n weakMap.set(value, result);\n value.forEach((v, k) => {\n result.set(deepClone(k, weakMap), deepClone(v, weakMap));\n });\n return result as any;\n }\n\n if (value instanceof Set) {\n const result = new Set();\n weakMap.set(value, result);\n value.forEach((v) => {\n result.add(deepClone(v, weakMap));\n });\n return result as any;\n }\n\n if (ArrayBuffer.isView(value)) {\n return new (value.constructor as any)(value) as any;\n }\n if (value instanceof ArrayBuffer) {\n return value.slice(0) as any;\n }\n\n const obj = Object.create(Object.getPrototypeOf(value));\n weakMap.set(value, obj);\n\n const keys = Reflect.ownKeys(value);\n\n keys.forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key)!;\n\n if ('value' in desc) {\n desc.value = deepClone((value as any)[key], weakMap);\n }\n\n Object.defineProperty(obj, key, desc);\n });\n\n return obj;\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-utils.mjs","sources":["../../projects/angular-components/utils/src/lib/utils/breakpoints.ts","../../projects/angular-components/utils/src/lib/utils/utils.ts","../../projects/angular-components/utils/src/seniorsistemas-angular-components-utils.ts"],"sourcesContent":["export const Breakpoints = {\n SM_MIN: 0 as const,\n SM_MAX: 767 as const,\n MD_MIN: 768 as const,\n MD_MAX: 991 as const,\n LG_MIN: 992 as const,\n LG_MAX: 1199 as const,\n XL_MIN: 1200 as const,\n XL_MAX: Infinity,\n};\n","export type ElementPosition = {\n top: number;\n left: number;\n right: number;\n elementHeight: number;\n elementWidth: number;\n elementVerticalCenter: number;\n elementHorizontalCenter: number;\n};\n\nexport type ElementLeftoverPosition = {\n freeDistanceToBottom: number;\n freeDistanceToTop: number;\n freeDistanceToLeft: number;\n freeDistanceToRight: number;\n};\n\nexport const randomHash = (prefix = 'id') => {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}-${Date.now().toString(36)}`;\n};\nexport const isNullOrUndefined = (value: unknown) => value === null || value === undefined;\nexport const isMousePositionOutsideOfElement = (\n event: MouseEvent | PointerEvent,\n elementArea: {\n top: number;\n right: number;\n left: number;\n bottom: number;\n },\n) => {\n const eventX = event.clientX;\n const eventY = event.clientY;\n return (\n eventX < elementArea.left ||\n eventX >= elementArea.right ||\n eventY < elementArea.top ||\n eventY >= elementArea.bottom\n );\n};\n\nexport const getElementPositionInfo = (element: HTMLElement): ElementPosition => {\n const rect = element.getBoundingClientRect();\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\n\n const elementHeight = rect.height;\n const elementWidth = rect.width;\n const elementVerticalCenter = elementHeight / 2;\n const elementHorizontalCenter = elementWidth / 2;\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft,\n right: rect.left + scrollLeft + elementWidth,\n elementHeight,\n elementWidth,\n elementVerticalCenter,\n elementHorizontalCenter,\n };\n};\n\nexport const getElementLeftoverContentAvailable = (element: HTMLElement): ElementLeftoverPosition => {\n const windowWidth = window.innerWidth;\n const popoverElementTriggerRect = element.getBoundingClientRect();\n const freeDistanceToBottom = window.innerHeight - popoverElementTriggerRect.bottom;\n const freeDistanceToTop = popoverElementTriggerRect.top;\n const freeDistanceToLeft = popoverElementTriggerRect.left;\n const freeDistanceToRight = windowWidth - popoverElementTriggerRect.right;\n return {\n freeDistanceToBottom,\n freeDistanceToTop,\n freeDistanceToLeft,\n freeDistanceToRight,\n };\n};\n\nlet scrollLockCount = 0;\nlet previousBodyOverflow: string | null = null;\n\n/**\n * @description Libera um lock de scroll adquirido via `disableScroll`. Como múltiplos overlays\n * (ex: Drawer, SideSheet) podem estar abertos ao mesmo tempo e todos chamam essa mesma função,\n * o scroll só é de fato reativado quando o último lock pendente é liberado — e restaura o valor\n * de `overflow` anterior ao primeiro `disableScroll`, em vez de sempre forçar `'auto'`.\n */\nexport const enableScroll = (): void => {\n if (scrollLockCount === 0) {\n return;\n }\n scrollLockCount--;\n if (scrollLockCount === 0) {\n document.body.style.overflow = previousBodyOverflow ?? '';\n previousBodyOverflow = null;\n }\n};\n\n/**\n * @description Bloqueia o scroll da página. Contabiliza quantos overlays pediram o bloqueio\n * simultaneamente, para que fechar um não reative o scroll enquanto outro ainda estiver aberto.\n */\nexport const disableScroll = (): void => {\n if (scrollLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n scrollLockCount++;\n};\n\nexport type ScrollLock = {\n lock: () => void;\n unlock: () => void;\n};\n\n/**\n * @description Cria um controle de lock de scroll para uma instância (ex: um componente de\n * overlay). Chamar `lock`/`unlock` várias vezes seguidas é seguro — cada instância só chama\n * `disableScroll`/`enableScroll` (que ela mesma adquiriu, evitando liberar o lock de outro overlay\n * por engano) na primeira vez que necessário.\n */\nexport const createScrollLock = (): ScrollLock => {\n let locked = false;\n return {\n lock: () => {\n if (!locked) {\n disableScroll();\n locked = true;\n }\n },\n unlock: () => {\n if (locked) {\n enableScroll();\n locked = false;\n }\n },\n };\n};\n\nexport function deepClone<T>(value: T, weakMap = new WeakMap()): T {\n if (value !== null && typeof value === 'object') {\n if (weakMap.has(value)) return weakMap.get(value);\n }\n\n if (value === null || typeof value !== 'object' || value instanceof Function) {\n return value;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as any;\n }\n\n if (Array.isArray(value)) {\n const arr: any[] = [];\n weakMap.set(value, arr);\n value.forEach((item, i) => {\n arr[i] = deepClone(item, weakMap);\n });\n return arr as any;\n }\n\n if (value instanceof Map) {\n const result = new Map();\n weakMap.set(value, result);\n value.forEach((v, k) => {\n result.set(deepClone(k, weakMap), deepClone(v, weakMap));\n });\n return result as any;\n }\n\n if (value instanceof Set) {\n const result = new Set();\n weakMap.set(value, result);\n value.forEach((v) => {\n result.add(deepClone(v, weakMap));\n });\n return result as any;\n }\n\n if (ArrayBuffer.isView(value)) {\n return new (value.constructor as any)(value) as any;\n }\n if (value instanceof ArrayBuffer) {\n return value.slice(0) as any;\n }\n\n const obj = Object.create(Object.getPrototypeOf(value));\n weakMap.set(value, obj);\n\n const keys = Reflect.ownKeys(value);\n\n keys.forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key)!;\n\n if ('value' in desc) {\n desc.value = deepClone((value as any)[key], weakMap);\n }\n\n Object.defineProperty(obj, key, desc);\n });\n\n return obj;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "
|
|
2
|
+
import * as i1 from "@seniorsistemas/angular-components/tooltip";
|
|
3
3
|
import * as i2 from "@seniorsistemas/angular-components/thumbnail";
|
|
4
4
|
import * as i3 from "@seniorsistemas/angular-components/button";
|
|
5
5
|
import * as i4 from "@seniorsistemas/angular-components/loading-state";
|
package/insights/README.md
CHANGED
|
@@ -52,6 +52,8 @@ export class MeuModule {}
|
|
|
52
52
|
| `introText` | `string` | `undefined` | Não | Texto de introdução exibido no topo do painel (quando sem template customizado). |
|
|
53
53
|
| `emptyText` | `string` | `undefined` | Não | Texto exibido quando não há insights disponíveis. |
|
|
54
54
|
| `noPermissionText` | `string` | `undefined` | Não | Texto exibido quando o usuário não tem permissão. |
|
|
55
|
+
| `icons` | `InsightsCardIcons` | `undefined` | Não | Ícones customizáveis de cada card de insight exibido no sidebar. Chaves não informadas mantêm o ícone padrão. |
|
|
56
|
+
| `closeIconClass` | `string` | `'far fa-chevron-double-right'` | Não | Ícone do botão de fechar o sidebar. |
|
|
55
57
|
|
|
56
58
|
### Outputs
|
|
57
59
|
|
|
@@ -76,6 +78,16 @@ interface InsightsItem {
|
|
|
76
78
|
}
|
|
77
79
|
```
|
|
78
80
|
|
|
81
|
+
```typescript
|
|
82
|
+
interface InsightsCardIcons {
|
|
83
|
+
lightbulb?: string; // Ícone do badge "Insight" no cabeçalho. Padrão: 'fal fa-lightbulb'
|
|
84
|
+
copy?: string; // Ícone do botão de copiar conteúdo. Padrão: 'fal fa-copy'
|
|
85
|
+
redo?: string; // Ícone do botão de recarregar conteúdo. Padrão: 'fal fa-redo'
|
|
86
|
+
thumbsUp?: string; // Ícone do botão de like. Padrão: 'fal fa-thumbs-up' (não selecionado) / 'fas fa-thumbs-up' (selecionado)
|
|
87
|
+
thumbsDown?: string; // Ícone do botão de dislike. Padrão: 'fal fa-thumbs-down' (não selecionado) / 'fas fa-thumbs-down' (selecionado)
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
79
91
|
## Exemplos
|
|
80
92
|
|
|
81
93
|
### Insights com múltiplos itens
|
|
@@ -1,16 +1,37 @@
|
|
|
1
1
|
import { InsightsItem } from '../../models/insights-item';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @description Ícones customizáveis do `s-insights-card`. Chaves não informadas mantêm o ícone padrão.
|
|
5
|
+
*/
|
|
6
|
+
export interface InsightsCardIcons {
|
|
7
|
+
/** Ícone do badge "Insight" no cabeçalho. Padrão: `fal fa-lightbulb`. */
|
|
8
|
+
lightbulb?: string;
|
|
9
|
+
/** Ícone do botão de copiar conteúdo. Padrão: `fal fa-copy`. */
|
|
10
|
+
copy?: string;
|
|
11
|
+
/** Ícone do botão de recarregar conteúdo. Padrão: `fal fa-redo`. */
|
|
12
|
+
redo?: string;
|
|
13
|
+
/** Ícone do botão de like. Padrão: `fal fa-thumbs-up` (não selecionado) / `fas fa-thumbs-up` (selecionado). */
|
|
14
|
+
thumbsUp?: string;
|
|
15
|
+
/** Ícone do botão de dislike. Padrão: `fal fa-thumbs-down` (não selecionado) / `fas fa-thumbs-down` (selecionado). */
|
|
16
|
+
thumbsDown?: string;
|
|
17
|
+
}
|
|
3
18
|
export declare class InsightsCardComponent {
|
|
4
19
|
private readonly clipboard;
|
|
5
20
|
private readonly toastService;
|
|
6
21
|
private readonly translateService;
|
|
7
22
|
private readonly _destroyRef;
|
|
8
23
|
insight: InsightsItem;
|
|
24
|
+
icons?: InsightsCardIcons;
|
|
9
25
|
open: boolean;
|
|
10
26
|
isLoading: boolean;
|
|
11
27
|
content?: string;
|
|
12
28
|
likeSelected: boolean;
|
|
13
29
|
dislikeSelected: boolean;
|
|
30
|
+
get lightbulbIconClass(): string;
|
|
31
|
+
get copyIconClass(): string;
|
|
32
|
+
get redoIconClass(): string;
|
|
33
|
+
get thumbsUpIconClass(): string;
|
|
34
|
+
get thumbsDownIconClass(): string;
|
|
14
35
|
toggle(): void;
|
|
15
36
|
onLikeSelected(): void;
|
|
16
37
|
onDislikeSelected(): void;
|
|
@@ -18,5 +39,5 @@ export declare class InsightsCardComponent {
|
|
|
18
39
|
reloadContent(): void;
|
|
19
40
|
private _requestInsight;
|
|
20
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<InsightsCardComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsCardComponent, "s-insights-card", never, { "insight": { "alias": "insight"; "required": true; }; }, {}, never, never, true, never>;
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsCardComponent, "s-insights-card", never, { "insight": { "alias": "insight"; "required": true; }; "icons": { "alias": "icons"; "required": false; }; }, {}, never, never, true, never>;
|
|
22
43
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import { InsightsItem } from '../../models/index';
|
|
3
|
+
import { InsightsCardIcons } from '../insights-card/insights-card.component';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class InsightsSidebarComponent {
|
|
5
6
|
insights: InsightsItem[];
|
|
@@ -10,6 +11,13 @@ export declare class InsightsSidebarComponent {
|
|
|
10
11
|
emptyTemplate: TemplateRef<any> | null;
|
|
11
12
|
noPermissionText?: string;
|
|
12
13
|
noPermissionTemplate: TemplateRef<any> | null;
|
|
14
|
+
/**
|
|
15
|
+
* @description Ícone do botão de fechar o sidebar.
|
|
16
|
+
* @default 'far fa-chevron-double-right'
|
|
17
|
+
*/
|
|
18
|
+
closeIconClass: string;
|
|
19
|
+
/** @description Ícones customizáveis de cada `s-insights-card` renderizado no sidebar. */
|
|
20
|
+
icons?: InsightsCardIcons;
|
|
13
21
|
closedSidebar: import("@angular/core").OutputEmitterRef<void>;
|
|
14
22
|
openedSidebar: import("@angular/core").OutputEmitterRef<void>;
|
|
15
23
|
opened: boolean;
|
|
@@ -17,5 +25,5 @@ export declare class InsightsSidebarComponent {
|
|
|
17
25
|
open(): void;
|
|
18
26
|
close(): void;
|
|
19
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<InsightsSidebarComponent, never>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsSidebarComponent, "s-insights-sidebar", never, { "insights": { "alias": "insights"; "required": false; }; "hasPermission": { "alias": "hasPermission"; "required": false; }; "introText": { "alias": "introText"; "required": false; }; "introTemplate": { "alias": "introTemplate"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "noPermissionText": { "alias": "noPermissionText"; "required": false; }; "noPermissionTemplate": { "alias": "noPermissionTemplate"; "required": false; }; }, { "closedSidebar": "closedSidebar"; "openedSidebar": "openedSidebar"; }, never, never, true, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsSidebarComponent, "s-insights-sidebar", never, { "insights": { "alias": "insights"; "required": false; }; "hasPermission": { "alias": "hasPermission"; "required": false; }; "introText": { "alias": "introText"; "required": false; }; "introTemplate": { "alias": "introTemplate"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "noPermissionText": { "alias": "noPermissionText"; "required": false; }; "noPermissionTemplate": { "alias": "noPermissionTemplate"; "required": false; }; "closeIconClass": { "alias": "closeIconClass"; "required": false; }; "icons": { "alias": "icons"; "required": false; }; }, { "closedSidebar": "closedSidebar"; "openedSidebar": "openedSidebar"; }, never, never, true, never>;
|
|
21
29
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AfterContentInit, QueryList, TemplateRef } from '@angular/core';
|
|
2
2
|
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
3
3
|
import { InsightsSidebarComponent } from './components/insights-sidebar/insights-sidebar.component';
|
|
4
|
+
import { InsightsCardIcons } from './components/insights-card/insights-card.component';
|
|
4
5
|
import { InsightsItem } from './models/insights-item';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@seniorsistemas/angular-components/common/deprecated-selector";
|
|
@@ -30,6 +31,13 @@ export declare class InsightsComponent implements AfterContentInit {
|
|
|
30
31
|
emptyText?: string;
|
|
31
32
|
/** @description Texto exibido quando o usuário não tem permissão. */
|
|
32
33
|
noPermissionText?: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description Ícone do botão de fechar o sidebar.
|
|
36
|
+
* @default 'far fa-chevron-double-right'
|
|
37
|
+
*/
|
|
38
|
+
closeIconClass: string;
|
|
39
|
+
/** @description Ícones customizáveis de cada card de insight exibido no sidebar. */
|
|
40
|
+
icons?: InsightsCardIcons;
|
|
33
41
|
sidebar: InsightsSidebarComponent | null;
|
|
34
42
|
templates: QueryList<TemplateDirective> | null;
|
|
35
43
|
/** @description Emitido quando o painel de insights é aberto. */
|
|
@@ -48,5 +56,5 @@ export declare class InsightsComponent implements AfterContentInit {
|
|
|
48
56
|
private _getCustomTemplate;
|
|
49
57
|
private _getTemplates;
|
|
50
58
|
static ɵfac: i0.ɵɵFactoryDeclaration<InsightsComponent, never>;
|
|
51
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsComponent, "s-insights, s-ia-insight", never, { "insights": { "alias": "insights"; "required": false; }; "hasPermission": { "alias": "hasPermission"; "required": false; }; "introText": { "alias": "introText"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "noPermissionText": { "alias": "noPermissionText"; "required": false; }; }, { "openInsights": "openInsights"; "closedInsights": "closedInsights"; }, ["templates"], never, true, [{ directive: typeof i1.DeprecatedSelectorDirective; inputs: {}; outputs: {}; }]>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InsightsComponent, "s-insights, s-ia-insight", never, { "insights": { "alias": "insights"; "required": false; }; "hasPermission": { "alias": "hasPermission"; "required": false; }; "introText": { "alias": "introText"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "noPermissionText": { "alias": "noPermissionText"; "required": false; }; "closeIconClass": { "alias": "closeIconClass"; "required": false; }; "icons": { "alias": "icons"; "required": false; }; }, { "openInsights": "openInsights"; "closedInsights": "closedInsights"; }, ["templates"], never, true, [{ directive: typeof i1.DeprecatedSelectorDirective; inputs: {}; outputs: {}; }]>;
|
|
52
60
|
}
|
package/package.json
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seniorsistemas/angular-components",
|
|
3
|
-
"version": "19.9.
|
|
3
|
+
"version": "19.9.5",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "^18.2.14",
|
|
6
6
|
"@angular/common": "^18.2.0",
|
|
7
7
|
"@angular/core": "^18.2.0",
|
|
8
8
|
"@ngx-translate/core": "^16.0.4",
|
|
9
9
|
"moment": "^2.30.1",
|
|
10
|
-
"@seniorsistemas/ng2-currency-mask": "~1.0.1",
|
|
11
10
|
"@seniorsistemas/senior-platform-data": "^5.4.0",
|
|
12
11
|
"ngx-cookie-service": "^18.0.0",
|
|
13
12
|
"ngx-mask": "19.0.6",
|
|
14
|
-
"ng2-currency-mask": "13.0.3",
|
|
15
13
|
"primeng": "^18.0.2",
|
|
16
14
|
"marked": "15.0.7",
|
|
17
15
|
"cropperjs": "^1.6.2",
|
|
@@ -29,7 +29,9 @@ export declare class PaginatorComponent implements OnDestroy {
|
|
|
29
29
|
private readonly MAX_PAGE_BUTTONS;
|
|
30
30
|
private readonly hasPreviousPage;
|
|
31
31
|
private readonly hasNextPage;
|
|
32
|
-
|
|
32
|
+
private readonly requestedPage;
|
|
33
|
+
/** @description Página atual, sempre reajustada para o intervalo válido de `[1, totalPages]`. */
|
|
34
|
+
protected readonly currentPage: import("@angular/core").Signal<number>;
|
|
33
35
|
protected buttons: import("@angular/core").Signal<PaginatorInternalButton[]>;
|
|
34
36
|
private readonly FIRST_PAGE_BUTTON;
|
|
35
37
|
private readonly PREVIOUS_PAGE_BUTTON;
|
package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ import * as i0 from "@angular/core";
|
|
|
23
23
|
*/
|
|
24
24
|
export declare class ProfilePicturePickerComponent implements OnInit, ControlValueAccessor {
|
|
25
25
|
private readonly imageCropperService;
|
|
26
|
-
private readonly
|
|
26
|
+
private readonly confirmDialogService;
|
|
27
27
|
private readonly translateService;
|
|
28
28
|
/**
|
|
29
29
|
* @description Título simples exibido quando nenhuma imagem está selecionada.
|
|
@@ -114,11 +114,13 @@ export declare class ProfilePicturePickerComponent implements OnInit, ControlVal
|
|
|
114
114
|
*/
|
|
115
115
|
invalidFile: EventEmitter<FileValidationErrors>;
|
|
116
116
|
get imageBase64(): string;
|
|
117
|
+
disabled: boolean;
|
|
117
118
|
private _onChange?;
|
|
118
119
|
private _onTouched?;
|
|
119
120
|
writeValue(value: string | ProfilePicturePickerData): void;
|
|
120
121
|
registerOnChange(onChange: (value: string | ProfilePicturePickerData) => void): void;
|
|
121
122
|
registerOnTouched(onTouched: () => void): void;
|
|
123
|
+
setDisabledState(isDisabled: boolean): void;
|
|
122
124
|
ngOnInit(): void;
|
|
123
125
|
onDragOver(event: DragEvent): void;
|
|
124
126
|
onDragLeave(event: DragEvent): void;
|