agent-canvas 0.1.44 → 0.2.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 (115) hide show
  1. package/README.md +14 -0
  2. package/bin/lib/commands/daemon.ts +3 -6
  3. package/bin/lib/commands/push.ts +1 -1
  4. package/bin/lib/daemon-lifecycle.ts +65 -72
  5. package/bin/lib/helpers.test.ts +1 -0
  6. package/bin/lib/helpers.ts +30 -74
  7. package/daemon/build.ts +37 -16
  8. package/daemon/client/App.tsx +27 -61
  9. package/daemon/client/CompareView.tsx +4 -4
  10. package/daemon/client/FileBrowser.tsx +4 -4
  11. package/daemon/client/FileViewer.tsx +4 -4
  12. package/daemon/client/OverviewView.tsx +2 -2
  13. package/daemon/client/RevisionSelect.tsx +1 -1
  14. package/daemon/client/canvas-runtime.ts +1 -0
  15. package/daemon/client/clientApi.ts +18 -0
  16. package/daemon/client/components/index.ts +3 -16
  17. package/daemon/client/styles.css +4 -457
  18. package/daemon/dist/annotations-runtime.js +1 -0
  19. package/daemon/dist/client.css +1 -1
  20. package/daemon/dist/client.js +76 -76
  21. package/daemon/dist/components.js +59 -59
  22. package/daemon/dist/index.html +1 -0
  23. package/daemon/dist/preact-compat.js +1 -1
  24. package/daemon/dist/runtime.js +1 -1
  25. package/daemon/src/components.ts +13 -0
  26. package/daemon/src/handlers/api.ts +13 -9
  27. package/daemon/src/handlers/files.ts +2 -3
  28. package/daemon/src/handlers/static.ts +1 -1
  29. package/daemon/src/handlers/uploads.ts +2 -3
  30. package/daemon/src/paths.ts +10 -24
  31. package/daemon/src/remote-feedback.test.ts +1 -1
  32. package/daemon/src/remote-feedback.ts +1 -1
  33. package/daemon/src/secrets-api.test.ts +2 -2
  34. package/daemon/src/server.ts +11 -10
  35. package/daemon/src/share-e2e.test.ts +1 -1
  36. package/daemon/src/share.test.ts +1 -1
  37. package/daemon/src/share.ts +1 -1
  38. package/daemon/tsconfig.json +1 -3
  39. package/package.json +11 -4
  40. package/.github/dark.png +0 -0
  41. package/.github/light.png +0 -0
  42. package/.github/workflows/ci.yml +0 -48
  43. package/.github/workflows/deploy-worker-prod.yml +0 -19
  44. package/.github/workflows/deploy-worker-stage.yml +0 -21
  45. package/.github/workflows/deploy-worker.yml +0 -72
  46. package/.github/workflows/release.yml +0 -36
  47. package/CLAUDE.md +0 -86
  48. package/bun.lock +0 -377
  49. package/daemon/client/AnnotationEditor.tsx +0 -315
  50. package/daemon/client/AnnotationProvider.tsx +0 -195
  51. package/daemon/client/AnnotationSidebar.tsx +0 -627
  52. package/daemon/client/FileIcon.tsx +0 -76
  53. package/daemon/client/PlanRenderer.tsx +0 -614
  54. package/daemon/client/Popover.tsx +0 -350
  55. package/daemon/client/RenderErrorContext.ts +0 -11
  56. package/daemon/client/ResponsePreview.tsx +0 -186
  57. package/daemon/client/SessionContext.tsx +0 -3
  58. package/daemon/client/annotationContext.ts +0 -114
  59. package/daemon/client/annotationDom.ts +0 -104
  60. package/daemon/client/annotationDraft.test.ts +0 -188
  61. package/daemon/client/annotationDraft.ts +0 -130
  62. package/daemon/client/compat/preact-all.ts +0 -4
  63. package/daemon/client/components/Callout.tsx +0 -26
  64. package/daemon/client/components/Checklist.tsx +0 -37
  65. package/daemon/client/components/Choice.tsx +0 -176
  66. package/daemon/client/components/CodeBlock.tsx +0 -35
  67. package/daemon/client/components/Diff.tsx +0 -65
  68. package/daemon/client/components/FilePreview.tsx +0 -88
  69. package/daemon/client/components/Image.tsx +0 -45
  70. package/daemon/client/components/Markdown.tsx +0 -44
  71. package/daemon/client/components/Mermaid.tsx +0 -565
  72. package/daemon/client/components/Note.tsx +0 -14
  73. package/daemon/client/components/Priority.tsx +0 -19
  74. package/daemon/client/components/ResponseNote.tsx +0 -19
  75. package/daemon/client/components/Section.tsx +0 -33
  76. package/daemon/client/components/Table.tsx +0 -35
  77. package/daemon/client/components/Task.tsx +0 -76
  78. package/daemon/client/components/UserInput.tsx +0 -174
  79. package/daemon/client/components/renderMarkdownChildren.tsx +0 -97
  80. package/daemon/client/generateMarkdown.ts +0 -273
  81. package/daemon/client/highlightRange.ts +0 -224
  82. package/daemon/client/popoverPosition.ts +0 -31
  83. package/daemon/client/runtime.ts +0 -123
  84. package/daemon/client/theme.css +0 -66
  85. package/daemon/client/useTextAnnotation.tsx +0 -188
  86. package/daemon/client/utils.ts +0 -13
  87. package/daemon/src/compiler.test.ts +0 -57
  88. package/daemon/src/compiler.ts +0 -360
  89. package/daemon/src/handlers/utils.ts +0 -14
  90. package/daemon/src/router.ts +0 -16
  91. package/daemon/src/session-secrets.test.ts +0 -83
  92. package/daemon/src/session.ts +0 -612
  93. package/daemon/src/watcher.ts +0 -71
  94. package/daemon/src/websocket.test.ts +0 -99
  95. package/daemon/src/websocket.ts +0 -211
  96. package/tsconfig.json +0 -14
  97. package/workers/canvas-share/README.md +0 -159
  98. package/workers/canvas-share/oblaka.ts +0 -56
  99. package/workers/canvas-share/package.json +0 -25
  100. package/workers/canvas-share/public/assets/.gitkeep +0 -0
  101. package/workers/canvas-share/public/assets/client.css +0 -2
  102. package/workers/canvas-share/public/assets/client.js +0 -91
  103. package/workers/canvas-share/public/assets/components.js +0 -65
  104. package/workers/canvas-share/public/assets/jsx-runtime.js +0 -3
  105. package/workers/canvas-share/public/assets/preact-compat.js +0 -1
  106. package/workers/canvas-share/public/assets/runtime.js +0 -1
  107. package/workers/canvas-share/public/index.html +0 -385
  108. package/workers/canvas-share/public/screenshot-dark.png +0 -0
  109. package/workers/canvas-share/public/screenshot-light.png +0 -0
  110. package/workers/canvas-share/src/index.test.ts +0 -209
  111. package/workers/canvas-share/src/index.ts +0 -518
  112. package/workers/canvas-share/src/types.ts +0 -119
  113. package/workers/canvas-share/src/util.ts +0 -156
  114. package/workers/canvas-share/src/validation.ts +0 -160
  115. package/workers/canvas-share/tsconfig.json +0 -16
