6 Commits

Author SHA1 Message Date
jkunz 79ca3a07f1 v1.6.0
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-05-02 21:26:03 +00:00
jkunz a6324f867f feat(workspace): support configurable inbox documents and emit document-open events 2026-05-02 21:26:03 +00:00
jkunz a0dd552628 v1.5.1
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-05-02 19:53:40 +00:00
jkunz d693af8a26 fix(sdig-workspace): make workspace view externally controllable and preserve explicit initial state 2026-05-02 19:53:40 +00:00
jkunz 26bf48e87a v1.5.0
Default (tags) / security (push) Failing after 1s
Default (tags) / test (push) Failing after 1s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-05-02 19:10:06 +00:00
jkunz fd53bc3db8 feat(elements): add reusable context menu element for recipient role selection 2026-05-02 19:10:06 +00:00
9 changed files with 311 additions and 26 deletions
+20
View File
@@ -1,5 +1,25 @@
# Changelog # Changelog
## 2026-05-02 - 1.6.0 - feat(workspace)
support configurable inbox documents and emit document-open events
- Adds a documents property to the workspace and inbox components so document lists, counts, filters, and attention metrics use injected data instead of demo data.
- Passes documents from the workspace container into the inbox view for consistent sidebar and inbox counts.
- Emits a bubbling document-open event when an inbox item is opened to enable parent integrations and external handling.
## 2026-05-02 - 1.5.1 - fix(sdig-workspace)
make workspace view externally controllable and preserve explicit initial state
- change the workspace view from internal state to a reflected public property
- only apply initialView during connection when no non-default view has already been set
## 2026-05-02 - 1.5.0 - feat(elements)
add reusable context menu element for recipient role selection
- introduces a new sdig-contextmenu web component with configurable actions, selection state, and viewport-aware positioning
- exports the new context menu from the shared elements index
- refactors workspace compose to use the reusable context menu for recipient role changes while preserving signer role safeguards
## 2026-05-02 - 1.4.0 - feat(workspace-compose) ## 2026-05-02 - 1.4.0 - feat(workspace-compose)
add recipient routing roles and drag-and-drop routing management add recipient routing roles and drag-and-drop routing management
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@signature.digital/catalog", "name": "@signature.digital/catalog",
"version": "1.4.0", "version": "1.6.0",
"private": false, "private": false,
"description": "A comprehensive catalog of customizable web components designed for building and managing e-signature applications.", "description": "A comprehensive catalog of customizable web components designed for building and managing e-signature applications.",
"exports": { "exports": {
+1 -1
View File
@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@signature.digital/catalog', name: '@signature.digital/catalog',
version: '1.4.0', version: '1.6.0',
description: 'A comprehensive catalog of customizable web components designed for building and managing e-signature applications.' description: 'A comprehensive catalog of customizable web components designed for building and managing e-signature applications.'
} }
+1
View File
@@ -1,4 +1,5 @@
// Signature components // Signature components
export * from './sdig-contextmenu/index.js';
export * from './sdig-signbox/index.js'; export * from './sdig-signbox/index.js';
export * from './sdig-signpad/index.js'; export * from './sdig-signpad/index.js';
@@ -0,0 +1 @@
export * from './sdig-contextmenu.js';
@@ -0,0 +1,234 @@
import { DeesElement, property, state, html, customElement, type TemplateResult, css } from '@design.estate/dees-element';
export interface ISdigContextMenuAction {
id: string;
label: string;
description?: string;
selected?: boolean;
disabled?: boolean;
danger?: boolean;
}
export interface ISdigContextMenuActionEventDetail {
id: string;
action: ISdigContextMenuAction;
}
type TMenuPosition = {
x: number;
y: number;
ready: boolean;
};
declare global {
interface HTMLElementTagNameMap {
'sdig-contextmenu': SdigContextmenu;
}
}
@customElement('sdig-contextmenu')
export class SdigContextmenu extends DeesElement {
public static demo = () => html`
<div style="position: relative; min-height: 260px; padding: 24px; --bg-card: hsl(0 0% 7%); --bg-input: hsl(0 0% 9%); --border: hsl(0 0% 14.9%); --border-subtle: hsl(0 0% 11%); --text: hsl(0 0% 98%); --text-sec: hsl(0 0% 63.9%); --text-muted: hsl(0 0% 48%); --hover: rgba(255,255,255,0.06); --error: #ef4444;">
<sdig-contextmenu
.anchorX=${80}
.anchorY=${70}
.title=${'Recipient'}
.actions=${[
{ id: 'signer', label: 'Needs signature', selected: true },
{ id: 'copy', label: 'Final copy only' },
{ id: 'updates', label: 'Every step update' },
]}
></sdig-contextmenu>
</div>
`;
public static demoGroups = ['Signature Digital Primitives'];
@property({ type: Number }) public accessor anchorX: number = 0;
@property({ type: Number }) public accessor anchorY: number = 0;
@property({ type: String }) public accessor title: string = '';
@property({ attribute: false }) public accessor actions: ISdigContextMenuAction[] = [];
@state() private accessor position: TMenuPosition = { x: 0, y: 0, ready: false };
private positionUpdateFrame: number | null = null;
public static styles = css`
:host { display: contents; }
.menu {
position: fixed;
z-index: 1000;
min-width: 190px;
max-width: min(280px, calc(100vw - 16px));
padding: 6px;
border: 1px solid var(--border, hsl(0 0% 14.9%));
border-radius: 8px;
background: var(--bg-card, hsl(0 0% 7%));
color: var(--text, hsl(0 0% 98%));
box-shadow: 0 16px 42px rgba(0,0,0,0.36);
box-sizing: border-box;
}
.title {
padding: 7px 8px;
margin-bottom: 4px;
border-bottom: 1px solid var(--border-subtle, hsl(0 0% 11%));
font-size: 11px;
font-weight: 700;
color: var(--text-sec, hsl(0 0% 63.9%));
}
.action {
width: 100%;
min-height: 34px;
padding: 8px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--text-sec, hsl(0 0% 63.9%));
display: flex;
align-items: center;
gap: 8px;
text-align: left;
font: inherit;
font-size: 11px;
cursor: pointer;
}
.action:hover { background: var(--hover, rgba(255,255,255,0.06)); color: var(--text, hsl(0 0% 98%)); }
.action.danger { color: var(--error, #ef4444); }
.action[disabled] { opacity: 0.45; cursor: not-allowed; }
.action[disabled]:hover { background: transparent; color: var(--text-sec, hsl(0 0% 63.9%)); }
.action-mark {
width: 12px;
height: 12px;
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.action-mark.selected::before {
content: '';
width: 7px;
height: 4px;
border-left: 1.5px solid currentColor;
border-bottom: 1.5px solid currentColor;
transform: rotate(-45deg) translate(1px, -1px);
}
.action-copy {
min-width: 0;
display: flex;
flex-direction: column;
gap: 2px;
}
.action-label {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.action-description {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: var(--text-muted, hsl(0 0% 48%));
font-size: 10px;
line-height: 1.25;
}
`;
public connectedCallback = async () => {
await super.connectedCallback();
window.addEventListener('resize', this.queuePositionUpdate);
};
public disconnectedCallback = async () => {
window.removeEventListener('resize', this.queuePositionUpdate);
if (this.positionUpdateFrame !== null) {
globalThis.cancelAnimationFrame(this.positionUpdateFrame);
this.positionUpdateFrame = null;
}
await super.disconnectedCallback();
};
public updated() {
this.queuePositionUpdate();
}
private queuePositionUpdate = () => {
if (this.positionUpdateFrame !== null) return;
this.positionUpdateFrame = globalThis.requestAnimationFrame(() => {
this.positionUpdateFrame = null;
this.positionMenu();
});
};
private positionMenu() {
const menu = this.shadowRoot?.querySelector('.menu') as HTMLElement | null;
if (!menu) return;
const margin = 8;
const gap = 4;
const rect = menu.getBoundingClientRect();
const viewportWidth = globalThis.innerWidth;
const viewportHeight = globalThis.innerHeight;
const spaceRight = viewportWidth - this.anchorX - margin;
const spaceLeft = this.anchorX - margin;
const spaceBelow = viewportHeight - this.anchorY - margin;
const spaceAbove = this.anchorY - margin;
let x = this.anchorX + gap;
let y = this.anchorY + gap;
if (spaceRight < rect.width + gap && spaceLeft > spaceRight) {
x = this.anchorX - rect.width - gap;
}
if (spaceBelow < rect.height + gap && spaceAbove > spaceBelow) {
y = this.anchorY - rect.height - gap;
}
const maxX = Math.max(margin, viewportWidth - rect.width - margin);
const maxY = Math.max(margin, viewportHeight - rect.height - margin);
const nextPosition = {
x: Math.round(Math.max(margin, Math.min(maxX, x))),
y: Math.round(Math.max(margin, Math.min(maxY, y))),
ready: true,
};
if (this.position.x !== nextPosition.x || this.position.y !== nextPosition.y || this.position.ready !== nextPosition.ready) {
this.position = nextPosition;
}
}
private selectAction(action: ISdigContextMenuAction) {
if (action.disabled) return;
this.dispatchEvent(new CustomEvent<ISdigContextMenuActionEventDetail>('contextmenu-action', {
detail: { id: action.id, action },
bubbles: true,
composed: true,
}));
}
public render(): TemplateResult {
const x = this.position.ready ? this.position.x : this.anchorX;
const y = this.position.ready ? this.position.y : this.anchorY;
return html`
<div class="menu" style="left: ${x}px; top: ${y}px; visibility: ${this.position.ready ? 'visible' : 'hidden'};" @click=${(event: Event) => event.stopPropagation()} @contextmenu=${(event: Event) => event.preventDefault()}>
${this.title ? html`<div class="title">${this.title}</div>` : ''}
${this.actions.map((action) => html`
<button class="action ${action.danger ? 'danger' : ''}" ?disabled=${action.disabled} @click=${() => this.selectAction(action)}>
<span class="action-mark ${action.selected ? 'selected' : ''}"></span>
<span class="action-copy">
<span class="action-label">${action.label}</span>
${action.description ? html`<span class="action-description">${action.description}</span>` : ''}
</span>
</button>
`)}
</div>
`;
}
}
@@ -1,5 +1,7 @@
import { DeesElement, state, html, customElement, type TemplateResult, css } from '@design.estate/dees-element'; import { DeesElement, state, html, customElement, type TemplateResult, css } from '@design.estate/dees-element';
import { actionButton, demoFields, demoRecipients, fakeDocument, icon, pill, topBar, workspaceBaseStyles, workspaceDemoFrame, type IFieldPlacement, type IRecipient, type TRecipientRole } from './sdig-workspace.shared.js'; import { actionButton, demoFields, demoRecipients, fakeDocument, icon, pill, topBar, workspaceBaseStyles, workspaceDemoFrame, type IFieldPlacement, type IRecipient, type TRecipientRole } from './sdig-workspace.shared.js';
import '../sdig-contextmenu/index.js';
import { type ISdigContextMenuAction, type ISdigContextMenuActionEventDetail } from '../sdig-contextmenu/index.js';
declare global { declare global {
interface HTMLElementTagNameMap { interface HTMLElementTagNameMap {
@@ -109,11 +111,6 @@ export class SdigWorkspaceCompose extends DeesElement {
.signing-placeholder { position: absolute; left: 0; right: 0; top: var(--routing-top); height: var(--routing-row-height); border: 1.5px dashed var(--accent); border-radius: 6px; background: transparent; pointer-events: none; transition: top 0.16s ease; } .signing-placeholder { position: absolute; left: 0; right: 0; top: var(--routing-top); height: var(--routing-row-height); border: 1.5px dashed var(--accent); border-radius: 6px; background: transparent; pointer-events: none; transition: top 0.16s ease; }
.signing-drag-overlay { position: absolute; left: 0; right: 0; z-index: 6; top: var(--routing-top); margin-bottom: 0; cursor: grabbing; pointer-events: none; border-color: var(--accent); box-shadow: 0 10px 28px rgba(0,0,0,0.28); transform: scale(1.015); } .signing-drag-overlay { position: absolute; left: 0; right: 0; z-index: 6; top: var(--routing-top); margin-bottom: 0; cursor: grabbing; pointer-events: none; border-color: var(--accent); box-shadow: 0 10px 28px rgba(0,0,0,0.28); transform: scale(1.015); }
.role-hint { margin-top: -2px; margin-bottom: 10px; font-size: 10px; line-height: 1.45; color: var(--text-muted); } .role-hint { margin-top: -2px; margin-bottom: 10px; font-size: 10px; line-height: 1.45; color: var(--text-muted); }
.recipient-context-menu { position: fixed; z-index: 100; min-width: 190px; padding: 6px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-card); box-shadow: 0 16px 42px rgba(0,0,0,0.36); }
.recipient-context-title { padding: 7px 8px; font-size: 11px; font-weight: 700; color: var(--text-sec); border-bottom: 1px solid var(--border-subtle); margin-bottom: 4px; }
.context-action { width: 100%; padding: 8px; border-radius: 6px; background: transparent; color: var(--text-sec); display: flex; align-items: center; gap: 8px; text-align: left; font-size: 11px; }
.context-action:hover { background: var(--hover); color: var(--text); }
.context-action[disabled] { opacity: 0.45; cursor: not-allowed; }
.page-drop-target { outline: 1px dashed transparent; outline-offset: 8px; } .page-drop-target { outline: 1px dashed transparent; outline-offset: 8px; }
.page-drop-target.drag-over { outline-color: var(--accent); } .page-drop-target.drag-over { outline-color: var(--accent); }
.field-box { user-select: none; touch-action: none; } .field-box { user-select: none; touch-action: none; }
@@ -247,6 +244,23 @@ export class SdigWorkspaceCompose extends DeesElement {
this.recipientContextMenu = null; this.recipientContextMenu = null;
}; };
private recipientContextMenuActions(recipient: IRecipient): ISdigContextMenuAction[] {
const signerCount = this.signingRecipients().length;
return recipientRoleDefinitions.map((roleDefinition) => ({
id: roleDefinition.role,
label: roleDefinition.label,
selected: recipient.role === roleDefinition.role,
disabled: recipient.role === 'signer' && roleDefinition.role !== 'signer' && signerCount <= 1,
}));
}
private handleRecipientContextMenuAction(event: CustomEvent<ISdigContextMenuActionEventDetail>, recipient: IRecipient) {
const role = event.detail.id as TRecipientRole;
if (!recipientRoleDefinitions.some((roleDefinition) => roleDefinition.role === role)) return;
this.updateRecipientRole(recipient.id, role);
this.closeRecipientContextMenu();
}
private handleDocumentClick = (event: MouseEvent) => { private handleDocumentClick = (event: MouseEvent) => {
const target = event.target as HTMLElement | null; const target = event.target as HTMLElement | null;
if (target?.closest('.field-box')) return; if (target?.closest('.field-box')) return;
@@ -528,11 +542,15 @@ export class SdigWorkspaceCompose extends DeesElement {
if (!this.recipientContextMenu) return html``; if (!this.recipientContextMenu) return html``;
const recipient = this.recipients.find((currentRecipient) => currentRecipient.id === this.recipientContextMenu?.recipientId); const recipient = this.recipients.find((currentRecipient) => currentRecipient.id === this.recipientContextMenu?.recipientId);
if (!recipient) return html``; if (!recipient) return html``;
const signerCount = this.signingRecipients().length; return html`
return html`<div class="recipient-context-menu" style="left: ${this.recipientContextMenu.x}px; top: ${this.recipientContextMenu.y}px;" @click=${(event: Event) => event.stopPropagation()}> <sdig-contextmenu
<div class="recipient-context-title">${recipient.name}</div> .anchorX=${this.recipientContextMenu.x}
${recipientRoleDefinitions.map((roleDefinition) => html`<button class="context-action" ?disabled=${recipient.role === 'signer' && roleDefinition.role !== 'signer' && signerCount <= 1} @click=${() => { this.updateRecipientRole(recipient.id, roleDefinition.role); this.closeRecipientContextMenu(); }}>${recipient.role === roleDefinition.role ? icon('check', 12) : html`<span style="width: 12px;"></span>`}<span>${roleDefinition.label}</span></button>`)} .anchorY=${this.recipientContextMenu.y}
</div>`; .title=${recipient.name}
.actions=${this.recipientContextMenuActions(recipient)}
@contextmenu-action=${(event: CustomEvent<ISdigContextMenuActionEventDetail>) => this.handleRecipientContextMenuAction(event, recipient)}
></sdig-contextmenu>
`;
} }
private renderStepper(): TemplateResult { private renderStepper(): TemplateResult {
@@ -14,6 +14,7 @@ export class SdigWorkspaceInbox extends DeesElement {
public static demoGroups = ['Signature Digital Workspace']; public static demoGroups = ['Signature Digital Workspace'];
@property({ type: String }) public accessor density: TDensity = 'comfortable'; @property({ type: String }) public accessor density: TDensity = 'comfortable';
@property({ attribute: false }) public accessor documents: IDocumentRow[] = demoDocuments;
@state() private accessor filter: string = 'all'; @state() private accessor filter: string = 'all';
@state() private accessor search: string = ''; @state() private accessor search: string = '';
@@ -45,7 +46,7 @@ export class SdigWorkspaceInbox extends DeesElement {
`]; `];
private get filteredDocuments(): IDocumentRow[] { private get filteredDocuments(): IDocumentRow[] {
return demoDocuments return this.documents
.filter((doc) => this.filter === 'all' || doc.status === this.filter) .filter((doc) => this.filter === 'all' || doc.status === this.filter)
.filter((doc) => !this.search || doc.title.toLowerCase().includes(this.search.toLowerCase())); .filter((doc) => !this.search || doc.title.toLowerCase().includes(this.search.toLowerCase()));
} }
@@ -62,23 +63,30 @@ export class SdigWorkspaceInbox extends DeesElement {
} }
private openDocument(doc: IDocumentRow) { private openDocument(doc: IDocumentRow) {
this.dispatchEvent(new CustomEvent('document-open', {
detail: { document: doc },
bubbles: true,
composed: true,
}));
requestWorkspaceView(this, doc.status === 'signed' ? 'audit' : 'sign'); requestWorkspaceView(this, doc.status === 'signed' ? 'audit' : 'sign');
} }
public render(): TemplateResult { public render(): TemplateResult {
const documents = this.documents;
const filters = [ const filters = [
{ id: 'all', label: 'All', count: demoDocuments.length }, { id: 'all', label: 'All', count: documents.length },
{ id: 'awaiting', label: 'Awaiting', count: demoDocuments.filter((doc) => doc.status === 'awaiting').length }, { id: 'awaiting', label: 'Awaiting', count: documents.filter((doc) => doc.status === 'awaiting').length },
{ id: 'signed', label: 'Completed', count: demoDocuments.filter((doc) => doc.status === 'signed').length }, { id: 'signed', label: 'Completed', count: documents.filter((doc) => doc.status === 'signed').length },
{ id: 'draft', label: 'Drafts', count: demoDocuments.filter((doc) => doc.status === 'draft').length }, { id: 'draft', label: 'Drafts', count: documents.filter((doc) => doc.status === 'draft').length },
{ id: 'declined', label: 'Declined', count: demoDocuments.filter((doc) => doc.status === 'declined').length }, { id: 'declined', label: 'Declined', count: documents.filter((doc) => doc.status === 'declined').length },
]; ];
const attentionCount = documents.filter((doc) => doc.status === 'awaiting').length;
return html` return html`
${topBar({ ${topBar({
breadcrumb: ['signature.digital', 'Lossless GmbH', 'Inbox'], breadcrumb: ['signature.digital', 'Lossless GmbH', 'Inbox'],
title: 'Inbox', title: 'Inbox',
subtitle: pill(`${demoDocuments.filter((doc) => doc.status === 'awaiting').length} need attention`, 'info'), subtitle: pill(`${attentionCount} need attention`, 'info'),
actions: html`${actionButton('Import', 'outline', 'upload')}${actionButton('New document', 'primary', 'plus', () => requestWorkspaceView(this, 'compose'))}`, actions: html`${actionButton('Import', 'outline', 'upload')}${actionButton('New document', 'primary', 'plus', () => requestWorkspaceView(this, 'compose'))}`,
})} })}
<div class="filterbar"> <div class="filterbar">
@@ -1,5 +1,5 @@
import { DeesElement, property, state, html, customElement, type TemplateResult, css } from '@design.estate/dees-element'; import { DeesElement, property, html, customElement, type TemplateResult, css } from '@design.estate/dees-element';
import { icon, type TDensity, type TWorkspaceTheme, type TWorkspaceView } from './sdig-workspace.shared.js'; import { demoDocuments, icon, type IDocumentRow, type TDensity, type TWorkspaceTheme, type TWorkspaceView } from './sdig-workspace.shared.js';
import './sdig-workspace-inbox.js'; import './sdig-workspace-inbox.js';
import './sdig-workspace-compose.js'; import './sdig-workspace-compose.js';
import './sdig-workspace-sign.js'; import './sdig-workspace-sign.js';
@@ -22,11 +22,14 @@ export class SdigWorkspace extends DeesElement {
@property({ type: String }) public accessor density: TDensity = 'comfortable'; @property({ type: String }) public accessor density: TDensity = 'comfortable';
@property({ type: String, reflect: true }) public accessor theme: TWorkspaceTheme = 'dark'; @property({ type: String, reflect: true }) public accessor theme: TWorkspaceTheme = 'dark';
@property({ type: String }) public accessor initialView: TWorkspaceView = 'inbox'; @property({ type: String }) public accessor initialView: TWorkspaceView = 'inbox';
@state() private accessor view: TWorkspaceView = 'inbox'; @property({ type: String, reflect: true }) public accessor view: TWorkspaceView = 'inbox';
@property({ attribute: false }) public accessor documents: IDocumentRow[] = demoDocuments;
public connectedCallback = async () => { public connectedCallback = async () => {
await super.connectedCallback(); await super.connectedCallback();
this.view = this.initialView || 'inbox'; if (this.view === 'inbox' && this.initialView !== 'inbox') {
this.view = this.initialView;
}
this.addEventListener('workspace-view-request', this.handleViewRequest as EventListener); this.addEventListener('workspace-view-request', this.handleViewRequest as EventListener);
}; };
@@ -131,7 +134,7 @@ export class SdigWorkspace extends DeesElement {
private renderSidebar(): TemplateResult { private renderSidebar(): TemplateResult {
const navItems = [ const navItems = [
{ id: 'inbox', label: 'Inbox', icon: 'inbox', count: 4 }, { id: 'inbox', label: 'Inbox', icon: 'inbox', count: this.documents.length },
{ id: 'compose', label: 'Compose', icon: 'plus' }, { id: 'compose', label: 'Compose', icon: 'plus' },
{ id: 'templates', label: 'Templates', icon: 'folder', count: 12 }, { id: 'templates', label: 'Templates', icon: 'folder', count: 12 },
{ id: 'audit', label: 'Audit Trail', icon: 'shield' }, { id: 'audit', label: 'Audit Trail', icon: 'shield' },
@@ -157,7 +160,7 @@ export class SdigWorkspace extends DeesElement {
private renderView(): TemplateResult { private renderView(): TemplateResult {
switch (this.view) { switch (this.view) {
case 'inbox': return html`<sdig-workspace-inbox class="view-host" .density=${this.density}></sdig-workspace-inbox>`; case 'inbox': return html`<sdig-workspace-inbox class="view-host" .density=${this.density} .documents=${this.documents}></sdig-workspace-inbox>`;
case 'compose': return html`<sdig-workspace-compose class="view-host"></sdig-workspace-compose>`; case 'compose': return html`<sdig-workspace-compose class="view-host"></sdig-workspace-compose>`;
case 'sign': return html`<sdig-workspace-sign class="view-host"></sdig-workspace-sign>`; case 'sign': return html`<sdig-workspace-sign class="view-host"></sdig-workspace-sign>`;
case 'audit': return html`<sdig-workspace-audit class="view-host"></sdig-workspace-audit>`; case 'audit': return html`<sdig-workspace-audit class="view-host"></sdig-workspace-audit>`;
@@ -165,7 +168,7 @@ export class SdigWorkspace extends DeesElement {
case 'templates': return html`<sdig-workspace-placeholder class="view-host" label="Templates" subtitle="Reusable agreement templates"></sdig-workspace-placeholder>`; case 'templates': return html`<sdig-workspace-placeholder class="view-host" label="Templates" subtitle="Reusable agreement templates"></sdig-workspace-placeholder>`;
case 'team': return html`<sdig-workspace-placeholder class="view-host" label="Team" subtitle="Workspace members & roles"></sdig-workspace-placeholder>`; case 'team': return html`<sdig-workspace-placeholder class="view-host" label="Team" subtitle="Workspace members & roles"></sdig-workspace-placeholder>`;
case 'settings': return html`<sdig-workspace-placeholder class="view-host" label="Settings" subtitle="Workspace, billing, security"></sdig-workspace-placeholder>`; case 'settings': return html`<sdig-workspace-placeholder class="view-host" label="Settings" subtitle="Workspace, billing, security"></sdig-workspace-placeholder>`;
default: return html`<sdig-workspace-inbox class="view-host" .density=${this.density}></sdig-workspace-inbox>`; default: return html`<sdig-workspace-inbox class="view-host" .density=${this.density} .documents=${this.documents}></sdig-workspace-inbox>`;
} }
} }