@pyreon/code 0.7.0 → 0.9.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.
- package/README.md +90 -0
- package/lib/analysis/index.js.html +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +3 -3
- package/src/editor.ts +2 -2
- package/src/tabbed-editor.ts +6 -2
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @pyreon/code
|
|
2
|
+
|
|
3
|
+
Reactive code editor for Pyreon. CodeMirror 6 with signal-backed state, lazy-loaded languages, minimap, and diff editor. ~250KB vs ~2.5MB for Monaco.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add @pyreon/code
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { createEditor, CodeEditor } from '@pyreon/code'
|
|
15
|
+
|
|
16
|
+
const editor = createEditor({
|
|
17
|
+
value: 'const x = 1',
|
|
18
|
+
language: 'typescript',
|
|
19
|
+
theme: 'dark',
|
|
20
|
+
minimap: true,
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
editor.value() // reactive signal
|
|
24
|
+
editor.value.set('new') // updates editor
|
|
25
|
+
|
|
26
|
+
<CodeEditor instance={editor} style="height: 400px" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Diff Editor
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { DiffEditor } from '@pyreon/code'
|
|
33
|
+
|
|
34
|
+
<DiffEditor original="const a = 1" modified="const a = 2" style="height: 300px" />
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Tabbed Editor
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { TabbedEditor } from '@pyreon/code'
|
|
41
|
+
|
|
42
|
+
<TabbedEditor
|
|
43
|
+
tabs={[
|
|
44
|
+
{ id: 'main', label: 'main.ts', value: 'export {}', language: 'typescript' },
|
|
45
|
+
{ id: 'style', label: 'style.css', value: 'body {}', language: 'css' },
|
|
46
|
+
]}
|
|
47
|
+
style="height: 500px"
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## API
|
|
52
|
+
|
|
53
|
+
### `createEditor(config)`
|
|
54
|
+
|
|
55
|
+
Create a reactive editor instance. Config options: `value`, `language`, `theme`, `readOnly`, `minimap`, `lineNumbers`, `tabSize`, `placeholder`, `diagnostics`, `lineHighlights`, `gutterMarkers`, `keybindings`.
|
|
56
|
+
|
|
57
|
+
**Returns `EditorInstance`:**
|
|
58
|
+
|
|
59
|
+
| Property | Type | Description |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `value` | `Signal<string>` | Two-way synced editor content |
|
|
62
|
+
| `language` | `Signal<EditorLanguage>` | Dynamic language switching |
|
|
63
|
+
| `theme` | `Signal<EditorTheme>` | Dynamic theme switching |
|
|
64
|
+
| `readOnly` | `Signal<boolean>` | Toggle read-only mode |
|
|
65
|
+
| `cursor` | `Computed<number>` | Cursor position |
|
|
66
|
+
| `selection` | `Computed<{from, to}>` | Current selection range |
|
|
67
|
+
| `lineCount` | `Computed<number>` | Number of lines |
|
|
68
|
+
| `focused` | `Computed<boolean>` | Whether editor has focus |
|
|
69
|
+
| `focus()` | method | Focus the editor |
|
|
70
|
+
| `insert(text)` | method | Insert text at cursor |
|
|
71
|
+
| `replaceSelection(text)` | method | Replace current selection |
|
|
72
|
+
| `goToLine(line)` | method | Scroll to line |
|
|
73
|
+
| `undo()` / `redo()` | method | Undo/redo |
|
|
74
|
+
| `foldAll()` / `unfoldAll()` | method | Code folding |
|
|
75
|
+
|
|
76
|
+
### `loadLanguage(lang)`
|
|
77
|
+
|
|
78
|
+
Lazy-load a language grammar. Supported: javascript, typescript, jsx, tsx, html, css, json, markdown, python, rust, sql, xml, yaml, cpp, java, go, php.
|
|
79
|
+
|
|
80
|
+
### `minimapExtension()`
|
|
81
|
+
|
|
82
|
+
Canvas-based code overview with viewport indicator and click-to-scroll.
|
|
83
|
+
|
|
84
|
+
### `darkTheme` / `lightTheme` / `resolveTheme(name)`
|
|
85
|
+
|
|
86
|
+
Built-in themes and theme resolver.
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
|
@@ -5386,7 +5386,7 @@ var drawChart = (function (exports) {
|
|
|
5386
5386
|
</script>
|
|
5387
5387
|
<script>
|
|
5388
5388
|
/*<!--*/
|
|
5389
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"\u0000rolldown/runtime.js","uid":"7c3449be-1"},{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js","uid":"7c3449be-3"},{"name":"src","children":[{"name":"components","children":[{"uid":"7c3449be-5","name":"code-editor.tsx"},{"uid":"7c3449be-11","name":"diff-editor.tsx"},{"uid":"7c3449be-13","name":"tabbed-editor.tsx"}]},{"uid":"7c3449be-7","name":"languages.ts"},{"uid":"7c3449be-9","name":"themes.ts"},{"uid":"7c3449be-15","name":"minimap.ts"},{"uid":"7c3449be-17","name":"editor.ts"},{"uid":"7c3449be-19","name":"index.ts"}]}]},{"name":"dist-B5vB-rif.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+common@1.5.1/node_modules/@lezer/common/dist/index.js","uid":"7c3449be-21"},{"name":"@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js","uid":"7c3449be-23"},{"name":"@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","uid":"7c3449be-25"}]}]},{"name":"dist-BAfzu5eu.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+html@1.3.13/node_modules/@lezer/html/dist/index.js","uid":"7c3449be-27"},{"name":"@codemirror+lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js","uid":"7c3449be-29"}]}]},{"name":"dist-BLlV_D16.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+css@1.3.2/node_modules/@lezer/css/dist/index.js","uid":"7c3449be-31"},{"name":"@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","uid":"7c3449be-33"}]}]},{"name":"dist-BNmKLTu8.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+yaml@1.0.4/node_modules/@lezer/yaml/dist/index.js","uid":"7c3449be-35"},{"name":"@codemirror+lang-yaml@6.1.2/node_modules/@codemirror/lang-yaml/dist/index.js","uid":"7c3449be-37"}]}]},{"name":"dist-BZtTlC1J.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js","uid":"7c3449be-39"}]},{"name":"dist-CTDqGIAf.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js","uid":"7c3449be-41"},{"name":"@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","uid":"7c3449be-43"}]}]},{"name":"dist-CTPisNZp.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","uid":"7c3449be-45"},{"name":"@codemirror+lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js","uid":"7c3449be-47"}]}]},{"name":"dist-Ce2tvOxv.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+rust@1.0.2/node_modules/@lezer/rust/dist/index.js","uid":"7c3449be-49"},{"name":"@codemirror+lang-rust@6.0.2/node_modules/@codemirror/lang-rust/dist/index.js","uid":"7c3449be-51"}]}]},{"name":"dist-CttF0OTv.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+php@1.0.5/node_modules/@lezer/php/dist/index.js","uid":"7c3449be-53"},{"name":"@codemirror+lang-php@6.0.2/node_modules/@codemirror/lang-php/dist/index.js","uid":"7c3449be-55"}]}]},{"name":"dist-DS2tluW9.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+python@1.1.18/node_modules/@lezer/python/dist/index.js","uid":"7c3449be-57"},{"name":"@codemirror+lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js","uid":"7c3449be-59"}]}]},{"name":"dist-DUNx9ldu.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+xml@1.0.6/node_modules/@lezer/xml/dist/index.js","uid":"7c3449be-61"},{"name":"@codemirror+lang-xml@6.1.0/node_modules/@codemirror/lang-xml/dist/index.js","uid":"7c3449be-63"}]}]},{"name":"dist-Dej_yf3k.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+cpp@1.1.5/node_modules/@lezer/cpp/dist/index.js","uid":"7c3449be-65"},{"name":"@codemirror+lang-cpp@6.0.3/node_modules/@codemirror/lang-cpp/dist/index.js","uid":"7c3449be-67"}]}]},{"name":"dist-DshStUxU.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+java@1.1.3/node_modules/@lezer/java/dist/index.js","uid":"7c3449be-69"},{"name":"@codemirror+lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js","uid":"7c3449be-71"}]}]},{"name":"dist-qTrOe7xY.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+go@1.0.1/node_modules/@lezer/go/dist/index.js","uid":"7c3449be-73"},{"name":"@codemirror+lang-go@6.0.1/node_modules/@codemirror/lang-go/dist/index.js","uid":"7c3449be-75"}]}]},{"name":"dist-v09vikKr.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+markdown@1.6.3/node_modules/@lezer/markdown/dist/index.js","uid":"7c3449be-77"},{"name":"@codemirror+lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js","uid":"7c3449be-79"}]}]}],"isRoot":true},"nodeParts":{"7c3449be-1":{"renderedLength":848,"gzipLength":487,"brotliLength":0,"metaUid":"7c3449be-0"},"7c3449be-3":{"renderedLength":1652,"gzipLength":832,"brotliLength":0,"metaUid":"7c3449be-2"},"7c3449be-5":{"renderedLength":731,"gzipLength":441,"brotliLength":0,"metaUid":"7c3449be-4"},"7c3449be-7":{"renderedLength":2245,"gzipLength":736,"brotliLength":0,"metaUid":"7c3449be-6"},"7c3449be-9":{"renderedLength":1544,"gzipLength":554,"brotliLength":0,"metaUid":"7c3449be-8"},"7c3449be-11":{"renderedLength":1594,"gzipLength":734,"brotliLength":0,"metaUid":"7c3449be-10"},"7c3449be-13":{"renderedLength":2681,"gzipLength":1174,"brotliLength":0,"metaUid":"7c3449be-12"},"7c3449be-15":{"renderedLength":3907,"gzipLength":1561,"brotliLength":0,"metaUid":"7c3449be-14"},"7c3449be-17":{"renderedLength":11804,"gzipLength":3478,"brotliLength":0,"metaUid":"7c3449be-16"},"7c3449be-19":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"7c3449be-18"},"7c3449be-21":{"renderedLength":63577,"gzipLength":17559,"brotliLength":0,"metaUid":"7c3449be-20"},"7c3449be-23":{"renderedLength":48115,"gzipLength":13327,"brotliLength":0,"metaUid":"7c3449be-22"},"7c3449be-25":{"renderedLength":14880,"gzipLength":5154,"brotliLength":0,"metaUid":"7c3449be-24"},"7c3449be-27":{"renderedLength":20064,"gzipLength":7172,"brotliLength":0,"metaUid":"7c3449be-26"},"7c3449be-29":{"renderedLength":22643,"gzipLength":6815,"brotliLength":0,"metaUid":"7c3449be-28"},"7c3449be-31":{"renderedLength":18215,"gzipLength":7907,"brotliLength":0,"metaUid":"7c3449be-30"},"7c3449be-33":{"renderedLength":15648,"gzipLength":5292,"brotliLength":0,"metaUid":"7c3449be-32"},"7c3449be-35":{"renderedLength":15734,"gzipLength":5562,"brotliLength":0,"metaUid":"7c3449be-34"},"7c3449be-37":{"renderedLength":2680,"gzipLength":1246,"brotliLength":0,"metaUid":"7c3449be-36"},"7c3449be-39":{"renderedLength":44475,"gzipLength":14911,"brotliLength":0,"metaUid":"7c3449be-38"},"7c3449be-41":{"renderedLength":81007,"gzipLength":31200,"brotliLength":0,"metaUid":"7c3449be-40"},"7c3449be-43":{"renderedLength":12487,"gzipLength":3908,"brotliLength":0,"metaUid":"7c3449be-42"},"7c3449be-45":{"renderedLength":1935,"gzipLength":1155,"brotliLength":0,"metaUid":"7c3449be-44"},"7c3449be-47":{"renderedLength":753,"gzipLength":427,"brotliLength":0,"metaUid":"7c3449be-46"},"7c3449be-49":{"renderedLength":72532,"gzipLength":25861,"brotliLength":0,"metaUid":"7c3449be-48"},"7c3449be-51":{"renderedLength":1190,"gzipLength":672,"brotliLength":0,"metaUid":"7c3449be-50"},"7c3449be-53":{"renderedLength":100186,"gzipLength":28340,"brotliLength":0,"metaUid":"7c3449be-52"},"7c3449be-55":{"renderedLength":2337,"gzipLength":1091,"brotliLength":0,"metaUid":"7c3449be-54"},"7c3449be-57":{"renderedLength":43364,"gzipLength":17192,"brotliLength":0,"metaUid":"7c3449be-56"},"7c3449be-59":{"renderedLength":11176,"gzipLength":3600,"brotliLength":0,"metaUid":"7c3449be-58"},"7c3449be-61":{"renderedLength":10375,"gzipLength":4022,"brotliLength":0,"metaUid":"7c3449be-60"},"7c3449be-63":{"renderedLength":11201,"gzipLength":3380,"brotliLength":0,"metaUid":"7c3449be-62"},"7c3449be-65":{"renderedLength":102366,"gzipLength":33579,"brotliLength":0,"metaUid":"7c3449be-64"},"7c3449be-67":{"renderedLength":1470,"gzipLength":734,"brotliLength":0,"metaUid":"7c3449be-66"},"7c3449be-69":{"renderedLength":40938,"gzipLength":16437,"brotliLength":0,"metaUid":"7c3449be-68"},"7c3449be-71":{"renderedLength":1547,"gzipLength":788,"brotliLength":0,"metaUid":"7c3449be-70"},"7c3449be-73":{"renderedLength":28598,"gzipLength":11399,"brotliLength":0,"metaUid":"7c3449be-72"},"7c3449be-75":{"renderedLength":6782,"gzipLength":2298,"brotliLength":0,"metaUid":"7c3449be-74"},"7c3449be-77":{"renderedLength":66307,"gzipLength":17756,"brotliLength":0,"metaUid":"7c3449be-76"},"7c3449be-79":{"renderedLength":17435,"gzipLength":5525,"brotliLength":0,"metaUid":"7c3449be-78"}},"nodeMetas":{"7c3449be-0":{"id":"\u0000rolldown/runtime.js","moduleParts":{"index.js":"7c3449be-1"},"imported":[],"importedBy":[]},"7c3449be-2":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js","moduleParts":{"index.js":"7c3449be-3"},"imported":[],"importedBy":[{"uid":"7c3449be-4"},{"uid":"7c3449be-10"},{"uid":"7c3449be-12"}]},"7c3449be-4":{"id":"/src/components/code-editor.tsx","moduleParts":{"index.js":"7c3449be-5"},"imported":[{"uid":"7c3449be-2"}],"importedBy":[{"uid":"7c3449be-18"},{"uid":"7c3449be-12"}]},"7c3449be-6":{"id":"/src/languages.ts","moduleParts":{"index.js":"7c3449be-7"},"imported":[{"uid":"7c3449be-42","dynamic":true},{"uid":"7c3449be-28","dynamic":true},{"uid":"7c3449be-32","dynamic":true},{"uid":"7c3449be-46","dynamic":true},{"uid":"7c3449be-78","dynamic":true},{"uid":"7c3449be-58","dynamic":true},{"uid":"7c3449be-50","dynamic":true},{"uid":"7c3449be-38","dynamic":true},{"uid":"7c3449be-62","dynamic":true},{"uid":"7c3449be-36","dynamic":true},{"uid":"7c3449be-66","dynamic":true},{"uid":"7c3449be-70","dynamic":true},{"uid":"7c3449be-74","dynamic":true},{"uid":"7c3449be-54","dynamic":true}],"importedBy":[{"uid":"7c3449be-18"},{"uid":"7c3449be-10"},{"uid":"7c3449be-16"}]},"7c3449be-8":{"id":"/src/themes.ts","moduleParts":{"index.js":"7c3449be-9"},"imported":[{"uid":"7c3449be-83"}],"importedBy":[{"uid":"7c3449be-18"},{"uid":"7c3449be-10"},{"uid":"7c3449be-16"}]},"7c3449be-10":{"id":"/src/components/diff-editor.tsx","moduleParts":{"index.js":"7c3449be-11"},"imported":[{"uid":"7c3449be-80"},{"uid":"7c3449be-81"},{"uid":"7c3449be-82"},{"uid":"7c3449be-83"},{"uid":"7c3449be-6"},{"uid":"7c3449be-8"},{"uid":"7c3449be-2"}],"importedBy":[{"uid":"7c3449be-18"}]},"7c3449be-12":{"id":"/src/components/tabbed-editor.tsx","moduleParts":{"index.js":"7c3449be-13"},"imported":[{"uid":"7c3449be-4"},{"uid":"7c3449be-2"}],"importedBy":[{"uid":"7c3449be-18"}]},"7c3449be-14":{"id":"/src/minimap.ts","moduleParts":{"index.js":"7c3449be-15"},"imported":[{"uid":"7c3449be-83"}],"importedBy":[{"uid":"7c3449be-18"},{"uid":"7c3449be-16"}]},"7c3449be-16":{"id":"/src/editor.ts","moduleParts":{"index.js":"7c3449be-17"},"imported":[{"uid":"7c3449be-84"},{"uid":"7c3449be-85"},{"uid":"7c3449be-80"},{"uid":"7c3449be-86"},{"uid":"7c3449be-87"},{"uid":"7c3449be-82"},{"uid":"7c3449be-83"},{"uid":"7c3449be-88"},{"uid":"7c3449be-6"},{"uid":"7c3449be-14"},{"uid":"7c3449be-8"}],"importedBy":[{"uid":"7c3449be-18"}]},"7c3449be-18":{"id":"/src/index.ts","moduleParts":{"index.js":"7c3449be-19"},"imported":[{"uid":"7c3449be-4"},{"uid":"7c3449be-10"},{"uid":"7c3449be-12"},{"uid":"7c3449be-16"},{"uid":"7c3449be-6"},{"uid":"7c3449be-14"},{"uid":"7c3449be-8"}],"importedBy":[],"isEntry":true},"7c3449be-20":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+common@1.5.1/node_modules/@lezer/common/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"7c3449be-21"},"imported":[],"importedBy":[{"uid":"7c3449be-42"},{"uid":"7c3449be-32"},{"uid":"7c3449be-78"},{"uid":"7c3449be-58"},{"uid":"7c3449be-36"},{"uid":"7c3449be-74"},{"uid":"7c3449be-54"},{"uid":"7c3449be-26"},{"uid":"7c3449be-76"},{"uid":"7c3449be-24"},{"uid":"7c3449be-22"}]},"7c3449be-22":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"7c3449be-23"},"imported":[{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-38"},{"uid":"7c3449be-36"},{"uid":"7c3449be-40"},{"uid":"7c3449be-26"},{"uid":"7c3449be-30"},{"uid":"7c3449be-44"},{"uid":"7c3449be-56"},{"uid":"7c3449be-48"},{"uid":"7c3449be-60"},{"uid":"7c3449be-34"},{"uid":"7c3449be-64"},{"uid":"7c3449be-68"},{"uid":"7c3449be-72"},{"uid":"7c3449be-52"}]},"7c3449be-24":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"7c3449be-25"},"imported":[{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-38"},{"uid":"7c3449be-36"},{"uid":"7c3449be-40"},{"uid":"7c3449be-26"},{"uid":"7c3449be-30"},{"uid":"7c3449be-44"},{"uid":"7c3449be-76"},{"uid":"7c3449be-56"},{"uid":"7c3449be-48"},{"uid":"7c3449be-60"},{"uid":"7c3449be-34"},{"uid":"7c3449be-64"},{"uid":"7c3449be-68"},{"uid":"7c3449be-72"},{"uid":"7c3449be-52"}]},"7c3449be-26":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+html@1.3.13/node_modules/@lezer/html/dist/index.js","moduleParts":{"dist-BAfzu5eu.js":"7c3449be-27"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"},{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-28"}]},"7c3449be-28":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js","moduleParts":{"dist-BAfzu5eu.js":"7c3449be-29"},"imported":[{"uid":"7c3449be-26"},{"uid":"7c3449be-32"},{"uid":"7c3449be-42"},{"uid":"7c3449be-83"},{"uid":"7c3449be-82"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"},{"uid":"7c3449be-78"},{"uid":"7c3449be-54"}]},"7c3449be-30":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+css@1.3.2/node_modules/@lezer/css/dist/index.js","moduleParts":{"dist-BLlV_D16.js":"7c3449be-31"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-32"}]},"7c3449be-32":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","moduleParts":{"dist-BLlV_D16.js":"7c3449be-33"},"imported":[{"uid":"7c3449be-30"},{"uid":"7c3449be-80"},{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-6"},{"uid":"7c3449be-28"}]},"7c3449be-34":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+yaml@1.0.4/node_modules/@lezer/yaml/dist/index.js","moduleParts":{"dist-BNmKLTu8.js":"7c3449be-35"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-36"}]},"7c3449be-36":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-yaml@6.1.2/node_modules/@codemirror/lang-yaml/dist/index.js","moduleParts":{"dist-BNmKLTu8.js":"7c3449be-37"},"imported":[{"uid":"7c3449be-34"},{"uid":"7c3449be-80"},{"uid":"7c3449be-20"},{"uid":"7c3449be-24"},{"uid":"7c3449be-22"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-38":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js","moduleParts":{"dist-BZtTlC1J.js":"7c3449be-39"},"imported":[{"uid":"7c3449be-80"},{"uid":"7c3449be-24"},{"uid":"7c3449be-22"},{"uid":"7c3449be-84"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-40":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js","moduleParts":{"dist-CTDqGIAf.js":"7c3449be-41"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-42"}]},"7c3449be-42":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","moduleParts":{"dist-CTDqGIAf.js":"7c3449be-43"},"imported":[{"uid":"7c3449be-40"},{"uid":"7c3449be-80"},{"uid":"7c3449be-82"},{"uid":"7c3449be-83"},{"uid":"7c3449be-84"},{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-6"},{"uid":"7c3449be-28"}]},"7c3449be-44":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","moduleParts":{"dist-CTPisNZp.js":"7c3449be-45"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-46"}]},"7c3449be-46":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js","moduleParts":{"dist-CTPisNZp.js":"7c3449be-47"},"imported":[{"uid":"7c3449be-44"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-48":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+rust@1.0.2/node_modules/@lezer/rust/dist/index.js","moduleParts":{"dist-Ce2tvOxv.js":"7c3449be-49"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-50"}]},"7c3449be-50":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-rust@6.0.2/node_modules/@codemirror/lang-rust/dist/index.js","moduleParts":{"dist-Ce2tvOxv.js":"7c3449be-51"},"imported":[{"uid":"7c3449be-48"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-52":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+php@1.0.5/node_modules/@lezer/php/dist/index.js","moduleParts":{"dist-CttF0OTv.js":"7c3449be-53"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-54"}]},"7c3449be-54":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-php@6.0.2/node_modules/@codemirror/lang-php/dist/index.js","moduleParts":{"dist-CttF0OTv.js":"7c3449be-55"},"imported":[{"uid":"7c3449be-52"},{"uid":"7c3449be-20"},{"uid":"7c3449be-28"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-56":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+python@1.1.18/node_modules/@lezer/python/dist/index.js","moduleParts":{"dist-DS2tluW9.js":"7c3449be-57"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-58"}]},"7c3449be-58":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js","moduleParts":{"dist-DS2tluW9.js":"7c3449be-59"},"imported":[{"uid":"7c3449be-56"},{"uid":"7c3449be-80"},{"uid":"7c3449be-20"},{"uid":"7c3449be-84"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-60":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+xml@1.0.6/node_modules/@lezer/xml/dist/index.js","moduleParts":{"dist-DUNx9ldu.js":"7c3449be-61"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-62"}]},"7c3449be-62":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-xml@6.1.0/node_modules/@codemirror/lang-xml/dist/index.js","moduleParts":{"dist-DUNx9ldu.js":"7c3449be-63"},"imported":[{"uid":"7c3449be-60"},{"uid":"7c3449be-80"},{"uid":"7c3449be-82"},{"uid":"7c3449be-83"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-64":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+cpp@1.1.5/node_modules/@lezer/cpp/dist/index.js","moduleParts":{"dist-Dej_yf3k.js":"7c3449be-65"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-66"}]},"7c3449be-66":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-cpp@6.0.3/node_modules/@codemirror/lang-cpp/dist/index.js","moduleParts":{"dist-Dej_yf3k.js":"7c3449be-67"},"imported":[{"uid":"7c3449be-64"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-68":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+java@1.1.3/node_modules/@lezer/java/dist/index.js","moduleParts":{"dist-DshStUxU.js":"7c3449be-69"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-70"}]},"7c3449be-70":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js","moduleParts":{"dist-DshStUxU.js":"7c3449be-71"},"imported":[{"uid":"7c3449be-68"},{"uid":"7c3449be-80"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-72":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+go@1.0.1/node_modules/@lezer/go/dist/index.js","moduleParts":{"dist-qTrOe7xY.js":"7c3449be-73"},"imported":[{"uid":"7c3449be-22"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-74"}]},"7c3449be-74":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-go@6.0.1/node_modules/@codemirror/lang-go/dist/index.js","moduleParts":{"dist-qTrOe7xY.js":"7c3449be-75"},"imported":[{"uid":"7c3449be-72"},{"uid":"7c3449be-80"},{"uid":"7c3449be-84"},{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-76":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+markdown@1.6.3/node_modules/@lezer/markdown/dist/index.js","moduleParts":{"dist-v09vikKr.js":"7c3449be-77"},"imported":[{"uid":"7c3449be-20"},{"uid":"7c3449be-24"}],"importedBy":[{"uid":"7c3449be-78"}]},"7c3449be-78":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js","moduleParts":{"dist-v09vikKr.js":"7c3449be-79"},"imported":[{"uid":"7c3449be-82"},{"uid":"7c3449be-83"},{"uid":"7c3449be-80"},{"uid":"7c3449be-84"},{"uid":"7c3449be-76"},{"uid":"7c3449be-28"},{"uid":"7c3449be-20"}],"importedBy":[{"uid":"7c3449be-6"}]},"7c3449be-80":{"id":"@codemirror/language","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-10"},{"uid":"7c3449be-16"},{"uid":"7c3449be-42"},{"uid":"7c3449be-28"},{"uid":"7c3449be-32"},{"uid":"7c3449be-46"},{"uid":"7c3449be-78"},{"uid":"7c3449be-58"},{"uid":"7c3449be-50"},{"uid":"7c3449be-38"},{"uid":"7c3449be-62"},{"uid":"7c3449be-36"},{"uid":"7c3449be-66"},{"uid":"7c3449be-70"},{"uid":"7c3449be-74"},{"uid":"7c3449be-54"}]},"7c3449be-81":{"id":"@codemirror/merge","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-10"}]},"7c3449be-82":{"id":"@codemirror/state","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-10"},{"uid":"7c3449be-16"},{"uid":"7c3449be-42"},{"uid":"7c3449be-28"},{"uid":"7c3449be-78"},{"uid":"7c3449be-62"}]},"7c3449be-83":{"id":"@codemirror/view","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-10"},{"uid":"7c3449be-16"},{"uid":"7c3449be-14"},{"uid":"7c3449be-8"},{"uid":"7c3449be-42"},{"uid":"7c3449be-28"},{"uid":"7c3449be-78"},{"uid":"7c3449be-62"}]},"7c3449be-84":{"id":"@codemirror/autocomplete","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-16"},{"uid":"7c3449be-42"},{"uid":"7c3449be-78"},{"uid":"7c3449be-58"},{"uid":"7c3449be-38"},{"uid":"7c3449be-74"}]},"7c3449be-85":{"id":"@codemirror/commands","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-16"}]},"7c3449be-86":{"id":"@codemirror/lint","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-16"}]},"7c3449be-87":{"id":"@codemirror/search","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-16"}]},"7c3449be-88":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"7c3449be-16"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
|
|
5389
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"\u0000rolldown/runtime.js","uid":"805a9409-1"},{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.7.5/node_modules/@pyreon/core/lib/jsx-runtime.js","uid":"805a9409-3"},{"name":"src","children":[{"name":"components","children":[{"uid":"805a9409-5","name":"code-editor.tsx"},{"uid":"805a9409-11","name":"diff-editor.tsx"},{"uid":"805a9409-13","name":"tabbed-editor.tsx"}]},{"uid":"805a9409-7","name":"languages.ts"},{"uid":"805a9409-9","name":"themes.ts"},{"uid":"805a9409-15","name":"minimap.ts"},{"uid":"805a9409-17","name":"editor.ts"},{"uid":"805a9409-19","name":"index.ts"}]}]},{"name":"dist-B5vB-rif.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+common@1.5.1/node_modules/@lezer/common/dist/index.js","uid":"805a9409-21"},{"name":"@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js","uid":"805a9409-23"},{"name":"@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","uid":"805a9409-25"}]}]},{"name":"dist-BAfzu5eu.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+html@1.3.13/node_modules/@lezer/html/dist/index.js","uid":"805a9409-27"},{"name":"@codemirror+lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js","uid":"805a9409-29"}]}]},{"name":"dist-BLlV_D16.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+css@1.3.2/node_modules/@lezer/css/dist/index.js","uid":"805a9409-31"},{"name":"@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","uid":"805a9409-33"}]}]},{"name":"dist-BNmKLTu8.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+yaml@1.0.4/node_modules/@lezer/yaml/dist/index.js","uid":"805a9409-35"},{"name":"@codemirror+lang-yaml@6.1.2/node_modules/@codemirror/lang-yaml/dist/index.js","uid":"805a9409-37"}]}]},{"name":"dist-BZtTlC1J.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js","uid":"805a9409-39"}]},{"name":"dist-CTDqGIAf.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js","uid":"805a9409-41"},{"name":"@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","uid":"805a9409-43"}]}]},{"name":"dist-CTPisNZp.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","uid":"805a9409-45"},{"name":"@codemirror+lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js","uid":"805a9409-47"}]}]},{"name":"dist-Ce2tvOxv.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+rust@1.0.2/node_modules/@lezer/rust/dist/index.js","uid":"805a9409-49"},{"name":"@codemirror+lang-rust@6.0.2/node_modules/@codemirror/lang-rust/dist/index.js","uid":"805a9409-51"}]}]},{"name":"dist-CttF0OTv.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+php@1.0.5/node_modules/@lezer/php/dist/index.js","uid":"805a9409-53"},{"name":"@codemirror+lang-php@6.0.2/node_modules/@codemirror/lang-php/dist/index.js","uid":"805a9409-55"}]}]},{"name":"dist-DS2tluW9.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+python@1.1.18/node_modules/@lezer/python/dist/index.js","uid":"805a9409-57"},{"name":"@codemirror+lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js","uid":"805a9409-59"}]}]},{"name":"dist-DUNx9ldu.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+xml@1.0.6/node_modules/@lezer/xml/dist/index.js","uid":"805a9409-61"},{"name":"@codemirror+lang-xml@6.1.0/node_modules/@codemirror/lang-xml/dist/index.js","uid":"805a9409-63"}]}]},{"name":"dist-Dej_yf3k.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+cpp@1.1.5/node_modules/@lezer/cpp/dist/index.js","uid":"805a9409-65"},{"name":"@codemirror+lang-cpp@6.0.3/node_modules/@codemirror/lang-cpp/dist/index.js","uid":"805a9409-67"}]}]},{"name":"dist-DshStUxU.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+java@1.1.3/node_modules/@lezer/java/dist/index.js","uid":"805a9409-69"},{"name":"@codemirror+lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js","uid":"805a9409-71"}]}]},{"name":"dist-qTrOe7xY.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+go@1.0.1/node_modules/@lezer/go/dist/index.js","uid":"805a9409-73"},{"name":"@codemirror+lang-go@6.0.1/node_modules/@codemirror/lang-go/dist/index.js","uid":"805a9409-75"}]}]},{"name":"dist-v09vikKr.js","children":[{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun","children":[{"name":"@lezer+markdown@1.6.3/node_modules/@lezer/markdown/dist/index.js","uid":"805a9409-77"},{"name":"@codemirror+lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js","uid":"805a9409-79"}]}]}],"isRoot":true},"nodeParts":{"805a9409-1":{"renderedLength":848,"gzipLength":487,"brotliLength":0,"metaUid":"805a9409-0"},"805a9409-3":{"renderedLength":1652,"gzipLength":834,"brotliLength":0,"metaUid":"805a9409-2"},"805a9409-5":{"renderedLength":731,"gzipLength":441,"brotliLength":0,"metaUid":"805a9409-4"},"805a9409-7":{"renderedLength":2245,"gzipLength":736,"brotliLength":0,"metaUid":"805a9409-6"},"805a9409-9":{"renderedLength":1544,"gzipLength":554,"brotliLength":0,"metaUid":"805a9409-8"},"805a9409-11":{"renderedLength":1594,"gzipLength":734,"brotliLength":0,"metaUid":"805a9409-10"},"805a9409-13":{"renderedLength":2681,"gzipLength":1174,"brotliLength":0,"metaUid":"805a9409-12"},"805a9409-15":{"renderedLength":3907,"gzipLength":1561,"brotliLength":0,"metaUid":"805a9409-14"},"805a9409-17":{"renderedLength":11835,"gzipLength":3495,"brotliLength":0,"metaUid":"805a9409-16"},"805a9409-19":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"805a9409-18"},"805a9409-21":{"renderedLength":63577,"gzipLength":17559,"brotliLength":0,"metaUid":"805a9409-20"},"805a9409-23":{"renderedLength":48115,"gzipLength":13327,"brotliLength":0,"metaUid":"805a9409-22"},"805a9409-25":{"renderedLength":14880,"gzipLength":5154,"brotliLength":0,"metaUid":"805a9409-24"},"805a9409-27":{"renderedLength":20064,"gzipLength":7172,"brotliLength":0,"metaUid":"805a9409-26"},"805a9409-29":{"renderedLength":22643,"gzipLength":6815,"brotliLength":0,"metaUid":"805a9409-28"},"805a9409-31":{"renderedLength":18215,"gzipLength":7907,"brotliLength":0,"metaUid":"805a9409-30"},"805a9409-33":{"renderedLength":15648,"gzipLength":5292,"brotliLength":0,"metaUid":"805a9409-32"},"805a9409-35":{"renderedLength":15734,"gzipLength":5562,"brotliLength":0,"metaUid":"805a9409-34"},"805a9409-37":{"renderedLength":2680,"gzipLength":1246,"brotliLength":0,"metaUid":"805a9409-36"},"805a9409-39":{"renderedLength":44475,"gzipLength":14911,"brotliLength":0,"metaUid":"805a9409-38"},"805a9409-41":{"renderedLength":81007,"gzipLength":31200,"brotliLength":0,"metaUid":"805a9409-40"},"805a9409-43":{"renderedLength":12487,"gzipLength":3908,"brotliLength":0,"metaUid":"805a9409-42"},"805a9409-45":{"renderedLength":1935,"gzipLength":1155,"brotliLength":0,"metaUid":"805a9409-44"},"805a9409-47":{"renderedLength":753,"gzipLength":427,"brotliLength":0,"metaUid":"805a9409-46"},"805a9409-49":{"renderedLength":72532,"gzipLength":25861,"brotliLength":0,"metaUid":"805a9409-48"},"805a9409-51":{"renderedLength":1190,"gzipLength":672,"brotliLength":0,"metaUid":"805a9409-50"},"805a9409-53":{"renderedLength":100186,"gzipLength":28340,"brotliLength":0,"metaUid":"805a9409-52"},"805a9409-55":{"renderedLength":2337,"gzipLength":1091,"brotliLength":0,"metaUid":"805a9409-54"},"805a9409-57":{"renderedLength":43364,"gzipLength":17192,"brotliLength":0,"metaUid":"805a9409-56"},"805a9409-59":{"renderedLength":11176,"gzipLength":3600,"brotliLength":0,"metaUid":"805a9409-58"},"805a9409-61":{"renderedLength":10375,"gzipLength":4022,"brotliLength":0,"metaUid":"805a9409-60"},"805a9409-63":{"renderedLength":11201,"gzipLength":3380,"brotliLength":0,"metaUid":"805a9409-62"},"805a9409-65":{"renderedLength":102366,"gzipLength":33579,"brotliLength":0,"metaUid":"805a9409-64"},"805a9409-67":{"renderedLength":1470,"gzipLength":734,"brotliLength":0,"metaUid":"805a9409-66"},"805a9409-69":{"renderedLength":40938,"gzipLength":16437,"brotliLength":0,"metaUid":"805a9409-68"},"805a9409-71":{"renderedLength":1547,"gzipLength":788,"brotliLength":0,"metaUid":"805a9409-70"},"805a9409-73":{"renderedLength":28598,"gzipLength":11399,"brotliLength":0,"metaUid":"805a9409-72"},"805a9409-75":{"renderedLength":6782,"gzipLength":2298,"brotliLength":0,"metaUid":"805a9409-74"},"805a9409-77":{"renderedLength":66307,"gzipLength":17756,"brotliLength":0,"metaUid":"805a9409-76"},"805a9409-79":{"renderedLength":17435,"gzipLength":5525,"brotliLength":0,"metaUid":"805a9409-78"}},"nodeMetas":{"805a9409-0":{"id":"\u0000rolldown/runtime.js","moduleParts":{"index.js":"805a9409-1"},"imported":[],"importedBy":[]},"805a9409-2":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.7.5/node_modules/@pyreon/core/lib/jsx-runtime.js","moduleParts":{"index.js":"805a9409-3"},"imported":[],"importedBy":[{"uid":"805a9409-4"},{"uid":"805a9409-10"},{"uid":"805a9409-12"}]},"805a9409-4":{"id":"/src/components/code-editor.tsx","moduleParts":{"index.js":"805a9409-5"},"imported":[{"uid":"805a9409-2"}],"importedBy":[{"uid":"805a9409-18"},{"uid":"805a9409-12"}]},"805a9409-6":{"id":"/src/languages.ts","moduleParts":{"index.js":"805a9409-7"},"imported":[{"uid":"805a9409-42","dynamic":true},{"uid":"805a9409-28","dynamic":true},{"uid":"805a9409-32","dynamic":true},{"uid":"805a9409-46","dynamic":true},{"uid":"805a9409-78","dynamic":true},{"uid":"805a9409-58","dynamic":true},{"uid":"805a9409-50","dynamic":true},{"uid":"805a9409-38","dynamic":true},{"uid":"805a9409-62","dynamic":true},{"uid":"805a9409-36","dynamic":true},{"uid":"805a9409-66","dynamic":true},{"uid":"805a9409-70","dynamic":true},{"uid":"805a9409-74","dynamic":true},{"uid":"805a9409-54","dynamic":true}],"importedBy":[{"uid":"805a9409-18"},{"uid":"805a9409-10"},{"uid":"805a9409-16"}]},"805a9409-8":{"id":"/src/themes.ts","moduleParts":{"index.js":"805a9409-9"},"imported":[{"uid":"805a9409-83"}],"importedBy":[{"uid":"805a9409-18"},{"uid":"805a9409-10"},{"uid":"805a9409-16"}]},"805a9409-10":{"id":"/src/components/diff-editor.tsx","moduleParts":{"index.js":"805a9409-11"},"imported":[{"uid":"805a9409-80"},{"uid":"805a9409-81"},{"uid":"805a9409-82"},{"uid":"805a9409-83"},{"uid":"805a9409-6"},{"uid":"805a9409-8"},{"uid":"805a9409-2"}],"importedBy":[{"uid":"805a9409-18"}]},"805a9409-12":{"id":"/src/components/tabbed-editor.tsx","moduleParts":{"index.js":"805a9409-13"},"imported":[{"uid":"805a9409-4"},{"uid":"805a9409-2"}],"importedBy":[{"uid":"805a9409-18"}]},"805a9409-14":{"id":"/src/minimap.ts","moduleParts":{"index.js":"805a9409-15"},"imported":[{"uid":"805a9409-83"}],"importedBy":[{"uid":"805a9409-18"},{"uid":"805a9409-16"}]},"805a9409-16":{"id":"/src/editor.ts","moduleParts":{"index.js":"805a9409-17"},"imported":[{"uid":"805a9409-84"},{"uid":"805a9409-85"},{"uid":"805a9409-80"},{"uid":"805a9409-86"},{"uid":"805a9409-87"},{"uid":"805a9409-82"},{"uid":"805a9409-83"},{"uid":"805a9409-88"},{"uid":"805a9409-6"},{"uid":"805a9409-14"},{"uid":"805a9409-8"}],"importedBy":[{"uid":"805a9409-18"}]},"805a9409-18":{"id":"/src/index.ts","moduleParts":{"index.js":"805a9409-19"},"imported":[{"uid":"805a9409-4"},{"uid":"805a9409-10"},{"uid":"805a9409-12"},{"uid":"805a9409-16"},{"uid":"805a9409-6"},{"uid":"805a9409-14"},{"uid":"805a9409-8"}],"importedBy":[],"isEntry":true},"805a9409-20":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+common@1.5.1/node_modules/@lezer/common/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"805a9409-21"},"imported":[],"importedBy":[{"uid":"805a9409-42"},{"uid":"805a9409-32"},{"uid":"805a9409-78"},{"uid":"805a9409-58"},{"uid":"805a9409-36"},{"uid":"805a9409-74"},{"uid":"805a9409-54"},{"uid":"805a9409-26"},{"uid":"805a9409-76"},{"uid":"805a9409-24"},{"uid":"805a9409-22"}]},"805a9409-22":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"805a9409-23"},"imported":[{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-38"},{"uid":"805a9409-36"},{"uid":"805a9409-40"},{"uid":"805a9409-26"},{"uid":"805a9409-30"},{"uid":"805a9409-44"},{"uid":"805a9409-56"},{"uid":"805a9409-48"},{"uid":"805a9409-60"},{"uid":"805a9409-34"},{"uid":"805a9409-64"},{"uid":"805a9409-68"},{"uid":"805a9409-72"},{"uid":"805a9409-52"}]},"805a9409-24":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","moduleParts":{"dist-B5vB-rif.js":"805a9409-25"},"imported":[{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-38"},{"uid":"805a9409-36"},{"uid":"805a9409-40"},{"uid":"805a9409-26"},{"uid":"805a9409-30"},{"uid":"805a9409-44"},{"uid":"805a9409-76"},{"uid":"805a9409-56"},{"uid":"805a9409-48"},{"uid":"805a9409-60"},{"uid":"805a9409-34"},{"uid":"805a9409-64"},{"uid":"805a9409-68"},{"uid":"805a9409-72"},{"uid":"805a9409-52"}]},"805a9409-26":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+html@1.3.13/node_modules/@lezer/html/dist/index.js","moduleParts":{"dist-BAfzu5eu.js":"805a9409-27"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"},{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-28"}]},"805a9409-28":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js","moduleParts":{"dist-BAfzu5eu.js":"805a9409-29"},"imported":[{"uid":"805a9409-26"},{"uid":"805a9409-32"},{"uid":"805a9409-42"},{"uid":"805a9409-83"},{"uid":"805a9409-82"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"},{"uid":"805a9409-78"},{"uid":"805a9409-54"}]},"805a9409-30":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+css@1.3.2/node_modules/@lezer/css/dist/index.js","moduleParts":{"dist-BLlV_D16.js":"805a9409-31"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-32"}]},"805a9409-32":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","moduleParts":{"dist-BLlV_D16.js":"805a9409-33"},"imported":[{"uid":"805a9409-30"},{"uid":"805a9409-80"},{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-6"},{"uid":"805a9409-28"}]},"805a9409-34":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+yaml@1.0.4/node_modules/@lezer/yaml/dist/index.js","moduleParts":{"dist-BNmKLTu8.js":"805a9409-35"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-36"}]},"805a9409-36":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-yaml@6.1.2/node_modules/@codemirror/lang-yaml/dist/index.js","moduleParts":{"dist-BNmKLTu8.js":"805a9409-37"},"imported":[{"uid":"805a9409-34"},{"uid":"805a9409-80"},{"uid":"805a9409-20"},{"uid":"805a9409-24"},{"uid":"805a9409-22"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-38":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js","moduleParts":{"dist-BZtTlC1J.js":"805a9409-39"},"imported":[{"uid":"805a9409-80"},{"uid":"805a9409-24"},{"uid":"805a9409-22"},{"uid":"805a9409-84"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-40":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js","moduleParts":{"dist-CTDqGIAf.js":"805a9409-41"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-42"}]},"805a9409-42":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","moduleParts":{"dist-CTDqGIAf.js":"805a9409-43"},"imported":[{"uid":"805a9409-40"},{"uid":"805a9409-80"},{"uid":"805a9409-82"},{"uid":"805a9409-83"},{"uid":"805a9409-84"},{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-6"},{"uid":"805a9409-28"}]},"805a9409-44":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+json@1.0.3/node_modules/@lezer/json/dist/index.js","moduleParts":{"dist-CTPisNZp.js":"805a9409-45"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-46"}]},"805a9409-46":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js","moduleParts":{"dist-CTPisNZp.js":"805a9409-47"},"imported":[{"uid":"805a9409-44"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-48":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+rust@1.0.2/node_modules/@lezer/rust/dist/index.js","moduleParts":{"dist-Ce2tvOxv.js":"805a9409-49"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-50"}]},"805a9409-50":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-rust@6.0.2/node_modules/@codemirror/lang-rust/dist/index.js","moduleParts":{"dist-Ce2tvOxv.js":"805a9409-51"},"imported":[{"uid":"805a9409-48"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-52":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+php@1.0.5/node_modules/@lezer/php/dist/index.js","moduleParts":{"dist-CttF0OTv.js":"805a9409-53"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-54"}]},"805a9409-54":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-php@6.0.2/node_modules/@codemirror/lang-php/dist/index.js","moduleParts":{"dist-CttF0OTv.js":"805a9409-55"},"imported":[{"uid":"805a9409-52"},{"uid":"805a9409-20"},{"uid":"805a9409-28"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-56":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+python@1.1.18/node_modules/@lezer/python/dist/index.js","moduleParts":{"dist-DS2tluW9.js":"805a9409-57"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-58"}]},"805a9409-58":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js","moduleParts":{"dist-DS2tluW9.js":"805a9409-59"},"imported":[{"uid":"805a9409-56"},{"uid":"805a9409-80"},{"uid":"805a9409-20"},{"uid":"805a9409-84"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-60":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+xml@1.0.6/node_modules/@lezer/xml/dist/index.js","moduleParts":{"dist-DUNx9ldu.js":"805a9409-61"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-62"}]},"805a9409-62":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-xml@6.1.0/node_modules/@codemirror/lang-xml/dist/index.js","moduleParts":{"dist-DUNx9ldu.js":"805a9409-63"},"imported":[{"uid":"805a9409-60"},{"uid":"805a9409-80"},{"uid":"805a9409-82"},{"uid":"805a9409-83"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-64":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+cpp@1.1.5/node_modules/@lezer/cpp/dist/index.js","moduleParts":{"dist-Dej_yf3k.js":"805a9409-65"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-66"}]},"805a9409-66":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-cpp@6.0.3/node_modules/@codemirror/lang-cpp/dist/index.js","moduleParts":{"dist-Dej_yf3k.js":"805a9409-67"},"imported":[{"uid":"805a9409-64"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-68":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+java@1.1.3/node_modules/@lezer/java/dist/index.js","moduleParts":{"dist-DshStUxU.js":"805a9409-69"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-70"}]},"805a9409-70":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js","moduleParts":{"dist-DshStUxU.js":"805a9409-71"},"imported":[{"uid":"805a9409-68"},{"uid":"805a9409-80"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-72":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+go@1.0.1/node_modules/@lezer/go/dist/index.js","moduleParts":{"dist-qTrOe7xY.js":"805a9409-73"},"imported":[{"uid":"805a9409-22"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-74"}]},"805a9409-74":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-go@6.0.1/node_modules/@codemirror/lang-go/dist/index.js","moduleParts":{"dist-qTrOe7xY.js":"805a9409-75"},"imported":[{"uid":"805a9409-72"},{"uid":"805a9409-80"},{"uid":"805a9409-84"},{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-76":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@lezer+markdown@1.6.3/node_modules/@lezer/markdown/dist/index.js","moduleParts":{"dist-v09vikKr.js":"805a9409-77"},"imported":[{"uid":"805a9409-20"},{"uid":"805a9409-24"}],"importedBy":[{"uid":"805a9409-78"}]},"805a9409-78":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@codemirror+lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js","moduleParts":{"dist-v09vikKr.js":"805a9409-79"},"imported":[{"uid":"805a9409-82"},{"uid":"805a9409-83"},{"uid":"805a9409-80"},{"uid":"805a9409-84"},{"uid":"805a9409-76"},{"uid":"805a9409-28"},{"uid":"805a9409-20"}],"importedBy":[{"uid":"805a9409-6"}]},"805a9409-80":{"id":"@codemirror/language","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-10"},{"uid":"805a9409-16"},{"uid":"805a9409-42"},{"uid":"805a9409-28"},{"uid":"805a9409-32"},{"uid":"805a9409-46"},{"uid":"805a9409-78"},{"uid":"805a9409-58"},{"uid":"805a9409-50"},{"uid":"805a9409-38"},{"uid":"805a9409-62"},{"uid":"805a9409-36"},{"uid":"805a9409-66"},{"uid":"805a9409-70"},{"uid":"805a9409-74"},{"uid":"805a9409-54"}]},"805a9409-81":{"id":"@codemirror/merge","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-10"}]},"805a9409-82":{"id":"@codemirror/state","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-10"},{"uid":"805a9409-16"},{"uid":"805a9409-42"},{"uid":"805a9409-28"},{"uid":"805a9409-78"},{"uid":"805a9409-62"}]},"805a9409-83":{"id":"@codemirror/view","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-10"},{"uid":"805a9409-16"},{"uid":"805a9409-14"},{"uid":"805a9409-8"},{"uid":"805a9409-42"},{"uid":"805a9409-28"},{"uid":"805a9409-78"},{"uid":"805a9409-62"}]},"805a9409-84":{"id":"@codemirror/autocomplete","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-16"},{"uid":"805a9409-42"},{"uid":"805a9409-78"},{"uid":"805a9409-58"},{"uid":"805a9409-38"},{"uid":"805a9409-74"}]},"805a9409-85":{"id":"@codemirror/commands","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-16"}]},"805a9409-86":{"id":"@codemirror/lint","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-16"}]},"805a9409-87":{"id":"@codemirror/search","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-16"}]},"805a9409-88":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"805a9409-16"}]}},"env":{"rollup":"4.23.0"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
|
|
5390
5390
|
|
|
5391
5391
|
const run = () => {
|
|
5392
5392
|
const width = window.innerWidth;
|
package/lib/index.js
CHANGED
|
@@ -29,7 +29,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
//#endregion
|
|
32
|
-
//#region ../../node_modules/.bun/@pyreon+core@0.
|
|
32
|
+
//#region ../../node_modules/.bun/@pyreon+core@0.7.5/node_modules/@pyreon/core/lib/jsx-runtime.js
|
|
33
33
|
/**
|
|
34
34
|
* Hyperscript function — the compiled output of JSX.
|
|
35
35
|
* `<div class="x">hello</div>` → `h("div", { class: "x" }, "hello")`
|
|
@@ -778,7 +778,7 @@ function createEditor(config = {}) {
|
|
|
778
778
|
to: d.to,
|
|
779
779
|
severity: d.severity === "hint" ? "info" : d.severity,
|
|
780
780
|
message: d.message,
|
|
781
|
-
source: d.source
|
|
781
|
+
...d.source != null ? { source: d.source } : {}
|
|
782
782
|
}))));
|
|
783
783
|
}
|
|
784
784
|
function clearDiagnostics() {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["CMGutterMarker","placeholderExt","undo","redo","setDiagnostics","cmSetDiagnostics"],"sources":["../../../node_modules/.bun/@pyreon+core@0.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js","../src/components/code-editor.tsx","../src/languages.ts","../src/themes.ts","../src/components/diff-editor.tsx","../src/components/tabbed-editor.tsx","../src/minimap.ts","../src/editor.ts"],"sourcesContent":["//#region src/h.ts\n/** Marker for fragment nodes — renders children without a wrapper element */\nconst Fragment = Symbol(\"Pyreon.Fragment\");\n/**\n* Hyperscript function — the compiled output of JSX.\n* `<div class=\"x\">hello</div>` → `h(\"div\", { class: \"x\" }, \"hello\")`\n*\n* Generic on P so TypeScript validates props match the component's signature\n* at the call site, then stores the result in the loosely-typed VNode.\n*/\n/** Shared empty props sentinel — identity-checked in mountElement to skip applyProps. */\nconst EMPTY_PROPS = {};\nfunction h(type, props, ...children) {\n\treturn {\n\t\ttype,\n\t\tprops: props ?? EMPTY_PROPS,\n\t\tchildren: normalizeChildren(children),\n\t\tkey: props?.key ?? null\n\t};\n}\nfunction normalizeChildren(children) {\n\tfor (let i = 0; i < children.length; i++) if (Array.isArray(children[i])) return flattenChildren(children);\n\treturn children;\n}\nfunction flattenChildren(children) {\n\tconst result = [];\n\tfor (const child of children) if (Array.isArray(child)) result.push(...flattenChildren(child));\n\telse result.push(child);\n\treturn result;\n}\n\n//#endregion\n//#region src/jsx-runtime.ts\n/**\n* JSX automatic runtime.\n*\n* When tsconfig has `\"jsxImportSource\": \"@pyreon/core\"`, the TS/bundler compiler\n* rewrites JSX to imports from this file automatically:\n* <div class=\"x\" /> → jsx(\"div\", { class: \"x\" })\n*/\nfunction jsx(type, props, key) {\n\tconst { children, ...rest } = props;\n\tconst propsWithKey = key != null ? {\n\t\t...rest,\n\t\tkey\n\t} : rest;\n\tif (typeof type === \"function\") return h(type, children !== void 0 ? {\n\t\t...propsWithKey,\n\t\tchildren\n\t} : propsWithKey);\n\treturn h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);\n}\nconst jsxs = jsx;\n\n//#endregion\nexport { Fragment, jsx, jsxs };\n//# sourceMappingURL=jsx-runtime.js.map","import type { VNodeChild } from '@pyreon/core'\nimport type { CodeEditorProps, EditorInstance } from '../types'\n\n/**\n * Code editor component — mounts a CodeMirror 6 instance.\n *\n * @example\n * ```tsx\n * const editor = createEditor({\n * value: 'const x = 1',\n * language: 'typescript',\n * theme: 'dark',\n * })\n *\n * <CodeEditor instance={editor} style=\"height: 400px\" />\n * ```\n */\nexport function CodeEditor(props: CodeEditorProps): VNodeChild {\n const { instance } = props\n\n const containerRef = (el: Element | null) => {\n if (!el) return\n\n // Mount the editor into the container\n const mountable = instance as EditorInstance & {\n _mount?: (parent: HTMLElement) => Promise<void>\n }\n if (mountable._mount) {\n mountable._mount(el as HTMLElement)\n }\n }\n\n const baseStyle = `width: 100%; height: 100%; overflow: hidden; ${props.style ?? ''}`\n\n return (\n <div\n ref={containerRef}\n class={`pyreon-code-editor ${props.class ?? ''}`}\n style={baseStyle}\n />\n )\n}\n","import type { Extension } from '@codemirror/state'\nimport type { EditorLanguage } from './types'\n\n/**\n * Language extension loaders — lazy-loaded on demand.\n * Only the requested language is imported, keeping the initial bundle small.\n */\nconst languageLoaders: Record<EditorLanguage, () => Promise<Extension>> = {\n javascript: () =>\n import('@codemirror/lang-javascript').then((m) => m.javascript()),\n typescript: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ typescript: true }),\n ),\n jsx: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ jsx: true }),\n ),\n tsx: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ typescript: true, jsx: true }),\n ),\n html: () => import('@codemirror/lang-html').then((m) => m.html()),\n css: () => import('@codemirror/lang-css').then((m) => m.css()),\n json: () => import('@codemirror/lang-json').then((m) => m.json()),\n markdown: () => import('@codemirror/lang-markdown').then((m) => m.markdown()),\n python: () => import('@codemirror/lang-python').then((m) => m.python()),\n rust: () => import('@codemirror/lang-rust').then((m) => m.rust()),\n sql: () => import('@codemirror/lang-sql').then((m) => m.sql()),\n xml: () => import('@codemirror/lang-xml').then((m) => m.xml()),\n yaml: () => import('@codemirror/lang-yaml').then((m) => m.yaml()),\n cpp: () => import('@codemirror/lang-cpp').then((m) => m.cpp()),\n java: () => import('@codemirror/lang-java').then((m) => m.java()),\n go: () => import('@codemirror/lang-go').then((m) => m.go()),\n php: () => import('@codemirror/lang-php').then((m) => m.php()),\n ruby: () => Promise.resolve([]),\n shell: () => Promise.resolve([]),\n plain: () => Promise.resolve([]),\n}\n\n// Cache loaded language extensions\nconst loaded = new Map<EditorLanguage, Extension>()\n\n/**\n * Load a language extension. Returns cached if already loaded.\n * Language grammars are lazy-imported — zero cost until used.\n *\n * @example\n * ```ts\n * const ext = await loadLanguage('typescript')\n * ```\n */\nexport async function loadLanguage(\n language: EditorLanguage,\n): Promise<Extension> {\n const cached = loaded.get(language)\n if (cached) return cached\n\n const loader = languageLoaders[language]\n if (!loader) return []\n\n try {\n const ext = await loader()\n loaded.set(language, ext)\n return ext\n } catch {\n // Language package not installed — return empty extension\n return []\n }\n}\n\n/**\n * Get available languages.\n */\nexport function getAvailableLanguages(): EditorLanguage[] {\n return Object.keys(languageLoaders) as EditorLanguage[]\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\nimport type { EditorTheme } from './types'\n\n/**\n * Light theme — clean, minimal.\n */\nexport const lightTheme: Extension = EditorView.theme({\n '&': {\n backgroundColor: '#ffffff',\n color: '#1e293b',\n },\n '.cm-content': {\n caretColor: '#1e293b',\n },\n '.cm-cursor': {\n borderLeftColor: '#1e293b',\n },\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': {\n backgroundColor: '#dbeafe',\n },\n '.cm-gutters': {\n backgroundColor: '#f8fafc',\n color: '#94a3b8',\n borderRight: '1px solid #e2e8f0',\n },\n '.cm-activeLineGutter': {\n backgroundColor: '#f1f5f9',\n color: '#475569',\n },\n '.cm-activeLine': {\n backgroundColor: '#f8fafc',\n },\n '.cm-foldGutter': {\n color: '#94a3b8',\n },\n})\n\n/**\n * Dark theme — VS Code inspired.\n */\nexport const darkTheme: Extension = EditorView.theme(\n {\n '&': {\n backgroundColor: '#1e1e2e',\n color: '#cdd6f4',\n },\n '.cm-content': {\n caretColor: '#f5e0dc',\n },\n '.cm-cursor': {\n borderLeftColor: '#f5e0dc',\n },\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': {\n backgroundColor: '#45475a',\n },\n '.cm-gutters': {\n backgroundColor: '#181825',\n color: '#585b70',\n borderRight: '1px solid #313244',\n },\n '.cm-activeLineGutter': {\n backgroundColor: '#1e1e2e',\n color: '#a6adc8',\n },\n '.cm-activeLine': {\n backgroundColor: '#1e1e2e80',\n },\n '.cm-foldGutter': {\n color: '#585b70',\n },\n '.cm-matchingBracket': {\n backgroundColor: '#45475a',\n color: '#f5e0dc',\n },\n },\n { dark: true },\n)\n\n/**\n * Resolve a theme value to a CodeMirror extension.\n */\nexport function resolveTheme(theme: EditorTheme): Extension {\n if (theme === 'light') return lightTheme\n if (theme === 'dark') return darkTheme\n return theme // custom Extension\n}\n","import { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language'\nimport { MergeView } from '@codemirror/merge'\nimport { EditorState, type Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\nimport type { VNodeChild } from '@pyreon/core'\nimport type { Signal } from '@pyreon/reactivity'\nimport { loadLanguage } from '../languages'\nimport { resolveTheme } from '../themes'\nimport type { DiffEditorProps } from '../types'\n\n/**\n * Side-by-side or inline diff editor using @codemirror/merge.\n *\n * @example\n * ```tsx\n * <DiffEditor\n * original=\"const x = 1\"\n * modified=\"const x = 2\"\n * language=\"typescript\"\n * theme=\"dark\"\n * style=\"height: 400px\"\n * />\n * ```\n */\nexport function DiffEditor(props: DiffEditorProps): VNodeChild {\n const {\n original,\n modified,\n language = 'plain',\n theme = 'light',\n readOnly = true,\n inline = false,\n } = props\n\n const containerRef = async (el: Element | null) => {\n if (!el) return\n\n const langExt = await loadLanguage(language)\n const themeExt = resolveTheme(theme)\n\n const extensions: Extension[] = [\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n langExt,\n themeExt,\n EditorView.editable.of(!readOnly),\n EditorState.readOnly.of(readOnly),\n ]\n\n const originalText =\n typeof original === 'string' ? original : (original as Signal<string>)()\n const modifiedText =\n typeof modified === 'string' ? modified : (modified as Signal<string>)()\n\n // Clear previous content\n ;(el as HTMLElement).innerHTML = ''\n\n if (inline) {\n // Unified/inline diff view\n new MergeView({\n a: {\n doc: originalText,\n extensions,\n },\n b: {\n doc: modifiedText,\n extensions,\n },\n parent: el as HTMLElement,\n collapseUnchanged: { margin: 3, minSize: 4 },\n })\n } else {\n // Side-by-side diff\n new MergeView({\n a: {\n doc: originalText,\n extensions,\n },\n b: {\n doc: modifiedText,\n extensions,\n },\n parent: el as HTMLElement,\n collapseUnchanged: { margin: 3, minSize: 4 },\n })\n }\n }\n\n const baseStyle = `width: 100%; height: 100%; overflow: hidden; ${props.style ?? ''}`\n\n return (\n <div\n ref={containerRef}\n class={`pyreon-diff-editor ${props.class ?? ''}`}\n style={baseStyle}\n />\n )\n}\n","import type { VNodeChild } from '@pyreon/core'\nimport type { TabbedEditorProps } from '../types'\nimport { CodeEditor } from './code-editor'\n\n/**\n * Tabbed code editor component — renders tab bar + editor.\n * Headless styling — the tab bar is a plain div with button tabs.\n * Consumers can style via CSS classes.\n *\n * @example\n * ```tsx\n * const editor = createTabbedEditor({\n * tabs: [\n * { name: 'index.ts', language: 'typescript', value: 'const x = 1' },\n * { name: 'style.css', language: 'css', value: '.app { }' },\n * ],\n * theme: 'dark',\n * })\n *\n * <TabbedEditor instance={editor} style=\"height: 500px\" />\n * ```\n */\nexport function TabbedEditor(props: TabbedEditorProps): VNodeChild {\n const { instance } = props\n\n const containerStyle = `display: flex; flex-direction: column; width: 100%; height: 100%; ${props.style ?? ''}`\n\n const tabBarStyle =\n 'display: flex; overflow-x: auto; background: #f1f5f9; border-bottom: 1px solid #e2e8f0; min-height: 34px; flex-shrink: 0;'\n\n return (\n <div\n class={`pyreon-tabbed-editor ${props.class ?? ''}`}\n style={containerStyle}\n >\n {() => {\n const tabs = instance.tabs()\n const activeId = instance.activeTabId()\n\n return (\n <div class=\"pyreon-tabbed-editor-tabs\" style={tabBarStyle}>\n {tabs.map((tab) => {\n const id = tab.id ?? tab.name\n const isActive = id === activeId\n\n const tabStyle = `display: flex; align-items: center; gap: 6px; padding: 6px 12px; border: none; background: ${isActive ? 'white' : 'transparent'}; border-bottom: ${isActive ? '2px solid #3b82f6' : '2px solid transparent'}; cursor: pointer; font-size: 13px; color: ${isActive ? '#1e293b' : '#64748b'}; white-space: nowrap; position: relative; font-family: inherit;`\n\n return (\n <button\n type=\"button\"\n key={id}\n class={`pyreon-tab ${isActive ? 'active' : ''} ${tab.modified ? 'modified' : ''}`}\n style={tabStyle}\n onClick={() => instance.switchTab(id)}\n >\n <span>{tab.name}</span>\n {tab.modified && (\n <span\n style=\"width: 6px; height: 6px; border-radius: 50%; background: #f59e0b; flex-shrink: 0;\"\n title=\"Modified\"\n />\n )}\n {tab.closable !== false && (\n <span\n style=\"font-size: 14px; line-height: 1; opacity: 0.5; cursor: pointer; padding: 0 2px; margin-left: 2px;\"\n title=\"Close\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n instance.closeTab(id)\n }}\n >\n ×\n </span>\n )}\n </button>\n )\n })}\n </div>\n )\n }}\n <div style=\"flex: 1; min-height: 0;\">\n <CodeEditor instance={instance.editor} />\n </div>\n </div>\n )\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view'\n\n/**\n * Canvas-based minimap extension for CodeMirror 6.\n * Renders a scaled-down overview of the document on the right side.\n */\n\nconst MINIMAP_WIDTH = 80\nconst CHAR_WIDTH = 1.2\nconst LINE_HEIGHT = 2.5\nconst MINIMAP_BG = '#1e1e2e'\nconst MINIMAP_BG_LIGHT = '#f8fafc'\nconst TEXT_COLOR = '#585b70'\nconst TEXT_COLOR_LIGHT = '#94a3b8'\nconst VIEWPORT_COLOR = 'rgba(59, 130, 246, 0.15)'\nconst VIEWPORT_BORDER = 'rgba(59, 130, 246, 0.4)'\n\nfunction createMinimapCanvas(): HTMLCanvasElement {\n const canvas = document.createElement('canvas')\n canvas.style.cssText = `position: absolute; right: 0; top: 0; width: ${MINIMAP_WIDTH}px; height: 100%; cursor: pointer; z-index: 5;`\n canvas.width = MINIMAP_WIDTH * 2 // retina\n return canvas\n}\n\nfunction renderMinimap(canvas: HTMLCanvasElement, view: EditorView): void {\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const doc = view.state.doc\n const totalLines = doc.lines\n const height = canvas.clientHeight\n canvas.height = height * 2 // retina\n\n const isDark = view.dom.classList.contains('cm-dark')\n const bg = isDark ? MINIMAP_BG : MINIMAP_BG_LIGHT\n const textColor = isDark ? TEXT_COLOR : TEXT_COLOR_LIGHT\n\n const scale = 2 // retina\n ctx.setTransform(scale, 0, 0, scale, 0, 0)\n\n // Background\n ctx.fillStyle = bg\n ctx.fillRect(0, 0, MINIMAP_WIDTH, height)\n\n // Calculate visible range in minimap\n const contentHeight = totalLines * LINE_HEIGHT\n const scrollFraction =\n contentHeight > height\n ? view.scrollDOM.scrollTop /\n (view.scrollDOM.scrollHeight - view.scrollDOM.clientHeight || 1)\n : 0\n const offset =\n contentHeight > height ? scrollFraction * (contentHeight - height) : 0\n\n // Render text lines\n ctx.fillStyle = textColor\n const startLine = Math.max(1, Math.floor(offset / LINE_HEIGHT))\n const endLine = Math.min(\n totalLines,\n startLine + Math.ceil(height / LINE_HEIGHT) + 1,\n )\n\n for (let i = startLine; i <= endLine; i++) {\n const line = doc.line(i)\n const y = (i - 1) * LINE_HEIGHT - offset\n if (y < -LINE_HEIGHT || y > height) continue\n\n const text = line.text\n let x = 4\n for (let j = 0; j < Math.min(text.length, 60); j++) {\n if (text[j] !== ' ' && text[j] !== '\\t') {\n ctx.fillRect(x, y, CHAR_WIDTH, 1.5)\n }\n x += CHAR_WIDTH\n }\n }\n\n // Viewport indicator\n const viewportTop = view.scrollDOM.scrollTop\n const viewportHeight = view.scrollDOM.clientHeight\n const docHeight = view.scrollDOM.scrollHeight || 1\n\n const vpY = (viewportTop / docHeight) * Math.min(contentHeight, height)\n const vpH = (viewportHeight / docHeight) * Math.min(contentHeight, height)\n\n ctx.fillStyle = VIEWPORT_COLOR\n ctx.fillRect(0, vpY, MINIMAP_WIDTH, vpH)\n ctx.strokeStyle = VIEWPORT_BORDER\n ctx.lineWidth = 1\n ctx.strokeRect(0.5, vpY + 0.5, MINIMAP_WIDTH - 1, vpH - 1)\n}\n\n/**\n * CodeMirror 6 minimap extension.\n * Renders a canvas-based code overview on the right side of the editor.\n *\n * @example\n * ```ts\n * import { minimapExtension } from '@pyreon/code'\n * // Add to editor extensions\n * ```\n */\nexport function minimapExtension(): Extension {\n return [\n ViewPlugin.fromClass(\n class {\n canvas: HTMLCanvasElement\n view: EditorView\n animFrame: number | null = null\n\n constructor(view: EditorView) {\n this.view = view\n this.canvas = createMinimapCanvas()\n view.dom.style.position = 'relative'\n view.dom.appendChild(this.canvas)\n\n // Click to scroll\n this.canvas.addEventListener('click', (e) => {\n const rect = this.canvas.getBoundingClientRect()\n const clickY = e.clientY - rect.top\n const fraction = clickY / rect.height\n const scrollTarget =\n fraction *\n (view.scrollDOM.scrollHeight - view.scrollDOM.clientHeight)\n view.scrollDOM.scrollTo({ top: scrollTarget, behavior: 'smooth' })\n })\n\n this.render()\n }\n\n render() {\n renderMinimap(this.canvas, this.view)\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n update.geometryChanged\n ) {\n if (this.animFrame) cancelAnimationFrame(this.animFrame)\n this.animFrame = requestAnimationFrame(() => this.render())\n }\n }\n\n destroy() {\n if (this.animFrame) cancelAnimationFrame(this.animFrame)\n this.canvas.remove()\n }\n },\n ),\n // Add padding on the right for the minimap\n EditorView.theme({\n '.cm-scroller': {\n paddingRight: `${MINIMAP_WIDTH + 8}px`,\n },\n }),\n ]\n}\n","import {\n autocompletion,\n closeBrackets,\n closeBracketsKeymap,\n completionKeymap,\n} from '@codemirror/autocomplete'\nimport {\n redo as cmRedo,\n undo as cmUndo,\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n} from '@codemirror/commands'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldGutter,\n foldKeymap,\n indentOnInput,\n indentUnit,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {\n setDiagnostics as cmSetDiagnostics,\n lintKeymap,\n} from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport { Compartment, EditorState, type Extension } from '@codemirror/state'\nimport {\n GutterMarker as CMGutterMarker,\n crosshairCursor,\n Decoration,\n type DecorationSet,\n drawSelection,\n dropCursor,\n EditorView,\n gutter,\n highlightActiveLine,\n highlightActiveLineGutter,\n keymap,\n lineNumbers,\n placeholder as placeholderExt,\n rectangularSelection,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view'\nimport { computed, effect, signal } from '@pyreon/reactivity'\nimport { loadLanguage } from './languages'\nimport { minimapExtension } from './minimap'\nimport { resolveTheme } from './themes'\nimport type {\n EditorConfig,\n EditorInstance,\n EditorLanguage,\n EditorTheme,\n} from './types'\n\n/**\n * Create a reactive code editor instance.\n *\n * The editor state (value, language, theme, cursor, selection) is backed\n * by signals. The CodeMirror EditorView is created when mounted via\n * the `<CodeEditor>` component.\n *\n * @param config - Editor configuration\n * @returns A reactive EditorInstance\n *\n * @example\n * ```tsx\n * const editor = createEditor({\n * value: 'const x = 1',\n * language: 'typescript',\n * theme: 'dark',\n * })\n *\n * editor.value() // reactive\n * editor.value.set('new') // updates editor\n *\n * <CodeEditor instance={editor} />\n * ```\n */\nexport function createEditor(config: EditorConfig = {}): EditorInstance {\n const {\n value: initialValue = '',\n language: initialLanguage = 'plain',\n theme: initialTheme = 'light',\n lineNumbers: showLineNumbers = true,\n readOnly: initialReadOnly = false,\n foldGutter: showFoldGutter = true,\n bracketMatching: enableBracketMatching = true,\n autocomplete: enableAutocomplete = true,\n search: _enableSearch = true,\n highlightIndentGuides: enableIndentGuides = true,\n vim: enableVim = false,\n emacs: enableEmacs = false,\n tabSize: configTabSize = 2,\n lineWrapping: enableLineWrapping = false,\n placeholder: placeholderText,\n minimap: enableMinimap = false,\n extensions: userExtensions = [],\n onChange,\n } = config\n\n // ── Reactive state ───────────────────────────────────────────────────\n\n const value = signal(initialValue)\n const language = signal<EditorLanguage>(initialLanguage)\n const theme = signal<EditorTheme>(initialTheme)\n const readOnly = signal(initialReadOnly)\n const focused = signal(false)\n const view = signal<EditorView | null>(null)\n\n // Internal version tracker for cursor/selection reactivity\n const docVersion = signal(0)\n\n // ── Compartments (for dynamic reconfiguration) ─────────────────────\n\n const languageCompartment = new Compartment()\n const themeCompartment = new Compartment()\n const readOnlyCompartment = new Compartment()\n const extraKeymapCompartment = new Compartment()\n const keyModeCompartment = new Compartment()\n\n // ── Computed ─────────────────────────────────────────────────────────\n\n const cursor = computed(() => {\n docVersion() // subscribe to changes\n const v = view.peek()\n if (!v) return { line: 1, col: 1 }\n const pos = v.state.selection.main.head\n const line = v.state.doc.lineAt(pos)\n return { line: line.number, col: pos - line.from + 1 }\n })\n\n const selection = computed(() => {\n docVersion()\n const v = view.peek()\n if (!v) return { from: 0, to: 0, text: '' }\n const sel = v.state.selection.main\n return {\n from: sel.from,\n to: sel.to,\n text: v.state.sliceDoc(sel.from, sel.to),\n }\n })\n\n const lineCount = computed(() => {\n docVersion()\n const v = view.peek()\n return v ? v.state.doc.lines : initialValue.split('\\n').length\n })\n\n // ── Line highlight support ──────────────────────────────────────────\n\n const lineHighlights = new Map<number, string>()\n\n const lineHighlightField = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet\n\n constructor(editorView: EditorView) {\n this.decorations = this.buildDecos(editorView)\n }\n\n buildDecos(editorView: EditorView): DecorationSet {\n const ranges: Array<{ from: number; deco: any }> = []\n for (const [lineNum, cls] of lineHighlights) {\n if (lineNum >= 1 && lineNum <= editorView.state.doc.lines) {\n const lineInfo = editorView.state.doc.line(lineNum)\n ranges.push({\n from: lineInfo.from,\n deco: Decoration.line({ class: cls }),\n })\n }\n }\n return Decoration.set(\n ranges\n .sort((a, b) => a.from - b.from)\n .map((d) => d.deco.range(d.from)),\n )\n }\n\n update(upd: ViewUpdate) {\n if (upd.docChanged || upd.viewportChanged) {\n this.decorations = this.buildDecos(upd.view)\n }\n }\n },\n { decorations: (plugin) => plugin.decorations },\n )\n\n // ── Gutter marker support ──────────────────────────────────────────\n\n const gutterMarkers = new Map<\n number,\n { class?: string; text?: string; title?: string }\n >()\n\n class CustomGutterMarker extends CMGutterMarker {\n markerText: string\n markerTitle: string\n markerClass: string\n\n constructor(opts: { class?: string; text?: string; title?: string }) {\n super()\n this.markerText = opts.text ?? ''\n this.markerTitle = opts.title ?? ''\n this.markerClass = opts.class ?? ''\n }\n\n toDOM() {\n const el = document.createElement('span')\n el.textContent = this.markerText\n el.title = this.markerTitle\n if (this.markerClass) el.className = this.markerClass\n el.style.cssText =\n 'cursor: pointer; display: inline-block; width: 100%; text-align: center;'\n return el\n }\n }\n\n const gutterMarkerExtension = gutter({\n class: 'pyreon-code-gutter-markers',\n lineMarker: (gutterView, line) => {\n const lineNo = gutterView.state.doc.lineAt(line.from).number\n const marker = gutterMarkers.get(lineNo)\n if (!marker) return null\n return new CustomGutterMarker(marker)\n },\n initialSpacer: () => new CustomGutterMarker({ text: ' ' }),\n })\n\n // ── Build extensions ─────────────────────────────────────────────────\n\n function buildExtensions(langExt: Extension): Extension[] {\n const exts: Extension[] = [\n // Core\n history(),\n drawSelection(),\n dropCursor(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n indentUnit.of(' '.repeat(configTabSize)),\n\n // Keymaps\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap,\n indentWithTab,\n ]),\n\n // Dynamic compartments\n languageCompartment.of(langExt),\n themeCompartment.of(resolveTheme(initialTheme)),\n readOnlyCompartment.of(EditorState.readOnly.of(initialReadOnly)),\n extraKeymapCompartment.of([]),\n keyModeCompartment.of([]),\n\n // Update listener — sync CM changes to signal\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n const newValue = update.state.doc.toString()\n // Avoid infinite loop: only set if different\n if (newValue !== value.peek()) {\n value.set(newValue)\n onChange?.(newValue)\n }\n docVersion.update((v) => v + 1)\n }\n if (update.selectionSet) {\n docVersion.update((v) => v + 1)\n }\n if (update.focusChanged) {\n focused.set(update.view.hasFocus)\n }\n }),\n ]\n\n // Optional features\n if (showLineNumbers) exts.push(lineNumbers())\n if (showFoldGutter) exts.push(foldGutter())\n if (enableBracketMatching) exts.push(bracketMatching(), closeBrackets())\n if (enableAutocomplete) exts.push(autocompletion())\n if (enableLineWrapping) exts.push(EditorView.lineWrapping)\n // Indent guides via theme (CM6 doesn't have a built-in extension for this)\n if (enableIndentGuides) {\n exts.push(\n EditorView.theme({\n '.cm-line': {\n backgroundImage:\n 'linear-gradient(to right, #e5e7eb 1px, transparent 1px)',\n backgroundSize: `${configTabSize}ch 100%`,\n backgroundPosition: '0 0',\n },\n }),\n )\n }\n if (placeholderText) exts.push(placeholderExt(placeholderText))\n if (enableMinimap) exts.push(minimapExtension())\n\n // Line highlight decoration support\n exts.push(lineHighlightField)\n // Gutter marker support\n exts.push(gutterMarkerExtension)\n\n // User extensions\n exts.push(...userExtensions)\n\n return exts\n }\n\n // ── Mount helper — called by CodeEditor component ────────────────────\n\n let mounted = false\n\n async function mount(parent: HTMLElement): Promise<void> {\n if (mounted) return\n\n const langExt = await loadLanguage(language.peek())\n const extensions = buildExtensions(langExt)\n\n const state = EditorState.create({\n doc: value.peek(),\n extensions,\n })\n\n const editorView = new EditorView({\n state,\n parent,\n })\n\n view.set(editorView)\n mounted = true\n\n // Sync signal → editor for value changes from outside\n effect(() => {\n const val = value()\n const v = view.peek()\n if (!v) return\n const current = v.state.doc.toString()\n if (val !== current) {\n v.dispatch({\n changes: { from: 0, to: current.length, insert: val },\n })\n }\n })\n\n // Sync language changes\n effect(() => {\n const lang = language()\n const v = view.peek()\n if (!v) return\n loadLanguage(lang).then((ext) => {\n v.dispatch({ effects: languageCompartment.reconfigure(ext) })\n })\n })\n\n // Sync theme changes\n effect(() => {\n const t = theme()\n const v = view.peek()\n if (!v) return\n v.dispatch({ effects: themeCompartment.reconfigure(resolveTheme(t)) })\n })\n\n // Sync readOnly changes\n effect(() => {\n const ro = readOnly()\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(ro)),\n })\n })\n }\n\n // ── Actions ──────────────────────────────────────────────────────────\n\n function focus(): void {\n view.peek()?.focus()\n }\n\n function insert(text: string): void {\n const v = view.peek()\n if (!v) return\n const pos = v.state.selection.main.head\n v.dispatch({ changes: { from: pos, insert: text } })\n }\n\n function replaceSelection(text: string): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(v.state.replaceSelection(text))\n }\n\n function select(from: number, to: number): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({ selection: { anchor: from, head: to } })\n }\n\n function selectAll(): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({ selection: { anchor: 0, head: v.state.doc.length } })\n }\n\n function goToLine(line: number): void {\n const v = view.peek()\n if (!v) return\n const lineInfo = v.state.doc.line(\n Math.min(Math.max(1, line), v.state.doc.lines),\n )\n v.dispatch({\n selection: { anchor: lineInfo.from },\n scrollIntoView: true,\n })\n v.focus()\n }\n\n function undo(): void {\n const v = view.peek()\n if (v) cmUndo(v)\n }\n\n function redo(): void {\n const v = view.peek()\n if (v) cmRedo(v)\n }\n\n function foldAll(): void {\n const v = view.peek()\n if (!v) return\n const { foldAll: foldAllCmd } = require('@codemirror/language')\n foldAllCmd(v)\n }\n\n function unfoldAll(): void {\n const v = view.peek()\n if (!v) return\n const { unfoldAll: unfoldAllCmd } = require('@codemirror/language')\n unfoldAllCmd(v)\n }\n\n // ── Diagnostics ────────────────────────────────────────────────────\n\n function setDiagnostics(diagnostics: import('./types').Diagnostic[]): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(\n cmSetDiagnostics(\n v.state,\n diagnostics.map((d) => ({\n from: d.from,\n to: d.to,\n severity: d.severity === 'hint' ? 'info' : d.severity,\n message: d.message,\n source: d.source,\n })),\n ),\n )\n }\n\n function clearDiagnostics(): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(cmSetDiagnostics(v.state, []))\n }\n\n // ── Line highlights ────────────────────────────────────────────────\n\n function highlightLine(line: number, className: string): void {\n lineHighlights.set(line, className)\n // Force re-render of decorations\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n function clearLineHighlights(): void {\n lineHighlights.clear()\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n // ── Gutter markers ────────────────────────────────────────────────\n\n function setGutterMarker(\n line: number,\n marker: import('./types').GutterMarker,\n ): void {\n gutterMarkers.set(line, marker)\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n function clearGutterMarkers(): void {\n gutterMarkers.clear()\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n // ── Custom keybindings ─────────────────────────────────────────────\n\n const customKeybindings: Array<{ key: string; run: () => boolean }> = []\n\n function addKeybinding(\n key: string,\n handler: () => boolean | undefined,\n ): void {\n customKeybindings.push({\n key,\n run: () => {\n handler()\n return true\n },\n })\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: extraKeymapCompartment.reconfigure(keymap.of(customKeybindings)),\n })\n }\n\n // ── Text queries ───────────────────────────────────────────────────\n\n function getLine(line: number): string {\n const v = view.peek()\n if (!v) return ''\n const clamped = Math.min(Math.max(1, line), v.state.doc.lines)\n return v.state.doc.line(clamped).text\n }\n\n function getWordAtCursor(): string {\n const v = view.peek()\n if (!v) return ''\n const pos = v.state.selection.main.head\n const line = v.state.doc.lineAt(pos)\n const col = pos - line.from\n const text = line.text\n\n // Find word boundaries\n let start = col\n let end = col\n while (start > 0 && /\\w/.test(text[start - 1]!)) start--\n while (end < text.length && /\\w/.test(text[end]!)) end++\n\n return text.slice(start, end)\n }\n\n function scrollTo(pos: number): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: EditorView.scrollIntoView(pos, { y: 'center' }),\n })\n }\n\n // ── Vim / Emacs mode loading ───────────────────────────────────────\n\n async function loadKeyMode(): Promise<void> {\n const v = view.peek()\n if (!v) return\n\n // Use string concat to prevent Vite from statically analyzing these optional imports\n const vimPkg = '@replit/codemirror-' + 'vim'\n const emacsPkg = '@replit/codemirror-' + 'emacs'\n\n if (enableVim) {\n try {\n const mod = await import(/* @vite-ignore */ vimPkg)\n v.dispatch({\n effects: keyModeCompartment.reconfigure(mod.vim()),\n })\n } catch {\n /* @replit/codemirror-vim not installed */\n }\n }\n\n if (enableEmacs) {\n try {\n const mod = await import(/* @vite-ignore */ emacsPkg)\n v.dispatch({\n effects: keyModeCompartment.reconfigure(mod.emacs()),\n })\n } catch {\n /* @replit/codemirror-emacs not installed */\n }\n }\n }\n\n function dispose(): void {\n const v = view.peek()\n if (v) {\n v.destroy()\n view.set(null)\n mounted = false\n }\n }\n\n // ── Expose mount for component ─────────────────────────────────────\n\n const instance: EditorInstance & { _mount: typeof mount } = {\n value,\n language,\n theme,\n readOnly,\n cursor,\n selection,\n lineCount,\n focused,\n view,\n focus,\n insert,\n replaceSelection,\n select,\n selectAll,\n goToLine,\n undo,\n redo,\n foldAll,\n unfoldAll,\n setDiagnostics,\n clearDiagnostics,\n highlightLine,\n clearLineHighlights,\n setGutterMarker,\n clearGutterMarkers,\n addKeybinding,\n getLine,\n getWordAtCursor,\n scrollTo,\n config,\n dispose,\n _mount: async (parent: HTMLElement) => {\n await mount(parent)\n await loadKeyMode()\n },\n }\n\n return instance\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["CMGutterMarker","placeholderExt","undo","redo","setDiagnostics","cmSetDiagnostics"],"sources":["../../../node_modules/.bun/@pyreon+core@0.7.5/node_modules/@pyreon/core/lib/jsx-runtime.js","../src/components/code-editor.tsx","../src/languages.ts","../src/themes.ts","../src/components/diff-editor.tsx","../src/components/tabbed-editor.tsx","../src/minimap.ts","../src/editor.ts"],"sourcesContent":["//#region src/h.ts\n/** Marker for fragment nodes — renders children without a wrapper element */\nconst Fragment = Symbol(\"Pyreon.Fragment\");\n/**\n* Hyperscript function — the compiled output of JSX.\n* `<div class=\"x\">hello</div>` → `h(\"div\", { class: \"x\" }, \"hello\")`\n*\n* Generic on P so TypeScript validates props match the component's signature\n* at the call site, then stores the result in the loosely-typed VNode.\n*/\n/** Shared empty props sentinel — identity-checked in mountElement to skip applyProps. */\nconst EMPTY_PROPS = {};\nfunction h(type, props, ...children) {\n\treturn {\n\t\ttype,\n\t\tprops: props ?? EMPTY_PROPS,\n\t\tchildren: normalizeChildren(children),\n\t\tkey: props?.key ?? null\n\t};\n}\nfunction normalizeChildren(children) {\n\tfor (let i = 0; i < children.length; i++) if (Array.isArray(children[i])) return flattenChildren(children);\n\treturn children;\n}\nfunction flattenChildren(children) {\n\tconst result = [];\n\tfor (const child of children) if (Array.isArray(child)) result.push(...flattenChildren(child));\n\telse result.push(child);\n\treturn result;\n}\n\n//#endregion\n//#region src/jsx-runtime.ts\n/**\n* JSX automatic runtime.\n*\n* When tsconfig has `\"jsxImportSource\": \"@pyreon/core\"`, the TS/bundler compiler\n* rewrites JSX to imports from this file automatically:\n* <div class=\"x\" /> → jsx(\"div\", { class: \"x\" })\n*/\nfunction jsx(type, props, key) {\n\tconst { children, ...rest } = props;\n\tconst propsWithKey = key != null ? {\n\t\t...rest,\n\t\tkey\n\t} : rest;\n\tif (typeof type === \"function\") return h(type, children !== void 0 ? {\n\t\t...propsWithKey,\n\t\tchildren\n\t} : propsWithKey);\n\treturn h(type, propsWithKey, ...children === void 0 ? [] : Array.isArray(children) ? children : [children]);\n}\nconst jsxs = jsx;\n\n//#endregion\nexport { Fragment, jsx, jsxs };\n//# sourceMappingURL=jsx-runtime.js.map","import type { VNodeChild } from '@pyreon/core'\nimport type { CodeEditorProps, EditorInstance } from '../types'\n\n/**\n * Code editor component — mounts a CodeMirror 6 instance.\n *\n * @example\n * ```tsx\n * const editor = createEditor({\n * value: 'const x = 1',\n * language: 'typescript',\n * theme: 'dark',\n * })\n *\n * <CodeEditor instance={editor} style=\"height: 400px\" />\n * ```\n */\nexport function CodeEditor(props: CodeEditorProps): VNodeChild {\n const { instance } = props\n\n const containerRef = (el: Element | null) => {\n if (!el) return\n\n // Mount the editor into the container\n const mountable = instance as EditorInstance & {\n _mount?: (parent: HTMLElement) => Promise<void>\n }\n if (mountable._mount) {\n mountable._mount(el as HTMLElement)\n }\n }\n\n const baseStyle = `width: 100%; height: 100%; overflow: hidden; ${props.style ?? ''}`\n\n return (\n <div\n ref={containerRef}\n class={`pyreon-code-editor ${props.class ?? ''}`}\n style={baseStyle}\n />\n )\n}\n","import type { Extension } from '@codemirror/state'\nimport type { EditorLanguage } from './types'\n\n/**\n * Language extension loaders — lazy-loaded on demand.\n * Only the requested language is imported, keeping the initial bundle small.\n */\nconst languageLoaders: Record<EditorLanguage, () => Promise<Extension>> = {\n javascript: () =>\n import('@codemirror/lang-javascript').then((m) => m.javascript()),\n typescript: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ typescript: true }),\n ),\n jsx: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ jsx: true }),\n ),\n tsx: () =>\n import('@codemirror/lang-javascript').then((m) =>\n m.javascript({ typescript: true, jsx: true }),\n ),\n html: () => import('@codemirror/lang-html').then((m) => m.html()),\n css: () => import('@codemirror/lang-css').then((m) => m.css()),\n json: () => import('@codemirror/lang-json').then((m) => m.json()),\n markdown: () => import('@codemirror/lang-markdown').then((m) => m.markdown()),\n python: () => import('@codemirror/lang-python').then((m) => m.python()),\n rust: () => import('@codemirror/lang-rust').then((m) => m.rust()),\n sql: () => import('@codemirror/lang-sql').then((m) => m.sql()),\n xml: () => import('@codemirror/lang-xml').then((m) => m.xml()),\n yaml: () => import('@codemirror/lang-yaml').then((m) => m.yaml()),\n cpp: () => import('@codemirror/lang-cpp').then((m) => m.cpp()),\n java: () => import('@codemirror/lang-java').then((m) => m.java()),\n go: () => import('@codemirror/lang-go').then((m) => m.go()),\n php: () => import('@codemirror/lang-php').then((m) => m.php()),\n ruby: () => Promise.resolve([]),\n shell: () => Promise.resolve([]),\n plain: () => Promise.resolve([]),\n}\n\n// Cache loaded language extensions\nconst loaded = new Map<EditorLanguage, Extension>()\n\n/**\n * Load a language extension. Returns cached if already loaded.\n * Language grammars are lazy-imported — zero cost until used.\n *\n * @example\n * ```ts\n * const ext = await loadLanguage('typescript')\n * ```\n */\nexport async function loadLanguage(\n language: EditorLanguage,\n): Promise<Extension> {\n const cached = loaded.get(language)\n if (cached) return cached\n\n const loader = languageLoaders[language]\n if (!loader) return []\n\n try {\n const ext = await loader()\n loaded.set(language, ext)\n return ext\n } catch {\n // Language package not installed — return empty extension\n return []\n }\n}\n\n/**\n * Get available languages.\n */\nexport function getAvailableLanguages(): EditorLanguage[] {\n return Object.keys(languageLoaders) as EditorLanguage[]\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\nimport type { EditorTheme } from './types'\n\n/**\n * Light theme — clean, minimal.\n */\nexport const lightTheme: Extension = EditorView.theme({\n '&': {\n backgroundColor: '#ffffff',\n color: '#1e293b',\n },\n '.cm-content': {\n caretColor: '#1e293b',\n },\n '.cm-cursor': {\n borderLeftColor: '#1e293b',\n },\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': {\n backgroundColor: '#dbeafe',\n },\n '.cm-gutters': {\n backgroundColor: '#f8fafc',\n color: '#94a3b8',\n borderRight: '1px solid #e2e8f0',\n },\n '.cm-activeLineGutter': {\n backgroundColor: '#f1f5f9',\n color: '#475569',\n },\n '.cm-activeLine': {\n backgroundColor: '#f8fafc',\n },\n '.cm-foldGutter': {\n color: '#94a3b8',\n },\n})\n\n/**\n * Dark theme — VS Code inspired.\n */\nexport const darkTheme: Extension = EditorView.theme(\n {\n '&': {\n backgroundColor: '#1e1e2e',\n color: '#cdd6f4',\n },\n '.cm-content': {\n caretColor: '#f5e0dc',\n },\n '.cm-cursor': {\n borderLeftColor: '#f5e0dc',\n },\n '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': {\n backgroundColor: '#45475a',\n },\n '.cm-gutters': {\n backgroundColor: '#181825',\n color: '#585b70',\n borderRight: '1px solid #313244',\n },\n '.cm-activeLineGutter': {\n backgroundColor: '#1e1e2e',\n color: '#a6adc8',\n },\n '.cm-activeLine': {\n backgroundColor: '#1e1e2e80',\n },\n '.cm-foldGutter': {\n color: '#585b70',\n },\n '.cm-matchingBracket': {\n backgroundColor: '#45475a',\n color: '#f5e0dc',\n },\n },\n { dark: true },\n)\n\n/**\n * Resolve a theme value to a CodeMirror extension.\n */\nexport function resolveTheme(theme: EditorTheme): Extension {\n if (theme === 'light') return lightTheme\n if (theme === 'dark') return darkTheme\n return theme // custom Extension\n}\n","import { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language'\nimport { MergeView } from '@codemirror/merge'\nimport { EditorState, type Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\nimport type { VNodeChild } from '@pyreon/core'\nimport type { Signal } from '@pyreon/reactivity'\nimport { loadLanguage } from '../languages'\nimport { resolveTheme } from '../themes'\nimport type { DiffEditorProps } from '../types'\n\n/**\n * Side-by-side or inline diff editor using @codemirror/merge.\n *\n * @example\n * ```tsx\n * <DiffEditor\n * original=\"const x = 1\"\n * modified=\"const x = 2\"\n * language=\"typescript\"\n * theme=\"dark\"\n * style=\"height: 400px\"\n * />\n * ```\n */\nexport function DiffEditor(props: DiffEditorProps): VNodeChild {\n const {\n original,\n modified,\n language = 'plain',\n theme = 'light',\n readOnly = true,\n inline = false,\n } = props\n\n const containerRef = async (el: Element | null) => {\n if (!el) return\n\n const langExt = await loadLanguage(language)\n const themeExt = resolveTheme(theme)\n\n const extensions: Extension[] = [\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n langExt,\n themeExt,\n EditorView.editable.of(!readOnly),\n EditorState.readOnly.of(readOnly),\n ]\n\n const originalText =\n typeof original === 'string' ? original : (original as Signal<string>)()\n const modifiedText =\n typeof modified === 'string' ? modified : (modified as Signal<string>)()\n\n // Clear previous content\n ;(el as HTMLElement).innerHTML = ''\n\n if (inline) {\n // Unified/inline diff view\n new MergeView({\n a: {\n doc: originalText,\n extensions,\n },\n b: {\n doc: modifiedText,\n extensions,\n },\n parent: el as HTMLElement,\n collapseUnchanged: { margin: 3, minSize: 4 },\n })\n } else {\n // Side-by-side diff\n new MergeView({\n a: {\n doc: originalText,\n extensions,\n },\n b: {\n doc: modifiedText,\n extensions,\n },\n parent: el as HTMLElement,\n collapseUnchanged: { margin: 3, minSize: 4 },\n })\n }\n }\n\n const baseStyle = `width: 100%; height: 100%; overflow: hidden; ${props.style ?? ''}`\n\n return (\n <div\n ref={containerRef}\n class={`pyreon-diff-editor ${props.class ?? ''}`}\n style={baseStyle}\n />\n )\n}\n","import type { VNodeChild } from '@pyreon/core'\nimport type { TabbedEditorProps } from '../types'\nimport { CodeEditor } from './code-editor'\n\n/**\n * Tabbed code editor component — renders tab bar + editor.\n * Headless styling — the tab bar is a plain div with button tabs.\n * Consumers can style via CSS classes.\n *\n * @example\n * ```tsx\n * const editor = createTabbedEditor({\n * tabs: [\n * { name: 'index.ts', language: 'typescript', value: 'const x = 1' },\n * { name: 'style.css', language: 'css', value: '.app { }' },\n * ],\n * theme: 'dark',\n * })\n *\n * <TabbedEditor instance={editor} style=\"height: 500px\" />\n * ```\n */\nexport function TabbedEditor(props: TabbedEditorProps): VNodeChild {\n const { instance } = props\n\n const containerStyle = `display: flex; flex-direction: column; width: 100%; height: 100%; ${props.style ?? ''}`\n\n const tabBarStyle =\n 'display: flex; overflow-x: auto; background: #f1f5f9; border-bottom: 1px solid #e2e8f0; min-height: 34px; flex-shrink: 0;'\n\n return (\n <div\n class={`pyreon-tabbed-editor ${props.class ?? ''}`}\n style={containerStyle}\n >\n {() => {\n const tabs = instance.tabs()\n const activeId = instance.activeTabId()\n\n return (\n <div class=\"pyreon-tabbed-editor-tabs\" style={tabBarStyle}>\n {tabs.map((tab) => {\n const id = tab.id ?? tab.name\n const isActive = id === activeId\n\n const tabStyle = `display: flex; align-items: center; gap: 6px; padding: 6px 12px; border: none; background: ${isActive ? 'white' : 'transparent'}; border-bottom: ${isActive ? '2px solid #3b82f6' : '2px solid transparent'}; cursor: pointer; font-size: 13px; color: ${isActive ? '#1e293b' : '#64748b'}; white-space: nowrap; position: relative; font-family: inherit;`\n\n return (\n <button\n type=\"button\"\n key={id}\n class={`pyreon-tab ${isActive ? 'active' : ''} ${tab.modified ? 'modified' : ''}`}\n style={tabStyle}\n onClick={() => instance.switchTab(id)}\n >\n <span>{tab.name}</span>\n {tab.modified && (\n <span\n style=\"width: 6px; height: 6px; border-radius: 50%; background: #f59e0b; flex-shrink: 0;\"\n title=\"Modified\"\n />\n )}\n {tab.closable !== false && (\n <span\n style=\"font-size: 14px; line-height: 1; opacity: 0.5; cursor: pointer; padding: 0 2px; margin-left: 2px;\"\n title=\"Close\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n instance.closeTab(id)\n }}\n >\n ×\n </span>\n )}\n </button>\n )\n })}\n </div>\n )\n }}\n <div style=\"flex: 1; min-height: 0;\">\n <CodeEditor instance={instance.editor} />\n </div>\n </div>\n )\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view'\n\n/**\n * Canvas-based minimap extension for CodeMirror 6.\n * Renders a scaled-down overview of the document on the right side.\n */\n\nconst MINIMAP_WIDTH = 80\nconst CHAR_WIDTH = 1.2\nconst LINE_HEIGHT = 2.5\nconst MINIMAP_BG = '#1e1e2e'\nconst MINIMAP_BG_LIGHT = '#f8fafc'\nconst TEXT_COLOR = '#585b70'\nconst TEXT_COLOR_LIGHT = '#94a3b8'\nconst VIEWPORT_COLOR = 'rgba(59, 130, 246, 0.15)'\nconst VIEWPORT_BORDER = 'rgba(59, 130, 246, 0.4)'\n\nfunction createMinimapCanvas(): HTMLCanvasElement {\n const canvas = document.createElement('canvas')\n canvas.style.cssText = `position: absolute; right: 0; top: 0; width: ${MINIMAP_WIDTH}px; height: 100%; cursor: pointer; z-index: 5;`\n canvas.width = MINIMAP_WIDTH * 2 // retina\n return canvas\n}\n\nfunction renderMinimap(canvas: HTMLCanvasElement, view: EditorView): void {\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const doc = view.state.doc\n const totalLines = doc.lines\n const height = canvas.clientHeight\n canvas.height = height * 2 // retina\n\n const isDark = view.dom.classList.contains('cm-dark')\n const bg = isDark ? MINIMAP_BG : MINIMAP_BG_LIGHT\n const textColor = isDark ? TEXT_COLOR : TEXT_COLOR_LIGHT\n\n const scale = 2 // retina\n ctx.setTransform(scale, 0, 0, scale, 0, 0)\n\n // Background\n ctx.fillStyle = bg\n ctx.fillRect(0, 0, MINIMAP_WIDTH, height)\n\n // Calculate visible range in minimap\n const contentHeight = totalLines * LINE_HEIGHT\n const scrollFraction =\n contentHeight > height\n ? view.scrollDOM.scrollTop /\n (view.scrollDOM.scrollHeight - view.scrollDOM.clientHeight || 1)\n : 0\n const offset =\n contentHeight > height ? scrollFraction * (contentHeight - height) : 0\n\n // Render text lines\n ctx.fillStyle = textColor\n const startLine = Math.max(1, Math.floor(offset / LINE_HEIGHT))\n const endLine = Math.min(\n totalLines,\n startLine + Math.ceil(height / LINE_HEIGHT) + 1,\n )\n\n for (let i = startLine; i <= endLine; i++) {\n const line = doc.line(i)\n const y = (i - 1) * LINE_HEIGHT - offset\n if (y < -LINE_HEIGHT || y > height) continue\n\n const text = line.text\n let x = 4\n for (let j = 0; j < Math.min(text.length, 60); j++) {\n if (text[j] !== ' ' && text[j] !== '\\t') {\n ctx.fillRect(x, y, CHAR_WIDTH, 1.5)\n }\n x += CHAR_WIDTH\n }\n }\n\n // Viewport indicator\n const viewportTop = view.scrollDOM.scrollTop\n const viewportHeight = view.scrollDOM.clientHeight\n const docHeight = view.scrollDOM.scrollHeight || 1\n\n const vpY = (viewportTop / docHeight) * Math.min(contentHeight, height)\n const vpH = (viewportHeight / docHeight) * Math.min(contentHeight, height)\n\n ctx.fillStyle = VIEWPORT_COLOR\n ctx.fillRect(0, vpY, MINIMAP_WIDTH, vpH)\n ctx.strokeStyle = VIEWPORT_BORDER\n ctx.lineWidth = 1\n ctx.strokeRect(0.5, vpY + 0.5, MINIMAP_WIDTH - 1, vpH - 1)\n}\n\n/**\n * CodeMirror 6 minimap extension.\n * Renders a canvas-based code overview on the right side of the editor.\n *\n * @example\n * ```ts\n * import { minimapExtension } from '@pyreon/code'\n * // Add to editor extensions\n * ```\n */\nexport function minimapExtension(): Extension {\n return [\n ViewPlugin.fromClass(\n class {\n canvas: HTMLCanvasElement\n view: EditorView\n animFrame: number | null = null\n\n constructor(view: EditorView) {\n this.view = view\n this.canvas = createMinimapCanvas()\n view.dom.style.position = 'relative'\n view.dom.appendChild(this.canvas)\n\n // Click to scroll\n this.canvas.addEventListener('click', (e) => {\n const rect = this.canvas.getBoundingClientRect()\n const clickY = e.clientY - rect.top\n const fraction = clickY / rect.height\n const scrollTarget =\n fraction *\n (view.scrollDOM.scrollHeight - view.scrollDOM.clientHeight)\n view.scrollDOM.scrollTo({ top: scrollTarget, behavior: 'smooth' })\n })\n\n this.render()\n }\n\n render() {\n renderMinimap(this.canvas, this.view)\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n update.geometryChanged\n ) {\n if (this.animFrame) cancelAnimationFrame(this.animFrame)\n this.animFrame = requestAnimationFrame(() => this.render())\n }\n }\n\n destroy() {\n if (this.animFrame) cancelAnimationFrame(this.animFrame)\n this.canvas.remove()\n }\n },\n ),\n // Add padding on the right for the minimap\n EditorView.theme({\n '.cm-scroller': {\n paddingRight: `${MINIMAP_WIDTH + 8}px`,\n },\n }),\n ]\n}\n","import {\n autocompletion,\n closeBrackets,\n closeBracketsKeymap,\n completionKeymap,\n} from '@codemirror/autocomplete'\nimport {\n redo as cmRedo,\n undo as cmUndo,\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n} from '@codemirror/commands'\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldGutter,\n foldKeymap,\n indentOnInput,\n indentUnit,\n syntaxHighlighting,\n} from '@codemirror/language'\nimport {\n setDiagnostics as cmSetDiagnostics,\n lintKeymap,\n} from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport { Compartment, EditorState, type Extension } from '@codemirror/state'\nimport {\n GutterMarker as CMGutterMarker,\n crosshairCursor,\n Decoration,\n type DecorationSet,\n drawSelection,\n dropCursor,\n EditorView,\n gutter,\n highlightActiveLine,\n highlightActiveLineGutter,\n keymap,\n lineNumbers,\n placeholder as placeholderExt,\n rectangularSelection,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view'\nimport { computed, effect, signal } from '@pyreon/reactivity'\nimport { loadLanguage } from './languages'\nimport { minimapExtension } from './minimap'\nimport { resolveTheme } from './themes'\nimport type {\n EditorConfig,\n EditorInstance,\n EditorLanguage,\n EditorTheme,\n} from './types'\n\n/**\n * Create a reactive code editor instance.\n *\n * The editor state (value, language, theme, cursor, selection) is backed\n * by signals. The CodeMirror EditorView is created when mounted via\n * the `<CodeEditor>` component.\n *\n * @param config - Editor configuration\n * @returns A reactive EditorInstance\n *\n * @example\n * ```tsx\n * const editor = createEditor({\n * value: 'const x = 1',\n * language: 'typescript',\n * theme: 'dark',\n * })\n *\n * editor.value() // reactive\n * editor.value.set('new') // updates editor\n *\n * <CodeEditor instance={editor} />\n * ```\n */\nexport function createEditor(config: EditorConfig = {}): EditorInstance {\n const {\n value: initialValue = '',\n language: initialLanguage = 'plain',\n theme: initialTheme = 'light',\n lineNumbers: showLineNumbers = true,\n readOnly: initialReadOnly = false,\n foldGutter: showFoldGutter = true,\n bracketMatching: enableBracketMatching = true,\n autocomplete: enableAutocomplete = true,\n search: _enableSearch = true,\n highlightIndentGuides: enableIndentGuides = true,\n vim: enableVim = false,\n emacs: enableEmacs = false,\n tabSize: configTabSize = 2,\n lineWrapping: enableLineWrapping = false,\n placeholder: placeholderText,\n minimap: enableMinimap = false,\n extensions: userExtensions = [],\n onChange,\n } = config\n\n // ── Reactive state ───────────────────────────────────────────────────\n\n const value = signal(initialValue)\n const language = signal<EditorLanguage>(initialLanguage)\n const theme = signal<EditorTheme>(initialTheme)\n const readOnly = signal(initialReadOnly)\n const focused = signal(false)\n const view = signal<EditorView | null>(null)\n\n // Internal version tracker for cursor/selection reactivity\n const docVersion = signal(0)\n\n // ── Compartments (for dynamic reconfiguration) ─────────────────────\n\n const languageCompartment = new Compartment()\n const themeCompartment = new Compartment()\n const readOnlyCompartment = new Compartment()\n const extraKeymapCompartment = new Compartment()\n const keyModeCompartment = new Compartment()\n\n // ── Computed ─────────────────────────────────────────────────────────\n\n const cursor = computed(() => {\n docVersion() // subscribe to changes\n const v = view.peek()\n if (!v) return { line: 1, col: 1 }\n const pos = v.state.selection.main.head\n const line = v.state.doc.lineAt(pos)\n return { line: line.number, col: pos - line.from + 1 }\n })\n\n const selection = computed(() => {\n docVersion()\n const v = view.peek()\n if (!v) return { from: 0, to: 0, text: '' }\n const sel = v.state.selection.main\n return {\n from: sel.from,\n to: sel.to,\n text: v.state.sliceDoc(sel.from, sel.to),\n }\n })\n\n const lineCount = computed(() => {\n docVersion()\n const v = view.peek()\n return v ? v.state.doc.lines : initialValue.split('\\n').length\n })\n\n // ── Line highlight support ──────────────────────────────────────────\n\n const lineHighlights = new Map<number, string>()\n\n const lineHighlightField = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet\n\n constructor(editorView: EditorView) {\n this.decorations = this.buildDecos(editorView)\n }\n\n buildDecos(editorView: EditorView): DecorationSet {\n const ranges: Array<{ from: number; deco: any }> = []\n for (const [lineNum, cls] of lineHighlights) {\n if (lineNum >= 1 && lineNum <= editorView.state.doc.lines) {\n const lineInfo = editorView.state.doc.line(lineNum)\n ranges.push({\n from: lineInfo.from,\n deco: Decoration.line({ class: cls }),\n })\n }\n }\n return Decoration.set(\n ranges\n .sort((a, b) => a.from - b.from)\n .map((d) => d.deco.range(d.from)),\n )\n }\n\n update(upd: ViewUpdate) {\n if (upd.docChanged || upd.viewportChanged) {\n this.decorations = this.buildDecos(upd.view)\n }\n }\n },\n { decorations: (plugin) => plugin.decorations },\n )\n\n // ── Gutter marker support ──────────────────────────────────────────\n\n const gutterMarkers = new Map<\n number,\n { class?: string; text?: string; title?: string }\n >()\n\n class CustomGutterMarker extends CMGutterMarker {\n markerText: string\n markerTitle: string\n markerClass: string\n\n constructor(opts: { class?: string; text?: string; title?: string }) {\n super()\n this.markerText = opts.text ?? ''\n this.markerTitle = opts.title ?? ''\n this.markerClass = opts.class ?? ''\n }\n\n override toDOM() {\n const el = document.createElement('span')\n el.textContent = this.markerText\n el.title = this.markerTitle\n if (this.markerClass) el.className = this.markerClass\n el.style.cssText =\n 'cursor: pointer; display: inline-block; width: 100%; text-align: center;'\n return el\n }\n }\n\n const gutterMarkerExtension = gutter({\n class: 'pyreon-code-gutter-markers',\n lineMarker: (gutterView, line) => {\n const lineNo = gutterView.state.doc.lineAt(line.from).number\n const marker = gutterMarkers.get(lineNo)\n if (!marker) return null\n return new CustomGutterMarker(marker)\n },\n initialSpacer: () => new CustomGutterMarker({ text: ' ' }),\n })\n\n // ── Build extensions ─────────────────────────────────────────────────\n\n function buildExtensions(langExt: Extension): Extension[] {\n const exts: Extension[] = [\n // Core\n history(),\n drawSelection(),\n dropCursor(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSelectionMatches(),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n indentUnit.of(' '.repeat(configTabSize)),\n\n // Keymaps\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap,\n indentWithTab,\n ]),\n\n // Dynamic compartments\n languageCompartment.of(langExt),\n themeCompartment.of(resolveTheme(initialTheme)),\n readOnlyCompartment.of(EditorState.readOnly.of(initialReadOnly)),\n extraKeymapCompartment.of([]),\n keyModeCompartment.of([]),\n\n // Update listener — sync CM changes to signal\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n const newValue = update.state.doc.toString()\n // Avoid infinite loop: only set if different\n if (newValue !== value.peek()) {\n value.set(newValue)\n onChange?.(newValue)\n }\n docVersion.update((v) => v + 1)\n }\n if (update.selectionSet) {\n docVersion.update((v) => v + 1)\n }\n if (update.focusChanged) {\n focused.set(update.view.hasFocus)\n }\n }),\n ]\n\n // Optional features\n if (showLineNumbers) exts.push(lineNumbers())\n if (showFoldGutter) exts.push(foldGutter())\n if (enableBracketMatching) exts.push(bracketMatching(), closeBrackets())\n if (enableAutocomplete) exts.push(autocompletion())\n if (enableLineWrapping) exts.push(EditorView.lineWrapping)\n // Indent guides via theme (CM6 doesn't have a built-in extension for this)\n if (enableIndentGuides) {\n exts.push(\n EditorView.theme({\n '.cm-line': {\n backgroundImage:\n 'linear-gradient(to right, #e5e7eb 1px, transparent 1px)',\n backgroundSize: `${configTabSize}ch 100%`,\n backgroundPosition: '0 0',\n },\n }),\n )\n }\n if (placeholderText) exts.push(placeholderExt(placeholderText))\n if (enableMinimap) exts.push(minimapExtension())\n\n // Line highlight decoration support\n exts.push(lineHighlightField)\n // Gutter marker support\n exts.push(gutterMarkerExtension)\n\n // User extensions\n exts.push(...userExtensions)\n\n return exts\n }\n\n // ── Mount helper — called by CodeEditor component ────────────────────\n\n let mounted = false\n\n async function mount(parent: HTMLElement): Promise<void> {\n if (mounted) return\n\n const langExt = await loadLanguage(language.peek())\n const extensions = buildExtensions(langExt)\n\n const state = EditorState.create({\n doc: value.peek(),\n extensions,\n })\n\n const editorView = new EditorView({\n state,\n parent,\n })\n\n view.set(editorView)\n mounted = true\n\n // Sync signal → editor for value changes from outside\n effect(() => {\n const val = value()\n const v = view.peek()\n if (!v) return\n const current = v.state.doc.toString()\n if (val !== current) {\n v.dispatch({\n changes: { from: 0, to: current.length, insert: val },\n })\n }\n })\n\n // Sync language changes\n effect(() => {\n const lang = language()\n const v = view.peek()\n if (!v) return\n loadLanguage(lang).then((ext) => {\n v.dispatch({ effects: languageCompartment.reconfigure(ext) })\n })\n })\n\n // Sync theme changes\n effect(() => {\n const t = theme()\n const v = view.peek()\n if (!v) return\n v.dispatch({ effects: themeCompartment.reconfigure(resolveTheme(t)) })\n })\n\n // Sync readOnly changes\n effect(() => {\n const ro = readOnly()\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(ro)),\n })\n })\n }\n\n // ── Actions ──────────────────────────────────────────────────────────\n\n function focus(): void {\n view.peek()?.focus()\n }\n\n function insert(text: string): void {\n const v = view.peek()\n if (!v) return\n const pos = v.state.selection.main.head\n v.dispatch({ changes: { from: pos, insert: text } })\n }\n\n function replaceSelection(text: string): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(v.state.replaceSelection(text))\n }\n\n function select(from: number, to: number): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({ selection: { anchor: from, head: to } })\n }\n\n function selectAll(): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({ selection: { anchor: 0, head: v.state.doc.length } })\n }\n\n function goToLine(line: number): void {\n const v = view.peek()\n if (!v) return\n const lineInfo = v.state.doc.line(\n Math.min(Math.max(1, line), v.state.doc.lines),\n )\n v.dispatch({\n selection: { anchor: lineInfo.from },\n scrollIntoView: true,\n })\n v.focus()\n }\n\n function undo(): void {\n const v = view.peek()\n if (v) cmUndo(v)\n }\n\n function redo(): void {\n const v = view.peek()\n if (v) cmRedo(v)\n }\n\n function foldAll(): void {\n const v = view.peek()\n if (!v) return\n const { foldAll: foldAllCmd } = require('@codemirror/language')\n foldAllCmd(v)\n }\n\n function unfoldAll(): void {\n const v = view.peek()\n if (!v) return\n const { unfoldAll: unfoldAllCmd } = require('@codemirror/language')\n unfoldAllCmd(v)\n }\n\n // ── Diagnostics ────────────────────────────────────────────────────\n\n function setDiagnostics(diagnostics: import('./types').Diagnostic[]): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(\n cmSetDiagnostics(\n v.state,\n diagnostics.map((d) => ({\n from: d.from,\n to: d.to,\n severity: d.severity === 'hint' ? 'info' : d.severity,\n message: d.message,\n ...(d.source != null ? { source: d.source } : {}),\n })),\n ),\n )\n }\n\n function clearDiagnostics(): void {\n const v = view.peek()\n if (!v) return\n v.dispatch(cmSetDiagnostics(v.state, []))\n }\n\n // ── Line highlights ────────────────────────────────────────────────\n\n function highlightLine(line: number, className: string): void {\n lineHighlights.set(line, className)\n // Force re-render of decorations\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n function clearLineHighlights(): void {\n lineHighlights.clear()\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n // ── Gutter markers ────────────────────────────────────────────────\n\n function setGutterMarker(\n line: number,\n marker: import('./types').GutterMarker,\n ): void {\n gutterMarkers.set(line, marker)\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n function clearGutterMarkers(): void {\n gutterMarkers.clear()\n const v = view.peek()\n if (v) v.dispatch({ effects: [] })\n }\n\n // ── Custom keybindings ─────────────────────────────────────────────\n\n const customKeybindings: Array<{ key: string; run: () => boolean }> = []\n\n function addKeybinding(\n key: string,\n handler: () => boolean | undefined,\n ): void {\n customKeybindings.push({\n key,\n run: () => {\n handler()\n return true\n },\n })\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: extraKeymapCompartment.reconfigure(keymap.of(customKeybindings)),\n })\n }\n\n // ── Text queries ───────────────────────────────────────────────────\n\n function getLine(line: number): string {\n const v = view.peek()\n if (!v) return ''\n const clamped = Math.min(Math.max(1, line), v.state.doc.lines)\n return v.state.doc.line(clamped).text\n }\n\n function getWordAtCursor(): string {\n const v = view.peek()\n if (!v) return ''\n const pos = v.state.selection.main.head\n const line = v.state.doc.lineAt(pos)\n const col = pos - line.from\n const text = line.text\n\n // Find word boundaries\n let start = col\n let end = col\n while (start > 0 && /\\w/.test(text[start - 1]!)) start--\n while (end < text.length && /\\w/.test(text[end]!)) end++\n\n return text.slice(start, end)\n }\n\n function scrollTo(pos: number): void {\n const v = view.peek()\n if (!v) return\n v.dispatch({\n effects: EditorView.scrollIntoView(pos, { y: 'center' }),\n })\n }\n\n // ── Vim / Emacs mode loading ───────────────────────────────────────\n\n async function loadKeyMode(): Promise<void> {\n const v = view.peek()\n if (!v) return\n\n // Use string concat to prevent Vite from statically analyzing these optional imports\n const vimPkg = '@replit/codemirror-' + 'vim'\n const emacsPkg = '@replit/codemirror-' + 'emacs'\n\n if (enableVim) {\n try {\n const mod = await import(/* @vite-ignore */ vimPkg)\n v.dispatch({\n effects: keyModeCompartment.reconfigure(mod.vim()),\n })\n } catch {\n /* @replit/codemirror-vim not installed */\n }\n }\n\n if (enableEmacs) {\n try {\n const mod = await import(/* @vite-ignore */ emacsPkg)\n v.dispatch({\n effects: keyModeCompartment.reconfigure(mod.emacs()),\n })\n } catch {\n /* @replit/codemirror-emacs not installed */\n }\n }\n }\n\n function dispose(): void {\n const v = view.peek()\n if (v) {\n v.destroy()\n view.set(null)\n mounted = false\n }\n }\n\n // ── Expose mount for component ─────────────────────────────────────\n\n const instance: EditorInstance & { _mount: typeof mount } = {\n value,\n language,\n theme,\n readOnly,\n cursor,\n selection,\n lineCount,\n focused,\n view,\n focus,\n insert,\n replaceSelection,\n select,\n selectAll,\n goToLine,\n undo,\n redo,\n foldAll,\n unfoldAll,\n setDiagnostics,\n clearDiagnostics,\n highlightLine,\n clearLineHighlights,\n setGutterMarker,\n clearGutterMarkers,\n addKeybinding,\n getLine,\n getWordAtCursor,\n scrollTo,\n config,\n dispose,\n _mount: async (parent: HTMLElement) => {\n await mount(parent)\n await loadKeyMode()\n },\n }\n\n return instance\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyreon/code",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Reactive code editor for Pyreon — CodeMirror 6 with signals, minimap, diff editor, lazy-loaded languages",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"@codemirror/lang-php": "^6.0.1"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@pyreon/core": ">=0.
|
|
71
|
-
"@pyreon/reactivity": ">=0.
|
|
70
|
+
"@pyreon/core": ">=0.7.0 <0.8.0",
|
|
71
|
+
"@pyreon/reactivity": ">=0.7.0 <0.8.0"
|
|
72
72
|
}
|
|
73
73
|
}
|
package/src/editor.ts
CHANGED
|
@@ -209,7 +209,7 @@ export function createEditor(config: EditorConfig = {}): EditorInstance {
|
|
|
209
209
|
this.markerClass = opts.class ?? ''
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
toDOM() {
|
|
212
|
+
override toDOM() {
|
|
213
213
|
const el = document.createElement('span')
|
|
214
214
|
el.textContent = this.markerText
|
|
215
215
|
el.title = this.markerTitle
|
|
@@ -466,7 +466,7 @@ export function createEditor(config: EditorConfig = {}): EditorInstance {
|
|
|
466
466
|
to: d.to,
|
|
467
467
|
severity: d.severity === 'hint' ? 'info' : d.severity,
|
|
468
468
|
message: d.message,
|
|
469
|
-
source: d.source,
|
|
469
|
+
...(d.source != null ? { source: d.source } : {}),
|
|
470
470
|
})),
|
|
471
471
|
),
|
|
472
472
|
)
|
package/src/tabbed-editor.ts
CHANGED
|
@@ -60,11 +60,15 @@ export function createTabbedEditor(
|
|
|
60
60
|
// ── Editor instance ────────────────────────────────────────────────────
|
|
61
61
|
|
|
62
62
|
const firstTab = tabsWithIds[0]
|
|
63
|
+
// Filter out undefined values to satisfy exactOptionalPropertyTypes
|
|
64
|
+
const filteredConfig = Object.fromEntries(
|
|
65
|
+
Object.entries(editorConfig).filter(([_, v]) => v !== undefined),
|
|
66
|
+
)
|
|
63
67
|
const editor = createEditor({
|
|
64
68
|
value: firstTab?.value ?? '',
|
|
65
69
|
language: (firstTab?.language ?? 'plain') as EditorLanguage,
|
|
66
|
-
theme,
|
|
67
|
-
...
|
|
70
|
+
...(theme != null ? { theme } : {}),
|
|
71
|
+
...filteredConfig,
|
|
68
72
|
onChange: (value) => {
|
|
69
73
|
// Save content to cache and mark as modified
|
|
70
74
|
const id = activeTabId.peek()
|