@1agh/maude 0.60.5 → 0.60.6
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/apps/studio/annotations-layer.tsx +21 -12
- package/apps/studio/canvas-comment-mount.tsx +7 -1
- package/apps/studio/canvas-icons.tsx +30 -2
- package/apps/studio/canvas-lib.tsx +25 -3
- package/apps/studio/canvas-shell.tsx +5 -4
- package/apps/studio/client/app.jsx +20 -13
- package/apps/studio/dist/client.bundle.js +1 -1
- package/apps/studio/dist/comment-mount.js +2 -2
- package/apps/studio/hmr-broadcast.ts +40 -2
- package/apps/studio/test/canvas-wheel-delta.test.ts +42 -0
- package/apps/studio/test/comment-mount.test.ts +10 -1
- package/apps/studio/test/hmr-broadcast.test.ts +6 -4
- package/apps/studio/test/hmr-classify.test.ts +18 -1
- package/apps/studio/test/mode-toggle.test.tsx +226 -0
- package/apps/studio/test/use-tool-mode.test.tsx +33 -3
- package/apps/studio/tool-palette.tsx +86 -24
- package/apps/studio/use-tool-mode.tsx +113 -14
- package/apps/studio/whats-new.json +27 -0
- package/package.json +8 -8
- package/plugins/design/templates/_shell.html +31 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1agh/maude",
|
|
3
|
-
"version": "0.60.
|
|
3
|
+
"version": "0.60.6",
|
|
4
4
|
"description": "Marketplace of Claude Code plugins by Michal Dovrtěl: `design` (canvas-first design iteration) + `flow` (generic agentic workflow loop with .ai second brain). Ships the `maude` CLI (with `mdcc` legacy alias) to scaffold workspace, run the design dev server, and manage configs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -54,13 +54,13 @@
|
|
|
54
54
|
"test:e2e:desktop:parity:cloud": "pnpm --filter @maude/desktop-e2e e2e:parity:cloud"
|
|
55
55
|
},
|
|
56
56
|
"optionalDependencies": {
|
|
57
|
-
"@1agh/maude-darwin-arm64": "0.60.
|
|
58
|
-
"@1agh/maude-darwin-x64": "0.60.
|
|
59
|
-
"@1agh/maude-linux-arm64": "0.60.
|
|
60
|
-
"@1agh/maude-linux-arm64-musl": "0.60.
|
|
61
|
-
"@1agh/maude-linux-x64": "0.60.
|
|
62
|
-
"@1agh/maude-linux-x64-musl": "0.60.
|
|
63
|
-
"@1agh/maude-win32-x64": "0.60.
|
|
57
|
+
"@1agh/maude-darwin-arm64": "0.60.6",
|
|
58
|
+
"@1agh/maude-darwin-x64": "0.60.6",
|
|
59
|
+
"@1agh/maude-linux-arm64": "0.60.6",
|
|
60
|
+
"@1agh/maude-linux-arm64-musl": "0.60.6",
|
|
61
|
+
"@1agh/maude-linux-x64": "0.60.6",
|
|
62
|
+
"@1agh/maude-linux-x64-musl": "0.60.6",
|
|
63
|
+
"@1agh/maude-win32-x64": "0.60.6"
|
|
64
64
|
},
|
|
65
65
|
"files": [
|
|
66
66
|
"cli",
|
|
@@ -463,6 +463,37 @@
|
|
|
463
463
|
.catch(() => {
|
|
464
464
|
/* network blip — next interaction will retry */
|
|
465
465
|
});
|
|
466
|
+
} else if (msg.mode === 'asset') {
|
|
467
|
+
// 2026-08-15 annotations-assets RCA — a synced-down media file
|
|
468
|
+
// just landed on disk. Any <img> / SVG <image> that already
|
|
469
|
+
// 404'd on it shows the broken glyph FOREVER (browsers never
|
|
470
|
+
// retry a failed load), so the heal was invisible: the bytes
|
|
471
|
+
// arrived, the canvas stayed broken until a manual reload.
|
|
472
|
+
// Re-point matching, still-broken elements at a cache-busted
|
|
473
|
+
// URL — no reload, no React state loss. A later React render
|
|
474
|
+
// restoring the clean URL refetches it fresh (the file exists
|
|
475
|
+
// now), so both URLs converge on the good bytes.
|
|
476
|
+
const assetName = (msg.file || '').split('/').pop();
|
|
477
|
+
if (!assetName) return;
|
|
478
|
+
const v = msg.version || Date.now();
|
|
479
|
+
const nameMatches = function (u) {
|
|
480
|
+
if (!u) return false;
|
|
481
|
+
return u.indexOf(assetName) !== -1 || u.indexOf(encodeURIComponent(assetName)) !== -1;
|
|
482
|
+
};
|
|
483
|
+
for (const img of document.querySelectorAll('img')) {
|
|
484
|
+
const src = img.getAttribute('src');
|
|
485
|
+
if (!nameMatches(src)) continue;
|
|
486
|
+
// Already rendering fine — don't churn a working image.
|
|
487
|
+
if (img.complete && img.naturalWidth > 0) continue;
|
|
488
|
+
img.setAttribute('src', src.split('?')[0] + '?v=' + v);
|
|
489
|
+
}
|
|
490
|
+
for (const el of document.querySelectorAll('image')) {
|
|
491
|
+
const href = el.getAttribute('href') || el.getAttribute('xlink:href');
|
|
492
|
+
if (!nameMatches(href)) continue;
|
|
493
|
+
// SVG <image> exposes no broken-state flag — re-pointing a
|
|
494
|
+
// working one is a cheap refetch of now-cached bytes.
|
|
495
|
+
el.setAttribute('href', href.split('?')[0] + '?v=' + v);
|
|
496
|
+
}
|
|
466
497
|
}
|
|
467
498
|
} catch (e) {
|
|
468
499
|
console.warn('[canvas-shell] HMR message parse error', e);
|