@signature.digital/catalog 1.8.0 → 1.9.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.
Files changed (37) hide show
  1. package/dist_ts_web/00_commitinfo_data.js +3 -3
  2. package/dist_ts_web/elements/index.d.ts +1 -0
  3. package/dist_ts_web/elements/index.js +3 -1
  4. package/dist_ts_web/elements/sdig-app-shell/index.d.ts +1 -0
  5. package/dist_ts_web/elements/sdig-app-shell/index.js +2 -0
  6. package/dist_ts_web/elements/sdig-app-shell/sdig-app-shell.d.ts +38 -0
  7. package/dist_ts_web/elements/sdig-app-shell/sdig-app-shell.js +309 -0
  8. package/dist_ts_web/elements/sdig-signbox/sdig-signbox.js +6 -1
  9. package/dist_ts_web/elements/sdig-signpad/sdig-signpad.d.ts +4 -0
  10. package/dist_ts_web/elements/sdig-signpad/sdig-signpad.js +12 -2
  11. package/dist_ts_web/elements/sdig-workspace/sdig-workspace-audit.js +5 -5
  12. package/dist_ts_web/elements/sdig-workspace/sdig-workspace-compose.js +4 -4
  13. package/dist_ts_web/elements/sdig-workspace/sdig-workspace-developers.js +13 -15
  14. package/dist_ts_web/elements/sdig-workspace/sdig-workspace-inbox.js +12 -12
  15. package/dist_ts_web/elements/sdig-workspace/sdig-workspace.js +28 -28
  16. package/dist_ts_web/elements/sdig-workspace/sdig-workspace.shared.js +35 -34
  17. package/package.json +5 -12
  18. package/readme.md +54 -2
  19. package/ts_web/00_commitinfo_data.ts +2 -2
  20. package/ts_web/elements/index.ts +3 -0
  21. package/ts_web/elements/sdig-app-shell/index.ts +1 -0
  22. package/ts_web/elements/sdig-app-shell/sdig-app-shell.ts +200 -0
  23. package/ts_web/elements/sdig-signbox/sdig-signbox.ts +5 -0
  24. package/ts_web/elements/sdig-signpad/sdig-signpad.ts +12 -1
  25. package/ts_web/elements/sdig-workspace/sdig-workspace-audit.ts +4 -4
  26. package/ts_web/elements/sdig-workspace/sdig-workspace-compose.ts +3 -3
  27. package/ts_web/elements/sdig-workspace/sdig-workspace-developers.ts +12 -14
  28. package/ts_web/elements/sdig-workspace/sdig-workspace-inbox.ts +11 -11
  29. package/ts_web/elements/sdig-workspace/sdig-workspace.shared.ts +34 -33
  30. package/ts_web/elements/sdig-workspace/sdig-workspace.ts +27 -27
  31. package/.smartconfig.json +0 -95
  32. package/dist_bundle/bundle.js +0 -6218
  33. package/dist_bundle/bundle.js.map +0 -7
  34. package/dist_bundle/index.html +0 -28
  35. package/dist_watch/bundle.js +0 -135739
  36. package/dist_watch/bundle.js.map +0 -7
  37. package/dist_watch/index.html +0 -28
