@signature.digital/catalog 1.3.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/.smartconfig.json +82 -0
- package/dist_bundle/bundle.js +6077 -0
- package/dist_bundle/bundle.js.map +7 -0
- package/dist_bundle/index.html +28 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/elements/index.d.ts +3 -0
- package/dist_ts_web/elements/index.js +6 -0
- package/dist_ts_web/elements/sdig-signbox/index.d.ts +1 -0
- package/dist_ts_web/elements/sdig-signbox/index.js +2 -0
- package/dist_ts_web/elements/sdig-signbox/sdig-signbox.d.ts +13 -0
- package/dist_ts_web/elements/sdig-signbox/sdig-signbox.js +153 -0
- package/dist_ts_web/elements/sdig-signpad/index.d.ts +1 -0
- package/dist_ts_web/elements/sdig-signpad/index.js +2 -0
- package/dist_ts_web/elements/sdig-signpad/sdig-signpad.d.ts +22 -0
- package/dist_ts_web/elements/sdig-signpad/sdig-signpad.js +149 -0
- package/dist_ts_web/elements/sdig-workspace/index.d.ts +8 -0
- package/dist_ts_web/elements/sdig-workspace/index.js +9 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-audit.d.ts +12 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-audit.js +81 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-compose.d.ts +44 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-compose.js +418 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-developers.d.ts +12 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-developers.js +91 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-inbox.d.ts +19 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-inbox.js +181 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-placeholder.d.ts +14 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-placeholder.js +84 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-sign.d.ts +18 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace-sign.js +152 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace.d.ts +31 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace.js +245 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace.shared.d.ts +53 -0
- package/dist_ts_web/elements/sdig-workspace/sdig-workspace.shared.js +385 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +2 -0
- package/dist_ts_web/pages/index.d.ts +2 -0
- package/dist_ts_web/pages/index.js +3 -0
- package/dist_ts_web/pages/page1.d.ts +1 -0
- package/dist_ts_web/pages/page1.js +5 -0
- package/dist_ts_web/pages/page2.d.ts +1 -0
- package/dist_ts_web/pages/page2.js +5 -0
- package/dist_ts_web/plugins.d.ts +3 -0
- package/dist_ts_web/plugins.js +5 -0
- package/dist_watch/bundle.js +135319 -0
- package/dist_watch/bundle.js.map +7 -0
- package/dist_watch/index.html +28 -0
- package/license +19 -0
- package/package.json +63 -0
- package/readme.hints.md +31 -0
- package/readme.md +172 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/elements/index.ts +6 -0
- package/ts_web/elements/sdig-signbox/index.ts +1 -0
- package/ts_web/elements/sdig-signbox/sdig-signbox.ts +109 -0
- package/ts_web/elements/sdig-signpad/index.ts +1 -0
- package/ts_web/elements/sdig-signpad/sdig-signpad.ts +115 -0
- package/ts_web/elements/sdig-workspace/index.ts +8 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-audit.ts +37 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-compose.ts +369 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-developers.ts +47 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-inbox.ts +117 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-placeholder.ts +22 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace-sign.ts +91 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace.shared.ts +440 -0
- package/ts_web/elements/sdig-workspace/sdig-workspace.ts +175 -0
- package/ts_web/index.ts +1 -0
- package/ts_web/pages/index.ts +2 -0
- package/ts_web/pages/page1.ts +5 -0
- package/ts_web/pages/page2.ts +5 -0
- package/ts_web/plugins.ts +8 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { DeesElement, property, state, html, customElement, type TemplateResult, css } from '@design.estate/dees-element';
|
|
2
|
+
import { icon, type TDensity, type TWorkspaceTheme, type TWorkspaceView } from './sdig-workspace.shared.js';
|
|
3
|
+
import './sdig-workspace-inbox.js';
|
|
4
|
+
import './sdig-workspace-compose.js';
|
|
5
|
+
import './sdig-workspace-sign.js';
|
|
6
|
+
import './sdig-workspace-audit.js';
|
|
7
|
+
import './sdig-workspace-developers.js';
|
|
8
|
+
import './sdig-workspace-placeholder.js';
|
|
9
|
+
|
|
10
|
+
declare global {
|
|
11
|
+
interface HTMLElementTagNameMap {
|
|
12
|
+
'sdig-workspace': SdigWorkspace;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@customElement('sdig-workspace')
|
|
17
|
+
export class SdigWorkspace extends DeesElement {
|
|
18
|
+
public static demo = () => html`<sdig-workspace></sdig-workspace>`;
|
|
19
|
+
public static demoGroups = ['Signature Digital Workspace'];
|
|
20
|
+
|
|
21
|
+
@property({ type: String }) public accessor accent: string = '#3b82f6';
|
|
22
|
+
@property({ type: String }) public accessor density: TDensity = 'comfortable';
|
|
23
|
+
@property({ type: String, reflect: true }) public accessor theme: TWorkspaceTheme = 'dark';
|
|
24
|
+
@property({ type: String }) public accessor initialView: TWorkspaceView = 'inbox';
|
|
25
|
+
@state() private accessor view: TWorkspaceView = 'inbox';
|
|
26
|
+
|
|
27
|
+
public connectedCallback = async () => {
|
|
28
|
+
await super.connectedCallback();
|
|
29
|
+
this.view = this.initialView || 'inbox';
|
|
30
|
+
this.addEventListener('workspace-view-request', this.handleViewRequest as EventListener);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
public disconnectedCallback = async () => {
|
|
34
|
+
this.removeEventListener('workspace-view-request', this.handleViewRequest as EventListener);
|
|
35
|
+
await super.disconnectedCallback();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
public static styles = css`
|
|
39
|
+
:host {
|
|
40
|
+
display: block;
|
|
41
|
+
width: 100%;
|
|
42
|
+
height: 100%;
|
|
43
|
+
min-height: 720px;
|
|
44
|
+
--accent: #3b82f6;
|
|
45
|
+
--bg: hsl(0 0% 3.9%);
|
|
46
|
+
--bg-el: hsl(0 0% 6%);
|
|
47
|
+
--bg-card: hsl(0 0% 7%);
|
|
48
|
+
--bg-input: hsl(0 0% 9%);
|
|
49
|
+
--border: hsl(0 0% 14.9%);
|
|
50
|
+
--border-subtle: hsl(0 0% 11%);
|
|
51
|
+
--border-strong: hsl(0 0% 20%);
|
|
52
|
+
--text: hsl(0 0% 98%);
|
|
53
|
+
--text-sec: hsl(0 0% 63.9%);
|
|
54
|
+
--text-muted: hsl(0 0% 48%);
|
|
55
|
+
--text-dim: hsl(0 0% 32%);
|
|
56
|
+
--hover: rgba(255,255,255,0.06);
|
|
57
|
+
--hover-subtle: rgba(255,255,255,0.03);
|
|
58
|
+
--row-hover: rgba(255,255,255,0.025);
|
|
59
|
+
--success: #22c55e;
|
|
60
|
+
--warning: #f59e0b;
|
|
61
|
+
--error: #ef4444;
|
|
62
|
+
font-family: Geist, Inter, Roboto, -apple-system, BlinkMacSystemFont, sans-serif;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
:host([theme='light']) {
|
|
66
|
+
--bg: hsl(0 0% 99%);
|
|
67
|
+
--bg-el: hsl(0 0% 97%);
|
|
68
|
+
--bg-card: hsl(0 0% 100%);
|
|
69
|
+
--bg-input: hsl(0 0% 98%);
|
|
70
|
+
--border: hsl(0 0% 90%);
|
|
71
|
+
--border-subtle: hsl(0 0% 93%);
|
|
72
|
+
--border-strong: hsl(0 0% 80%);
|
|
73
|
+
--text: hsl(0 0% 9%);
|
|
74
|
+
--text-sec: hsl(0 0% 32%);
|
|
75
|
+
--text-muted: hsl(0 0% 45%);
|
|
76
|
+
--text-dim: hsl(0 0% 62%);
|
|
77
|
+
--hover: rgba(0,0,0,0.04);
|
|
78
|
+
--hover-subtle: rgba(0,0,0,0.02);
|
|
79
|
+
--row-hover: rgba(0,0,0,0.02);
|
|
80
|
+
--success: #16a34a;
|
|
81
|
+
--warning: #d97706;
|
|
82
|
+
--error: #dc2626;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
* { box-sizing: border-box; }
|
|
86
|
+
button { font: inherit; border: 0; cursor: pointer; }
|
|
87
|
+
.workspace { display: flex; height: 100%; min-height: 720px; background: var(--bg); color: var(--text); overflow: hidden; }
|
|
88
|
+
.sidebar { width: 220px; background: var(--bg); border-right: 1px solid var(--border-subtle); display: flex; flex-direction: column; flex-shrink: 0; height: 100%; }
|
|
89
|
+
.brand { padding: 14px 16px 12px; display: flex; align-items: center; gap: 8px; }
|
|
90
|
+
.logomark { width: 26px; height: 26px; border-radius: 6px; background: var(--bg-el); border: 1px solid var(--border-strong); display: inline-flex; align-items: center; justify-content: center; font-family: 'Plus Jakarta Sans', Inter, sans-serif; font-size: 13px; font-weight: 700; position: relative; }
|
|
91
|
+
.logomark::after, .wordmark::after { content: ''; display: inline-block; border-radius: 50%; background: var(--accent); }
|
|
92
|
+
.logomark::after { width: 4px; height: 4px; position: absolute; right: 5px; bottom: 5px; }
|
|
93
|
+
.wordmark { font-size: 13px; font-weight: 500; letter-spacing: -0.02em; white-space: nowrap; }
|
|
94
|
+
.wordmark .dot { color: var(--text-muted); }
|
|
95
|
+
.wordmark::after { width: 4px; height: 4px; margin-left: 3px; transform: translateY(-1px); }
|
|
96
|
+
.workspace-card { margin: 0 12px 8px; padding: 7px 10px; background: var(--bg-el); border: 1px solid var(--border-subtle); border-radius: 6px; display: flex; align-items: center; gap: 8px; }
|
|
97
|
+
.workspace-badge { width: 18px; height: 18px; border-radius: 4px; background: linear-gradient(135deg, var(--accent), hsl(280 70% 60%)); color: white; font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
|
98
|
+
.workspace-name { font-size: 12px; font-weight: 500; line-height: 1.2; }
|
|
99
|
+
.workspace-plan { font-size: 10px; color: var(--text-muted); }
|
|
100
|
+
.nav-block { padding: 4px 0; }
|
|
101
|
+
.nav-item { display: flex; align-items: center; gap: 10px; padding: 7px 10px; margin: 1px 8px; border-radius: 6px; color: var(--text-muted); background: transparent; transition: all 0.1s ease; font-size: 13px; position: relative; width: calc(100% - 16px); text-align: left; }
|
|
102
|
+
.compact .nav-item { padding: 5px 10px; }
|
|
103
|
+
.nav-item:hover { background: var(--hover-subtle); color: var(--text-sec); }
|
|
104
|
+
.nav-item.active { background: var(--hover); color: var(--text); font-weight: 500; }
|
|
105
|
+
.nav-item.active::before { content: ''; position: absolute; left: -8px; width: 2px; height: 14px; border-radius: 2px; background: var(--accent); }
|
|
106
|
+
.nav-count { margin-left: auto; min-width: 18px; padding: 1px 6px; border-radius: 999px; background: var(--bg-el); color: var(--text-muted); font-size: 10px; text-align: center; }
|
|
107
|
+
.github-card { margin: 8px 12px; padding: 10px; border: 1px solid var(--border-subtle); border-radius: 6px; background: var(--bg-el); }
|
|
108
|
+
.sparkline { margin-top: 8px; display: flex; gap: 2px; align-items: flex-end; height: 18px; }
|
|
109
|
+
.sparkline span { flex: 1; background: var(--border-strong); border-radius: 1px; }
|
|
110
|
+
.sparkline span:nth-last-child(-n+4) { background: var(--accent); }
|
|
111
|
+
.user-card { padding: 8px 12px; border-top: 1px solid var(--border-subtle); display: flex; align-items: center; gap: 10px; }
|
|
112
|
+
.avatar { width: 26px; height: 26px; border-radius: 50%; background: var(--accent); color: white; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
|
113
|
+
.main { flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
|
|
114
|
+
.view-host { flex: 1; min-height: 0; display: flex; flex-direction: column; }
|
|
115
|
+
.statusbar { height: 24px; flex-shrink: 0; border-top: 1px solid var(--border-subtle); background: var(--bg); display: flex; align-items: center; padding: 0 16px; gap: 16px; font-size: 10px; color: var(--text-dim); font-family: 'Intel One Mono', ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
116
|
+
@media (max-width: 920px) { .workspace { flex-direction: column; min-height: 100vh; } .sidebar { width: 100%; height: auto; border-right: 0; border-bottom: 1px solid var(--border-subtle); } .brand, .workspace-card, .github-card, .user-card { display: none; } .nav-block { display: flex; overflow-x: auto; padding: 8px; } .nav-item { width: auto; margin: 0 2px; } .statusbar { display: none; } }
|
|
117
|
+
`;
|
|
118
|
+
|
|
119
|
+
private handleViewRequest = (event: CustomEvent<{ view: TWorkspaceView }>) => {
|
|
120
|
+
this.setView(event.detail.view);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
private setView(viewArg: TWorkspaceView) {
|
|
124
|
+
this.view = viewArg;
|
|
125
|
+
this.dispatchEvent(new CustomEvent('view-change', { detail: { view: viewArg }, bubbles: true, composed: true }));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private navButton(item: { id: TWorkspaceView; label: string; icon: string; count?: number }): TemplateResult {
|
|
129
|
+
return html`<button class="nav-item ${this.view === item.id ? 'active' : ''}" @click=${() => this.setView(item.id)}>${icon(item.icon, 15)}<span>${item.label}</span>${item.count !== undefined ? html`<span class="nav-count">${item.count}</span>` : ''}</button>`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private renderSidebar(): TemplateResult {
|
|
133
|
+
const navItems = [
|
|
134
|
+
{ id: 'inbox', label: 'Inbox', icon: 'inbox', count: 4 },
|
|
135
|
+
{ id: 'compose', label: 'Compose', icon: 'plus' },
|
|
136
|
+
{ id: 'templates', label: 'Templates', icon: 'folder', count: 12 },
|
|
137
|
+
{ id: 'audit', label: 'Audit Trail', icon: 'shield' },
|
|
138
|
+
{ id: 'developers', label: 'Developers', icon: 'code' },
|
|
139
|
+
] as Array<{ id: TWorkspaceView; label: string; icon: string; count?: number }>;
|
|
140
|
+
const lowerItems = [
|
|
141
|
+
{ id: 'team', label: 'Team', icon: 'user' },
|
|
142
|
+
{ id: 'settings', label: 'Settings', icon: 'settings' },
|
|
143
|
+
] as Array<{ id: TWorkspaceView; label: string; icon: string }>;
|
|
144
|
+
|
|
145
|
+
return html`
|
|
146
|
+
<aside class="sidebar">
|
|
147
|
+
<div class="brand"><span class="logomark">s</span><span class="wordmark">signature<span class="dot">.</span>digital</span></div>
|
|
148
|
+
<div class="workspace-card"><span class="workspace-badge">L</span><div style="flex: 1; min-width: 0;"><div class="workspace-name">Lossless GmbH</div><div class="workspace-plan">Cloud · Pro</div></div>${icon('chevronDown', 12)}</div>
|
|
149
|
+
<div class="nav-block">${navItems.map((item) => this.navButton(item))}</div>
|
|
150
|
+
<div style="flex: 1;"></div>
|
|
151
|
+
<div class="github-card"><div style="display: flex; align-items: center; gap: 6px; margin-bottom: 8px; font-size: 11px; color: var(--text-sec); font-family: 'Intel One Mono', ui-monospace;">${icon('github', 13)} signature-digital/core</div><div style="display: flex; gap: 12px; font-size: 11px; color: var(--text-muted);"><span>${icon('star', 11)} 8.2k</span><span>${icon('git', 11)} 248</span></div><div class="sparkline">${[3, 5, 2, 7, 4, 6, 8, 5, 9, 6, 4, 8, 7, 10].map((height) => html`<span style="height: ${height * 10}%"></span>`)}</div></div>
|
|
152
|
+
<div class="nav-block" style="border-top: 1px solid var(--border-subtle); padding-top: 8px;">${lowerItems.map((item) => this.navButton(item))}</div>
|
|
153
|
+
<div class="user-card"><span class="avatar">PK</span><div style="flex: 1; min-width: 0;"><div style="font-size: 12px; font-weight: 500;">Philipp K.</div><div style="font-family: 'Intel One Mono', ui-monospace; font-size: 10px; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis;">philipp@lossless.com</div></div>${icon('more', 14)}</div>
|
|
154
|
+
</aside>
|
|
155
|
+
`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
private renderView(): TemplateResult {
|
|
159
|
+
switch (this.view) {
|
|
160
|
+
case 'inbox': return html`<sdig-workspace-inbox class="view-host" .density=${this.density}></sdig-workspace-inbox>`;
|
|
161
|
+
case 'compose': return html`<sdig-workspace-compose class="view-host"></sdig-workspace-compose>`;
|
|
162
|
+
case 'sign': return html`<sdig-workspace-sign class="view-host"></sdig-workspace-sign>`;
|
|
163
|
+
case 'audit': return html`<sdig-workspace-audit class="view-host"></sdig-workspace-audit>`;
|
|
164
|
+
case 'developers': return html`<sdig-workspace-developers class="view-host"></sdig-workspace-developers>`;
|
|
165
|
+
case 'templates': return html`<sdig-workspace-placeholder class="view-host" label="Templates" subtitle="Reusable agreement templates"></sdig-workspace-placeholder>`;
|
|
166
|
+
case 'team': return html`<sdig-workspace-placeholder class="view-host" label="Team" subtitle="Workspace members & roles"></sdig-workspace-placeholder>`;
|
|
167
|
+
case 'settings': return html`<sdig-workspace-placeholder class="view-host" label="Settings" subtitle="Workspace, billing, security"></sdig-workspace-placeholder>`;
|
|
168
|
+
default: return html`<sdig-workspace-inbox class="view-host" .density=${this.density}></sdig-workspace-inbox>`;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public render(): TemplateResult {
|
|
173
|
+
return html`<div class="workspace ${this.density === 'compact' ? 'compact' : ''}" style="--accent: ${this.accent};" data-screen-label=${this.view}>${this.renderSidebar()}<main class="main">${this.renderView()}<div class="statusbar"><span style="display: inline-flex; align-items: center; gap: 5px;"><span style="width: 6px; height: 6px; border-radius: 50%; background: var(--success);"></span>api.signature.digital</span><span>eu-central-1</span><span>4 sigs queued</span><div style="flex: 1;"></div><span style="color: var(--accent);">Open Source · MIT</span><span>v0.42.1</span><span>${icon('git', 11)} main</span></div></main></div>`;
|
|
174
|
+
}
|
|
175
|
+
}
|
package/ts_web/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './elements/index.js';
|