@pyreon/code 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/analysis/index.js.html +1 -1
  2. package/lib/index.js +2 -2
  3. package/lib/index.js.map +1 -1
  4. package/lib/types/index.d.ts +326 -831
  5. package/lib/types/index.d.ts.map +1 -1
  6. package/package.json +3 -3
  7. package/src/editor.ts +2 -2
  8. package/src/tabbed-editor.ts +6 -2
  9. package/lib/types/dist.d.ts +0 -798
  10. package/lib/types/dist.d.ts.map +0 -1
  11. package/lib/types/dist10.d.ts +0 -67
  12. package/lib/types/dist10.d.ts.map +0 -1
  13. package/lib/types/dist11.d.ts +0 -126
  14. package/lib/types/dist11.d.ts.map +0 -1
  15. package/lib/types/dist12.d.ts +0 -21
  16. package/lib/types/dist12.d.ts.map +0 -1
  17. package/lib/types/dist13.d.ts +0 -404
  18. package/lib/types/dist13.d.ts.map +0 -1
  19. package/lib/types/dist14.d.ts +0 -292
  20. package/lib/types/dist14.d.ts.map +0 -1
  21. package/lib/types/dist15.d.ts +0 -132
  22. package/lib/types/dist15.d.ts.map +0 -1
  23. package/lib/types/dist2.d.ts +0 -15
  24. package/lib/types/dist2.d.ts.map +0 -1
  25. package/lib/types/dist3.d.ts +0 -106
  26. package/lib/types/dist3.d.ts.map +0 -1
  27. package/lib/types/dist4.d.ts +0 -67
  28. package/lib/types/dist4.d.ts.map +0 -1
  29. package/lib/types/dist5.d.ts +0 -95
  30. package/lib/types/dist5.d.ts.map +0 -1
  31. package/lib/types/dist6.d.ts +0 -330
  32. package/lib/types/dist6.d.ts.map +0 -1
  33. package/lib/types/dist7.d.ts +0 -15
  34. package/lib/types/dist7.d.ts.map +0 -1
  35. package/lib/types/dist8.d.ts +0 -15
  36. package/lib/types/dist8.d.ts.map +0 -1
  37. package/lib/types/dist9.d.ts +0 -635
  38. package/lib/types/dist9.d.ts.map +0 -1
  39. package/lib/types/index2.d.ts +0 -347
  40. package/lib/types/index2.d.ts.map +0 -1