@@ -11,7 +11,7 @@ export const demoDocuments = [
11
11
  export const demoRecipients = [
12
12
  { id: 0, name: 'Sarah Chen', email: 'sarah@acme.com', color: '#60a5fa', order: 1, role: 'signer' },
13
13
  { id: 1, name: 'David Park', email: 'd.park@acme.com', color: '#fbbf24', order: 2, role: 'signer' },
14
- { id: 2, name: 'Philipp K.', email: 'philipp@lossless.com', color: '#3b82f6', order: 3, role: 'updates' },
14
+ { id: 2, name: 'Alex Example', email: 'alex@example.test', color: '#007aff', order: 3, role: 'copy' },
15
15
  ];
16
16
  export const demoFields = [
17
17
  { id: 'f1', type: 'signature', x: 60, y: 580, w: 200, h: 50, page: 1, recipient: 0, label: 'Signature' },
@@ -27,7 +27,7 @@ export const workspaceBaseStyles = css `
27
27
  min-height: 0;
28
28
  color: var(--text);
29
29
  background: var(--bg);
30
- font-family: Geist, Inter, Roboto, -apple-system, BlinkMacSystemFont, sans-serif;
30
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;
31
31
  font-feature-settings: 'cv11', 'tnum', 'cv05' 1;
32
32
  }
33
33
 
@@ -50,7 +50,8 @@ export const workspaceBaseStyles = css `
50
50
  align-items: center;
51
51
  justify-content: space-between;
52
52
  border-bottom: 1px solid var(--border-subtle);
53
- background: var(--bg);
53
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
54
+ backdrop-filter: saturate(180%) blur(20px);
54
55
  gap: 12px;
55
56
  }
56
57
 
@@ -73,10 +74,10 @@ export const workspaceBaseStyles = css `
73
74
  }
74
75
 
75
76
  .top-title > span:first-child {
76
- font-family: 'Plus Jakarta Sans', Inter, sans-serif;
77
- font-size: 18px;
78
- font-weight: 600;
79
- letter-spacing: -0.02em;
77
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", Arial, sans-serif;
78
+ font-size: 19px;
79
+ font-weight: 640;
80
+ letter-spacing: -0.022em;
80
81
  white-space: nowrap;
81
82
  overflow: hidden;
82
83
  text-overflow: ellipsis;
@@ -92,7 +93,7 @@ export const workspaceBaseStyles = css `
92
93
  .btn {
93
94
  height: 34px;
94
95
  padding: 0 14px;
95
- border-radius: 6px;
96
+ border-radius: 7px;
96
97
  font-size: 13px;
97
98
  font-weight: 500;
98
99
  letter-spacing: -0.01em;
@@ -167,7 +168,7 @@ export const workspaceBaseStyles = css `
167
168
  .card {
168
169
  background: var(--bg-card);
169
170
  border: 1px solid var(--border);
170
- border-radius: 8px;
171
+ border-radius: 12px;
171
172
  overflow: hidden;
172
173
  }
173
174
 
@@ -291,14 +292,14 @@ export const workspaceBaseStyles = css `
291
292
  }
292
293
  `;
293
294
  export function icon(name, size = 14) {
294
- return html `<dees-icon .icon=${iconMap[name] || iconMap.file} style="font-size: ${size}px;"></dees-icon>`;
295
+ return html `<dees-icon .icon=${iconMap[name] || iconMap.file} .iconSize=${size}></dees-icon>`;
295
296
  }
296
297
  const iconMap = {
297
298
  inbox: 'lucide:Inbox', plus: 'lucide:Plus', folder: 'lucide:Folder', shield: 'lucide:Shield', code: 'lucide:Code2',
298
299
  user: 'lucide:User', settings: 'lucide:Settings', upload: 'lucide:Upload', file: 'lucide:FileText', sign: 'lucide:PenTool',
299
300
  clock: 'lucide:Clock', search: 'lucide:Search', more: 'lucide:MoreHorizontal', send: 'lucide:Send', check: 'lucide:Check',
300
301
  eye: 'lucide:Eye', calendar: 'lucide:Calendar', type: 'lucide:Type', download: 'lucide:Download', hash: 'lucide:Hash',
301
- github: 'lucide:GitBranch', git: 'lucide:GitBranch', server: 'lucide:Server', star: 'lucide:Star', sparkle: 'lucide:Sparkles',
302
+ github: 'lucide:Github', git: 'lucide:GitBranch', server: 'lucide:Server', star: 'lucide:Star', sparkle: 'lucide:Sparkles',
302
303
  chevronRight: 'lucide:ChevronRight', chevronDown: 'lucide:ChevronDown', x: 'lucide:X', activity: 'lucide:Activity',
303
304
  };
304
305
  export function pill(label, tone = 'default', dot = false) {
@@ -320,9 +321,9 @@ export function topBar(config) {
320
321
  </div>
321
322
  `;
322
323
  }
