import { DeesElement, property, html, customElement, type TemplateResult, css } from '@design.estate/dees-element'; import { actionButton, demoDocuments, demoRecipients, icon, pill, topBar, workspaceBaseStyles, workspaceDemoFrame, type IDocumentRow } from './sdig-workspace.shared.js'; declare global { interface HTMLElementTagNameMap { 'sdig-workspace-audit': SdigWorkspaceAudit; } } @customElement('sdig-workspace-audit') export class SdigWorkspaceAudit extends DeesElement { public static demo = () => workspaceDemoFrame(html``); public static demoGroups = ['Signature Digital Workspace']; @property({ attribute: false }) public accessor document: IDocumentRow = demoDocuments[1]; public static styles = [workspaceBaseStyles, css` .audit-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 20px; } .event-row { display: grid; grid-template-columns: 24px 180px 1fr 200px; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--border-subtle); align-items: center; } @media (max-width: 920px) { .audit-grid { grid-template-columns: 1fr; } .event-row { grid-template-columns: 24px 1fr; } .event-row .hide-mobile { display: none; } } `]; public render(): TemplateResult { const document = this.document || demoDocuments[1]; const events = [ ['2026-05-02 14:32:18 UTC', 'Sarah Chen', 'Document signed', '81.221.4.18 · Brussels, BE', '0x4a7b…f29c', 'success'], ['2026-05-02 14:31:54 UTC', 'Sarah Chen', 'Signature adopted (typed)', '81.221.4.18 · Brussels, BE', '0x4a7b…f29c', 'info'], ['2026-05-02 14:28:02 UTC', 'Sarah Chen', 'Document opened', '81.221.4.18 · Brussels, BE', '', 'default'], ['2026-05-02 11:02:11 UTC', 'Philipp K.', 'Document sent for signature', '92.42.114.7 · Berlin, DE', '0x1c8a…3b6f', 'info'], ['2026-05-02 10:54:22 UTC', 'Philipp K.', 'Document created', '92.42.114.7 · Berlin, DE', '0x1c8a…3b6f', 'default'], ]; return html` ${topBar({ breadcrumb: ['signature.digital', 'Inbox', document.id, 'Audit Trail'], title: `Audit Trail · ${document.title}`, subtitle: pill(`${document.status} · cryptographically sealed`, document.status === 'declined' ? 'error' : document.status === 'signed' ? 'success' : 'info', true), actions: html`${actionButton('Certificate (PDF)', 'outline', 'download')}${actionButton('Verify on chain', 'outline', 'hash')}` })}
Event log${events.length} events · immutable
${events.map((event) => html`
${event[0]}
${event[2]}
by ${event[1]} ${event[4] ? html`${event[4]}` : ''}
${event[3]}
`)}
Document hash
0x4a7b8f29c91e3d2a5b6c8e0f1d3c5a7b9d2e4f6a8c1e3d5f7b9c1e3a5b7d9f0e
Signers
${demoRecipients.map((recipient) => html`
${recipient.name.split(' ').map((part) => part[0]).slice(0, 2).join('')}
${recipient.name}
${recipient.email}
${icon('check', 12)}
`)}
${icon('shield', 13)} eIDAS Qualified · ESIGN Act compliant
Open-source verifier available. Anyone can independently validate this signature against the public ledger.
`; } }