@@ -1,11 +1,11 @@
1
1
  import React, { useEffect, useState, useContext, useCallback, useRef, useMemo } from "react";
2
2
  import { SessionContext } from "#canvas/runtime";
3
3
  import type { AnnotationContext } from "#canvas/runtime";
4
- import { useAnnotations } from "./AnnotationProvider";
5
- import { wrapRangeWithMark } from "./highlightRange";
4
+ import { useAnnotations } from "@fabrika/canvas-kernel/client";
5
+ import { wrapRangeWithMark } from "@fabrika/annotations";
6
6
  import { LANG_MAP } from "../langMap";
7
- import { generateAnnotationId } from "./utils";
8
- import { useTextAnnotation } from "./useTextAnnotation";
7
+ import { generateAnnotationId } from "@fabrika/annotations";
8
+ import { useTextAnnotation } from "@fabrika/annotations";
9
9
  import { FS_AVAILABLE } from "./clientApi";
10
10
 
11
11
  /** Walk up from a node to find the parent line div with data-line-num */
@@ -1,8 +1,8 @@
1
1
  import React, { useState, useContext, useMemo, useRef, useEffect, useCallback } from "react";
2
2
  import { SessionContext } from "#canvas/runtime";
3
- import { PlanRenderer } from "./PlanRenderer";
3
+ import { PlanRenderer } from "@fabrika/canvas-kernel/client";
4
4
  import { ComparePanelRenderer } from "./CompareView";