323
- export function workspaceDemoFrame(content, theme = 'dark') {
324
+ export function workspaceDemoFrame(content, theme = 'light') {
324
325
  const darkVars = `
325
- --accent: #3b82f6;
326
+ --accent: #007aff;
326
327
  --bg: hsl(0 0% 3.9%);
327
328
  --bg-el: hsl(0 0% 6%);
328
329
  --bg-card: hsl(0 0% 7%);
@@ -342,37 +343,37 @@ export function workspaceDemoFrame(content, theme = 'dark') {
342
343
  --error: #ef4444;
343
344
  `;
344
345
  const lightVars = `
345
- --accent: #3b82f6;
346
- --bg: hsl(0 0% 99%);
347
- --bg-el: hsl(0 0% 97%);
346
+ --accent: #007aff;
347
+ --bg: hsl(0 0% 100%);
348
+ --bg-el: hsl(240 9% 96.5%);
348
349
  --bg-card: hsl(0 0% 100%);
349
- --bg-input: hsl(0 0% 98%);
350
- --border: hsl(0 0% 90%);
351
- --border-subtle: hsl(0 0% 93%);
352
- --border-strong: hsl(0 0% 80%);
353
- --text: hsl(0 0% 9%);
354
- --text-sec: hsl(0 0% 32%);
355
- --text-muted: hsl(0 0% 45%);
356
- --text-dim: hsl(0 0% 62%);
357
- --hover: rgba(0,0,0,0.04);
358
- --hover-subtle: rgba(0,0,0,0.02);
359
- --row-hover: rgba(0,0,0,0.02);
360
- --success: #16a34a;
361
- --warning: #d97706;
362
- --error: #dc2626;
350
+ --bg-input: hsl(0 0% 100%);
351
+ --border: hsl(240 6% 89%);
352
+ --border-subtle: hsl(240 6% 92.5%);
353
+ --border-strong: hsl(240 6% 80%);
354
+ --text: hsl(240 6% 11%);
355
+ --text-sec: hsl(240 4% 34%);
356
+ --text-muted: hsl(240 3% 52%);
357
+ --text-dim: hsl(240 3% 66%);
358
+ --hover: rgba(0,0,0,0.05);
359
+ --hover-subtle: rgba(0,0,0,0.028);
360
+ --row-hover: rgba(0,0,0,0.028);
361
+ --success: #34c759;
362
+ --warning: #ff9500;
363
+ --error: #ff3b30;
363
364
  `;
364
- return html `<div style="${theme === 'dark' ? darkVars : lightVars} height: 720px; min-height: 720px; background: var(--bg); color: var(--text); overflow: hidden; font-family: Geist, Inter, Roboto, -apple-system, BlinkMacSystemFont, sans-serif;">${content}</div>`;
365
+ return html `<div style="${theme === 'dark' ? darkVars : lightVars} height: 720px; min-height: 720px; background: var(--bg); color: var(--text); overflow: hidden; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif;">${content}</div>`;
365
366
  }
366
367
  export function fakeDocument() {
367
368
  return html `
368
369
  <div class="fake-document">
369
370
  <div class="fake-title">Master Services Agreement</div>
370
- <div class="mono" style="font-size: 10px; color: hsl(0 0% 45%); margin-bottom: 24px;">Effective: May 2, 2026 · Acme Corp ↔ Lossless GmbH</div>
371
+ <div class="mono" style="font-size: 10px; color: hsl(0 0% 45%); margin-bottom: 24px;">Effective: May 2, 2026 · Acme Corp ↔ Example Company</div>
371
372
  ${Array.from({ length: 18 }).map((_, index) => html `<div class="fake-line ${index % 5 === 0 ? 'heavy' : ''} ${index % 4 === 3 ? 'short' : ''}"></div>`)}
372
373
  <div style="height: 16px;"></div>
373
374
  ${Array.from({ length: 8 }).map((_, index) => html `<div class="fake-line ${index % 3 === 2 ? 'short' : ''}"></div>`)}
374
375
  <div style="margin-top: 60px; font-size: 10px; font-weight: 600; color: hsl(0 0% 35%);">SIGNED ON BEHALF OF ACME CORP</div>
375
- <div style="margin-top: 70px; font-size: 10px; font-weight: 600; color: hsl(0 0% 35%);">SIGNED ON BEHALF OF LOSSLESS GMBH</div>
376
+ <div style="margin-top: 70px; font-size: 10px; font-weight: 600; color: hsl(0 0% 35%);">SIGNED ON BEHALF OF EXAMPLE COMPANY</div>
376
377
  </div>
377
378
  `;
378
379
  }
@@ -383,4 +384,4 @@ export function requestWorkspaceView(element, view) {
383
384
  composed: true,
384
385
  }));
385
386
  }
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RpZy13b3Jrc3BhY2Uuc2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3NkaWctd29ya3NwYWNlL3NkaWctd29ya3NwYWNlLnNoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLG9GQUFvRixDQUFDO0FBZ0Q1RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQW1CO0lBQzNDLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDclUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUNwTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM3VSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ25QLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVB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
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RpZy13b3Jrc3BhY2Uuc2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3NkaWctd29ya3NwYWNlL3NkaWctd29ya3NwYWNlLnNoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLG9GQUFvRixDQUFDO0FBZ0Q1RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQW1CO0lBQzNDLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDclUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUNwTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM3VSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ25QLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVB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
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@signature.digital/catalog",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "private": false,
5
- "description": "A comprehensive catalog of customizable web components designed for building and managing e-signature applications.",
5
+ "description": "Reusable web components for browser-based signature capture and host-controlled e-signature application surfaces.",
6
6
  "exports": {
7
7
  ".": "./dist_ts_web/index.js"
8
8
  },
@@ -14,27 +14,20 @@
14
14
  "@design.estate/dees-domtools": "^2.5.6",
15
15
  "@design.estate/dees-element": "^2.2.4",
16
16
  "@design.estate/dees-wcctools": "^3.9.0",
