{"version":3,"file":"fiscal-io-ds-components-error-page.mjs","sources":["../../../../projects/fiscal-io/ds-components/src/lib/components/ds-error-page/ds-error-page.component.ts","../../../../projects/fiscal-io/ds-components/src/lib/components/ds-error-page/ds-error-page.component.html","../../../../projects/fiscal-io/ds-components/src/fiscal-io-ds-components-error-page.ts"],"sourcesContent":["import {\n  Component,\n  input,\n  signal,\n  output,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nexport interface ErrorData {\n  status: number | string;\n  title?: string;\n  subTitle: string;\n  message?: string;\n  errorDetails?: string;\n}\n\n@Component({\n  selector: 'ds-error-page',\n  standalone: true,\n  imports: [CommonModule, RouterModule],\n  templateUrl: './ds-error-page.component.html',\n  styleUrls: ['./ds-error-page.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsErrorPageComponent {\n  /** Objeto com os dados principais do erro */\n  error = input.required<ErrorData>();\n\n  /** Mensagem customizada que sobrescreve a do objeto de erro se fornecida */\n  customMessage = input<string>();\n\n  /** Tipo de severidade: 'warning' ou 'error' */\n  severity = input<'warning' | 'error'>('warning');\n\n  /** Ícone customizado (opcional). Se não fornecido, usa o padrão da severidade. */\n  icon = input<string>();\n\n  /** Label para o botão de detalhes do erro */\n  errorDetailsLabel = input<string>('Detalhes do Erro');\n\n  /** Label para prefixo de erro */\n  errorLabel = input<string>('Erro');\n\n  /** Título padrão para severidade warning */\n  warningTitle = input<string>('Atenção!');\n\n  /** Título padrão para severidade error */\n  errorTitle = input<string>('Falha!');\n\n  /** Label para o botão de copiar */\n  copyLabel = input<string>('Copiar');\n\n  /** Label para o estado de copiado */\n  copiedLabel = input<string>('Copiado!');\n\n  /** Label para voltar à página anterior */\n  backLabel = input<string>('Voltar à página anterior');\n\n  /** Label para ir para a página inicial */\n  homeLabel = input<string>('Ir para a página inicial');\n\n  /** Label para contatar suporte */\n  supportLabel = input<string>('Contatar Suporte');\n\n  // States\n  protected showErrorDetails = signal(false);\n  protected copyStatus = signal<'idle' | 'copied'>('idle');\n\n  // Outputs\n  actionClick = output<void>();\n  backClick = output<void>();\n\n  toggleErrorDetails() {\n    this.showErrorDetails.update((v) => !v);\n  }\n\n  async copyToClipboard() {\n    const details = this.error().errorDetails;\n    if (details) {\n      try {\n        await navigator.clipboard.writeText(details);\n        this.copyStatus.set('copied');\n        setTimeout(() => this.copyStatus.set('idle'), 2000);\n      } catch (err) {\n        console.error('Falha ao copiar:', err);\n      }\n    }\n  }\n\n  onActionClick() {\n    this.actionClick.emit();\n  }\n\n  onBackClick() {\n    this.backClick.emit();\n  }\n}\n","<div class=\"border rounded-1 shadow-sm p-3\">\r\n  <!-- Header-->\r\n  <div\r\n    class=\"d-flex align-items-stretch border-0\"\r\n    [class.bg-warning-subtle]=\"severity() === 'warning'\"\r\n    [class.bg-danger-subtle]=\"severity() === 'error'\"\r\n  >\r\n    <div\r\n      class=\"d-flex align-items-center justify-content-center\"\r\n      [class.bg-warning]=\"severity() === 'warning'\"\r\n      [class.bg-danger]=\"severity() === 'error'\"\r\n      style=\"width: 64px; flex-shrink: 0\"\r\n    >\r\n      <i\r\n        class=\"bi fs-3\"\r\n        [class.text-dark]=\"severity() === 'warning'\"\r\n        [class.text-white]=\"severity() === 'error'\"\r\n        [class]=\"\r\n          icon() ||\r\n          (severity() === 'warning'\r\n            ? 'bi-exclamation-triangle'\r\n            : 'bi-x-circle-fill')\r\n        \"\r\n      ></i>\r\n    </div>\r\n    <div class=\"flex-grow-1 p-3 d-flex align-items-center\">\r\n      <strong\r\n        class=\"text-uppercase fw-bold\"\r\n        [class.text-warning-emphasis]=\"severity() === 'warning'\"\r\n        [class.text-danger-emphasis]=\"severity() === 'error'\"\r\n      >\r\n        {{ errorLabel() }} {{ error().status }},\r\n        {{\r\n          error().title || (severity() === \"warning\" ? warningTitle() : errorTitle())\r\n        }}\r\n      </strong>\r\n    </div>\r\n  </div>\r\n  <!--end header-->\r\n  <!-- Content Area -->\r\n  <div class=\"px-3 py-3\">\r\n    <h6 class=\"fw-bold mb-0 text-pre-wrap\" [innerHTML]=\"error().subTitle\"></h6>\r\n\r\n    <div class=\"pt-2\">\r\n      <p\r\n        class=\"text-secondary mb-0 text-pre-wrap\"\r\n        [innerHTML]=\"customMessage() || error().message\"\r\n      ></p>\r\n    </div>\r\n  </div>\r\n  <!-- Technical Details (ErrorDetails) -->\r\n  <div class=\"mt-2 ps-3\">\r\n    @if (error().errorDetails) {\r\n      <button\r\n        class=\"btn btn-sm btn-link text-decoration-none p-0 mb-3 d-flex align-items-center\"\r\n        type=\"button\"\r\n        (click)=\"toggleErrorDetails()\"\r\n      >\r\n        <span>{{ errorDetailsLabel() }}</span>\r\n        <i\r\n          class=\"bi ms-1\"\r\n          [class.bi-chevron-up]=\"showErrorDetails()\"\r\n          [class.bi-chevron-down]=\"!showErrorDetails()\"\r\n        ></i>\r\n      </button>\r\n\r\n      @if (showErrorDetails()) {\r\n        <div\r\n          class=\"mt-0 mb-3 border border-secondary-subtle rounded-1 overflow-hidden\"\r\n        >\r\n          <div\r\n            class=\"bg-body-tertiary border-bottom px-3 py-1 d-flex justify-content-end align-items-center\"\r\n          >\r\n            <button\r\n              (click)=\"copyToClipboard()\"\r\n              class=\"btn btn-sm text-secondary d-flex align-items-center py-1 px-2 border-0 rounded-1\"\r\n            >\r\n              <i\r\n                class=\"bi\"\r\n                [class.bi-copy]=\"copyStatus() === 'idle'\"\r\n                [class.bi-check-lg]=\"copyStatus() === 'copied'\"\r\n              ></i>\r\n              <span class=\"ms-1 small\">{{\r\n                copyStatus() === \"copied\" ? copiedLabel() : copyLabel()\r\n              }}</span>\r\n            </button>\r\n          </div>\r\n          <pre\r\n            class=\"bg-body-secondary m-0 p-3 text-secondary-emphasis\"\r\n            style=\"\r\n              max-height: 250px;\r\n              overflow-y: auto;\r\n              font-size: 0.8rem;\r\n              white-space: pre-wrap;\r\n              word-break: break-all;\r\n            \"\r\n          ><code>{{ error().errorDetails }}</code></pre>\r\n        </div>\r\n      }\r\n    }\r\n  </div>\r\n  <!--end content area-->\r\n  <!-- Footer Actions -->\r\n  <div\r\n    class=\"d-flex flex-column flex-sm-row justify-content-between align-items-center gap-3\"\r\n  >\r\n    <div class=\"d-flex align-items-center gap-4\">\r\n      <a\r\n        href=\"javascript:void(0)\"\r\n        (click)=\"onBackClick()\"\r\n        class=\"text-decoration-none text-primary d-inline-flex align-items-center\"\r\n      >\r\n        {{ backLabel() }}\r\n      </a>\r\n      <a\r\n        routerLink=\"/\"\r\n        class=\"text-decoration-none text-primary d-inline-flex align-items-center\"\r\n      >\r\n        {{ homeLabel() }}\r\n      </a>\r\n    </div>\r\n\r\n    <button\r\n      class=\"btn btn-outline-primary px-2 d-inline-flex align-items-center rounded-1\"\r\n      (click)=\"onActionClick()\"\r\n    >\r\n      <i class=\"bi bi-headset me-2\" style=\"font-size: 18px; line-height: 1\"></i>\r\n      <span style=\"font-size: 14px\">{{ supportLabel() }}</span>\r\n    </button>\r\n  </div>\r\n  <!--end footer actions-->\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './error-page';\n"],"names":[],"mappings":"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"}