@fabrika/canvas-kernel 0.1.45 → 0.3.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.
- package/README.md +33 -67
- package/index.ts +20 -83
- package/package.json +69 -72
- package/src/client/AnnotationProvider.tsx +218 -255
- package/src/client/AnnotationSidebar.tsx +393 -338
- package/src/client/FileIcon.tsx +105 -66
- package/src/client/PlanRenderer.tsx +607 -551
- package/src/client/RenderErrorContext.ts +7 -7
- package/src/client/ResponsePreview.tsx +192 -173
- package/src/client/annotationDom.ts +43 -97
- package/src/client/annotationDraft.ts +106 -96
- package/src/client/appContext.tsx +40 -40
- package/src/client/components/Callout.tsx +20 -20
- package/src/client/components/Checklist.tsx +27 -29
- package/src/client/components/Choice.tsx +178 -159
- package/src/client/components/CodeBlock.tsx +27 -26
- package/src/client/components/Diff.tsx +16 -17
- package/src/client/components/FilePreview.tsx +102 -74
- package/src/client/components/Image.tsx +41 -39
- package/src/client/components/Markdown.tsx +33 -32
- package/src/client/components/Mermaid.tsx +593 -542
- package/src/client/components/Note.tsx +8 -8
- package/src/client/components/Priority.tsx +10 -12
- package/src/client/components/ResponseNote.tsx +16 -15
- package/src/client/components/Section.tsx +28 -26
- package/src/client/components/Table.tsx +33 -30
- package/src/client/components/Task.tsx +58 -60
- package/src/client/components/UserInput.tsx +169 -152
- package/src/client/components/index.ts +16 -16
- package/src/client/components/renderMarkdownChildren.tsx +86 -68
- package/src/client/diffLines.ts +51 -39
- package/src/client/generateMarkdown.ts +197 -191
- package/src/client/hostContext.tsx +39 -34
- package/src/client/index.ts +44 -125
- package/src/client/pageGlobals.ts +25 -0
- package/src/client/persistenceSchemas.ts +41 -0
- package/src/client/preact-all.ts +4 -4
- package/src/client/runtime.ts +58 -111
- package/src/client/styles.css +1 -74
- package/src/engine/compiler.ts +411 -323
- package/src/engine/file-admission.ts +25 -0
- package/src/engine/paths.ts +44 -44
- package/src/engine/session.ts +515 -626
- package/src/engine/sessionSchemas.ts +71 -0
- package/src/engine/watcher.ts +70 -60
- package/src/engine/websocket.ts +134 -132
- package/annotate.ts +0 -94
- package/daemon.ts +0 -46
- package/src/client/AnnotationDraftFooter.tsx +0 -76
- package/src/client/AnnotationEditor.tsx +0 -320
- package/src/client/AnnotationList.tsx +0 -190
- package/src/client/Popover.tsx +0 -361
- package/src/client/SessionContext.tsx +0 -3
- package/src/client/annotationContext.ts +0 -130
- package/src/client/annotationMarkdown.ts +0 -102
- package/src/client/annotationTarget.ts +0 -73
- package/src/client/blockTarget.ts +0 -127
- package/src/client/highlightRange.ts +0 -262
- package/src/client/popoverPosition.ts +0 -46
- package/src/client/regionTarget.ts +0 -180
- package/src/client/testing/dom.ts +0 -74
- package/src/client/textTarget.ts +0 -31
- package/src/client/useRegionAnnotation.tsx +0 -188
- package/src/client/useTextAnnotation.tsx +0 -194
- package/src/client/utils.ts +0 -33
- package/src/engine/channel.ts +0 -278
- package/src/engine/http-utils.ts +0 -14
- package/src/engine/lifecycle.ts +0 -302
- package/src/engine/router.ts +0 -16
- package/src/engine/waiter.ts +0 -188
package/src/client/FileIcon.tsx
CHANGED
|
@@ -1,76 +1,115 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
1
|
interface FileIconProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
name: string
|
|
3
|
+
type: 'file' | 'dir'
|
|
4
|
+
expanded?: boolean
|
|
5
|
+
className?: string
|
|
8
6
|
}
|
|
9
7
|
|
|
10
8
|
const extColors: Record<string, string> = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
// TypeScript / JavaScript
|
|
10
|
+
ts: '#3178c6',
|
|
11
|
+
tsx: '#3178c6',
|
|
12
|
+
js: '#e8a32e',
|
|
13
|
+
jsx: '#4ba0c8',
|
|
14
|
+
// Web
|
|
15
|
+
html: '#e34c26',
|
|
16
|
+
css: '#264de4',
|
|
17
|
+
scss: '#c69',
|
|
18
|
+
// Data
|
|
19
|
+
json: '#7a7568',
|
|
20
|
+
yaml: '#cb171e',
|
|
21
|
+
yml: '#cb171e',
|
|
22
|
+
toml: '#9c4221',
|
|
23
|
+
// Systems
|
|
24
|
+
rs: '#dea584',
|
|
25
|
+
go: '#00add8',
|
|
26
|
+
c: '#6a6a6a',
|
|
27
|
+
cpp: '#f34b7d',
|
|
28
|
+
h: '#6a6a6a',
|
|
29
|
+
// Scripting
|
|
30
|
+
py: '#3572a5',
|
|
31
|
+
rb: '#cc342d',
|
|
32
|
+
sh: '#5a8c3c',
|
|
33
|
+
bash: '#5a8c3c',
|
|
34
|
+
// Markup / docs
|
|
35
|
+
md: '#3573b5',
|
|
36
|
+
txt: '#6b6560',
|
|
37
|
+
// Config
|
|
38
|
+
lock: '#6b6560',
|
|
39
|
+
gitignore: '#6b6560',
|
|
40
|
+
// Images
|
|
41
|
+
svg: '#d9952e',
|
|
42
|
+
png: '#6a9c2e',
|
|
43
|
+
jpg: '#6a9c2e',
|
|
44
|
+
gif: '#6a9c2e',
|
|
45
|
+
}
|
|
28
46
|
|
|
29
47
|
const extLabels: Record<string, string> = {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
48
|
+
ts: 'TS',
|
|
49
|
+
tsx: 'TX',
|
|
50
|
+
js: 'JS',
|
|
51
|
+
jsx: 'JX',
|
|
52
|
+
py: 'PY',
|
|
53
|
+
rs: 'RS',
|
|
54
|
+
go: 'GO',
|
|
55
|
+
rb: 'RB',
|
|
56
|
+
json: '{}',
|
|
57
|
+
yaml: 'YM',
|
|
58
|
+
yml: 'YM',
|
|
59
|
+
toml: 'TM',
|
|
60
|
+
html: '<>',
|
|
61
|
+
css: '#',
|
|
62
|
+
scss: '#',
|
|
63
|
+
md: 'M↓',
|
|
64
|
+
sh: '$',
|
|
65
|
+
bash: '$',
|
|
66
|
+
c: 'C',
|
|
67
|
+
cpp: 'C+',
|
|
68
|
+
h: 'H',
|
|
69
|
+
svg: '◇',
|
|
70
|
+
png: '▣',
|
|
71
|
+
jpg: '▣',
|
|
72
|
+
}
|
|
38
73
|
|
|
39
|
-
export function FileIcon({ name, type, expanded, className =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
export function FileIcon({ name, type, expanded, className = '' }: FileIconProps) {
|
|
75
|
+
if (type === 'dir') {
|
|
76
|
+
return (
|
|
77
|
+
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" className={`flex-shrink-0 ${className}`}>
|
|
78
|
+
{expanded
|
|
79
|
+
? (
|
|
80
|
+
<path
|
|
81
|
+
d="M1.5 3.5h5l1.5 1.5h6.5v8h-13z"
|
|
82
|
+
style={{ fill: 'var(--color-folder-fill-active)', stroke: 'var(--color-folder-stroke-active)' }}
|
|
83
|
+
strokeWidth="1"
|
|
84
|
+
/>
|
|
85
|
+
)
|
|
86
|
+
: <path d="M1.5 3.5h5l1.5 1.5h6.5v8h-13z" style={{ fill: 'var(--color-folder-fill)', stroke: 'var(--color-folder-stroke)' }} strokeWidth="1" />}
|
|
87
|
+
</svg>
|
|
88
|
+
)
|
|
89
|
+
}
|
|
51
90
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
91
|
+
const ext = name.includes('.') ? name.split('.').pop()!.toLowerCase() : ''
|
|
92
|
+
const color = extColors[ext] || '#6b6560'
|
|
93
|
+
const label = extLabels[ext]
|
|
55
94
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
95
|
+
return (
|
|
96
|
+
<svg width="14" height="14" viewBox="0 0 16 16" className={`flex-shrink-0 ${className}`}>
|
|
97
|
+
{/* File shape with folded corner */}
|
|
98
|
+
<path d="M2 1.5h8l3.5 3.5v9.5a1 1 0 01-1 1H3a1 1 0 01-1-1v-12a1 1 0 011-1z" fill={color} opacity="0.85" />
|
|
99
|
+
<path d="M10 1.5v2.5a1 1 0 001 1h2.5" fill="none" stroke="white" strokeWidth="0.5" opacity="0.5" />
|
|
100
|
+
{label && (
|
|
101
|
+
<text
|
|
102
|
+
x="8"
|
|
103
|
+
y="11.5"
|
|
104
|
+
textAnchor="middle"
|
|
105
|
+
fill="white"
|
|
106
|
+
fontSize="5.5"
|
|
107
|
+
fontFamily="monospace"
|
|
108
|
+
fontWeight="600"
|
|
109
|
+
>
|
|
110
|
+
{label}
|
|
111
|
+
</text>
|
|
112
|
+
)}
|
|
113
|
+
</svg>
|
|
114
|
+
)
|
|
76
115
|
}
|