17
- "@git.zone/tsrun": "^2.0.3",
17
+ "@git.zone/tsrun": "^2.0.5",
18
18
  "signature_pad": "^5.1.3"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@git.zone/tsbuild": "^4.4.2",
22
- "@git.zone/tsbundle": "2.10.4",
22
+ "@git.zone/tsbundle": "2.11.2",
23
23
  "@git.zone/tstest": "^3.6.6",
24
24
  "@git.zone/tswatch": "^3.3.5",
25
25
  "@push.rocks/projectinfo": "^5.1.0",
26
- "@types/node": "^25.9.1"
26
+ "@types/node": "^26.1.1"
27
27
  },
28
28
  "files": [
29
- "ts/**/*",
30
29
  "ts_web/**/*",
31
- "dist/**/*",
32
- "dist_*/**/*",
33
- "dist_ts/**/*",
34
30
  "dist_ts_web/**/*",
35
- "assets/**/*",
36
- "cli.js",
37
- ".smartconfig.json",
38
31
  "license",
39
32
  "readme.md"
40
33
  ],
package/readme.md CHANGED
@@ -28,6 +28,14 @@ Render the product workspace:
28
28
  <sdig-workspace accent="#3b82f6" density="comfortable" theme="dark"></sdig-workspace>
29
29
  ```
30
30
 
31
+ Render the host-controlled application shell:
32
+
33
+ ```html
34
+ <sdig-app-shell workspace-name="Example workspace" active-view="inbox">
35
+ <your-application-view></your-application-view>
36
+ </sdig-app-shell>
37
+ ```
38
+
31
39
  Render a standalone signature box:
32
40
 
33
41
  ```html
@@ -38,6 +46,7 @@ Render a standalone signature box:
38
46
 
39
47
  | Component | Tag | Purpose |
40
48
  |-----------|-----|---------|
49
+ | `SdigAppShell` | `<sdig-app-shell>` | Host-controlled responsive application chrome with a content slot and navigation intents |
41
50
  | `SdigWorkspace` | `<sdig-workspace>` | Product workspace shell with inbox, compose, signing, audit, developer, template, team, and settings views |
42
51
  | `SignBox` | `<sdig-signbox>` | Complete signature capture UI with clear, undo, and submit actions |
43
52
  | `SignPad` | `<sdig-signpad>` | Canvas-based signature capture primitive backed by `signature_pad` |