@@ -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":"07d75a45-1"},{"name":"home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.7.3/node_modules/@pyreon/core/lib/jsx-runtime.js","uid":"07d75a45-3"},{"name":"src","children":[{"name":"components","children":[{"uid":"07d75a45-5","name":"code-editor.tsx"},{"uid":"07d75a45-11","name":"diff-editor.tsx"},{"uid":"07d75a45-13","name":"tabbed-editor.tsx"}]},{"uid":"07d75a45-7","name":"languages.ts"},{"uid":"07d75a45-9","name":"themes.ts"},{"uid":"07d75a45-15","name":"minimap.ts"},{"uid":"07d75a45-17","name":"editor.ts"},{"uid":"07d75a45-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":"07d75a45-21"},{"name":"@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js","uid":"07d75a45-23"},{"name":"@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","uid":"07d75a45-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":"07d75a45-27"},{"name":"@codemirror+lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js","uid":"07d75a45-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":"07d75a45-31"},{"name":"@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","uid":"07d75a45-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":"07d75a45-35"},{"name":"@codemirror+lang-yaml@6.1.2/node_modules/@codemirror/lang-yaml/dist/index.js","uid":"07d75a45-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":"07d75a45-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":"07d75a45-41"},{"name":"@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","uid":"07d75a45-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":"07d75a45-45"},{"name":"@codemirror+lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js","uid":"07d75a45-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":"07d75a45-49"},{"name":"@codemirror+lang-rust@6.0.2/node_modules/@codemirror/lang-rust/dist/index.js","uid":"07d75a45-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":"07d75a45-53"},{"name":"@codemirror+lang-php@6.0.2/node_modules/@codemirror/lang-php/dist/index.js","uid":"07d75a45-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":"07d75a45-57"},{"name":"@codemirror+lang-python@6.2.1/node_modules/@codemirror/lang-python/dist/index.js","uid":"07d75a45-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":"07d75a45-61"},{"name":"@codemirror+lang-xml@6.1.0/node_modules/@codemirror/lang-xml/dist/index.js","uid":"07d75a45-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":"07d75a45-65"},{"name":"@codemirror+lang-cpp@6.0.3/node_modules/@codemirror/lang-cpp/dist/index.js","uid":"07d75a45-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":"07d75a45-69"},{"name":"@codemirror+lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js","uid":"07d75a45-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":"07d75a45-73"},{"name":"@codemirror+lang-go@6.0.1/node_modules/@codemirror/lang-go/dist/index.js","uid":"07d75a45-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":"07d75a45-77"},{"name":"@codemirror+lang-markdown@6.5.0/node_modules/@codemirror/lang-markdown/dist/index.js","uid":"07d75a45-79"}]}]}],"isRoot":true},"nodeParts":{"07d75a45-1":{"renderedLength":848,"gzipLength":487,"brotliLength":0,"metaUid":"07d75a45-0"},"07d75a45-3":{"renderedLength":1652,"gzipLength":834,"brotliLength":0,"metaUid":"07d75a45-2"},"07d75a45-5":{"renderedLength":731,"gzipLength":441,"brotliLength":0,"metaUid":"07d75a45-4"},"07d75a45-7":{"renderedLength":2245,"gzipLength":736,"brotliLength":0,"metaUid":"07d75a45-6"},"07d75a45-9":{"renderedLength":1544,"gzipLength":554,"brotliLength":0,"metaUid":"07d75a45-8"},"07d75a45-11":{"renderedLength":1594,"gzipLength":734,"brotliLength":0,"metaUid":"07d75a45-10"},"07d75a45-13":{"renderedLength":2681,"gzipLength":1174,"brotliLength":0,"metaUid":"07d75a45-12"},"07d75a45-15":{"renderedLength":3907,"gzipLength":1561,"brotliLength":0,"metaUid":"07d75a45-14"},"07d75a45-17":{"renderedLength":11835,"gzipLength":3495,"brotliLength":0,"metaUid":"07d75a45-16"},"07d75a45-19":{"renderedLength":0,"gzipLength":0,"brotliLength":0,"metaUid":"07d75a45-18"},"07d75a45-21":{"renderedLength":63577,"gzipLength":17559,"brotliLength":0,"metaUid":"07d75a45-20"},"07d75a45-23":{"renderedLength":48115,"gzipLength":13327,"brotliLength":0,"metaUid":"07d75a45-22"},"07d75a45-25":{"renderedLength":14880,"gzipLength":5154,"brotliLength":0,"metaUid":"07d75a45-24"},"07d75a45-27":{"renderedLength":20064,"gzipLength":7172,"brotliLength":0,"metaUid":"07d75a45-26"},"07d75a45-29":{"renderedLength":22643,"gzipLength":6815,"brotliLength":0,"metaUid":"07d75a45-28"},"07d75a45-31":{"renderedLength":18215,"gzipLength":7907,"brotliLength":0,"metaUid":"07d75a45-30"},"07d75a45-33":{"renderedLength":15648,"gzipLength":5292,"brotliLength":0,"metaUid":"07d75a45-32"},"07d75a45-35":{"renderedLength":15734,"gzipLength":5562,"brotliLength":0,"metaUid":"07d75a45-34"},"07d75a45-37":{"renderedLength":2680,"gzipLength":1246,"brotliLength":0,"metaUid":"07d75a45-36"},"07d75a45-39":{"renderedLength":44475,"gzipLength":14911,"brotliLength":0,"metaUid":"07d75a45-38"},"07d75a45-41":{"renderedLength":81007,"gzipLength":31200,"brotliLength":0,"metaUid":"07d75a45-40"},"07d75a45-43":{"renderedLength":12487,"gzipLength":3908,"brotliLength":0,"metaUid":"07d75a45-42"},"07d75a45-45":{"renderedLength":1935,"gzipLength":1155,"brotliLength":0,"metaUid":"07d75a45-44"},"07d75a45-47":{"renderedLength":753,"gzipLength":427,"brotliLength":0,"metaUid":"07d75a45-46"},"07d75a45-49":{"renderedLength":72532,"gzipLength":25861,"brotliLength":0,"metaUid":"07d75a45-48"},"07d75a45-51":{"renderedLength":1190,"gzipLength":672,"brotliLength":0,"metaUid":"07d75a45-50"},"07d75a45-53":{"renderedLength":100186,"gzipLength":28340,"brotliLength":0,"metaUid":"07d75a45-52"},"07d75a45-55":{"renderedLength":2337,"gzipLength":1091,"brotliLength":0,"metaUid":"07d75a45-54"},"07d75a45-57":{"renderedLength":43364,"gzipLength":17192,"brotliLength":0,"metaUid":"07d75a45-56"},"07d75a45-59":{"renderedLength":11176,"gzipLength":3600,"brotliLength":0,"metaUid":"07d75a45-58"},"07d75a45-61":{"renderedLength":10375,"gzipLength":4022,"brotliLength":0,"metaUid":"07d75a45-60"},"07d75a45-63":{"renderedLength":11201,"gzipLength":3380,"brotliLength":0,"metaUid":"07d75a45-62"},"07d75a45-65":{"renderedLength":102366,"gzipLength":33579,"brotliLength":0,"metaUid":"07d75a45-64"},"07d75a45-67":{"renderedLength":1470,"gzipLength":734,"brotliLength":0,"metaUid":"07d75a45-66"},"07d75a45-69":{"renderedLength":40938,"gzipLength":16437,"brotliLength":0,"metaUid":"07d75a45-68"},"07d75a45-71":{"renderedLength":1547,"gzipLength":788,"brotliLength":0,"metaUid":"07d75a45-70"},"07d75a45-73":{"renderedLength":28598,"gzipLength":11399,"brotliLength":0,"metaUid":"07d75a45-72"},"07d75a45-75":{"renderedLength":6782,"gzipLength":2298,"brotliLength":0,"metaUid":"07d75a45-74"},"07d75a45-77":{"renderedLength":66307,"gzipLength":17756,"brotliLength":0,"metaUid":"07d75a45-76"},"07d75a45-79":{"renderedLength":17435,"gzipLength":5525,"brotliLength":0,"metaUid":"07d75a45-78"}},"nodeMetas":{"07d75a45-0":{"id":"\u0000rolldown/runtime.js","moduleParts":{"index.js":"07d75a45-1"},"imported":[],"importedBy":[]},"07d75a45-2":{"id":"/home/runner/work/fundamentals/fundamentals/node_modules/.bun/@pyreon+core@0.7.3/node_modules/@pyreon/core/lib/jsx-runtime.js","moduleParts":{"index.js":"07d75a45-3"},"imported":[],"importedBy":[{"uid":"07d75a45-4"},{"uid":"07d75a45-10"},{"uid":"07d75a45-12"}]},"07d75a45-4":{"id":"/src/components/code-editor.tsx","moduleParts":{"index.js":"07d75a45-5"},"imported":[{"uid":"07d75a45-2"}],"importedBy":[{"uid":"07d75a45-18"},{"uid":"07d75a45-12"}]},"07d75a45-6":{"id":"/src/languages.ts","moduleParts":{"index.js":"07d75a45-7"},"imported":[{"uid":"07d75a45-42","dynamic":true},{"uid":"07d75a45-28","dynamic":true},{"uid":"07d75a45-32","dynamic":true},{"uid":"07d75a45-46","dynamic":true},{"uid":"07d75a45-78","dynamic":true},{"uid":"07d75a45-58","dynamic":true},{"uid":"07d75a45-50","dynamic":true},{"uid":"07d75a45-38","dynamic":true},{"uid":"07d75a45-62","dynamic":true},{"uid":"07d75a45-36","dynamic":true},{"uid":"07d75a45-66","dynamic":true},{"uid":"07d75a45-70","dynamic":true},{"uid":"07d75a45-74","dynamic":true},{"uid":"07d75a45-54","dynamic":true}],"importedBy":[{"uid":"07d75a45-18"},{"uid":"07d75a45-10"},{"uid":"07d75a45-16"}]},"07d75a45-8":{"id":"/src/themes.ts","moduleParts":{"index.js":"07d75a45-9"},"imported":[{"uid":"07d75a45-83"}],"importedBy":[{"uid":"07d75a45-18"},{"uid":"07d75a45-10"},{"uid":"07d75a45-16"}]},"07d75a45-10":{"id":"/src/components/diff-editor.tsx","moduleParts":{"index.js":"07d75a45-11"},"imported":[{"uid":"07d75a45-80"},{"uid":"07d75a45-81"},{"uid":"07d75a45-82"},{"uid":"07d75a45-83"},{"uid":"07d75a45-6"},{"uid":"07d75a45-8"},{"uid":"07d75a45-2"}],"importedBy":[{"uid":"07d75a45-18"}]},"07d75a45-12":{"id":"/src/components/tabbed-editor.tsx","moduleParts":{"index.js":"07d75a45-13"},"imported":[{"uid":"07d75a45-4"},{"uid":"07d75a45-2"}],"importedBy":[{"uid":"07d75a45-18"}]},"07d75a45-14":{"id":"/src/minimap.ts","moduleParts":{"index.js":"07d75a45-15"},"imported":[{"uid":"07d75a45-83"}],"importedBy":[{"uid":"07d75a45-18"},{"uid":"07d75a45-16"}]},"07d75a45-16":{"id":"/src/editor.ts","moduleParts":{"index.js":"07d75a45-17"},"imported":[{"uid":"07d75a45-84"},{"uid":"07d75a45-85"},{"uid":"07d75a45-80"},{"uid":"07d75a45-86"},{"uid":"07d75a45-87"},{"uid":"07d75a45-82"},{"uid":"07d75a45-83"},{"uid":"07d75a45-88"},{"uid":"07d75a45-6"},{"uid":"07d75a45-14"},{"uid":"07d75a45-8"}],"importedBy":[{"uid":"07d75a45-18"}]},"07d75a45-18":{"id":"/src/index.ts","moduleParts":{"index.js":"07d75a45-19"},"imported":[{"uid":"07d75a45-4"},{"uid":"07d75a45-10"},{"uid":"07d75a45-12"},{"uid":"07d75a45-16"},{"uid":"07d75a45-6"},{"uid":"07d75a45-14"},{"uid":"07d75a45-8"}],"importedBy":[],"isEntry":true},"07d75a45-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":"07d75a45-21"},"imported":[],"importedBy":[{"uid":"07d75a45-42"},{"uid":"07d75a45-32"},{"uid":"07d75a45-78"},{"uid":"07d75a45-58"},{"uid":"07d75a45-36"},{"uid":"07d75a45-74"},{"uid":"07d75a45-54"},{"uid":"07d75a45-26"},{"uid":"07d75a45-76"},{"uid":"07d75a45-24"},{"uid":"07d75a45-22"}]},"07d75a45-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":"07d75a45-23"},"imported":[{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-38"},{"uid":"07d75a45-36"},{"uid":"07d75a45-40"},{"uid":"07d75a45-26"},{"uid":"07d75a45-30"},{"uid":"07d75a45-44"},{"uid":"07d75a45-56"},{"uid":"07d75a45-48"},{"uid":"07d75a45-60"},{"uid":"07d75a45-34"},{"uid":"07d75a45-64"},{"uid":"07d75a45-68"},{"uid":"07d75a45-72"},{"uid":"07d75a45-52"}]},"07d75a45-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":"07d75a45-25"},"imported":[{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-38"},{"uid":"07d75a45-36"},{"uid":"07d75a45-40"},{"uid":"07d75a45-26"},{"uid":"07d75a45-30"},{"uid":"07d75a45-44"},{"uid":"07d75a45-76"},{"uid":"07d75a45-56"},{"uid":"07d75a45-48"},{"uid":"07d75a45-60"},{"uid":"07d75a45-34"},{"uid":"07d75a45-64"},{"uid":"07d75a45-68"},{"uid":"07d75a45-72"},{"uid":"07d75a45-52"}]},"07d75a45-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":"07d75a45-27"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"},{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-28"}]},"07d75a45-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":"07d75a45-29"},"imported":[{"uid":"07d75a45-26"},{"uid":"07d75a45-32"},{"uid":"07d75a45-42"},{"uid":"07d75a45-83"},{"uid":"07d75a45-82"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"},{"uid":"07d75a45-78"},{"uid":"07d75a45-54"}]},"07d75a45-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":"07d75a45-31"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-32"}]},"07d75a45-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":"07d75a45-33"},"imported":[{"uid":"07d75a45-30"},{"uid":"07d75a45-80"},{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-6"},{"uid":"07d75a45-28"}]},"07d75a45-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":"07d75a45-35"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-36"}]},"07d75a45-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":"07d75a45-37"},"imported":[{"uid":"07d75a45-34"},{"uid":"07d75a45-80"},{"uid":"07d75a45-20"},{"uid":"07d75a45-24"},{"uid":"07d75a45-22"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-39"},"imported":[{"uid":"07d75a45-80"},{"uid":"07d75a45-24"},{"uid":"07d75a45-22"},{"uid":"07d75a45-84"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-41"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-42"}]},"07d75a45-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":"07d75a45-43"},"imported":[{"uid":"07d75a45-40"},{"uid":"07d75a45-80"},{"uid":"07d75a45-82"},{"uid":"07d75a45-83"},{"uid":"07d75a45-84"},{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-6"},{"uid":"07d75a45-28"}]},"07d75a45-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":"07d75a45-45"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-46"}]},"07d75a45-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":"07d75a45-47"},"imported":[{"uid":"07d75a45-44"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-49"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-50"}]},"07d75a45-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":"07d75a45-51"},"imported":[{"uid":"07d75a45-48"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-53"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-54"}]},"07d75a45-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":"07d75a45-55"},"imported":[{"uid":"07d75a45-52"},{"uid":"07d75a45-20"},{"uid":"07d75a45-28"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-57"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-58"}]},"07d75a45-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":"07d75a45-59"},"imported":[{"uid":"07d75a45-56"},{"uid":"07d75a45-80"},{"uid":"07d75a45-20"},{"uid":"07d75a45-84"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-61"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-62"}]},"07d75a45-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":"07d75a45-63"},"imported":[{"uid":"07d75a45-60"},{"uid":"07d75a45-80"},{"uid":"07d75a45-82"},{"uid":"07d75a45-83"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-65"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-66"}]},"07d75a45-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":"07d75a45-67"},"imported":[{"uid":"07d75a45-64"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-69"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-70"}]},"07d75a45-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":"07d75a45-71"},"imported":[{"uid":"07d75a45-68"},{"uid":"07d75a45-80"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-73"},"imported":[{"uid":"07d75a45-22"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-74"}]},"07d75a45-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":"07d75a45-75"},"imported":[{"uid":"07d75a45-72"},{"uid":"07d75a45-80"},{"uid":"07d75a45-84"},{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-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":"07d75a45-77"},"imported":[{"uid":"07d75a45-20"},{"uid":"07d75a45-24"}],"importedBy":[{"uid":"07d75a45-78"}]},"07d75a45-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":"07d75a45-79"},"imported":[{"uid":"07d75a45-82"},{"uid":"07d75a45-83"},{"uid":"07d75a45-80"},{"uid":"07d75a45-84"},{"uid":"07d75a45-76"},{"uid":"07d75a45-28"},{"uid":"07d75a45-20"}],"importedBy":[{"uid":"07d75a45-6"}]},"07d75a45-80":{"id":"@codemirror/language","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-10"},{"uid":"07d75a45-16"},{"uid":"07d75a45-42"},{"uid":"07d75a45-28"},{"uid":"07d75a45-32"},{"uid":"07d75a45-46"},{"uid":"07d75a45-78"},{"uid":"07d75a45-58"},{"uid":"07d75a45-50"},{"uid":"07d75a45-38"},{"uid":"07d75a45-62"},{"uid":"07d75a45-36"},{"uid":"07d75a45-66"},{"uid":"07d75a45-70"},{"uid":"07d75a45-74"},{"uid":"07d75a45-54"}]},"07d75a45-81":{"id":"@codemirror/merge","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-10"}]},"07d75a45-82":{"id":"@codemirror/state","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-10"},{"uid":"07d75a45-16"},{"uid":"07d75a45-42"},{"uid":"07d75a45-28"},{"uid":"07d75a45-78"},{"uid":"07d75a45-62"}]},"07d75a45-83":{"id":"@codemirror/view","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-10"},{"uid":"07d75a45-16"},{"uid":"07d75a45-14"},{"uid":"07d75a45-8"},{"uid":"07d75a45-42"},{"uid":"07d75a45-28"},{"uid":"07d75a45-78"},{"uid":"07d75a45-62"}]},"07d75a45-84":{"id":"@codemirror/autocomplete","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-16"},{"uid":"07d75a45-42"},{"uid":"07d75a45-78"},{"uid":"07d75a45-58"},{"uid":"07d75a45-38"},{"uid":"07d75a45-74"}]},"07d75a45-85":{"id":"@codemirror/commands","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-16"}]},"07d75a45-86":{"id":"@codemirror/lint","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-16"}]},"07d75a45-87":{"id":"@codemirror/search","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-16"}]},"07d75a45-88":{"id":"@pyreon/reactivity","moduleParts":{},"imported":[],"importedBy":[{"uid":"07d75a45-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.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js
32
+ //#region ../../node_modules/.bun/@pyreon+core@0.7.3/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.3/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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"}