openplanr 2.2640.3 → 2.2640.5

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 (102) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/cli/commands/artifact.d.ts.map +1 -1
  3. package/dist/cli/commands/artifact.js +44 -21
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/dashboard/.vite/manifest.json +1 -1
  6. package/dist/dashboard/assets/{index-CaX9EJp4.js → index-BqFEZO-9.js} +2 -2
  7. package/dist/dashboard/assets/{index-CaX9EJp4.js.map → index-BqFEZO-9.js.map} +1 -1
  8. package/dist/dashboard/dashboard-manifest.json +8 -8
  9. package/dist/dashboard/index.html +1 -1
  10. package/dist/services/diagram-artifact-service.d.ts +28 -1
  11. package/dist/services/diagram-artifact-service.d.ts.map +1 -1
  12. package/dist/services/diagram-artifact-service.js +64 -1
  13. package/dist/services/diagram-artifact-service.js.map +1 -1
  14. package/docs/ARTIFACT_REVIEW.md +38 -2
  15. package/docs/CLI.md +12 -2
  16. package/lib/host-packages/adapter-registry.json +5 -5
  17. package/lib/host-packages/capability-map.json +2 -2
  18. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  19. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  20. package/lib/host-packages/claude/openplanr/.openplanr-content.json +33 -25
  21. package/lib/host-packages/claude/openplanr/README.md +1 -1
  22. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +14 -4
  23. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +51 -0
  24. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-artifact-shell.mjs +127 -123
  25. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-review-handoff.mjs +4 -3
  26. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-share.mjs +875 -544
  27. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  28. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
  29. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-artifact-shell.mjs +127 -123
  30. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-review-handoff.mjs +4 -3
  31. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-share.mjs +875 -544
  32. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  33. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  34. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-artifact-shell.mjs +127 -123
  35. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-review-handoff.mjs +4 -3
  36. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-share.mjs +875 -544
  37. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  38. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
  39. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +13 -0
  40. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +51 -0
  41. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-artifact-shell.mjs +127 -123
  42. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-review-handoff.mjs +4 -3
  43. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-share.mjs +875 -544
  44. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  45. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
  46. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +32 -24
  47. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  48. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +51 -0
  49. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +14 -4
  50. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-artifact-shell.mjs +127 -123
  51. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-review-handoff.mjs +4 -3
  52. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-share.mjs +875 -544
  53. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  54. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +5 -1
  55. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-artifact-shell.mjs +127 -123
  56. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-review-handoff.mjs +4 -3
  57. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-share.mjs +875 -544
  58. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  59. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  60. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-artifact-shell.mjs +127 -123
  61. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-review-handoff.mjs +4 -3
  62. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-share.mjs +875 -544
  63. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  64. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +5 -1
  65. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +51 -0
  66. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +13 -0
  67. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-artifact-shell.mjs +127 -123
  68. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-review-handoff.mjs +4 -3
  69. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-share.mjs +875 -544
  70. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  71. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +5 -1
  72. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  73. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  74. package/lib/host-packages/openai/openplanr/.openplanr-content.json +35 -27
  75. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +14 -4
  76. package/lib/host-packages/openai/openplanr/skills/artifact/agents/openai.yaml +2 -2
  77. package/lib/host-packages/openai/openplanr/skills/artifact/openplanr.skill.json +11 -0
  78. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +51 -0
  79. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-artifact-shell.mjs +127 -123
  80. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-review-handoff.mjs +4 -3
  81. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-share.mjs +875 -544
  82. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  83. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
  84. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-artifact-shell.mjs +127 -123
  85. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-review-handoff.mjs +4 -3
  86. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-share.mjs +875 -544
  87. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  88. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  89. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-artifact-shell.mjs +127 -123
  90. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-review-handoff.mjs +4 -3
  91. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-share.mjs +875 -544
  92. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  93. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
  94. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +13 -0
  95. package/lib/host-packages/openai/openplanr/skills/diagram/openplanr.skill.json +11 -0
  96. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +51 -0
  97. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-artifact-shell.mjs +127 -123
  98. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-review-handoff.mjs +4 -3
  99. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-share.mjs +875 -544
  100. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -1
  101. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
  102. package/package.json +2 -2