@@ -90,6 +99,45 @@ workspace?.addEventListener('view-change', (event) => {
90
99
 
91
100
  Child views can request navigation by dispatching `workspace-view-request` with `{ view }` in `detail`. The event bubbles and crosses the shadow boundary.
92
101
 
102
+ ## Controlled Application Shell
103
+
104
+ `sdig-app-shell` supplies presentation only. The host application owns routes, sessions, authorization, persistence, document state, and the slotted view. Set `navigationItems` as a property and respond to the composed `navigation-request` and `signout-request` events.
105
+
106
+ | Property | Type | Default | Description |
107
+ |----------|------|---------|-------------|
108
+ | `accent` | `string` | `#007aff` | Application accent color |
109
+ | `activeView` | `string` | `inbox` | ID of the active host view |
110
+ | `workspaceName` | `string` | `Workspace` | Visible workspace label |
111
+ | `deploymentLabel` | `string` | `Host configured` | Visible deployment label |
112
+ | `actorName` | `string` | `Current user` | Current actor label |
113
+ | `actorEmail` | `string` | empty | Current actor email label |
114
+ | `documentCount` | `number` | `0` | Factual document total shown in the status bar |
115
+ | `statusLabel` | `string` | `host controlled` | Host-supplied status text |
116
+ | `productLabel` | `string` | empty | Optional host-supplied product text |
117
+ | `stackLabel` | `string` | `Application services` | Host-supplied service-stack heading |
118
+ | `stackDescription` | `string` | `Configured by host application` | Host-supplied service-stack detail |
119
+ | `navigationItems` | `ISdigShellNavigationItem[]` | Inbox, Compose, Audit Trail | Host-owned navigation model |
120
+
121
+ ```typescript
122
+ const shell = document.querySelector('sdig-app-shell');
123
+
124
+ if (shell) {
125
+ shell.navigationItems = [
126
+ { id: 'inbox', label: 'Inbox', icon: 'inbox', count: 4 },
127
+ { id: 'compose', label: 'Compose', icon: 'plus' },
128
+ ];
129
+ }
130
+
131
+ shell?.addEventListener('navigation-request', (event) => {
132
+ const { view } = (event as CustomEvent<{ view: string }>).detail;
133
+ // Route using host application state.
134
+ });
135
+
136
+ shell?.addEventListener('signout-request', () => {
137
+ // End the host-owned session.
138
+ });
139
+ ```
140
+
93
141
  ## Signature Box
94
142
 
95
143
  Use `sdig-signbox` when you want the default capture UI with a heading, a signature pad, and built-in action controls:
@@ -102,12 +150,16 @@ Use `sdig-signbox` when you want the default capture UI with a heading, a signat
102
150
  const signbox = document.querySelector('sdig-signbox');
103
151
 
104
152
  signbox?.addEventListener('signature', (event) => {
105
- const { signature } = (event as CustomEvent<{ signature: unknown[] }>).detail;
153
+ const { signature, canvasWidth, canvasHeight } = (event as CustomEvent<{
154
+ signature: unknown[];
155
+ canvasWidth: number;
156
+ canvasHeight: number;
157
+ }>).detail;
106
158
  console.log(signature);
107
159
  });
108
160
  ```
109
161
 
110
- The `signature` event detail contains the `signature_pad` stroke data returned by `sdig-signpad.toData()`.
162
+ The `signature` event detail contains the `signature_pad` stroke data returned by `sdig-signpad.toData()` plus the actual responsive canvas dimensions used to capture it. Existing consumers that only read `signature` remain compatible.
111
163
 
112
164
  ## Signature Pad
113
165
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@signature.digital/catalog',
6
- version: '1.8.0',
7
- description: 'A comprehensive catalog of customizable web components designed for building and managing e-signature applications.'
6
+ version: '1.9.0',
7
+ description: 'Reusable web components for browser-based signature capture and host-controlled e-signature application surfaces.'
8
8
  }
@@ -3,5 +3,8 @@ export * from './sdig-contextmenu/index.js';
3
3
  export * from './sdig-signbox/index.js';
4
4
  export * from './sdig-signpad/index.js';
5
5
 
6
+ // Controlled product application primitives
7
+ export * from './sdig-app-shell/index.js';
8
+
6
9
  // Product workspace component
7
10
  export * from './sdig-workspace/index.js';
@@ -0,0 +1 @@
1
+ export * from './sdig-app-shell.js';
@@ -0,0 +1,200 @@
1
+ import {
2
+ DeesElement,
3
+ property,
4
+ html,
5
+ customElement,
6
+ type TemplateResult,
7
+ css,
8
+ } from '@design.estate/dees-element';
9
+
10
+ import { icon } from '../sdig-workspace/sdig-workspace.shared.js';
11
+
12
+ export interface ISdigShellNavigationItem {
13
+ id: string;
14
+ label: string;
15
+ icon: string;
16
+ count?: number;
17
+ disabled?: boolean;
18
+ title?: string;
19
+ }
20
+
21
+ export interface ISdigShellNavigationRequestDetail {
22
+ view: string;
23
+ }
24
+
25
+ declare global {
26
+ interface HTMLElementTagNameMap {
27
+ 'sdig-app-shell': SdigAppShell;
28
+ }
29
+ }
30
+
31
+ @customElement('sdig-app-shell')
32
+ export class SdigAppShell extends DeesElement {
33
+ public static demo = () => html`
34
+ <sdig-app-shell
35
+ workspace-name="Example workspace"
36
+ deployment-label="Self-hosted · single instance"
37
+ actor-name="Workspace owner"
38
+ actor-email="owner@example.test"
39
+ active-view="inbox"
40
+ status-label="self-hosted"
41
+ product-label="Open Source · MIT"
42
+ stack-label="foss.global stack"
43
+ stack-description="Lit · TypedRequest · SmartData · SmartBucket · MongoDB · S3"
44
+ .documentCount=${4}
45
+ style="height: 720px"
46
+ >
47
+ <div style="height:100%;display:grid;place-items:center;color:var(--text-muted)">Controlled application content</div>
48
+ </sdig-app-shell>
49
+ `;
50
+ public static demoGroups = ['Signature Digital Application'];
51
+
52
+ @property({ type: String }) public accessor accent = '#007aff';
53
+ @property({ type: String, attribute: 'active-view' }) public accessor activeView = 'inbox';
54
+ @property({ type: String, attribute: 'workspace-name' }) public accessor workspaceName = 'Workspace';
55
+ @property({ type: String, attribute: 'deployment-label' }) public accessor deploymentLabel = 'Host configured';
56
+ @property({ type: String, attribute: 'actor-name' }) public accessor actorName = 'Current user';
57
+ @property({ type: String, attribute: 'actor-email' }) public accessor actorEmail = '';
58
+ @property({ type: Number, attribute: 'document-count' }) public accessor documentCount = 0;
59
+ @property({ type: String, attribute: 'status-label' }) public accessor statusLabel = 'host controlled';
60
+ @property({ type: String, attribute: 'product-label' }) public accessor productLabel = '';
61
+ @property({ type: String, attribute: 'stack-label' }) public accessor stackLabel = 'Application services';
62
+ @property({ type: String, attribute: 'stack-description' }) public accessor stackDescription = 'Configured by host application';
63
+ @property({ attribute: false }) public accessor navigationItems: ISdigShellNavigationItem[] = [
64
+ { id: 'inbox', label: 'Inbox', icon: 'inbox' },
65
+ { id: 'compose', label: 'Compose', icon: 'plus' },
66
+ { id: 'audit', label: 'Audit Trail', icon: 'shield' },
67
+ ];
68
+
69
+ public static styles = css`
70
+ :host {
71
+ --accent: #007aff;
72
+ --bg: hsl(0 0% 100%);
73
+ --bg-el: hsl(240 9% 96.5%);
74
+ --bg-card: hsl(0 0% 100%);
75
+ --sidebar: hsl(240 11% 96%);
76
+ --border: hsl(240 6% 89%);
77
+ --border-subtle: hsl(240 6% 92.5%);
78
+ --text: hsl(240 6% 11%);
79
+ --text-sec: hsl(240 4% 34%);
80
+ --text-muted: hsl(240 3% 52%);
81
+ --text-dim: hsl(240 3% 66%);
82
+ --success: #34c759;
83
+ --hover: rgba(0, 0, 0, 0.05);
84
+ --ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;
85
+ --display: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", Arial, sans-serif;
86
+ --mono: ui-monospace, "SF Mono", Menlo, "Cascadia Mono", monospace;
87
+ display: block;
88
+ container-type: inline-size;
89
+ width: 100%;
90
+ min-height: 100vh;
91
+ color: var(--text);
92
+ background: var(--bg);
93
+ font-family: var(--ui);
94
+ -webkit-font-smoothing: antialiased;
95
+ }
96
+
97
+ * { box-sizing: border-box; }
98
+ button { font: inherit; cursor: pointer; }
99
+ button:disabled { cursor: not-allowed; opacity: .42; }
100
+ .shell { min-height: inherit; height: 100%; display: grid; grid-template-columns: 224px minmax(0, 1fr); background: var(--bg); }
101
+ .sidebar { height: 100%; min-height: inherit; display: flex; flex-direction: column; border-right: 1px solid var(--border-subtle); background: color-mix(in srgb, var(--sidebar) 94%, transparent); backdrop-filter: saturate(180%) blur(20px); }
102
+ .traffic { display: flex; gap: 8px; padding: 13px 16px 0; }
103
+ .traffic span { width: 12px; height: 12px; border-radius: 50%; box-shadow: inset 0 0 0 .5px rgba(0,0,0,.12); }
104
+ .traffic span:nth-child(1) { background: #ff5f57; }
105
+ .traffic span:nth-child(2) { background: #febc2e; }
106
+ .traffic span:nth-child(3) { background: #28c840; }
107
+ .brand { display: flex; align-items: center; gap: 8px; padding: 12px 16px; }
108
+ .mark { width: 26px; height: 26px; display: grid; place-items: center; position: relative; border: .5px solid rgba(0,0,0,.15); border-radius: 7px; color: white; background: linear-gradient(160deg, var(--accent), color-mix(in srgb, var(--accent) 70%, black)); box-shadow: 0 1px 2px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.25); font-family: var(--display); font-size: 13px; font-weight: 700; }
109
+ .mark::after { content: ''; width: 4px; height: 4px; position: absolute; right: 5px; bottom: 5px; border-radius: 50%; background: rgba(255,255,255,.95); }
110
+ .wordmark { font-size: 13px; font-weight: 500; letter-spacing: -.02em; white-space: nowrap; }
111
+ .wordmark .dot { color: var(--text-muted); }
112
+ .wordmark::after { content: ''; width: 4px; height: 4px; display: inline-block; margin-left: 3px; border-radius: 50%; background: var(--accent); transform: translateY(-1px); }
113
+ .workspace { display: flex; align-items: center; gap: 8px; margin: 0 12px 8px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 9px; background: var(--bg-card); box-shadow: 0 1px 1.5px rgba(0,0,0,.05); }
114
+ .workspace-badge { width: 20px; height: 20px; display: grid; place-items: center; flex: none; border-radius: 5px; color: white; background: linear-gradient(135deg, var(--accent), #af52de); font-size: 10px; font-weight: 700; }
115
+ .workspace strong { display: block; overflow: hidden; font-size: 12px; font-weight: 500; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }
116
+ .workspace small { display: block; margin-top: 1px; color: var(--text-muted); font-size: 10px; }
117
+ nav { display: grid; gap: 2px; padding: 4px 0; }
118
+ .nav-item { width: calc(100% - 18px); min-height: 30px; display: flex; align-items: center; gap: 9px; margin: 1px 9px; padding: 6px 9px; border: 0; border-radius: 7px; color: var(--text-sec); background: transparent; text-align: left; font-size: 13px; font-weight: 450; letter-spacing: -.01em; transition: color .1s ease, background .1s ease, box-shadow .1s ease; }
119
+ .nav-item:hover:not(:disabled) { color: var(--text); background: var(--hover); }
120
+ .nav-item.active { color: white; background: var(--accent); box-shadow: 0 1px 2px color-mix(in srgb, var(--accent) 42%, transparent); font-weight: 510; }
121
+ .count { min-width: 18px; margin-left: auto; padding: 1px 7px; border-radius: 999px; color: var(--text-muted); background: var(--bg-el); font: 10px var(--mono); text-align: center; }
122
+ .nav-item.active .count { color: white; background: rgba(255,255,255,.22); }
123
+ .stack { margin: auto 12px 8px; padding: 11px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-card); box-shadow: 0 1px 2px rgba(0,0,0,.04); }
124
+ .stack strong { display: block; color: var(--text-sec); font: 11px var(--mono); }
125
+ .stack p { margin: 7px 0 0; color: var(--text-muted); font-size: 10px; line-height: 1.45; }
126
+ .actor { display: flex; align-items: center; gap: 9px; padding: 8px 12px; border-top: 1px solid var(--border-subtle); }
127
+ .avatar { width: 26px; height: 26px; display: grid; place-items: center; flex: none; border-radius: 50%; color: white; background: var(--accent); font-size: 10px; font-weight: 700; }
128
+ .actor-name, .actor-email { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
129
+ .actor-name { font-size: 12px; font-weight: 500; }
130
+ .actor-email { color: var(--text-muted); font: 10px var(--mono); }
131
+ .signout { width: 28px; height: 28px; display: grid; place-items: center; border: 0; border-radius: 6px; color: var(--text-muted); background: transparent; }
132
+ .signout:hover { color: #d70015; background: var(--hover); }
133
+ .mobile-signout { display: none; margin-left: auto; }
134
+ .main { min-width: 0; min-height: 0; display: flex; flex-direction: column; }
135
+ .content { flex: 1; min-height: 0; overflow: auto; }
136
+ ::slotted(*) { min-height: 100%; }
137
+ .status { height: 24px; display: flex; align-items: center; gap: 16px; flex: none; padding: 0 16px; border-top: 1px solid var(--border-subtle); color: var(--text-dim); background: var(--bg); font: 10px var(--mono); }
138
+ .status-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--success); }
139
+ :focus-visible { outline: 3px solid color-mix(in srgb, var(--accent) 25%, transparent); outline-offset: 2px; }
140
+
141
+ @container (max-width: 760px) {
142
+ .shell { grid-template-columns: 1fr; }
143
+ .sidebar { height: auto; min-height: 0; border-right: 0; border-bottom: 1px solid var(--border-subtle); }
144
+ .traffic, .workspace, .stack, .actor { display: none; }
145
+ .brand { padding: 10px 14px 4px; }
146
+ .mobile-signout { display: grid; }
147
+ nav { display: flex; overflow-x: auto; padding: 4px 8px 8px; }
148
+ .nav-item { width: auto; flex: none; margin: 0 2px; }
149
+ .status { display: none; }
150
+ }
151
+
152
+ @media (prefers-reduced-motion: reduce) {
153
+ *, *::before, *::after { transition-duration: .001ms !important; animation-duration: .001ms !important; animation-iteration-count: 1 !important; }
154
+ }
155
+ `;
156
+
157
+ private initials(valueArg: string, fallbackArg = ''): string {
158
+ const source = valueArg.trim() || fallbackArg.trim();
159
+ if (!source) return '?';
160
+ return source.split(/\s+|@/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() || '').join('');
161
+ }
162
+
163
+ private requestNavigation(itemArg: ISdigShellNavigationItem) {
164
+ if (itemArg.disabled) return;
165
+ this.dispatchEvent(new CustomEvent<ISdigShellNavigationRequestDetail>('navigation-request', {
166
+ detail: { view: itemArg.id },
167
+ bubbles: true,
168
+ composed: true,
169
+ }));
170
+ }
171
+
172
+ private requestSignout() {
173
+ this.dispatchEvent(new CustomEvent('signout-request', { bubbles: true, composed: true }));
174
+ }
175
+
176
+ public render(): TemplateResult {
177
+ return html`
178
+ <div class="shell" style=${`--accent:${this.accent}`}>
179
+ <aside class="sidebar">
180
+ <div class="traffic" aria-hidden="true"><span></span><span></span><span></span></div>
181
+ <div class="brand"><span class="mark">s</span><span class="wordmark">signature<span class="dot">.</span>digital</span><button class="signout mobile-signout" title="Sign out" aria-label="Sign out" @click=${this.requestSignout}>↪</button></div>
182
+ <div class="workspace"><span class="workspace-badge">${this.initials(this.workspaceName)}</span><div style="min-width:0;flex:1"><strong>${this.workspaceName}</strong><small>${this.deploymentLabel}</small></div></div>
183
+ <nav aria-label="Workspace navigation">
184
+ ${this.navigationItems.map((item) => html`
185
+ <button class="nav-item ${this.activeView === item.id ? 'active' : ''}" ?disabled=${item.disabled} title=${item.title || ''} @click=${() => this.requestNavigation(item)}>
186
+ ${icon(item.icon, 16)}<span>${item.label}</span>${item.count === undefined ? '' : html`<span class="count">${item.count}</span>`}
187
+ </button>
188
+ `)}
189
+ </nav>
190
+ <div class="stack"><strong>${this.stackLabel}</strong><p>${this.stackDescription}</p></div>
191
+ <div class="actor"><span class="avatar">${this.initials(this.actorName, this.actorEmail)}</span><div style="min-width:0;flex:1"><div class="actor-name">${this.actorName}</div><div class="actor-email">${this.actorEmail}</div></div><button class="signout" title="Sign out" aria-label="Sign out" @click=${this.requestSignout}>↪</button></div>
192
+ </aside>
193
+ <main class="main">
194
+ <div class="content"><slot></slot></div>
195
+ <div class="status"><span class="status-dot"></span><span>${this.statusLabel}</span><span>${this.documentCount} documents</span><div style="flex:1"></div>${this.productLabel ? html`<span style="color:var(--accent)">${this.productLabel}</span>` : ''}</div>
196
+ </main>
197
+ </div>
198
+ `;
199
+ }
200
+ }
@@ -23,6 +23,7 @@ export class SignBox extends DeesElement {
23
23
  css`
24
24
  .mainbox {
25
25
  position: relative;
26
+ width: 100%;
26
27
  background: ${cssManager.bdTheme('#eeeeeb', '#111111')};
27
28
  border-radius: 16px;
28
29
  max-width: 600px;
@@ -55,6 +56,7 @@ export class SignBox extends DeesElement {
55
56
  box-shadow: ${cssManager.bdTheme('0px 0px 8px 0px #00000040', 'none')};
56
57
  z-index: 2;
57
58
  display: flex;
59
+ flex-wrap: wrap;
58
60
  justify-content: flex-end;
59
61
  }
60
62
 
@@ -103,11 +105,14 @@ export class SignBox extends DeesElement {
103
105
  if (await signaturePad.isEmpty()) return;
104
106
  const signature = await signaturePad.toData();
105
107
  const svg = await signaturePad.toSVG();
108
+ const canvasSize = signaturePad.getCanvasSize();
106
109
  this.dispatchEvent(new CustomEvent('signature', {
107
110
  detail: {
108
111
  signature,
109
112
  svg,
110
113
  createdAt: Date.now(),
114
+ canvasWidth: canvasSize.width,
115
+ canvasHeight: canvasSize.height,
111
116
  },
112
117
  bubbles: true,
113
118
  composed: true,
@@ -24,6 +24,7 @@ export class SignPad extends DeesElement {
24
24
  css`
25
25
  :host {
26
26
  display: block;
27
+ width: 100%;
27
28
  color: white;
28
29
  position: relative;
29
30
  max-width: 600px;
@@ -33,7 +34,8 @@ export class SignPad extends DeesElement {
33
34
 
34
35
  .mainbox {
35
36
  position: relative;
36
- width: 600px;
37
+ width: 100%;
38
+ max-width: 600px;
37
39
  height: 280px;
38
40
  }
39
41
 
@@ -47,6 +49,8 @@ export class SignPad extends DeesElement {
47
49
  }
48
50
 
49
51
  canvas {
52
+ display: block;
53
+ max-width: 100%;
50
54
  filter: ${cssManager.bdTheme('invert(0)', 'invert(1)')};
51
55
  }
52
56
  `
@@ -107,6 +111,13 @@ export class SignPad extends DeesElement {
107
111
  return returnData;
108
112
  }
109
113
 
114
+ public getCanvasSize(): { width: number; height: number } {
115
+ return {
116
+ width: this.canvas?.width || 0,
117
+ height: this.canvas?.height || 0,
118
+ };
119
+ }
120
+
110
121
  public async fromData(dataArrayArg: plugins.TSignaturePadPointGroup[]) {
111
122
  this.signaturePad?.fromData(dataArrayArg);
112
123
  }