omni-viewer-core 0.1.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 (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/THIRD_PARTY_NOTICES.md +49 -0
  4. package/dist/assets/audio-engine/audio_engine.mjs +2 -0
  5. package/dist/assets/audio-engine/audio_engine.wasm +0 -0
  6. package/dist/assets/pdfjs/pdf.worker.min.mjs +21 -0
  7. package/dist/host/index.d.ts +133 -0
  8. package/dist/host/index.js +10 -0
  9. package/dist/i18n/catalog.en.d.ts +1 -0
  10. package/dist/i18n/catalog.en.js +411 -0
  11. package/dist/i18n/catalog.ko.d.ts +1 -0
  12. package/dist/i18n/catalog.ko.js +68 -0
  13. package/dist/i18n/index.d.ts +18 -0
  14. package/dist/i18n/index.js +41 -0
  15. package/dist/licenses/emscripten.txt +101 -0
  16. package/dist/licenses/kissfft.txt +28 -0
  17. package/dist/licenses/pdfjs-dist.txt +177 -0
  18. package/dist/parsers/a2l/index.d.ts +1 -0
  19. package/dist/parsers/a2l/index.js +1 -0
  20. package/dist/parsers/archive/index.d.ts +22 -0
  21. package/dist/parsers/archive/index.js +46 -0
  22. package/dist/parsers/archive/model.d.ts +29 -0
  23. package/dist/parsers/archive/model.js +1 -0
  24. package/dist/parsers/archive/worker.d.ts +21 -0
  25. package/dist/parsers/archive/worker.js +1 -0
  26. package/dist/parsers/arxml/index.d.ts +1 -0
  27. package/dist/parsers/arxml/index.js +1 -0
  28. package/dist/parsers/asc/index.d.ts +1 -0
  29. package/dist/parsers/asc/index.js +1 -0
  30. package/dist/parsers/audio/index.d.ts +9 -0
  31. package/dist/parsers/audio/index.js +46 -0
  32. package/dist/parsers/automotive/index.d.ts +33 -0
  33. package/dist/parsers/automotive/index.js +973 -0
  34. package/dist/parsers/blf/index.d.ts +1 -0
  35. package/dist/parsers/blf/index.js +1 -0
  36. package/dist/parsers/csv/delimiter.d.ts +31 -0
  37. package/dist/parsers/csv/delimiter.js +151 -0
  38. package/dist/parsers/csv/index.d.ts +30 -0
  39. package/dist/parsers/csv/index.js +108 -0
  40. package/dist/parsers/csv/parseText.d.ts +20 -0
  41. package/dist/parsers/csv/parseText.js +108 -0
  42. package/dist/parsers/csv/sort.d.ts +26 -0
  43. package/dist/parsers/csv/sort.js +224 -0
  44. package/dist/parsers/csv/statistics.d.ts +49 -0
  45. package/dist/parsers/csv/statistics.js +150 -0
  46. package/dist/parsers/dbc/index.d.ts +56 -0
  47. package/dist/parsers/dbc/index.js +94 -0
  48. package/dist/parsers/doc-binary/index.d.ts +35 -0
  49. package/dist/parsers/doc-binary/index.js +267 -0
  50. package/dist/parsers/doc-binary/vscode-parser.d.ts +142 -0
  51. package/dist/parsers/doc-binary/vscode-parser.js +3747 -0
  52. package/dist/parsers/excel/index.d.ts +17 -0
  53. package/dist/parsers/excel/index.js +406 -0
  54. package/dist/parsers/excel/model.d.ts +80 -0
  55. package/dist/parsers/excel/model.js +48 -0
  56. package/dist/parsers/excel/serialize.d.ts +3 -0
  57. package/dist/parsers/excel/serialize.js +78 -0
  58. package/dist/parsers/hdf5/index.d.ts +75 -0
  59. package/dist/parsers/hdf5/index.js +658 -0
  60. package/dist/parsers/hdf5/node.d.ts +21 -0
  61. package/dist/parsers/hdf5/node.js +95 -0
  62. package/dist/parsers/json/index.d.ts +15 -0
  63. package/dist/parsers/json/index.js +102 -0
  64. package/dist/parsers/json/model.d.ts +42 -0
  65. package/dist/parsers/json/model.js +140 -0
  66. package/dist/parsers/json/parse.d.ts +22 -0
  67. package/dist/parsers/json/parse.js +279 -0
  68. package/dist/parsers/json/tokenizer.d.ts +17 -0
  69. package/dist/parsers/json/tokenizer.js +175 -0
  70. package/dist/parsers/jsonl/index.d.ts +14 -0
  71. package/dist/parsers/jsonl/index.js +18 -0
  72. package/dist/parsers/jsonl/model.d.ts +23 -0
  73. package/dist/parsers/jsonl/model.js +1 -0
  74. package/dist/parsers/jsonl/parse.d.ts +7 -0
  75. package/dist/parsers/jsonl/parse.js +34 -0
  76. package/dist/parsers/markdown/index.d.ts +37 -0
  77. package/dist/parsers/markdown/index.js +59 -0
  78. package/dist/parsers/mat/index.d.ts +31 -0
  79. package/dist/parsers/mat/index.js +426 -0
  80. package/dist/parsers/mermaid/index.d.ts +5 -0
  81. package/dist/parsers/mermaid/index.js +3 -0
  82. package/dist/parsers/mf4/index.d.ts +1 -0
  83. package/dist/parsers/mf4/index.js +1 -0
  84. package/dist/parsers/parquet/index.d.ts +21 -0
  85. package/dist/parsers/parquet/index.js +68 -0
  86. package/dist/parsers/pcap/index.d.ts +1 -0
  87. package/dist/parsers/pcap/index.js +1 -0
  88. package/dist/parsers/pcapng/index.d.ts +1 -0
  89. package/dist/parsers/pcapng/index.js +1 -0
  90. package/dist/parsers/plantuml/index.d.ts +5 -0
  91. package/dist/parsers/plantuml/index.js +4 -0
  92. package/dist/parsers/ppt-binary/index.d.ts +5 -0
  93. package/dist/parsers/ppt-binary/index.js +62 -0
  94. package/dist/parsers/ppt-binary/pptBinaryBuildContext.d.ts +12 -0
  95. package/dist/parsers/ppt-binary/pptBinaryBuildContext.js +40 -0
  96. package/dist/parsers/ppt-binary/pptBinaryContainer.d.ts +4 -0
  97. package/dist/parsers/ppt-binary/pptBinaryContainer.js +174 -0
  98. package/dist/parsers/ppt-binary/pptBinaryTypes.d.ts +125 -0
  99. package/dist/parsers/ppt-binary/pptBinaryTypes.js +1 -0
  100. package/dist/parsers/ppt-binary/pptSlideLayouts.d.ts +9 -0
  101. package/dist/parsers/ppt-binary/pptSlideLayouts.js +510 -0
  102. package/dist/parsers/ppt-binary/vscode-parser.d.ts +116 -0
  103. package/dist/parsers/ppt-binary/vscode-parser.js +2853 -0
  104. package/dist/parsers/ppt-binary/vscode.d.ts +4 -0
  105. package/dist/parsers/ppt-binary/vscode.js +12 -0
  106. package/dist/parsers/pptx/index.d.ts +15 -0
  107. package/dist/parsers/pptx/index.js +88 -0
  108. package/dist/parsers/pptx/vscode-parser.d.ts +167 -0
  109. package/dist/parsers/pptx/vscode-parser.js +1503 -0
  110. package/dist/parsers/pptx/vscode.d.ts +4 -0
  111. package/dist/parsers/pptx/vscode.js +18 -0
  112. package/dist/parsers/pptx/zip-reader.d.ts +3 -0
  113. package/dist/parsers/pptx/zip-reader.js +20 -0
  114. package/dist/parsers/proto/index.d.ts +90 -0
  115. package/dist/parsers/proto/index.js +197 -0
  116. package/dist/parsers/psd/index.d.ts +16 -0
  117. package/dist/parsers/psd/index.js +10 -0
  118. package/dist/parsers/shapefile/dbf.d.ts +23 -0
  119. package/dist/parsers/shapefile/dbf.js +112 -0
  120. package/dist/parsers/shapefile/index.d.ts +44 -0
  121. package/dist/parsers/shapefile/index.js +119 -0
  122. package/dist/parsers/shapefile/reproject.d.ts +10 -0
  123. package/dist/parsers/shapefile/reproject.js +41 -0
  124. package/dist/parsers/slide-model.d.ts +106 -0
  125. package/dist/parsers/slide-model.js +1 -0
  126. package/dist/parsers/toml/index.d.ts +15 -0
  127. package/dist/parsers/toml/index.js +18 -0
  128. package/dist/parsers/toml/model.d.ts +15 -0
  129. package/dist/parsers/toml/model.js +1 -0
  130. package/dist/parsers/toml/parse.d.ts +16 -0
  131. package/dist/parsers/toml/parse.js +266 -0
  132. package/dist/parsers/types.d.ts +103 -0
  133. package/dist/parsers/types.js +106 -0
  134. package/dist/parsers/video/index.d.ts +6 -0
  135. package/dist/parsers/video/index.js +2 -0
  136. package/dist/parsers/yaml/index.d.ts +16 -0
  137. package/dist/parsers/yaml/index.js +58 -0
  138. package/dist/parsers/yaml/model.d.ts +22 -0
  139. package/dist/parsers/yaml/model.js +1 -0
  140. package/dist/parsers/yaml/self-loading.d.ts +3 -0
  141. package/dist/parsers/yaml/self-loading.js +19 -0
  142. package/dist/parsers/zip-scan.d.ts +8 -0
  143. package/dist/parsers/zip-scan.js +80 -0
  144. package/dist/registry/container.d.ts +17 -0
  145. package/dist/registry/container.js +49 -0
  146. package/dist/registry/index.d.ts +133 -0
  147. package/dist/registry/index.js +348 -0
  148. package/dist/registry/probe.d.ts +3 -0
  149. package/dist/registry/probe.js +177 -0
  150. package/dist/registry/sniff.d.ts +17 -0
  151. package/dist/registry/sniff.js +57 -0
  152. package/dist/styles/archive.css +10 -0
  153. package/dist/styles/audio.css +66 -0
  154. package/dist/styles/automotive.css +1 -0
  155. package/dist/styles/csv.css +262 -0
  156. package/dist/styles/excel.css +212 -0
  157. package/dist/styles/fallback.css +48 -0
  158. package/dist/styles/hdf5.css +3 -0
  159. package/dist/styles/hwp.css +12 -0
  160. package/dist/styles/image.css +115 -0
  161. package/dist/styles/json.css +342 -0
  162. package/dist/styles/jsonl.css +1 -0
  163. package/dist/styles/markdown.css +10 -0
  164. package/dist/styles/mat.css +2 -0
  165. package/dist/styles/mermaid.css +1 -0
  166. package/dist/styles/parquet.css +2 -0
  167. package/dist/styles/pdf.css +551 -0
  168. package/dist/styles/plantuml.css +1 -0
  169. package/dist/styles/ppt.css +1 -0
  170. package/dist/styles/proto.css +2 -0
  171. package/dist/styles/psd.css +1 -0
  172. package/dist/styles/shapefile.css +25 -0
  173. package/dist/styles/toml.css +1 -0
  174. package/dist/styles/video.css +74 -0
  175. package/dist/styles/word.css +685 -0
  176. package/dist/styles/yaml.css +1 -0
  177. package/dist/viewers/a2l/index.d.ts +15 -0
  178. package/dist/viewers/a2l/index.js +5 -0
  179. package/dist/viewers/archive/archive-preview-decoder.d.ts +4 -0
  180. package/dist/viewers/archive/archive-preview-decoder.js +223 -0
  181. package/dist/viewers/archive/controller.d.ts +24 -0
  182. package/dist/viewers/archive/controller.js +18 -0
  183. package/dist/viewers/archive/index.d.ts +25 -0
  184. package/dist/viewers/archive/index.js +230 -0
  185. package/dist/viewers/archive/preview.d.ts +2 -0
  186. package/dist/viewers/archive/preview.js +2 -0
  187. package/dist/viewers/archive/styles.d.ts +1 -0
  188. package/dist/viewers/archive/styles.js +11 -0
  189. package/dist/viewers/arxml/index.d.ts +15 -0
  190. package/dist/viewers/arxml/index.js +5 -0
  191. package/dist/viewers/asc/index.d.ts +15 -0
  192. package/dist/viewers/asc/index.js +5 -0
  193. package/dist/viewers/audio/controller.d.ts +33 -0
  194. package/dist/viewers/audio/controller.js +49 -0
  195. package/dist/viewers/audio/engine.d.ts +44 -0
  196. package/dist/viewers/audio/engine.js +108 -0
  197. package/dist/viewers/audio/index.d.ts +92 -0
  198. package/dist/viewers/audio/index.js +448 -0
  199. package/dist/viewers/audio/self-loading.d.ts +7 -0
  200. package/dist/viewers/audio/self-loading.js +42 -0
  201. package/dist/viewers/audio/styles.d.ts +1 -0
  202. package/dist/viewers/audio/styles.js +73 -0
  203. package/dist/viewers/automotive/index.d.ts +8 -0
  204. package/dist/viewers/automotive/index.js +152 -0
  205. package/dist/viewers/automotive/styles.d.ts +1 -0
  206. package/dist/viewers/automotive/styles.js +1 -0
  207. package/dist/viewers/avro/index.d.ts +15 -0
  208. package/dist/viewers/avro/index.js +5 -0
  209. package/dist/viewers/bag/index.d.ts +15 -0
  210. package/dist/viewers/bag/index.js +5 -0
  211. package/dist/viewers/blf/index.d.ts +15 -0
  212. package/dist/viewers/blf/index.js +5 -0
  213. package/dist/viewers/csv/controller.d.ts +126 -0
  214. package/dist/viewers/csv/controller.js +598 -0
  215. package/dist/viewers/csv/index.d.ts +48 -0
  216. package/dist/viewers/csv/index.js +846 -0
  217. package/dist/viewers/csv/styles.d.ts +1 -0
  218. package/dist/viewers/csv/styles.js +267 -0
  219. package/dist/viewers/db3/index.d.ts +15 -0
  220. package/dist/viewers/db3/index.js +5 -0
  221. package/dist/viewers/dbc/index.d.ts +15 -0
  222. package/dist/viewers/dbc/index.js +5 -0
  223. package/dist/viewers/diagram.d.ts +14 -0
  224. package/dist/viewers/diagram.js +95 -0
  225. package/dist/viewers/excel/controller.d.ts +108 -0
  226. package/dist/viewers/excel/controller.js +548 -0
  227. package/dist/viewers/excel/grid.d.ts +28 -0
  228. package/dist/viewers/excel/grid.js +99 -0
  229. package/dist/viewers/excel/index.d.ts +37 -0
  230. package/dist/viewers/excel/index.js +620 -0
  231. package/dist/viewers/excel/self-loading.d.ts +6 -0
  232. package/dist/viewers/excel/self-loading.js +13 -0
  233. package/dist/viewers/excel/styles.d.ts +1 -0
  234. package/dist/viewers/excel/styles.js +216 -0
  235. package/dist/viewers/fallback/index.d.ts +17 -0
  236. package/dist/viewers/fallback/index.js +130 -0
  237. package/dist/viewers/fallback/styles.d.ts +1 -0
  238. package/dist/viewers/fallback/styles.js +49 -0
  239. package/dist/viewers/hdf5/index.d.ts +19 -0
  240. package/dist/viewers/hdf5/index.js +170 -0
  241. package/dist/viewers/hdf5/styles.d.ts +1 -0
  242. package/dist/viewers/hdf5/styles.js +4 -0
  243. package/dist/viewers/hwp/controller.d.ts +19 -0
  244. package/dist/viewers/hwp/controller.js +22 -0
  245. package/dist/viewers/hwp/index.d.ts +39 -0
  246. package/dist/viewers/hwp/index.js +271 -0
  247. package/dist/viewers/hwp/self-loading.d.ts +2 -0
  248. package/dist/viewers/hwp/self-loading.js +6 -0
  249. package/dist/viewers/hwp/styles.d.ts +1 -0
  250. package/dist/viewers/hwp/styles.js +13 -0
  251. package/dist/viewers/image/controller.d.ts +210 -0
  252. package/dist/viewers/image/controller.js +336 -0
  253. package/dist/viewers/image/decode.d.ts +54 -0
  254. package/dist/viewers/image/decode.js +150 -0
  255. package/dist/viewers/image/index.d.ts +38 -0
  256. package/dist/viewers/image/index.js +749 -0
  257. package/dist/viewers/image/limits.d.ts +18 -0
  258. package/dist/viewers/image/limits.js +20 -0
  259. package/dist/viewers/image/styles.d.ts +1 -0
  260. package/dist/viewers/image/styles.js +119 -0
  261. package/dist/viewers/json/controller.d.ts +89 -0
  262. package/dist/viewers/json/controller.js +411 -0
  263. package/dist/viewers/json/index.d.ts +25 -0
  264. package/dist/viewers/json/index.js +503 -0
  265. package/dist/viewers/json/styles.d.ts +1 -0
  266. package/dist/viewers/json/styles.js +346 -0
  267. package/dist/viewers/json/transforms.d.ts +27 -0
  268. package/dist/viewers/json/transforms.js +253 -0
  269. package/dist/viewers/jsonl/controller.d.ts +48 -0
  270. package/dist/viewers/jsonl/controller.js +136 -0
  271. package/dist/viewers/jsonl/index.d.ts +22 -0
  272. package/dist/viewers/jsonl/index.js +184 -0
  273. package/dist/viewers/jsonl/styles.d.ts +1 -0
  274. package/dist/viewers/jsonl/styles.js +1 -0
  275. package/dist/viewers/markdown/controller.d.ts +50 -0
  276. package/dist/viewers/markdown/controller.js +62 -0
  277. package/dist/viewers/markdown/index.d.ts +64 -0
  278. package/dist/viewers/markdown/index.js +425 -0
  279. package/dist/viewers/markdown/math.d.ts +21 -0
  280. package/dist/viewers/markdown/math.js +100 -0
  281. package/dist/viewers/markdown/self-loading.d.ts +5 -0
  282. package/dist/viewers/markdown/self-loading.js +48 -0
  283. package/dist/viewers/markdown/styles.d.ts +1 -0
  284. package/dist/viewers/markdown/styles.js +11 -0
  285. package/dist/viewers/mat/index.d.ts +19 -0
  286. package/dist/viewers/mat/index.js +113 -0
  287. package/dist/viewers/mat/styles.d.ts +1 -0
  288. package/dist/viewers/mat/styles.js +3 -0
  289. package/dist/viewers/media.d.ts +9 -0
  290. package/dist/viewers/media.js +77 -0
  291. package/dist/viewers/mermaid/index.d.ts +17 -0
  292. package/dist/viewers/mermaid/index.js +6 -0
  293. package/dist/viewers/mermaid/self-loading.d.ts +2 -0
  294. package/dist/viewers/mermaid/self-loading.js +2 -0
  295. package/dist/viewers/mf4/index.d.ts +15 -0
  296. package/dist/viewers/mf4/index.js +5 -0
  297. package/dist/viewers/parquet/controller.d.ts +37 -0
  298. package/dist/viewers/parquet/controller.js +26 -0
  299. package/dist/viewers/parquet/index.d.ts +23 -0
  300. package/dist/viewers/parquet/index.js +134 -0
  301. package/dist/viewers/parquet/styles.d.ts +1 -0
  302. package/dist/viewers/parquet/styles.js +3 -0
  303. package/dist/viewers/pcap/index.d.ts +15 -0
  304. package/dist/viewers/pcap/index.js +5 -0
  305. package/dist/viewers/pcapng/index.d.ts +15 -0
  306. package/dist/viewers/pcapng/index.js +5 -0
  307. package/dist/viewers/pdf/controller.d.ts +120 -0
  308. package/dist/viewers/pdf/controller.js +191 -0
  309. package/dist/viewers/pdf/editing.d.ts +26 -0
  310. package/dist/viewers/pdf/editing.js +265 -0
  311. package/dist/viewers/pdf/index.d.ts +88 -0
  312. package/dist/viewers/pdf/index.js +1400 -0
  313. package/dist/viewers/pdf/self-loading.d.ts +6 -0
  314. package/dist/viewers/pdf/self-loading.js +14 -0
  315. package/dist/viewers/pdf/styles.d.ts +1 -0
  316. package/dist/viewers/pdf/styles.js +555 -0
  317. package/dist/viewers/plantuml/index.d.ts +17 -0
  318. package/dist/viewers/plantuml/index.js +6 -0
  319. package/dist/viewers/plantuml/self-loading.d.ts +2 -0
  320. package/dist/viewers/plantuml/self-loading.js +2 -0
  321. package/dist/viewers/ppt/chart.d.ts +8 -0
  322. package/dist/viewers/ppt/chart.js +83 -0
  323. package/dist/viewers/ppt/controller.d.ts +34 -0
  324. package/dist/viewers/ppt/controller.js +27 -0
  325. package/dist/viewers/ppt/index.d.ts +33 -0
  326. package/dist/viewers/ppt/index.js +101 -0
  327. package/dist/viewers/ppt/render.d.ts +5 -0
  328. package/dist/viewers/ppt/render.js +144 -0
  329. package/dist/viewers/ppt/self-loading.d.ts +9 -0
  330. package/dist/viewers/ppt/self-loading.js +4 -0
  331. package/dist/viewers/ppt/styles.d.ts +1 -0
  332. package/dist/viewers/ppt/styles.js +1 -0
  333. package/dist/viewers/proto/index.d.ts +17 -0
  334. package/dist/viewers/proto/index.js +170 -0
  335. package/dist/viewers/proto/styles.d.ts +1 -0
  336. package/dist/viewers/proto/styles.js +2 -0
  337. package/dist/viewers/psd/index.d.ts +27 -0
  338. package/dist/viewers/psd/index.js +39 -0
  339. package/dist/viewers/psd/self-loading.d.ts +10 -0
  340. package/dist/viewers/psd/self-loading.js +20 -0
  341. package/dist/viewers/psd/styles.d.ts +1 -0
  342. package/dist/viewers/psd/styles.js +1 -0
  343. package/dist/viewers/reqif/index.d.ts +15 -0
  344. package/dist/viewers/reqif/index.js +5 -0
  345. package/dist/viewers/shapefile/index.d.ts +35 -0
  346. package/dist/viewers/shapefile/index.js +336 -0
  347. package/dist/viewers/shapefile/self-loading.d.ts +7 -0
  348. package/dist/viewers/shapefile/self-loading.js +32 -0
  349. package/dist/viewers/shapefile/styles.d.ts +1 -0
  350. package/dist/viewers/shapefile/styles.js +28 -0
  351. package/dist/viewers/stp/index.d.ts +15 -0
  352. package/dist/viewers/stp/index.js +5 -0
  353. package/dist/viewers/structured-styles.d.ts +1 -0
  354. package/dist/viewers/structured-styles.js +1 -0
  355. package/dist/viewers/structured.d.ts +36 -0
  356. package/dist/viewers/structured.js +138 -0
  357. package/dist/viewers/toml/controller.d.ts +38 -0
  358. package/dist/viewers/toml/controller.js +61 -0
  359. package/dist/viewers/toml/index.d.ts +18 -0
  360. package/dist/viewers/toml/index.js +34 -0
  361. package/dist/viewers/types.d.ts +36 -0
  362. package/dist/viewers/types.js +9 -0
  363. package/dist/viewers/video/controller.d.ts +29 -0
  364. package/dist/viewers/video/controller.js +54 -0
  365. package/dist/viewers/video/index.d.ts +18 -0
  366. package/dist/viewers/video/index.js +305 -0
  367. package/dist/viewers/video/styles.d.ts +1 -0
  368. package/dist/viewers/video/styles.js +79 -0
  369. package/dist/viewers/word/controller.d.ts +19 -0
  370. package/dist/viewers/word/controller.js +22 -0
  371. package/dist/viewers/word/docx-preprocess.d.ts +63 -0
  372. package/dist/viewers/word/docx-preprocess.js +136 -0
  373. package/dist/viewers/word/index.d.ts +32 -0
  374. package/dist/viewers/word/index.js +187 -0
  375. package/dist/viewers/word/normalize-docx.d.ts +2 -0
  376. package/dist/viewers/word/normalize-docx.js +50 -0
  377. package/dist/viewers/word/paginate.d.ts +1 -0
  378. package/dist/viewers/word/paginate.js +1035 -0
  379. package/dist/viewers/word/self-loading.d.ts +2 -0
  380. package/dist/viewers/word/self-loading.js +7 -0
  381. package/dist/viewers/word/styles.d.ts +1 -0
  382. package/dist/viewers/word/styles.js +686 -0
  383. package/dist/viewers/yaml/controller.d.ts +42 -0
  384. package/dist/viewers/yaml/controller.js +41 -0
  385. package/dist/viewers/yaml/index.d.ts +21 -0
  386. package/dist/viewers/yaml/index.js +20 -0
  387. package/package.json +375 -0
@@ -0,0 +1 @@
1
+ export declare const csvViewerCss = "\n/* Reverse-contamination guard (DESIGN.md \u00A76): in 'scoped' mode the viewer\n renders inside host DOM, so host global styles (element selectors for\n button/table/input etc.) must be explicitly neutralized. Harmless in\n shadow mode. Custom properties are exempt from 'all', so the --omni-*\n theme tokens still pierce. Component rules below override the guard\n (later in the sheet + higher specificity). */\n.omni-viewer--csv {\n all: initial;\n}\n.omni-viewer--csv :where(button, select, option, input, label, a,\n table, thead, tbody, tr, th, td, pre, code) {\n all: revert;\n}\n\n:host, .omni-viewer--csv {\n display: block;\n height: 100%;\n box-sizing: border-box;\n color: var(--omni-fg, #d4d4d4);\n background: var(--omni-bg, #1e1e1e);\n font-family: var(--omni-font, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n font-size: var(--omni-font-size, 13px);\n}\n.omni-csv {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.omni-csv__toolbar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px;\n border-bottom: 1px solid var(--omni-border, #3c3c3c);\n}\n.omni-csv__toolbar label {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.omni-csv__toolbar select,\n.omni-csv__toolbar button {\n font: inherit;\n color: var(--omni-fg, #d4d4d4);\n background: var(--omni-button-bg, #3a3d41);\n border: 1px solid var(--omni-border, #3c3c3c);\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n}\n.omni-csv__toolbar button:hover:not(:disabled) {\n background: var(--omni-button-hover-bg, #45494e);\n}\n.omni-csv__toolbar button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.omni-csv__toolbar button[aria-pressed=\"true\"] {\n background: var(--omni-accent, #0e639c);\n border-color: var(--omni-accent, #0e639c);\n color: var(--omni-accent-fg, #ffffff);\n}\n.omni-csv__toolbar input[type=\"search\"] {\n font: inherit;\n color: var(--omni-fg, #d4d4d4);\n background: var(--omni-input-bg, #3c3c3c);\n border: 1px solid var(--omni-border, #3c3c3c);\n border-radius: 4px;\n padding: 4px 8px;\n min-width: 140px;\n}\n.omni-csv__spacer { flex: 1; }\n.omni-csv__dirty {\n color: var(--omni-warning-fg, #cca700);\n white-space: nowrap;\n}\n.omni-csv__cell-input {\n font: inherit;\n color: var(--omni-fg, #d4d4d4);\n background: var(--omni-input-bg, #3c3c3c);\n border: 1px solid var(--omni-accent, #0e639c);\n border-radius: 2px;\n padding: 2px 4px;\n width: 100%;\n box-sizing: border-box;\n}\n.omni-csv__menu {\n position: absolute;\n z-index: 10;\n display: flex;\n flex-direction: column;\n min-width: 160px;\n background: var(--omni-bg-secondary, #252526);\n border: 1px solid var(--omni-border, #3c3c3c);\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n padding: 4px;\n}\n.omni-csv__menu button {\n font: inherit;\n text-align: left;\n color: var(--omni-fg, #d4d4d4);\n background: transparent;\n border: none;\n border-radius: 4px;\n padding: 6px 10px;\n cursor: pointer;\n}\n.omni-csv__menu button:hover {\n background: var(--omni-button-hover-bg, #45494e);\n}\n.omni-csv__table .omni-csv__rownum {\n color: var(--omni-fg-muted, #9d9d9d);\n text-align: right;\n user-select: none;\n}\n.omni-csv__table thead th.omni-csv__rownum {\n cursor: default;\n}\n.omni-csv__table thead th.omni-csv__rownum:hover {\n background: var(--omni-bg-secondary, #252526);\n}\n.omni-csv__meta {\n color: var(--omni-fg-muted, #9d9d9d);\n white-space: nowrap;\n}\n.omni-csv__diagnostics {\n padding: 4px 8px;\n color: var(--omni-warning-fg, #cca700);\n border-bottom: 1px solid var(--omni-border, #3c3c3c);\n}\n.omni-csv__diag-error {\n color: var(--omni-error-fg, #f48771);\n font-weight: 600;\n}\n.omni-csv__body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n.omni-csv__table {\n border-collapse: collapse;\n width: max-content;\n min-width: 100%;\n}\n.omni-csv__table th,\n.omni-csv__table td {\n border: 1px solid var(--omni-border, #3c3c3c);\n padding: 4px 8px;\n text-align: left;\n white-space: nowrap;\n max-width: 480px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* Empty cells do not create a line box by themselves, making a newly\n inserted blank row shorter than populated rows. Keep an invisible-width\n non-breaking space so every table row uses the normal cell height. */\n.omni-csv__table td:empty::before {\n content: \"\\00a0\";\n}\n.omni-csv__table thead th {\n position: sticky;\n top: 0;\n background: var(--omni-bg-secondary, #252526);\n cursor: pointer;\n user-select: none;\n}\n.omni-csv__table thead th:hover {\n background: var(--omni-button-hover-bg, #45494e);\n}\n.omni-csv__table tbody tr:nth-child(even) td {\n background: var(--omni-bg-secondary, #252526);\n}\n.omni-csv__sort-indicator {\n margin-left: 4px;\n color: var(--omni-accent, #0e639c);\n}\n.omni-csv__resize-handle {\n position: absolute;\n top: 0;\n right: 0;\n width: 7px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n}\n.omni-csv__resize-handle:hover {\n background: var(--omni-accent, #0e639c);\n opacity: 0.6;\n}\n.omni-csv__raw {\n margin: 0;\n padding: 8px;\n font-family: var(--omni-font-mono, \"SF Mono\", Monaco, Menlo, Consolas, monospace);\n white-space: pre;\n}\n.omni-csv__raw-edit {\n display: block;\n width: 100%;\n min-height: 100%;\n box-sizing: border-box;\n border: 0;\n resize: none;\n font-size: inherit;\n line-height: inherit;\n color: var(--omni-fg, #d4d4d4);\n background: transparent;\n}\n.omni-csv__raw-edit:focus {\n outline: none;\n}\n.omni-csv__table thead .omni-csv__stats-row th {\n top: var(--omni-csv-head-h, 24px);\n cursor: default;\n color: var(--omni-fg-muted, #9d9d9d);\n font-weight: 400;\n font-size: 0.92em;\n white-space: nowrap;\n}\n.omni-csv__table thead .omni-csv__stats-row th:hover {\n background: var(--omni-bg-secondary, #252526);\n}\n.omni-csv__footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-top: 1px solid var(--omni-border, #3c3c3c);\n}\n.omni-csv__footer button {\n font: inherit;\n color: var(--omni-fg, #d4d4d4);\n background: var(--omni-button-bg, #3a3d41);\n border: 1px solid var(--omni-border, #3c3c3c);\n border-radius: 4px;\n padding: 2px 10px;\n cursor: pointer;\n}\n.omni-csv__footer button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.omni-csv__empty {\n padding: 24px;\n text-align: center;\n color: var(--omni-fg-muted, #9d9d9d);\n}\n.omni-csv__toast {\n position: absolute;\n right: 12px;\n bottom: 44px;\n background: var(--omni-accent, #0e639c);\n color: var(--omni-accent-fg, #ffffff);\n border-radius: 4px;\n padding: 4px 10px;\n opacity: 0.95;\n}\n";
@@ -0,0 +1,267 @@
1
+ // CSV viewer stylesheet. Single source for both delivery forms (DESIGN.md §6):
2
+ // the build emits dist/styles/csv.css from this constant, and the renderer
3
+ // injects it into the shadow root. Only --omni-* tokens (with fallbacks) —
4
+ // never --vscode-* or platform variables.
5
+ export const csvViewerCss = `
6
+ /* Reverse-contamination guard (DESIGN.md §6): in 'scoped' mode the viewer
7
+ renders inside host DOM, so host global styles (element selectors for
8
+ button/table/input etc.) must be explicitly neutralized. Harmless in
9
+ shadow mode. Custom properties are exempt from 'all', so the --omni-*
10
+ theme tokens still pierce. Component rules below override the guard
11
+ (later in the sheet + higher specificity). */
12
+ .omni-viewer--csv {
13
+ all: initial;
14
+ }
15
+ .omni-viewer--csv :where(button, select, option, input, label, a,
16
+ table, thead, tbody, tr, th, td, pre, code) {
17
+ all: revert;
18
+ }
19
+
20
+ :host, .omni-viewer--csv {
21
+ display: block;
22
+ height: 100%;
23
+ box-sizing: border-box;
24
+ color: var(--omni-fg, #d4d4d4);
25
+ background: var(--omni-bg, #1e1e1e);
26
+ font-family: var(--omni-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
27
+ font-size: var(--omni-font-size, 13px);
28
+ }
29
+ .omni-csv {
30
+ display: flex;
31
+ flex-direction: column;
32
+ height: 100%;
33
+ min-height: 0;
34
+ }
35
+ .omni-csv__toolbar {
36
+ display: flex;
37
+ align-items: center;
38
+ flex-wrap: wrap;
39
+ gap: 8px;
40
+ padding: 8px;
41
+ border-bottom: 1px solid var(--omni-border, #3c3c3c);
42
+ }
43
+ .omni-csv__toolbar label {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ gap: 4px;
47
+ }
48
+ .omni-csv__toolbar select,
49
+ .omni-csv__toolbar button {
50
+ font: inherit;
51
+ color: var(--omni-fg, #d4d4d4);
52
+ background: var(--omni-button-bg, #3a3d41);
53
+ border: 1px solid var(--omni-border, #3c3c3c);
54
+ border-radius: 4px;
55
+ padding: 4px 8px;
56
+ cursor: pointer;
57
+ }
58
+ .omni-csv__toolbar button:hover:not(:disabled) {
59
+ background: var(--omni-button-hover-bg, #45494e);
60
+ }
61
+ .omni-csv__toolbar button:disabled {
62
+ opacity: 0.5;
63
+ cursor: not-allowed;
64
+ }
65
+ .omni-csv__toolbar button[aria-pressed="true"] {
66
+ background: var(--omni-accent, #0e639c);
67
+ border-color: var(--omni-accent, #0e639c);
68
+ color: var(--omni-accent-fg, #ffffff);
69
+ }
70
+ .omni-csv__toolbar input[type="search"] {
71
+ font: inherit;
72
+ color: var(--omni-fg, #d4d4d4);
73
+ background: var(--omni-input-bg, #3c3c3c);
74
+ border: 1px solid var(--omni-border, #3c3c3c);
75
+ border-radius: 4px;
76
+ padding: 4px 8px;
77
+ min-width: 140px;
78
+ }
79
+ .omni-csv__spacer { flex: 1; }
80
+ .omni-csv__dirty {
81
+ color: var(--omni-warning-fg, #cca700);
82
+ white-space: nowrap;
83
+ }
84
+ .omni-csv__cell-input {
85
+ font: inherit;
86
+ color: var(--omni-fg, #d4d4d4);
87
+ background: var(--omni-input-bg, #3c3c3c);
88
+ border: 1px solid var(--omni-accent, #0e639c);
89
+ border-radius: 2px;
90
+ padding: 2px 4px;
91
+ width: 100%;
92
+ box-sizing: border-box;
93
+ }
94
+ .omni-csv__menu {
95
+ position: absolute;
96
+ z-index: 10;
97
+ display: flex;
98
+ flex-direction: column;
99
+ min-width: 160px;
100
+ background: var(--omni-bg-secondary, #252526);
101
+ border: 1px solid var(--omni-border, #3c3c3c);
102
+ border-radius: 6px;
103
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
104
+ padding: 4px;
105
+ }
106
+ .omni-csv__menu button {
107
+ font: inherit;
108
+ text-align: left;
109
+ color: var(--omni-fg, #d4d4d4);
110
+ background: transparent;
111
+ border: none;
112
+ border-radius: 4px;
113
+ padding: 6px 10px;
114
+ cursor: pointer;
115
+ }
116
+ .omni-csv__menu button:hover {
117
+ background: var(--omni-button-hover-bg, #45494e);
118
+ }
119
+ .omni-csv__table .omni-csv__rownum {
120
+ color: var(--omni-fg-muted, #9d9d9d);
121
+ text-align: right;
122
+ user-select: none;
123
+ }
124
+ .omni-csv__table thead th.omni-csv__rownum {
125
+ cursor: default;
126
+ }
127
+ .omni-csv__table thead th.omni-csv__rownum:hover {
128
+ background: var(--omni-bg-secondary, #252526);
129
+ }
130
+ .omni-csv__meta {
131
+ color: var(--omni-fg-muted, #9d9d9d);
132
+ white-space: nowrap;
133
+ }
134
+ .omni-csv__diagnostics {
135
+ padding: 4px 8px;
136
+ color: var(--omni-warning-fg, #cca700);
137
+ border-bottom: 1px solid var(--omni-border, #3c3c3c);
138
+ }
139
+ .omni-csv__diag-error {
140
+ color: var(--omni-error-fg, #f48771);
141
+ font-weight: 600;
142
+ }
143
+ .omni-csv__body {
144
+ flex: 1;
145
+ min-height: 0;
146
+ overflow: auto;
147
+ }
148
+ .omni-csv__table {
149
+ border-collapse: collapse;
150
+ width: max-content;
151
+ min-width: 100%;
152
+ }
153
+ .omni-csv__table th,
154
+ .omni-csv__table td {
155
+ border: 1px solid var(--omni-border, #3c3c3c);
156
+ padding: 4px 8px;
157
+ text-align: left;
158
+ white-space: nowrap;
159
+ max-width: 480px;
160
+ overflow: hidden;
161
+ text-overflow: ellipsis;
162
+ }
163
+ /* Empty cells do not create a line box by themselves, making a newly
164
+ inserted blank row shorter than populated rows. Keep an invisible-width
165
+ non-breaking space so every table row uses the normal cell height. */
166
+ .omni-csv__table td:empty::before {
167
+ content: "\\00a0";
168
+ }
169
+ .omni-csv__table thead th {
170
+ position: sticky;
171
+ top: 0;
172
+ background: var(--omni-bg-secondary, #252526);
173
+ cursor: pointer;
174
+ user-select: none;
175
+ }
176
+ .omni-csv__table thead th:hover {
177
+ background: var(--omni-button-hover-bg, #45494e);
178
+ }
179
+ .omni-csv__table tbody tr:nth-child(even) td {
180
+ background: var(--omni-bg-secondary, #252526);
181
+ }
182
+ .omni-csv__sort-indicator {
183
+ margin-left: 4px;
184
+ color: var(--omni-accent, #0e639c);
185
+ }
186
+ .omni-csv__resize-handle {
187
+ position: absolute;
188
+ top: 0;
189
+ right: 0;
190
+ width: 7px;
191
+ height: 100%;
192
+ cursor: col-resize;
193
+ user-select: none;
194
+ touch-action: none;
195
+ }
196
+ .omni-csv__resize-handle:hover {
197
+ background: var(--omni-accent, #0e639c);
198
+ opacity: 0.6;
199
+ }
200
+ .omni-csv__raw {
201
+ margin: 0;
202
+ padding: 8px;
203
+ font-family: var(--omni-font-mono, "SF Mono", Monaco, Menlo, Consolas, monospace);
204
+ white-space: pre;
205
+ }
206
+ .omni-csv__raw-edit {
207
+ display: block;
208
+ width: 100%;
209
+ min-height: 100%;
210
+ box-sizing: border-box;
211
+ border: 0;
212
+ resize: none;
213
+ font-size: inherit;
214
+ line-height: inherit;
215
+ color: var(--omni-fg, #d4d4d4);
216
+ background: transparent;
217
+ }
218
+ .omni-csv__raw-edit:focus {
219
+ outline: none;
220
+ }
221
+ .omni-csv__table thead .omni-csv__stats-row th {
222
+ top: var(--omni-csv-head-h, 24px);
223
+ cursor: default;
224
+ color: var(--omni-fg-muted, #9d9d9d);
225
+ font-weight: 400;
226
+ font-size: 0.92em;
227
+ white-space: nowrap;
228
+ }
229
+ .omni-csv__table thead .omni-csv__stats-row th:hover {
230
+ background: var(--omni-bg-secondary, #252526);
231
+ }
232
+ .omni-csv__footer {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 8px;
236
+ padding: 6px 8px;
237
+ border-top: 1px solid var(--omni-border, #3c3c3c);
238
+ }
239
+ .omni-csv__footer button {
240
+ font: inherit;
241
+ color: var(--omni-fg, #d4d4d4);
242
+ background: var(--omni-button-bg, #3a3d41);
243
+ border: 1px solid var(--omni-border, #3c3c3c);
244
+ border-radius: 4px;
245
+ padding: 2px 10px;
246
+ cursor: pointer;
247
+ }
248
+ .omni-csv__footer button:disabled {
249
+ opacity: 0.5;
250
+ cursor: not-allowed;
251
+ }
252
+ .omni-csv__empty {
253
+ padding: 24px;
254
+ text-align: center;
255
+ color: var(--omni-fg-muted, #9d9d9d);
256
+ }
257
+ .omni-csv__toast {
258
+ position: absolute;
259
+ right: 12px;
260
+ bottom: 44px;
261
+ background: var(--omni-accent, #0e639c);
262
+ color: var(--omni-accent-fg, #ffffff);
263
+ border-radius: 4px;
264
+ padding: 4px 10px;
265
+ opacity: 0.95;
266
+ }
267
+ `;
@@ -0,0 +1,15 @@
1
+ import type { AutomotiveViewerContext } from '../automotive/index.js';
2
+ import type { MountOptions, ViewerHandle, ViewerInput } from '../types.js';
3
+ export { parseDb3 } from '../../parsers/automotive/index.js';
4
+ export { automotiveViewerCss as db3ViewerCss } from '../automotive/styles.js';
5
+ export type Db3ViewerContext = AutomotiveViewerContext;
6
+ export declare const DB3_VIEWER_META: {
7
+ id: string;
8
+ displayNameKey: string;
9
+ extensions: string[];
10
+ priority: number;
11
+ requiredServices: readonly [];
12
+ optionalServices: readonly ["clipboard"];
13
+ inputOwnership: "borrows";
14
+ };
15
+ export declare const mountDb3Viewer: (input: ViewerInput, container: HTMLElement, ctx: Db3ViewerContext, options?: MountOptions) => Promise<ViewerHandle>;
@@ -0,0 +1,5 @@
1
+ import { mountAutomotiveViewer } from '../automotive/index.js';
2
+ export { parseDb3 } from '../../parsers/automotive/index.js';
3
+ export { automotiveViewerCss as db3ViewerCss } from '../automotive/styles.js';
4
+ export const DB3_VIEWER_META = { id: 'db3', displayNameKey: 'db3.title', extensions: ['db3'], priority: 20, requiredServices: [], optionalServices: ['clipboard'], inputOwnership: 'borrows' };
5
+ export const mountDb3Viewer = (input, container, ctx, options = {}) => mountAutomotiveViewer('db3', input, container, ctx, options);
@@ -0,0 +1,15 @@
1
+ import type { AutomotiveViewerContext } from '../automotive/index.js';
2
+ import type { MountOptions, ViewerHandle, ViewerInput } from '../types.js';
3
+ export { parseDbc } from '../../parsers/dbc/index.js';
4
+ export { automotiveViewerCss as dbcViewerCss } from '../automotive/styles.js';
5
+ export type DbcViewerContext = AutomotiveViewerContext;
6
+ export declare const DBC_VIEWER_META: {
7
+ id: string;
8
+ displayNameKey: string;
9
+ extensions: string[];
10
+ priority: number;
11
+ requiredServices: readonly [];
12
+ optionalServices: readonly ["clipboard"];
13
+ inputOwnership: "borrows";
14
+ };
15
+ export declare const mountDbcViewer: (input: ViewerInput, container: HTMLElement, ctx: DbcViewerContext, options?: MountOptions) => Promise<ViewerHandle>;
@@ -0,0 +1,5 @@
1
+ import { mountAutomotiveViewer } from '../automotive/index.js';
2
+ export { parseDbc } from '../../parsers/dbc/index.js';
3
+ export { automotiveViewerCss as dbcViewerCss } from '../automotive/styles.js';
4
+ export const DBC_VIEWER_META = { id: 'dbc', displayNameKey: 'dbc.title', extensions: ['dbc'], priority: 20, requiredServices: [], optionalServices: ['clipboard'], inputOwnership: 'borrows' };
5
+ export const mountDbcViewer = (input, container, ctx, options = {}) => mountAutomotiveViewer('dbc', input, container, ctx, options);
@@ -0,0 +1,14 @@
1
+ import type { HostContext } from '../host/index.js';
2
+ import { type MountOptions, type ViewerHandle, type ViewerInput } from './types.js';
3
+ export declare const diagramViewerCss = ".omni-diagram{box-sizing:border-box;min-height:100%;padding:18px;background:var(--omni-bg,#1e1e1e);color:var(--omni-fg,#ddd);font:14px/1.45 system-ui,sans-serif}.omni-diagram *{box-sizing:border-box}.omni-diagram__header{display:flex;justify-content:space-between;gap:16px;margin-bottom:12px}.omni-diagram__title{font-size:18px;font-weight:650;overflow-wrap:anywhere}.omni-diagram__stage{overflow:auto;min-height:300px;padding:18px;border:1px solid var(--omni-border,#444);border-radius:8px;background:#fff;color:#111}.omni-diagram__stage svg{display:block;max-width:100%;height:auto;margin:auto}.omni-diagram__warning{margin-top:12px;padding:10px;border:1px solid #b98b2f;border-radius:6px;background:#3b2d10;color:#ffd98a;white-space:pre-wrap}.omni-diagram__source-details{margin-top:12px}.omni-diagram__source-details summary{cursor:pointer}.omni-diagram__source{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}";
4
+ export interface DiagramMountOptions extends MountOptions {
5
+ renderMermaid?(id: string, source: string): Promise<string>;
6
+ renderPlantUml?(source: string, document: Document): SVGElement | string;
7
+ maxSvgBytes?: number;
8
+ maxSvgNodes?: number;
9
+ }
10
+ export declare function mountDiagramViewer(kind: 'mermaid' | 'plantuml', parsed: {
11
+ source: string;
12
+ warnings: string[];
13
+ }, input: ViewerInput, container: HTMLElement, _ctx: HostContext, options?: DiagramMountOptions): Promise<ViewerHandle>;
14
+ export declare function sanitizeSvg(svg: string, maxBytes?: number, maxNodes?: number): SVGElement;
@@ -0,0 +1,95 @@
1
+ import { MountAbortedError, VIEWER_ROOT_CLASS } from './types.js';
2
+ export const diagramViewerCss = `.omni-diagram{box-sizing:border-box;min-height:100%;padding:18px;background:var(--omni-bg,#1e1e1e);color:var(--omni-fg,#ddd);font:14px/1.45 system-ui,sans-serif}.omni-diagram *{box-sizing:border-box}.omni-diagram__header{display:flex;justify-content:space-between;gap:16px;margin-bottom:12px}.omni-diagram__title{font-size:18px;font-weight:650;overflow-wrap:anywhere}.omni-diagram__stage{overflow:auto;min-height:300px;padding:18px;border:1px solid var(--omni-border,#444);border-radius:8px;background:#fff;color:#111}.omni-diagram__stage svg{display:block;max-width:100%;height:auto;margin:auto}.omni-diagram__warning{margin-top:12px;padding:10px;border:1px solid #b98b2f;border-radius:6px;background:#3b2d10;color:#ffd98a;white-space:pre-wrap}.omni-diagram__source-details{margin-top:12px}.omni-diagram__source-details summary{cursor:pointer}.omni-diagram__source{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}`;
3
+ export async function mountDiagramViewer(kind, parsed, input, container, _ctx, options = {}) {
4
+ if (options.signal?.aborted)
5
+ throw new MountAbortedError();
6
+ const root = options.styleIsolation !== 'scoped' && container.attachShadow ? (container.shadowRoot ?? container.attachShadow({ mode: 'open' })) : container;
7
+ if (root === container)
8
+ container.classList.add(VIEWER_ROOT_CLASS, `omni-viewer--${kind}`);
9
+ else {
10
+ const s = document.createElement('style');
11
+ s.textContent = diagramViewerCss;
12
+ root.append(s);
13
+ }
14
+ const shell = document.createElement('section');
15
+ shell.className = `${VIEWER_ROOT_CLASS} omni-diagram omni-diagram--${kind}`;
16
+ const header = document.createElement('header');
17
+ header.className = 'omni-diagram__header';
18
+ const title = document.createElement('div');
19
+ title.className = 'omni-diagram__title';
20
+ title.textContent = input.fileName;
21
+ const meta = document.createElement('div');
22
+ meta.textContent = kind === 'mermaid' ? 'Mermaid' : 'PlantUML';
23
+ header.append(title, meta);
24
+ const stage = document.createElement('main');
25
+ stage.className = 'omni-diagram__stage';
26
+ stage.setAttribute('role', 'img');
27
+ const warning = document.createElement('div');
28
+ warning.className = 'omni-diagram__warning';
29
+ warning.hidden = true;
30
+ const sourceDetails = document.createElement('details');
31
+ sourceDetails.className = 'omni-diagram__source-details';
32
+ const sourceSummary = document.createElement('summary');
33
+ sourceSummary.textContent = 'Source';
34
+ const source = document.createElement('pre');
35
+ source.className = 'omni-diagram__source';
36
+ source.textContent = parsed.source;
37
+ sourceDetails.append(sourceSummary, source);
38
+ shell.append(header, stage, warning, sourceDetails);
39
+ root.append(shell);
40
+ let disposed = false;
41
+ const show = (values) => { warning.hidden = values.length === 0; warning.textContent = values.join('\n'); };
42
+ show(parsed.warnings);
43
+ try {
44
+ let svg;
45
+ if (kind === 'mermaid' && options.renderMermaid)
46
+ svg = await abortable(options.renderMermaid(`omni-mermaid-${nextId++}`, parsed.source), options.signal);
47
+ else if (kind === 'plantuml' && options.renderPlantUml) {
48
+ const out = options.renderPlantUml(parsed.source, document);
49
+ svg = typeof out === 'string' ? out : new XMLSerializer().serializeToString(out);
50
+ }
51
+ else {
52
+ sourceDetails.open = true;
53
+ show([...parsed.warnings, `${kind === 'mermaid' ? 'Mermaid' : 'PlantUML'} renderer is not installed. The source is shown below.`]);
54
+ }
55
+ if (svg && !disposed) {
56
+ const safe = sanitizeSvg(svg, options.maxSvgBytes ?? 2_000_000, options.maxSvgNodes ?? 20_000);
57
+ stage.replaceChildren(safe);
58
+ }
59
+ }
60
+ catch (error) {
61
+ sourceDetails.open = true;
62
+ show([...parsed.warnings, `Diagram rendering failed: ${error instanceof Error ? error.message : String(error)}`]);
63
+ }
64
+ if (options.signal?.aborted) {
65
+ disposed = true;
66
+ shell.remove();
67
+ throw new MountAbortedError();
68
+ }
69
+ return { dispose() { disposed = true; shell.remove(); if (root === container)
70
+ container.classList.remove(VIEWER_ROOT_CLASS, `omni-viewer--${kind}`);
71
+ else
72
+ root.replaceChildren(); } };
73
+ }
74
+ let nextId = 1;
75
+ export function sanitizeSvg(svg, maxBytes = 2_000_000, maxNodes = 20_000) { if (new TextEncoder().encode(svg).byteLength > maxBytes)
76
+ throw new Error('Rendered SVG exceeds the size limit.'); const doc = new DOMParser().parseFromString(svg, 'image/svg+xml'); const root = doc.documentElement; if (root.localName !== 'svg' || root.querySelector('parsererror'))
77
+ throw new Error('Renderer returned invalid SVG.'); const nodes = [root, ...root.querySelectorAll('*')]; if (nodes.length > maxNodes)
78
+ throw new Error('Rendered SVG exceeds the node limit.'); for (const node of nodes) {
79
+ if (['script', 'foreignObject', 'iframe', 'object', 'embed', 'audio', 'video', 'image', 'feImage', 'animate', 'set'].includes(node.localName)) {
80
+ node.remove();
81
+ continue;
82
+ }
83
+ if (node.localName === 'style' && /(?:@import|url\s*\(|expression\s*\()/i.test(node.textContent ?? '')) {
84
+ node.remove();
85
+ continue;
86
+ }
87
+ for (const attr of [...node.attributes]) {
88
+ const name = attr.name.toLowerCase(), value = attr.value.trim();
89
+ if (name.startsWith('on') || name === 'srcdoc' || /^javascript:/i.test(value) || /url\s*\(\s*(?!["']?#)/i.test(value) || name === 'style' && /url\s*\(/i.test(value) || ['href', 'xlink:href'].includes(name) && !value.startsWith('#'))
90
+ node.removeAttribute(attr.name);
91
+ }
92
+ } return document.importNode(root, true); }
93
+ function abortable(promise, signal) { if (!signal)
94
+ return promise; if (signal.aborted)
95
+ return Promise.reject(new MountAbortedError()); return new Promise((resolve, reject) => { const abort = () => reject(new MountAbortedError()); signal.addEventListener('abort', abort, { once: true }); promise.then(value => { signal.removeEventListener('abort', abort); resolve(value); }, error => { signal.removeEventListener('abort', abort); reject(error); }); }); }
@@ -0,0 +1,108 @@
1
+ import type { Diagnostic, ParseFailure, ParseResult } from '../../parsers/types.js';
2
+ import { type ColumnType, type SortState } from '../../parsers/csv/index.js';
3
+ import type { ExcelWorkbook } from '../../parsers/excel/index.js';
4
+ import { type GridView } from './grid.js';
5
+ export declare const EXCEL_DEFAULT_PAGE_SIZE = 100;
6
+ export declare const EXCEL_UNDO_STACK_LIMIT = 200;
7
+ export type RowId = number;
8
+ export interface ExcelViewState {
9
+ status: 'ok' | 'partial' | 'failed';
10
+ failure: ParseFailure | null;
11
+ diagnostics: Diagnostic[];
12
+ sheetNames: string[];
13
+ sheetIndex: number;
14
+ sheetName: string;
15
+ headers: string[];
16
+ columnCount: number;
17
+ /** Data rows in the current sheet (excludes the header row). */
18
+ rowCount: number;
19
+ sort: SortState;
20
+ sortedColumnType: ColumnType | null;
21
+ search: string;
22
+ matchedRowCount: number;
23
+ matchedCellCount: number;
24
+ page: number;
25
+ pageCount: number;
26
+ pageSize: number;
27
+ /** 'table' = editable data table, 'grid' = read-only WYSIWYG (X3), 'raw' = JSON. */
28
+ viewMode: 'table' | 'grid' | 'raw';
29
+ /** Current page's rows (display strings), sorted then search-filtered. */
30
+ visibleRows: string[][];
31
+ /** RowIds for visibleRows, in the same order — stable across sort/filter. */
32
+ visibleRowIds: RowId[];
33
+ /** Editing is possible only for a fully parsed workbook (status 'ok'). */
34
+ editable: boolean;
35
+ canUndo: boolean;
36
+ canRedo: boolean;
37
+ /** Current sheet has unsaved edits. */
38
+ dirty: boolean;
39
+ /** Any sheet in the workbook has unsaved edits (drives the save button). */
40
+ workbookDirty: boolean;
41
+ }
42
+ export type ExcelAction = {
43
+ type: 'switch-sheet';
44
+ index: number;
45
+ } | {
46
+ type: 'sort-column';
47
+ columnIndex: number;
48
+ } | {
49
+ type: 'set-search';
50
+ search: string;
51
+ } | {
52
+ type: 'set-page';
53
+ page: number;
54
+ } | {
55
+ type: 'next-page';
56
+ } | {
57
+ type: 'prev-page';
58
+ } | {
59
+ type: 'set-page-size';
60
+ pageSize: number;
61
+ } | {
62
+ type: 'set-view-mode';
63
+ mode: 'table' | 'grid' | 'raw';
64
+ } | {
65
+ type: 'edit-cell';
66
+ rowId: RowId;
67
+ columnIndex: number;
68
+ value: string;
69
+ } | {
70
+ type: 'edit-header';
71
+ columnIndex: number;
72
+ value: string;
73
+ } | {
74
+ type: 'insert-row';
75
+ afterRowId: RowId | 'end';
76
+ } | {
77
+ type: 'delete-row';
78
+ rowId: RowId;
79
+ } | {
80
+ type: 'undo';
81
+ } | {
82
+ type: 'redo';
83
+ };
84
+ export interface ExcelControllerOptions {
85
+ pageSize?: number;
86
+ }
87
+ export interface ExcelController {
88
+ readonly state: ExcelViewState;
89
+ dispatch(action: ExcelAction): void;
90
+ subscribe(listener: (state: ExcelViewState) => void): () => void;
91
+ /** Display cells (`w`) of a row by its immutable id. */
92
+ getRowById(rowId: RowId): readonly string[];
93
+ /** Display result (sorted + filtered) as TSV, headers included (copy). */
94
+ toTsv(): string;
95
+ /** Display result as an excel-export@1 JSON envelope (copy). */
96
+ toJson(): string;
97
+ /** Full current sheet as pretty JSON, unfiltered (raw view). */
98
+ rawJson(): string;
99
+ /** Workbook with in-session edits applied — for type-preserving export
100
+ * (serializeWorkbook). Untouched sheets return their original model. */
101
+ getWorkbook(): ExcelWorkbook;
102
+ /** Grid-mode view (X3) of the current sheet — read-only render of the
103
+ * original parsed file (styles/merges/dims), independent of edits. */
104
+ getGrid(): GridView | null;
105
+ /** Mark the current edit depth of every sheet as saved (clears dirty). */
106
+ markSaved(): void;
107
+ }
108
+ export declare function createExcelController(result: ParseResult<ExcelWorkbook>, options?: ExcelControllerOptions): ExcelController;