@ryanyahya/opendoc 0.4.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 (789) hide show
  1. package/.agents/skills/opendoc-apply-comments/SKILL.md +30 -0
  2. package/.agents/skills/opendoc-apply-comments/agents/openai.yaml +4 -0
  3. package/.agents/skills/opendoc-create/SKILL.md +63 -0
  4. package/.agents/skills/opendoc-create/agents/openai.yaml +6 -0
  5. package/.agents/skills/opendoc-create-template/SKILL.md +50 -0
  6. package/.agents/skills/opendoc-create-template/agents/openai.yaml +4 -0
  7. package/.agents/skills/opendoc-create-template/references/structured-reports.md +11 -0
  8. package/.agents/skills/opendoc-create-theme/SKILL.md +40 -0
  9. package/.agents/skills/opendoc-create-theme/agents/openai.yaml +4 -0
  10. package/.agents/skills/opendoc-current-document/SKILL.md +32 -0
  11. package/.agents/skills/opendoc-current-document/agents/openai.yaml +4 -0
  12. package/.agents/skills/opendoc-current-document/references/context-fields.md +20 -0
  13. package/.agents/skills/opendoc-review-document/SKILL.md +60 -0
  14. package/.agents/skills/opendoc-review-document/agents/openai.yaml +4 -0
  15. package/AGENTS.md +69 -0
  16. package/CONTRIBUTING.md +38 -0
  17. package/LICENSE +21 -0
  18. package/README.md +179 -0
  19. package/SECURITY.md +9 -0
  20. package/THIRD_PARTY.md +49 -0
  21. package/VALIDATION.md +99 -0
  22. package/bin/opendoc.mjs +6 -0
  23. package/dist/assets/Markdown-sNZyjJi7.js +29 -0
  24. package/dist/assets/OpenDocSerif-Regular-D3OXs9A9.ttf +0 -0
  25. package/dist/assets/OpenDocSerif-Semibold-CjL9oDRo.ttf +0 -0
  26. package/dist/assets/geist-latin-ext-wght-italic-XgKbg5n7.woff2 +0 -0
  27. package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  28. package/dist/assets/geist-latin-wght-italic-dTnRTFFJ.woff2 +0 -0
  29. package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  30. package/dist/assets/index-DdrZ6ozO.css +1 -0
  31. package/dist/assets/index-DgNBz7mL.js +39 -0
  32. package/dist/assets/pdf-B7Emtyld.js +54 -0
  33. package/dist/assets/pdf.worker.min-Dswkl-cV.mjs +29 -0
  34. package/dist/assets/wordmark-DsqLlZpb.png +0 -0
  35. package/dist/index.html +17 -0
  36. package/docs/APPEARANCE.md +21 -0
  37. package/docs/ASSETS.md +176 -0
  38. package/docs/AUTHORING.md +178 -0
  39. package/docs/HEADLESS.md +120 -0
  40. package/docs/MEDIA.md +112 -0
  41. package/docs/PROJECTS.md +55 -0
  42. package/docs/PROSE.md +15 -0
  43. package/docs/SELECTION.md +59 -0
  44. package/docs/TEMPLATES.md +55 -0
  45. package/docs/THEMES.md +106 -0
  46. package/node_modules/@formepdf/core/LICENSE +21 -0
  47. package/node_modules/@formepdf/core/README.md +53 -0
  48. package/node_modules/@formepdf/core/dist/attachments.d.ts +55 -0
  49. package/node_modules/@formepdf/core/dist/attachments.js +59 -0
  50. package/node_modules/@formepdf/core/dist/extract.d.ts +8 -0
  51. package/node_modules/@formepdf/core/dist/extract.js +56 -0
  52. package/node_modules/@formepdf/core/dist/index.d.ts +311 -0
  53. package/node_modules/@formepdf/core/dist/index.js +167 -0
  54. package/node_modules/@formepdf/core/dist/layout.d.ts +132 -0
  55. package/node_modules/@formepdf/core/dist/layout.js +240 -0
  56. package/node_modules/@formepdf/core/dist/shared/browserHelpers.d.ts +19 -0
  57. package/node_modules/@formepdf/core/dist/shared/browserHelpers.js +128 -0
  58. package/node_modules/@formepdf/core/package.json +35 -0
  59. package/node_modules/@formepdf/core/pkg-node/LICENSE +21 -0
  60. package/node_modules/@formepdf/core/pkg-node/README.md +84 -0
  61. package/node_modules/@formepdf/core/pkg-node/forme.d.ts +39 -0
  62. package/node_modules/@formepdf/core/pkg-node/forme.js +394 -0
  63. package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm +0 -0
  64. package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm.d.ts +21 -0
  65. package/node_modules/@formepdf/core/pkg-node/package.json +25 -0
  66. package/node_modules/@formepdf/react/README.md +70 -0
  67. package/node_modules/@formepdf/react/dist/charts.d.ts +72 -0
  68. package/node_modules/@formepdf/react/dist/charts.js +338 -0
  69. package/node_modules/@formepdf/react/dist/components.d.ts +533 -0
  70. package/node_modules/@formepdf/react/dist/components.js +608 -0
  71. package/node_modules/@formepdf/react/dist/expr.d.ts +20 -0
  72. package/node_modules/@formepdf/react/dist/expr.js +39 -0
  73. package/node_modules/@formepdf/react/dist/font.d.ts +2 -0
  74. package/node_modules/@formepdf/react/dist/font.js +1 -0
  75. package/node_modules/@formepdf/react/dist/index.d.ts +11 -0
  76. package/node_modules/@formepdf/react/dist/index.js +15 -0
  77. package/node_modules/@formepdf/react/dist/render.d.ts +12 -0
  78. package/node_modules/@formepdf/react/dist/render.js +15 -0
  79. package/node_modules/@formepdf/react/dist/serialize.d.ts +12 -0
  80. package/node_modules/@formepdf/react/dist/serialize.js +1470 -0
  81. package/node_modules/@formepdf/react/dist/stylesheet.d.ts +4 -0
  82. package/node_modules/@formepdf/react/dist/stylesheet.js +5 -0
  83. package/node_modules/@formepdf/react/dist/template-proxy.d.ts +38 -0
  84. package/node_modules/@formepdf/react/dist/template-proxy.js +100 -0
  85. package/node_modules/@formepdf/react/dist/types.d.ts +287 -0
  86. package/node_modules/@formepdf/react/dist/types.js +1 -0
  87. package/node_modules/@formepdf/react/package.json +41 -0
  88. package/node_modules/@formepdf/shared/README.md +7 -0
  89. package/node_modules/@formepdf/shared/dist/canvas.d.ts +6 -0
  90. package/node_modules/@formepdf/shared/dist/canvas.js +43 -0
  91. package/node_modules/@formepdf/shared/dist/charts.d.ts +100 -0
  92. package/node_modules/@formepdf/shared/dist/charts.js +98 -0
  93. package/node_modules/@formepdf/shared/dist/encode.d.ts +27 -0
  94. package/node_modules/@formepdf/shared/dist/encode.js +93 -0
  95. package/node_modules/@formepdf/shared/dist/font.d.ts +13 -0
  96. package/node_modules/@formepdf/shared/dist/font.js +52 -0
  97. package/node_modules/@formepdf/shared/dist/index.d.ts +10 -0
  98. package/node_modules/@formepdf/shared/dist/index.js +15 -0
  99. package/node_modules/@formepdf/shared/dist/parser.d.ts +30 -0
  100. package/node_modules/@formepdf/shared/dist/parser.js +756 -0
  101. package/node_modules/@formepdf/shared/dist/semantics.d.ts +15 -0
  102. package/node_modules/@formepdf/shared/dist/semantics.js +44 -0
  103. package/node_modules/@formepdf/shared/dist/style.d.ts +7 -0
  104. package/node_modules/@formepdf/shared/dist/style.js +1024 -0
  105. package/node_modules/@formepdf/shared/dist/types.d.ts +743 -0
  106. package/node_modules/@formepdf/shared/dist/types.js +2 -0
  107. package/node_modules/@formepdf/shared/package.json +35 -0
  108. package/node_modules/@types/node/LICENSE +21 -0
  109. package/node_modules/@types/node/README.md +15 -0
  110. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  111. package/node_modules/@types/node/assert.d.ts +1078 -0
  112. package/node_modules/@types/node/async_hooks.d.ts +603 -0
  113. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  114. package/node_modules/@types/node/buffer.d.ts +1934 -0
  115. package/node_modules/@types/node/child_process.d.ts +1476 -0
  116. package/node_modules/@types/node/cluster.d.ts +578 -0
  117. package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  118. package/node_modules/@types/node/compatibility/index.d.ts +9 -0
  119. package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  120. package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  121. package/node_modules/@types/node/console.d.ts +452 -0
  122. package/node_modules/@types/node/constants.d.ts +21 -0
  123. package/node_modules/@types/node/crypto.d.ts +4545 -0
  124. package/node_modules/@types/node/dgram.d.ts +600 -0
  125. package/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  126. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  127. package/node_modules/@types/node/dns.d.ts +923 -0
  128. package/node_modules/@types/node/domain.d.ts +170 -0
  129. package/node_modules/@types/node/events.d.ts +976 -0
  130. package/node_modules/@types/node/fs/promises.d.ts +1306 -0
  131. package/node_modules/@types/node/fs.d.ts +4463 -0
  132. package/node_modules/@types/node/globals.d.ts +172 -0
  133. package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  134. package/node_modules/@types/node/http.d.ts +2097 -0
  135. package/node_modules/@types/node/http2.d.ts +2843 -0
  136. package/node_modules/@types/node/https.d.ts +579 -0
  137. package/node_modules/@types/node/index.d.ts +98 -0
  138. package/node_modules/@types/node/inspector.d.ts +253 -0
  139. package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  140. package/node_modules/@types/node/module.d.ts +891 -0
  141. package/node_modules/@types/node/net.d.ts +1076 -0
  142. package/node_modules/@types/node/os.d.ts +506 -0
  143. package/node_modules/@types/node/package.json +145 -0
  144. package/node_modules/@types/node/path.d.ts +200 -0
  145. package/node_modules/@types/node/perf_hooks.d.ts +968 -0
  146. package/node_modules/@types/node/process.d.ts +2084 -0
  147. package/node_modules/@types/node/punycode.d.ts +117 -0
  148. package/node_modules/@types/node/querystring.d.ts +152 -0
  149. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  150. package/node_modules/@types/node/readline.d.ts +594 -0
  151. package/node_modules/@types/node/repl.d.ts +428 -0
  152. package/node_modules/@types/node/sea.d.ts +162 -0
  153. package/node_modules/@types/node/sqlite.d.ts +722 -0
  154. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  155. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  156. package/node_modules/@types/node/stream/web.d.ts +573 -0
  157. package/node_modules/@types/node/stream.d.ts +1694 -0
  158. package/node_modules/@types/node/string_decoder.d.ts +67 -0
  159. package/node_modules/@types/node/test.d.ts +2265 -0
  160. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  161. package/node_modules/@types/node/timers.d.ts +287 -0
  162. package/node_modules/@types/node/tls.d.ts +1319 -0
  163. package/node_modules/@types/node/trace_events.d.ts +197 -0
  164. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  165. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  166. package/node_modules/@types/node/ts5.6/index.d.ts +98 -0
  167. package/node_modules/@types/node/tty.d.ts +208 -0
  168. package/node_modules/@types/node/url.d.ts +984 -0
  169. package/node_modules/@types/node/util.d.ts +2606 -0
  170. package/node_modules/@types/node/v8.d.ts +920 -0
  171. package/node_modules/@types/node/vm.d.ts +1053 -0
  172. package/node_modules/@types/node/wasi.d.ts +181 -0
  173. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  174. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  175. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  176. package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  177. package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  178. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  179. package/node_modules/@types/node/web-globals/streams.d.ts +22 -0
  180. package/node_modules/@types/node/worker_threads.d.ts +819 -0
  181. package/node_modules/@types/node/zlib.d.ts +747 -0
  182. package/node_modules/@types/react/LICENSE +21 -0
  183. package/node_modules/@types/react/README.md +15 -0
  184. package/node_modules/@types/react/canary.d.ts +129 -0
  185. package/node_modules/@types/react/compiler-runtime.d.ts +4 -0
  186. package/node_modules/@types/react/experimental.d.ts +184 -0
  187. package/node_modules/@types/react/global.d.ts +166 -0
  188. package/node_modules/@types/react/index.d.ts +4378 -0
  189. package/node_modules/@types/react/jsx-dev-runtime.d.ts +33 -0
  190. package/node_modules/@types/react/jsx-runtime.d.ts +24 -0
  191. package/node_modules/@types/react/package.json +210 -0
  192. package/node_modules/@types/react/ts5.0/canary.d.ts +129 -0
  193. package/node_modules/@types/react/ts5.0/experimental.d.ts +184 -0
  194. package/node_modules/@types/react/ts5.0/global.d.ts +166 -0
  195. package/node_modules/@types/react/ts5.0/index.d.ts +4365 -0
  196. package/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts +33 -0
  197. package/node_modules/@types/react/ts5.0/jsx-runtime.d.ts +24 -0
  198. package/node_modules/csstype/LICENSE +19 -0
  199. package/node_modules/csstype/README.md +291 -0
  200. package/node_modules/csstype/index.d.ts +22569 -0
  201. package/node_modules/csstype/index.js.flow +6863 -0
  202. package/node_modules/csstype/package.json +70 -0
  203. package/node_modules/entities/LICENSE +11 -0
  204. package/node_modules/entities/decode.d.ts +1 -0
  205. package/node_modules/entities/decode.js +3 -0
  206. package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
  207. package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
  208. package/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  209. package/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
  210. package/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
  211. package/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
  212. package/node_modules/entities/dist/commonjs/decode.js +511 -0
  213. package/node_modules/entities/dist/commonjs/decode.js.map +1 -0
  214. package/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
  215. package/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
  216. package/node_modules/entities/dist/commonjs/encode.js +73 -0
  217. package/node_modules/entities/dist/commonjs/encode.js.map +1 -0
  218. package/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
  219. package/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
  220. package/node_modules/entities/dist/commonjs/escape.js +121 -0
  221. package/node_modules/entities/dist/commonjs/escape.js.map +1 -0
  222. package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
  223. package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
  224. package/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
  225. package/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
  226. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
  227. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
  228. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
  229. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
  230. package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
  231. package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
  232. package/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
  233. package/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
  234. package/node_modules/entities/dist/commonjs/index.d.ts +96 -0
  235. package/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
  236. package/node_modules/entities/dist/commonjs/index.js +131 -0
  237. package/node_modules/entities/dist/commonjs/index.js.map +1 -0
  238. package/node_modules/entities/dist/commonjs/package.json +3 -0
  239. package/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
  240. package/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
  241. package/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
  242. package/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
  243. package/node_modules/entities/dist/esm/decode.d.ts +209 -0
  244. package/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
  245. package/node_modules/entities/dist/esm/decode.js +497 -0
  246. package/node_modules/entities/dist/esm/decode.js.map +1 -0
  247. package/node_modules/entities/dist/esm/encode.d.ts +22 -0
  248. package/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
  249. package/node_modules/entities/dist/esm/encode.js +69 -0
  250. package/node_modules/entities/dist/esm/encode.js.map +1 -0
  251. package/node_modules/entities/dist/esm/escape.d.ts +43 -0
  252. package/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
  253. package/node_modules/entities/dist/esm/escape.js +117 -0
  254. package/node_modules/entities/dist/esm/escape.js.map +1 -0
  255. package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
  256. package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
  257. package/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
  258. package/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
  259. package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
  260. package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
  261. package/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
  262. package/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
  263. package/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
  264. package/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
  265. package/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
  266. package/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
  267. package/node_modules/entities/dist/esm/index.d.ts +96 -0
  268. package/node_modules/entities/dist/esm/index.d.ts.map +1 -0
  269. package/node_modules/entities/dist/esm/index.js +107 -0
  270. package/node_modules/entities/dist/esm/index.js.map +1 -0
  271. package/node_modules/entities/dist/esm/package.json +3 -0
  272. package/node_modules/entities/escape.d.ts +1 -0
  273. package/node_modules/entities/escape.js +3 -0
  274. package/node_modules/entities/package.json +118 -0
  275. package/node_modules/entities/readme.md +122 -0
  276. package/node_modules/entities/src/decode-codepoint.ts +81 -0
  277. package/node_modules/entities/src/decode.spec.ts +320 -0
  278. package/node_modules/entities/src/decode.ts +620 -0
  279. package/node_modules/entities/src/encode.spec.ts +78 -0
  280. package/node_modules/entities/src/encode.ts +77 -0
  281. package/node_modules/entities/src/escape.spec.ts +14 -0
  282. package/node_modules/entities/src/escape.ts +148 -0
  283. package/node_modules/entities/src/generated/.eslintrc.json +10 -0
  284. package/node_modules/entities/src/generated/decode-data-html.ts +8 -0
  285. package/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
  286. package/node_modules/entities/src/generated/encode-html.ts +17 -0
  287. package/node_modules/entities/src/index.spec.ts +125 -0
  288. package/node_modules/entities/src/index.ts +188 -0
  289. package/node_modules/parse5/LICENSE +19 -0
  290. package/node_modules/parse5/README.md +38 -0
  291. package/node_modules/parse5/dist/cjs/common/doctype.d.ts +4 -0
  292. package/node_modules/parse5/dist/cjs/common/doctype.js +118 -0
  293. package/node_modules/parse5/dist/cjs/common/error-codes.d.ts +67 -0
  294. package/node_modules/parse5/dist/cjs/common/error-codes.js +66 -0
  295. package/node_modules/parse5/dist/cjs/common/foreign-content.d.ts +9 -0
  296. package/node_modules/parse5/dist/cjs/common/foreign-content.js +237 -0
  297. package/node_modules/parse5/dist/cjs/common/html.d.ts +289 -0
  298. package/node_modules/parse5/dist/cjs/common/html.js +528 -0
  299. package/node_modules/parse5/dist/cjs/common/token.d.ts +84 -0
  300. package/node_modules/parse5/dist/cjs/common/token.js +24 -0
  301. package/node_modules/parse5/dist/cjs/common/unicode.d.ts +42 -0
  302. package/node_modules/parse5/dist/cjs/common/unicode.js +70 -0
  303. package/node_modules/parse5/dist/cjs/index.d.ts +71 -0
  304. package/node_modules/parse5/dist/cjs/index.js +54 -0
  305. package/node_modules/parse5/dist/cjs/package.json +1 -0
  306. package/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts +36 -0
  307. package/node_modules/parse5/dist/cjs/parser/formatting-element-list.js +114 -0
  308. package/node_modules/parse5/dist/cjs/parser/index.d.ts +221 -0
  309. package/node_modules/parse5/dist/cjs/parser/index.js +3240 -0
  310. package/node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts +53 -0
  311. package/node_modules/parse5/dist/cjs/parser/open-element-stack.js +328 -0
  312. package/node_modules/parse5/dist/cjs/serializer/index.d.ts +60 -0
  313. package/node_modules/parse5/dist/cjs/serializer/index.js +172 -0
  314. package/node_modules/parse5/dist/cjs/tokenizer/index.d.ts +247 -0
  315. package/node_modules/parse5/dist/cjs/tokenizer/index.js +2714 -0
  316. package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts +36 -0
  317. package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.js +200 -0
  318. package/node_modules/parse5/dist/cjs/tree-adapters/default.d.ts +84 -0
  319. package/node_modules/parse5/dist/cjs/tree-adapters/default.js +176 -0
  320. package/node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts +255 -0
  321. package/node_modules/parse5/dist/cjs/tree-adapters/interface.js +2 -0
  322. package/node_modules/parse5/dist/common/doctype.d.ts +4 -0
  323. package/node_modules/parse5/dist/common/doctype.js +114 -0
  324. package/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
  325. package/node_modules/parse5/dist/common/error-codes.js +63 -0
  326. package/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
  327. package/node_modules/parse5/dist/common/foreign-content.js +228 -0
  328. package/node_modules/parse5/dist/common/html.d.ts +289 -0
  329. package/node_modules/parse5/dist/common/html.js +523 -0
  330. package/node_modules/parse5/dist/common/token.d.ts +84 -0
  331. package/node_modules/parse5/dist/common/token.js +20 -0
  332. package/node_modules/parse5/dist/common/unicode.d.ts +42 -0
  333. package/node_modules/parse5/dist/common/unicode.js +62 -0
  334. package/node_modules/parse5/dist/index.d.ts +71 -0
  335. package/node_modules/parse5/dist/index.js +42 -0
  336. package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
  337. package/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
  338. package/node_modules/parse5/dist/parser/index.d.ts +221 -0
  339. package/node_modules/parse5/dist/parser/index.js +3245 -0
  340. package/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
  341. package/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
  342. package/node_modules/parse5/dist/serializer/index.d.ts +60 -0
  343. package/node_modules/parse5/dist/serializer/index.js +168 -0
  344. package/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
  345. package/node_modules/parse5/dist/tokenizer/index.js +2710 -0
  346. package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
  347. package/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
  348. package/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
  349. package/node_modules/parse5/dist/tree-adapters/default.js +173 -0
  350. package/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
  351. package/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
  352. package/node_modules/parse5/package.json +50 -0
  353. package/node_modules/undici-types/LICENSE +21 -0
  354. package/node_modules/undici-types/README.md +6 -0
  355. package/node_modules/undici-types/agent.d.ts +31 -0
  356. package/node_modules/undici-types/api.d.ts +43 -0
  357. package/node_modules/undici-types/balanced-pool.d.ts +29 -0
  358. package/node_modules/undici-types/cache.d.ts +36 -0
  359. package/node_modules/undici-types/client.d.ts +108 -0
  360. package/node_modules/undici-types/connector.d.ts +34 -0
  361. package/node_modules/undici-types/content-type.d.ts +21 -0
  362. package/node_modules/undici-types/cookies.d.ts +28 -0
  363. package/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  364. package/node_modules/undici-types/dispatcher.d.ts +256 -0
  365. package/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  366. package/node_modules/undici-types/errors.d.ts +149 -0
  367. package/node_modules/undici-types/eventsource.d.ts +61 -0
  368. package/node_modules/undici-types/fetch.d.ts +209 -0
  369. package/node_modules/undici-types/file.d.ts +39 -0
  370. package/node_modules/undici-types/filereader.d.ts +54 -0
  371. package/node_modules/undici-types/formdata.d.ts +108 -0
  372. package/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  373. package/node_modules/undici-types/global-origin.d.ts +7 -0
  374. package/node_modules/undici-types/handlers.d.ts +15 -0
  375. package/node_modules/undici-types/header.d.ts +4 -0
  376. package/node_modules/undici-types/index.d.ts +71 -0
  377. package/node_modules/undici-types/interceptors.d.ts +17 -0
  378. package/node_modules/undici-types/mock-agent.d.ts +50 -0
  379. package/node_modules/undici-types/mock-client.d.ts +25 -0
  380. package/node_modules/undici-types/mock-errors.d.ts +12 -0
  381. package/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  382. package/node_modules/undici-types/mock-pool.d.ts +25 -0
  383. package/node_modules/undici-types/package.json +55 -0
  384. package/node_modules/undici-types/patch.d.ts +33 -0
  385. package/node_modules/undici-types/pool-stats.d.ts +19 -0
  386. package/node_modules/undici-types/pool.d.ts +39 -0
  387. package/node_modules/undici-types/proxy-agent.d.ts +28 -0
  388. package/node_modules/undici-types/readable.d.ts +65 -0
  389. package/node_modules/undici-types/retry-agent.d.ts +8 -0
  390. package/node_modules/undici-types/retry-handler.d.ts +116 -0
  391. package/node_modules/undici-types/util.d.ts +18 -0
  392. package/node_modules/undici-types/webidl.d.ts +228 -0
  393. package/node_modules/undici-types/websocket.d.ts +150 -0
  394. package/package.json +80 -0
  395. package/scripts/rebuild-forme.mjs +61 -0
  396. package/src/app/AppearanceControl.tsx +44 -0
  397. package/src/app/AssetThemeDefaults.tsx +87 -0
  398. package/src/app/AssetsBrowser.tsx +273 -0
  399. package/src/app/CommentDock.tsx +108 -0
  400. package/src/app/CreateDocumentDialog.tsx +51 -0
  401. package/src/app/DocumentActions.tsx +69 -0
  402. package/src/app/DocumentCard.tsx +50 -0
  403. package/src/app/DocumentViewControl.tsx +31 -0
  404. package/src/app/DocumentsBrowser.tsx +70 -0
  405. package/src/app/ExportHistoryDialog.tsx +86 -0
  406. package/src/app/ExportMenu.tsx +127 -0
  407. package/src/app/GuideDialog.tsx +80 -0
  408. package/src/app/InspectionLayer.tsx +77 -0
  409. package/src/app/LogoUploadDialog.tsx +92 -0
  410. package/src/app/Markdown.tsx +34 -0
  411. package/src/app/MaterialsBrowser.tsx +149 -0
  412. package/src/app/PageNumberInput.tsx +56 -0
  413. package/src/app/Pdf.tsx +561 -0
  414. package/src/app/ProjectDialogs.tsx +100 -0
  415. package/src/app/Reader.tsx +769 -0
  416. package/src/app/SearchField.tsx +13 -0
  417. package/src/app/Sidebar.tsx +86 -0
  418. package/src/app/SkillIndex.tsx +30 -0
  419. package/src/app/TemplatesBrowser.tsx +149 -0
  420. package/src/app/ThemesBrowser.tsx +159 -0
  421. package/src/app/api.ts +47 -0
  422. package/src/app/appearance.ts +35 -0
  423. package/src/app/assets.css +139 -0
  424. package/src/app/catalogPreview.ts +20 -0
  425. package/src/app/colors.css +167 -0
  426. package/src/app/comment-dock.css +53 -0
  427. package/src/app/commentDrafts.ts +67 -0
  428. package/src/app/componentCorrection.ts +17 -0
  429. package/src/app/edit-workbench.css +87 -0
  430. package/src/app/editSession.ts +238 -0
  431. package/src/app/editorRecovery.ts +25 -0
  432. package/src/app/export-history.css +31 -0
  433. package/src/app/export.css +17 -0
  434. package/src/app/guideLinks.ts +21 -0
  435. package/src/app/guides.css +40 -0
  436. package/src/app/main.tsx +221 -0
  437. package/src/app/materials.css +53 -0
  438. package/src/app/pdfLoading.ts +12 -0
  439. package/src/app/pdfSelection.ts +112 -0
  440. package/src/app/projects.css +63 -0
  441. package/src/app/reader-toolbar.css +65 -0
  442. package/src/app/selection.css +150 -0
  443. package/src/app/sidebar.css +60 -0
  444. package/src/app/skills.css +7 -0
  445. package/src/app/style.css +1061 -0
  446. package/src/app/templates.css +49 -0
  447. package/src/app/themes.css +80 -0
  448. package/src/app/ui/Icon.tsx +92 -0
  449. package/src/app/ui/README.md +27 -0
  450. package/src/app/ui/fonts.css +36 -0
  451. package/src/app/ui/index.tsx +223 -0
  452. package/src/app/ui/ui.css +388 -0
  453. package/src/app/useReaderPreview.ts +19 -0
  454. package/src/app/useTextEditing.ts +155 -0
  455. package/src/assets/adapter.ts +122 -0
  456. package/src/assets/files.ts +378 -0
  457. package/src/assets/import-worker.ts +294 -0
  458. package/src/assets/imports.ts +124 -0
  459. package/src/assets/index.ts +60 -0
  460. package/src/assets/store.ts +798 -0
  461. package/src/assets/usage.ts +118 -0
  462. package/src/cli/check.ts +25 -0
  463. package/src/cli/init.ts +119 -0
  464. package/src/cli/lock.ts +34 -0
  465. package/src/cli/main.ts +118 -0
  466. package/src/cli/process.ts +19 -0
  467. package/src/cli/start.ts +96 -0
  468. package/src/cli/update.ts +348 -0
  469. package/src/cli/workspace.ts +94 -0
  470. package/src/document/index.tsx +641 -0
  471. package/src/document/page.tsx +53 -0
  472. package/src/document/text-targets.tsx +162 -0
  473. package/src/media/files.ts +124 -0
  474. package/src/media/render.ts +63 -0
  475. package/src/rendering/resolve-sources.ts +84 -0
  476. package/src/runtime/jsx-dev-runtime.ts +2 -0
  477. package/src/runtime/jsx-runtime.ts +2 -0
  478. package/src/runtime/paths.ts +12 -0
  479. package/src/server/assets-cli.ts +162 -0
  480. package/src/server/assets-http.ts +100 -0
  481. package/src/server/client.ts +50 -0
  482. package/src/server/clipboard.ts +22 -0
  483. package/src/server/comments-cli.ts +64 -0
  484. package/src/server/comments.ts +130 -0
  485. package/src/server/create-cli.ts +33 -0
  486. package/src/server/create.ts +228 -0
  487. package/src/server/dependencies.ts +91 -0
  488. package/src/server/documents.ts +143 -0
  489. package/src/server/edits.ts +249 -0
  490. package/src/server/export-batch.ts +105 -0
  491. package/src/server/export-errors.ts +2 -0
  492. package/src/server/export-file.ts +57 -0
  493. package/src/server/export-inputs.ts +66 -0
  494. package/src/server/export-preview.ts +69 -0
  495. package/src/server/export.ts +32 -0
  496. package/src/server/exports.ts +283 -0
  497. package/src/server/files.ts +21 -0
  498. package/src/server/guides.ts +71 -0
  499. package/src/server/index.ts +432 -0
  500. package/src/server/materials.ts +39 -0
  501. package/src/server/media-cli.ts +73 -0
  502. package/src/server/media-mutations.ts +168 -0
  503. package/src/server/pptx.ts +160 -0
  504. package/src/server/preflight.ts +129 -0
  505. package/src/server/projects-cli.ts +29 -0
  506. package/src/server/projects.ts +187 -0
  507. package/src/server/render-error.ts +9 -0
  508. package/src/server/render-source.ts +24 -0
  509. package/src/server/render.ts +48 -0
  510. package/src/server/review-cli.ts +40 -0
  511. package/src/server/review.ts +161 -0
  512. package/src/server/selection.ts +23 -0
  513. package/src/server/source-overrides.ts +97 -0
  514. package/src/server/templates-cli.ts +51 -0
  515. package/src/server/templates.ts +186 -0
  516. package/src/server/text-layout.ts +41 -0
  517. package/src/server/text-source.ts +307 -0
  518. package/src/server/themes-cli.ts +59 -0
  519. package/src/server/themes.ts +215 -0
  520. package/src/server/ttf2eot.d.ts +3 -0
  521. package/src/server/worker.ts +166 -0
  522. package/src/server/workspace.ts +242 -0
  523. package/src/shared/anchors.ts +69 -0
  524. package/src/shared/assets.ts +154 -0
  525. package/src/shared/export.ts +34 -0
  526. package/src/shared/media.ts +33 -0
  527. package/src/shared/projects.ts +19 -0
  528. package/src/shared/selection.ts +94 -0
  529. package/src/shared/skill-index.ts +14 -0
  530. package/src/shared/starters.ts +19 -0
  531. package/src/shared/templates.ts +18 -0
  532. package/src/shared/themes.ts +24 -0
  533. package/src/shared/types.ts +39 -0
  534. package/src/template/index.ts +27 -0
  535. package/src/themes/index.ts +3 -0
  536. package/src/themes/neutral.ts +20 -0
  537. package/src/themes/types.ts +110 -0
  538. package/starter/assets/brand/wordmark.png +0 -0
  539. package/starter/assets/fonts/InterUI-LICENSE.txt +93 -0
  540. package/starter/assets/fonts/InterUI-Medium.ttf +0 -0
  541. package/starter/assets/fonts/InterUI-Regular.ttf +0 -0
  542. package/starter/assets/fonts/InterUI-source.json +19 -0
  543. package/starter/assets/fonts/OpenDocMono-Regular.ttf +0 -0
  544. package/starter/assets/fonts/OpenDocSans-Italic.ttf +0 -0
  545. package/starter/assets/fonts/OpenDocSans-Regular.ttf +0 -0
  546. package/starter/assets/fonts/OpenDocSans-Semibold.ttf +0 -0
  547. package/starter/assets/fonts/OpenDocSans-SemiboldItalic.ttf +0 -0
  548. package/starter/assets/fonts/OpenDocSerif-Italic.ttf +0 -0
  549. package/starter/assets/fonts/OpenDocSerif-Regular.ttf +0 -0
  550. package/starter/assets/fonts/OpenDocSerif-Semibold.ttf +0 -0
  551. package/starter/assets/fonts/OpenDocSerif-SemiboldItalic.ttf +0 -0
  552. package/starter/assets/fonts/SourceCode-LICENSE.md +93 -0
  553. package/starter/assets/fonts/SourceSans-LICENSE.md +93 -0
  554. package/starter/assets/fonts/SourceSerif-LICENSE.md +93 -0
  555. package/starter/assets/fonts/geist/OFL.txt +93 -0
  556. package/starter/assets/fonts/geist/asset.json +7 -0
  557. package/starter/assets/fonts/geist/files/1a9874b3be0fc168692a3d2327bccb4d28835653d3b91537a755296a467a83e3.ttf +0 -0
  558. package/starter/assets/fonts/geist/files/a8eefb873ba9c9020665f8a98302697ce1f3b79ab2deef6ee508c0ca6a82e876.ttf +0 -0
  559. package/starter/assets/fonts/geist/files/ccce59465ae5c61930ada5453834f60500fbd95084d85db63e0e65fad0125455.ttf +0 -0
  560. package/starter/assets/fonts/geist/files/f5e95110d70593672515080bee9148463ada0a7f77b89ed65a3d43cb2b0ff83a.pdf +0 -0
  561. package/starter/assets/fonts/geist/revisions/9a2bc12fb2f23cb27bc227087e63e1407bb804ee0586480bd6b7966ec69fb474.json +60 -0
  562. package/starter/assets/fonts/inter/OFL.txt +93 -0
  563. package/starter/assets/fonts/inter/asset.json +7 -0
  564. package/starter/assets/fonts/inter/files/1b08e7fc267a5c7e1d614100f604b83e7e8a0be241f0f288faa2b3ac93a683ba.ttf +0 -0
  565. package/starter/assets/fonts/inter/files/5b6f0c6f26e5c554a64cdcc3a9b5d802b7f9aec6206f1dbcfcdcad7b5860a2a9.ttf +0 -0
  566. package/starter/assets/fonts/inter/files/957db8560d510a198a7d0333fae7b6b444b00c20801581126273978d778eb3c3.pdf +0 -0
  567. package/starter/assets/fonts/inter/files/b37284b5701b6b168dfc770aa1a4ac492106422fd3ba76bc7641e37434e8019c.ttf +0 -0
  568. package/starter/assets/fonts/inter/files/c1811d32ac0f6eed1bbf57529f2ecdfc6c717d48a969dd864942436315a1b198.ttf +0 -0
  569. package/starter/assets/fonts/inter/files/e7a1aaf7eda9f2fad4131725fa556265ec75ca7b2d756260173a040363e8d4f7.ttf +0 -0
  570. package/starter/assets/fonts/inter/files/ef8f755d933b9310804cc9152f1f18cb2ac460d6b05054ec913d889c9f11f79e.ttf +0 -0
  571. package/starter/assets/fonts/inter/revisions/600391517c413963b71e278a57c26c40366c81fa3939a6b9755f446206766d12.json +99 -0
  572. package/starter/assets/fonts/inter/source.json +57 -0
  573. package/starter/assets/fonts/lato/OFL.txt +93 -0
  574. package/starter/assets/fonts/lato/asset.json +7 -0
  575. package/starter/assets/fonts/lato/files/4a6b566dbb28adb473a8789ce5169306f42f0c8a070ac92bae93636f36348b0d.pdf +0 -0
  576. package/starter/assets/fonts/lato/files/5adeb6b334d8fb99ef053bc052b952773d544315e0e1d668a12c0ce8bd51375c.ttf +0 -0
  577. package/starter/assets/fonts/lato/files/62c1b7f0d2e74b45960154c3520efc337b553db0961bfdc950d5618334596cc8.ttf +0 -0
  578. package/starter/assets/fonts/lato/files/71b8b7decbe75a881ed267be539d402bd1e9420b799658aada4e0d1bd5af803c.ttf +0 -0
  579. package/starter/assets/fonts/lato/files/8a0aace75d33794eece4b28187bfc1df0bbd2888b5d8a56e01788c8d65d16be1.ttf +0 -0
  580. package/starter/assets/fonts/lato/files/d636e4683231f931eda222d588e944d082bfd3bdba02f928bee461c0f185b251.ttf +0 -0
  581. package/starter/assets/fonts/lato/files/e399c44efe1387100531d26c7e4800c5d12251b890d6654a3098c7c679cb1786.ttf +0 -0
  582. package/starter/assets/fonts/lato/revisions/49ccb93400a9d466fab7d9843b1ecf8916ec6d47a475dd79a597a22eb39616bc.json +99 -0
  583. package/starter/assets/fonts/lato/source.json +57 -0
  584. package/starter/assets/fonts/merriweather/OFL.txt +93 -0
  585. package/starter/assets/fonts/merriweather/asset.json +7 -0
  586. package/starter/assets/fonts/merriweather/files/1c54f91b910454251c4c2b7bd4e472e1abf265fba7ca3c0ef2eee2f41324099e.ttf +0 -0
  587. package/starter/assets/fonts/merriweather/files/8bde8da2bb7f0265e27ba0481f70bb48d0f98a976c145f2f239c648ddd6532e0.pdf +0 -0
  588. package/starter/assets/fonts/merriweather/files/90b7db4460fcd1a5ca49575c2668a793f3cd6447664d312a068d690e1c01e6bc.ttf +0 -0
  589. package/starter/assets/fonts/merriweather/files/afff81272b7653417bb6f8bef57add055b1f9fda36f27eba5f32b40752bd08da.ttf +0 -0
  590. package/starter/assets/fonts/merriweather/files/e029d3b71e5bae3877c73f4f2b15af28db16593d49b0aed2a328d37ff7075846.ttf +0 -0
  591. package/starter/assets/fonts/merriweather/files/e9864a6790bf712a04e20f3662b206a1535186ed3e877fd859dd5fb9682335df.ttf +0 -0
  592. package/starter/assets/fonts/merriweather/files/fa71baebdd20a7d0de2e5e445a5922530fe9e1d740efbe791f113b682d3cb093.ttf +0 -0
  593. package/starter/assets/fonts/merriweather/revisions/1888e390b3e4f38a3d7cd2dc1bb805aeb6ce13f986a97656f0265fd436bc91d2.json +99 -0
  594. package/starter/assets/fonts/merriweather/source.json +57 -0
  595. package/starter/assets/fonts/open-sans/OFL.txt +92 -0
  596. package/starter/assets/fonts/open-sans/asset.json +7 -0
  597. package/starter/assets/fonts/open-sans/files/1bc0594a83762b2c25d38915a34464b7fec6088298ca22d151757bf98d6700ec.ttf +0 -0
  598. package/starter/assets/fonts/open-sans/files/47ed1cfaa7ffca04a04ab850b2938fd52c09d1b44cfa3e2980878e166b0cbd87.ttf +0 -0
  599. package/starter/assets/fonts/open-sans/files/574939af301f07df8e21cfff279465c5981dd9d9cf62086f7515897df951c6f5.pdf +0 -0
  600. package/starter/assets/fonts/open-sans/files/6d3884d0d57c1b67e9c50c54eca7b69c535c114e76bd7a9cfda0258588185553.ttf +0 -0
  601. package/starter/assets/fonts/open-sans/files/733eb93b167e6d45de09aa768f6c0355647c2c26f5416dbc7407a08ed41e81c6.ttf +0 -0
  602. package/starter/assets/fonts/open-sans/files/75367e6da7d914eaed87883ba51b2a2b5816b5cdbb39f96ec5c81a5b032bfd5a.ttf +0 -0
  603. package/starter/assets/fonts/open-sans/files/ff4fdc11204e0edd14e9a0bb6c374b847a9093b0ec2c16702e03afca79ac4ef7.ttf +0 -0
  604. package/starter/assets/fonts/open-sans/revisions/bbbe3a4915b9bccbc883c0decb4097511c43b6bd09ae22a1516aff128c219bc5.json +99 -0
  605. package/starter/assets/fonts/open-sans/source.json +57 -0
  606. package/starter/assets/fonts/roboto/OFL.txt +93 -0
  607. package/starter/assets/fonts/roboto/asset.json +7 -0
  608. package/starter/assets/fonts/roboto/files/22d45d989248a624252b8382067ac56550212fa675dcdbaf12f03d297dd87a58.pdf +0 -0
  609. package/starter/assets/fonts/roboto/files/35757eaa996b3359022f47f164a67ee9eac04971af24c5b8fbd4b89e844ff190.ttf +0 -0
  610. package/starter/assets/fonts/roboto/files/4d3035883c531846bd1ce2dc89f36d932e72dc114f56062c7e3a9cdd74f3d3ea.ttf +0 -0
  611. package/starter/assets/fonts/roboto/files/be7639306a4fc4a02ce2ae2ff59eb1335e4db4a7379dd0a384ed7cc053817789.ttf +0 -0
  612. package/starter/assets/fonts/roboto/files/d2920cbb1b60a3fd11fbf22049286e43a6baf522d37fdf1e7c89562319bcfea5.ttf +0 -0
  613. package/starter/assets/fonts/roboto/files/dece7c71bbe61710787f0839c722c65e87355dd2eb4a823e6b5488121ff81e4b.ttf +0 -0
  614. package/starter/assets/fonts/roboto/files/f478ba88b0292e685e487901dfbb1401457d32d6ebee4030cdfd5698235bffa8.ttf +0 -0
  615. package/starter/assets/fonts/roboto/revisions/bda5e2d84c17313373dd2dbf3e64fe0dd450c7e1b59e6929e69557e122fe976e.json +99 -0
  616. package/starter/assets/fonts/roboto/source.json +57 -0
  617. package/starter/assets/logos/opendoc/asset.json +6 -0
  618. package/starter/assets/logos/opendoc/files/831d5ccd9eb6709cc8439ea257c03d81452e81a28a3d1eedbd6a3b7daff687b6.png +0 -0
  619. package/starter/assets/logos/opendoc/revisions/834dde8926ddb81de687254195a168bb13bfb77803307f1257de1f2228be63b2.json +33 -0
  620. package/starter/assets/ui-fonts/geist/OFL.txt +93 -0
  621. package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-italic.woff2 +0 -0
  622. package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-normal.woff2 +0 -0
  623. package/starter/assets/ui-fonts/geist/geist-latin-wght-italic.woff2 +0 -0
  624. package/starter/assets/ui-fonts/geist/geist-latin-wght-normal.woff2 +0 -0
  625. package/starter/assets/ui-fonts/geist/source.json +26 -0
  626. package/starter/documents/welcome/assets.json +7 -0
  627. package/starter/documents/welcome/index.tsx +160 -0
  628. package/starter/documents/welcome/media/.gitkeep +0 -0
  629. package/starter/documents/welcome/media/paper-architecture/image.png +0 -0
  630. package/starter/documents/welcome/media/paper-architecture/meta.json +9 -0
  631. package/starter/documents/welcome/media/paper-architecture/prompt.txt +1 -0
  632. package/starter/documents/welcome/media/studio-rhythm/chart.svg +2343 -0
  633. package/starter/documents/welcome/media/studio-rhythm/data.json +234 -0
  634. package/starter/documents/welcome/media/studio-rhythm/generation.json +9 -0
  635. package/starter/documents/welcome/media/studio-rhythm/image.png +0 -0
  636. package/starter/documents/welcome/media/studio-rhythm/meta.json +11 -0
  637. package/starter/documents/welcome/media/studio-rhythm/recipe.py +79 -0
  638. package/starter/documents/welcome/theme.tsx +5 -0
  639. package/starter/documents/welcome-presentation/assets.json +7 -0
  640. package/starter/documents/welcome-presentation/index.tsx +166 -0
  641. package/starter/documents/welcome-presentation/media/.gitkeep +0 -0
  642. package/starter/documents/welcome-presentation/media/paper-architecture/image.png +0 -0
  643. package/starter/documents/welcome-presentation/media/paper-architecture/meta.json +9 -0
  644. package/starter/documents/welcome-presentation/media/paper-architecture/prompt.txt +1 -0
  645. package/starter/documents/welcome-presentation/media/studio-rhythm/chart.svg +1336 -0
  646. package/starter/documents/welcome-presentation/media/studio-rhythm/data.json +234 -0
  647. package/starter/documents/welcome-presentation/media/studio-rhythm/generation.json +9 -0
  648. package/starter/documents/welcome-presentation/media/studio-rhythm/image.png +0 -0
  649. package/starter/documents/welcome-presentation/media/studio-rhythm/meta.json +13 -0
  650. package/starter/documents/welcome-presentation/media/studio-rhythm/recipe.py +49 -0
  651. package/starter/documents/welcome-presentation/theme.tsx +5 -0
  652. package/starter/projects.json +17 -0
  653. package/starter/templates/AGENTS.md +9 -0
  654. package/starter/templates/_shared/BusinessLogo.tsx +14 -0
  655. package/starter/templates/_shared/Pricing.tsx +40 -0
  656. package/starter/templates/_shared/commerce.ts +93 -0
  657. package/starter/templates/brand-guidelines/AGENTS.md +32 -0
  658. package/starter/templates/brand-guidelines/index.tsx +62 -0
  659. package/starter/templates/brand-guidelines/preview.tsx +181 -0
  660. package/starter/templates/brand-guidelines/starter.tsx +179 -0
  661. package/starter/templates/brand-guidelines/template.json +15 -0
  662. package/starter/templates/business-proposal/AGENTS.md +13 -0
  663. package/starter/templates/business-proposal/README.md +36 -0
  664. package/starter/templates/business-proposal/data.json +37 -0
  665. package/starter/templates/business-proposal/examples/long.json +142 -0
  666. package/starter/templates/business-proposal/examples/sparse.json +17 -0
  667. package/starter/templates/business-proposal/examples/typical.json +37 -0
  668. package/starter/templates/business-proposal/index.tsx +59 -0
  669. package/starter/templates/business-proposal/preview.tsx +47 -0
  670. package/starter/templates/business-proposal/schema.ts +14 -0
  671. package/starter/templates/business-proposal/starter.tsx +18 -0
  672. package/starter/templates/business-proposal/template.json +11 -0
  673. package/starter/templates/company-profile/AGENTS.md +48 -0
  674. package/starter/templates/company-profile/index.tsx +69 -0
  675. package/starter/templates/company-profile/preview.tsx +185 -0
  676. package/starter/templates/company-profile/starter.tsx +186 -0
  677. package/starter/templates/company-profile/template.json +15 -0
  678. package/starter/templates/consulting-report/AGENTS.md +11 -0
  679. package/starter/templates/consulting-report/README.md +13 -0
  680. package/starter/templates/consulting-report/RESEARCH.md +10 -0
  681. package/starter/templates/consulting-report/index.tsx +44 -0
  682. package/starter/templates/consulting-report/preview.tsx +39 -0
  683. package/starter/templates/consulting-report/starter.tsx +15 -0
  684. package/starter/templates/consulting-report/template.json +11 -0
  685. package/starter/templates/editorial-essay/AGENTS.md +11 -0
  686. package/starter/templates/editorial-essay/README.md +11 -0
  687. package/starter/templates/editorial-essay/index.tsx +30 -0
  688. package/starter/templates/editorial-essay/preview.tsx +26 -0
  689. package/starter/templates/editorial-essay/starter.tsx +15 -0
  690. package/starter/templates/editorial-essay/template.json +11 -0
  691. package/starter/templates/executive-brief/AGENTS.md +9 -0
  692. package/starter/templates/executive-brief/README.md +11 -0
  693. package/starter/templates/executive-brief/index.tsx +33 -0
  694. package/starter/templates/executive-brief/preview.tsx +37 -0
  695. package/starter/templates/executive-brief/starter.tsx +11 -0
  696. package/starter/templates/executive-brief/template.json +11 -0
  697. package/starter/templates/image-story/AGENTS.md +37 -0
  698. package/starter/templates/image-story/index.tsx +106 -0
  699. package/starter/templates/image-story/preview.tsx +33 -0
  700. package/starter/templates/image-story/starter.tsx +24 -0
  701. package/starter/templates/image-story/template.json +13 -0
  702. package/starter/templates/invoice/AGENTS.md +13 -0
  703. package/starter/templates/invoice/README.md +40 -0
  704. package/starter/templates/invoice/data.json +61 -0
  705. package/starter/templates/invoice/examples/long.json +241 -0
  706. package/starter/templates/invoice/examples/sparse.json +33 -0
  707. package/starter/templates/invoice/examples/typical.json +61 -0
  708. package/starter/templates/invoice/index.tsx +57 -0
  709. package/starter/templates/invoice/preview.tsx +12 -0
  710. package/starter/templates/invoice/schema.ts +45 -0
  711. package/starter/templates/invoice/starter.tsx +12 -0
  712. package/starter/templates/invoice/template.json +11 -0
  713. package/starter/templates/literary-text/AGENTS.md +9 -0
  714. package/starter/templates/literary-text/README.md +11 -0
  715. package/starter/templates/literary-text/index.tsx +31 -0
  716. package/starter/templates/literary-text/preview.tsx +20 -0
  717. package/starter/templates/literary-text/starter.tsx +11 -0
  718. package/starter/templates/literary-text/template.json +11 -0
  719. package/starter/templates/magazine-feature/AGENTS.md +11 -0
  720. package/starter/templates/magazine-feature/README.md +13 -0
  721. package/starter/templates/magazine-feature/index.tsx +41 -0
  722. package/starter/templates/magazine-feature/preview.tsx +34 -0
  723. package/starter/templates/magazine-feature/starter.tsx +15 -0
  724. package/starter/templates/magazine-feature/template.json +11 -0
  725. package/starter/templates/monthly-report/AGENTS.md +11 -0
  726. package/starter/templates/monthly-report/README.md +24 -0
  727. package/starter/templates/monthly-report/data.json +131 -0
  728. package/starter/templates/monthly-report/examples/long.json +519 -0
  729. package/starter/templates/monthly-report/examples/sparse.json +20 -0
  730. package/starter/templates/monthly-report/examples/typical.json +37 -0
  731. package/starter/templates/monthly-report/index.tsx +92 -0
  732. package/starter/templates/monthly-report/preview.tsx +14 -0
  733. package/starter/templates/monthly-report/schema.ts +127 -0
  734. package/starter/templates/monthly-report/starter.tsx +13 -0
  735. package/starter/templates/monthly-report/template.json +11 -0
  736. package/starter/templates/pitch-deck/AGENTS.md +32 -0
  737. package/starter/templates/pitch-deck/index.tsx +46 -0
  738. package/starter/templates/pitch-deck/preview.tsx +142 -0
  739. package/starter/templates/pitch-deck/starter.tsx +140 -0
  740. package/starter/templates/pitch-deck/template.json +15 -0
  741. package/starter/templates/proposal-deck/AGENTS.md +25 -0
  742. package/starter/templates/proposal-deck/index.tsx +52 -0
  743. package/starter/templates/proposal-deck/preview.tsx +172 -0
  744. package/starter/templates/proposal-deck/starter.tsx +168 -0
  745. package/starter/templates/proposal-deck/template.json +7 -0
  746. package/starter/templates/quotation/AGENTS.md +13 -0
  747. package/starter/templates/quotation/README.md +42 -0
  748. package/starter/templates/quotation/data.json +64 -0
  749. package/starter/templates/quotation/examples/long.json +272 -0
  750. package/starter/templates/quotation/examples/sparse.json +31 -0
  751. package/starter/templates/quotation/examples/typical.json +64 -0
  752. package/starter/templates/quotation/index.tsx +51 -0
  753. package/starter/templates/quotation/preview.tsx +12 -0
  754. package/starter/templates/quotation/schema.ts +27 -0
  755. package/starter/templates/quotation/starter.tsx +12 -0
  756. package/starter/templates/quotation/template.json +11 -0
  757. package/starter/templates/scientific-paper/AGENTS.md +11 -0
  758. package/starter/templates/scientific-paper/README.md +13 -0
  759. package/starter/templates/scientific-paper/index.tsx +47 -0
  760. package/starter/templates/scientific-paper/preview.tsx +43 -0
  761. package/starter/templates/scientific-paper/starter.tsx +15 -0
  762. package/starter/templates/scientific-paper/template.json +11 -0
  763. package/starter/themes/Specimen.tsx +54 -0
  764. package/starter/themes/civic-spectrum/components.tsx +92 -0
  765. package/starter/themes/civic-spectrum/design.md +70 -0
  766. package/starter/themes/civic-spectrum/index.ts +57 -0
  767. package/starter/themes/civic-spectrum/preview.tsx +66 -0
  768. package/starter/themes/field-manual/components.tsx +106 -0
  769. package/starter/themes/field-manual/design.md +72 -0
  770. package/starter/themes/field-manual/index.ts +57 -0
  771. package/starter/themes/field-manual/preview.tsx +82 -0
  772. package/starter/themes/index.ts +3 -0
  773. package/starter/themes/mckinsey-consulting/components.tsx +69 -0
  774. package/starter/themes/mckinsey-consulting/design.md +68 -0
  775. package/starter/themes/mckinsey-consulting/index.ts +60 -0
  776. package/starter/themes/mckinsey-consulting/preview.tsx +53 -0
  777. package/starter/themes/neutral/design.md +35 -0
  778. package/starter/themes/neutral/index.ts +21 -0
  779. package/starter/themes/neutral/preview.tsx +4 -0
  780. package/starter/themes/opendoc-neutral/components.tsx +77 -0
  781. package/starter/themes/opendoc-neutral/design.md +70 -0
  782. package/starter/themes/opendoc-neutral/index.ts +54 -0
  783. package/starter/themes/opendoc-neutral/preview.tsx +43 -0
  784. package/starter/themes/types.ts +3 -0
  785. package/tsconfig.workspace.json +24 -0
  786. package/vendor/formepdf/LICENSE +21 -0
  787. package/vendor/formepdf/README.md +97 -0
  788. package/vendor/formepdf/font-subset.patch +228 -0
  789. package/vendor/formepdf/text-writer.patch +507 -0
