@1agh/maude 0.15.0 → 0.17.1

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 (53) hide show
  1. package/README.md +4 -2
  2. package/cli/commands/design.mjs +108 -2
  3. package/package.json +12 -18
  4. package/plugins/design/dev-server/annotations-context-toolbar.tsx +8 -8
  5. package/plugins/design/dev-server/annotations-layer.tsx +8 -10
  6. package/plugins/design/dev-server/api.ts +227 -3
  7. package/plugins/design/dev-server/bin/_enumerate-artboards-playwright.mjs +40 -0
  8. package/plugins/design/dev-server/bin/_html-playwright.mjs +129 -0
  9. package/plugins/design/dev-server/bin/_pdf-playwright.mjs +105 -0
  10. package/plugins/design/dev-server/bin/_png-playwright.mjs +143 -0
  11. package/plugins/design/dev-server/bin/_pptx-playwright.mjs +98 -0
  12. package/plugins/design/dev-server/bin/_svg-playwright.mjs +141 -0
  13. package/plugins/design/dev-server/canvas-lib.tsx +12 -13
  14. package/plugins/design/dev-server/canvas-shell.tsx +111 -9
  15. package/plugins/design/dev-server/client/app.jsx +71 -143
  16. package/plugins/design/dev-server/client/comments-overlay.css +381 -0
  17. package/plugins/design/dev-server/client/styles/3-shell.css +1 -10
  18. package/plugins/design/dev-server/client/styles/4-components.css +5 -161
  19. package/plugins/design/dev-server/client/styles.css +5 -160
  20. package/plugins/design/dev-server/comments-overlay.tsx +1156 -0
  21. package/plugins/design/dev-server/context-menu.tsx +36 -9
  22. package/plugins/design/dev-server/dist/client.bundle.js +52 -211
  23. package/plugins/design/dev-server/dist/styles.css +1 -218
  24. package/plugins/design/dev-server/export-dialog.tsx +401 -0
  25. package/plugins/design/dev-server/exporters/_browser-bundles.ts +89 -0
  26. package/plugins/design/dev-server/exporters/canva-handoff-prompt.ts +74 -0
  27. package/plugins/design/dev-server/exporters/canva.ts +126 -0
  28. package/plugins/design/dev-server/exporters/html.ts +103 -0
  29. package/plugins/design/dev-server/exporters/index.ts +135 -0
  30. package/plugins/design/dev-server/exporters/pdf.ts +109 -0
  31. package/plugins/design/dev-server/exporters/png.ts +136 -0
  32. package/plugins/design/dev-server/exporters/pptx.ts +263 -0
  33. package/plugins/design/dev-server/exporters/scope.ts +196 -0
  34. package/plugins/design/dev-server/exporters/svg.ts +122 -0
  35. package/plugins/design/dev-server/exporters/zip.ts +109 -0
  36. package/plugins/design/dev-server/http.ts +109 -0
  37. package/plugins/design/dev-server/input-router.tsx +21 -0
  38. package/plugins/design/dev-server/inspect.ts +1 -1
  39. package/plugins/design/dev-server/server.mjs +1 -1
  40. package/plugins/design/dev-server/test/canvas-meta-api.test.ts +0 -10
  41. package/plugins/design/dev-server/test/comments-api.test.ts +229 -0
  42. package/plugins/design/dev-server/test/exporters/canva.test.ts +64 -0
  43. package/plugins/design/dev-server/test/exporters/endpoint.test.ts +121 -0
  44. package/plugins/design/dev-server/test/exporters/history.test.ts +79 -0
  45. package/plugins/design/dev-server/test/exporters/html.test.ts +26 -0
  46. package/plugins/design/dev-server/test/exporters/pdf.test.ts +53 -0
  47. package/plugins/design/dev-server/test/exporters/png.test.ts +32 -0
  48. package/plugins/design/dev-server/test/exporters/pptx.test.ts +31 -0
  49. package/plugins/design/dev-server/test/exporters/scope.test.ts +0 -0
  50. package/plugins/design/dev-server/test/exporters/svg.test.ts +29 -0
  51. package/plugins/design/dev-server/test/exporters/zip.test.ts +105 -0
  52. package/plugins/design/dev-server/tool-palette.tsx +34 -16
  53. package/plugins/design/templates/_shell.html +33 -0
@@ -74,6 +74,27 @@ function noop(name: string) {
74
74
  };
75
75
  }
76
76
 