@@ -1 +1 @@
1
- .design-share-dialog{width:min(520px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:22px;border:1px solid var(--planr-color-rule);border-radius:14px;background:var(--planr-color-panel);color:var(--planr-color-text);box-shadow:0 28px 90px #15202730;font:13px/1.5 var(--planr-font-body);overflow:auto}.design-share-dialog::backdrop{background:#18212b3d;backdrop-filter:blur(5px)}.design-share-dialog header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px}.design-share-dialog h2{font-size:20px;font-family:var(--planr-font-display);letter-spacing:-.025em;margin:0}.design-share-dialog button{font:inherit;cursor:pointer;border:1px solid var(--planr-color-rule);border-radius:7px;padding:7px 11px;background:var(--planr-color-panel);color:inherit;white-space:nowrap}.design-share-dialog button:hover{background:var(--planr-color-raised)}.design-share-dialog button:disabled{opacity:.55;cursor:wait}.design-share-dialog button:focus-visible,.design-share-dialog input:focus-visible,.design-share-dialog summary:focus-visible{outline:2px solid var(--planr-color-primary);outline-offset:3px}.design-share-dialog dl{display:grid;grid-template-columns:80px minmax(0,1fr);gap:6px 12px;padding:14px;border-radius:8px;background:var(--planr-color-background)}.design-share-dialog dt{color:var(--planr-color-text-muted)}.design-share-dialog dd{margin:0;overflow-wrap:anywhere}.design-share-dialog p{color:var(--planr-color-text-muted)}.design-share-copy-row{display:flex;align-items:center;gap:10px;margin:14px 0}.design-share-copy-row>span{flex:1;color:var(--planr-color-text-muted)}.design-share-dialog input{box-sizing:border-box;width:100%;min-width:0;font:12px/1.5 ui-monospace,monospace;border:1px solid var(--planr-color-rule);border-radius:7px;padding:8px;color:var(--planr-color-text);background:var(--planr-color-background)}.design-share-actions{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}.design-share-dialog .design-share-primary{background:var(--planr-color-primary);color:var(--planr-color-background);border-color:var(--planr-color-primary)}.design-share-dialog .design-share-danger{color:var(--planr-color-danger)}.design-share-dialog summary{cursor:pointer;color:var(--planr-color-text-muted);padding:8px 0}.design-share-dialog [data-share-message]{min-height:20px;margin:16px 0 0;overflow-wrap:anywhere}.design-share-dialog [data-share-message][data-error=true]{color:var(--planr-color-danger)}@media(max-width:480px){.design-share-copy-row{align-items:stretch;flex-direction:column}}
1
+ .design-share-dialog{width:min(520px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:22px;border:1px solid var(--planr-color-rule);border-radius:14px;background:var(--planr-color-panel);color:var(--planr-color-text);box-shadow:0 28px 90px #15202730;font:13px/1.5 var(--planr-font-body);overflow:auto}.design-share-dialog::backdrop{background:#18212b3d;backdrop-filter:blur(5px)}.design-share-dialog header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px}.design-share-dialog h2{font-size:20px;font-family:var(--planr-font-display);letter-spacing:-.025em;margin:0}.design-share-dialog button{font:inherit;cursor:pointer;border:1px solid var(--planr-color-rule);border-radius:7px;padding:7px 11px;background:var(--planr-color-panel);color:inherit;white-space:nowrap}.design-share-dialog button:hover:not(:disabled){background:var(--planr-color-raised)}.design-share-dialog button:disabled{opacity:.55;cursor:wait}.design-share-dialog button:focus-visible,.design-share-dialog input:focus-visible,.design-share-dialog summary:focus-visible{outline:2px solid var(--planr-color-primary);outline-offset:3px}.design-share-dialog dl{display:grid;grid-template-columns:80px minmax(0,1fr);gap:6px 12px;padding:14px;border-radius:8px;background:var(--planr-color-background)}.design-share-dialog dt{color:var(--planr-color-text-muted)}.design-share-dialog dd{margin:0;overflow-wrap:anywhere}.design-share-dialog p{color:var(--planr-color-text-muted)}.design-share-copy-row{display:flex;align-items:center;gap:10px;margin:14px 0}.design-share-copy-row>span{flex:1;color:var(--planr-color-text-muted)}.design-share-dialog input{box-sizing:border-box;width:100%;min-width:0;font:12px/1.5 ui-monospace,monospace;border:1px solid var(--planr-color-rule);border-radius:7px;padding:8px;color:var(--planr-color-text);background:var(--planr-color-background)}.design-share-actions{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}.design-share-dialog .design-share-primary{background:var(--planr-color-primary);color:var(--planr-color-on-primary);border-color:var(--planr-color-primary)}.design-share-dialog .design-share-primary:is(:hover,:active,:focus-visible):not(:disabled){background:var(--planr-color-primary-strong);color:var(--planr-color-on-primary);border-color:var(--planr-color-primary-strong)}.design-share-dialog .design-share-danger{color:var(--planr-color-danger)}.design-share-dialog summary{cursor:pointer;color:var(--planr-color-text-muted);padding:8px 0}.design-share-dialog [data-share-message]{min-height:20px;margin:16px 0 0;overflow-wrap:anywhere}.design-share-dialog [data-share-message][data-error=true]{color:var(--planr-color-danger)}@media(max-width:480px){.design-share-copy-row{align-items:stretch;flex-direction:column}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.7.3",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -87,6 +87,10 @@
87
87
  "./diagram-authoring-contracts": {
88
88
  "types": "./src/diagram-authoring-contracts.d.mts",
89
89
  "import": "./src/diagram-authoring-contracts.mjs"
90
+ },
91
+ "./diagram-review-contracts": {
92
+ "types": "./src/diagram-review-contracts.d.mts",
93
+ "import": "./src/diagram-review-contracts.mjs"
90
94
  }
91
95
  },
92
96
  "files": [
@@ -760,6 +760,131 @@ function embedJson(value) {
760
760
  return JSON.stringify(value ?? null).replace(JSON_HTML_RE, (ch) => JSON_HTML_ESCAPES[ch]);
761
761
  }
762
762
 
763
+ // packages/artifact/lib/artifact/ui/annotation-styles.mjs
764
+ var ARTIFACT_ANNOTATION_CSS = `.planr-annotation-layer { position: absolute; z-index: 6; inset: 0; }
765
+ .planr-shell[data-planr-review-mode="interact"] .planr-annotation-layer { pointer-events: none; }
766
+ .planr-shell[data-planr-review-mode="comment"] .planr-annotation-layer { cursor: crosshair; touch-action: none; }
767
+ .planr-shell[data-planr-review-mode="comment"] .planr-frame iframe { pointer-events: none; }
768
+ .planr-region-selection {
769
+ position: absolute;
770
+ min-width: 2px;
771
+ min-height: 2px;
772
+ border: 2px solid var(--planr-color-primary);
773
+ border-radius: var(--planr-radius-small);
774
+ background: color-mix(in srgb, var(--planr-color-primary) 14%, transparent);
775
+ pointer-events: none;
776
+ }
777
+ .planr-pin {
778
+ position: absolute;
779
+ z-index: 8;
780
+ width: 44px;
781
+ height: 44px;
782
+ min-width: 44px;
783
+ min-height: 44px;
784
+ translate: -50% -50%;
785
+ display: grid;
786
+ place-items: center;
787
+ padding: 0;
788
+ border: 8px solid transparent;
789
+ border-radius: 50%;
790
+ background-clip: padding-box;
791
+ color: var(--planr-color-on-danger);
792
+ cursor: pointer;
793
+ pointer-events: auto;
794
+ font: 700 10px/1 var(--planr-font-mono);
795
+ box-shadow: 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent);
796
+ }
797
+ .planr-pin-fix { background-color: var(--planr-color-danger); }
798
+ .planr-pin-improve { background-color: var(--planr-color-primary-strong); color: var(--planr-color-on-improve); }
799
+ .planr-pin-question { background-color: var(--planr-color-question); color: var(--planr-color-on-question); }
800
+ .planr-pin-resolved, .planr-pin-addressed { background-color: var(--planr-color-resolved); color: var(--planr-color-on-resolved); }
801
+ .planr-pin-highlight { animation: planr-pin-highlight 1.2s ease-out; }
802
+ @keyframes planr-pin-highlight {
803
+ 0%, 35% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--planr-color-primary) 52%, transparent), 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent); }
804
+ 100% { box-shadow: 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent); }
805
+ }
806
+ .planr-pin-region {
807
+ position: absolute;
808
+ z-index: 7;
809
+ min-width: 2px;
810
+ min-height: 2px;
811
+ border: 2px solid var(--planr-color-danger);
812
+ border-radius: var(--planr-radius-small);
813
+ background: color-mix(in srgb, var(--planr-color-danger) 12%, transparent);
814
+ pointer-events: none;
815
+ }
816
+ .planr-pin-region-improve { border-color: var(--planr-color-primary-strong); background: color-mix(in srgb, var(--planr-color-primary-strong) 12%, transparent); }
817
+ .planr-pin-region-question { border-color: var(--planr-color-question); background: color-mix(in srgb, var(--planr-color-question) 12%, transparent); }
818
+ .planr-pin-region-resolved, .planr-pin-region-addressed { border-color: var(--planr-color-resolved); background: color-mix(in srgb, var(--planr-color-resolved) 10%, transparent); }
819
+ .planr-annotation-composer {
820
+ position: fixed;
821
+ inset: auto;
822
+ z-index: 100;
823
+ box-sizing: border-box;
824
+ width: min(360px, calc(100vw - 24px));
825
+ max-height: min(620px, calc(100dvh - 24px));
826
+ margin: 0;
827
+ overflow: auto;
828
+ overscroll-behavior: contain;
829
+ translate: none;
830
+ transform: none;
831
+ padding: 14px;
832
+ border: 1px solid var(--planr-color-rule);
833
+ border-radius: var(--planr-radius-large);
834
+ background: var(--planr-color-panel);
835
+ color: var(--planr-color-text);
836
+ box-shadow: 0 18px 60px color-mix(in srgb, var(--planr-color-background) 58%, transparent);
837
+ cursor: default;
838
+ pointer-events: auto;
839
+ }
840
+ .planr-annotation-composer strong { display: block; margin: 0; font: 650 14px/1.2 var(--planr-font-display); }
841
+ .planr-composer-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
842
+ .planr-composer-header button { display: grid; place-items: center; flex: 0 0 28px; width: 28px; height: 28px; padding: 0; border: 1px solid transparent; border-radius: var(--planr-radius-small); background: transparent; color: var(--planr-color-text-muted); font: 22px/1 var(--planr-font-body); cursor: pointer; }
843
+ .planr-composer-header button:hover { background: var(--planr-color-raised); color: var(--planr-color-text); }
844
+ .planr-annotation-composer :focus-visible { outline: 2px solid var(--planr-color-primary); outline-offset: 2px; }
845
+ .planr-annotation-composer::backdrop { background: transparent; pointer-events: none; }
846
+ .planr-annotation-composer label, .planr-identity label {
847
+ display: grid;
848
+ gap: 5px;
849
+ margin-bottom: 9px;
850
+ color: var(--planr-color-text-muted);
851
+ font-size: 11px;
852
+ }
853
+ .planr-annotation-composer input, .planr-annotation-composer textarea, .planr-identity input,
854
+ .planr-reply-form textarea {
855
+ width: 100%;
856
+ padding: 8px 9px;
857
+ border: 1px solid var(--planr-color-rule);
858
+ border-radius: var(--planr-radius-small);
859
+ background: var(--planr-color-chrome);
860
+ color: var(--planr-color-text);
861
+ }
862
+ .planr-annotation-composer textarea { min-height: 84px; resize: vertical; }
863
+ .planr-intent-picker { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; margin-bottom: 9px; }
864
+ .planr-intent-picker button {
865
+ min-height: 30px;
866
+ border: 1px solid var(--planr-color-rule);
867
+ border-radius: var(--planr-radius-small);
868
+ background: transparent;
869
+ cursor: pointer;
870
+ font-size: 10px;
871
+ }
872
+ .planr-intent-picker [aria-checked="true"] { border-color: var(--planr-color-primary); background: var(--planr-color-raised); }
873
+ .planr-field-error { min-height: 16px; margin: 0; color: var(--planr-color-danger); font-size: 10px; }
874
+ .planr-composer-actions { display: flex; justify-content: flex-end; gap: 7px; margin-top: 8px; }
875
+ .planr-composer-actions button, .planr-thread button, .planr-reply-form button {
876
+ min-height: 30px;
877
+ padding: 0 10px;
878
+ border: 1px solid var(--planr-color-rule);
879
+ border-radius: var(--planr-radius-small);
880
+ background: transparent;
881
+ cursor: pointer;
882
+ font-weight: 700;
883
+ }
884
+ .planr-composer-actions [type="submit"], .planr-reply-form [type="submit"] { border-color: var(--planr-color-primary); background: var(--planr-color-primary); color: var(--planr-color-background); }
885
+ `;
886
+ var ARTIFACT_ANNOTATION_MOBILE_CSS = `@media (max-width: 600px) { .planr-annotation-composer input, .planr-annotation-composer textarea, .planr-annotation-composer select { font-size: 16px; } }`;
887
+
763
888
  // packages/artifact/lib/artifact/ui/renderers.mjs
764
889
  var ARTIFACT_SHELL_STATES = Object.freeze([
765
890
  "ready",
@@ -1817,128 +1942,7 @@ button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-
1817
1942
  font: 9px/1 var(--planr-font-mono);
1818
1943
  pointer-events: none;
1819
1944
  }
1820
- .planr-annotation-layer { position: absolute; z-index: 6; inset: 0; }
1821
- .planr-shell[data-planr-review-mode="interact"] .planr-annotation-layer { pointer-events: none; }
1822
- .planr-shell[data-planr-review-mode="comment"] .planr-annotation-layer { cursor: crosshair; touch-action: none; }
1823
- .planr-shell[data-planr-review-mode="comment"] .planr-frame iframe { pointer-events: none; }
1824
- .planr-region-selection {
1825
- position: absolute;
1826
- min-width: 2px;
1827
- min-height: 2px;
1828
- border: 2px solid var(--planr-color-primary);
1829
- border-radius: var(--planr-radius-small);
1830
- background: color-mix(in srgb, var(--planr-color-primary) 14%, transparent);
1831
- pointer-events: none;
1832
- }
1833
- .planr-pin {
1834
- position: absolute;
1835
- z-index: 8;
1836
- width: 44px;
1837
- height: 44px;
1838
- min-width: 44px;
1839
- min-height: 44px;
1840
- translate: -50% -50%;
1841
- display: grid;
1842
- place-items: center;
1843
- padding: 0;
1844
- border: 8px solid transparent;
1845
- border-radius: 50%;
1846
- background-clip: padding-box;
1847
- color: var(--planr-color-on-danger);
1848
- cursor: pointer;
1849
- pointer-events: auto;
1850
- font: 700 10px/1 var(--planr-font-mono);
1851
- box-shadow: 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent);
1852
- }
1853
- .planr-pin-fix { background-color: var(--planr-color-danger); }
1854
- .planr-pin-improve { background-color: var(--planr-color-primary-strong); color: var(--planr-color-on-improve); }
1855
- .planr-pin-question { background-color: var(--planr-color-question); color: var(--planr-color-on-question); }
1856
- .planr-pin-resolved, .planr-pin-addressed { background-color: var(--planr-color-resolved); color: var(--planr-color-on-resolved); }
1857
- .planr-pin-highlight { animation: planr-pin-highlight 1.2s ease-out; }
1858
- @keyframes planr-pin-highlight {
1859
- 0%, 35% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--planr-color-primary) 52%, transparent), 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent); }
1860
- 100% { box-shadow: 0 4px 14px color-mix(in srgb, var(--planr-color-background) 38%, transparent); }
1861
- }
1862
- .planr-pin-region {
1863
- position: absolute;
1864
- z-index: 7;
1865
- min-width: 2px;
1866
- min-height: 2px;
1867
- border: 2px solid var(--planr-color-danger);
1868
- border-radius: var(--planr-radius-small);
1869
- background: color-mix(in srgb, var(--planr-color-danger) 12%, transparent);
1870
- pointer-events: none;
1871
- }
1872
- .planr-pin-region-improve { border-color: var(--planr-color-primary-strong); background: color-mix(in srgb, var(--planr-color-primary-strong) 12%, transparent); }
1873
- .planr-pin-region-question { border-color: var(--planr-color-question); background: color-mix(in srgb, var(--planr-color-question) 12%, transparent); }
1874
- .planr-pin-region-resolved, .planr-pin-region-addressed { border-color: var(--planr-color-resolved); background: color-mix(in srgb, var(--planr-color-resolved) 10%, transparent); }
1875
- .planr-annotation-composer {
1876
- position: fixed;
1877
- inset: auto;
1878
- z-index: 100;
1879
- box-sizing: border-box;
1880
- width: min(360px, calc(100vw - 24px));
1881
- max-height: min(620px, calc(100dvh - 24px));
1882
- margin: 0;
1883
- overflow: auto;
1884
- overscroll-behavior: contain;
1885
- translate: none;
1886
- transform: none;
1887
- padding: 14px;
1888
- border: 1px solid var(--planr-color-rule);
1889
- border-radius: var(--planr-radius-large);
1890
- background: var(--planr-color-panel);
1891
- color: var(--planr-color-text);
1892
- box-shadow: 0 18px 60px color-mix(in srgb, var(--planr-color-background) 58%, transparent);
1893
- cursor: default;
1894
- pointer-events: auto;
1895
- }
1896
- .planr-annotation-composer strong { display: block; margin: 0; font: 650 14px/1.2 var(--planr-font-display); }
1897
- .planr-composer-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
1898
- .planr-composer-header button { display: grid; place-items: center; flex: 0 0 28px; width: 28px; height: 28px; padding: 0; border: 1px solid transparent; border-radius: var(--planr-radius-small); background: transparent; color: var(--planr-color-text-muted); font: 22px/1 var(--planr-font-body); cursor: pointer; }
1899
- .planr-composer-header button:hover { background: var(--planr-color-raised); color: var(--planr-color-text); }
1900
- .planr-annotation-composer :focus-visible { outline: 2px solid var(--planr-color-primary); outline-offset: 2px; }
1901
- .planr-annotation-composer::backdrop { background: transparent; pointer-events: none; }
1902
- .planr-annotation-composer label, .planr-identity label {
1903
- display: grid;
1904
- gap: 5px;
1905
- margin-bottom: 9px;
1906
- color: var(--planr-color-text-muted);
1907
- font-size: 11px;
1908
- }
1909
- .planr-annotation-composer input, .planr-annotation-composer textarea, .planr-identity input,
1910
- .planr-reply-form textarea {
1911
- width: 100%;
1912
- padding: 8px 9px;
1913
- border: 1px solid var(--planr-color-rule);
1914
- border-radius: var(--planr-radius-small);
1915
- background: var(--planr-color-chrome);
1916
- color: var(--planr-color-text);
1917
- }
1918
- .planr-annotation-composer textarea { min-height: 84px; resize: vertical; }
1919
- .planr-intent-picker { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; margin-bottom: 9px; }
1920
- .planr-intent-picker button {
1921
- min-height: 30px;
1922
- border: 1px solid var(--planr-color-rule);
1923
- border-radius: var(--planr-radius-small);
1924
- background: transparent;
1925
- cursor: pointer;
1926
- font-size: 10px;
1927
- }
1928
- .planr-intent-picker [aria-checked="true"] { border-color: var(--planr-color-primary); background: var(--planr-color-raised); }
1929
- .planr-field-error { min-height: 16px; margin: 0; color: var(--planr-color-danger); font-size: 10px; }
1930
- .planr-composer-actions { display: flex; justify-content: flex-end; gap: 7px; margin-top: 8px; }
1931
- .planr-composer-actions button, .planr-thread button, .planr-reply-form button {
1932
- min-height: 30px;
1933
- padding: 0 10px;
1934
- border: 1px solid var(--planr-color-rule);
1935
- border-radius: var(--planr-radius-small);
1936
- background: transparent;
1937
- cursor: pointer;
1938
- font-weight: 700;
1939
- }
1940
- .planr-composer-actions [type="submit"], .planr-reply-form [type="submit"] { border-color: var(--planr-color-primary); background: var(--planr-color-primary); color: var(--planr-color-background); }
1941
- .planr-stage-status {
1945
+ ${ARTIFACT_ANNOTATION_CSS}.planr-stage-status {
1942
1946
  position: absolute;
1943
1947
  z-index: 20;
1944
1948
  inset: 76px 0 0;
@@ -2069,7 +2073,7 @@ button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-
2069
2073
  .planr-reply-hint { font-size: 11px; color: var(--planr-color-text-muted); }
2070
2074
  .planr-reply-form .planr-reply-send { display: grid; place-items: center; flex: 0 0 30px; width: 30px; min-width: 30px; height: 30px; min-height: 30px; padding: 0; border-radius: 7px; }
2071
2075
  .planr-reply-form .planr-reply-send:disabled { opacity: .35; cursor: not-allowed; }
2072
- @media (max-width: 600px) { .planr-annotation-composer input, .planr-annotation-composer textarea, .planr-annotation-composer select { font-size: 16px; } }
2076
+ ${ARTIFACT_ANNOTATION_MOBILE_CSS}
2073
2077
  .planr-decision-slot { padding: 12px; border-top: 1px solid var(--planr-color-rule); background: var(--planr-color-chrome); }
2074
2078
  .planr-decision-slot label { display: block; margin-bottom: 6px; color: var(--planr-color-text-muted); font-size: 11px; }
2075
2079
  .planr-decision-slot textarea {
@@ -595,9 +595,10 @@ function createArtifactReviewServer({
595
595
  const mediaTypes = {
596
596
  document: "text/html",
597
597
  runtime: "text/javascript",
598
- stylesheet: "text/css"
598
+ stylesheet: "text/css",
599
+ font: "font/ttf"
599
600
  };
600
- if (!Object.hasOwn(mediaTypes, response.asset) || typeof response.body !== "string")
601
+ if (!Object.hasOwn(mediaTypes, response.asset) || (response.asset === "font" ? !Buffer.isBuffer(response.body) : typeof response.body !== "string"))
601
602
  throw new Error("Invalid owner asset response.");
602
603
  send(
603
604
  res,
@@ -605,7 +606,7 @@ function createArtifactReviewServer({
605
606
  response.body,
606
607
  {
607
608
  ...parentHeaders(),
608
- "content-type": `${mediaTypes[response.asset]}; charset=utf-8`,
609
+ "content-type": response.asset === "font" ? mediaTypes.font : `${mediaTypes[response.asset]}; charset=utf-8`,
609
610
  "content-security-policy": "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: blob:; font-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'"
610
611
  },
611
612
  { head }