@@ -0,0 +1,756 @@
1
+ /**
2
+ * Markup parser: Svelte SSR output in, Forme document model out.
3
+ *
4
+ * The Forme Svelte components render namespaced placeholder tags
5
+ * (`<forme-document>`, `<forme-page>`, `<forme-view>`, `<forme-text>`)
6
+ * with a single `props` attribute holding the JSON-encoded component
7
+ * props. This module parses that markup - the emitting components and
8
+ * this parser are a matched pair inside this package. The placeholder
9
+ * tag/attribute vocabulary is an INTERNAL contract, not a public
10
+ * format: it may change in any release without notice.
11
+ *
12
+ * Whitespace is normalized to JSX-equivalent semantics so that a
13
+ * `.svelte` template and its TSX counterpart serialize identically:
14
+ * indentation and newlines never leak into text content, while
15
+ * interior spaces and interpolation boundaries are preserved. The
16
+ * Svelte compiler trims fragment edges and collapses inter-element
17
+ * whitespace before we ever see the markup, so the remaining rules
18
+ * are applied here (see `cleanJsxText`). Known divergences from JSX,
19
+ * where the compiler destroys the distinction before serialization -
20
+ * each matches how Svelte itself renders the template to the DOM:
21
+ *
22
+ * - Same-line leading/trailing spaces inside `<Text>` are trimmed
23
+ * (`<Text> a </Text>` → `"a"`; JSX keeps them).
24
+ * - Interpolations split across lines join with a single space
25
+ * (JSX drops the whitespace-only literal between them entirely).
26
+ * - Newlines inside interpolated *values* are treated like template
27
+ * text and collapse to a space.
28
+ */
29
+ import { parseFragment } from 'parse5';
30
+ import { buildAreaChartKind, buildBarChartKind, buildDotPlotKind, buildLineChartKind, buildPieChartKind, CODE_DEFAULTS, EM_DEFAULTS, expandEdges, Font, HEADING_DEFAULTS, LINK_DEFAULTS, mapColumnWidth, mapListMarker, mapStyle, mergeFonts, parseColor, STRONG_DEFAULTS, } from './index.js';
31
+ import { reviveBytesMarker } from './encode.js';
32
+ function isElement(node) {
33
+ return 'tagName' in node;
34
+ }
35
+ function isText(node) {
36
+ return node.nodeName === '#text';
37
+ }
38
+ export function parseMarkup(markup) {
39
+ const fragment = parseFragment(markup);
40
+ const root = findDocumentRoot(fragment.childNodes);
41
+ const props = decodeProps(root, 'Document');
42
+ // Separate Page children from content children
43
+ const pageNodes = [];
44
+ const contentNodes = [];
45
+ for (const child of root.childNodes) {
46
+ if (isElement(child) && child.tagName === 'forme-page') {
47
+ pageNodes.push(parsePage(child));
48
+ }
49
+ else {
50
+ const node = parseChild(child, 'Document');
51
+ if (node)
52
+ contentNodes.push(node);
53
+ }
54
+ }
55
+ // If there are page nodes, use them. Otherwise the content stands alone.
56
+ let children;
57
+ if (pageNodes.length > 0) {
58
+ // Any loose content nodes get added to the last page's children
59
+ if (contentNodes.length > 0) {
60
+ const lastPage = pageNodes[pageNodes.length - 1];
61
+ lastPage.children.push(...contentNodes);
62
+ }
63
+ children = pageNodes;
64
+ }
65
+ else {
66
+ children = contentNodes;
67
+ }
68
+ const metadata = {};
69
+ if (props.title !== undefined)
70
+ metadata.title = props.title;
71
+ if (props.author !== undefined)
72
+ metadata.author = props.author;
73
+ if (props.subject !== undefined)
74
+ metadata.subject = props.subject;
75
+ if (props.creator !== undefined)
76
+ metadata.creator = props.creator;
77
+ if (props.lang !== undefined)
78
+ metadata.lang = props.lang;
79
+ // Merge global + document fonts (document fonts override on conflict)
80
+ const mergedFonts = mergeFonts(Font.getRegistered(), props.fonts);
81
+ const result = {
82
+ children,
83
+ metadata,
84
+ defaultPage: {
85
+ size: 'A4',
86
+ margin: { top: 54, right: 54, bottom: 54, left: 54 },
87
+ wrap: true,
88
+ },
89
+ };
90
+ if (props.style)
91
+ result.defaultStyle = mapStyle(props.style);
92
+ if (props.tagged !== undefined)
93
+ result.tagged = props.tagged;
94
+ if (props.pdfa !== undefined)
95
+ result.pdfa = props.pdfa;
96
+ if (props.pdfUa)
97
+ result.pdfUa = true;
98
+ const cert = props.certification ?? props.signature;
99
+ if (cert) {
100
+ if (props.signature && !props.certification) {
101
+ console.warn('[Forme] The `signature` prop is deprecated. Use `certification` instead.');
102
+ }
103
+ result.certification = cert;
104
+ }
105
+ if (mergedFonts.length > 0) {
106
+ result.fonts = mergedFonts;
107
+ }
108
+ return result;
109
+ }
110
+ /**
111
+ * Parse one markup node into a Forme node. Returns null for nodes that
112
+ * produce no output (comments, i.e. Svelte SSR block anchors, and
113
+ * whitespace-only text between elements).
114
+ */
115
+ function parseChild(node, parent) {
116
+ if (isElement(node)) {
117
+ return parseElement(node, parent);
118
+ }
119
+ if (isText(node)) {
120
+ // Loose text directly inside a container becomes an anonymous Text
121
+ // node. Edges are trimmed: the Svelte compiler collapses the
122
+ // whitespace around inter-element newlines to a single space, so
123
+ // by the time the markup reaches the parser, indentation and
124
+ // intentional edge spaces are indistinguishable.
125
+ const content = cleanJsxText(node.value).replace(/^[ \t]+|[ \t]+$/g, '');
126
+ if (content === '')
127
+ return null;
128
+ return {
129
+ kind: { type: 'Text', content },
130
+ style: {},
131
+ children: [],
132
+ };
133
+ }
134
+ return null;
135
+ }
136
+ function parseElement(element, parent) {
137
+ switch (element.tagName) {
138
+ case 'forme-view':
139
+ return parseView(element);
140
+ case 'forme-text':
141
+ return parseText(element);
142
+ case 'forme-h1':
143
+ return parseHeading(element, 1);
144
+ case 'forme-h2':
145
+ return parseHeading(element, 2);
146
+ case 'forme-h3':
147
+ return parseHeading(element, 3);
148
+ case 'forme-h4':
149
+ return parseHeading(element, 4);
150
+ case 'forme-h5':
151
+ return parseHeading(element, 5);
152
+ case 'forme-h6':
153
+ return parseHeading(element, 6);
154
+ case 'forme-ordered-list':
155
+ return parseList(element, true);
156
+ case 'forme-unordered-list':
157
+ return parseList(element, false);
158
+ case 'forme-list-item':
159
+ return parseListItem(element);
160
+ case 'forme-table':
161
+ return parseTable(element);
162
+ case 'forme-row':
163
+ validateNesting('Row', parent);
164
+ return parseRow(element);
165
+ case 'forme-cell':
166
+ validateNesting('Cell', parent);
167
+ return parseCell(element);
168
+ case 'forme-fixed':
169
+ return parseFixed(element);
170
+ case 'forme-image':
171
+ return parseImage(element);
172
+ case 'forme-svg':
173
+ return parseSvg(element);
174
+ case 'forme-qrcode':
175
+ return parseQrCode(element);
176
+ case 'forme-barcode':
177
+ return parseBarcode(element);
178
+ case 'forme-canvas':
179
+ return parseCanvas(element);
180
+ case 'forme-watermark':
181
+ return parseWatermark(element);
182
+ case 'forme-bar-chart':
183
+ return parseChart(element, 'BarChart', buildBarChartKind);
184
+ case 'forme-line-chart':
185
+ return parseChart(element, 'LineChart', buildLineChartKind);
186
+ case 'forme-pie-chart':
187
+ return parseChart(element, 'PieChart', buildPieChartKind);
188
+ case 'forme-area-chart':
189
+ return parseChart(element, 'AreaChart', buildAreaChartKind);
190
+ case 'forme-dot-plot':
191
+ return parseChart(element, 'DotPlot', buildDotPlotKind);
192
+ case 'forme-text-field':
193
+ return parseTextField(element);
194
+ case 'forme-checkbox':
195
+ return parseCheckbox(element);
196
+ case 'forme-dropdown':
197
+ return parseDropdown(element);
198
+ case 'forme-radio-button':
199
+ return parseRadioButton(element);
200
+ case 'forme-strong':
201
+ case 'forme-em':
202
+ case 'forme-code':
203
+ case 'forme-link': {
204
+ const name = INLINE_COMPONENT_NAMES[element.tagName];
205
+ throw new Error(`<${name}> is an inline formatting component and must be inside a <Text> or heading. Wrap it: <Text><${name}>...</${name}></Text>`);
206
+ }
207
+ case 'forme-page-break':
208
+ return { kind: { type: 'PageBreak' }, style: {}, children: [] };
209
+ case 'forme-page':
210
+ validateNesting('Page', parent);
211
+ return parsePage(element);
212
+ default:
213
+ throw unknownElementError(element.tagName);
214
+ }
215
+ }
216
+ // ─── Nesting validation ──────────────────────────────────────────────
217
+ const VALID_PARENTS = {
218
+ Page: {
219
+ allowed: ['Document'],
220
+ suggestion: '<Page> must be a direct child of <Document>.',
221
+ },
222
+ Row: {
223
+ allowed: ['Table'],
224
+ suggestion: '<Row> must be inside a <Table>. Wrap it: <Table><Row>...</Row></Table>',
225
+ },
226
+ Cell: {
227
+ allowed: ['Row'],
228
+ suggestion: '<Cell> must be inside a <Row>. Wrap it: <Row><Cell>...</Cell></Row>',
229
+ },
230
+ };
231
+ function validateNesting(componentName, parent) {
232
+ const rule = VALID_PARENTS[componentName];
233
+ if (!rule)
234
+ return;
235
+ if (parent !== null && !rule.allowed.includes(parent)) {
236
+ throw new Error(`Invalid nesting: <${componentName}> found inside <${parent}>. ${rule.suggestion}`);
237
+ }
238
+ }
239
+ // ─── Unknown elements ────────────────────────────────────────────────
240
+ const HTML_SUGGESTIONS = {
241
+ div: 'View', span: 'Text', p: 'Text', h1: 'H1', h2: 'H2',
242
+ h3: 'H3', h4: 'H4', h5: 'H5', h6: 'H6', img: 'Image',
243
+ table: 'Table', tr: 'Row', td: 'Cell', ol: 'OrderedList',
244
+ ul: 'UnorderedList', li: 'ListItem', strong: 'Strong', b: 'Strong',
245
+ em: 'Em', i: 'Em', code: 'Code', a: 'Link',
246
+ };
247
+ function unknownElementError(tagName) {
248
+ const suggestion = HTML_SUGGESTIONS[tagName];
249
+ if (suggestion) {
250
+ return new Error(`HTML element <${tagName}> is not supported. Use <${suggestion}> instead.`);
251
+ }
252
+ return new Error(`Unsupported element <${tagName}> in a Forme template.`);
253
+ }
254
+ function parseChildren(nodes, parent) {
255
+ const children = [];
256
+ for (const node of nodes) {
257
+ const child = parseChild(node, parent);
258
+ if (child)
259
+ children.push(child);
260
+ }
261
+ return children;
262
+ }
263
+ function parsePage(element) {
264
+ const props = decodeProps(element, 'Page');
265
+ let size = 'A4';
266
+ if (props.size !== undefined) {
267
+ if (typeof props.size === 'string') {
268
+ size = props.size;
269
+ }
270
+ else {
271
+ size = { Custom: { width: props.size.width, height: props.size.height } };
272
+ }
273
+ }
274
+ let margin = { top: 54, right: 54, bottom: 54, left: 54 };
275
+ if (props.margin !== undefined) {
276
+ margin = expandEdges(props.margin);
277
+ }
278
+ const config = { size, margin, wrap: true };
279
+ if (props.backgroundImage !== undefined)
280
+ config.backgroundImage = props.backgroundImage;
281
+ if (props.backgroundOpacity !== undefined)
282
+ config.backgroundOpacity = props.backgroundOpacity;
283
+ if (props.backgroundSize !== undefined)
284
+ config.backgroundSize = props.backgroundSize;
285
+ if (props.backgroundPosition !== undefined)
286
+ config.backgroundPosition = props.backgroundPosition;
287
+ return {
288
+ kind: { type: 'Page', config },
289
+ style: props.style ? mapStyle(props.style) : {},
290
+ children: parseChildren(element.childNodes, 'Page'),
291
+ };
292
+ }
293
+ function parseView(element) {
294
+ const props = decodeProps(element, 'View');
295
+ const style = mapStyle(props.style);
296
+ if (props.wrap !== undefined) {
297
+ style.wrap = props.wrap;
298
+ }
299
+ const node = {
300
+ kind: { type: 'View' },
301
+ style,
302
+ children: parseChildren(element.childNodes, 'View'),
303
+ };
304
+ if (props.bookmark)
305
+ node.bookmark = props.bookmark;
306
+ if (props.href)
307
+ node.href = props.href;
308
+ return node;
309
+ }
310
+ function parseText(element) {
311
+ const props = decodeProps(element, 'Text');
312
+ const kind = { type: 'Text', content: '' };
313
+ const runs = textRunsOf(element.childNodes);
314
+ if (runs) {
315
+ kind.runs = runs;
316
+ }
317
+ else {
318
+ kind.content = textContentOf(element.childNodes);
319
+ }
320
+ if (props.href)
321
+ kind.href = props.href;
322
+ const node = {
323
+ kind,
324
+ style: mapStyle(props.style),
325
+ children: [],
326
+ };
327
+ if (props.bookmark)
328
+ node.bookmark = props.bookmark;
329
+ return node;
330
+ }
331
+ /** Inline formatting placeholder tags and their component-default
332
+ * styles. `forme-text` carries no defaults beyond the user's style -
333
+ * same table the react adapter keeps in `inlineDefaults()`. */
334
+ const INLINE_DEFAULTS = {
335
+ 'forme-text': {},
336
+ 'forme-strong': STRONG_DEFAULTS,
337
+ 'forme-em': EM_DEFAULTS,
338
+ 'forme-code': CODE_DEFAULTS,
339
+ 'forme-link': LINK_DEFAULTS,
340
+ };
341
+ const INLINE_COMPONENT_NAMES = {
342
+ 'forme-strong': 'Strong',
343
+ 'forme-em': 'Em',
344
+ 'forme-code': 'Code',
345
+ 'forme-link': 'Link',
346
+ };
347
+ /**
348
+ * Build styled text runs from a Text (or heading) element's children,
349
+ * mirroring the react adapter's `buildTextRuns`: only used when at
350
+ * least one direct child is an inline element (`<Text>`, `<Strong>`,
351
+ * `<Em>`, `<Code>`, `<Link>`) - returns null otherwise. Descent
352
+ * accumulates style and href: the outer accumulated style is overlaid
353
+ * by each inline component's defaults, which are overlaid by the
354
+ * user-supplied `style` on that element, so user style wins at every
355
+ * level. `<Strong><Em>both</Em></Strong>` produces a single run with
356
+ * bold + italic. Elements other than inline components are skipped but
357
+ * still split the surrounding text into separate runs, as react's
358
+ * per-child loop does.
359
+ */
360
+ function textRunsOf(nodes) {
361
+ if (!nodes.some(n => isElement(n) && n.tagName in INLINE_DEFAULTS))
362
+ return null;
363
+ return buildRuns(nodes, {}, undefined);
364
+ }
365
+ function buildRuns(nodes, accStyle, accHref) {
366
+ const runs = [];
367
+ let buffer = '';
368
+ const flush = () => {
369
+ const content = cleanJsxText(buffer);
370
+ buffer = '';
371
+ // JSX drops whitespace-only literals spanning lines but keeps
372
+ // same-line spaces between spans; cleanJsxText reproduces that,
373
+ // leaving only genuinely empty chunks to discard.
374
+ if (content === '')
375
+ return;
376
+ const run = { content };
377
+ if (Object.keys(accStyle).length > 0)
378
+ run.style = mapStyle(accStyle);
379
+ if (accHref)
380
+ run.href = accHref;
381
+ runs.push(run);
382
+ };
383
+ for (const node of nodes) {
384
+ if (isText(node)) {
385
+ buffer += node.value;
386
+ }
387
+ else if (isElement(node)) {
388
+ flush();
389
+ const defaults = INLINE_DEFAULTS[node.tagName];
390
+ if (defaults === undefined)
391
+ continue; // unknown element inside <Text> - skip
392
+ const props = decodeProps(node, INLINE_COMPONENT_NAMES[node.tagName] ?? 'Text');
393
+ // Cascade: outer accumulated -> this component's defaults -> user
394
+ // style. Later spreads win, so user style overrides defaults and
395
+ // outer.
396
+ const nextStyle = { ...accStyle, ...defaults, ...(props.style || {}) };
397
+ const nextHref = props.href ?? accHref;
398
+ runs.push(...buildRuns(node.childNodes, nextStyle, nextHref));
399
+ }
400
+ // Comments (SSR block anchors) fall through: the text around them
401
+ // stays one contiguous chunk.
402
+ }
403
+ flush();
404
+ return runs;
405
+ }
406
+ /**
407
+ * Parse an H1-H6 placeholder. Mirrors parseText for the children
408
+ * machinery (mixed strings + inline-formatting components produce
409
+ * runs) but emits the engine's `Heading { level }` node kind so the
410
+ * tagged-PDF builder can pick up the semantic role. Default styles per
411
+ * level are merged BEFORE the user's `style` prop, so user values win.
412
+ */
413
+ function parseHeading(element, level) {
414
+ const props = decodeProps(element, `H${level}`);
415
+ const kind = { type: 'Heading', level, content: '' };
416
+ const runs = textRunsOf(element.childNodes);
417
+ if (runs) {
418
+ kind.runs = runs;
419
+ }
420
+ else {
421
+ kind.content = textContentOf(element.childNodes);
422
+ }
423
+ if (props.href)
424
+ kind.href = props.href;
425
+ // Defaults underlay; user style wins on conflicting keys.
426
+ const mergedStyle = { ...HEADING_DEFAULTS[level], ...(props.style || {}) };
427
+ const node = {
428
+ kind,
429
+ style: mapStyle(mergedStyle),
430
+ children: [],
431
+ };
432
+ if (props.bookmark)
433
+ node.bookmark = props.bookmark;
434
+ return node;
435
+ }
436
+ function parseList(element, ordered) {
437
+ const props = decodeProps(element, ordered ? 'OrderedList' : 'UnorderedList');
438
+ const markerType = ordered
439
+ ? mapListMarker(props.type, 'decimal')
440
+ : mapListMarker(props.marker, 'disc');
441
+ const start = typeof props.start === 'number' && props.start >= 1 ? props.start : 1;
442
+ // Children must be ListItems - anything else is silently dropped to
443
+ // keep the serializer tolerant, matching the react adapter. (Loose
444
+ // whitespace and `{#if}` anchors between items are too common to be
445
+ // a real error.)
446
+ const children = element.childNodes
447
+ .filter((c) => isElement(c) && c.tagName === 'forme-list-item')
448
+ .map(c => parseListItem(c));
449
+ const node = {
450
+ kind: { type: 'List', ordered, marker_type: markerType, start },
451
+ style: mapStyle(props.style),
452
+ children,
453
+ };
454
+ if (props.bookmark)
455
+ node.bookmark = props.bookmark;
456
+ return node;
457
+ }
458
+ function parseListItem(element) {
459
+ const props = decodeProps(element, 'ListItem');
460
+ // ListItem content is laid out by the engine using layout_children,
461
+ // so whatever the user put inside serializes as the node's children.
462
+ // Loose strings auto-wrap in a Text node via parseChild, matching
463
+ // the react adapter's convention.
464
+ return {
465
+ kind: { type: 'ListItem' },
466
+ style: mapStyle(props.style),
467
+ children: parseChildren(element.childNodes, null),
468
+ };
469
+ }
470
+ /**
471
+ * Extract the merged text content of a Text element's children.
472
+ * Comments (Svelte SSR block anchors) vanish and the text around them
473
+ * is treated as one contiguous chunk, so `{#if}`/`{#each}` boundaries
474
+ * inside a `<Text>` never introduce breaks. Element children
475
+ * contribute their own descendant text (react's flattenTextContent
476
+ * recurses the same way).
477
+ */
478
+ function textContentOf(nodes) {
479
+ return cleanJsxText(rawTextOf(nodes));
480
+ }
481
+ function rawTextOf(nodes) {
482
+ let merged = '';
483
+ for (const node of nodes) {
484
+ if (isText(node))
485
+ merged += node.value;
486
+ else if (isElement(node))
487
+ merged += rawTextOf(node.childNodes);
488
+ }
489
+ return merged;
490
+ }
491
+ function parseTable(element) {
492
+ const props = decodeProps(element, 'Table');
493
+ const columns = (props.columns ?? []).map(col => ({
494
+ width: mapColumnWidth(col.width),
495
+ }));
496
+ return {
497
+ kind: { type: 'Table', columns },
498
+ style: mapStyle(props.style),
499
+ children: parseChildren(element.childNodes, 'Table'),
500
+ };
501
+ }
502
+ function parseRow(element) {
503
+ const props = decodeProps(element, 'Row');
504
+ return {
505
+ kind: { type: 'TableRow', is_header: props.header ?? false },
506
+ style: mapStyle(props.style),
507
+ children: parseChildren(element.childNodes, 'Row'),
508
+ };
509
+ }
510
+ function parseCell(element) {
511
+ const props = decodeProps(element, 'Cell');
512
+ return {
513
+ kind: { type: 'TableCell', col_span: props.colSpan ?? 1, row_span: props.rowSpan ?? 1 },
514
+ style: mapStyle(props.style),
515
+ children: parseChildren(element.childNodes, 'Cell'),
516
+ };
517
+ }
518
+ function parseFixed(element) {
519
+ const props = decodeProps(element, 'Fixed');
520
+ // Mirrors react: anything other than 'header' falls back to Footer.
521
+ const position = props.position === 'header' ? 'Header' : 'Footer';
522
+ const node = {
523
+ kind: { type: 'Fixed', position },
524
+ style: mapStyle(props.style),
525
+ children: parseChildren(element.childNodes, 'Fixed'),
526
+ };
527
+ if (props.bookmark)
528
+ node.bookmark = props.bookmark;
529
+ return node;
530
+ }
531
+ function parseImage(element) {
532
+ const props = decodeProps(element, 'Image');
533
+ const kind = { type: 'Image', src: props.src };
534
+ if (props.width !== undefined)
535
+ kind.width = props.width;
536
+ if (props.height !== undefined)
537
+ kind.height = props.height;
538
+ const node = {
539
+ kind,
540
+ style: mapStyle(props.style),
541
+ children: [],
542
+ };
543
+ if (props.href)
544
+ node.href = props.href;
545
+ if (props.alt)
546
+ node.alt = props.alt;
547
+ return node;
548
+ }
549
+ function parseSvg(element) {
550
+ const props = decodeProps(element, 'Svg');
551
+ const kind = {
552
+ type: 'Svg',
553
+ width: props.width,
554
+ height: props.height,
555
+ content: props.content ?? '',
556
+ };
557
+ if (props.viewBox)
558
+ kind.view_box = props.viewBox;
559
+ const node = {
560
+ kind,
561
+ style: mapStyle(props.style),
562
+ children: [],
563
+ };
564
+ if (props.href)
565
+ node.href = props.href;
566
+ if (props.alt)
567
+ node.alt = props.alt;
568
+ return node;
569
+ }
570
+ function parseQrCode(element) {
571
+ const props = decodeProps(element, 'QrCode');
572
+ const kind = { type: 'QrCode', data: props.data };
573
+ if (props.size !== undefined)
574
+ kind.size = props.size;
575
+ const style = mapStyle(props.style);
576
+ if (props.color)
577
+ style.color = parseColor(props.color);
578
+ return { kind, style, children: [] };
579
+ }
580
+ function parseBarcode(element) {
581
+ const props = decodeProps(element, 'Barcode');
582
+ const kind = {
583
+ type: 'Barcode',
584
+ data: props.data,
585
+ format: props.format ?? 'Code128',
586
+ height: props.height ?? 60,
587
+ };
588
+ if (props.width !== undefined)
589
+ kind.width = props.width;
590
+ const style = mapStyle(props.style);
591
+ if (props.color)
592
+ style.color = parseColor(props.color);
593
+ return { kind, style, children: [] };
594
+ }
595
+ function parseCanvas(element) {
596
+ const props = decodeProps(element, 'Canvas');
597
+ return {
598
+ kind: { type: 'Canvas', width: props.width, height: props.height, operations: props.operations },
599
+ style: mapStyle(props.style),
600
+ children: [],
601
+ };
602
+ }
603
+ function parseWatermark(element) {
604
+ const props = decodeProps(element, 'Watermark');
605
+ const fontSize = props.fontSize ?? 60;
606
+ const angle = props.angle ?? -45;
607
+ // Mirrors react: the color's alpha channel becomes opacity (multiplied
608
+ // with any style opacity); the stored color itself is fully opaque.
609
+ const parsed = parseColor(props.color ?? 'rgba(0,0,0,0.1)');
610
+ const style = mapStyle(props.style);
611
+ style.color = { r: parsed.r, g: parsed.g, b: parsed.b, a: 1 };
612
+ style.opacity = parsed.a * (style.opacity ?? 1);
613
+ style.fontSize = fontSize;
614
+ return {
615
+ kind: { type: 'Watermark', text: props.text, font_size: fontSize, angle },
616
+ style,
617
+ children: [],
618
+ };
619
+ }
620
+ function parseTextField(element) {
621
+ const props = decodeProps(element, 'TextField');
622
+ const kind = {
623
+ type: 'TextField',
624
+ name: props.name,
625
+ width: props.width,
626
+ height: props.height ?? 24,
627
+ multiline: props.multiline ?? false,
628
+ password: props.password ?? false,
629
+ read_only: props.readOnly ?? false,
630
+ font_size: props.fontSize ?? 12,
631
+ };
632
+ if (props.value !== undefined)
633
+ kind.value = props.value;
634
+ if (props.placeholder !== undefined)
635
+ kind.placeholder = props.placeholder;
636
+ if (props.maxLength !== undefined)
637
+ kind.max_length = props.maxLength;
638
+ return { kind, style: mapStyle(props.style), children: [] };
639
+ }
640
+ function parseCheckbox(element) {
641
+ const props = decodeProps(element, 'Checkbox');
642
+ return {
643
+ kind: {
644
+ type: 'Checkbox',
645
+ name: props.name,
646
+ checked: props.checked ?? false,
647
+ width: props.width ?? 14,
648
+ height: props.height ?? 14,
649
+ read_only: props.readOnly ?? false,
650
+ },
651
+ style: mapStyle(props.style),
652
+ children: [],
653
+ };
654
+ }
655
+ function parseDropdown(element) {
656
+ const props = decodeProps(element, 'Dropdown');
657
+ const kind = {
658
+ type: 'Dropdown',
659
+ name: props.name,
660
+ options: props.options,
661
+ width: props.width,
662
+ height: props.height ?? 24,
663
+ read_only: props.readOnly ?? false,
664
+ font_size: props.fontSize ?? 12,
665
+ };
666
+ if (props.value !== undefined)
667
+ kind.value = props.value;
668
+ return { kind, style: mapStyle(props.style), children: [] };
669
+ }
670
+ function parseRadioButton(element) {
671
+ const props = decodeProps(element, 'RadioButton');
672
+ return {
673
+ kind: {
674
+ type: 'RadioButton',
675
+ name: props.name,
676
+ value: props.value,
677
+ checked: props.checked ?? false,
678
+ width: props.width ?? 14,
679
+ height: props.height ?? 14,
680
+ read_only: props.readOnly ?? false,
681
+ },
682
+ style: mapStyle(props.style),
683
+ children: [],
684
+ };
685
+ }
686
+ // ─── Charts ──────────────────────────────────────────────────────────
687
+ /**
688
+ * Parse one chart placeholder. The camelCase-to-snake_case prop
689
+ * mapping (and its defaults) lives in the shared kind builders, the
690
+ * same functions the react adapter serializes with, so the two
691
+ * adapters cannot drift.
692
+ */
693
+ function parseChart(element, component, buildKind) {
694
+ const props = decodeProps(element, component);
695
+ return {
696
+ kind: buildKind(props),
697
+ style: mapStyle(props.style),
698
+ children: [],
699
+ };
700
+ }
701
+ // ─── Whitespace normalization ────────────────────────────────────────
702
+ /**
703
+ * Normalize template text to JSX-equivalent semantics - the same
704
+ * algorithm Babel, TypeScript, and esbuild apply to JSX text literals:
705
+ *
706
+ * - lines are trimmed (leading whitespace on all but the first line,
707
+ * trailing whitespace on all but the last line) and joined with a
708
+ * single space; whitespace-only lines are dropped
709
+ * - tabs count as spaces
710
+ * - only ASCII space/tab are trimmed, so non-breaking spaces survive
711
+ */
712
+ function cleanJsxText(text) {
713
+ const lines = text.split(/\r\n|\n|\r/);
714
+ let lastNonEmptyLine = 0;
715
+ for (let i = 0; i < lines.length; i++) {
716
+ if (/[^ \t]/.test(lines[i]))
717
+ lastNonEmptyLine = i;
718
+ }
719
+ let str = '';
720
+ for (let i = 0; i < lines.length; i++) {
721
+ const isFirstLine = i === 0;
722
+ const isLastLine = i === lines.length - 1;
723
+ const isLastNonEmptyLine = i === lastNonEmptyLine;
724
+ let trimmed = lines[i].replace(/\t/g, ' ');
725
+ if (!isFirstLine)
726
+ trimmed = trimmed.replace(/^ +/, '');
727
+ if (!isLastLine)
728
+ trimmed = trimmed.replace(/ +$/, '');
729
+ if (trimmed) {
730
+ if (!isLastNonEmptyLine)
731
+ trimmed += ' ';
732
+ str += trimmed;
733
+ }
734
+ }
735
+ return str;
736
+ }
737
+ function findDocumentRoot(nodes) {
738
+ for (const node of nodes) {
739
+ if (isElement(node) && node.tagName === 'forme-document') {
740
+ return node;
741
+ }
742
+ }
743
+ throw new Error('Top-level element must be <Document>');
744
+ }
745
+ /** Decode the JSON `props` attribute of a placeholder element. */
746
+ function decodeProps(element, component) {
747
+ const attr = element.attrs.find(a => a.name === 'props');
748
+ if (attr === undefined)
749
+ return {};
750
+ try {
751
+ return JSON.parse(attr.value, reviveBytesMarker);
752
+ }
753
+ catch (err) {
754
+ throw new Error(`[Forme] <${component}>: failed to decode props attribute: ${err instanceof Error ? err.message : String(err)}`);
755
+ }
756
+ }