77
+ // Phase 6.5 T9 — export hooks. The default registry items use noop() so the
78
+ // menu still renders when the dialog provider isn't mounted; consumers wire
79
+ // real `openExport(scope)` callbacks by passing a custom registry to
80
+ // <ContextMenuProvider extra>. Pattern matches the existing Phase 5 noop
81
+ // affordances.
82
+ function defaultExportItem(label: string, scopeHint: string): MenuItem {
83
+ return {
84
+ id: `export-${scopeHint}`,
85
+ label,
86
+ shortcut: scopeHint === 'selection' ? '⌘E' : undefined,
87
+ onSelect: () => {
88
+ const detail = { scope: scopeHint };
89
+ try {
90
+ window.dispatchEvent(new CustomEvent('maude:open-export', { detail }));
91
+ } catch {
92
+ /* SSR / non-window environments */
93
+ }
94
+ },
95
+ };
96
+ }
97
+
77
98
  const DEFAULT_REGISTRY: ContextRegistry = {
78
99
  element: [
79
100
  [
@@ -82,6 +103,7 @@ const DEFAULT_REGISTRY: ContextRegistry = {
82
103
  { id: 'copy-id', label: 'Copy data-cd-id', onSelect: noop('copy-id') },
83
104
  { id: 'inspect', label: 'Inspect', shortcut: '⌥I', onSelect: noop('inspect') },
84
105
  ],
106
+ [defaultExportItem('Export selection…', 'selection')],
85
107
  [
86
108
  { id: 'hide', label: 'Hide', shortcut: '⌘⇧H', onSelect: noop('hide') },
87
109
  { id: 'lock', label: 'Lock', shortcut: '⌘⇧L', onSelect: noop('lock') },
@@ -92,6 +114,7 @@ const DEFAULT_REGISTRY: ContextRegistry = {
92
114
  { id: 'rename', label: 'Rename', shortcut: '↵', onSelect: noop('rename-artboard') },
93
115
  { id: 'duplicate', label: 'Duplicate', shortcut: '⌘D', onSelect: noop('duplicate-artboard') },
94
116
  ],
117
+ [defaultExportItem('Export this artboard…', 'artboard')],
95
118
  [
96
119
  { id: 'fit-one', label: 'Fit just this artboard', onSelect: noop('fit-one') },
97
120
  { id: 'reset-pos', label: 'Reset position', onSelect: noop('reset-artboard-pos') },
@@ -108,6 +131,10 @@ const DEFAULT_REGISTRY: ContextRegistry = {
108
131
  { id: 'fit-view', label: 'Fit to view', shortcut: '1', onSelect: noop('fit-view') },
109
132
  { id: 'reset-view', label: 'Reset view', shortcut: '⌘0', onSelect: noop('reset-view') },
110
133
  ],
134
+ [
135
+ defaultExportItem('Export project (ZIP)…', 'project-raw'),
136
+ defaultExportItem('Export canvas as separate…', 'canvas-as-separate'),
137
+ ],
111
138
  ],
112
139
  overlay: [],
113
140
  };
@@ -131,15 +158,15 @@ const MENU_CSS = `
131
158
  .dc-context-menu {
132
159
  position: fixed;
133
160
  z-index: 7;
134
- background: var(--bg-1, #fff);
135
- border: 1px solid var(--border-default, rgba(0,0,0,0.12));
136
- border-radius: var(--radius-md, 6px);
137
- box-shadow: var(--shadow-md, 0 8px 24px rgba(0,0,0,0.12));
161
+ background: var(--u-bg-2, var(--bg-1, #fff));
162
+ border: 1px solid var(--u-fg-0, #1c1917);
163
+ border-radius: 0;
164
+ box-shadow: 4px 4px 0 var(--u-fg-0, #1c1917);
138
165
  padding: 4px;
139
166
  min-width: 220px;
140
- font: inherit;
167
+ font-family: var(--u-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
141
168
  font-size: 12px;
142
- color: var(--fg-0, rgba(20,15,10,0.92));
169
+ color: var(--u-fg-0, var(--fg-0, rgba(20,15,10,0.92)));
143
170
  user-select: none;
144
171
  }
145
172
  .dc-context-menu .dc-menu-sep {
@@ -152,8 +179,8 @@ const MENU_CSS = `
152
179
  justify-content: space-between;
153
180
  align-items: center;
154
181
  gap: 16px;
155
- padding: 6px 10px;
156
- border-radius: var(--radius-sm, 4px);
182
+ padding: 5px 12px;
183
+ border-radius: 0;
157
184
  cursor: pointer;
158
185
  background: transparent;
159
186
  border: 0;
@@ -164,7 +191,7 @@ const MENU_CSS = `
164
191
  }
165
192
  .dc-context-menu .dc-menu-item:hover,
166
193
  .dc-context-menu .dc-menu-item:focus-visible {
167
- background: var(--bg-3, rgba(0,0,0,0.05));
194
+ background: var(--u-bg-3, var(--bg-3, rgba(0,0,0,0.05)));
168
195
  outline: none;
169
196
  }
170
197
  .dc-context-menu .dc-menu-item[disabled] {