uitec-ng-header 1.1.0 → 1.2.0

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.
Files changed (48) hide show
  1. package/README.md +11 -182
  2. package/esm2020/lib/ui-header.component.mjs +20 -26
  3. package/esm2020/lib/ui-header.module.mjs +4 -10
  4. package/esm2020/public-api.mjs +1 -17
  5. package/fesm2015/uitec-ng-header.mjs +24 -1808
  6. package/fesm2015/uitec-ng-header.mjs.map +1 -1
  7. package/fesm2020/uitec-ng-header.mjs +24 -1771
  8. package/fesm2020/uitec-ng-header.mjs.map +1 -1
  9. package/lib/ui-header.component.d.ts +8 -11
  10. package/lib/ui-header.module.d.ts +1 -2
  11. package/package.json +2 -3
  12. package/public-api.d.ts +0 -15
  13. package/esm2020/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.mjs +0 -102
  14. package/esm2020/lib/assistant/components/assistant-button/ui-assistant-button.component.mjs +0 -18
  15. package/esm2020/lib/assistant/components/assistant-composer/ui-assistant-composer.component.mjs +0 -79
  16. package/esm2020/lib/assistant/components/assistant-layout/ui-assistant-layout.component.mjs +0 -140
  17. package/esm2020/lib/assistant/components/assistant-messages/ui-assistant-messages.component.mjs +0 -144
  18. package/esm2020/lib/assistant/components/assistant-panel/ui-assistant-panel.component.mjs +0 -156
  19. package/esm2020/lib/assistant/components/assistant-text/ui-assistant-text.component.mjs +0 -26
  20. package/esm2020/lib/assistant/models/uiny-api.models.mjs +0 -12
  21. package/esm2020/lib/assistant/models/uiny.models.mjs +0 -2
  22. package/esm2020/lib/assistant/services/ui-assistant.service.mjs +0 -137
  23. package/esm2020/lib/assistant/services/uiny-api.service.mjs +0 -149
  24. package/esm2020/lib/assistant/services/uiny-chat.service.mjs +0 -368
  25. package/esm2020/lib/assistant/services/uiny-session.service.mjs +0 -74
  26. package/esm2020/lib/assistant/ui-assistant.module.mjs +0 -59
  27. package/esm2020/lib/assistant/uiny.config.mjs +0 -53
  28. package/esm2020/lib/assistant/utils/uiny-api.adapter.mjs +0 -154
  29. package/esm2020/lib/assistant/utils/uiny-contexto.mjs +0 -43
  30. package/esm2020/lib/assistant/utils/uiny-markdown.mjs +0 -122
  31. package/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.d.ts +0 -33
  32. package/lib/assistant/components/assistant-button/ui-assistant-button.component.d.ts +0 -9
  33. package/lib/assistant/components/assistant-composer/ui-assistant-composer.component.d.ts +0 -24
  34. package/lib/assistant/components/assistant-layout/ui-assistant-layout.component.d.ts +0 -51
  35. package/lib/assistant/components/assistant-messages/ui-assistant-messages.component.d.ts +0 -38
  36. package/lib/assistant/components/assistant-panel/ui-assistant-panel.component.d.ts +0 -53
  37. package/lib/assistant/components/assistant-text/ui-assistant-text.component.d.ts +0 -14
  38. package/lib/assistant/models/uiny-api.models.d.ts +0 -109
  39. package/lib/assistant/models/uiny.models.d.ts +0 -104
  40. package/lib/assistant/services/ui-assistant.service.d.ts +0 -55
  41. package/lib/assistant/services/uiny-api.service.d.ts +0 -38
  42. package/lib/assistant/services/uiny-chat.service.d.ts +0 -82
  43. package/lib/assistant/services/uiny-session.service.d.ts +0 -38
  44. package/lib/assistant/ui-assistant.module.d.ts +0 -19
  45. package/lib/assistant/uiny.config.d.ts +0 -31
  46. package/lib/assistant/utils/uiny-api.adapter.d.ts +0 -22
  47. package/lib/assistant/utils/uiny-contexto.d.ts +0 -7
  48. package/lib/assistant/utils/uiny-markdown.d.ts +0 -37
