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.
- package/README.md +11 -182
- package/esm2020/lib/ui-header.component.mjs +20 -26
- package/esm2020/lib/ui-header.module.mjs +4 -10
- package/esm2020/public-api.mjs +1 -17
- package/fesm2015/uitec-ng-header.mjs +24 -1808
- package/fesm2015/uitec-ng-header.mjs.map +1 -1
- package/fesm2020/uitec-ng-header.mjs +24 -1771
- package/fesm2020/uitec-ng-header.mjs.map +1 -1
- package/lib/ui-header.component.d.ts +8 -11
- package/lib/ui-header.module.d.ts +1 -2
- package/package.json +2 -3
- package/public-api.d.ts +0 -15
- package/esm2020/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.mjs +0 -102
- package/esm2020/lib/assistant/components/assistant-button/ui-assistant-button.component.mjs +0 -18
- package/esm2020/lib/assistant/components/assistant-composer/ui-assistant-composer.component.mjs +0 -79
- package/esm2020/lib/assistant/components/assistant-layout/ui-assistant-layout.component.mjs +0 -140
- package/esm2020/lib/assistant/components/assistant-messages/ui-assistant-messages.component.mjs +0 -144
- package/esm2020/lib/assistant/components/assistant-panel/ui-assistant-panel.component.mjs +0 -156
- package/esm2020/lib/assistant/components/assistant-text/ui-assistant-text.component.mjs +0 -26
- package/esm2020/lib/assistant/models/uiny-api.models.mjs +0 -12
- package/esm2020/lib/assistant/models/uiny.models.mjs +0 -2
- package/esm2020/lib/assistant/services/ui-assistant.service.mjs +0 -137
- package/esm2020/lib/assistant/services/uiny-api.service.mjs +0 -149
- package/esm2020/lib/assistant/services/uiny-chat.service.mjs +0 -368
- package/esm2020/lib/assistant/services/uiny-session.service.mjs +0 -74
- package/esm2020/lib/assistant/ui-assistant.module.mjs +0 -59
- package/esm2020/lib/assistant/uiny.config.mjs +0 -53
- package/esm2020/lib/assistant/utils/uiny-api.adapter.mjs +0 -154
- package/esm2020/lib/assistant/utils/uiny-contexto.mjs +0 -43
- package/esm2020/lib/assistant/utils/uiny-markdown.mjs +0 -122
- package/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.d.ts +0 -33
- package/lib/assistant/components/assistant-button/ui-assistant-button.component.d.ts +0 -9
- package/lib/assistant/components/assistant-composer/ui-assistant-composer.component.d.ts +0 -24
- package/lib/assistant/components/assistant-layout/ui-assistant-layout.component.d.ts +0 -51
- package/lib/assistant/components/assistant-messages/ui-assistant-messages.component.d.ts +0 -38
- package/lib/assistant/components/assistant-panel/ui-assistant-panel.component.d.ts +0 -53
- package/lib/assistant/components/assistant-text/ui-assistant-text.component.d.ts +0 -14
- package/lib/assistant/models/uiny-api.models.d.ts +0 -109
- package/lib/assistant/models/uiny.models.d.ts +0 -104
- package/lib/assistant/services/ui-assistant.service.d.ts +0 -55
- package/lib/assistant/services/uiny-api.service.d.ts +0 -38
- package/lib/assistant/services/uiny-chat.service.d.ts +0 -82
- package/lib/assistant/services/uiny-session.service.d.ts +0 -38
- package/lib/assistant/ui-assistant.module.d.ts +0 -19
- package/lib/assistant/uiny.config.d.ts +0 -31
- package/lib/assistant/utils/uiny-api.adapter.d.ts +0 -22
- package/lib/assistant/utils/uiny-contexto.d.ts +0 -7
- package/lib/assistant/utils/uiny-markdown.d.ts +0 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uitec-ng-header.mjs","sources":["../../../projects/ui-header/src/lib/ui-header.service.ts","../../../projects/ui-header/src/lib/assistant/uiny.config.ts","../../../projects/ui-header/src/lib/assistant/utils/uiny-contexto.ts","../../../projects/ui-header/src/lib/assistant/utils/uiny-api.adapter.ts","../../../projects/ui-header/src/lib/assistant/services/uiny-session.service.ts","../../../projects/ui-header/src/lib/assistant/services/uiny-api.service.ts","../../../projects/ui-header/src/lib/assistant/services/ui-assistant.service.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-button/ui-assistant-button.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-button/ui-assistant-button.component.html","../../../projects/ui-header/src/lib/my-account/my-account.component.ts","../../../projects/ui-header/src/lib/my-account/my-account.component.html","../../../projects/ui-header/src/lib/ui-header.component.ts","../../../projects/ui-header/src/lib/ui-header.component.html","../../../projects/ui-header/src/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.html","../../../projects/ui-header/src/lib/assistant/components/assistant-composer/ui-assistant-composer.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-composer/ui-assistant-composer.component.html","../../../projects/ui-header/src/lib/assistant/services/uiny-chat.service.ts","../../../projects/ui-header/src/lib/assistant/utils/uiny-markdown.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-text/ui-assistant-text.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-text/ui-assistant-text.component.html","../../../projects/ui-header/src/lib/assistant/components/assistant-messages/ui-assistant-messages.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-messages/ui-assistant-messages.component.html","../../../projects/ui-header/src/lib/assistant/components/assistant-panel/ui-assistant-panel.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-panel/ui-assistant-panel.component.html","../../../projects/ui-header/src/lib/assistant/components/assistant-layout/ui-assistant-layout.component.ts","../../../projects/ui-header/src/lib/assistant/components/assistant-layout/ui-assistant-layout.component.html","../../../projects/ui-header/src/lib/assistant/ui-assistant.module.ts","../../../projects/ui-header/src/lib/ui-header.module.ts","../../../projects/ui-header/src/lib/assistant/models/uiny-api.models.ts","../../../projects/ui-header/src/public-api.ts","../../../projects/ui-header/src/uitec-ng-header.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UiHeaderService {\r\n\r\n constructor() { }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { UinyConfig } from './models/uiny.models';\r\n\r\nexport const UINY_CONFIG = new InjectionToken<UinyConfig>('UINY_CONFIG');\r\n\r\nexport const UINY_AVATAR_PADRAO = 'assets/images/uiny/avatar.svg';\r\nexport const UINY_LARGURA_PADRAO = 380;\r\nexport const UINY_LARGURA_MIN = 340;\r\nexport const UINY_LARGURA_MAX = 400;\r\nexport const UINY_LADO_A_LADO_PADRAO = 1200;\r\n\r\n/** Mesmo limite padrão do backend (UINY_MENSAGEM_MAX_CARACTERES no uishop-ia). */\r\nexport const UINY_MENSAGEM_MAX_CARACTERES = 2000;\r\n\r\n/** O backend limita cada mensagem a UINY_TEMPO_MAXIMO_SEGUNDOS (90 s); damos uma folga. */\r\nexport const UINY_TIMEOUT_MENSAGEM_MS = 100000;\r\nexport const UINY_TIMEOUT_ACAO_MS = 60000;\r\nexport const UINY_TIMEOUT_CONSULTA_MS = 20000;\r\n\r\n/**\r\n * Resolve a URL-base: forRoot({ apiUrl }) tem prioridade; depois APP_ENVIRONMENT.domain.uiny.\r\n * Sem barra no final. Retorna null quando não configurada (o recurso fica indisponível).\r\n */\r\nexport function resolverUrlUiny(config: UinyConfig | null, env: any): string | null {\r\n const url = config?.apiUrl || env?.domain?.uiny || null;\r\n if (!url || typeof url !== 'string') return null;\r\n if (!/^https?:\\/\\//i.test(url)) return null;\r\n return url.replace(/\\/+$/, '');\r\n}\r\n\r\nexport function larguraPainel(config: UinyConfig | null): number {\r\n const largura = config?.larguraPainel || UINY_LARGURA_PADRAO;\r\n return Math.min(UINY_LARGURA_MAX, Math.max(UINY_LARGURA_MIN, largura));\r\n}\r\n\r\n/**\r\n * Sugestões do primeiro acesso. A API não expõe o catálogo de ferramentas, então a lista\r\n * acompanha as ferramentas implementadas no uishop-ia (README, \"Ferramentas implementadas\").\r\n * Ao adicionar ou remover ferramentas no backend, atualize aqui.\r\n */\r\nexport const UINY_SUGESTOES: { [sistema: string]: { textos: string[]; alteracoes: boolean } } = {\r\n studio: {\r\n textos: [\r\n 'Quais lojas e temas eu tenho?',\r\n 'Quais são as cores do meu tema?',\r\n 'Troque a cor principal do tema para #e8590c',\r\n ],\r\n // studio_alterar_cor_tema exige confirmação\r\n alteracoes: true,\r\n },\r\n erp: {\r\n textos: [\r\n 'Quais produtos estão sem estoque?',\r\n 'Como foram minhas vendas neste mês?',\r\n ],\r\n alteracoes: false,\r\n },\r\n};\r\n","import { UinyContextoApi, UinySistemaOrigem } from '../models/uiny-api.models';\nimport { UinyContexto } from '../models/uiny.models';\n\n/** Mesma regra de ContextoTela no backend. */\nconst TELA_VALIDA = /^[a-z0-9_\\-\\/.]{1,60}$/i;\nconst CAMPOS_ID: (keyof UinyContexto)[] = ['idLoja', 'idLojaLeiaute', 'idTema', 'idProduto', 'idPedido'];\n\nfunction idPositivo(valor: unknown): number | null {\n return typeof valor === 'number' && Number.isInteger(valor) && valor > 0 && valor <= 2147483647 ? valor : null;\n}\n\n/** Normaliza o contexto informado pelo consumidor: só campos conhecidos e valores válidos. */\nexport function normalizarContexto(contexto: UinyContexto | null | undefined): UinyContexto {\n const resultado: UinyContexto = {};\n if (!contexto) return resultado;\n\n const tela = typeof contexto.tela === 'string' ? contexto.tela.trim() : '';\n if (tela && TELA_VALIDA.test(tela)) resultado.tela = tela;\n\n CAMPOS_ID.forEach(campo => {\n const id = idPositivo(contexto[campo]);\n if (id) (resultado as any)[campo] = id;\n });\n return resultado;\n}\n\n/** Converte para o formato de ContextoTela (campos extras geram 422 no backend). */\nexport function contextoParaApi(sistema: UinySistemaOrigem, contexto: UinyContexto): UinyContextoApi {\n const api: UinyContextoApi = { sistema };\n if (contexto.tela) api.tela = contexto.tela;\n if (contexto.idLoja) api.id_loja = contexto.idLoja;\n if (contexto.idLojaLeiaute) api.id_loja_leiaute = contexto.idLojaLeiaute;\n if (contexto.idTema) api.id_tema = contexto.idTema;\n if (contexto.idProduto) api.id_produto = contexto.idProduto;\n if (contexto.idPedido) api.id_pedido = contexto.idPedido;\n return api;\n}\n\nexport function mesmoContexto(a: UinyContexto, b: UinyContexto): boolean {\n return (a.tela ?? null) === (b.tela ?? null)\n && CAMPOS_ID.every(campo => (a[campo] ?? null) === (b[campo] ?? null));\n}\n","import { UinyAcaoApi, UinyConversaApi, UinyMensagemApi } from '../models/uiny-api.models';\nimport { UinyAcao, UinyConversaResumo, UinyEstadoAcao, UinyEvento, UinyMensagem } from '../models/uiny.models';\n\n/** Situação da API (Constants::ACAO_*) -> estado da tela. */\nconst ESTADOS: { [api: string]: UinyEstadoAcao } = {\n pendente: 'pendente',\n executando: 'executando',\n executada: 'concluida',\n cancelada: 'cancelada',\n expirada: 'expirada',\n invalidada: 'invalidada',\n falhou: 'falha',\n indeterminada: 'indeterminada',\n};\nconst UUID = /^[0-9a-f-]{36}$/i;\nconst MAX_DETALHES = 12;\nconst MAX_VALOR = 200;\n\n/** Datas do backend: \"Y-m-d H:i:s\" (America/Sao_Paulo) ou ISO. */\nexport function lerData(valor: unknown): Date | null {\n if (typeof valor !== 'string' || !valor) return null;\n const iso = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}(:\\d{2})?$/.test(valor) ? valor.replace(' ', 'T') + '-03:00' : valor;\n const data = new Date(iso);\n return isNaN(data.getTime()) ? null : data;\n}\n\nexport function idValido(valor: unknown): string | null {\n return typeof valor === 'string' && UUID.test(valor) ? valor : null;\n}\n\nfunction inteiro(valor: unknown): number | null {\n const n = typeof valor === 'string' && valor.trim() !== '' ? Number(valor) : valor;\n return typeof n === 'number' && Number.isInteger(n) && n > 0 ? n : null;\n}\n\nfunction texto(valor: unknown, max = 20000): string {\n if (typeof valor !== 'string') return '';\n return valor.length > max ? valor.slice(0, max) : valor;\n}\n\nexport function adaptarConversa(api: UinyConversaApi): UinyConversaResumo | null {\n const id = idValido(api?.id);\n if (!id) return null;\n return {\n id,\n titulo: texto(api.titulo, 120) || null,\n sistemaOrigem: api.sistema_origem,\n idLoja: inteiro(api.id_loja),\n atualizadaEm: lerData(api.dt_alteracao),\n };\n}\n\nexport function adaptarMensagem(api: UinyMensagemApi): UinyMensagem | null {\n const id = idValido(api?.id);\n if (!id || (api.papel !== 'usuario' && api.papel !== 'assistente')) return null;\n return {\n id,\n papel: api.papel,\n estado: typeof api.estado === 'string' ? api.estado : null,\n texto: texto(api.texto),\n idAcao: idValido(api.acao_pendente?.id),\n opcoes: adaptarOpcoes(api.apresentacao),\n criadaEm: lerData(api.dt_criacao),\n };\n}\n\n/** Bloco \"opcoes\" do esclarecimento: só strings curtas. */\nfunction adaptarOpcoes(apresentacao: unknown): string[] {\n if (!Array.isArray(apresentacao)) return [];\n const bloco: any = apresentacao.find(b => b && typeof b === 'object' && (b as any).tipo === 'opcoes');\n const opcoes = bloco?.dados?.opcoes;\n if (!Array.isArray(opcoes)) return [];\n return opcoes.filter(o => typeof o === 'string' && o.trim()).map(o => o.trim().slice(0, 80)).slice(0, 6);\n}\n\nexport function adaptarAcao(api: UinyAcaoApi): UinyAcao | null {\n const id = idValido(api?.id);\n if (!id) return null;\n return {\n id,\n ferramenta: texto(api.ferramenta, 80),\n resumo: texto(api.resumo, 2000),\n detalhes: adaptarDetalhes(api.detalhes),\n // situação desconhecida: não afirmamos sucesso nem falha\n estado: ESTADOS[api.situacao] ?? 'indeterminada',\n expiraEm: lerData(api.dt_expiracao),\n };\n}\n\n/**\n * \"detalhes\" vem da PropostaAlteracao da ferramenta. Só aproveitamos pares rótulo/valor\n * com valores primitivos; nada é interpretado como HTML. Identificadores internos\n * (tipo, id_*) não são exibidos.\n */\nexport function adaptarDetalhes(detalhes: unknown): { rotulo: string; valor: string }[] {\n const itens: { rotulo: string; valor: string }[] = [];\n const adicionar = (rotulo: unknown, valor: unknown) => {\n if (itens.length >= MAX_DETALHES) return;\n if (typeof rotulo !== 'string' || !rotulo.trim()) return;\n if (typeof valor !== 'string' && typeof valor !== 'number' && typeof valor !== 'boolean') return;\n const v = typeof valor === 'boolean' ? (valor ? 'Sim' : 'Não') : String(valor);\n if (!v.trim()) return;\n itens.push({ rotulo: humanizar(rotulo).slice(0, 80), valor: v.slice(0, MAX_VALOR) });\n };\n\n if (Array.isArray(detalhes)) {\n detalhes.forEach(item => {\n if (item && typeof item === 'object') adicionar((item as any).rotulo ?? (item as any).campo, (item as any).valor);\n });\n return itens;\n }\n if (!detalhes || typeof detalhes !== 'object') return itens;\n\n const d: any = detalhes;\n if (d.tipo === 'alteracao_cor') {\n // tools/studio/AlterarCorTemaStudio.php\n adicionar('Tema', d.tema);\n adicionar('Loja', d.loja);\n adicionar('Cor', d.rotulo);\n adicionar('Valor atual', d.valor_atual ?? 'sem valor definido');\n adicionar('Novo valor', d.valor_novo);\n return itens;\n }\n Object.keys(d)\n .filter(chave => chave !== 'tipo' && !/^id(_|$)/.test(chave))\n .forEach(chave => adicionar(chave, d[chave]));\n return itens;\n}\n\nfunction humanizar(chave: string): string {\n if (/[A-Z ]/.test(chave)) return chave;\n const t = chave.replace(/[_-]+/g, ' ').trim();\n return t.charAt(0).toUpperCase() + t.slice(1);\n}\n\n/**\n * Converte instrucoes_interface (Constants::INSTRUCOES_INTERFACE) em eventos tipados.\n * Tipos fora da lista e campos inesperados são descartados. Nada é executado nem navegado aqui.\n */\nexport function adaptarInstrucoes(instrucoes: unknown): UinyEvento[] {\n if (!Array.isArray(instrucoes)) return [];\n const eventos: UinyEvento[] = [];\n for (const item of instrucoes.slice(0, 10)) {\n if (!item || typeof item !== 'object') continue;\n const bruto: any = item;\n if (bruto.tipo === 'atualizar_preview_tema') {\n const idLojaLeiaute = inteiro(bruto.id_loja_leiaute);\n if (idLojaLeiaute) eventos.push({ tipo: 'tema_atualizado', idLojaLeiaute });\n }\n }\n return eventos;\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, combineLatest, fromEvent, merge, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, startWith } from 'rxjs/operators';\nimport { AuthAcesso, AuthService, UserAuthDTO } from 'uitec-ng-core';\n\n/**\n * Sessão vista pela Uiny. \"id\" muda a cada nova combinação usuário/empresa/token,\n * inclusive em um novo login do mesmo usuário: tudo que estiver em memória é descartado.\n */\nexport interface UinySessao {\n id: number;\n idUsuario: number;\n idEmpresa: number;\n}\n\n/**\n * Deriva a sessão do AuthService do uitec-ng-core (mesma fonte do JwtInterceptor).\n * Não lê cookies nem localStorage diretamente e não guarda o token.\n */\n@Injectable({ providedIn: 'root' })\nexport class UinySessionService {\n\n /** Chave recusada pela API (401). Fica sem sessão até o AuthService mudar. */\n private readonly chaveRecusada$ = new BehaviorSubject<string | null>(null);\n private sequencia = 0;\n private ultimaChave: string | null = null;\n private ultimaSessao: UinySessao | null = null;\n\n readonly sessao$: Observable<UinySessao | null>;\n readonly online$: Observable<boolean>;\n\n constructor(\n private authService: AuthService,\n private zone: NgZone\n ) {\n const usuario$ = this.authService.currentUser.pipe(startWith(this.authService.currentUserValue));\n const acesso$ = this.authService.currentAccess.pipe(startWith(this.authService.currentAccessValue));\n\n this.sessao$ = combineLatest([usuario$, acesso$, this.chaveRecusada$]).pipe(\n map(([usuario, acesso, recusada]) => {\n const chave = this.chave(usuario, acesso);\n if (!chave || chave === recusada) return null;\n return this.sessaoDaChave(chave, usuario, acesso);\n }),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n this.online$ = typeof window === 'undefined'\n ? of(true)\n : merge(\n fromEvent(window, 'online').pipe(map(() => true)),\n fromEvent(window, 'offline').pipe(map(() => false))\n ).pipe(\n startWith(typeof navigator === 'undefined' ? true : navigator.onLine !== false),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n }\n\n /** Token da sessão atual, lido do AuthService no momento da requisição. */\n token(): string | null {\n const usuario = this.authService.currentUserValue;\n return usuario?.token || null;\n }\n\n /** A API recusou a sessão (401): esconde a Uiny até o usuário autenticar de novo. */\n recusarSessaoAtual(): void {\n const chave = this.chave(this.authService.currentUserValue, this.acessoAtual(this.authService.currentUserValue, this.authService.currentAccessValue));\n if (chave) this.zone.run(() => this.chaveRecusada$.next(chave));\n }\n\n private acessoAtual(usuario: UserAuthDTO | null, acesso: AuthAcesso | null): AuthAcesso | null {\n if (!usuario) return null;\n return acesso || usuario.acessos?.find(a => a.in_atual) || null;\n }\n\n private chave(usuario: UserAuthDTO | null, acesso: AuthAcesso | null): string | null {\n const atual = this.acessoAtual(usuario, acesso);\n const idUsuario = usuario?.usuario?.id_usuario;\n if (!usuario?.token || !idUsuario || !atual?.id_empresa) return null;\n return `${idUsuario}|${atual.id_empresa}|${usuario.token}`;\n }\n\n private sessaoDaChave(chave: string, usuario: UserAuthDTO, acesso: AuthAcesso | null): UinySessao {\n if (chave === this.ultimaChave && this.ultimaSessao) return this.ultimaSessao;\n const atual = this.acessoAtual(usuario, acesso);\n this.ultimaChave = chave;\n this.ultimaSessao = {\n id: ++this.sequencia,\n idUsuario: Number(usuario.usuario.id_usuario),\n idEmpresa: Number(atual.id_empresa),\n };\n return this.ultimaSessao;\n }\n}\n","import { HttpBackend, HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { defer, Observable, throwError, TimeoutError } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\nimport {\n UinyContextoApi,\n UinyCriarConversaResponse,\n UinyHistoricoResponse,\n UinyListaConversasResponse,\n UinyRespostaApi\n} from '../models/uiny-api.models';\nimport { UinyConfig, UinyErro } from '../models/uiny.models';\nimport {\n resolverUrlUiny,\n UINY_CONFIG,\n UINY_TIMEOUT_ACAO_MS,\n UINY_TIMEOUT_CONSULTA_MS,\n UINY_TIMEOUT_MENSAGEM_MS\n} from '../uiny.config';\nimport { idValido } from '../utils/uiny-api.adapter';\nimport { UinySessionService } from './uiny-session.service';\n\nconst MENSAGENS_PADRAO: Record<UinyErro['tipo'], string> = {\n sessao: 'Sua sessão expirou. Entre novamente na Uishop para continuar com a Uiny.',\n rede: 'Não foi possível conectar à Uiny. Verifique sua internet e tente de novo.',\n timeout: 'A Uiny demorou demais para responder. Tente de novo em instantes.',\n conflito: 'Não foi possível concluir agora. Atualize e tente de novo.',\n nao_encontrado: 'Não encontramos o que você pediu. Ele pode ter sido removido.',\n invalido: 'Não foi possível processar esse pedido.',\n limite: 'Você enviou muitas mensagens em pouco tempo. Aguarde um pouco e tente de novo.',\n servidor: 'A Uiny está com instabilidade no momento. Tente de novo em instantes.',\n configuracao: 'A Uiny não está configurada neste sistema.',\n};\n\n/**\n * Cliente HTTP da API da Uiny (uishop-ia, /api/v1).\n *\n * Usa um HttpClient sobre o HttpBackend, sem os interceptors da aplicação:\n * - o ErrorInterceptor do uitec-ng-core troca o erro por uma string (perde status e o corpo,\n * necessários para sessão expirada, ação expirada/invalidada e conflitos) e abre um toast global;\n * - o SpinnerInterceptor cobriria a tela a cada mensagem.\n * O token é o mesmo usado pelo JwtInterceptor (AuthService.currentUserValue.token) e só é\n * anexado a requisições cuja URL começa com a URL-base configurada da Uiny.\n */\n@Injectable({ providedIn: 'root' })\nexport class UinyApiService {\n\n readonly baseUrl: string | null;\n private readonly http: HttpClient;\n\n constructor(\n httpBackend: HttpBackend,\n private session: UinySessionService,\n @Optional() @Inject(UINY_CONFIG) config: UinyConfig | null,\n @Optional() @Inject('APP_ENVIRONMENT') env: any\n ) {\n this.http = new HttpClient(httpBackend);\n this.baseUrl = resolverUrlUiny(config, env);\n }\n\n get configurada(): boolean {\n return !!this.baseUrl;\n }\n\n listarConversas(): Observable<UinyListaConversasResponse> {\n return defer(() => this.request<UinyListaConversasResponse>('GET', '/conversas', null, UINY_TIMEOUT_CONSULTA_MS,\n new HttpParams().set('page', 1).set('per_page', 20)));\n }\n\n criarConversa(contexto: UinyContextoApi): Observable<UinyCriarConversaResponse> {\n return defer(() => this.request<UinyCriarConversaResponse>('POST', '/conversas', { contexto }, UINY_TIMEOUT_CONSULTA_MS));\n }\n\n /** Página mais recente do histórico (até 100 mensagens), em ordem cronológica. */\n historico(idConversa: string): Observable<UinyHistoricoResponse> {\n return defer(() => this.request<UinyHistoricoResponse>('GET', `/conversas/${this.id(idConversa)}`, null, UINY_TIMEOUT_CONSULTA_MS,\n new HttpParams().set('page', 1).set('per_page', 100)));\n }\n\n enviarMensagem(idConversa: string, texto: string, contexto: UinyContextoApi): Observable<UinyRespostaApi> {\n return defer(() => this.request<UinyRespostaApi>('POST', `/conversas/${this.id(idConversa)}/mensagens`, { texto, contexto }, UINY_TIMEOUT_MENSAGEM_MS));\n }\n\n /** Confirma pelo id da ação persistida. Nenhum argumento é enviado. Nunca é repetida automaticamente. */\n confirmarAcao(idAcao: string): Observable<UinyRespostaApi> {\n return defer(() => this.request<UinyRespostaApi>('POST', `/acoes/${this.id(idAcao)}/confirmar`, {}, UINY_TIMEOUT_ACAO_MS));\n }\n\n cancelarAcao(idAcao: string): Observable<UinyRespostaApi> {\n return defer(() => this.request<UinyRespostaApi>('POST', `/acoes/${this.id(idAcao)}/cancelar`, {}, UINY_TIMEOUT_CONSULTA_MS));\n }\n\n private id(valor: string): string {\n const id = idValido(valor);\n if (!id) throw this.erro('invalido', 0);\n return id;\n }\n\n private request<T>(method: 'GET' | 'POST', path: string, body: any, timeoutMs: number, params?: HttpParams): Observable<T> {\n if (!this.baseUrl) {\n return throwError(() => this.erro('configuracao', 0));\n }\n const url = this.baseUrl + path;\n const token = this.session.token();\n if (!token) {\n return throwError(() => this.erro('sessao', 401));\n }\n\n let headers = new HttpHeaders({ 'Accept': 'application/json' });\n // Garantia explícita: o token só segue para a URL-base da Uiny.\n if (url.startsWith(this.baseUrl + '/')) {\n headers = headers.set('Authorization', `Bearer ${token}`);\n }\n if (method === 'POST') {\n headers = headers.set('Content-Type', 'application/json');\n }\n\n return this.http.request<T>(method, url, { body: body ?? undefined, headers, params, responseType: 'json' }).pipe(\n timeout(timeoutMs),\n catchError(err => throwError(() => this.normalizarErro(err)))\n );\n }\n\n private normalizarErro(err: any): UinyErro {\n if (err instanceof TimeoutError) {\n return this.erro('timeout', 0);\n }\n if (!(err instanceof HttpErrorResponse)) {\n return this.erro('servidor', 0);\n }\n\n const corpo: UinyRespostaApi = err.error && typeof err.error === 'object' ? err.error : null;\n const correlacao = this.textoSeguro(corpo?.id_correlacao, 64) || this.textoSeguro(err.headers?.get('X-Correlation-Id'), 64);\n const codigo = this.textoSeguro(corpo?.erro?.codigo, 60);\n const mensagemApi = this.textoSeguro(corpo?.erro?.mensagem, 300);\n\n let tipo: UinyErro['tipo'];\n if (err.status === 0) tipo = 'rede';\n else if (err.status === 401) tipo = 'sessao';\n else if (err.status === 404) tipo = 'nao_encontrado';\n else if (err.status === 409) tipo = 'conflito';\n else if (err.status === 429) tipo = 'limite';\n else if (err.status === 400 || err.status === 403 || err.status === 422) tipo = 'invalido';\n else tipo = 'servidor';\n\n if (tipo === 'sessao') {\n this.session.recusarSessaoAtual();\n }\n\n // 502/503/504 trazem mensagens próprias e seguras (INTEGRACAO_*, PROVEDOR_IA_INDISPONIVEL).\n // 500 (INTERNO) e falhas de rede usam sempre o texto padrão.\n const usarMensagemApi = tipo !== 'rede' && tipo !== 'sessao' && err.status !== 500;\n const mensagem = (usarMensagemApi && mensagemApi) || MENSAGENS_PADRAO[tipo];\n\n return { tipo, status: err.status, codigo, mensagem, correlacao, corpo };\n }\n\n private erro(tipo: UinyErro['tipo'], status: number): UinyErro {\n return { tipo, status, codigo: null, mensagem: MENSAGENS_PADRAO[tipo], correlacao: null };\n }\n\n private textoSeguro(valor: any, max: number): string | null {\n if (typeof valor !== 'string') return null;\n const texto = valor.trim();\n if (!texto || /bearer\\s/i.test(texto)) return null;\n return texto.length > max ? texto.slice(0, max) + '…' : texto;\n }\n}\n","import { Inject, Injectable, isDevMode, Optional } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport { UinyConfig, UinyContexto, UinyEvento } from '../models/uiny.models';\nimport { UINY_CONFIG } from '../uiny.config';\nimport { normalizarContexto, mesmoContexto } from '../utils/uiny-contexto';\nimport { UinyApiService } from './uiny-api.service';\nimport { UinySessionService } from './uiny-session.service';\n\n/**\n * Estado compartilhado da Uiny: quem habilitou (o header), quem hospeda o painel\n * (o ui-assistant-layout), se está aberto, o contexto da tela e os eventos de saída.\n *\n * O painel só fica disponível quando TODAS as condições valem:\n * - algum ui-header está com [showAssistant]=\"true\";\n * - existe um ui-assistant-layout na página para receber o painel;\n * - há sessão autenticada no AuthService (e a API não a recusou);\n * - a URL da API está configurada.\n */\n@Injectable({ providedIn: 'root' })\nexport class UiAssistantService {\n\n private readonly habilitadores$ = new BehaviorSubject<ReadonlySet<object>>(new Set());\n private readonly hosts$ = new BehaviorSubject<number>(0);\n private readonly abertoInterno$ = new BehaviorSubject<boolean>(false);\n private readonly contextoInterno$ = new BehaviorSubject<UinyContexto>({});\n private readonly eventosInternos$ = new Subject<UinyEvento>();\n private gatilho: HTMLElement | null = null;\n private avisouSemHost = false;\n\n /** Header habilitou e há usuário autenticado (controla o botão). */\n readonly disponivel$: Observable<boolean>;\n /** Painel aberto (sempre false quando indisponível). */\n readonly aberto$: Observable<boolean>;\n readonly contexto$: Observable<UinyContexto> = this.contextoInterno$.pipe(distinctUntilChanged(mesmoContexto));\n /** Ações concluídas e instruções de interface vindas da API, já validadas. */\n readonly eventos$: Observable<UinyEvento> = this.eventosInternos$.asObservable();\n\n constructor(\n private session: UinySessionService,\n private api: UinyApiService,\n @Optional() @Inject(UINY_CONFIG) private config: UinyConfig | null\n ) {\n this.disponivel$ = combineLatest([this.habilitadores$, this.hosts$, this.session.sessao$]).pipe(\n map(([habilitadores, hosts, sessao]) => habilitadores.size > 0 && hosts > 0 && !!sessao && this.api.configurada && !!this.config),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n this.aberto$ = combineLatest([this.abertoInterno$, this.disponivel$]).pipe(\n map(([aberto, disponivel]) => aberto && disponivel),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n\n // Indisponível (logout, sessão recusada, header sem a flag): fecha sem devolver foco.\n this.disponivel$.subscribe(disponivel => {\n if (!disponivel && this.abertoInterno$.value) {\n this.gatilho = null;\n this.abertoInterno$.next(false);\n }\n });\n\n combineLatest([this.habilitadores$, this.hosts$]).subscribe(([habilitadores, hosts]) => this.diagnosticar(habilitadores.size > 0, hosts));\n }\n\n get aberto(): boolean {\n return this.abertoInterno$.value;\n }\n\n get sistemaOrigem() {\n return this.config?.sistemaOrigem ?? null;\n }\n\n abrir(gatilho?: HTMLElement | null): void {\n if (gatilho) this.gatilho = gatilho;\n this.abertoInterno$.next(true);\n }\n\n /** Fecha o painel e devolve o foco ao botão que o abriu, se ele ainda existir. */\n fechar(devolverFoco = true): void {\n if (!this.abertoInterno$.value) return;\n this.abertoInterno$.next(false);\n const gatilho = this.gatilho;\n this.gatilho = null;\n if (devolverFoco && gatilho) {\n // espera o layout reexibir a aplicação (no celular ela fica recolhida)\n setTimeout(() => gatilho.isConnected && gatilho.focus());\n }\n }\n\n alternar(gatilho?: HTMLElement | null): void {\n this.abertoInterno$.value ? this.fechar() : this.abrir(gatilho);\n }\n\n /** Substitui o contexto da tela atual. Campos fora do tipo UinyContexto são ignorados. */\n definirContexto(contexto: UinyContexto | null): void {\n this.contextoInterno$.next(normalizarContexto(contexto));\n }\n\n /** Altera apenas os campos informados do contexto. */\n atualizarContexto(parcial: Partial<UinyContexto>): void {\n this.contextoInterno$.next(normalizarContexto({ ...this.contextoInterno$.value, ...parcial }));\n }\n\n get contexto(): UinyContexto {\n return this.contextoInterno$.value;\n }\n\n /** @internal usado pelo ui-header */\n definirHabilitado(origem: object, habilitado: boolean): void {\n const atual = new Set(this.habilitadores$.value);\n habilitado ? atual.add(origem) : atual.delete(origem);\n if (atual.size !== this.habilitadores$.value.size) this.habilitadores$.next(atual);\n }\n\n /** @internal usado pelo ui-assistant-layout */\n registrarHost(): () => void {\n this.hosts$.next(this.hosts$.value + 1);\n let removido = false;\n return () => {\n if (removido) return;\n removido = true;\n this.hosts$.next(Math.max(0, this.hosts$.value - 1));\n };\n }\n\n /** @internal usado pelo serviço de conversa */\n emitir(evento: UinyEvento): void {\n this.eventosInternos$.next(evento);\n }\n\n private diagnosticar(habilitado: boolean, hosts: number): void {\n if (!isDevMode() || !habilitado) return;\n if (!this.config) {\n console.error('[Uiny] showAssistant está ativo, mas UiAssistantModule.forRoot({ sistemaOrigem }) não foi importado.');\n } else if (!this.api.configurada) {\n console.error('[Uiny] URL da API não configurada. Informe APP_ENVIRONMENT.domain.uiny ou forRoot({ apiUrl }).');\n } else if (hosts === 0 && !this.avisouSemHost) {\n // o layout pode ser criado logo depois do header; avisa só se continuar faltando\n this.avisouSemHost = true;\n setTimeout(() => {\n if (this.hosts$.value === 0) {\n console.warn('[Uiny] showAssistant está ativo, mas nenhum <ui-assistant-layout> envolve a aplicação. O botão fica oculto.');\n }\n }, 2000);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { UiAssistantService } from '../../services/ui-assistant.service';\n\n/** Botão que abre/fecha a Uiny. Só aparece quando a assistente está disponível. */\n@Component({\n selector: 'ui-assistant-button',\n templateUrl: './ui-assistant-button.component.html',\n styleUrls: ['./ui-assistant-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UiAssistantButtonComponent {\n constructor(public assistant: UiAssistantService) { }\n}\n","<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","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { AuthAcesso, BaseUrlService, UserAuthDTO, UsuarioMenuDTO } from 'uitec-ng-core';\r\nimport { AuthService } from 'uitec-ng-core';\r\n\r\n@Component({\r\n selector: 'my-account',\r\n templateUrl: './my-account.component.html',\r\n styleUrls: ['./my-account.component.scss']\r\n})\r\nexport class MyAccountComponent implements OnInit {\r\n\r\n @Input() menus: UsuarioMenuDTO[];\r\n\r\n @Output() onNavigate = new EventEmitter<UsuarioMenuDTO>();\r\n\r\n public userObs: UserAuthDTO;\r\n public accessObs: AuthAcesso;\r\n\r\n constructor(\r\n public authService: AuthService,\r\n public urlService: BaseUrlService\r\n ) {\r\n this.userObs = this.authService.currentUserValue;\r\n this.accessObs = this.authService.currentAccessValue;\r\n\r\n this.authService.currentUser.subscribe((data) => {\r\n this.userObs = data;\r\n });\r\n\r\n this.authService.currentAccess.subscribe((data) => {\r\n this.accessObs = data;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n\r\n clickMenu(menu: UsuarioMenuDTO) {\r\n this.onNavigate.emit(menu);\r\n }\r\n}\r\n","<ui-user-top [urlImage]=\"urlService.imagemUsuario({model: userObs?.usuario})\" [usuario]=\"userObs?.usuario\"\r\n [acesso]=\"accessObs\"></ui-user-top>\r\n\r\n<ul class=\"profile-dropdown onhover-show-div\">\r\n <li *ngFor=\"let col of menus\">\r\n <a (click)=\"clickMenu(col)\">\r\n <ui-icon [icon]=\"col.ds_icone\" size=\"20\"></ui-icon>\r\n <span>{{col.no_funcionalidade}}</span>\r\n </a>\r\n </li>\r\n <li>\r\n <a href=\"javascript:void(0)\" (click)=\"logout()\" class=\"text-danger\">\r\n <ui-icon icon=\"login\" size=\"20\"></ui-icon>\r\n <span>Sair</span>\r\n </a>\r\n </li>\r\n</ul>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { AuthAcesso, AuthService, BaseUrlService, IframeService, LayoutService, UserAuthDTO, UsuarioMenuDTO } from 'uitec-ng-core';\r\nimport { UiAssistantService } from './assistant/services/ui-assistant.service';\r\n\r\n@Component({\r\n selector: 'ui-header',\r\n templateUrl: './ui-header.component.html',\r\n styleUrls: ['./ui-header.component.scss']\r\n})\r\nexport class UiHeaderComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() collapseSidebar: boolean;\r\n @Input() fullScreen: boolean;\r\n @Input() headerBackdrop: string;\r\n @Input() isFree: string;\r\n @Input() menus: UsuarioMenuDTO[];\r\n @Input() sidebar: boolean = true;\r\n @Input() redirectHome: boolean = true;\r\n @Input() darkDefault: string = \"light\";\r\n /** Exibe o botão da Uiny (assistente virtual). Exige um <ui-assistant-layout> envolvendo a aplicação. */\r\n @Input() showAssistant: boolean = false;\r\n\r\n @Output() collapseSidebarChange = new EventEmitter<boolean>();\r\n @Output() fullScreenChange = new EventEmitter<boolean>();\r\n @Output() headerBackdropChange = new EventEmitter<boolean>();\r\n @Output() onNavigate = new EventEmitter<UsuarioMenuDTO>();\r\n\r\n @ContentChild('left') left: TemplateRef<any>;\r\n @ContentChild('center') center: TemplateRef<any>;\r\n @ContentChild('right') right: TemplateRef<any>;\r\n\r\n public statuSidebar;\r\n public dark: boolean;\r\n public elem: any;\r\n public userObs: UserAuthDTO;\r\n public accessObs: AuthAcesso;\r\n\r\n constructor(\r\n public authService: AuthService,\r\n public urlService: BaseUrlService,\r\n public layoutService: LayoutService,\r\n public iframeService: IframeService,\r\n public assistantService: UiAssistantService,\r\n @Inject(DOCUMENT) private document: any\r\n ) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['showAssistant']) {\r\n this.assistantService.definirHabilitado(this, !!this.showAssistant);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.assistantService.definirHabilitado(this, false);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.elem = document.documentElement;\r\n\r\n this.userObs = this.authService.currentUserValue;\r\n this.accessObs = this.authService.currentAccessValue;\r\n\r\n this.authService.currentUser.subscribe((data) => {\r\n this.userObs = data;\r\n });\r\n\r\n this.authService.currentAccess.subscribe((data) => {\r\n this.accessObs = data;\r\n });\r\n\r\n this.dark = localStorage.getItem('darkMode') == 'enabled';\r\n setTimeout(() => {\r\n this.layoutService.config.settings.layout_version = this.dark ? \"dark-only\" : this.darkDefault;\r\n });\r\n this.document.body.classList.add(this.dark ? \"dark-only\" : \"light\");\r\n this.document.documentElement.classList.add(this.dark ? \"dark-only\" : \"light\");\r\n\r\n this.addEventListenerOnIframe();\r\n this.buildAmbiente();\r\n }\r\n\r\n layoutToggle() {\r\n this.dark = !this.dark;\r\n localStorage.setItem('darkMode', this.dark ? 'enabled' : 'disabled');\r\n this.layoutService.config.settings.layout_version = this.dark ? \"dark-only\" : \"light\";\r\n const classColor = this.dark ? \"dark-only\" : \"light\";\r\n this.document.body.classList.remove('dark-only');\r\n this.document.body.classList.remove('light');\r\n this.document.body.classList.add(classColor);\r\n this.document.documentElement.classList.remove('dark-only');\r\n this.document.documentElement.classList.remove('light');\r\n this.document.documentElement.classList.add(classColor);\r\n\r\n this.updateIframeTheme();\r\n }\r\n\r\n updateIframeTheme() {\r\n const iframe = document.querySelector('iframe');\r\n if (!iframe || !iframe.contentWindow) return;\r\n\r\n const theme = this.dark ? \"dark-only\" : \"light\";\r\n const iframeSrc = iframe.getAttribute('src');\r\n\r\n let origin = \"*\"; // Usa \"*\" por padrão para evitar erro\r\n\r\n if (iframeSrc) {\r\n try {\r\n const url = new URL(iframeSrc, window.location.origin);\r\n origin = url.origin; // Extrai o domínio corretamente\r\n } catch (error) {\r\n console.error(\"Erro ao extrair o origin do iframe:\", error);\r\n }\r\n }\r\n\r\n iframe.contentWindow.postMessage({ theme }, origin);\r\n }\r\n\r\n addEventListenerOnIframe() {\r\n const frame = document.querySelector('iframe');\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n frame.addEventListener('load', () => {\r\n this.updateIframeTheme();\r\n });\r\n }\r\n\r\n //recebe o valor inicial do collapseSidebar e grava no localstorage\r\n setStatusSideBar() {\r\n this.statuSidebar = this.collapseSidebar;\r\n localStorage.setItem('local', this.statuSidebar);\r\n }\r\n\r\n sidebarToggle() {\r\n this.collapseSidebar = !this.collapseSidebar;\r\n this.setStatusSideBar();\r\n this.collapseSidebarChange.emit(this.collapseSidebar);\r\n }\r\n\r\n home() {\r\n if (!this.redirectHome) return;\r\n\r\n let menu = new UsuarioMenuDTO();\r\n menu.ds_rota = '/';\r\n menu.ds_tipo = 'link';\r\n this.onNavigate.emit(menu);\r\n }\r\n\r\n logout() {\r\n\r\n this.authService.logout();\r\n }\r\n\r\n clickMenu(menu: UsuarioMenuDTO) {\r\n this.onNavigate.emit(menu);\r\n }\r\n\r\n buildAmbiente() {\r\n let textContent = null;\r\n\r\n if (location.host.search('hom-') == 0) {\r\n textContent = 'Homolog';\r\n } else if (location.host.search('localhost') == 0) {\r\n textContent = 'Develop';\r\n }\r\n\r\n if (!textContent) return;\r\n\r\n const div = document.createElement('div');\r\n const span = document.createElement('span');\r\n div.className = `ambiente ambiente-${textContent.toLowerCase()}`;\r\n span.textContent = textContent;\r\n div.appendChild(span);\r\n document.body.appendChild(div);\r\n }\r\n\r\n toggleFullScreen() {\r\n this.fullScreen = !this.fullScreen;\r\n if (this.fullScreen) {\r\n if (this.elem.requestFullscreen) {\r\n this.elem.requestFullscreen();\r\n } else if (this.elem.mozRequestFullScreen) {\r\n /* Firefox */\r\n this.elem.mozRequestFullScreen();\r\n } else if (this.elem.webkitRequestFullscreen) {\r\n /* Chrome, Safari and Opera */\r\n this.elem.webkitRequestFullscreen();\r\n } else if (this.elem.msRequestFullscreen) {\r\n /* IE/Edge */\r\n this.elem.msRequestFullscreen();\r\n }\r\n } else {\r\n if (!this.document.exitFullscreen) {\r\n this.document.exitFullscreen();\r\n } else if (this.document.mozCancelFullScreen) {\r\n /* Firefox */\r\n this.document.mozCancelFullScreen();\r\n } else if (this.document.webkitExitFullscreen) {\r\n /* Chrome, Safari and Opera */\r\n this.document.webkitExitFullscreen();\r\n } else if (this.document.msExitFullscreen) {\r\n /* IE/Edge */\r\n this.document.msExitFullscreen();\r\n }\r\n }\r\n }\r\n}\r\n","<!-- Page Header Backdrop -->\r\n<div *ngIf=\"headerBackdrop\" (click)=\"navService.hideAllPopUps()\" class=\"header-backgrop\"></div>\r\n\r\n<!-- Page Header Start -->\r\n<div class=\"page-header\" [class.close_icon]=\"collapseSidebar\" [class.not-sidebar]=\"!sidebar\">\r\n <div class=\"header-wrapper d-flex m-0 justify-content-between\">\r\n <div class=\"header-logo-wrapper col-auto d-lg-none px-0\">\r\n <div *ngIf=\"sidebar\" class=\"toggle-sidebar\" (click)=\"sidebarToggle()\">\r\n <ui-icon icon=\"menu\" class=\"status_toggle middle\"></ui-icon>\r\n </div>\r\n <a (click)=\"home()\" [class.cursor-pointer]=\"redirectHome\">\r\n <img class=\"img-fluid for-dark image-logo d-md-none\" src=\"assets/images/logo/logo_dark.png\" alt=\"\" />\r\n </a>\r\n </div>\r\n\r\n <div class=\"left-header horizontal-wrapper ps-0\">\r\n <ng-container [ngTemplateOutlet]=\"left\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nav-center\">\r\n <ng-container [ngTemplateOutlet]=\"center\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nav-right p-0\">\r\n <ul class=\"nav-menus\">\r\n <!-- <li class=\"language-nav\" (click)=\"languageToggle()\">\r\n <header-languages></header-languages>\r\n </li> -->\r\n <ng-container *ngIf=\"isFree; then liUpgrade; else liEmpty\"></ng-container>\r\n\r\n <ng-template #liUpgrade>\r\n <li>\r\n <button\r\n class=\"d-flex align-items-center justify-content-center border-0 rounded-pill gap-2 b-color\"\r\n (click)=\"openModal()\">\r\n <img src=\"assets/images/coroa.svg\" class=\"w-auto\" alt=\"icone-coroa\" />\r\n Faça Upgrade\r\n </button>\r\n </li>\r\n </ng-template>\r\n <ng-template #liEmpty>\r\n <li></li>\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"right\"></ng-container>\r\n\r\n <li *ngIf=\"showAssistant && (assistantService.disponivel$ | async)\" class=\"uiny-nav\">\r\n <ui-assistant-button></ui-assistant-button>\r\n </li>\r\n\r\n <li>\r\n <div class=\"mode cursor-pointer\" (click)=\"layoutToggle()\">\r\n <ui-icon pTooltip=\"Ativar Modo Escuro\" tooltipPosition=\"bottom\" icon=\"dark_mode\" size=\"24\"\r\n *ngIf=\"!dark\"></ui-icon>\r\n <ui-icon pTooltip=\"Ativar Modo Claro\" tooltipPosition=\"bottom\" icon=\"sunny\" size=\"24\"\r\n *ngIf=\"dark\"></ui-icon>\r\n\r\n </div>\r\n </li>\r\n\r\n <li class=\"maximize\">\r\n <a pTooltip=\"Maximizar\" tooltipPosition=\"bottom\" class=\"text-dark cursor-pointer\"\r\n href=\"javascript:void(0)\" (click)=\"toggleFullScreen()\">\r\n <ui-icon icon=\"fullscreen\" size=\"24\"></ui-icon>\r\n </a>\r\n </li>\r\n <li class=\"profile-nav onhover-dropdown p-0 ps-2\">\r\n <my-account [menus]=\"menus\" (onNavigate)=\"onNavigate.emit($event)\"></my-account>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Page Header Ends -->\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n Output\r\n} from '@angular/core';\r\nimport { UinyAcao, UinyEstadoAcao } from '../../models/uiny.models';\r\n\r\nconst ROTULOS: Record<UinyEstadoAcao, string> = {\r\n pendente: 'Aguardando sua confirmação',\r\n executando: 'Executando…',\r\n concluida: 'Concluída',\r\n cancelada: 'Cancelada',\r\n expirada: 'Expirada',\r\n invalidada: 'Precisa de nova confirmação',\r\n falha: 'Não concluída',\r\n indeterminada: 'Resultado a verificar',\r\n};\r\n\r\nconst DESCRICOES: Partial<Record<UinyEstadoAcao, string>> = {\r\n concluida: 'A alteração foi aplicada.',\r\n cancelada: 'Nada foi alterado.',\r\n expirada: 'O prazo para confirmar terminou. Nada foi alterado; peça de novo se ainda quiser.',\r\n invalidada: 'Os dados mudaram desde a proposta. Peça a alteração de novo para revisar.',\r\n falha: 'A alteração não foi aplicada.',\r\n};\r\n\r\n/**\r\n * Card de ação pendente. A confirmação só acontece pelo clique em \"Confirmar\":\r\n * o card emite apenas o id da ação persistida, sem argumentos.\r\n */\r\n@Component({\r\n selector: 'ui-assistant-action-card',\r\n templateUrl: './ui-assistant-action-card.component.html',\r\n styleUrls: ['./ui-assistant-action-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class UiAssistantActionCardComponent implements OnChanges, OnDestroy {\r\n\r\n @Input() acao: UinyAcao;\r\n\r\n @Output() confirmar = new EventEmitter<string>();\r\n @Output() cancelar = new EventEmitter<string>();\r\n @Output() verificar = new EventEmitter<string>();\r\n\r\n public agora = Date.now();\r\n private timer: any;\r\n\r\n constructor(private cdr: ChangeDetectorRef, private zone: NgZone) { }\r\n\r\n ngOnChanges(): void {\r\n this.agendar();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearInterval(this.timer);\r\n }\r\n\r\n /** O servidor decide a expiração; aqui só evitamos oferecer um clique que já vai falhar. */\r\n get expiradaLocalmente(): boolean {\r\n return this.acao?.estado === 'pendente' && !!this.acao.expiraEm && this.acao.expiraEm.getTime() <= this.agora;\r\n }\r\n\r\n get estado(): UinyEstadoAcao {\r\n return this.expiradaLocalmente ? 'expirada' : this.acao?.estado;\r\n }\r\n\r\n get rotulo(): string {\r\n return ROTULOS[this.estado] ?? '';\r\n }\r\n\r\n get descricao(): string | null {\r\n return this.acao?.aviso || DESCRICOES[this.estado] || null;\r\n }\r\n\r\n get podeDecidir(): boolean {\r\n return this.estado === 'pendente' && !this.acao.enviando;\r\n }\r\n\r\n get minutosRestantes(): number | null {\r\n if (this.estado !== 'pendente' || !this.acao.expiraEm) return null;\r\n return Math.max(1, Math.ceil((this.acao.expiraEm.getTime() - this.agora) / 60000));\r\n }\r\n\r\n ehCor(valor: string): boolean {\r\n return /^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(valor);\r\n }\r\n\r\n aoConfirmar(): void {\r\n if (this.podeDecidir) this.confirmar.emit(this.acao.id);\r\n }\r\n\r\n aoCancelar(): void {\r\n if (this.podeDecidir) this.cancelar.emit(this.acao.id);\r\n }\r\n\r\n private agendar(): void {\r\n clearInterval(this.timer);\r\n this.agora = Date.now();\r\n if (this.acao?.estado !== 'pendente' || !this.acao.expiraEm) return;\r\n this.zone.runOutsideAngular(() => {\r\n this.timer = setInterval(() => this.zone.run(() => {\r\n this.agora = Date.now();\r\n if (this.expiradaLocalmente) clearInterval(this.timer);\r\n this.cdr.markForCheck();\r\n }), 15000);\r\n });\r\n }\r\n}\r\n","<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","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { UINY_MENSAGEM_MAX_CARACTERES } from '../../uiny.config';\n\nconst ALTURA_MAXIMA = 160;\n\n/** Campo de mensagem: Enter envia, Shift+Enter quebra linha, cresce até ALTURA_MAXIMA. */\n@Component({\n selector: 'ui-assistant-composer',\n templateUrl: './ui-assistant-composer.component.html',\n styleUrls: ['./ui-assistant-composer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UiAssistantComposerComponent {\n\n @Input() desabilitado = false;\n @Input() enviando = false;\n /** Explica por que o envio está bloqueado (sem internet, carregando...). */\n @Input() motivo: string | null = null;\n\n @Output() enviar = new EventEmitter<string>();\n\n @ViewChild('campo', { static: true }) campo: ElementRef<HTMLTextAreaElement>;\n\n public readonly max = UINY_MENSAGEM_MAX_CARACTERES;\n public texto = '';\n\n get vazio(): boolean {\n return !this.texto.trim();\n }\n\n get bloqueado(): boolean {\n return this.desabilitado || this.enviando || this.vazio || this.texto.length > this.max;\n }\n\n get mostrarContador(): boolean {\n return this.texto.length > this.max - 400;\n }\n\n focar(): void {\n this.campo?.nativeElement.focus({ preventScroll: true });\n }\n\n limpar(): void {\n this.texto = '';\n if (this.campo) {\n this.campo.nativeElement.value = '';\n this.ajustarAltura();\n }\n }\n\n aoDigitar(valor: string): void {\n this.texto = valor;\n this.ajustarAltura();\n }\n\n aoTeclar(evento: KeyboardEvent): void {\n if (evento.key !== 'Enter' || evento.shiftKey) return;\n // durante a composição (IME, acentos em alguns teclados) Enter confirma o caractere\n if (evento.isComposing || evento.keyCode === 229) return;\n evento.preventDefault();\n this.submeter();\n }\n\n submeter(): void {\n if (this.bloqueado) return;\n this.enviar.emit(this.texto.trim());\n }\n\n private ajustarAltura(): void {\n const el = this.campo.nativeElement;\n el.style.height = 'auto';\n el.style.height = Math.min(el.scrollHeight, ALTURA_MAXIMA) + 'px';\n el.style.overflowY = el.scrollHeight > ALTURA_MAXIMA ? 'auto' : 'hidden';\n }\n}\n","<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 · 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","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, of, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, finalize, map, switchMap, takeUntil } from 'rxjs/operators';\nimport { UinyAcaoApi, UinyMensagemApi, UinyRespostaApi, UinySistemaOrigem } from '../models/uiny-api.models';\nimport { UinyAcao, UinyConversaResumo, UinyErro, UinyMensagem } from '../models/uiny.models';\nimport { UINY_MENSAGEM_MAX_CARACTERES } from '../uiny.config';\nimport { adaptarAcao, adaptarConversa, adaptarInstrucoes, adaptarMensagem } from '../utils/uiny-api.adapter';\nimport { contextoParaApi } from '../utils/uiny-contexto';\nimport { UiAssistantService } from './ui-assistant.service';\nimport { UinyApiService } from './uiny-api.service';\nimport { UinySessao, UinySessionService } from './uiny-session.service';\n\nexport interface UinyChatEstado {\n conversa: UinyConversaResumo | null;\n mensagens: UinyMensagem[];\n acoes: { [id: string]: UinyAcao };\n enviando: boolean;\n carregandoConversa: boolean;\n erro: UinyErro | null;\n /** Aviso informativo (ex.: troca de loja encerrou a conversa). */\n aviso: string | null;\n conversas: UinyConversaResumo[] | null;\n carregandoConversas: boolean;\n /** Texto da última mensagem que falhou, para \"tentar de novo\". */\n textoComFalha: string | null;\n}\n\nconst ESTADO_INICIAL: UinyChatEstado = {\n conversa: null,\n mensagens: [],\n acoes: {},\n enviando: false,\n carregandoConversa: false,\n erro: null,\n aviso: null,\n conversas: null,\n carregandoConversas: false,\n textoComFalha: null,\n};\n\n/**\n * Estado da conversa, só em memória. Nada vai para localStorage/sessionStorage.\n *\n * Limpeza: qualquer mudança de sessão (logout, outro usuário, outra empresa, novo token,\n * 401 da API) ou a Uiny ficar indisponível cancela as requisições em andamento e\n * descarta todo o estado.\n */\n@Injectable({ providedIn: 'root' })\nexport class UinyChatService implements OnDestroy {\n\n private readonly estado$ = new BehaviorSubject<UinyChatEstado>(ESTADO_INICIAL);\n /** Emite para abortar as requisições da sessão/conversa atual. */\n private readonly cancelarConversa$ = new Subject<void>();\n private readonly cancelarSessao$ = new Subject<void>();\n private readonly anuncios$ = new Subject<string>();\n private readonly subs = new Subscription();\n private sessao: UinySessao | null = null;\n private idLocal = 0;\n /** Loja usada ao criar a conversa atual: o backend restringe a conversa a ela. */\n private escopoLoja: number | null = null;\n\n readonly estado: Observable<UinyChatEstado> = this.estado$.asObservable();\n /** Textos curtos para a região aria-live do painel. */\n readonly anuncios: Observable<string> = this.anuncios$.asObservable();\n\n constructor(\n private api: UinyApiService,\n private session: UinySessionService,\n private assistant: UiAssistantService\n ) {\n this.subs.add(this.session.sessao$.subscribe(sessao => {\n if (sessao?.id !== this.sessao?.id) {\n this.sessao = sessao;\n this.limparTudo();\n }\n }));\n\n this.subs.add(this.assistant.disponivel$.pipe(filter(d => !d)).subscribe(() => this.limparTudo()));\n\n // Trocar de loja muda o escopo da conversa: não reaproveitamos a anterior.\n this.subs.add(this.assistant.contexto$.pipe(\n map(c => c.idLoja ?? null),\n distinctUntilChanged()\n ).subscribe(idLoja => {\n if (this.valor.conversa && this.escopoLoja !== idLoja) {\n this.encerrarConversa('Você mudou de loja. Começamos uma nova conversa para manter os assuntos separados.');\n }\n }));\n }\n\n ngOnDestroy(): void {\n this.cancelarSessao$.next();\n this.subs.unsubscribe();\n }\n\n get valor(): UinyChatEstado {\n return this.estado$.value;\n }\n\n get ocupado(): boolean {\n const v = this.valor;\n return v.enviando || Object.values(v.acoes).some(a => a.enviando || a.estado === 'executando');\n }\n\n enviar(textoBruto: string): boolean {\n const texto = (textoBruto || '').trim();\n const sistema = this.assistant.sistemaOrigem;\n if (!texto || !sistema || !this.sessao || this.valor.enviando) return false;\n if (texto.length > UINY_MENSAGEM_MAX_CARACTERES) {\n this.patch({ erro: this.erroLocal('invalido', `A mensagem pode ter até ${UINY_MENSAGEM_MAX_CARACTERES} caracteres.`) });\n return false;\n }\n\n const contexto = contextoParaApi(sistema, this.assistant.contexto);\n const local: UinyMensagem = {\n id: this.novoIdLocal(), papel: 'usuario', estado: null, texto, idAcao: null, opcoes: [], criadaEm: new Date(),\n };\n this.patch({\n mensagens: [...this.valor.mensagens.filter(m => !m.erro), local],\n enviando: true,\n erro: null,\n aviso: null,\n textoComFalha: null,\n });\n this.anuncios$.next('A Uiny está respondendo…');\n\n const conversa$ = this.valor.conversa\n ? of(this.valor.conversa)\n : this.api.criarConversa(contexto).pipe(map(r => {\n const conversa = adaptarConversa(r?.conversa);\n if (!conversa) throw this.erroLocal('servidor', 'Não foi possível iniciar a conversa.');\n this.escopoLoja = contexto.id_loja ?? null;\n this.patch({ conversa, conversas: null });\n return conversa;\n }));\n\n conversa$.pipe(\n switchMap(conversa => this.api.enviarMensagem(conversa.id, texto, contexto)),\n takeUntil(this.cancelarConversa$),\n finalize(() => this.valor.enviando && this.patch({ enviando: false }))\n ).subscribe({\n next: resposta => {\n this.aplicarResposta(resposta, true);\n this.patch({ enviando: false });\n this.anuncios$.next(resposta?.mensagem ? 'Nova resposta da Uiny.' : '');\n },\n error: err => {\n const erro = this.normalizar(err);\n // erros da API podem trazer a mensagem da Uiny (ex.: falha do provedor registrada)\n if (erro.corpo?.mensagem) this.aplicarResposta(erro.corpo, false);\n this.patch({\n mensagens: this.valor.mensagens.map(m => m.id === local.id ? { ...m, erro: true } : m),\n enviando: false,\n erro,\n textoComFalha: erro.tipo === 'sessao' ? null : texto,\n });\n this.anuncios$.next(erro.mensagem);\n },\n });\n return true;\n }\n\n /** Começa do zero. Bloqueado enquanto há envio ou ação em execução. */\n novaConversa(): boolean {\n if (this.ocupado) return false;\n this.encerrarConversa(null);\n return true;\n }\n\n listarConversas(): void {\n if (!this.sessao || this.valor.carregandoConversas) return;\n this.patch({ carregandoConversas: true, erro: null });\n this.api.listarConversas().pipe(\n takeUntil(this.cancelarSessao$),\n finalize(() => this.patch({ carregandoConversas: false }))\n ).subscribe({\n next: r => this.patch({\n conversas: (Array.isArray(r?.data) ? r.data : []).map(adaptarConversa).filter(c => !!c && this.doContextoAtual(c)),\n }),\n error: err => this.patch({ erro: this.normalizar(err), conversas: [] }),\n });\n }\n\n abrirConversa(id: string): void {\n const resumo = this.valor.conversas?.find(c => c.id === id);\n if (!resumo || this.ocupado || !this.doContextoAtual(resumo)) return;\n this.encerrarConversa(null);\n this.patch({ carregandoConversa: true });\n this.api.historico(id).pipe(\n takeUntil(this.cancelarConversa$),\n finalize(() => this.patch({ carregandoConversa: false }))\n ).subscribe({\n next: r => {\n const conversa = adaptarConversa(r?.conversa) ?? resumo;\n if (!this.doContextoAtual(conversa)) {\n this.patch({ aviso: 'Essa conversa pertence a outro contexto e não pode ser continuada aqui.' });\n return;\n }\n this.escopoLoja = conversa.idLoja;\n const mensagensApi: UinyMensagemApi[] = Array.isArray(r?.data) ? r.data : [];\n this.patch({\n conversa,\n mensagens: mensagensApi.map(adaptarMensagem).filter(Boolean),\n acoes: this.mesclarAcoes(mensagensApi.map(m => m?.acao_pendente)),\n });\n // Histórico não reemite instruções de interface: elas já foram tratadas quando chegaram.\n },\n error: err => this.patch({ erro: this.normalizar(err) }),\n });\n }\n\n /**\n * Confirma pelo id da ação persistida no backend. Só é chamado pelo clique no card;\n * nenhum texto da conversa dispara isto. Nunca há repetição automática.\n */\n confirmar(idAcao: string): void {\n const acao = this.valor.acoes[idAcao];\n if (!acao || acao.enviando || acao.estado !== 'pendente') return;\n if (acao.expiraEm && acao.expiraEm.getTime() <= Date.now()) {\n this.atualizarAcao(idAcao, { estado: 'expirada', aviso: 'O prazo para confirmar terminou. Peça a alteração de novo.' });\n return;\n }\n this.atualizarAcao(idAcao, { enviando: true, estado: 'executando', aviso: null });\n this.anuncios$.next('Executando a alteração…');\n\n this.api.confirmarAcao(idAcao).pipe(takeUntil(this.cancelarSessao$)).subscribe({\n next: resposta => this.concluirDecisao(idAcao, resposta, null, true),\n error: err => {\n const erro = this.normalizar(err);\n if (erro.corpo?.acao_pendente || erro.corpo?.acao_anterior) {\n // 409 (expirada, invalidada com nova proposta, em execução) ou 502/504: o corpo traz o estado real\n this.concluirDecisao(idAcao, erro.corpo, erro, true);\n } else if (erro.tipo === 'timeout' || erro.tipo === 'rede' || erro.tipo === 'servidor') {\n // A operação pode ter sido executada. Não repetimos: o usuário verifica o estado.\n this.atualizarAcao(idAcao, {\n enviando: false,\n estado: 'indeterminada',\n aviso: 'Não recebemos a resposta da confirmação. Verifique o resultado antes de pedir de novo.',\n });\n } else if (erro.tipo === 'conflito' || erro.tipo === 'nao_encontrado') {\n this.atualizarAcao(idAcao, { enviando: false, estado: 'indeterminada', aviso: erro.mensagem });\n this.verificarAcao(idAcao);\n } else {\n this.atualizarAcao(idAcao, { enviando: false, estado: 'pendente', aviso: erro.mensagem });\n }\n this.anuncios$.next(erro.mensagem);\n },\n });\n }\n\n cancelar(idAcao: string): void {\n const acao = this.valor.acoes[idAcao];\n if (!acao || acao.enviando || acao.estado !== 'pendente') return;\n this.atualizarAcao(idAcao, { enviando: true, aviso: null });\n this.api.cancelarAcao(idAcao).pipe(takeUntil(this.cancelarSessao$)).subscribe({\n next: resposta => this.concluirDecisao(idAcao, resposta, null, false),\n error: err => {\n const erro = this.normalizar(err);\n if (erro.corpo?.acao_pendente) {\n this.concluirDecisao(idAcao, erro.corpo, erro, false);\n } else {\n this.atualizarAcao(idAcao, { enviando: false, aviso: erro.mensagem });\n }\n },\n });\n }\n\n /** Consulta a situação real da ação relendo o histórico da conversa. */\n verificarAcao(idAcao: string): void {\n const acao = this.valor.acoes[idAcao];\n const idConversa = this.valor.conversa?.id;\n if (!acao || !idConversa) return;\n this.atualizarAcao(idAcao, { enviando: true });\n this.api.historico(idConversa).pipe(takeUntil(this.cancelarSessao$)).subscribe({\n next: r => {\n const mensagens: UinyMensagemApi[] = Array.isArray(r?.data) ? r.data : [];\n const atual = mensagens.map(m => adaptarAcao(m?.acao_pendente)).find(a => a?.id === idAcao);\n if (atual) {\n this.atualizarAcao(idAcao, { ...atual, enviando: false, aviso: atual.estado === 'indeterminada' ? 'Confira no sistema se a alteração foi aplicada.' : null });\n this.patch({ mensagens: this.mesclar(this.valor.mensagens, mensagens.map(adaptarMensagem).filter(Boolean)) });\n } else {\n this.atualizarAcao(idAcao, {\n enviando: false,\n aviso: 'Não foi possível consultar o estado desta ação. Confira na tela correspondente se a alteração foi aplicada.',\n });\n }\n },\n error: err => this.atualizarAcao(idAcao, { enviando: false, aviso: this.normalizar(err).mensagem }),\n });\n }\n\n limparErro(): void {\n this.patch({ erro: null, aviso: null });\n }\n\n /* ---------------- internos ---------------- */\n\n /** Aplica uma resposta de confirmar/cancelar (de sucesso ou de erro com corpo). */\n private concluirDecisao(idAcao: string, resposta: UinyRespostaApi, erro: UinyErro | null, confirmacao: boolean): void {\n const anterior = this.valor.acoes[idAcao];\n this.aplicarResposta(resposta, !erro);\n\n const atual = this.valor.acoes[idAcao];\n // sem a ação na resposta, o resultado é desconhecido\n if (!atual || atual === anterior) {\n this.atualizarAcao(idAcao, {\n enviando: false,\n estado: confirmacao ? 'indeterminada' : anterior?.estado,\n aviso: erro?.mensagem ?? 'A API não informou o resultado. Confira se a alteração foi aplicada.',\n });\n } else {\n this.atualizarAcao(idAcao, { enviando: false, aviso: erro?.mensagem ?? null });\n }\n\n const final = this.valor.acoes[idAcao];\n // Sucesso só quando a API devolve a ação como executada.\n if (confirmacao && final?.estado === 'concluida') {\n this.assistant.emitir({ tipo: 'acao_concluida', idAcao, ferramenta: final.ferramenta });\n this.anuncios$.next('Alteração concluída.');\n } else if (final?.estado === 'falha') {\n this.anuncios$.next('A alteração não foi concluída.');\n }\n }\n\n /** Resposta padrão (ApresentadorConversa::resposta): conversa, mensagem e ação pendente. */\n private aplicarResposta(resposta: UinyRespostaApi, emitirInstrucoes: boolean): void {\n if (!resposta || typeof resposta !== 'object') return;\n const mensagem = adaptarMensagem(resposta.mensagem);\n this.patch({\n conversa: adaptarConversa(resposta.conversa) ?? this.valor.conversa,\n mensagens: mensagem ? this.mesclar(this.valor.mensagens, [mensagem]) : this.valor.mensagens,\n acoes: this.mesclarAcoes([resposta.acao_anterior, resposta.mensagem?.acao_pendente, resposta.acao_pendente]),\n });\n if (emitirInstrucoes && resposta.mensagem?.papel === 'assistente') {\n adaptarInstrucoes(resposta.mensagem.instrucoes_interface).forEach(e => this.assistant.emitir(e));\n }\n }\n\n private mesclar(atuais: UinyMensagem[], novas: UinyMensagem[]): UinyMensagem[] {\n const ids = new Set(atuais.map(m => m.id));\n return [...atuais, ...novas.filter(m => !ids.has(m.id))];\n }\n\n private mesclarAcoes(novas: UinyAcaoApi[]): { [id: string]: UinyAcao } {\n const acoes = { ...this.valor.acoes };\n novas.map(adaptarAcao).filter(Boolean).forEach(a => {\n // uma ação já resolvida localmente não volta a \"pendente\" por uma resposta antiga\n const anterior = acoes[a.id];\n acoes[a.id] = anterior && anterior.estado !== 'pendente' && anterior.estado !== 'executando' && a.estado === 'pendente'\n ? anterior\n : { ...a, enviando: anterior?.enviando, aviso: anterior?.aviso };\n });\n return acoes;\n }\n\n private atualizarAcao(id: string, parcial: Partial<UinyAcao>): void {\n const atual = this.valor.acoes[id];\n if (!atual) return;\n this.patch({ acoes: { ...this.valor.acoes, [id]: { ...atual, ...parcial, id } } });\n }\n\n private doContextoAtual(conversa: UinyConversaResumo): boolean {\n const sistema: UinySistemaOrigem | null = this.assistant.sistemaOrigem;\n const idLoja = this.assistant.contexto.idLoja ?? null;\n return conversa.sistemaOrigem === sistema && (conversa.idLoja ?? null) === idLoja;\n }\n\n private encerrarConversa(aviso: string | null): void {\n this.cancelarConversa$.next();\n this.escopoLoja = null;\n this.patch({\n conversa: null,\n mensagens: [],\n acoes: {},\n enviando: false,\n carregandoConversa: false,\n erro: null,\n aviso,\n conversas: null,\n textoComFalha: null,\n });\n }\n\n private limparTudo(): void {\n this.cancelarConversa$.next();\n this.cancelarSessao$.next();\n this.escopoLoja = null;\n this.estado$.next(ESTADO_INICIAL);\n }\n\n private patch(parcial: Partial<UinyChatEstado>): void {\n this.estado$.next({ ...this.estado$.value, ...parcial });\n }\n\n private novoIdLocal(): string {\n return 'local-' + (++this.idLocal);\n }\n\n private normalizar(err: any): UinyErro {\n if (err && typeof err === 'object' && typeof err.tipo === 'string' && typeof err.mensagem === 'string') return err;\n return this.erroLocal('servidor', 'Algo deu errado ao falar com a Uiny. Tente de novo.');\n }\n\n private erroLocal(tipo: UinyErro['tipo'], mensagem: string): UinyErro {\n return { tipo, status: 0, codigo: null, mensagem, correlacao: null };\n }\n}\n","/*\n * Subconjunto seguro de Markdown para as respostas da Uiny.\n *\n * O texto vira uma árvore de tokens renderizada pelo template com interpolação\n * ({{ }}), sem innerHTML e sem bypass do sanitizador do Angular. HTML presente no\n * texto aparece literalmente. Links só com http, https ou mailto.\n *\n * Suporta: parágrafos, quebras de linha, listas (- * 1.), títulos (#, ##, ###),\n * blocos de código (```), `código`, **negrito**, *itálico*, [texto](url) e URLs soltas.\n */\n\nexport type UinyInline =\n | { t: 'text'; v: string }\n | { t: 'strong'; v: string }\n | { t: 'em'; v: string }\n | { t: 'code'; v: string }\n | { t: 'link'; v: string; href: string };\n\nexport type UinyBloco =\n | { t: 'p'; linhas: UinyInline[][] }\n | { t: 'h'; inlines: UinyInline[] }\n | { t: 'ul'; itens: UinyInline[][] }\n | { t: 'ol'; itens: UinyInline[][]; inicio: number }\n | { t: 'code'; v: string };\n\nconst PROTOCOLOS = ['http:', 'https:', 'mailto:'];\n\nexport function urlPermitida(url: string): string | null {\n const bruto = (url || '').trim();\n if (!bruto || bruto.length > 2000) return null;\n try {\n const u = new URL(bruto);\n return PROTOCOLOS.includes(u.protocol) ? u.href : null;\n } catch {\n return null;\n }\n}\n\nconst INLINE = /(`[^`\\n]+`)|(\\*\\*[^*\\n]+\\*\\*)|(\\[[^\\]\\n]{1,300}\\]\\([^()\\s]{1,2000}\\))|(\\bhttps?:\\/\\/[^\\s<>()]*[^\\s<>().,;:!?'\"])|(\\*[^*\\s][^*\\n]*\\*)/g;\n\nexport function parseInline(texto: string): UinyInline[] {\n const saida: UinyInline[] = [];\n let ultimo = 0;\n INLINE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = INLINE.exec(texto)) !== null) {\n if (m.index > ultimo) saida.push({ t: 'text', v: texto.slice(ultimo, m.index) });\n const token = m[0];\n if (m[1]) {\n saida.push({ t: 'code', v: token.slice(1, -1) });\n } else if (m[2]) {\n saida.push({ t: 'strong', v: token.slice(2, -2) });\n } else if (m[3]) {\n const fim = token.indexOf('](');\n const rotulo = token.slice(1, fim);\n const href = urlPermitida(token.slice(fim + 2, -1));\n saida.push(href ? { t: 'link', v: rotulo, href } : { t: 'text', v: rotulo });\n } else if (m[4]) {\n const href = urlPermitida(token);\n saida.push(href ? { t: 'link', v: token, href } : { t: 'text', v: token });\n } else {\n saida.push({ t: 'em', v: token.slice(1, -1) });\n }\n ultimo = m.index + token.length;\n }\n if (ultimo < texto.length) saida.push({ t: 'text', v: texto.slice(ultimo) });\n return saida;\n}\n\nexport function parseMarkdown(texto: string): UinyBloco[] {\n const linhas = (texto || '').replace(/\\r\\n?/g, '\\n').split('\\n');\n const blocos: UinyBloco[] = [];\n let paragrafo: UinyInline[][] = [];\n let lista: { t: 'ul' | 'ol'; itens: UinyInline[][]; inicio: number } | null = null;\n\n const fecharParagrafo = () => {\n if (paragrafo.length) blocos.push({ t: 'p', linhas: paragrafo });\n paragrafo = [];\n };\n const fecharLista = () => {\n if (lista) blocos.push(lista.t === 'ul' ? { t: 'ul', itens: lista.itens } : { t: 'ol', itens: lista.itens, inicio: lista.inicio });\n lista = null;\n };\n\n for (let i = 0; i < linhas.length; i++) {\n const linha = linhas[i];\n\n if (/^\\s*```/.test(linha)) {\n fecharParagrafo();\n fecharLista();\n const codigo: string[] = [];\n i++;\n while (i < linhas.length && !/^\\s*```/.test(linhas[i])) codigo.push(linhas[i++]);\n blocos.push({ t: 'code', v: codigo.join('\\n') });\n continue;\n }\n\n if (!linha.trim()) {\n fecharParagrafo();\n fecharLista();\n continue;\n }\n\n const titulo = /^\\s{0,3}#{1,3}\\s+(.*)$/.exec(linha);\n if (titulo) {\n fecharParagrafo();\n fecharLista();\n blocos.push({ t: 'h', inlines: parseInline(titulo[1]) });\n continue;\n }\n\n const ul = /^\\s*[-*•]\\s+(.*)$/.exec(linha);\n const ol = /^\\s*(\\d{1,3})[.)]\\s+(.*)$/.exec(linha);\n if (ul || ol) {\n fecharParagrafo();\n const tipo = ul ? 'ul' : 'ol';\n if (!lista || lista.t !== tipo) {\n fecharLista();\n lista = { t: tipo, itens: [], inicio: ol ? Number(ol[1]) : 1 };\n }\n lista.itens.push(parseInline(ul ? ul[1] : ol[2]));\n continue;\n }\n\n if (lista && /^\\s{2,}\\S/.test(linha)) {\n // continuação do último item da lista\n lista.itens[lista.itens.length - 1].push({ t: 'text', v: ' ' }, ...parseInline(linha.trim()));\n continue;\n }\n\n fecharLista();\n paragrafo.push(parseInline(linha));\n }\n fecharParagrafo();\n fecharLista();\n return blocos;\n}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { parseMarkdown, UinyBloco } from '../../utils/uiny-markdown';\n\n/**\n * Exibe o texto da Uiny com um subconjunto de Markdown. Tudo é renderizado por\n * interpolação: HTML vindo da API aparece como texto, nunca é interpretado.\n */\n@Component({\n selector: 'ui-assistant-text',\n templateUrl: './ui-assistant-text.component.html',\n styleUrls: ['./ui-assistant-text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UiAssistantTextComponent implements OnChanges {\n @Input() texto = '';\n\n public blocos: UinyBloco[] = [];\n\n ngOnChanges(): void {\n this.blocos = parseMarkdown(this.texto || '');\n }\n}\n","<ng-template #inlines let-lista>\n <ng-container *ngFor=\"let i of lista\" [ngSwitch]=\"i.t\">\n <strong *ngSwitchCase=\"'strong'\">{{ i.v }}</strong>\n <em *ngSwitchCase=\"'em'\">{{ i.v }}</em>\n <code *ngSwitchCase=\"'code'\">{{ i.v }}</code>\n <a *ngSwitchCase=\"'link'\" [href]=\"i.href\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">{{ i.v }}</a>\n <ng-container *ngSwitchDefault>{{ i.v }}</ng-container>\n </ng-container>\n</ng-template>\n\n<ng-container *ngFor=\"let b of blocos\" [ngSwitch]=\"b.t\">\n <p *ngSwitchCase=\"'p'\">\n <ng-container *ngFor=\"let linha of $any(b).linhas; let ultima = last\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: linha }\"></ng-container><br *ngIf=\"!ultima\">\n </ng-container>\n </p>\n <p *ngSwitchCase=\"'h'\" class=\"uiny-texto__titulo\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: $any(b).inlines }\"></ng-container>\n </p>\n <ul *ngSwitchCase=\"'ul'\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ul>\n <ol *ngSwitchCase=\"'ol'\" [attr.start]=\"$any(b).inicio !== 1 ? $any(b).inicio : null\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ol>\n <pre *ngSwitchCase=\"'code'\"><code>{{ $any(b).v }}</code></pre>\n</ng-container>\n","import {\r\n AfterViewChecked,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { UinyAcao, UinyMensagem } from '../../models/uiny.models';\r\n\r\n/** Distância do fim (px) até onde ainda consideramos que o usuário está \"no fim\". */\r\nconst PERTO_DO_FIM = 96;\r\n\r\n@Component({\r\n selector: 'ui-assistant-messages',\r\n templateUrl: './ui-assistant-messages.component.html',\r\n styleUrls: ['./ui-assistant-messages.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class UiAssistantMessagesComponent implements OnChanges, AfterViewChecked, OnDestroy {\r\n\r\n @Input() mensagens: UinyMensagem[] = [];\r\n @Input() acoes: { [id: string]: UinyAcao } = {};\r\n @Input() enviando = false;\r\n @Input() carregando = false;\r\n @Input() sugestoes: string[] = [];\r\n @Input() capacidades: string[] = [];\r\n @Input() temAlteracoes = false;\r\n @Input() podeEnviar = true;\r\n\r\n @Output() sugestao = new EventEmitter<string>();\r\n @Output() confirmar = new EventEmitter<string>();\r\n @Output() cancelar = new EventEmitter<string>();\r\n @Output() verificar = new EventEmitter<string>();\r\n\r\n @ViewChild('area', { static: true }) area: ElementRef<HTMLElement>;\r\n\r\n public novas = false;\r\n private pertoDoFim = true;\r\n private rolarPendente = true;\r\n private removerScroll: () => void;\r\n\r\n constructor(private cdr: ChangeDetectorRef, zone: NgZone) {\r\n // o listener roda fora da zona: só reentra quando o indicador muda\r\n zone.runOutsideAngular(() => setTimeout(() => {\r\n const el = this.area?.nativeElement;\r\n if (!el) return;\r\n const aoRolar = () => {\r\n const perto = this.calcularPertoDoFim();\r\n if (perto === this.pertoDoFim) return;\r\n this.pertoDoFim = perto;\r\n if (perto && this.novas) zone.run(() => {\r\n this.novas = false;\r\n this.cdr.markForCheck();\r\n });\r\n };\r\n el.addEventListener('scroll', aoRolar, { passive: true });\r\n this.removerScroll = () => el.removeEventListener('scroll', aoRolar);\r\n }));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const mudou = changes['mensagens'] || changes['enviando'] || changes['acoes'];\r\n if (!mudou) return;\r\n\r\n const mensagensMudaram = !!changes['mensagens'];\r\n const anterior: UinyMensagem[] = changes['mensagens']?.previousValue || [];\r\n const atual = this.mensagens || [];\r\n const conversaTrocada = mensagensMudaram && (!anterior.length || !atual.length || anterior[0]?.id !== atual[0]?.id);\r\n const ultima = atual[atual.length - 1];\r\n // quem acabou de enviar quer ver a própria mensagem\r\n const ultimaDoUsuario = mensagensMudaram && ultima?.papel === 'usuario' && ultima.id.startsWith('local-');\r\n\r\n if (conversaTrocada || ultimaDoUsuario || this.pertoDoFim) {\r\n this.rolarPendente = true;\r\n } else if (mensagensMudaram && atual.length > anterior.length) {\r\n // o usuário está lendo mensagens antigas: preserva a posição\r\n this.novas = true;\r\n }\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n if (!this.rolarPendente) return;\r\n this.rolarPendente = false;\r\n this.irParaOFim(false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removerScroll?.();\r\n }\r\n\r\n irParaOFim(suave = true): void {\r\n const el = this.area?.nativeElement;\r\n if (!el) return;\r\n const reduzir = typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\r\n if (suave && !reduzir && el.scrollTo) {\r\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\r\n } else {\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n this.pertoDoFim = true;\r\n if (this.novas) {\r\n this.novas = false;\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n acaoDa(mensagem: UinyMensagem): UinyAcao | null {\r\n return mensagem.idAcao ? this.acoes?.[mensagem.idAcao] ?? null : null;\r\n }\r\n\r\n /** Ações devolvidas pela API sem mensagem que as referencie: aparecem no fim. */\r\n get acoesSemMensagem(): UinyAcao[] {\r\n const referenciadas = new Set((this.mensagens || []).map(m => m.idAcao).filter(Boolean));\r\n return Object.values(this.acoes || {}).filter(a => !referenciadas.has(a.id));\r\n }\r\n\r\n trackMensagem(_: number, m: UinyMensagem) {\r\n return m.id;\r\n }\r\n\r\n trackAcao(_: number, a: UinyAcao) {\r\n return a.id;\r\n }\r\n\r\n private calcularPertoDoFim(): boolean {\r\n const el = this.area.nativeElement;\r\n return el.scrollHeight - el.scrollTop - el.clientHeight <= PERTO_DO_FIM;\r\n }\r\n}\r\n","<div #area class=\"uiny-msgs\" role=\"log\" aria-live=\"off\" aria-label=\"Mensagens da conversa com a Uiny\" tabindex=\"0\">\r\n\r\n <div *ngIf=\"carregando\" class=\"uiny-msgs__carregando\" role=\"status\">\r\n <span class=\"uiny-spinner\" aria-hidden=\"true\"></span> Carregando a conversa…\r\n </div>\r\n\r\n <div *ngIf=\"!carregando && !mensagens?.length\" class=\"uiny-boas-vindas\">\r\n <p class=\"uiny-boas-vindas__titulo\">Olá! Eu sou a Uiny.</p>\r\n <p class=\"uiny-boas-vindas__texto\">Sou a assistente virtual da Uishop. Conte o que você precisa e eu ajudo por aqui.</p>\r\n <p *ngIf=\"temAlteracoes\" class=\"uiny-boas-vindas__nota\">\r\n <ui-icon icon=\"verified_user\" size=\"16\"></ui-icon>\r\n <span>Antes de alterar qualquer informação, eu mostro o que vai mudar e só sigo com a sua confirmação.</span>\r\n </p>\r\n\r\n <div *ngIf=\"sugestoes?.length\" class=\"uiny-sugestoes\" aria-label=\"Sugestões\">\r\n <button *ngFor=\"let s of sugestoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar\" (click)=\"sugestao.emit(s)\">\r\n {{ s }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"capacidades?.length\" class=\"uiny-capacidades\">\r\n <p class=\"uiny-capacidades__titulo\">Posso ajudar com:</p>\r\n <ul>\r\n <li *ngFor=\"let c of capacidades\">{{ c }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div *ngFor=\"let m of mensagens; trackBy: trackMensagem\" class=\"uiny-msg\"\r\n [class.uiny-msg--usuario]=\"m.papel === 'usuario'\"\r\n [class.uiny-msg--assistente]=\"m.papel !== 'usuario'\"\r\n [class.uiny-msg--falha]=\"m.erro\">\r\n <span class=\"uiny-sr\">{{ m.papel === 'usuario' ? 'Você:' : 'Uiny:' }}</span>\r\n <div class=\"uiny-msg__balao\">\r\n <p *ngIf=\"m.papel === 'usuario'\" class=\"uiny-msg__simples\">{{ m.texto }}</p>\r\n <ui-assistant-text *ngIf=\"m.papel !== 'usuario'\" [texto]=\"m.texto\"></ui-assistant-text>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngIf=\"acaoDa(m) as acao\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <!-- esclarecimento: opções só na última mensagem, enviadas como texto -->\r\n <div *ngIf=\"m.opcoes?.length && m === mensagens[mensagens.length - 1]\" class=\"uiny-sugestoes uiny-msg__opcoes\" aria-label=\"Opções de resposta\">\r\n <button *ngFor=\"let o of m.opcoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar || enviando\" (click)=\"sugestao.emit(o)\">\r\n {{ o }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"uiny-msg__meta\">\r\n <span *ngIf=\"m.erro\" class=\"uiny-msg__nao-enviada\">\r\n <ui-icon icon=\"error\" size=\"14\"></ui-icon> Não enviada\r\n </span>\r\n <time *ngIf=\"m.criadaEm && !m.erro\" [attr.datetime]=\"m.criadaEm.toISOString()\">{{ m.criadaEm | date:'HH:mm' }}</time>\r\n </div>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngFor=\"let acao of acoesSemMensagem; trackBy: trackAcao\" class=\"uiny-msgs__acao-solta\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <div *ngIf=\"enviando\" class=\"uiny-digitando\">\r\n <span class=\"uiny-digitando__pontos\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\r\n <span class=\"uiny-digitando__texto\">A Uiny está pensando…</span>\r\n </div>\r\n</div>\r\n\r\n<button *ngIf=\"novas\" type=\"button\" class=\"uiny-novas\" (click)=\"irParaOFim()\">\r\n <ui-icon icon=\"arrow_downward\" size=\"16\"></ui-icon> Novas mensagens\r\n</button>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { UinyAcao, UinyConfig, UinyMensagem } from '../../models/uiny.models';\r\nimport { UINY_AVATAR_PADRAO, UINY_CONFIG, UINY_SUGESTOES } from '../../uiny.config';\r\nimport { UiAssistantService } from '../../services/ui-assistant.service';\r\nimport { UinyChatEstado, UinyChatService } from '../../services/uiny-chat.service';\r\nimport { UinySessionService } from '../../services/uiny-session.service';\r\nimport { UiAssistantComposerComponent } from '../assistant-composer/ui-assistant-composer.component';\r\n\r\n@Component({\r\n selector: 'ui-assistant-panel',\r\n templateUrl: './ui-assistant-panel.component.html',\r\n styleUrls: ['./ui-assistant-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class UiAssistantPanelComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n /** Painel em largura total (celular/tablet): o botão de fechar vira \"Voltar\". */\r\n @Input() empilhado = false;\r\n\r\n @ViewChild(UiAssistantComposerComponent) composer: UiAssistantComposerComponent;\r\n\r\n public estado: UinyChatEstado;\r\n public online = true;\r\n public anuncio = '';\r\n public vendoHistorico = false;\r\n public mensagens: UinyMensagem[] = [];\r\n public acoes: { [id: string]: UinyAcao } = {};\r\n public sugestoes: string[] = [];\r\n public capacidades: string[] = [];\r\n public temAlteracoes = false;\r\n public readonly avatarUrl: string;\r\n /** A imagem não carregou: usa o ícone padrão. */\r\n public avatarFalhou = false;\r\n\r\n private subs = new Subscription();\r\n private timerAnuncio: any;\r\n\r\n constructor(\r\n public chat: UinyChatService,\r\n public assistant: UiAssistantService,\r\n private session: UinySessionService,\r\n private cdr: ChangeDetectorRef,\r\n @Optional() @Inject(UINY_CONFIG) config: UinyConfig | null\r\n ) {\r\n this.avatarUrl = config?.avatarUrl || UINY_AVATAR_PADRAO;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subs.add(this.chat.estado.subscribe(estado => {\r\n this.estado = estado;\r\n this.mensagens = estado.mensagens;\r\n this.acoes = estado.acoes;\r\n this.cdr.markForCheck();\r\n }));\r\n this.subs.add(this.session.online$.subscribe(online => {\r\n this.online = online;\r\n this.cdr.markForCheck();\r\n }));\r\n this.subs.add(this.chat.anuncios.subscribe(texto => this.anunciar(texto)));\r\n this.montarBoasVindas();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // espera a transição começar para não rolar a página no focus\r\n setTimeout(() => this.composer?.focar(), 60);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearTimeout(this.timerAnuncio);\r\n this.subs.unsubscribe();\r\n }\r\n\r\n @HostListener('keydown.escape', ['$event'])\r\n aoEscape(evento: KeyboardEvent): void {\r\n if (evento.defaultPrevented) return;\r\n if (this.vendoHistorico) {\r\n this.vendoHistorico = false;\r\n return;\r\n }\r\n evento.preventDefault();\r\n this.assistant.fechar();\r\n }\r\n\r\n get podeEnviar(): boolean {\r\n return this.online && !this.estado?.enviando && !this.estado?.carregandoConversa;\r\n }\r\n\r\n get motivoBloqueio(): string | null {\r\n if (!this.online) return 'Sem conexão com a internet.';\r\n if (this.estado?.carregandoConversa) return 'Carregando a conversa…';\r\n return null;\r\n }\r\n\r\n fechar(): void {\r\n this.assistant.fechar();\r\n }\r\n\r\n enviar(texto: string): void {\r\n if (!this.podeEnviar) return;\r\n if (this.chat.enviar(texto)) {\r\n this.composer?.limpar();\r\n this.vendoHistorico = false;\r\n }\r\n }\r\n\r\n reenviar(): void {\r\n const texto = this.estado?.textoComFalha;\r\n if (texto && this.podeEnviar) this.chat.enviar(texto);\r\n }\r\n\r\n usarSugestao(texto: string): void {\r\n this.enviar(texto);\r\n }\r\n\r\n novaConversa(): void {\r\n if (this.chat.novaConversa()) {\r\n this.vendoHistorico = false;\r\n this.anunciar('Nova conversa iniciada.');\r\n setTimeout(() => this.composer?.focar());\r\n }\r\n }\r\n\r\n alternarHistorico(): void {\r\n this.vendoHistorico = !this.vendoHistorico;\r\n if (this.vendoHistorico) this.chat.listarConversas();\r\n }\r\n\r\n abrirConversa(id: string): void {\r\n this.vendoHistorico = false;\r\n this.chat.abrirConversa(id);\r\n setTimeout(() => this.composer?.focar());\r\n }\r\n\r\n trackConversa(_: number, c: { id: string }) {\r\n return c.id;\r\n }\r\n\r\n private montarBoasVindas(): void {\r\n const sugestoes = UINY_SUGESTOES[this.assistant.sistemaOrigem] ?? { textos: [], alteracoes: false };\r\n this.sugestoes = sugestoes.textos;\r\n this.capacidades = [];\r\n this.temAlteracoes = sugestoes.alteracoes;\r\n }\r\n\r\n private anunciar(texto: string): void {\r\n // limpa antes para leitores de tela repetirem anúncios iguais\r\n this.anuncio = '';\r\n this.cdr.markForCheck();\r\n clearTimeout(this.timerAnuncio);\r\n if (!texto) return;\r\n this.timerAnuncio = setTimeout(() => {\r\n this.anuncio = texto;\r\n this.cdr.markForCheck();\r\n }, 50);\r\n }\r\n}\r\n","<section class=\"uiny\" aria-labelledby=\"uiny-titulo\">\r\n <header class=\"uiny__topo\">\r\n <div class=\"uiny__marca\">\r\n <img *ngIf=\"!avatarFalhou\" class=\"uiny__avatar uiny__avatar--imagem\" [src]=\"avatarUrl\" alt=\"\"\r\n width=\"34\" height=\"34\" (error)=\"avatarFalhou = true\">\r\n <span *ngIf=\"avatarFalhou\" class=\"uiny__avatar\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" focusable=\"false\">\r\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\"/>\r\n </svg>\r\n </span>\r\n <div class=\"uiny__identidade\">\r\n <h2 id=\"uiny-titulo\" class=\"uiny__nome\">Uiny</h2>\r\n <p class=\"uiny__sub\">Assistente da Uishop</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"uiny__comandos\">\r\n <button type=\"button\" class=\"uiny__icone\" [class.is-ativo]=\"vendoHistorico\"\r\n [attr.aria-pressed]=\"vendoHistorico ? 'true' : 'false'\"\r\n aria-label=\"Conversas anteriores\" title=\"Conversas anteriores\"\r\n (click)=\"alternarHistorico()\">\r\n <ui-icon icon=\"history\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" aria-label=\"Nova conversa\" title=\"Nova conversa\"\r\n [disabled]=\"chat.ocupado\" (click)=\"novaConversa()\">\r\n <ui-icon icon=\"edit_square\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" (click)=\"fechar()\"\r\n [attr.aria-label]=\"empilhado ? 'Voltar para a aplicação' : 'Fechar a Uiny'\"\r\n [title]=\"empilhado ? 'Voltar para a aplicação' : 'Fechar (Esc)'\">\r\n <ui-icon [icon]=\"empilhado ? 'arrow_back' : 'close'\" size=\"20\"></ui-icon>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n <div *ngIf=\"!online\" class=\"uiny__faixa uiny__faixa--offline\" role=\"status\">\r\n <ui-icon icon=\"wifi_off\" size=\"18\"></ui-icon>\r\n <span>Sem conexão com a internet. Você poderá enviar mensagens quando ela voltar.</span>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.aviso\" class=\"uiny__faixa uiny__faixa--info\" role=\"status\">\r\n <ui-icon icon=\"info\" size=\"18\"></ui-icon>\r\n <span>{{ estado.aviso }}</span>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar aviso\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"vendoHistorico; else conversaAtual\" class=\"uiny__historico\">\r\n <div class=\"uiny__historico-topo\">\r\n <h3 class=\"uiny__historico-titulo\">Conversas anteriores</h3>\r\n <button type=\"button\" class=\"uiny__link\" (click)=\"vendoHistorico = false\">Voltar à conversa</button>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.carregandoConversas\" class=\"uiny__vazio\" role=\"status\">\r\n <span class=\"uiny__spinner\" aria-hidden=\"true\"></span> Carregando conversas…\r\n </div>\r\n\r\n <p *ngIf=\"!estado?.carregandoConversas && estado?.conversas?.length === 0\" class=\"uiny__vazio\">\r\n Nenhuma conversa anterior neste contexto.\r\n </p>\r\n\r\n <ul *ngIf=\"estado?.conversas?.length\" class=\"uiny__lista-conversas\">\r\n <li *ngFor=\"let c of estado.conversas; trackBy: trackConversa\">\r\n <button type=\"button\" class=\"uiny__conversa\" [class.is-atual]=\"c.id === estado.conversa?.id\"\r\n [attr.aria-current]=\"c.id === estado.conversa?.id ? 'true' : null\"\r\n [disabled]=\"chat.ocupado\" (click)=\"abrirConversa(c.id)\">\r\n <span class=\"uiny__conversa-titulo\">{{ c.titulo || 'Conversa sem título' }}</span>\r\n <span *ngIf=\"c.atualizadaEm\" class=\"uiny__conversa-data\">{{ c.atualizadaEm | date:'dd/MM/yyyy HH:mm' }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #conversaAtual>\r\n <ui-assistant-messages class=\"uiny__mensagens\"\r\n [mensagens]=\"mensagens\"\r\n [acoes]=\"acoes\"\r\n [enviando]=\"estado?.enviando\"\r\n [carregando]=\"estado?.carregandoConversa\"\r\n [sugestoes]=\"sugestoes\"\r\n [capacidades]=\"capacidades\"\r\n [temAlteracoes]=\"temAlteracoes\"\r\n [podeEnviar]=\"podeEnviar\"\r\n (sugestao)=\"usarSugestao($event)\"\r\n (confirmar)=\"chat.confirmar($event)\"\r\n (cancelar)=\"chat.cancelar($event)\"\r\n (verificar)=\"chat.verificarAcao($event)\">\r\n </ui-assistant-messages>\r\n </ng-template>\r\n\r\n <div *ngIf=\"estado?.erro\" class=\"uiny__erro\" role=\"alert\">\r\n <ui-icon icon=\"error\" size=\"18\"></ui-icon>\r\n <div class=\"uiny__erro-texto\">\r\n <span>{{ estado.erro.mensagem }}</span>\r\n <small *ngIf=\"estado.erro.correlacao\">Código para o suporte: {{ estado.erro.correlacao }}</small>\r\n </div>\r\n <button *ngIf=\"estado.textoComFalha && podeEnviar\" type=\"button\" class=\"uiny__link\" (click)=\"reenviar()\">\r\n Tentar de novo\r\n </button>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar erro\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <ui-assistant-composer class=\"uiny__composer\"\r\n [desabilitado]=\"!podeEnviar\"\r\n [enviando]=\"estado?.enviando\"\r\n [motivo]=\"motivoBloqueio\"\r\n (enviar)=\"enviar($event)\">\r\n </ui-assistant-composer>\r\n\r\n <div class=\"uiny-sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ anuncio }}</div>\r\n</section>\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { UinyConfig, UinyEvento } from '../../models/uiny.models';\r\nimport { UiAssistantService } from '../../services/ui-assistant.service';\r\nimport { larguraPainel, UINY_CONFIG, UINY_LADO_A_LADO_PADRAO } from '../../uiny.config';\r\n\r\nconst DURACAO_TRANSICAO_MS = 240;\r\n\r\n/**\r\n * Contêiner que hospeda a Uiny ao lado da aplicação.\r\n *\r\n * Envolve TODO o layout da aplicação (inclusive o header e a sidebar fixos):\r\n *\r\n * <ui-assistant-layout (assistantEvent)=\"...\">\r\n * <div class=\"page-wrapper\">...</div>\r\n * </ui-assistant-layout>\r\n *\r\n * Fechado, não altera nada: a página rola normalmente pela janela.\r\n * Aberto no desktop, vira uma linha flex [aplicação | painel]: a coluna da aplicação passa\r\n * a ser o bloco de contenção dos elementos position:fixed (contain: layout) e ganha rolagem\r\n * própria. Assim o header e a sidebar fixos ocupam a coluna da esquerda, sem serem cobertos.\r\n * Em telas estreitas o painel ocupa a largura toda e a aplicação fica recolhida até voltar.\r\n */\r\n@Component({\r\n selector: 'ui-assistant-layout',\r\n templateUrl: './ui-assistant-layout.component.html',\r\n styleUrls: ['./ui-assistant-layout.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class UiAssistantLayoutComponent implements OnInit, OnDestroy {\r\n\r\n /** Ações concluídas e instruções de interface (tema atualizado, atualizar listagem, abrir prévia). */\r\n @Output() assistantEvent = new EventEmitter<UinyEvento>();\r\n\r\n @ViewChild('rolagem', { static: true }) rolagem: ElementRef<HTMLElement>;\r\n\r\n /** Painel montado e layout em modo contido (inclui a animação de fechamento). */\r\n public contido = false;\r\n /** Painel com a largura final (classe que dispara a transição). */\r\n public expandido = false;\r\n /** Tela estreita: painel em largura total, aplicação recolhida. */\r\n public empilhado = false;\r\n public disponivel = false;\r\n public readonly largura: number;\r\n\r\n private removerHost: () => void;\r\n private subs = new Subscription();\r\n private midia: MediaQueryList | null = null;\r\n private timerFechamento: any;\r\n private scrollJanela = 0;\r\n\r\n constructor(\r\n public assistant: UiAssistantService,\r\n private cdr: ChangeDetectorRef,\r\n private zone: NgZone,\r\n @Optional() @Inject(UINY_CONFIG) config: UinyConfig | null,\r\n @Optional() private router: Router\r\n ) {\r\n this.largura = larguraPainel(config);\r\n const ladoALado = config?.larguraMinimaLadoALado || UINY_LADO_A_LADO_PADRAO;\r\n if (typeof window !== 'undefined' && window.matchMedia) {\r\n this.midia = window.matchMedia(`(max-width: ${ladoALado - 0.02}px)`);\r\n this.empilhado = this.midia.matches;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.removerHost = this.assistant.registrarHost();\r\n\r\n this.subs.add(this.assistant.disponivel$.subscribe(d => {\r\n this.disponivel = d;\r\n this.cdr.markForCheck();\r\n }));\r\n this.subs.add(this.assistant.aberto$.subscribe(aberto => aberto ? this.abrir() : this.fechar()));\r\n this.subs.add(this.assistant.eventos$.subscribe(e => this.assistantEvent.emit(e)));\r\n\r\n // Com o layout contido a janela não rola: replica o scroll ao topo da navegação.\r\n if (this.router) {\r\n this.subs.add(this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe(() => {\r\n if (this.contido && this.rolagem) this.rolagem.nativeElement.scrollTop = 0;\r\n }));\r\n }\r\n\r\n if (this.midia) {\r\n const aoMudar = (e: MediaQueryListEvent) => this.zone.run(() => {\r\n this.empilhado = e.matches;\r\n this.cdr.markForCheck();\r\n });\r\n this.midia.addEventListener ? this.midia.addEventListener('change', aoMudar) : this.midia.addListener(aoMudar);\r\n this.subs.add(() => this.midia.removeEventListener\r\n ? this.midia.removeEventListener('change', aoMudar)\r\n : this.midia.removeListener(aoMudar));\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearTimeout(this.timerFechamento);\r\n this.subs.unsubscribe();\r\n this.removerHost?.();\r\n if (this.contido) this.restaurarJanela();\r\n }\r\n\r\n private abrir(): void {\r\n clearTimeout(this.timerFechamento);\r\n if (!this.contido) {\r\n this.scrollJanela = window.scrollY || 0;\r\n this.contido = true;\r\n this.cdr.detectChanges();\r\n // a rolagem passa da janela para a coluna da aplicação, na mesma posição\r\n this.rolagem.nativeElement.scrollTop = this.scrollJanela;\r\n }\r\n // próximo frame: a largura sai de 0 e a transição acontece\r\n requestAnimationFrame(() => {\r\n this.expandido = true;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n private fechar(): void {\r\n if (!this.contido) return;\r\n this.expandido = false;\r\n this.cdr.detectChanges();\r\n clearTimeout(this.timerFechamento);\r\n this.timerFechamento = setTimeout(() => {\r\n this.restaurarJanela();\r\n this.cdr.detectChanges();\r\n }, this.semAnimacao() ? 0 : DURACAO_TRANSICAO_MS);\r\n }\r\n\r\n private restaurarJanela(): void {\r\n const topo = this.empilhado ? this.scrollJanela : (this.rolagem?.nativeElement.scrollTop ?? 0);\r\n this.contido = false;\r\n this.cdr.detectChanges();\r\n window.scrollTo(0, topo);\r\n }\r\n\r\n private semAnimacao(): boolean {\r\n return typeof window !== 'undefined' && !!window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n }\r\n}\r\n","<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","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { UiIconModule } from 'uitec-ng-icon';\nimport { UiAssistantActionCardComponent } from './components/assistant-action-card/ui-assistant-action-card.component';\nimport { UiAssistantButtonComponent } from './components/assistant-button/ui-assistant-button.component';\nimport { UiAssistantComposerComponent } from './components/assistant-composer/ui-assistant-composer.component';\nimport { UiAssistantLayoutComponent } from './components/assistant-layout/ui-assistant-layout.component';\nimport { UiAssistantMessagesComponent } from './components/assistant-messages/ui-assistant-messages.component';\nimport { UiAssistantPanelComponent } from './components/assistant-panel/ui-assistant-panel.component';\nimport { UiAssistantTextComponent } from './components/assistant-text/ui-assistant-text.component';\nimport { UinyConfig } from './models/uiny.models';\nimport { UINY_CONFIG } from './uiny.config';\n\nconst COMPONENTES = [\n UiAssistantButtonComponent,\n UiAssistantLayoutComponent,\n UiAssistantPanelComponent,\n UiAssistantMessagesComponent,\n UiAssistantTextComponent,\n UiAssistantComposerComponent,\n UiAssistantActionCardComponent,\n];\n\n@NgModule({\n declarations: COMPONENTES,\n imports: [\n CommonModule,\n UiIconModule\n ],\n exports: COMPONENTES\n})\nexport class UiAssistantModule {\n /** Importe uma vez no AppModule do consumidor. */\n static forRoot(config: UinyConfig): ModuleWithProviders<UiAssistantModule> {\n return {\n ngModule: UiAssistantModule,\n providers: [{ provide: UINY_CONFIG, useValue: config }]\n };\n }\n}\n","import { NgModule } from '@angular/core';\r\nimport { UiHeaderComponent } from './ui-header.component';\r\nimport { UiIconModule } from 'uitec-ng-icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { UiUserTopModule } from 'uitec-ng-user-top';\r\nimport { MyAccountComponent } from './my-account/my-account.component';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { UiAssistantModule } from './assistant/ui-assistant.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n UiHeaderComponent,\r\n MyAccountComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n UiIconModule,\r\n UiUserTopModule,\r\n TooltipModule,\r\n UiAssistantModule\r\n ],\r\n exports: [\r\n UiHeaderComponent,\r\n UiAssistantModule,\r\n ]\r\n})\r\nexport class UiHeaderModule { }\r\n","/*\n * Contrato HTTP da API da Uiny (projeto uishop-ia, prefixo /api/v1).\n *\n * Fonte: C:\\git\\uishop\\uishop-ia\n * - Rotas: config/web.php; README.md (seção Endpoints).\n * - Formatos: services/uiny/ApresentadorConversa.php, ContextoTela.php, ConfirmacaoService.php.\n * - Valores: config/Constants.php; erros: services/excecoes/ErroUiny.php.\n *\n * Os ids de conversa, mensagem e ação são UUIDs (string).\n */\n\n/** Constants::SISTEMAS_ORIGEM */\nexport type UinySistemaOrigem = 'studio' | 'erp';\n\n/** Constants::PAPEL_* */\nexport type UinyPapelApi = 'usuario' | 'assistente';\n\n/** Constants::ESTADO_* (estado da mensagem e da resposta). */\nexport type UinyEstadoRespostaApi = 'resposta' | 'esclarecimento' | 'aguardando_confirmacao' | 'acao_concluida' | 'falha';\n\n/** Constants::ACAO_* (campo \"situacao\" da ação). */\nexport type UinySituacaoAcaoApi =\n | 'pendente'\n | 'executando'\n | 'executada'\n | 'cancelada'\n | 'expirada'\n | 'invalidada'\n | 'falhou'\n | 'indeterminada';\n\n/** ContextoTela: só estes campos; qualquer outro gera 422. */\nexport interface UinyContextoApi {\n sistema: UinySistemaOrigem;\n tela?: string;\n id_loja?: number;\n id_loja_leiaute?: number;\n id_tema?: number;\n id_produto?: number;\n id_pedido?: number;\n}\n\n/** ApresentadorConversa::conversa */\nexport interface UinyConversaApi {\n id: string;\n titulo: string | null;\n sistema_origem: UinySistemaOrigem;\n id_loja: number | null;\n dt_criacao: string;\n dt_alteracao: string;\n}\n\n/** ApresentadorConversa::acao */\nexport interface UinyAcaoApi {\n id: string;\n ferramenta: string;\n sistema: UinySistemaOrigem;\n resumo: string;\n /** Ex.: { tipo: 'alteracao_cor', tema, loja, rotulo, valor_atual, valor_novo, ... } */\n detalhes: unknown;\n situacao: UinySituacaoAcaoApi;\n dt_expiracao: string;\n dt_conclusao: string | null;\n}\n\n/** Blocos de apresentação: lista fechada em Constants::APRESENTACAO_*. */\nexport interface UinyApresentacaoApi {\n tipo: 'lista_produtos' | 'resumo_vendas' | 'lista_lojas' | 'tema' | 'opcoes' | 'alteracao_cor';\n dados?: any;\n}\n\n/** Instruções de interface: Constants::INSTRUCOES_INTERFACE. */\nexport interface UinyInstrucaoApi {\n tipo: 'atualizar_preview_tema';\n id_loja_leiaute?: number;\n}\n\n/** ApresentadorConversa::mensagem */\nexport interface UinyMensagemApi {\n id: string;\n papel: UinyPapelApi;\n texto: string | null;\n estado: UinyEstadoRespostaApi | null;\n apresentacao: UinyApresentacaoApi[];\n instrucoes_interface: UinyInstrucaoApi[];\n acao_pendente: UinyAcaoApi | null;\n dt_criacao: string;\n}\n\n/** Corpo de erro (também presente em respostas 409/502/504 da confirmação). */\nexport interface UinyErroApi {\n codigo: string;\n mensagem: string;\n detalhes?: { campo: string; mensagem: string }[];\n}\n\n/**\n * ApresentadorConversa::resposta — POST mensagens, confirmar e cancelar.\n * Em erros da confirmação o mesmo corpo vem com \"erro\" e status 4xx/5xx.\n */\nexport interface UinyRespostaApi {\n id_correlacao?: string;\n conversa?: UinyConversaApi;\n estado?: UinyEstadoRespostaApi;\n mensagem?: UinyMensagemApi | null;\n acao_pendente?: UinyAcaoApi | null;\n /** 409 ACAO_INVALIDADA: a ação substituída. */\n acao_anterior?: UinyAcaoApi;\n /** Confirmação repetida: devolve o resultado já gravado, sem executar de novo. */\n repetida?: boolean;\n erro?: UinyErroApi;\n}\n\nexport interface UinyMetaApi {\n page: number;\n per_page: number;\n total: number;\n last_page: number;\n}\n\n/** POST api/v1/conversas (201) */\nexport interface UinyCriarConversaResponse {\n id_correlacao?: string;\n conversa: UinyConversaApi;\n}\n\n/** GET api/v1/conversas */\nexport interface UinyListaConversasResponse {\n id_correlacao?: string;\n data: UinyConversaApi[];\n meta: UinyMetaApi;\n}\n\n/** GET api/v1/conversas/{id}: página mais recente, em ordem cronológica. */\nexport interface UinyHistoricoResponse {\n id_correlacao?: string;\n conversa: UinyConversaApi;\n data: UinyMensagemApi[];\n meta: UinyMetaApi;\n}\n","/*\r\n * Public API Surface of ui-header\r\n */\r\n\r\nexport * from './lib/ui-header.service';\r\nexport * from './lib/ui-header.component';\r\nexport * from './lib/ui-header.module';\r\n\r\n// Uiny (assistente virtual)\r\nexport * from './lib/assistant/ui-assistant.module';\r\nexport * from './lib/assistant/uiny.config';\r\nexport * from './lib/assistant/models/uiny.models';\r\nexport * from './lib/assistant/models/uiny-api.models';\r\nexport * from './lib/assistant/services/ui-assistant.service';\r\nexport * from './lib/assistant/services/uiny-api.service';\r\nexport * from './lib/assistant/services/uiny-chat.service';\r\nexport * from './lib/assistant/services/uiny-session.service';\r\nexport * from './lib/assistant/components/assistant-button/ui-assistant-button.component';\r\nexport * from './lib/assistant/components/assistant-layout/ui-assistant-layout.component';\r\nexport * from './lib/assistant/components/assistant-panel/ui-assistant-panel.component';\r\nexport * from './lib/assistant/components/assistant-messages/ui-assistant-messages.component';\r\nexport * from './lib/assistant/components/assistant-text/ui-assistant-text.component';\r\nexport * from './lib/assistant/components/assistant-composer/ui-assistant-composer.component';\r\nexport * from './lib/assistant/components/assistant-action-card/ui-assistant-action-card.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.UinySessionService","i1.UiAssistantService","i2","i3","i4","i6.UiAssistantButtonComponent","i7.MyAccountComponent","i1.UinyApiService","i3.UiAssistantService","i3.UiAssistantTextComponent","i4.UiAssistantActionCardComponent","i5","i6.UiAssistantMessagesComponent","i7.UiAssistantComposerComponent","i4.UiAssistantPanelComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uitec-ng-header.mjs","sources":["../../../projects/ui-header/src/lib/ui-header.service.ts","../../../projects/ui-header/src/lib/my-account/my-account.component.ts","../../../projects/ui-header/src/lib/my-account/my-account.component.html","../../../projects/ui-header/src/lib/ui-header.component.ts","../../../projects/ui-header/src/lib/ui-header.component.html","../../../projects/ui-header/src/lib/ui-header.module.ts","../../../projects/ui-header/src/public-api.ts","../../../projects/ui-header/src/uitec-ng-header.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UiHeaderService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { AuthAcesso, BaseUrlService, UserAuthDTO, UsuarioMenuDTO } from 'uitec-ng-core';\r\nimport { AuthService } from 'uitec-ng-core';\r\n\r\n@Component({\r\n selector: 'my-account',\r\n templateUrl: './my-account.component.html',\r\n styleUrls: ['./my-account.component.scss']\r\n})\r\nexport class MyAccountComponent implements OnInit {\r\n\r\n @Input() menus: UsuarioMenuDTO[];\r\n\r\n @Output() onNavigate = new EventEmitter<UsuarioMenuDTO>();\r\n\r\n public userObs: UserAuthDTO;\r\n public accessObs: AuthAcesso;\r\n\r\n constructor(\r\n public authService: AuthService,\r\n public urlService: BaseUrlService\r\n ) {\r\n this.userObs = this.authService.currentUserValue;\r\n this.accessObs = this.authService.currentAccessValue;\r\n\r\n this.authService.currentUser.subscribe((data) => {\r\n this.userObs = data;\r\n });\r\n\r\n this.authService.currentAccess.subscribe((data) => {\r\n this.accessObs = data;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n\r\n clickMenu(menu: UsuarioMenuDTO) {\r\n this.onNavigate.emit(menu);\r\n }\r\n}\r\n","<ui-user-top [urlImage]=\"urlService.imagemUsuario({model: userObs?.usuario})\" [usuario]=\"userObs?.usuario\"\r\n [acesso]=\"accessObs\"></ui-user-top>\r\n\r\n<ul class=\"profile-dropdown onhover-show-div\">\r\n <li *ngFor=\"let col of menus\">\r\n <a (click)=\"clickMenu(col)\">\r\n <ui-icon [icon]=\"col.ds_icone\" size=\"20\"></ui-icon>\r\n <span>{{col.no_funcionalidade}}</span>\r\n </a>\r\n </li>\r\n <li>\r\n <a href=\"javascript:void(0)\" (click)=\"logout()\" class=\"text-danger\">\r\n <ui-icon icon=\"login\" size=\"20\"></ui-icon>\r\n <span>Sair</span>\r\n </a>\r\n </li>\r\n</ul>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnChanges, OnInit, Output, TemplateRef } from '@angular/core';\r\nimport { AuthAcesso, AuthService, BaseUrlService, IframeService, LayoutService, UserAuthDTO, UsuarioMenuDTO } from 'uitec-ng-core';\r\n\r\n@Component({\r\n selector: 'ui-header',\r\n templateUrl: './ui-header.component.html',\r\n styleUrls: ['./ui-header.component.scss']\r\n})\r\nexport class UiHeaderComponent implements OnInit {\r\n\r\n @Input() collapseSidebar: boolean;\r\n @Input() fullScreen: boolean;\r\n @Input() headerBackdrop: string;\r\n @Input() isFree: boolean;\r\n @Input() menus: UsuarioMenuDTO[];\r\n @Input() sidebar: boolean = true;\r\n @Input() fullWidth: boolean = false;\r\n @Input() redirectHome: boolean = true;\r\n @Input() darkDefault: string = \"light\";\r\n\r\n @Output() collapseSidebarChange = new EventEmitter<boolean>();\r\n @Output() fullScreenChange = new EventEmitter<boolean>();\r\n @Output() headerBackdropChange = new EventEmitter<boolean>();\r\n @Output() onNavigate = new EventEmitter<UsuarioMenuDTO>();\r\n @Output() onUpgrade = new EventEmitter<void>();\r\n\r\n @ContentChild('left') left: TemplateRef<any>;\r\n @ContentChild('center') center: TemplateRef<any>;\r\n @ContentChild('right') right: TemplateRef<any>;\r\n\r\n public statuSidebar;\r\n public dark: boolean;\r\n public elem: any;\r\n public userObs: UserAuthDTO;\r\n public accessObs: AuthAcesso;\r\n\r\n constructor(\r\n public authService: AuthService,\r\n public urlService: BaseUrlService,\r\n public layoutService: LayoutService,\r\n public iframeService: IframeService,\r\n @Inject(DOCUMENT) private document: any\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.elem = document.documentElement;\r\n\r\n this.userObs = this.authService.currentUserValue;\r\n this.accessObs = this.authService.currentAccessValue;\r\n\r\n this.authService.currentUser.subscribe((data) => {\r\n this.userObs = data;\r\n });\r\n\r\n this.authService.currentAccess.subscribe((data) => {\r\n this.accessObs = data;\r\n });\r\n\r\n this.dark = localStorage.getItem('darkMode') == 'enabled';\r\n setTimeout(() => {\r\n this.layoutService.config.settings.layout_version = this.dark ? \"dark-only\" : this.darkDefault;\r\n });\r\n this.document.body.classList.add(this.dark ? \"dark-only\" : \"light\");\r\n this.document.documentElement.classList.add(this.dark ? \"dark-only\" : \"light\");\r\n\r\n this.addEventListenerOnIframe();\r\n this.buildAmbiente();\r\n }\r\n\r\n layoutToggle() {\r\n this.dark = !this.dark;\r\n localStorage.setItem('darkMode', this.dark ? 'enabled' : 'disabled');\r\n this.layoutService.config.settings.layout_version = this.dark ? \"dark-only\" : \"light\";\r\n const classColor = this.dark ? \"dark-only\" : \"light\";\r\n this.document.body.classList.remove('dark-only');\r\n this.document.body.classList.remove('light');\r\n this.document.body.classList.add(classColor);\r\n this.document.documentElement.classList.remove('dark-only');\r\n this.document.documentElement.classList.remove('light');\r\n this.document.documentElement.classList.add(classColor);\r\n\r\n this.updateIframeTheme();\r\n }\r\n\r\n updateIframeTheme() {\r\n const iframe = document.querySelector('iframe');\r\n if (!iframe || !iframe.contentWindow) return;\r\n\r\n const theme = this.dark ? \"dark-only\" : \"light\";\r\n const iframeSrc = iframe.getAttribute('src');\r\n\r\n let origin = \"*\"; // Usa \"*\" por padrão para evitar erro\r\n\r\n if (iframeSrc) {\r\n try {\r\n const url = new URL(iframeSrc, window.location.origin);\r\n origin = url.origin; // Extrai o domínio corretamente\r\n } catch (error) {\r\n console.error(\"Erro ao extrair o origin do iframe:\", error);\r\n }\r\n }\r\n\r\n iframe.contentWindow.postMessage({ theme }, origin);\r\n }\r\n\r\n addEventListenerOnIframe() {\r\n const frame = document.querySelector('iframe');\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n frame.addEventListener('load', () => {\r\n this.updateIframeTheme();\r\n });\r\n }\r\n\r\n //recebe o valor inicial do collapseSidebar e grava no localstorage\r\n setStatusSideBar() {\r\n this.statuSidebar = this.collapseSidebar;\r\n localStorage.setItem('local', this.statuSidebar);\r\n }\r\n\r\n fecharBackdrop() {\r\n this.headerBackdrop = null;\r\n this.headerBackdropChange.emit(false);\r\n }\r\n\r\n sidebarToggle() {\r\n this.collapseSidebar = !this.collapseSidebar;\r\n this.setStatusSideBar();\r\n this.collapseSidebarChange.emit(this.collapseSidebar);\r\n }\r\n\r\n home() {\r\n if (!this.redirectHome) return;\r\n\r\n let menu = new UsuarioMenuDTO();\r\n menu.ds_rota = '/';\r\n menu.ds_tipo = 'link';\r\n this.onNavigate.emit(menu);\r\n }\r\n\r\n logout() {\r\n\r\n this.authService.logout();\r\n }\r\n\r\n clickMenu(menu: UsuarioMenuDTO) {\r\n this.onNavigate.emit(menu);\r\n }\r\n\r\n buildAmbiente() {\r\n let textContent = null;\r\n\r\n if (location.host.search('hom-') == 0) {\r\n textContent = 'Homolog';\r\n } else if (location.host.search('localhost') == 0) {\r\n textContent = 'Develop';\r\n }\r\n\r\n if (!textContent) return;\r\n\r\n const div = document.createElement('div');\r\n const span = document.createElement('span');\r\n div.className = `ambiente ambiente-${textContent.toLowerCase()}`;\r\n span.textContent = textContent;\r\n div.appendChild(span);\r\n document.body.appendChild(div);\r\n }\r\n\r\n toggleFullScreen() {\r\n this.fullScreen = !this.fullScreen;\r\n if (this.fullScreen) {\r\n if (this.elem.requestFullscreen) {\r\n this.elem.requestFullscreen();\r\n } else if (this.elem.mozRequestFullScreen) {\r\n /* Firefox */\r\n this.elem.mozRequestFullScreen();\r\n } else if (this.elem.webkitRequestFullscreen) {\r\n /* Chrome, Safari and Opera */\r\n this.elem.webkitRequestFullscreen();\r\n } else if (this.elem.msRequestFullscreen) {\r\n /* IE/Edge */\r\n this.elem.msRequestFullscreen();\r\n }\r\n } else {\r\n if (!this.document.exitFullscreen) {\r\n this.document.exitFullscreen();\r\n } else if (this.document.mozCancelFullScreen) {\r\n /* Firefox */\r\n this.document.mozCancelFullScreen();\r\n } else if (this.document.webkitExitFullscreen) {\r\n /* Chrome, Safari and Opera */\r\n this.document.webkitExitFullscreen();\r\n } else if (this.document.msExitFullscreen) {\r\n /* IE/Edge */\r\n this.document.msExitFullscreen();\r\n }\r\n }\r\n }\r\n}\r\n","<!-- Page Header Backdrop -->\r\n<div *ngIf=\"headerBackdrop\" (click)=\"fecharBackdrop()\" class=\"header-backgrop\"></div>\r\n\r\n<!-- Page Header Start -->\r\n<div class=\"page-header\" [class.close_icon]=\"collapseSidebar\" [class.not-sidebar]=\"!sidebar\"\r\n [class.full-width]=\"fullWidth\">\r\n <div class=\"header-wrapper d-flex m-0 justify-content-between\">\r\n <div class=\"header-logo-wrapper col-auto d-lg-none px-0\">\r\n <div *ngIf=\"sidebar\" class=\"toggle-sidebar\" (click)=\"sidebarToggle()\">\r\n <ui-icon icon=\"menu\" class=\"status_toggle middle\"></ui-icon>\r\n </div>\r\n <a (click)=\"home()\" [class.cursor-pointer]=\"redirectHome\">\r\n <img class=\"img-fluid for-dark image-logo d-md-none\" src=\"assets/images/logo/logo_dark.png\" alt=\"\" />\r\n </a>\r\n </div>\r\n\r\n <div class=\"left-header horizontal-wrapper ps-0\">\r\n <ng-container [ngTemplateOutlet]=\"left\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nav-center\">\r\n <ng-container [ngTemplateOutlet]=\"center\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nav-right p-0\">\r\n <ul class=\"nav-menus\">\r\n <!-- <li class=\"language-nav\" (click)=\"languageToggle()\">\r\n <header-languages></header-languages>\r\n </li> -->\r\n <ng-container *ngIf=\"isFree; then liUpgrade; else liEmpty\"></ng-container>\r\n\r\n <ng-template #liUpgrade>\r\n <li>\r\n <button\r\n class=\"d-flex align-items-center justify-content-center border-0 rounded-pill gap-2 b-color\"\r\n (click)=\"onUpgrade.emit()\">\r\n <img src=\"assets/images/coroa.svg\" class=\"w-auto\" alt=\"icone-coroa\" />\r\n Faça Upgrade\r\n </button>\r\n </li>\r\n </ng-template>\r\n <ng-template #liEmpty>\r\n <li></li>\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"right\"></ng-container>\r\n\r\n <li>\r\n <div class=\"mode cursor-pointer\" (click)=\"layoutToggle()\">\r\n <ui-icon pTooltip=\"Ativar Modo Escuro\" tooltipPosition=\"bottom\" icon=\"dark_mode\" size=\"24\"\r\n *ngIf=\"!dark\"></ui-icon>\r\n <ui-icon pTooltip=\"Ativar Modo Claro\" tooltipPosition=\"bottom\" icon=\"sunny\" size=\"24\"\r\n *ngIf=\"dark\"></ui-icon>\r\n\r\n </div>\r\n </li>\r\n\r\n <li class=\"maximize\">\r\n <a pTooltip=\"Maximizar\" tooltipPosition=\"bottom\" class=\"text-dark cursor-pointer\"\r\n href=\"javascript:void(0)\" (click)=\"toggleFullScreen()\">\r\n <ui-icon icon=\"fullscreen\" size=\"24\"></ui-icon>\r\n </a>\r\n </li>\r\n <li class=\"profile-nav onhover-dropdown p-0 ps-2\">\r\n <my-account [menus]=\"menus\" (onNavigate)=\"onNavigate.emit($event)\"></my-account>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Page Header Ends -->\r\n","import { NgModule } from '@angular/core';\r\nimport { UiHeaderComponent } from './ui-header.component';\r\nimport { UiIconModule } from 'uitec-ng-icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { UiUserTopModule } from 'uitec-ng-user-top';\r\nimport { MyAccountComponent } from './my-account/my-account.component';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\n@NgModule({\r\n declarations: [\r\n UiHeaderComponent,\r\n MyAccountComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n UiIconModule,\r\n UiUserTopModule,\r\n TooltipModule\r\n ],\r\n exports: [\r\n UiHeaderComponent,\r\n ]\r\n})\r\nexport class UiHeaderModule { }\r\n","/*\r\n * Public API Surface of ui-header\r\n */\r\n\r\nexport * from './lib/ui-header.service';\r\nexport * from './lib/ui-header.component';\r\nexport * from './lib/ui-header.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i5.MyAccountComponent"],"mappings":"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"}
|