5
- import { ActiveViewContext, RevisionContext, type CanvasFileInfo, type RevisionInfo } from "./App";
5
+ import { ActiveViewContext, RevisionContext, type CanvasFileInfo, type RevisionInfo } from "@fabrika/canvas-kernel/client";
6
6
  import { extractBlockTree, matchBlocks, buildUnifiedDom } from "./unifiedDiff";
7
7
  import { runDomDiff } from "./domDiff";
8
8
 
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState, useRef, useContext } from "react";
2
- import { RevisionContext, RevisionInfo } from "./App";
2
+ import { RevisionContext, RevisionInfo } from "@fabrika/canvas-kernel/client";
3
3
 
4
4
  /** Format a revision for the trigger button: label or "Round N" */
5
5
  function revisionButtonLabel(r: RevisionInfo) {
@@ -0,0 +1 @@
1
+ export * from "@fabrika/canvas-kernel/runtime";
@@ -28,6 +28,7 @@ import {
28
28
  ENCRYPTION_META,
29
29
  type EncryptionMeta,
30
30
  } from "./shareCrypto";
31
+ import type { CanvasHost } from "@fabrika/canvas-kernel/client";
31
32
 
32
33
  declare global {
33
34
  interface Window {
@@ -334,3 +335,20 @@ export const FS_AVAILABLE: boolean = !MODE.isShared;
334
335
 
335
336
  /** Is live WebSocket session updates available? */
336
337
  export const WS_AVAILABLE: boolean = !MODE.isShared;
338
+
339
+ // --- Kernel host binding ----------------------------------------------------
340
+
341
+ /**
342
+ * What the kernel's annotation surface needs from this host. agent-canvas
343
+ * serves canvases in two modes, so these cannot use the kernel's local-only
344
+ * defaults: shared canvases come from the worker (and may be encrypted).
345
+ */
346
+ export const canvasHost: CanvasHost = {
347
+ get sessionId() {
348
+ return getIdentifier();
349
+ },
350
+ isShared: MODE.isShared,
351
+ fsAvailable: FS_AVAILABLE,
352
+ uploadUrl,
353
+ loadCanvasModule,
354
+ };
@@ -1,17 +1,4 @@
1
- export { Section } from "./Section";
2
- export { Item, Task } from "./Task";
3
- export { CodeBlock } from "./CodeBlock";
4
- export { Callout } from "./Callout";
5
- export { Note } from "./Note";
6
- export { Table } from "./Table";
7
- export { Checklist } from "./Checklist";
8
- export { Priority } from "./Priority";
9
- export { FilePreview } from "./FilePreview";
10
- export { Mermaid } from "./Mermaid";
11
- export { Diff } from "./Diff";
12
- export { Choice, MultiChoice } from "./Choice";
13
- export { UserInput, RangeInput } from "./UserInput";
1
+ // agent-canvas's canvas component set: the kernel's components plus the ones
2
+ // only this host can back (SecretInput needs the daemon's secret endpoints).
3
+ export * from "@fabrika/canvas-kernel/components";
14
4
  export { SecretInput } from "./SecretInput";
15
- export { ImageView } from "./Image";
16
- export { Markdown } from "./Markdown";
17
- export { useFeedback } from "#canvas/runtime";
@@ -1,458 +1,5 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Instrument+Serif&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
2
-
3
- @import "tailwindcss";
4
- @import "./theme.css";
1
+ /* agent-canvas's Tailwind entry.
2
+ The kernel's stylesheet brings Tailwind, the theme and the kernel's own
3
+ @source glob; this adds the globs for the chrome that lives in this host. */
4
+ @import "@fabrika/canvas-kernel/styles.css";
5
5
  @source "./**/*.{tsx,ts,jsx,js}";
6
-
7
- /* ── Non-theme CSS variables (not used by Tailwind utilities, just custom CSS) ── */
8
- :root {
9
- --color-shadow: rgba(0, 0, 0, 0.25);
10
- --color-scrollbar: rgba(255, 248, 240, 0.06);
11
- --color-scrollbar-hover: rgba(255, 248, 240, 0.12);
12
- --color-folder-fill: rgba(196, 154, 58, 0.15);
13
- --color-folder-fill-active: rgba(196, 154, 58, 0.25);
14
- --color-folder-stroke: rgba(196, 154, 58, 0.5);
15
- --color-folder-stroke-active: #c49a3a;
16
- --color-hljs-base: #c4beb7;
17
- --color-hljs-keyword: #d2a6ff;
18
- --color-hljs-string: #a8cc8c;
19
- --color-hljs-comment: #847d75;
20
- --color-hljs-number: #e8a87c;
21
- --color-hljs-variable: #7ec8e3;
22
- --color-hljs-function: #dbc074;
23
- --color-hljs-punctuation: #a09a92;
24
- }
25
-
26
- [data-theme="light"] {
27
- /* Override Tailwind theme vars */
28
- --color-bg-base: #faf5e6;
29
- --color-bg-surface: #f3edd8;
30
- --color-bg-elevated: #ebe4ce;
31
- --color-bg-code: #f0ebd5;
32
- --color-bg-input: rgba(80, 60, 10, 0.05);
33
- --color-bg-elevated-half: rgba(235, 228, 206, 0.5);
34
-
35
- --color-text-primary: #2a2520;
36
- --color-text-secondary: #5a5550;
37
- --color-text-tertiary: #9a9390;
38
- --color-text-code: #4a4540;
39
- --color-text-disabled: #c5c0b8;
40
- --color-text-inverse: #faf6ef;
41
-
42
- --color-border-subtle: rgba(80, 60, 30, 0.08);
43
- --color-border-medium: rgba(80, 60, 30, 0.10);
44
- --color-border-hover: rgba(80, 60, 30, 0.15);
45
- --color-border-strong: rgba(80, 60, 30, 0.20);
46
-
47
- --color-accent-green: #3a8a5a;
48
- --color-accent-green-muted: rgba(58, 138, 90, 0.10);
49
- --color-accent-amber: #a07820;
50
- --color-accent-amber-muted: rgba(160, 120, 32, 0.10);
51
- --color-accent-red: #b84a4a;
52
- --color-accent-red-muted: rgba(184, 74, 74, 0.08);
53
- --color-accent-blue: #4a7eb4;
54
- --color-accent-blue-muted: rgba(74, 126, 180, 0.08);
55
-
56
- --color-highlight-bg: rgba(200, 160, 30, 0.15);
57
- --color-highlight-border: rgba(200, 160, 30, 0.40);
58
- --color-highlight-annotation: rgba(200, 160, 30, 0.18);
59
- --color-highlight-active: rgba(200, 160, 30, 0.35);
60
- --color-highlight-selected: rgba(200, 160, 30, 0.10);
61
-
62
- --color-badge-bg: rgba(160, 120, 32, 0.15);
63
- --color-btn-primary: #2a2520;
64
- --color-btn-primary-text: #faf6ef;
65
-
66
- /* Override non-theme vars */
67
- --color-shadow: rgba(80, 60, 30, 0.10);
68
- --color-scrollbar: rgba(80, 60, 30, 0.08);
69
- --color-scrollbar-hover: rgba(80, 60, 30, 0.15);
70
- --color-folder-fill: rgba(160, 120, 32, 0.12);
71
- --color-folder-fill-active: rgba(160, 120, 32, 0.22);
72
- --color-folder-stroke: rgba(160, 120, 32, 0.4);
73
- --color-folder-stroke-active: #a07820;
74
- --color-hljs-base: #4a4540;
75
- --color-hljs-keyword: #7c3aed;
76
- --color-hljs-string: #2e7d32;
77
- --color-hljs-comment: #9a9390;
78
- --color-hljs-number: #c45a20;
79
- --color-hljs-variable: #1976d2;
80
- --color-hljs-function: #8a6d00;
81
- --color-hljs-punctuation: #6b6560;
82
- }
83
-
84
- /* ── Base styles ── */
85
- @layer base {
86
- body {
87
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
88
- background-color: var(--color-bg-base);
89
- color: var(--color-text-primary);
90
- -webkit-font-smoothing: antialiased;
91
- -moz-osx-font-smoothing: grayscale;
92
- }
93
- }
94
-
95
- code, pre, .font-mono {
96
- font-family: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
97
- }
98
-
99
- /* Annotation inline marks */
100
- mark[data-annotation-id] {
101
- background: var(--color-highlight-annotation);
102
- border-bottom: 1.5px solid var(--color-highlight-bg);
103
- border-radius: 2px;
104
- cursor: pointer;
105
- transition: background 150ms ease, box-shadow 150ms ease;
106
- color: inherit;
107
- padding: 1px 0;
108
- }
109
-
110
- mark[data-annotation-id].mark-active {
111
- background: var(--color-highlight-active);
112
- border-bottom: 2px solid var(--color-highlight-border);
113
- box-shadow: 0 0 0 1px var(--color-highlight-border);
114
- }
115
-
116
- @keyframes ann-flash {
117
- 0%, 100% { background: var(--color-highlight-annotation); }
118
- 25%, 75% { background: var(--color-highlight-active); }
119
- }
120
-
121
- .ann-flash {
122
- animation: ann-flash 0.6s ease 2;
123
- }
124
-
125
- /* Annotation highlight (legacy) */
126
- .annotation-highlight {
127
- background: var(--color-highlight-bg);
128
- border-bottom: 2px solid var(--color-highlight-border);
129
- border-radius: 2px;
130
- cursor: pointer;
131
- transition: background 150ms ease;
132
- }
133
-
134
- .annotation-highlight:hover,
135
- .annotation-highlight.active {
136
- background: var(--color-highlight-active);
137
- }
138
-
139
- /* Selection color */
140
- ::selection {
141
- background-color: var(--color-highlight-active);
142
- color: var(--color-text-primary);
143
- }
144
-
145
- /* Focus ring */
146
- *:focus-visible {
147
- outline: 2px solid var(--color-accent-blue);
148
- outline-offset: 2px;
149
- border-radius: 4px;
150
- }
151
-
152
- textarea:focus-visible {
153
- outline: none;
154
- }
155
-
156
- /* Transitions */
157
- button, a, [role="button"] {
158
- transition: all 150ms ease;
159
- }
160
-
161
- /* Scrollbar */
162
- ::-webkit-scrollbar {
163
- width: 6px;
164
- height: 6px;
165
- }
166
-
167
- ::-webkit-scrollbar-track {
168
- background: transparent;
169
- }
170
-
171
- ::-webkit-scrollbar-thumb {
172
- background: var(--color-scrollbar);
173
- border-radius: 3px;
174
- }
175
-
176
- ::-webkit-scrollbar-thumb:hover {
177
- background: var(--color-scrollbar-hover);
178
- }
179
-
180
- /* Diff highlights for compare view */
181
- .diff-added {
182
- background-color: color-mix(in srgb, var(--color-accent-green) 25%, transparent);
183
- border-radius: 2px;
184
- padding-inline: 1px;
185
- padding-block: 1px;
186
- }
187
- .diff-removed {
188
- background-color: color-mix(in srgb, var(--color-accent-red) 25%, transparent);
189
- border-radius: 2px;
190
- padding-inline: 1px;
191
- padding-block: 1px;
192
- text-decoration: line-through;
193
- text-decoration-color: var(--color-accent-red);
194
- }
195
-
196
- /* Block-level diff highlights for unified compare view */
197
- .diff-block-removed {
198
- background: color-mix(in srgb, var(--color-accent-red) 8%, transparent);
199
- border-left: 3px solid var(--color-accent-red);
200
- opacity: 0.7;
201
- }
202
- .diff-block-added {
203
- background: color-mix(in srgb, var(--color-accent-green) 8%, transparent);
204
- border-left: 3px solid var(--color-accent-green);
205
- }
206
- .diff-row-removed td {
207
- background: color-mix(in srgb, var(--color-accent-red) 10%, transparent);
208
- text-decoration: line-through;
209
- text-decoration-color: var(--color-accent-red);
210
- opacity: 0.6;
211
- }
212
- .diff-row-added td {
213
- background: color-mix(in srgb, var(--color-accent-green) 10%, transparent);
214
- }
215
- .diff-item-removed {
216
- background: color-mix(in srgb, var(--color-accent-red) 10%, transparent);
217
- text-decoration: line-through;
218
- text-decoration-color: var(--color-accent-red);
219
- opacity: 0.6;
220
- }
221
- .diff-item-added {
222
- background: color-mix(in srgb, var(--color-accent-green) 10%, transparent);
223
- }
224
- .diff-block-label {
225
- position: absolute;
226
- top: 4px;
227
- right: 8px;
228
- font-size: 10px;
229
- font-weight: 500;
230
- text-transform: uppercase;
231
- padding: 1px 6px;
232
- border-radius: 3px;
233
- pointer-events: none;
234
- }
235
-
236
- /* Plan update flash */
237
- @keyframes plan-refresh {
238
- 0% { opacity: 0.6; }
239
- 100% { opacity: 1; }
240
- }
241
-
242
- .plan-updated {
243
- animation: plan-refresh 300ms ease;
244
- }
245
-
246
- /* Range input styling */
247
- input[type="range"] {
248
- height: 20px;
249
- -webkit-appearance: none;
250
- appearance: none;
251
- background: transparent;
252
- }
253
-
254
- input[type="range"]::-webkit-slider-thumb {
255
- -webkit-appearance: none;
256
- appearance: none;
257
- width: 14px;
258
- height: 14px;
259
- border-radius: 50%;
260
- background: var(--color-accent-amber);
261
- cursor: pointer;
262
- border: 2px solid var(--color-bg-base);
263
- margin-top: -5px;
264
- }
265
-
266
- input[type="range"]::-moz-range-thumb {
267
- width: 14px;
268
- height: 14px;
269
- border-radius: 50%;
270
- background: var(--color-accent-amber);
271
- cursor: pointer;
272
- border: 2px solid var(--color-bg-base);
273
- }
274
-
275
- input[type="range"]::-webkit-slider-runnable-track {
276
- height: 4px;
277
- border-radius: 2px;
278
- background: transparent;
279
- }
280
-
281
- input[type="range"]::-moz-range-track {
282
- height: 4px;
283
- border-radius: 2px;
284
- background: transparent;
285
- }
286
-
287
- /* Prose (Markdown component) */
288
- .prose-canvas {
289
- color: var(--color-text-secondary);
290
- font-size: 0.875rem;
291
- line-height: 1.7;
292
- }
293
-
294
- .prose-canvas h1, .prose-canvas h2, .prose-canvas h3,
295
- .prose-canvas h4, .prose-canvas h5, .prose-canvas h6 {
296
- color: var(--color-text-primary);
297
- font-weight: 600;
298
- margin-top: 1.5em;
299
- margin-bottom: 0.5em;
300
- line-height: 1.3;
301
- }
302
-
303
- .prose-canvas h1 { font-size: 1.5rem; }
304
- .prose-canvas h2 { font-size: 1.25rem; }
305
- .prose-canvas h3 { font-size: 1.1rem; }
306
-
307
- .prose-canvas h1:first-child, .prose-canvas h2:first-child,
308
- .prose-canvas h3:first-child {
309
- margin-top: 0;
310
- }
311
-
312
- .prose-canvas p {
313
- margin-top: 0.75em;
314
- margin-bottom: 0.75em;
315
- }
316
-
317
- .prose-canvas p:first-child {
318
- margin-top: 0;
319
- }
320
-
321
- .prose-canvas a {
322
- color: var(--color-accent-blue);
323
- text-decoration: underline;
324
- text-decoration-color: color-mix(in srgb, var(--color-accent-blue) 40%, transparent);
325
- text-underline-offset: 2px;
326
- }
327
-
328
- .prose-canvas a:hover {
329
- text-decoration-color: var(--color-accent-blue);
330
- }
331
-
332
- .prose-canvas strong {
333
- color: var(--color-text-primary);
334
- font-weight: 600;
335
- }
336
-
337
- .prose-canvas code {
338
- font-size: 0.8em;
339
- background: var(--color-bg-code);
340
- color: var(--color-text-code);
341
- padding: 0.15em 0.4em;
342
- border-radius: 4px;
343
- }
344
-
345
- .prose-canvas pre {
346
- background: var(--color-bg-code);
347
- border-radius: 8px;
348
- padding: 1em;
349
- overflow-x: auto;
350
- margin-top: 0.75em;
351
- margin-bottom: 0.75em;
352
- }
353
-
354
- .prose-canvas pre code {
355
- background: transparent;
356
- padding: 0;
357
- font-size: 0.8rem;
358
- }
359
-
360
- .prose-canvas ul, .prose-canvas ol {
361
- padding-left: 1.5em;
362
- margin-top: 0.5em;
363
- margin-bottom: 0.5em;
364
- }
365
-
366
- .prose-canvas ul { list-style-type: disc; }
367
- .prose-canvas ol { list-style-type: decimal; }
368
- .prose-canvas li { margin-top: 0.25em; }
369
- .prose-canvas li > ul, .prose-canvas li > ol { margin-top: 0.25em; margin-bottom: 0; }
370
-
371
- .prose-canvas blockquote {
372
- border-left: 3px solid var(--color-border-strong);
373
- padding-left: 1em;
374
- margin-left: 0;
375
- margin-top: 0.75em;
376
- margin-bottom: 0.75em;
377
- color: var(--color-text-tertiary);
378
- }
379
-
380
- .prose-canvas hr {
381
- border: none;
382
- border-top: 1px solid var(--color-border-subtle);
383
- margin: 1.5em 0;
384
- }
385
-
386
- .prose-canvas table {
387
- width: 100%;
388
- border-collapse: collapse;
389
- margin-top: 0.75em;
390
- margin-bottom: 0.75em;
391
- font-size: 0.8rem;
392
- }
393
-
394
- .prose-canvas th, .prose-canvas td {
395
- border: 1px solid var(--color-border-subtle);
396
- padding: 0.5em 0.75em;
397
- text-align: left;
398
- }
399
-
400
- .prose-canvas th {
401
- background: var(--color-bg-elevated);
402
- color: var(--color-text-primary);
403
- font-weight: 600;
404
- }
405
-
406
- .prose-canvas img {
407
- max-width: 100%;
408
- border-radius: 8px;
409
- margin-top: 0.75em;
410
- margin-bottom: 0.75em;
411
- }
412
-
413
- /* highlight.js overrides */
414
- .hljs {
415
- background: transparent !important;
416
- color: var(--color-hljs-base) !important;
417
- }
418
-
419
- pre code.hljs {
420
- padding: 0 !important;
421
- }
422
-
423
- .hljs-keyword, .hljs-selector-tag, .hljs-built_in, .hljs-name, .hljs-tag {
424
- color: var(--color-hljs-keyword) !important;
425
- }
426
-
427
- .hljs-string, .hljs-title, .hljs-section, .hljs-attribute, .hljs-literal,
428
- .hljs-template-tag, .hljs-template-variable, .hljs-type {
429
- color: var(--color-hljs-string) !important;
430
- }
431
-
432
- .hljs-comment, .hljs-quote, .hljs-deletion, .hljs-meta {
433
- color: var(--color-hljs-comment) !important;
434
- }
435
-
436
- .hljs-number, .hljs-regexp, .hljs-addition {
437
- color: var(--color-hljs-number) !important;
438
- }
439
-
440
- .hljs-variable, .hljs-attr {
441
- color: var(--color-hljs-variable) !important;
442
- }
443
-
444
- .hljs-function .hljs-title, .hljs-title.function_ {
445
- color: var(--color-hljs-function) !important;
446
- }
447
-
448
- .hljs-params {
449
- color: var(--color-hljs-base) !important;
450
- }
451
-
452
- .hljs-property {
453
- color: var(--color-hljs-variable) !important;
454
- }
455
-
456
- .hljs-punctuation {
457
- color: var(--color-hljs-punctuation) !important;
458
- }
@@ -0,0 +1 @@
1
+ import{createContext as t,useContext as o}from"react";var i=t(null),r=t(""),e=t({sessionId:"",isShared:!1,fsAvailable:!1,uploadUrl:null});function s(){let n=o(i);if(!n)throw Error("useAnnotations requires an AnnotationProvider");return n}function l(){return o(e)}export{i as AnnotationCtx,e as AnnotationHostContext,r as SessionContext,l as useAnnotationHost,s as useAnnotations};