@@ -1,28 +1,26 @@
1
- import { EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
1
+ import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
2
2
  import { AuthAcesso, AuthService, BaseUrlService, IframeService, LayoutService, UserAuthDTO, UsuarioMenuDTO } from 'uitec-ng-core';
3
- import { UiAssistantService } from './assistant/services/ui-assistant.service';
4
3
  import * as i0 from "@angular/core";
5
- export declare class UiHeaderComponent implements OnInit, OnChanges, OnDestroy {
4
+ export declare class UiHeaderComponent implements OnInit {
6
5
  authService: AuthService;
7
6
  urlService: BaseUrlService;
8
7
  layoutService: LayoutService;
9
8
  iframeService: IframeService;
10
- assistantService: UiAssistantService;
11
9
  private document;
12
10
  collapseSidebar: boolean;
13
11
  fullScreen: boolean;
14
12
  headerBackdrop: string;
15
- isFree: string;
13
+ isFree: boolean;
16
14
  menus: UsuarioMenuDTO[];
17
15
  sidebar: boolean;
16
+ fullWidth: boolean;
18
17
  redirectHome: boolean;
19
18
  darkDefault: string;
20
- /** Exibe o botão da Uiny (assistente virtual). Exige um <ui-assistant-layout> envolvendo a aplicação. */
21
- showAssistant: boolean;
22
19
  collapseSidebarChange: EventEmitter<boolean>;
23
20
  fullScreenChange: EventEmitter<boolean>;
24
21
  headerBackdropChange: EventEmitter<boolean>;
25
22
  onNavigate: EventEmitter<UsuarioMenuDTO>;
23
+ onUpgrade: EventEmitter<void>;
26
24
  left: TemplateRef<any>;
27
25
  center: TemplateRef<any>;
28
26
  right: TemplateRef<any>;
@@ -31,14 +29,13 @@ export declare class UiHeaderComponent implements OnInit, OnChanges, OnDestroy {
31
29
  elem: any;
32
30
  userObs: UserAuthDTO;
33
31
  accessObs: AuthAcesso;
34
- constructor(authService: AuthService, urlService: BaseUrlService, layoutService: LayoutService, iframeService: IframeService, assistantService: UiAssistantService, document: any);
35
- ngOnChanges(changes: SimpleChanges): void;
36
- ngOnDestroy(): void;
32
+ constructor(authService: AuthService, urlService: BaseUrlService, layoutService: LayoutService, iframeService: IframeService, document: any);
37
33
  ngOnInit(): void;
38
34
  layoutToggle(): void;
39
35
  updateIframeTheme(): void;
40
36
  addEventListenerOnIframe(): void;
41
37
  setStatusSideBar(): void;
38
+ fecharBackdrop(): void;
42
39
  sidebarToggle(): void;
43
40
  home(): void;
44
41
  logout(): void;
@@ -46,5 +43,5 @@ export declare class UiHeaderComponent implements OnInit, OnChanges, OnDestroy {
46
43
  buildAmbiente(): void;
47
44
  toggleFullScreen(): void;
48
45
  static ɵfac: i0.ɵɵFactoryDeclaration<UiHeaderComponent, never>;
49
- static ɵcmp: i0.ɵɵComponentDeclaration<UiHeaderComponent, "ui-header", never, { "collapseSidebar": "collapseSidebar"; "fullScreen": "fullScreen"; "headerBackdrop": "headerBackdrop"; "isFree": "isFree"; "menus": "menus"; "sidebar": "sidebar"; "redirectHome": "redirectHome"; "darkDefault": "darkDefault"; "showAssistant": "showAssistant"; }, { "collapseSidebarChange": "collapseSidebarChange"; "fullScreenChange": "fullScreenChange"; "headerBackdropChange": "headerBackdropChange"; "onNavigate": "onNavigate"; }, ["left", "center", "right"], never, false, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiHeaderComponent, "ui-header", never, { "collapseSidebar": "collapseSidebar"; "fullScreen": "fullScreen"; "headerBackdrop": "headerBackdrop"; "isFree": "isFree"; "menus": "menus"; "sidebar": "sidebar"; "fullWidth": "fullWidth"; "redirectHome": "redirectHome"; "darkDefault": "darkDefault"; }, { "collapseSidebarChange": "collapseSidebarChange"; "fullScreenChange": "fullScreenChange"; "headerBackdropChange": "headerBackdropChange"; "onNavigate": "onNavigate"; "onUpgrade": "onUpgrade"; }, ["left", "center", "right"], never, false, never>;
50
47
  }
@@ -6,9 +6,8 @@ import * as i4 from "@angular/forms";
6
6
  import * as i5 from "uitec-ng-icon";
7
7
  import * as i6 from "uitec-ng-user-top";
8
8
  import * as i7 from "primeng/tooltip";
9
- import * as i8 from "./assistant/ui-assistant.module";
10
9
  export declare class UiHeaderModule {
11
10
  static ɵfac: i0.ɵɵFactoryDeclaration<UiHeaderModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<UiHeaderModule, [typeof i1.UiHeaderComponent, typeof i2.MyAccountComponent], [typeof i3.CommonModule, typeof i4.ReactiveFormsModule, typeof i5.UiIconModule, typeof i6.UiUserTopModule, typeof i7.TooltipModule, typeof i8.UiAssistantModule], [typeof i1.UiHeaderComponent, typeof i8.UiAssistantModule]>;
11
+ static ɵmod: i0.ɵɵNgModuleDeclaration<UiHeaderModule, [typeof i1.UiHeaderComponent, typeof i2.MyAccountComponent], [typeof i3.CommonModule, typeof i4.ReactiveFormsModule, typeof i5.UiIconModule, typeof i6.UiUserTopModule, typeof i7.TooltipModule], [typeof i1.UiHeaderComponent]>;
13
12
  static ɵinj: i0.ɵɵInjectorDeclaration<UiHeaderModule>;
14
13
  }
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "uitec-ng-header",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
- "@angular/core": "^15.2.0",
7
- "@angular/router": "^15.2.0"
6
+ "@angular/core": "^15.2.0"
8
7
  },
9
8
  "dependencies": {
10
9
  "tslib": "^2.3.0"
package/public-api.d.ts CHANGED
@@ -1,18 +1,3 @@
1
1
  export * from './lib/ui-header.service';
2
2
  export * from './lib/ui-header.component';
3
3
  export * from './lib/ui-header.module';
4
- export * from './lib/assistant/ui-assistant.module';
5
- export * from './lib/assistant/uiny.config';
6
- export * from './lib/assistant/models/uiny.models';
7
- export * from './lib/assistant/models/uiny-api.models';
8
- export * from './lib/assistant/services/ui-assistant.service';
9
- export * from './lib/assistant/services/uiny-api.service';
10
- export * from './lib/assistant/services/uiny-chat.service';
11
- export * from './lib/assistant/services/uiny-session.service';
12
- export * from './lib/assistant/components/assistant-button/ui-assistant-button.component';
13
- export * from './lib/assistant/components/assistant-layout/ui-assistant-layout.component';
14
- export * from './lib/assistant/components/assistant-panel/ui-assistant-panel.component';
15
- export * from './lib/assistant/components/assistant-messages/ui-assistant-messages.component';
16
- export * from './lib/assistant/components/assistant-text/ui-assistant-text.component';
17
- export * from './lib/assistant/components/assistant-composer/ui-assistant-composer.component';
18
- export * from './lib/assistant/components/assistant-action-card/ui-assistant-action-card.component';
@@ -1,102 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, NgZone, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "uitec-ng-icon";
5
- const ROTULOS = {
6
- pendente: 'Aguardando sua confirmação',
7
- executando: 'Executando…',
8
- concluida: 'Concluída',
9
- cancelada: 'Cancelada',
10
- expirada: 'Expirada',
11
- invalidada: 'Precisa de nova confirmação',
12
- falha: 'Não concluída',
13
- indeterminada: 'Resultado a verificar',
14
- };
15
- const DESCRICOES = {
16
- concluida: 'A alteração foi aplicada.',
17
- cancelada: 'Nada foi alterado.',
18
- expirada: 'O prazo para confirmar terminou. Nada foi alterado; peça de novo se ainda quiser.',
19
- invalidada: 'Os dados mudaram desde a proposta. Peça a alteração de novo para revisar.',
20
- falha: 'A alteração não foi aplicada.',
21
- };
22
- /**
23
- * Card de ação pendente. A confirmação só acontece pelo clique em "Confirmar":
24
- * o card emite apenas o id da ação persistida, sem argumentos.
25
- */
26
- export class UiAssistantActionCardComponent {
27
- constructor(cdr, zone) {
28
- this.cdr = cdr;
29
- this.zone = zone;
30
- this.confirmar = new EventEmitter();
31
- this.cancelar = new EventEmitter();
32
- this.verificar = new EventEmitter();
33
- this.agora = Date.now();
34
- }
35
- ngOnChanges() {
36
- this.agendar();
37
- }
38
- ngOnDestroy() {
39
- clearInterval(this.timer);
40
- }
41
- /** O servidor decide a expiração; aqui só evitamos oferecer um clique que já vai falhar. */
42
- get expiradaLocalmente() {
43
- return this.acao?.estado === 'pendente' && !!this.acao.expiraEm && this.acao.expiraEm.getTime() <= this.agora;
44
- }
45
- get estado() {
46
- return this.expiradaLocalmente ? 'expirada' : this.acao?.estado;
47
- }
48
- get rotulo() {
49
- return ROTULOS[this.estado] ?? '';
50
- }
51
- get descricao() {
52
- return this.acao?.aviso || DESCRICOES[this.estado] || null;
53
- }
54
- get podeDecidir() {
55
- return this.estado === 'pendente' && !this.acao.enviando;
56
- }
57
- get minutosRestantes() {
58
- if (this.estado !== 'pendente' || !this.acao.expiraEm)
59
- return null;
60
- return Math.max(1, Math.ceil((this.acao.expiraEm.getTime() - this.agora) / 60000));
61
- }
62
- ehCor(valor) {
63
- return /^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(valor);
64
- }
65
- aoConfirmar() {
66
- if (this.podeDecidir)
67
- this.confirmar.emit(this.acao.id);
68
- }
69
- aoCancelar() {
70
- if (this.podeDecidir)
71
- this.cancelar.emit(this.acao.id);
72
- }
73
- agendar() {
74
- clearInterval(this.timer);
75
- this.agora = Date.now();
76
- if (this.acao?.estado !== 'pendente' || !this.acao.expiraEm)
77
- return;
78
- this.zone.runOutsideAngular(() => {
79
- this.timer = setInterval(() => this.zone.run(() => {
80
- this.agora = Date.now();
81
- if (this.expiradaLocalmente)
82
- clearInterval(this.timer);
83
- this.cdr.markForCheck();
84
- }), 15000);
85
- });
86
- }
87
- }
88
- UiAssistantActionCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantActionCardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
89
- UiAssistantActionCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantActionCardComponent, selector: "ui-assistant-action-card", inputs: { acao: "acao" }, outputs: { confirmar: "confirmar", cancelar: "cancelar", verificar: "verificar" }, usesOnChanges: true, ngImport: i0, template: "<article class=\"uiny-acao\" [ngClass]=\"'uiny-acao--' + estado\" [attr.aria-busy]=\"acao.enviando ? 'true' : null\"\n [attr.aria-labelledby]=\"'uiny-acao-' + acao.id\">\n <header class=\"uiny-acao__topo\">\n <span class=\"uiny-acao__selo\">\n <span *ngIf=\"estado === 'executando' || acao.enviando\" class=\"uiny-acao__spinner\" aria-hidden=\"true\"></span>\n <ui-icon *ngIf=\"estado === 'concluida'\" icon=\"check_circle\" size=\"16\"></ui-icon>\n <ui-icon *ngIf=\"estado === 'falha' || estado === 'indeterminada'\" icon=\"error\" size=\"16\"></ui-icon>\n <ui-icon *ngIf=\"estado === 'pendente' && !acao.enviando\" icon=\"pending_actions\" size=\"16\"></ui-icon>\n {{ rotulo }}\n </span>\n <span *ngIf=\"minutosRestantes\" class=\"uiny-acao__prazo\">expira em {{ minutosRestantes }} min</span>\n </header>\n\n <p class=\"uiny-acao__resumo\" [id]=\"'uiny-acao-' + acao.id\">{{ acao.resumo }}</p>\n\n <dl *ngIf=\"acao.detalhes?.length\" class=\"uiny-acao__detalhes\">\n <div *ngFor=\"let d of acao.detalhes\" class=\"uiny-acao__item\">\n <dt>{{ d.rotulo }}</dt>\n <dd>\n <span *ngIf=\"ehCor(d.valor)\" class=\"uiny-acao__cor\" [style.background-color]=\"d.valor\" aria-hidden=\"true\"></span>\n {{ d.valor }}\n </dd>\n </div>\n </dl>\n\n <p *ngIf=\"descricao\" class=\"uiny-acao__descricao\" role=\"status\">{{ descricao }}</p>\n\n <div *ngIf=\"estado === 'pendente'\" class=\"uiny-acao__botoes\">\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--secundario\" [disabled]=\"!podeDecidir\" (click)=\"aoCancelar()\">\n Cancelar\n </button>\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--primario\" [disabled]=\"!podeDecidir\" (click)=\"aoConfirmar()\">\n Confirmar\n </button>\n </div>\n\n <div *ngIf=\"estado === 'indeterminada'\" class=\"uiny-acao__botoes\">\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--secundario\" [disabled]=\"acao.enviando\" (click)=\"verificar.emit(acao.id)\">\n Verificar resultado\n </button>\n </div>\n</article>\n", styles: [":host{display:block;margin-top:8px}.uiny-acao{padding:12px 14px;border:1px solid var(--uiny-borda, #ececf3);border-left:3px solid var(--uiny-primaria, #7366ff);border-radius:12px;background:var(--uiny-fundo, #fff);box-shadow:0 2px 10px #1f1b4d0d}.uiny-acao--concluida{border-left-color:#1aa467}.uiny-acao--falha,.uiny-acao--indeterminada{border-left-color:var(--uiny-erro, #d9364f)}.uiny-acao--cancelada,.uiny-acao--expirada,.uiny-acao--invalidada{border-left-color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__topo{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.uiny-acao__selo{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--uiny-primaria, #7366ff)}.uiny-acao--concluida .uiny-acao__selo{color:#1aa467}.uiny-acao--falha .uiny-acao__selo,.uiny-acao--indeterminada .uiny-acao__selo{color:var(--uiny-erro, #d9364f)}.uiny-acao--cancelada .uiny-acao__selo,.uiny-acao--expirada .uiny-acao__selo,.uiny-acao--invalidada .uiny-acao__selo{color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__prazo{font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__resumo{margin:0;font-weight:600;line-height:1.45;color:var(--uiny-texto, #2b2b2b);overflow-wrap:anywhere}.uiny-acao__detalhes{margin:10px 0 0;padding:8px 10px;border-radius:9px;background:var(--uiny-fundo-suave, #f7f7fb);font-size:13px}.uiny-acao__item{display:flex;justify-content:space-between;gap:12px}.uiny-acao__item+.uiny-acao__item{margin-top:4px}.uiny-acao__item dt{font-weight:400;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__item dd{display:inline-flex;align-items:center;gap:6px;margin:0;font-weight:600;text-align:right;overflow-wrap:anywhere}.uiny-acao__cor{flex:0 0 auto;width:14px;height:14px;border:1px solid rgba(0,0,0,.12);border-radius:4px}.uiny-acao__descricao{margin:8px 0 0;font-size:12.5px;line-height:1.45;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__botoes{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.uiny-acao__botao{min-height:34px;padding:0 14px;border-radius:9px;font-size:13px;font-weight:600;cursor:pointer}.uiny-acao__botao:disabled{opacity:.5;cursor:not-allowed}.uiny-acao__botao:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-acao__botao--primario{border:1px solid var(--uiny-primaria, #7366ff);background:var(--uiny-primaria, #7366ff);color:#fff}.uiny-acao__botao--secundario{border:1px solid var(--uiny-borda, #ececf3);background:transparent;color:var(--uiny-texto, #2b2b2b)}.uiny-acao__spinner{width:12px;height:12px;border:2px solid var(--uiny-borda, #ececf3);border-top-color:var(--uiny-primaria, #7366ff);border-radius:50%;animation:uiny-girar .8s linear infinite}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny-acao__spinner{animation-duration:2.4s}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["icon", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantActionCardComponent, decorators: [{
91
- type: Component,
92
- args: [{ selector: 'ui-assistant-action-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<article class=\"uiny-acao\" [ngClass]=\"'uiny-acao--' + estado\" [attr.aria-busy]=\"acao.enviando ? 'true' : null\"\n [attr.aria-labelledby]=\"'uiny-acao-' + acao.id\">\n <header class=\"uiny-acao__topo\">\n <span class=\"uiny-acao__selo\">\n <span *ngIf=\"estado === 'executando' || acao.enviando\" class=\"uiny-acao__spinner\" aria-hidden=\"true\"></span>\n <ui-icon *ngIf=\"estado === 'concluida'\" icon=\"check_circle\" size=\"16\"></ui-icon>\n <ui-icon *ngIf=\"estado === 'falha' || estado === 'indeterminada'\" icon=\"error\" size=\"16\"></ui-icon>\n <ui-icon *ngIf=\"estado === 'pendente' && !acao.enviando\" icon=\"pending_actions\" size=\"16\"></ui-icon>\n {{ rotulo }}\n </span>\n <span *ngIf=\"minutosRestantes\" class=\"uiny-acao__prazo\">expira em {{ minutosRestantes }} min</span>\n </header>\n\n <p class=\"uiny-acao__resumo\" [id]=\"'uiny-acao-' + acao.id\">{{ acao.resumo }}</p>\n\n <dl *ngIf=\"acao.detalhes?.length\" class=\"uiny-acao__detalhes\">\n <div *ngFor=\"let d of acao.detalhes\" class=\"uiny-acao__item\">\n <dt>{{ d.rotulo }}</dt>\n <dd>\n <span *ngIf=\"ehCor(d.valor)\" class=\"uiny-acao__cor\" [style.background-color]=\"d.valor\" aria-hidden=\"true\"></span>\n {{ d.valor }}\n </dd>\n </div>\n </dl>\n\n <p *ngIf=\"descricao\" class=\"uiny-acao__descricao\" role=\"status\">{{ descricao }}</p>\n\n <div *ngIf=\"estado === 'pendente'\" class=\"uiny-acao__botoes\">\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--secundario\" [disabled]=\"!podeDecidir\" (click)=\"aoCancelar()\">\n Cancelar\n </button>\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--primario\" [disabled]=\"!podeDecidir\" (click)=\"aoConfirmar()\">\n Confirmar\n </button>\n </div>\n\n <div *ngIf=\"estado === 'indeterminada'\" class=\"uiny-acao__botoes\">\n <button type=\"button\" class=\"uiny-acao__botao uiny-acao__botao--secundario\" [disabled]=\"acao.enviando\" (click)=\"verificar.emit(acao.id)\">\n Verificar resultado\n </button>\n </div>\n</article>\n", styles: [":host{display:block;margin-top:8px}.uiny-acao{padding:12px 14px;border:1px solid var(--uiny-borda, #ececf3);border-left:3px solid var(--uiny-primaria, #7366ff);border-radius:12px;background:var(--uiny-fundo, #fff);box-shadow:0 2px 10px #1f1b4d0d}.uiny-acao--concluida{border-left-color:#1aa467}.uiny-acao--falha,.uiny-acao--indeterminada{border-left-color:var(--uiny-erro, #d9364f)}.uiny-acao--cancelada,.uiny-acao--expirada,.uiny-acao--invalidada{border-left-color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__topo{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.uiny-acao__selo{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--uiny-primaria, #7366ff)}.uiny-acao--concluida .uiny-acao__selo{color:#1aa467}.uiny-acao--falha .uiny-acao__selo,.uiny-acao--indeterminada .uiny-acao__selo{color:var(--uiny-erro, #d9364f)}.uiny-acao--cancelada .uiny-acao__selo,.uiny-acao--expirada .uiny-acao__selo,.uiny-acao--invalidada .uiny-acao__selo{color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__prazo{font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__resumo{margin:0;font-weight:600;line-height:1.45;color:var(--uiny-texto, #2b2b2b);overflow-wrap:anywhere}.uiny-acao__detalhes{margin:10px 0 0;padding:8px 10px;border-radius:9px;background:var(--uiny-fundo-suave, #f7f7fb);font-size:13px}.uiny-acao__item{display:flex;justify-content:space-between;gap:12px}.uiny-acao__item+.uiny-acao__item{margin-top:4px}.uiny-acao__item dt{font-weight:400;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__item dd{display:inline-flex;align-items:center;gap:6px;margin:0;font-weight:600;text-align:right;overflow-wrap:anywhere}.uiny-acao__cor{flex:0 0 auto;width:14px;height:14px;border:1px solid rgba(0,0,0,.12);border-radius:4px}.uiny-acao__descricao{margin:8px 0 0;font-size:12.5px;line-height:1.45;color:var(--uiny-texto-suave, #6b6b80)}.uiny-acao__botoes{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.uiny-acao__botao{min-height:34px;padding:0 14px;border-radius:9px;font-size:13px;font-weight:600;cursor:pointer}.uiny-acao__botao:disabled{opacity:.5;cursor:not-allowed}.uiny-acao__botao:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-acao__botao--primario{border:1px solid var(--uiny-primaria, #7366ff);background:var(--uiny-primaria, #7366ff);color:#fff}.uiny-acao__botao--secundario{border:1px solid var(--uiny-borda, #ececf3);background:transparent;color:var(--uiny-texto, #2b2b2b)}.uiny-acao__spinner{width:12px;height:12px;border:2px solid var(--uiny-borda, #ececf3);border-top-color:var(--uiny-primaria, #7366ff);border-radius:50%;animation:uiny-girar .8s linear infinite}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny-acao__spinner{animation-duration:2.4s}}\n"] }]
93
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { acao: [{
94
- type: Input
95
- }], confirmar: [{
96
- type: Output
97
- }], cancelar: [{
98
- type: Output
99
- }], verificar: [{
100
- type: Output
101
- }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LWFjdGlvbi1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWhlYWRlci9zcmMvbGliL2Fzc2lzdGFudC9jb21wb25lbnRzL2Fzc2lzdGFudC1hY3Rpb24tY2FyZC91aS1hc3Npc3RhbnQtYWN0aW9uLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LWFjdGlvbi1jYXJkL3VpLWFzc2lzdGFudC1hY3Rpb24tY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDOzs7O0FBR3ZCLE1BQU0sT0FBTyxHQUFtQztJQUM1QyxRQUFRLEVBQUUsNEJBQTRCO0lBQ3RDLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFVBQVUsRUFBRSw2QkFBNkI7SUFDekMsS0FBSyxFQUFFLGVBQWU7SUFDdEIsYUFBYSxFQUFFLHVCQUF1QjtDQUN6QyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQTRDO0lBQ3hELFNBQVMsRUFBRSwyQkFBMkI7SUFDdEMsU0FBUyxFQUFFLG9CQUFvQjtJQUMvQixRQUFRLEVBQUUsbUZBQW1GO0lBQzdGLFVBQVUsRUFBRSwyRUFBMkU7SUFDdkYsS0FBSyxFQUFFLCtCQUErQjtDQUN6QyxDQUFDO0FBRUY7OztHQUdHO0FBT0gsTUFBTSxPQUFPLDhCQUE4QjtJQVd2QyxZQUFvQixHQUFzQixFQUFVLElBQVk7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QUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCO29CQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzRIQXRFUSw4QkFBOEI7Z0hBQTlCLDhCQUE4QixrTUMxQzNDLDJ0RUEwQ0E7NEZEQWEsOEJBQThCO2tCQU4xQyxTQUFTOytCQUNJLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTs2SEFJdEMsSUFBSTtzQkFBWixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaW55QWNhbywgVWlueUVzdGFkb0FjYW8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdWlueS5tb2RlbHMnO1xyXG5cclxuY29uc3QgUk9UVUxPUzogUmVjb3JkPFVpbnlFc3RhZG9BY2FvLCBzdHJpbmc+ID0ge1xyXG4gICAgcGVuZGVudGU6ICdBZ3VhcmRhbmRvIHN1YSBjb25maXJtYcOnw6NvJyxcclxuICAgIGV4ZWN1dGFuZG86ICdFeGVjdXRhbmRv4oCmJyxcclxuICAgIGNvbmNsdWlkYTogJ0NvbmNsdcOtZGEnLFxyXG4gICAgY2FuY2VsYWRhOiAnQ2FuY2VsYWRhJyxcclxuICAgIGV4cGlyYWRhOiAnRXhwaXJhZGEnLFxyXG4gICAgaW52YWxpZGFkYTogJ1ByZWNpc2EgZGUgbm92YSBjb25maXJtYcOnw6NvJyxcclxuICAgIGZhbGhhOiAnTsOjbyBjb25jbHXDrWRhJyxcclxuICAgIGluZGV0ZXJtaW5hZGE6ICdSZXN1bHRhZG8gYSB2ZXJpZmljYXInLFxyXG59O1xyXG5cclxuY29uc3QgREVTQ1JJQ09FUzogUGFydGlhbDxSZWNvcmQ8VWlueUVzdGFkb0FjYW8sIHN0cmluZz4+ID0ge1xyXG4gICAgY29uY2x1aWRhOiAnQSBhbHRlcmHDp8OjbyBmb2kgYXBsaWNhZGEuJyxcclxuICAgIGNhbmNlbGFkYTogJ05hZGEgZm9pIGFsdGVyYWRvLicsXHJcbiAgICBleHBpcmFkYTogJ08gcHJhem8gcGFyYSBjb25maXJtYXIgdGVybWlub3UuIE5hZGEgZm9pIGFsdGVyYWRvOyBwZcOnYSBkZSBub3ZvIHNlIGFpbmRhIHF1aXNlci4nLFxyXG4gICAgaW52YWxpZGFkYTogJ09zIGRhZG9zIG11ZGFyYW0gZGVzZGUgYSBwcm9wb3N0YS4gUGXDp2EgYSBhbHRlcmHDp8OjbyBkZSBub3ZvIHBhcmEgcmV2aXNhci4nLFxyXG4gICAgZmFsaGE6ICdBIGFsdGVyYcOnw6NvIG7Do28gZm9pIGFwbGljYWRhLicsXHJcbn07XHJcblxyXG4vKipcclxuICogQ2FyZCBkZSBhw6fDo28gcGVuZGVudGUuIEEgY29uZmlybWHDp8OjbyBzw7MgYWNvbnRlY2UgcGVsbyBjbGlxdWUgZW0gXCJDb25maXJtYXJcIjpcclxuICogbyBjYXJkIGVtaXRlIGFwZW5hcyBvIGlkIGRhIGHDp8OjbyBwZXJzaXN0aWRhLCBzZW0gYXJndW1lbnRvcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd1aS1hc3Npc3RhbnQtYWN0aW9uLWNhcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWFzc2lzdGFudC1hY3Rpb24tY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1hc3Npc3RhbnQtYWN0aW9uLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudEFjdGlvbkNhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQElucHV0KCkgYWNhbzogVWlueUFjYW87XHJcblxyXG4gICAgQE91dHB1dCgpIGNvbmZpcm1hciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGNhbmNlbGFyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgdmVyaWZpY2FyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgcHVibGljIGFnb3JhID0gRGF0ZS5ub3coKTtcclxuICAgIHByaXZhdGUgdGltZXI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgem9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFnZW5kYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBPIHNlcnZpZG9yIGRlY2lkZSBhIGV4cGlyYcOnw6NvOyBhcXVpIHPDsyBldml0YW1vcyBvZmVyZWNlciB1bSBjbGlxdWUgcXVlIGrDoSB2YWkgZmFsaGFyLiAqL1xyXG4gICAgZ2V0IGV4cGlyYWRhTG9jYWxtZW50ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY2FvPy5lc3RhZG8gPT09ICdwZW5kZW50ZScgJiYgISF0aGlzLmFjYW8uZXhwaXJhRW0gJiYgdGhpcy5hY2FvLmV4cGlyYUVtLmdldFRpbWUoKSA8PSB0aGlzLmFnb3JhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlc3RhZG8oKTogVWlueUVzdGFkb0FjYW8ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGlyYWRhTG9jYWxtZW50ZSA/ICdleHBpcmFkYScgOiB0aGlzLmFjYW8/LmVzdGFkbztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm90dWxvKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFJPVFVMT1NbdGhpcy5lc3RhZG9dID8/ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXNjcmljYW8oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNhbz8uYXZpc28gfHwgREVTQ1JJQ09FU1t0aGlzLmVzdGFkb10gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9kZURlY2lkaXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXN0YWRvID09PSAncGVuZGVudGUnICYmICF0aGlzLmFjYW8uZW52aWFuZG87XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1pbnV0b3NSZXN0YW50ZXMoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXN0YWRvICE9PSAncGVuZGVudGUnIHx8ICF0aGlzLmFjYW8uZXhwaXJhRW0pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwoKHRoaXMuYWNhby5leHBpcmFFbS5nZXRUaW1lKCkgLSB0aGlzLmFnb3JhKSAvIDYwMDAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWhDb3IodmFsb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fXxbMC05YS1mXXs4fSkkL2kudGVzdCh2YWxvcik7XHJcbiAgICB9XHJcblxyXG4gICAgYW9Db25maXJtYXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9kZURlY2lkaXIpIHRoaXMuY29uZmlybWFyLmVtaXQodGhpcy5hY2FvLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhb0NhbmNlbGFyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBvZGVEZWNpZGlyKSB0aGlzLmNhbmNlbGFyLmVtaXQodGhpcy5hY2FvLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFnZW5kYXIoKTogdm9pZCB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcclxuICAgICAgICB0aGlzLmFnb3JhID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAodGhpcy5hY2FvPy5lc3RhZG8gIT09ICdwZW5kZW50ZScgfHwgIXRoaXMuYWNhby5leHBpcmFFbSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWdvcmEgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJhZGFMb2NhbG1lbnRlKSBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pLCAxNTAwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGFydGljbGUgY2xhc3M9XCJ1aW55LWFjYW9cIiBbbmdDbGFzc109XCIndWlueS1hY2FvLS0nICsgZXN0YWRvXCIgW2F0dHIuYXJpYS1idXN5XT1cImFjYW8uZW52aWFuZG8gPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ3VpbnktYWNhby0nICsgYWNhby5pZFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJ1aW55LWFjYW9fX3RvcG9cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aW55LWFjYW9fX3NlbG9cIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXN0YWRvID09PSAnZXhlY3V0YW5kbycgfHwgYWNhby5lbnZpYW5kb1wiIGNsYXNzPVwidWlueS1hY2FvX19zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHVpLWljb24gKm5nSWY9XCJlc3RhZG8gPT09ICdjb25jbHVpZGEnXCIgaWNvbj1cImNoZWNrX2NpcmNsZVwiIHNpemU9XCIxNlwiPjwvdWktaWNvbj5cbiAgICAgICAgICAgIDx1aS1pY29uICpuZ0lmPVwiZXN0YWRvID09PSAnZmFsaGEnIHx8IGVzdGFkbyA9PT0gJ2luZGV0ZXJtaW5hZGEnXCIgaWNvbj1cImVycm9yXCIgc2l6ZT1cIjE2XCI+PC91aS1pY29uPlxuICAgICAgICAgICAgPHVpLWljb24gKm5nSWY9XCJlc3RhZG8gPT09ICdwZW5kZW50ZScgJiYgIWFjYW8uZW52aWFuZG9cIiBpY29uPVwicGVuZGluZ19hY3Rpb25zXCIgc2l6ZT1cIjE2XCI+PC91aS1pY29uPlxuICAgICAgICAgICAge3sgcm90dWxvIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtaW51dG9zUmVzdGFudGVzXCIgY2xhc3M9XCJ1aW55LWFjYW9fX3ByYXpvXCI+ZXhwaXJhIGVtIHt7IG1pbnV0b3NSZXN0YW50ZXMgfX0gbWluPC9zcGFuPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPHAgY2xhc3M9XCJ1aW55LWFjYW9fX3Jlc3Vtb1wiIFtpZF09XCIndWlueS1hY2FvLScgKyBhY2FvLmlkXCI+e3sgYWNhby5yZXN1bW8gfX08L3A+XG5cbiAgICA8ZGwgKm5nSWY9XCJhY2FvLmRldGFsaGVzPy5sZW5ndGhcIiBjbGFzcz1cInVpbnktYWNhb19fZGV0YWxoZXNcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZCBvZiBhY2FvLmRldGFsaGVzXCIgY2xhc3M9XCJ1aW55LWFjYW9fX2l0ZW1cIj5cbiAgICAgICAgICAgIDxkdD57eyBkLnJvdHVsbyB9fTwvZHQ+XG4gICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlaENvcihkLnZhbG9yKVwiIGNsYXNzPVwidWlueS1hY2FvX19jb3JcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJkLnZhbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IGQudmFsb3IgfX1cbiAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8cCAqbmdJZj1cImRlc2NyaWNhb1wiIGNsYXNzPVwidWlueS1hY2FvX19kZXNjcmljYW9cIiByb2xlPVwic3RhdHVzXCI+e3sgZGVzY3JpY2FvIH19PC9wPlxuXG4gICAgPGRpdiAqbmdJZj1cImVzdGFkbyA9PT0gJ3BlbmRlbnRlJ1wiIGNsYXNzPVwidWlueS1hY2FvX19ib3RvZXNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55LWFjYW9fX2JvdGFvIHVpbnktYWNhb19fYm90YW8tLXNlY3VuZGFyaW9cIiBbZGlzYWJsZWRdPVwiIXBvZGVEZWNpZGlyXCIgKGNsaWNrKT1cImFvQ2FuY2VsYXIoKVwiPlxuICAgICAgICAgICAgQ2FuY2VsYXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueS1hY2FvX19ib3RhbyB1aW55LWFjYW9fX2JvdGFvLS1wcmltYXJpb1wiIFtkaXNhYmxlZF09XCIhcG9kZURlY2lkaXJcIiAoY2xpY2spPVwiYW9Db25maXJtYXIoKVwiPlxuICAgICAgICAgICAgQ29uZmlybWFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImVzdGFkbyA9PT0gJ2luZGV0ZXJtaW5hZGEnXCIgY2xhc3M9XCJ1aW55LWFjYW9fX2JvdG9lc1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnktYWNhb19fYm90YW8gdWlueS1hY2FvX19ib3Rhby0tc2VjdW5kYXJpb1wiIFtkaXNhYmxlZF09XCJhY2FvLmVudmlhbmRvXCIgKGNsaWNrKT1cInZlcmlmaWNhci5lbWl0KGFjYW8uaWQpXCI+XG4gICAgICAgICAgICBWZXJpZmljYXIgcmVzdWx0YWRvXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9hcnRpY2xlPlxuIl19
@@ -1,18 +0,0 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { UiAssistantService } from '../../services/ui-assistant.service';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../services/ui-assistant.service";
5
- import * as i2 from "@angular/common";
6
- /** Botão que abre/fecha a Uiny. Só aparece quando a assistente está disponível. */
7
- export class UiAssistantButtonComponent {
8
- constructor(assistant) {
9
- this.assistant = assistant;
10
- }
11
- }
12
- UiAssistantButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantButtonComponent, deps: [{ token: i1.UiAssistantService }], target: i0.ɵɵFactoryTarget.Component });
13
- UiAssistantButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantButtonComponent, selector: "ui-assistant-button", ngImport: i0, template: "<button *ngIf=\"assistant.disponivel$ | async\" #botao type=\"button\" class=\"uiny-trigger\"\n [class.is-open]=\"assistant.aberto$ | async\"\n [attr.aria-expanded]=\"(assistant.aberto$ | async) ? 'true' : 'false'\"\n aria-controls=\"uiny-painel\"\n [attr.aria-label]=\"(assistant.aberto$ | async) ? 'Fechar a Uiny, assistente da Uishop' : 'Abrir a Uiny, assistente da Uishop'\"\n [title]=\"(assistant.aberto$ | async) ? 'Fechar a Uiny' : 'Falar com a Uiny'\"\n (click)=\"assistant.alternar(botao)\">\n <svg class=\"uiny-trigger__mark\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M12 2.5c.5 3.9 2.6 6.9 6.4 8.2.5.2.5.9 0 1.1-3.8 1.3-5.9 4.3-6.4 8.2-.1.6-.9.6-1 0-.5-3.9-2.6-6.9-6.4-8.2-.5-.2-.5-.9 0-1.1 3.8-1.3 5.9-4.3 6.4-8.2.1-.6.9-.6 1 0Z\" fill=\"currentColor\"/>\n <path d=\"M19 2.8c.2 1.3.9 2.2 2.1 2.6.2.1.2.3 0 .4-1.2.4-1.9 1.3-2.1 2.6 0 .2-.3.2-.3 0-.2-1.3-.9-2.2-2.1-2.6-.2-.1-.2-.3 0-.4 1.2-.4 1.9-1.3 2.1-2.6 0-.2.3-.2.3 0Z\" fill=\"currentColor\" opacity=\".7\"/>\n </svg>\n <span class=\"uiny-trigger__label\">Uiny</span>\n</button>\n", styles: [":host{display:inline-flex}.uiny-trigger{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px 0 10px;border:1px solid rgba(115,102,255,.28);border-radius:999px;background:rgba(115,102,255,.08);color:var(--theme-default, #7366ff);font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.uiny-trigger:hover{background:rgba(115,102,255,.14);border-color:#7366ff73}.uiny-trigger:focus-visible{outline:2px solid var(--theme-default, #7366ff);outline-offset:2px}.uiny-trigger.is-open{background:var(--theme-default, #7366ff);border-color:var(--theme-default, #7366ff);color:#fff}.uiny-trigger__mark{flex:0 0 auto}@media (max-width: 575.98px){.uiny-trigger{width:34px;padding:0;justify-content:center}.uiny-trigger__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}@media (prefers-reduced-motion: reduce){.uiny-trigger{transition:none}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantButtonComponent, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'ui-assistant-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button *ngIf=\"assistant.disponivel$ | async\" #botao type=\"button\" class=\"uiny-trigger\"\n [class.is-open]=\"assistant.aberto$ | async\"\n [attr.aria-expanded]=\"(assistant.aberto$ | async) ? 'true' : 'false'\"\n aria-controls=\"uiny-painel\"\n [attr.aria-label]=\"(assistant.aberto$ | async) ? 'Fechar a Uiny, assistente da Uishop' : 'Abrir a Uiny, assistente da Uishop'\"\n [title]=\"(assistant.aberto$ | async) ? 'Fechar a Uiny' : 'Falar com a Uiny'\"\n (click)=\"assistant.alternar(botao)\">\n <svg class=\"uiny-trigger__mark\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M12 2.5c.5 3.9 2.6 6.9 6.4 8.2.5.2.5.9 0 1.1-3.8 1.3-5.9 4.3-6.4 8.2-.1.6-.9.6-1 0-.5-3.9-2.6-6.9-6.4-8.2-.5-.2-.5-.9 0-1.1 3.8-1.3 5.9-4.3 6.4-8.2.1-.6.9-.6 1 0Z\" fill=\"currentColor\"/>\n <path d=\"M19 2.8c.2 1.3.9 2.2 2.1 2.6.2.1.2.3 0 .4-1.2.4-1.9 1.3-2.1 2.6 0 .2-.3.2-.3 0-.2-1.3-.9-2.2-2.1-2.6-.2-.1-.2-.3 0-.4 1.2-.4 1.9-1.3 2.1-2.6 0-.2.3-.2.3 0Z\" fill=\"currentColor\" opacity=\".7\"/>\n </svg>\n <span class=\"uiny-trigger__label\">Uiny</span>\n</button>\n", styles: [":host{display:inline-flex}.uiny-trigger{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px 0 10px;border:1px solid rgba(115,102,255,.28);border-radius:999px;background:rgba(115,102,255,.08);color:var(--theme-default, #7366ff);font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.uiny-trigger:hover{background:rgba(115,102,255,.14);border-color:#7366ff73}.uiny-trigger:focus-visible{outline:2px solid var(--theme-default, #7366ff);outline-offset:2px}.uiny-trigger.is-open{background:var(--theme-default, #7366ff);border-color:var(--theme-default, #7366ff);color:#fff}.uiny-trigger__mark{flex:0 0 auto}@media (max-width: 575.98px){.uiny-trigger{width:34px;padding:0;justify-content:center}.uiny-trigger__label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}@media (prefers-reduced-motion: reduce){.uiny-trigger{transition:none}}\n"] }]
17
- }], ctorParameters: function () { return [{ type: i1.UiAssistantService }]; } });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1oZWFkZXIvc3JjL2xpYi9hc3Npc3RhbnQvY29tcG9uZW50cy9hc3Npc3RhbnQtYnV0dG9uL3VpLWFzc2lzdGFudC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LWJ1dHRvbi91aS1hc3Npc3RhbnQtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFFekUsbUZBQW1GO0FBT25GLE1BQU0sT0FBTywwQkFBMEI7SUFDbkMsWUFBbUIsU0FBNkI7UUFBN0IsY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFBSSxDQUFDOzt3SEFENUMsMEJBQTBCOzRHQUExQiwwQkFBMEIsMkRDVnZDLGdvQ0FhQTs0RkRIYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVaUFzc2lzdGFudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aS1hc3Npc3RhbnQuc2VydmljZSc7XG5cbi8qKiBCb3TDo28gcXVlIGFicmUvZmVjaGEgYSBVaW55LiBTw7MgYXBhcmVjZSBxdWFuZG8gYSBhc3Npc3RlbnRlIGVzdMOhIGRpc3BvbsOtdmVsLiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1aS1hc3Npc3RhbnQtYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktYXNzaXN0YW50LWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktYXNzaXN0YW50LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVpQXNzaXN0YW50QnV0dG9uQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYXNzaXN0YW50OiBVaUFzc2lzdGFudFNlcnZpY2UpIHsgfVxufVxuIiwiPGJ1dHRvbiAqbmdJZj1cImFzc2lzdGFudC5kaXNwb25pdmVsJCB8IGFzeW5jXCIgI2JvdGFvIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnktdHJpZ2dlclwiXG4gICAgW2NsYXNzLmlzLW9wZW5dPVwiYXNzaXN0YW50LmFiZXJ0byQgfCBhc3luY1wiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIoYXNzaXN0YW50LmFiZXJ0byQgfCBhc3luYykgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICBhcmlhLWNvbnRyb2xzPVwidWlueS1wYWluZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGFzc2lzdGFudC5hYmVydG8kIHwgYXN5bmMpID8gJ0ZlY2hhciBhIFVpbnksIGFzc2lzdGVudGUgZGEgVWlzaG9wJyA6ICdBYnJpciBhIFVpbnksIGFzc2lzdGVudGUgZGEgVWlzaG9wJ1wiXG4gICAgW3RpdGxlXT1cIihhc3Npc3RhbnQuYWJlcnRvJCB8IGFzeW5jKSA/ICdGZWNoYXIgYSBVaW55JyA6ICdGYWxhciBjb20gYSBVaW55J1wiXG4gICAgKGNsaWNrKT1cImFzc2lzdGFudC5hbHRlcm5hcihib3RhbylcIj5cbiAgICA8c3ZnIGNsYXNzPVwidWlueS10cmlnZ2VyX19tYXJrXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgMi41Yy41IDMuOSAyLjYgNi45IDYuNCA4LjIuNS4yLjUuOSAwIDEuMS0zLjggMS4zLTUuOSA0LjMtNi40IDguMi0uMS42LS45LjYtMSAwLS41LTMuOS0yLjYtNi45LTYuNC04LjItLjUtLjItLjUtLjkgMC0xLjEgMy44LTEuMyA1LjktNC4zIDYuNC04LjIuMS0uNi45LS42IDEgMFpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTE5IDIuOGMuMiAxLjMuOSAyLjIgMi4xIDIuNi4yLjEuMi4zIDAgLjQtMS4yLjQtMS45IDEuMy0yLjEgMi42IDAgLjItLjMuMi0uMyAwLS4yLTEuMy0uOS0yLjItMi4xLTIuNi0uMi0uMS0uMi0uMyAwLS40IDEuMi0uNCAxLjktMS4zIDIuMS0yLjYgMC0uMi4zLS4yLjMgMFpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgb3BhY2l0eT1cIi43XCIvPlxuICAgIDwvc3ZnPlxuICAgIDxzcGFuIGNsYXNzPVwidWlueS10cmlnZ2VyX19sYWJlbFwiPlVpbnk8L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
@@ -1,79 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { UINY_MENSAGEM_MAX_CARACTERES } from '../../uiny.config';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "uitec-ng-icon";
6
- const ALTURA_MAXIMA = 160;
7
- /** Campo de mensagem: Enter envia, Shift+Enter quebra linha, cresce até ALTURA_MAXIMA. */
8
- export class UiAssistantComposerComponent {
9
- constructor() {
10
- this.desabilitado = false;
11
- this.enviando = false;
12
- /** Explica por que o envio está bloqueado (sem internet, carregando...). */
13
- this.motivo = null;
14
- this.enviar = new EventEmitter();
15
- this.max = UINY_MENSAGEM_MAX_CARACTERES;
16
- this.texto = '';
17
- }
18
- get vazio() {
19
- return !this.texto.trim();
20
- }
21
- get bloqueado() {
22
- return this.desabilitado || this.enviando || this.vazio || this.texto.length > this.max;
23
- }
24
- get mostrarContador() {
25
- return this.texto.length > this.max - 400;
26
- }
27
- focar() {
28
- this.campo?.nativeElement.focus({ preventScroll: true });
29
- }
30
- limpar() {
31
- this.texto = '';
32
- if (this.campo) {
33
- this.campo.nativeElement.value = '';
34
- this.ajustarAltura();
35
- }
36
- }
37
- aoDigitar(valor) {
38
- this.texto = valor;
39
- this.ajustarAltura();
40
- }
41
- aoTeclar(evento) {
42
- if (evento.key !== 'Enter' || evento.shiftKey)
43
- return;
44
- // durante a composição (IME, acentos em alguns teclados) Enter confirma o caractere
45
- if (evento.isComposing || evento.keyCode === 229)
46
- return;
47
- evento.preventDefault();
48
- this.submeter();
49
- }
50
- submeter() {
51
- if (this.bloqueado)
52
- return;
53
- this.enviar.emit(this.texto.trim());
54
- }
55
- ajustarAltura() {
56
- const el = this.campo.nativeElement;
57
- el.style.height = 'auto';
58
- el.style.height = Math.min(el.scrollHeight, ALTURA_MAXIMA) + 'px';
59
- el.style.overflowY = el.scrollHeight > ALTURA_MAXIMA ? 'auto' : 'hidden';
60
- }
61
- }
62
- UiAssistantComposerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantComposerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
- UiAssistantComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantComposerComponent, selector: "ui-assistant-composer", inputs: { desabilitado: "desabilitado", enviando: "enviando", motivo: "motivo" }, outputs: { enviar: "enviar" }, viewQueries: [{ propertyName: "campo", first: true, predicate: ["campo"], descendants: true, static: true }], ngImport: i0, template: "<form class=\"uiny-composer\" (submit)=\"$event.preventDefault(); submeter()\">\n <label for=\"uiny-campo\" class=\"uiny-sr\">Mensagem para a Uiny</label>\n <div class=\"uiny-composer__caixa\" [class.is-desabilitado]=\"desabilitado\">\n <textarea #campo id=\"uiny-campo\" class=\"uiny-composer__campo\" rows=\"1\"\n placeholder=\"Pergunte algo para a Uiny\"\n [value]=\"texto\"\n [attr.aria-describedby]=\"motivo ? 'uiny-campo-motivo' : 'uiny-campo-dica'\"\n [attr.maxlength]=\"max + 200\"\n (input)=\"aoDigitar(campo.value)\"\n (keydown)=\"aoTeclar($event)\"></textarea>\n\n <button type=\"submit\" class=\"uiny-composer__enviar\" [disabled]=\"bloqueado\"\n [attr.aria-label]=\"enviando ? 'Aguardando a resposta da Uiny' : 'Enviar mensagem'\"\n [title]=\"enviando ? 'Aguardando a resposta' : 'Enviar (Enter)'\">\n <span *ngIf=\"enviando\" class=\"uiny-composer__spinner\" aria-hidden=\"true\"></span>\n <ui-icon *ngIf=\"!enviando\" icon=\"arrow_upward\" size=\"20\"></ui-icon>\n </button>\n </div>\n\n <div class=\"uiny-composer__rodape\">\n <span *ngIf=\"motivo\" id=\"uiny-campo-motivo\" class=\"uiny-composer__motivo\">{{ motivo }}</span>\n <span *ngIf=\"!motivo\" id=\"uiny-campo-dica\">Enter envia \u00B7 Shift+Enter quebra a linha</span>\n <span *ngIf=\"mostrarContador\" class=\"uiny-composer__contador\" [class.is-excedido]=\"texto.length > max\">\n {{ texto.length }}/{{ max }}\n </span>\n </div>\n</form>\n", styles: [":host{display:block;padding:10px 12px 12px;border-top:1px solid var(--uiny-borda, #ececf3);background:var(--uiny-fundo, #fff)}.uiny-composer__caixa{display:flex;align-items:flex-end;gap:8px;padding:6px 6px 6px 12px;border:1px solid var(--uiny-borda, #ececf3);border-radius:14px;background:var(--uiny-fundo-suave, #f7f7fb);transition:border-color .15s ease,box-shadow .15s ease}.uiny-composer__caixa:focus-within{border-color:var(--uiny-primaria, #7366ff);box-shadow:0 0 0 3px #7366ff26}.uiny-composer__caixa.is-desabilitado{opacity:.75}.uiny-composer__campo{flex:1 1 auto;min-width:0;max-height:160px;padding:6px 0;border:0;outline:0;background:transparent;color:var(--uiny-texto, #2b2b2b);font:inherit;font-size:14px;line-height:1.45;resize:none;overflow-y:hidden}.uiny-composer__campo::placeholder{color:var(--uiny-texto-suave, #6b6b80)}.uiny-composer__enviar{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:10px;background:var(--uiny-primaria, #7366ff);color:#fff;cursor:pointer;transition:opacity .15s ease}.uiny-composer__enviar:disabled{opacity:.35;cursor:not-allowed}.uiny-composer__enviar:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-composer__spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny-composer__rodape{display:flex;justify-content:space-between;gap:8px;margin-top:6px;padding:0 4px;font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-composer__motivo{color:var(--uiny-offline-texto, #8a5300)}.uiny-composer__contador.is-excedido{color:var(--uiny-erro, #d9364f);font-weight:600}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny-composer__caixa,.uiny-composer__enviar{transition:none}.uiny-composer__spinner{animation-duration:2.4s}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["icon", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantComposerComponent, decorators: [{
65
- type: Component,
66
- args: [{ selector: 'ui-assistant-composer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form class=\"uiny-composer\" (submit)=\"$event.preventDefault(); submeter()\">\n <label for=\"uiny-campo\" class=\"uiny-sr\">Mensagem para a Uiny</label>\n <div class=\"uiny-composer__caixa\" [class.is-desabilitado]=\"desabilitado\">\n <textarea #campo id=\"uiny-campo\" class=\"uiny-composer__campo\" rows=\"1\"\n placeholder=\"Pergunte algo para a Uiny\"\n [value]=\"texto\"\n [attr.aria-describedby]=\"motivo ? 'uiny-campo-motivo' : 'uiny-campo-dica'\"\n [attr.maxlength]=\"max + 200\"\n (input)=\"aoDigitar(campo.value)\"\n (keydown)=\"aoTeclar($event)\"></textarea>\n\n <button type=\"submit\" class=\"uiny-composer__enviar\" [disabled]=\"bloqueado\"\n [attr.aria-label]=\"enviando ? 'Aguardando a resposta da Uiny' : 'Enviar mensagem'\"\n [title]=\"enviando ? 'Aguardando a resposta' : 'Enviar (Enter)'\">\n <span *ngIf=\"enviando\" class=\"uiny-composer__spinner\" aria-hidden=\"true\"></span>\n <ui-icon *ngIf=\"!enviando\" icon=\"arrow_upward\" size=\"20\"></ui-icon>\n </button>\n </div>\n\n <div class=\"uiny-composer__rodape\">\n <span *ngIf=\"motivo\" id=\"uiny-campo-motivo\" class=\"uiny-composer__motivo\">{{ motivo }}</span>\n <span *ngIf=\"!motivo\" id=\"uiny-campo-dica\">Enter envia \u00B7 Shift+Enter quebra a linha</span>\n <span *ngIf=\"mostrarContador\" class=\"uiny-composer__contador\" [class.is-excedido]=\"texto.length > max\">\n {{ texto.length }}/{{ max }}\n </span>\n </div>\n</form>\n", styles: [":host{display:block;padding:10px 12px 12px;border-top:1px solid var(--uiny-borda, #ececf3);background:var(--uiny-fundo, #fff)}.uiny-composer__caixa{display:flex;align-items:flex-end;gap:8px;padding:6px 6px 6px 12px;border:1px solid var(--uiny-borda, #ececf3);border-radius:14px;background:var(--uiny-fundo-suave, #f7f7fb);transition:border-color .15s ease,box-shadow .15s ease}.uiny-composer__caixa:focus-within{border-color:var(--uiny-primaria, #7366ff);box-shadow:0 0 0 3px #7366ff26}.uiny-composer__caixa.is-desabilitado{opacity:.75}.uiny-composer__campo{flex:1 1 auto;min-width:0;max-height:160px;padding:6px 0;border:0;outline:0;background:transparent;color:var(--uiny-texto, #2b2b2b);font:inherit;font-size:14px;line-height:1.45;resize:none;overflow-y:hidden}.uiny-composer__campo::placeholder{color:var(--uiny-texto-suave, #6b6b80)}.uiny-composer__enviar{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:10px;background:var(--uiny-primaria, #7366ff);color:#fff;cursor:pointer;transition:opacity .15s ease}.uiny-composer__enviar:disabled{opacity:.35;cursor:not-allowed}.uiny-composer__enviar:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-composer__spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny-composer__rodape{display:flex;justify-content:space-between;gap:8px;margin-top:6px;padding:0 4px;font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-composer__motivo{color:var(--uiny-offline-texto, #8a5300)}.uiny-composer__contador.is-excedido{color:var(--uiny-erro, #d9364f);font-weight:600}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny-composer__caixa,.uiny-composer__enviar{transition:none}.uiny-composer__spinner{animation-duration:2.4s}}\n"] }]
67
- }], propDecorators: { desabilitado: [{
68
- type: Input
69
- }], enviando: [{
70
- type: Input
71
- }], motivo: [{
72
- type: Input
73
- }], enviar: [{
74
- type: Output
75
- }], campo: [{
76
- type: ViewChild,
77
- args: ['campo', { static: true }]
78
- }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LWNvbXBvc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWhlYWRlci9zcmMvbGliL2Fzc2lzdGFudC9jb21wb25lbnRzL2Fzc2lzdGFudC1jb21wb3Nlci91aS1hc3Npc3RhbnQtY29tcG9zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LWNvbXBvc2VyL3VpLWFzc2lzdGFudC1jb21wb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFakUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBRTFCLDBGQUEwRjtBQU8xRixNQUFNLE9BQU8sNEJBQTRCO0lBTnpDO1FBUWEsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiw0RUFBNEU7UUFDbkUsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFFNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFJOUIsUUFBRyxHQUFHLDRCQUE0QixDQUFDO1FBQzVDLFVBQUssR0FBRyxFQUFFLENBQUM7S0FrRHJCO0lBaERHLElBQUksS0FBSztRQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDNUYsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQXFCO1FBQzFCLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RELG9GQUFvRjtRQUNwRixJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxHQUFHO1lBQUUsT0FBTztRQUN6RCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxhQUFhO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6QixFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3RSxDQUFDOzswSEE3RFEsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsNFJDWnpDLG9rREEyQkE7NEZEZmEsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNJLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTs4QkFJdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBRStCLEtBQUs7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSU5ZX01FTlNBR0VNX01BWF9DQVJBQ1RFUkVTIH0gZnJvbSAnLi4vLi4vdWlueS5jb25maWcnO1xuXG5jb25zdCBBTFRVUkFfTUFYSU1BID0gMTYwO1xuXG4vKiogQ2FtcG8gZGUgbWVuc2FnZW06IEVudGVyIGVudmlhLCBTaGlmdCtFbnRlciBxdWVicmEgbGluaGEsIGNyZXNjZSBhdMOpIEFMVFVSQV9NQVhJTUEuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VpLWFzc2lzdGFudC1jb21wb3NlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWFzc2lzdGFudC1jb21wb3Nlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktYXNzaXN0YW50LWNvbXBvc2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlBc3Npc3RhbnRDb21wb3NlckNvbXBvbmVudCB7XG5cbiAgICBASW5wdXQoKSBkZXNhYmlsaXRhZG8gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlbnZpYW5kbyA9IGZhbHNlO1xuICAgIC8qKiBFeHBsaWNhIHBvciBxdWUgbyBlbnZpbyBlc3TDoSBibG9xdWVhZG8gKHNlbSBpbnRlcm5ldCwgY2FycmVnYW5kby4uLikuICovXG4gICAgQElucHV0KCkgbW90aXZvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIEBPdXRwdXQoKSBlbnZpYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NhbXBvJywgeyBzdGF0aWM6IHRydWUgfSkgY2FtcG86IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbWF4ID0gVUlOWV9NRU5TQUdFTV9NQVhfQ0FSQUNURVJFUztcbiAgICBwdWJsaWMgdGV4dG8gPSAnJztcblxuICAgIGdldCB2YXppbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRleHRvLnRyaW0oKTtcbiAgICB9XG5cbiAgICBnZXQgYmxvcXVlYWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNhYmlsaXRhZG8gfHwgdGhpcy5lbnZpYW5kbyB8fCB0aGlzLnZhemlvIHx8IHRoaXMudGV4dG8ubGVuZ3RoID4gdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgZ2V0IG1vc3RyYXJDb250YWRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dG8ubGVuZ3RoID4gdGhpcy5tYXggLSA0MDA7XG4gICAgfVxuXG4gICAgZm9jYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FtcG8/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGxpbXBhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0byA9ICcnO1xuICAgICAgICBpZiAodGhpcy5jYW1wbykge1xuICAgICAgICAgICAgdGhpcy5jYW1wby5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmFqdXN0YXJBbHR1cmEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFvRGlnaXRhcih2YWxvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dG8gPSB2YWxvcjtcbiAgICAgICAgdGhpcy5hanVzdGFyQWx0dXJhKCk7XG4gICAgfVxuXG4gICAgYW9UZWNsYXIoZXZlbnRvOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudG8ua2V5ICE9PSAnRW50ZXInIHx8IGV2ZW50by5zaGlmdEtleSkgcmV0dXJuO1xuICAgICAgICAvLyBkdXJhbnRlIGEgY29tcG9zacOnw6NvIChJTUUsIGFjZW50b3MgZW0gYWxndW5zIHRlY2xhZG9zKSBFbnRlciBjb25maXJtYSBvIGNhcmFjdGVyZVxuICAgICAgICBpZiAoZXZlbnRvLmlzQ29tcG9zaW5nIHx8IGV2ZW50by5rZXlDb2RlID09PSAyMjkpIHJldHVybjtcbiAgICAgICAgZXZlbnRvLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3VibWV0ZXIoKTtcbiAgICB9XG5cbiAgICBzdWJtZXRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvcXVlYWRvKSByZXR1cm47XG4gICAgICAgIHRoaXMuZW52aWFyLmVtaXQodGhpcy50ZXh0by50cmltKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWp1c3RhckFsdHVyYSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmNhbXBvLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCBBTFRVUkFfTUFYSU1BKSArICdweCc7XG4gICAgICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IEFMVFVSQV9NQVhJTUEgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cInVpbnktY29tcG9zZXJcIiAoc3VibWl0KT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBzdWJtZXRlcigpXCI+XG4gICAgPGxhYmVsIGZvcj1cInVpbnktY2FtcG9cIiBjbGFzcz1cInVpbnktc3JcIj5NZW5zYWdlbSBwYXJhIGEgVWlueTwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cInVpbnktY29tcG9zZXJfX2NhaXhhXCIgW2NsYXNzLmlzLWRlc2FiaWxpdGFkb109XCJkZXNhYmlsaXRhZG9cIj5cbiAgICAgICAgPHRleHRhcmVhICNjYW1wbyBpZD1cInVpbnktY2FtcG9cIiBjbGFzcz1cInVpbnktY29tcG9zZXJfX2NhbXBvXCIgcm93cz1cIjFcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXJndW50ZSBhbGdvIHBhcmEgYSBVaW55XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXh0b1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIm1vdGl2byA/ICd1aW55LWNhbXBvLW1vdGl2bycgOiAndWlueS1jYW1wby1kaWNhJ1wiXG4gICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4ICsgMjAwXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJhb0RpZ2l0YXIoY2FtcG8udmFsdWUpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImFvVGVjbGFyKCRldmVudClcIj48L3RleHRhcmVhPlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwidWlueS1jb21wb3Nlcl9fZW52aWFyXCIgW2Rpc2FibGVkXT1cImJsb3F1ZWFkb1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVudmlhbmRvID8gJ0FndWFyZGFuZG8gYSByZXNwb3N0YSBkYSBVaW55JyA6ICdFbnZpYXIgbWVuc2FnZW0nXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJlbnZpYW5kbyA/ICdBZ3VhcmRhbmRvIGEgcmVzcG9zdGEnIDogJ0VudmlhciAoRW50ZXIpJ1wiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnZpYW5kb1wiIGNsYXNzPVwidWlueS1jb21wb3Nlcl9fc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDx1aS1pY29uICpuZ0lmPVwiIWVudmlhbmRvXCIgaWNvbj1cImFycm93X3Vwd2FyZFwiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidWlueS1jb21wb3Nlcl9fcm9kYXBlXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibW90aXZvXCIgaWQ9XCJ1aW55LWNhbXBvLW1vdGl2b1wiIGNsYXNzPVwidWlueS1jb21wb3Nlcl9fbW90aXZvXCI+e3sgbW90aXZvIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFtb3Rpdm9cIiBpZD1cInVpbnktY2FtcG8tZGljYVwiPkVudGVyIGVudmlhIMK3IFNoaWZ0K0VudGVyIHF1ZWJyYSBhIGxpbmhhPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIm1vc3RyYXJDb250YWRvclwiIGNsYXNzPVwidWlueS1jb21wb3Nlcl9fY29udGFkb3JcIiBbY2xhc3MuaXMtZXhjZWRpZG9dPVwidGV4dG8ubGVuZ3RoID4gbWF4XCI+XG4gICAgICAgICAgICB7eyB0ZXh0by5sZW5ndGggfX0ve3sgbWF4IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -1,140 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, NgZone, Optional, Output, ViewChild } from '@angular/core';
2
- import { NavigationEnd, Router } from '@angular/router';
3
- import { Subscription } from 'rxjs';
4
- import { filter } from 'rxjs/operators';
5
- import { UiAssistantService } from '../../services/ui-assistant.service';
6
- import { larguraPainel, UINY_CONFIG, UINY_LADO_A_LADO_PADRAO } from '../../uiny.config';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../services/ui-assistant.service";
9
- import * as i2 from "@angular/router";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "../assistant-panel/ui-assistant-panel.component";
12
- const DURACAO_TRANSICAO_MS = 240;
13
- /**
14
- * Contêiner que hospeda a Uiny ao lado da aplicação.
15
- *
16
- * Envolve TODO o layout da aplicação (inclusive o header e a sidebar fixos):
17
- *
18
- * <ui-assistant-layout (assistantEvent)="...">
19
- * <div class="page-wrapper">...</div>
20
- * </ui-assistant-layout>
21
- *
22
- * Fechado, não altera nada: a página rola normalmente pela janela.
23
- * Aberto no desktop, vira uma linha flex [aplicação | painel]: a coluna da aplicação passa
24
- * a ser o bloco de contenção dos elementos position:fixed (contain: layout) e ganha rolagem
25
- * própria. Assim o header e a sidebar fixos ocupam a coluna da esquerda, sem serem cobertos.
26
- * Em telas estreitas o painel ocupa a largura toda e a aplicação fica recolhida até voltar.
27
- */
28
- export class UiAssistantLayoutComponent {
29
- constructor(assistant, cdr, zone, config, router) {
30
- this.assistant = assistant;
31
- this.cdr = cdr;
32
- this.zone = zone;
33
- this.router = router;
34
- /** Ações concluídas e instruções de interface (tema atualizado, atualizar listagem, abrir prévia). */
35
- this.assistantEvent = new EventEmitter();
36
- /** Painel montado e layout em modo contido (inclui a animação de fechamento). */
37
- this.contido = false;
38
- /** Painel com a largura final (classe que dispara a transição). */
39
- this.expandido = false;
40
- /** Tela estreita: painel em largura total, aplicação recolhida. */
41
- this.empilhado = false;
42
- this.disponivel = false;
43
- this.subs = new Subscription();
44
- this.midia = null;
45
- this.scrollJanela = 0;
46
- this.largura = larguraPainel(config);
47
- const ladoALado = config?.larguraMinimaLadoALado || UINY_LADO_A_LADO_PADRAO;
48
- if (typeof window !== 'undefined' && window.matchMedia) {
49
- this.midia = window.matchMedia(`(max-width: ${ladoALado - 0.02}px)`);
50
- this.empilhado = this.midia.matches;
51
- }
52
- }
53
- ngOnInit() {
54
- this.removerHost = this.assistant.registrarHost();
55
- this.subs.add(this.assistant.disponivel$.subscribe(d => {
56
- this.disponivel = d;
57
- this.cdr.markForCheck();
58
- }));
59
- this.subs.add(this.assistant.aberto$.subscribe(aberto => aberto ? this.abrir() : this.fechar()));
60
- this.subs.add(this.assistant.eventos$.subscribe(e => this.assistantEvent.emit(e)));
61
- // Com o layout contido a janela não rola: replica o scroll ao topo da navegação.
62
- if (this.router) {
63
- this.subs.add(this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe(() => {
64
- if (this.contido && this.rolagem)
65
- this.rolagem.nativeElement.scrollTop = 0;
66
- }));
67
- }
68
- if (this.midia) {
69
- const aoMudar = (e) => this.zone.run(() => {
70
- this.empilhado = e.matches;
71
- this.cdr.markForCheck();
72
- });
73
- this.midia.addEventListener ? this.midia.addEventListener('change', aoMudar) : this.midia.addListener(aoMudar);
74
- this.subs.add(() => this.midia.removeEventListener
75
- ? this.midia.removeEventListener('change', aoMudar)
76
- : this.midia.removeListener(aoMudar));
77
- }
78
- }
79
- ngOnDestroy() {
80
- clearTimeout(this.timerFechamento);
81
- this.subs.unsubscribe();
82
- this.removerHost?.();
83
- if (this.contido)
84
- this.restaurarJanela();
85
- }
86
- abrir() {
87
- clearTimeout(this.timerFechamento);
88
- if (!this.contido) {
89
- this.scrollJanela = window.scrollY || 0;
90
- this.contido = true;
91
- this.cdr.detectChanges();
92
- // a rolagem passa da janela para a coluna da aplicação, na mesma posição
93
- this.rolagem.nativeElement.scrollTop = this.scrollJanela;
94
- }
95
- // próximo frame: a largura sai de 0 e a transição acontece
96
- requestAnimationFrame(() => {
97
- this.expandido = true;
98
- this.cdr.detectChanges();
99
- });
100
- }
101
- fechar() {
102
- if (!this.contido)
103
- return;
104
- this.expandido = false;
105
- this.cdr.detectChanges();
106
- clearTimeout(this.timerFechamento);
107
- this.timerFechamento = setTimeout(() => {
108
- this.restaurarJanela();
109
- this.cdr.detectChanges();
110
- }, this.semAnimacao() ? 0 : DURACAO_TRANSICAO_MS);
111
- }
112
- restaurarJanela() {
113
- const topo = this.empilhado ? this.scrollJanela : (this.rolagem?.nativeElement.scrollTop ?? 0);
114
- this.contido = false;
115
- this.cdr.detectChanges();
116
- window.scrollTo(0, topo);
117
- }
118
- semAnimacao() {
119
- return typeof window !== 'undefined' && !!window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
120
- }
121
- }
122
- UiAssistantLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantLayoutComponent, deps: [{ token: i1.UiAssistantService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: UINY_CONFIG, optional: true }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
123
- UiAssistantLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantLayoutComponent, selector: "ui-assistant-layout", outputs: { assistantEvent: "assistantEvent" }, viewQueries: [{ propertyName: "rolagem", first: true, predicate: ["rolagem"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"uiny-layout\"\n [class.uiny-layout--contido]=\"contido\"\n [class.uiny-layout--expandido]=\"expandido\"\n [class.uiny-layout--empilhado]=\"empilhado\"\n [style.--uiny-largura]=\"largura + 'px'\">\n\n <div class=\"uiny-layout__app\"\n [attr.inert]=\"contido && expandido && empilhado ? '' : null\"\n [attr.aria-hidden]=\"contido && expandido && empilhado ? 'true' : null\">\n <div #rolagem class=\"uiny-layout__rolagem\">\n <ng-content></ng-content>\n </div>\n </div>\n\n <aside *ngIf=\"disponivel && contido\" id=\"uiny-painel\" class=\"uiny-layout__painel\"\n aria-label=\"Uiny, assistente da Uishop\"\n [attr.aria-hidden]=\"expandido ? null : 'true'\"\n [attr.inert]=\"expandido ? null : ''\">\n <div class=\"uiny-layout__painel-conteudo\">\n <ui-assistant-panel [empilhado]=\"empilhado\"></ui-assistant-panel>\n </div>\n </aside>\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block}.uiny-layout,.uiny-layout__app,.uiny-layout__rolagem{display:block}.uiny-layout--contido{display:flex;width:100%;height:100vh;height:100dvh;overflow:hidden}.uiny-layout--contido .uiny-layout__app{flex:1 1 0;min-width:0;height:100%;position:relative;contain:layout paint;overflow:hidden}.uiny-layout--contido .uiny-layout__rolagem{height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.uiny-layout__painel{flex:0 0 auto;width:0;height:100%;overflow:hidden;position:relative;z-index:2;transition:width .24s cubic-bezier(.2,.8,.2,1)}.uiny-layout__painel-conteudo{width:var(--uiny-largura, 380px);height:100%}.uiny-layout--expandido .uiny-layout__painel{width:var(--uiny-largura, 380px)}.uiny-layout--empilhado .uiny-layout__painel,.uiny-layout--empilhado .uiny-layout__painel-conteudo{width:100%}.uiny-layout--empilhado .uiny-layout__painel{transition:opacity .18s ease;opacity:0}.uiny-layout--empilhado.uiny-layout--expandido .uiny-layout__painel{width:100%;opacity:1}.uiny-layout--empilhado.uiny-layout--expandido .uiny-layout__app{display:none}@media (prefers-reduced-motion: reduce){.uiny-layout__painel,.uiny-layout--empilhado .uiny-layout__painel{transition:none}}@media print{.uiny-layout__painel{display:none}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.UiAssistantPanelComponent, selector: "ui-assistant-panel", inputs: ["empilhado"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantLayoutComponent, decorators: [{
125
- type: Component,
126
- args: [{ selector: 'ui-assistant-layout', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"uiny-layout\"\n [class.uiny-layout--contido]=\"contido\"\n [class.uiny-layout--expandido]=\"expandido\"\n [class.uiny-layout--empilhado]=\"empilhado\"\n [style.--uiny-largura]=\"largura + 'px'\">\n\n <div class=\"uiny-layout__app\"\n [attr.inert]=\"contido && expandido && empilhado ? '' : null\"\n [attr.aria-hidden]=\"contido && expandido && empilhado ? 'true' : null\">\n <div #rolagem class=\"uiny-layout__rolagem\">\n <ng-content></ng-content>\n </div>\n </div>\n\n <aside *ngIf=\"disponivel && contido\" id=\"uiny-painel\" class=\"uiny-layout__painel\"\n aria-label=\"Uiny, assistente da Uishop\"\n [attr.aria-hidden]=\"expandido ? null : 'true'\"\n [attr.inert]=\"expandido ? null : ''\">\n <div class=\"uiny-layout__painel-conteudo\">\n <ui-assistant-panel [empilhado]=\"empilhado\"></ui-assistant-panel>\n </div>\n </aside>\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block}.uiny-layout,.uiny-layout__app,.uiny-layout__rolagem{display:block}.uiny-layout--contido{display:flex;width:100%;height:100vh;height:100dvh;overflow:hidden}.uiny-layout--contido .uiny-layout__app{flex:1 1 0;min-width:0;height:100%;position:relative;contain:layout paint;overflow:hidden}.uiny-layout--contido .uiny-layout__rolagem{height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.uiny-layout__painel{flex:0 0 auto;width:0;height:100%;overflow:hidden;position:relative;z-index:2;transition:width .24s cubic-bezier(.2,.8,.2,1)}.uiny-layout__painel-conteudo{width:var(--uiny-largura, 380px);height:100%}.uiny-layout--expandido .uiny-layout__painel{width:var(--uiny-largura, 380px)}.uiny-layout--empilhado .uiny-layout__painel,.uiny-layout--empilhado .uiny-layout__painel-conteudo{width:100%}.uiny-layout--empilhado .uiny-layout__painel{transition:opacity .18s ease;opacity:0}.uiny-layout--empilhado.uiny-layout--expandido .uiny-layout__painel{width:100%;opacity:1}.uiny-layout--empilhado.uiny-layout--expandido .uiny-layout__app{display:none}@media (prefers-reduced-motion: reduce){.uiny-layout__painel,.uiny-layout--empilhado .uiny-layout__painel{transition:none}}@media print{.uiny-layout__painel{display:none}}\n"] }]
127
- }], ctorParameters: function () { return [{ type: i1.UiAssistantService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
128
- type: Optional
129
- }, {
130
- type: Inject,
131
- args: [UINY_CONFIG]
132
- }] }, { type: i2.Router, decorators: [{
133
- type: Optional
134
- }] }]; }, propDecorators: { assistantEvent: [{
135
- type: Output
136
- }], rolagem: [{
137
- type: ViewChild,
138
- args: ['rolagem', { static: true }]
139
- }] } });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1oZWFkZXIvc3JjL2xpYi9hc3Npc3RhbnQvY29tcG9uZW50cy9hc3Npc3RhbnQtbGF5b3V0L3VpLWFzc2lzdGFudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LWxheW91dC91aS1hc3Npc3RhbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFFeEYsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBc0JuQyxZQUNXLFNBQTZCLEVBQzVCLEdBQXNCLEVBQ3RCLElBQVksRUFDYSxNQUF5QixFQUN0QyxNQUFjO1FBSjNCLGNBQVMsR0FBVCxTQUFT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QyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNqSSxDQUFDOzt3SEE3R1EsMEJBQTBCLDJHQTBCWCxXQUFXOzRHQTFCMUIsMEJBQTBCLDROQzVDdkMsczhCQXVCQTs0RkRxQmEsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNOzswQkE0QjFDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVzs7MEJBQzlCLFFBQVE7NENBeEJILGNBQWM7c0JBQXZCLE1BQU07Z0JBRWlDLE9BQU87c0JBQTlDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFVpbnlDb25maWcsIFVpbnlFdmVudG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdWlueS5tb2RlbHMnO1xyXG5pbXBvcnQgeyBVaUFzc2lzdGFudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aS1hc3Npc3RhbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGxhcmd1cmFQYWluZWwsIFVJTllfQ09ORklHLCBVSU5ZX0xBRE9fQV9MQURPX1BBRFJBTyB9IGZyb20gJy4uLy4uL3VpbnkuY29uZmlnJztcclxuXHJcbmNvbnN0IERVUkFDQU9fVFJBTlNJQ0FPX01TID0gMjQwO1xyXG5cclxuLyoqXHJcbiAqIENvbnTDqmluZXIgcXVlIGhvc3BlZGEgYSBVaW55IGFvIGxhZG8gZGEgYXBsaWNhw6fDo28uXHJcbiAqXHJcbiAqIEVudm9sdmUgVE9ETyBvIGxheW91dCBkYSBhcGxpY2HDp8OjbyAoaW5jbHVzaXZlIG8gaGVhZGVyIGUgYSBzaWRlYmFyIGZpeG9zKTpcclxuICpcclxuICogICA8dWktYXNzaXN0YW50LWxheW91dCAoYXNzaXN0YW50RXZlbnQpPVwiLi4uXCI+XHJcbiAqICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXdyYXBwZXJcIj4uLi48L2Rpdj5cclxuICogICA8L3VpLWFzc2lzdGFudC1sYXlvdXQ+XHJcbiAqXHJcbiAqIEZlY2hhZG8sIG7Do28gYWx0ZXJhIG5hZGE6IGEgcMOhZ2luYSByb2xhIG5vcm1hbG1lbnRlIHBlbGEgamFuZWxhLlxyXG4gKiBBYmVydG8gbm8gZGVza3RvcCwgdmlyYSB1bWEgbGluaGEgZmxleCBbYXBsaWNhw6fDo28gfCBwYWluZWxdOiBhIGNvbHVuYSBkYSBhcGxpY2HDp8OjbyBwYXNzYVxyXG4gKiBhIHNlciBvIGJsb2NvIGRlIGNvbnRlbsOnw6NvIGRvcyBlbGVtZW50b3MgcG9zaXRpb246Zml4ZWQgKGNvbnRhaW46IGxheW91dCkgZSBnYW5oYSByb2xhZ2VtXHJcbiAqIHByw7NwcmlhLiBBc3NpbSBvIGhlYWRlciBlIGEgc2lkZWJhciBmaXhvcyBvY3VwYW0gYSBjb2x1bmEgZGEgZXNxdWVyZGEsIHNlbSBzZXJlbSBjb2JlcnRvcy5cclxuICogRW0gdGVsYXMgZXN0cmVpdGFzIG8gcGFpbmVsIG9jdXBhIGEgbGFyZ3VyYSB0b2RhIGUgYSBhcGxpY2HDp8OjbyBmaWNhIHJlY29saGlkYSBhdMOpIHZvbHRhci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd1aS1hc3Npc3RhbnQtbGF5b3V0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1hc3Npc3RhbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VpLWFzc2lzdGFudC1sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudExheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICAvKiogQcOnw7VlcyBjb25jbHXDrWRhcyBlIGluc3RydcOnw7VlcyBkZSBpbnRlcmZhY2UgKHRlbWEgYXR1YWxpemFkbywgYXR1YWxpemFyIGxpc3RhZ2VtLCBhYnJpciBwcsOpdmlhKS4gKi9cclxuICAgIEBPdXRwdXQoKSBhc3Npc3RhbnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlueUV2ZW50bz4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdyb2xhZ2VtJywgeyBzdGF0aWM6IHRydWUgfSkgcm9sYWdlbTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgLyoqIFBhaW5lbCBtb250YWRvIGUgbGF5b3V0IGVtIG1vZG8gY29udGlkbyAoaW5jbHVpIGEgYW5pbWHDp8OjbyBkZSBmZWNoYW1lbnRvKS4gKi9cclxuICAgIHB1YmxpYyBjb250aWRvID0gZmFsc2U7XHJcbiAgICAvKiogUGFpbmVsIGNvbSBhIGxhcmd1cmEgZmluYWwgKGNsYXNzZSBxdWUgZGlzcGFyYSBhIHRyYW5zacOnw6NvKS4gKi9cclxuICAgIHB1YmxpYyBleHBhbmRpZG8gPSBmYWxzZTtcclxuICAgIC8qKiBUZWxhIGVzdHJlaXRhOiBwYWluZWwgZW0gbGFyZ3VyYSB0b3RhbCwgYXBsaWNhw6fDo28gcmVjb2xoaWRhLiAqL1xyXG4gICAgcHVibGljIGVtcGlsaGFkbyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpc3Bvbml2ZWwgPSBmYWxzZTtcclxuICAgIHB1YmxpYyByZWFkb25seSBsYXJndXJhOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVySG9zdDogKCkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHByaXZhdGUgbWlkaWE6IE1lZGlhUXVlcnlMaXN0IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHRpbWVyRmVjaGFtZW50bzogYW55O1xyXG4gICAgcHJpdmF0ZSBzY3JvbGxKYW5lbGEgPSAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhc3Npc3RhbnQ6IFVpQXNzaXN0YW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChVSU5ZX0NPTkZJRykgY29uZmlnOiBVaW55Q29uZmlnIHwgbnVsbCxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmxhcmd1cmEgPSBsYXJndXJhUGFpbmVsKGNvbmZpZyk7XHJcbiAgICAgICAgY29uc3QgbGFkb0FMYWRvID0gY29uZmlnPy5sYXJndXJhTWluaW1hTGFkb0FMYWRvIHx8IFVJTllfTEFET19BX0xBRE9fUEFEUkFPO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubWF0Y2hNZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLm1pZGlhID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7bGFkb0FMYWRvIC0gMC4wMn1weClgKTtcclxuICAgICAgICAgICAgdGhpcy5lbXBpbGhhZG8gPSB0aGlzLm1pZGlhLm1hdGNoZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVtb3Zlckhvc3QgPSB0aGlzLmFzc2lzdGFudC5yZWdpc3RyYXJIb3N0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5hc3Npc3RhbnQuZGlzcG9uaXZlbCQuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvbml2ZWwgPSBkO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmFzc2lzdGFudC5hYmVydG8kLnN1YnNjcmliZShhYmVydG8gPT4gYWJlcnRvID8gdGhpcy5hYnJpcigpIDogdGhpcy5mZWNoYXIoKSkpO1xyXG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5hc3Npc3RhbnQuZXZlbnRvcyQuc3Vic2NyaWJlKGUgPT4gdGhpcy5hc3Npc3RhbnRFdmVudC5lbWl0KGUpKSk7XHJcblxyXG4gICAgICAgIC8vIENvbSBvIGxheW91dCBjb250aWRvIGEgamFuZWxhIG7Do28gcm9sYTogcmVwbGljYSBvIHNjcm9sbCBhbyB0b3BvIGRhIG5hdmVnYcOnw6NvLlxyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRpZG8gJiYgdGhpcy5yb2xhZ2VtKSB0aGlzLnJvbGFnZW0ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taWRpYSkge1xyXG4gICAgICAgICAgICBjb25zdCBhb011ZGFyID0gKGU6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbXBpbGhhZG8gPSBlLm1hdGNoZXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubWlkaWEuYWRkRXZlbnRMaXN0ZW5lciA/IHRoaXMubWlkaWEuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYW9NdWRhcikgOiB0aGlzLm1pZGlhLmFkZExpc3RlbmVyKGFvTXVkYXIpO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnMuYWRkKCgpID0+IHRoaXMubWlkaWEucmVtb3ZlRXZlbnRMaXN0ZW5lclxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1pZGlhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFvTXVkYXIpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMubWlkaWEucmVtb3ZlTGlzdGVuZXIoYW9NdWRhcikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lckZlY2hhbWVudG8pO1xyXG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMucmVtb3Zlckhvc3Q/LigpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRpZG8pIHRoaXMucmVzdGF1cmFySmFuZWxhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhYnJpcigpOiB2b2lkIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lckZlY2hhbWVudG8pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250aWRvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsSmFuZWxhID0gd2luZG93LnNjcm9sbFkgfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5jb250aWRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAvLyBhIHJvbGFnZW0gcGFzc2EgZGEgamFuZWxhIHBhcmEgYSBjb2x1bmEgZGEgYXBsaWNhw6fDo28sIG5hIG1lc21hIHBvc2nDp8Ojb1xyXG4gICAgICAgICAgICB0aGlzLnJvbGFnZW0ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbEphbmVsYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcHLDs3hpbW8gZnJhbWU6IGEgbGFyZ3VyYSBzYWkgZGUgMCBlIGEgdHJhbnNpw6fDo28gYWNvbnRlY2VcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGlkbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZlY2hhcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGlkbykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kaWRvID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyRmVjaGFtZW50byk7XHJcbiAgICAgICAgdGhpcy50aW1lckZlY2hhbWVudG8gPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0YXVyYXJKYW5lbGEoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sIHRoaXMuc2VtQW5pbWFjYW8oKSA/IDAgOiBEVVJBQ0FPX1RSQU5TSUNBT19NUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXN0YXVyYXJKYW5lbGEoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdG9wbyA9IHRoaXMuZW1waWxoYWRvID8gdGhpcy5zY3JvbGxKYW5lbGEgOiAodGhpcy5yb2xhZ2VtPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA/PyAwKTtcclxuICAgICAgICB0aGlzLmNvbnRpZG8gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcG8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VtQW5pbWFjYW8oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICEhd2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlcztcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidWlueS1sYXlvdXRcIlxuICAgIFtjbGFzcy51aW55LWxheW91dC0tY29udGlkb109XCJjb250aWRvXCJcbiAgICBbY2xhc3MudWlueS1sYXlvdXQtLWV4cGFuZGlkb109XCJleHBhbmRpZG9cIlxuICAgIFtjbGFzcy51aW55LWxheW91dC0tZW1waWxoYWRvXT1cImVtcGlsaGFkb1wiXG4gICAgW3N0eWxlLi0tdWlueS1sYXJndXJhXT1cImxhcmd1cmEgKyAncHgnXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidWlueS1sYXlvdXRfX2FwcFwiXG4gICAgICAgIFthdHRyLmluZXJ0XT1cImNvbnRpZG8gJiYgZXhwYW5kaWRvICYmIGVtcGlsaGFkbyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImNvbnRpZG8gJiYgZXhwYW5kaWRvICYmIGVtcGlsaGFkbyA/ICd0cnVlJyA6IG51bGxcIj5cbiAgICAgICAgPGRpdiAjcm9sYWdlbSBjbGFzcz1cInVpbnktbGF5b3V0X19yb2xhZ2VtXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGFzaWRlICpuZ0lmPVwiZGlzcG9uaXZlbCAmJiBjb250aWRvXCIgaWQ9XCJ1aW55LXBhaW5lbFwiIGNsYXNzPVwidWlueS1sYXlvdXRfX3BhaW5lbFwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJVaW55LCBhc3Npc3RlbnRlIGRhIFVpc2hvcFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImV4cGFuZGlkbyA/IG51bGwgOiAndHJ1ZSdcIlxuICAgICAgICBbYXR0ci5pbmVydF09XCJleHBhbmRpZG8gPyBudWxsIDogJydcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVpbnktbGF5b3V0X19wYWluZWwtY29udGV1ZG9cIj5cbiAgICAgICAgICAgIDx1aS1hc3Npc3RhbnQtcGFuZWwgW2VtcGlsaGFkb109XCJlbXBpbGhhZG9cIj48L3VpLWFzc2lzdGFudC1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9hc2lkZT5cbjwvZGl2PlxuIl19