@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,142 @@
1
+ {
2
+ "synthetic": true,
3
+ "pricing": {
4
+ "currency": {
5
+ "code": "USD",
6
+ "decimals": 2
7
+ },
8
+ "items": [
9
+ {
10
+ "id": "deliverable-1",
11
+ "description": "Illustrative deliverable 1: a bounded package of work, with its scope and review conditions supplied by the author.",
12
+ "quantity": "1",
13
+ "unit": "package",
14
+ "unitPrice": "400.00"
15
+ },
16
+ {
17
+ "id": "deliverable-2",
18
+ "description": "Illustrative deliverable 2: a bounded package of work, with its scope and review conditions supplied by the author.",
19
+ "quantity": "1",
20
+ "unit": "package",
21
+ "unitPrice": "400.00"
22
+ },
23
+ {
24
+ "id": "deliverable-3",
25
+ "description": "Illustrative deliverable 3: a bounded package of work, with its scope and review conditions supplied by the author.",
26
+ "quantity": "1",
27
+ "unit": "package",
28
+ "unitPrice": "400.00"
29
+ },
30
+ {
31
+ "id": "deliverable-4",
32
+ "description": "Illustrative deliverable 4: a bounded package of work, with its scope and review conditions supplied by the author.",
33
+ "quantity": "1",
34
+ "unit": "package",
35
+ "unitPrice": "400.00"
36
+ },
37
+ {
38
+ "id": "deliverable-5",
39
+ "description": "Illustrative deliverable 5: a bounded package of work, with its scope and review conditions supplied by the author.",
40
+ "quantity": "1",
41
+ "unit": "package",
42
+ "unitPrice": "400.00"
43
+ },
44
+ {
45
+ "id": "deliverable-6",
46
+ "description": "Illustrative deliverable 6: a bounded package of work, with its scope and review conditions supplied by the author.",
47
+ "quantity": "1",
48
+ "unit": "package",
49
+ "unitPrice": "400.00"
50
+ },
51
+ {
52
+ "id": "deliverable-7",
53
+ "description": "Illustrative deliverable 7: a bounded package of work, with its scope and review conditions supplied by the author.",
54
+ "quantity": "1",
55
+ "unit": "package",
56
+ "unitPrice": "400.00"
57
+ },
58
+ {
59
+ "id": "deliverable-8",
60
+ "description": "Illustrative deliverable 8: a bounded package of work, with its scope and review conditions supplied by the author.",
61
+ "quantity": "1",
62
+ "unit": "package",
63
+ "unitPrice": "400.00"
64
+ },
65
+ {
66
+ "id": "deliverable-9",
67
+ "description": "Illustrative deliverable 9: a bounded package of work, with its scope and review conditions supplied by the author.",
68
+ "quantity": "1",
69
+ "unit": "package",
70
+ "unitPrice": "400.00"
71
+ },
72
+ {
73
+ "id": "deliverable-10",
74
+ "description": "Illustrative deliverable 10: a bounded package of work, with its scope and review conditions supplied by the author.",
75
+ "quantity": "1",
76
+ "unit": "package",
77
+ "unitPrice": "400.00"
78
+ },
79
+ {
80
+ "id": "deliverable-11",
81
+ "description": "Illustrative deliverable 11: a bounded package of work, with its scope and review conditions supplied by the author.",
82
+ "quantity": "1",
83
+ "unit": "package",
84
+ "unitPrice": "400.00"
85
+ },
86
+ {
87
+ "id": "deliverable-12",
88
+ "description": "Illustrative deliverable 12: a bounded package of work, with its scope and review conditions supplied by the author.",
89
+ "quantity": "1",
90
+ "unit": "package",
91
+ "unitPrice": "400.00"
92
+ },
93
+ {
94
+ "id": "deliverable-13",
95
+ "description": "Illustrative deliverable 13: a bounded package of work, with its scope and review conditions supplied by the author.",
96
+ "quantity": "1",
97
+ "unit": "package",
98
+ "unitPrice": "400.00"
99
+ },
100
+ {
101
+ "id": "deliverable-14",
102
+ "description": "Illustrative deliverable 14: a bounded package of work, with its scope and review conditions supplied by the author.",
103
+ "quantity": "1",
104
+ "unit": "package",
105
+ "unitPrice": "400.00"
106
+ },
107
+ {
108
+ "id": "deliverable-15",
109
+ "description": "Illustrative deliverable 15: a bounded package of work, with its scope and review conditions supplied by the author.",
110
+ "quantity": "1",
111
+ "unit": "package",
112
+ "unitPrice": "400.00"
113
+ },
114
+ {
115
+ "id": "deliverable-16",
116
+ "description": "Illustrative deliverable 16: a bounded package of work, with its scope and review conditions supplied by the author.",
117
+ "quantity": "1",
118
+ "unit": "package",
119
+ "unitPrice": "400.00"
120
+ },
121
+ {
122
+ "id": "deliverable-17",
123
+ "description": "Illustrative deliverable 17: a bounded package of work, with its scope and review conditions supplied by the author.",
124
+ "quantity": "1",
125
+ "unit": "package",
126
+ "unitPrice": "400.00"
127
+ },
128
+ {
129
+ "id": "deliverable-18",
130
+ "description": "Illustrative deliverable 18: a bounded package of work, with its scope and review conditions supplied by the author.",
131
+ "quantity": "1",
132
+ "unit": "package",
133
+ "unitPrice": "400.00"
134
+ }
135
+ ],
136
+ "discount": "25.00",
137
+ "tax": {
138
+ "label": "Illustrative tax",
139
+ "ratePercent": "10"
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "synthetic": true,
3
+ "pricing": {
4
+ "currency": {
5
+ "code": "USD",
6
+ "decimals": 2
7
+ },
8
+ "items": [
9
+ {
10
+ "id": "service",
11
+ "description": "Illustrative service",
12
+ "quantity": "1",
13
+ "unitPrice": "100.00"
14
+ }
15
+ ]
16
+ }
17
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "synthetic": true,
3
+ "pricing": {
4
+ "currency": {
5
+ "code": "USD",
6
+ "decimals": 2
7
+ },
8
+ "items": [
9
+ {
10
+ "id": "planning",
11
+ "description": "Content planning workshop",
12
+ "quantity": "2.5",
13
+ "unit": "hours",
14
+ "unitPrice": "160.00"
15
+ },
16
+ {
17
+ "id": "writing",
18
+ "description": "Website copy package: supplied scope and agreed deliverables",
19
+ "quantity": "1",
20
+ "unit": "package",
21
+ "unitPrice": "600.00"
22
+ },
23
+ {
24
+ "id": "review",
25
+ "description": "Review and revision sessions",
26
+ "quantity": "3",
27
+ "unit": "hours",
28
+ "unitPrice": "75.00"
29
+ }
30
+ ],
31
+ "discount": "25.00",
32
+ "tax": {
33
+ "label": "Illustrative tax",
34
+ "ratePercent": "10"
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,59 @@
1
+ import type { ReactNode } from 'react';
2
+ import * as F from '@formepdf/react';
3
+ import { TextSlot, Block, Document, Heading, Paragraph, References, Strong, Page } from 'opendoc';
4
+ import { themePage, type DocTheme } from 'opendoc/themes';
5
+ import { BusinessLogo } from '../_shared/BusinessLogo';
6
+ import { Pricing } from '../_shared/Pricing';
7
+ import type { ProposalPricingData } from './schema';
8
+ export { parseProposalPricing } from './schema';
9
+ export type { ProposalPricingData } from './schema';
10
+
11
+ export function BusinessProposal({ title, theme, subtitle, preparedFor, preparedBy, date, reference, cover = false, openingNote, acceptance, runningTitle, titleStyle, logo, children, references }: {
12
+ title: string; theme: DocTheme; subtitle?: ReactNode; preparedFor?: string; preparedBy?: string; date?: string; reference?: string;
13
+ cover?: boolean; openingNote?: ReactNode; acceptance?: ReactNode; runningTitle?: string; titleStyle?: F.Style; logo?: ReactNode;
14
+ children: ReactNode; references?: Parameters<typeof Document>[0]['references'];
15
+ }) {
16
+ const layoutTheme: DocTheme = theme.design ? theme : { ...theme, fontSize: 11, lineHeight: 1.45, paragraphGap: 10 };
17
+ const opening = <F.View style={{ ...theme.design?.title?.block, ...(cover ? theme.design?.cover?.block : undefined) }}>
18
+ <F.View wrap={false} style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: cover ? 48 : 14 }}>
19
+ <Paragraph id="proposal-label" role="label" baseStyle={{ fontSize: 9, letterSpacing: 0.8, color: theme.muted, marginBottom: 0 }} style={{ ...theme.design?.title?.eyebrow, ...(cover ? theme.design?.cover?.eyebrow : undefined) }}>BUSINESS PROPOSAL</Paragraph>
20
+ <BusinessLogo id="proposal-logo" theme={cover ? { ...theme, muted: theme.design?.cover?.eyebrow?.color ?? theme.muted } : theme}>{logo}</BusinessLogo>
21
+ </F.View>
22
+ <Heading id="proposal-title" level={1} baseStyle={{ fontSize: cover ? 40 : 30, lineHeight: 1.12, marginBottom: 16 }} style={{ ...theme.design?.title?.heading, ...(cover ? theme.design?.cover?.title : undefined), ...titleStyle }}><TextSlot slot="title" from="title">{title}</TextSlot></Heading>
23
+ {subtitle && <Paragraph id="proposal-subtitle" role="lead" baseStyle={{ fontSize: cover ? 17 : 14, lineHeight: 1.4, color: theme.muted, marginBottom: 22 }} style={{ ...theme.design?.title?.subtitle, ...(cover ? theme.design?.cover?.subtitle : undefined) }}><TextSlot slot="subtitle" from="subtitle">{subtitle}</TextSlot></Paragraph>}
24
+ {(preparedFor || preparedBy) && <Block id="proposal-parties" style={{ marginTop: cover ? 36 : 0, marginBottom: 16 }}>
25
+ {preparedFor && <Paragraph id="proposal-client" role="small" baseStyle={{ fontSize: 10, marginBottom: 6 }} style={{ ...theme.design?.title?.byline, ...(cover ? theme.design?.cover?.byline : undefined) }}><Strong>Prepared for </Strong><TextSlot slot="preparedFor" from="preparedFor">{preparedFor}</TextSlot></Paragraph>}
26
+ {preparedBy && <Paragraph id="proposal-author" role="small" baseStyle={{ fontSize: 10, marginBottom: 6 }} style={{ ...theme.design?.title?.byline, ...(cover ? theme.design?.cover?.byline : undefined) }}><Strong>Prepared by </Strong><TextSlot slot="preparedBy" from="preparedBy">{preparedBy}</TextSlot></Paragraph>}
27
+ </Block>}
28
+ {(date || reference) && <Paragraph id="proposal-reference" role="small" baseStyle={{ fontSize: 9, color: theme.muted, marginBottom: 18 }} style={{ ...theme.design?.title?.byline, ...(cover ? theme.design?.cover?.byline : undefined) }}>{date && <TextSlot slot="date" from="date">{date}</TextSlot>}{date && reference ? ' · ' : ''}{reference && <TextSlot slot="reference" from="reference">{reference}</TextSlot>}</Paragraph>}
29
+ {openingNote && <Paragraph id="proposal-opening-note" role="small" baseStyle={{ fontSize: 9, color: theme.muted, marginBottom: 20 }} style={cover ? theme.design?.cover?.byline : undefined}><TextSlot slot="openingNote" from="openingNote">{openingNote}</TextSlot></Paragraph>}
30
+ </F.View>;
31
+ return <Document title={title} author={preparedBy} theme={layoutTheme} references={references}>
32
+ {cover && <Page {...themePage(theme, { top: 66, bottom: 58, left: 54, right: 54 })} style={{ lineBreaking: 'greedy', ...theme.design?.page?.style, ...theme.design?.cover?.page }}>{opening}</Page>}
33
+ <Page {...themePage(theme, { top: 54, bottom: 58, left: 54, right: 54 })} style={{ lineBreaking: 'greedy', ...theme.design?.page?.style }}>
34
+ {runningTitle && (!theme.design || theme.runningHeader) && <F.Fixed position="header"><F.Text style={{ fontFamily: theme.design ? theme.body : undefined, fontSize: 8, color: theme.muted, ...theme.design?.furniture?.text, ...theme.design?.furniture?.header }}>{theme.design?.furniture?.uppercaseHeader ? runningTitle.toUpperCase() : runningTitle}</F.Text></F.Fixed>}
35
+ {(!theme.design || theme.runningFooter) && <F.Fixed position="footer"><F.Text style={{ fontFamily: theme.design ? theme.body : undefined, fontSize: 8, color: theme.muted, textAlign: 'right', ...theme.design?.furniture?.text, ...theme.design?.furniture?.footer }}>{theme.design?.furniture?.pageNumber === 'total' ? '{{pageNumber}} / {{totalPages}}' : '{{pageNumber}}'}</F.Text></F.Fixed>}
36
+ {!cover && opening}
37
+ {children}
38
+ <References headingBaseStyle={{ fontSize: 13, marginTop: 20, marginBottom: 8 }} />
39
+ {acceptance && <>
40
+ <Paragraph id="proposal-acceptance" role="small" baseStyle={{ fontSize: 10, marginTop: 16 }}><Strong>Acceptance. </Strong><TextSlot slot="acceptance" from="acceptance">{acceptance}</TextSlot></Paragraph>
41
+ <Block id="proposal-signature-fields" style={{ marginTop: 10 }}><F.View wrap={false} style={{ flexDirection: 'row', gap: 22 }}>
42
+ {['Name', 'Signature', 'Date'].map(label => <F.View key={label} style={{ flex: 1 }}><F.View style={{ height: 24, borderBottomWidth: 0.6, borderColor: theme.line }} /><F.Text style={{ fontSize: 8, color: theme.muted, marginTop: 5, ...theme.design?.typography?.small }}>{label}</F.Text></F.View>)}
43
+ </F.View></Block>
44
+ </>}
45
+ </Page>
46
+ </Document>;
47
+ }
48
+
49
+ export function ProposalHeading({ id, style, children }: { id: string; style?: F.Style; children: ReactNode }) {
50
+ return <Heading id={id} level={2} baseStyle={{ fontSize: 16, marginTop: 16, marginBottom: 8 }} style={style}><TextSlot slot="children" from="children">{children}</TextSlot></Heading>;
51
+ }
52
+
53
+ /** Optional validated pricing can sit anywhere in the author's proposal. */
54
+ export function ProposalPricing({ id, data, theme }: { id: string; data: ProposalPricingData; theme: DocTheme }) {
55
+ return <>
56
+ {data.synthetic && <Paragraph id={`${id}-notice`} role="small" baseStyle={{ fontSize: 9, color: theme.muted }}>Illustrative pricing only. All items, amounts, and rates are synthetic; this is not a commercial offer.</Paragraph>}
57
+ <Pricing id={id} data={data.pricing} theme={theme} totalLabel="Proposed total" />
58
+ </>;
59
+ }
@@ -0,0 +1,47 @@
1
+ import * as F from '@formepdf/react';
2
+ import { DataTable, Paragraph, Strong } from 'opendoc';
3
+ import { neutral } from '../../themes';
4
+ import { type DocTheme } from 'opendoc/themes';
5
+ import { BusinessProposal, ProposalHeading, ProposalPricing, parseProposalPricing } from './index';
6
+ import typical from './examples/typical.json';
7
+ import sparse from './examples/sparse.json';
8
+ import long from './examples/long.json';
9
+
10
+ export const meta = { title: 'Business proposal', description: 'A Neutral proposal specimen with illustrative prose, scope, and pricing.', kind: 'proposal' as const, theme: 'neutral' };
11
+ const paragraph = 'This is placeholder prose for the proposal. It demonstrates how the author can explain the work, its boundaries, and the value it is intended to create. No client need, capability, or outcome is being claimed. In an authored proposal, the reader and the actual work determine the sequence, evidence, and level of detail.';
12
+
13
+ export function Specimen({ length = 'typical', theme = neutral, cover = false, priced = true }: { length?: 'sparse' | 'typical' | 'long'; theme?: DocTheme; cover?: boolean; priced?: boolean } = {}) {
14
+ const minimal = length === 'sparse';
15
+ const pricing = parseProposalPricing({ sparse, typical, long }[length]);
16
+ return <BusinessProposal title={meta.title} theme={theme} cover={cover}
17
+ subtitle={minimal ? undefined : 'A clear account of the work, its delivery, and the commercial details.'}
18
+ preparedFor={minimal ? undefined : 'Example client'} preparedBy={minimal ? undefined : 'Example team'}
19
+ date={minimal ? undefined : 'Date placeholder'} reference={minimal ? undefined : 'Proposal reference placeholder'}
20
+ openingNote={minimal ? undefined : 'Illustrative layout specimen. All parties, scope, schedules, and amounts are placeholders; no real offer or evidence is claimed.'}
21
+ runningTitle={cover || length === 'long' ? 'Proposal · Example client' : undefined}
22
+ acceptance={minimal ? undefined : 'Optional acceptance wording placeholder. Supply the actual review and approval process, or omit this area if acceptance is recorded elsewhere.'}>
23
+ <F.View wrap={false}>
24
+ <ProposalHeading id="specimen-opening-heading">The proposed work</ProposalHeading>
25
+ <Paragraph id="specimen-opening-lead">A short opening stays with its heading. The author chooses the argument and organization; this specimen supplies a layout, not a sales method.</Paragraph>
26
+ </F.View>
27
+ <Paragraph id="specimen-opening">{paragraph}</Paragraph>
28
+ {!minimal && <>
29
+ {length === 'long' && Array.from({ length: 10 }, (_, index) => <Paragraph key={index} id={`specimen-detail-${index + 1}`}>{paragraph}</Paragraph>)}
30
+ <F.View wrap={false}>
31
+ <ProposalHeading id="specimen-schedule-heading">Deliverables and timing</ProposalHeading>
32
+ <Paragraph id="specimen-schedule-lead">This illustrative schedule shows how scope and timing can share a table. Replace it with the actual commitments and dependencies.</Paragraph>
33
+ </F.View>
34
+ <DataTable id="specimen-schedule" columns={[{ label: 'Deliverable', width: 2 }, { label: 'Timing', width: 1.3 }, { label: 'Review', width: 1.5 }]}
35
+ rows={Array.from({ length: length === 'long' ? 18 : 3 }, (_, index) => [`Example deliverable ${index + 1}`, 'Timing placeholder', 'Review placeholder'])} />
36
+ </>}
37
+ {priced && <>
38
+ <F.View wrap={false} style={{ breakBefore: !minimal }}>
39
+ <ProposalHeading id="specimen-pricing-heading">Commercial details</ProposalHeading>
40
+ <Paragraph id="specimen-pricing-lead">A separate pricing section gives the numbers room to read. Its position is an authored choice; pricing can move or be omitted.</Paragraph>
41
+ </F.View>
42
+ <ProposalPricing id="specimen-pricing" data={pricing} theme={theme} />
43
+ {!minimal && <Paragraph id="specimen-commercial-note" style={{ fontSize: 10 }}><Strong>Commercial note. </Strong>This placeholder makes room for supplied assumptions, exclusions, and payment terms. No condition is invented by the template.</Paragraph>}
44
+ </>}
45
+ </BusinessProposal>;
46
+ }
47
+ export default Specimen;
@@ -0,0 +1,14 @@
1
+ import { validateTemplateInput } from 'opendoc/template';
2
+ import { object, parsePricing, type PricingData } from '../_shared/commerce';
3
+
4
+ /** Only optional commercial data has a schema; proposal prose remains ordinary authored blocks. */
5
+ export interface ProposalPricingData { synthetic: boolean; pricing: PricingData }
6
+ function parseProposalPricingInput(input: unknown): ProposalPricingData {
7
+ const value = object(input, ['synthetic', 'pricing'], 'proposalPricing');
8
+ if (typeof value.synthetic !== 'boolean') throw new Error('proposalPricing.synthetic: explicitly supply true or false.');
9
+ return { synthetic: value.synthetic, pricing: parsePricing(value.pricing) };
10
+ }
11
+
12
+ export function parseProposalPricing(input: unknown): ProposalPricingData {
13
+ return validateTemplateInput(parseProposalPricingInput, input);
14
+ }
@@ -0,0 +1,18 @@
1
+ import { BusinessProposal, ProposalPricing, parseProposalPricing } from '../../templates/business-proposal';
2
+ import { Paragraph } from 'opendoc';
3
+ // @ts-ignore The selected local theme module is inserted when this starter becomes a document.
4
+ import { theme } from "__OPENDOC_THEME_MODULE__";
5
+ import data from './data.json';
6
+ const title = "__OPENDOC_TITLE__";
7
+ const documentId = "__OPENDOC_DOCUMENT_ID__";
8
+ const themeId = "__OPENDOC_THEME__";
9
+ const pricing = parseProposalPricing(data);
10
+ export const meta = { title, description: 'A business proposal, ready for your content.', kind: 'proposal' as const, theme: themeId };
11
+ export const provenance = { template: 'templates/business-proposal/index.tsx', dataFile: `documents/${documentId}/data.json` };
12
+ // Bind a shared logo, pass <Logo slot="primary" /> through the logo option, or pass null to omit it.
13
+ export default function Proposal() {
14
+ return <BusinessProposal title={title} theme={theme} preparedFor="Client name" preparedBy="Your team">
15
+ <Paragraph id="proposal-opening">Your proposal begins here. Explain the work in the order that serves the reader, and add the scope, deliverables, schedule, and evidence it needs.</Paragraph>
16
+ <ProposalPricing id="proposal-commercial" data={pricing} theme={theme} />
17
+ </BusinessProposal>;
18
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "Business proposal",
3
+ "description": "A clear proposal opening, readable sections, and space for scope, delivery, and optional calculated pricing. A separate cover and acceptance area are available for documents that need them.",
4
+ "format": "A4 \u00b7 Proposal with optional cover",
5
+ "structure": [
6
+ "A substantial title, optional subtitle, and prepared-for/by details introduce the proposal. Short proposals begin on the body page; a cover is optional. An optional logo slot sits at the upper right.",
7
+ "A broad reading column supports prose, deliverables, schedules, and exhibits in the author's chosen order.",
8
+ "Optional pricing uses validated data and calculated totals. It can sit wherever it helps the proposal, or be omitted entirely.",
9
+ "References and an optional acceptance area follow the body. Long material flows naturally, with quiet page numbers and an optional running title."
10
+ ]
11
+ }
@@ -0,0 +1,48 @@
1
+ # Company profile
2
+
3
+ A credible introduction to an organization, designed like an architectural portfolio: a strong left edge, long rules, generous photographs, numbered capability rows, and a clear shift from identity to proof. The catalog is a neutral skeleton with replaceable placeholders. It makes no claims about any real business.
4
+
5
+ ## What the sequence is for
6
+
7
+ The twelve-slide specimen is a starting conversation, not a mandatory corporate history. Start with a plain-language company introduction and facts the reader needs; give purpose a practical consequence; explain capabilities and relevant sectors; show how work gets done; then demonstrate one project, the people, presence, and documented assurances behind it. End with a real contact and a useful next conversation. It deliberately excludes the funding ask of a pitch and the buyer-specific scope, price, and acceptance of a proposal.
8
+
9
+ 1. **Cover:** company identity, audience/edition, short positioning, and a tall signature image.
10
+ 2. **Snapshot:** what the company does beside four substantiated facts. Prefer relevant capacity over vanity metrics.
11
+ 3. **Point of view:** one belief paired with a decision or behavior it changes.
12
+ 4. **Capabilities:** three distinct capabilities, each tied to a customer need and deliverable. Repeat the ledger if necessary.
13
+ 5. **Sectors:** an unequal image spread that shows real contexts and applications.
14
+ 6. **Operating model:** four stages, each with a concrete output. Rename, remove, or change the number of stages to fit the actual organization.
15
+ 7. **Selected work — context:** a large project image, client/context, specific company role, period, and status.
16
+ 8. **Selected work — evidence:** challenge, company contribution, observed result, and an explicit evidence/method note. A qualitative result is preferable to an invented metric.
17
+ 9. **Presence:** a location ledger with truthful delivery reach. An office, a partner, a former project, and remote coverage are different facts; never imply a map of owned offices without evidence.
18
+ 10. **People:** portraits with relevant expertise and accountability. One founder or a working team may be more relevant than a leadership parade.
19
+ 11. **Credentials and responsibility:** optional documentary register; exact issuer, scope, status/date, and evidence. Remove rows or the slide when nothing relevant is substantiated.
20
+ 12. **Contact:** a named person, direct contact information, and a useful invitation.
21
+
22
+ For a short introduction, keep slides 1, 2, 4, 7–8, and 12. A small or new company may replace corporate past performance with honestly attributed prior work of team members, a disclosed demonstration, or relevant expertise. Do not relabel prior-employer work as company delivery. A product business can replace the method slide with a product-system overview; an established group may replace purpose with a brief milestone timeline when history explains its present capability. These are content-led variations, not universal requirements.
23
+
24
+ ## Research behind the skeleton
25
+
26
+ Read September 11, 2026. The structure is a synthesis, not a claim that these organizations endorse a twelve-slide deck. No source company facts, identities, artwork, or claims are copied into the specimen.
27
+
28
+ - [U.S. Small Business Administration — How to Prepare a Winning Capability Statement](https://legacy.sba.gov/event/85955): the SBA's published workshop outline identifies company profile, competencies, differentiated value, past performance, industries, credentials, company facts, clients, and contact. This informed the profile's buyer-useful content and evidence sequence. A capability statement is usually shorter; this deck expands those questions into visual presentation space. Government procurement identifiers belong only in a relevant local adaptation.
29
+ - [DHL Group — About us](https://group.dhl.com/en/about-us.html): this official profile separates a concise organizational description, current figures, service portfolio, operating structure, commitments, and fact-sheet downloads. That separation informed the snapshot, capabilities, method, and assurance slides. The deck asks authors to specify the period/scope behind their own figures.
30
+ - [Turner & Townsend — Who we are](https://www.turnerandtownsend.com/who-we-are/): the official profile brings people, leadership, key facts, purpose, values in practice, and corporate responsibility together. It informed the connection between purpose and actual behavior, the people slide, and a documented responsibility section. Photography is a primary storytelling surface, paired with concrete content.
31
+
32
+ ## Authoring contract
33
+
34
+ Create through `pnpm run create -- <id> --project <project-id> --template company-profile --title "Company name"`. The descriptor records presentation format. Keep the generated theme adapter and saved asset bindings. All initial story content lives in the instance's `index.tsx`; shared `index.tsx` supplies composition primitives. A template revision changes shared layout, so keep adaptations for one company local.
35
+
36
+ `CompanyProfile` is the native `Presentation` root. `ProfileSlide` takes a stable `id`, caller `theme`, native `title`, optional `eyebrow`, `folio`, `footer`, and content; `cover` uses a narrower title region and large type. `titleSize` is an explicit local adjustment for long names. `ProfileRegion` is a bounded rectangle (`x`, `y`, `width`, `height`) for ordinary content. `ProfileText`, `ProfileRow`, `ProfileRule`, and `ProfileImage` are small reusable primitives. Text remains native and IDs remain stable when slides move. Folios are visual labels: update them after reordering, never use them as IDs.
37
+
38
+ Every slide is 960 × 540. Default title regions occupy y=72–188, ordinary content y=196–482, and the footer starts at y=496. The large cover title occupies x=40–504, y=142–344; its content starts at y=354. Keep these regions separate. Adjust title size, image balance, or column measures when useful; add a slide when content outgrows its region. There is no automatic shrinking or hidden overflow. A clipping/preflight error requires an explicit revision. Fonts, colors, and page treatment come from the caller's theme; presentation sizes remain intentional so document-size roles do not make slides illegible.
39
+
40
+ ## Photographs and evidence
41
+
42
+ `ProfileImage` shows a labelled placeholder when `image` is omitted. Supply `image={{item:'local-media-id',fit:'cover',position:{x:0.5,y:0.5}}}` to use a managed `MediaFrame`. Broken named media fails visibly rather than becoming a placeholder. Use `contain` for product screens or diagrams whose edges carry information. Replace placeholder captions with accurate descriptions and attribution as appropriate. No stock photography or source company artwork is bundled.
43
+
44
+ Import actual imagery into the instance's `media/<id>/` folders through [Media](../../docs/MEDIA.md). A full photo, a technical detail, and a portrait carry different information; use the deliberately unequal frames to express that hierarchy. Review actual crops, image visibility, captions, and contrast on every affected slide. A short deck should remove unnecessary image slots rather than fill them with decoration.
45
+
46
+ Never invent client names, testimonials, metrics, certifications, awards, geographic presence, or sustainability achievements. Ask for evidence or use explicit placeholders. Distinguish a target from a result, a registration from a certification, and a capability from past delivery. Use accurate approved anonymization where confidentiality requires it. The bracketed text is drafting guidance, not finished business copy; replace or remove it before sharing externally.
47
+
48
+ Review every rendered PDF slide after adaptation, extract representative native text, and verify one page per slide. The automated tests exercise normal creation, independent editable instance content, selected themes, bounded sparse/long cases, and explicit overflow rejection. Catalog specimens and acceptance proofs stay outside the user's document library.
@@ -0,0 +1,69 @@
1
+ import type { ReactNode } from 'react';
2
+ import * as F from '@formepdf/react';
3
+ import { Block, Heading, MediaFrame, Paragraph, Presentation, Slide, TextSlot, type ImageFrameOptions } from 'opendoc';
4
+ import { themePage, themeType, type DocTheme } from 'opendoc/themes';
5
+
6
+ export { Presentation as CompanyProfile };
7
+ export type ProfileImageSource = Pick<ImageFrameOptions, 'fit' | 'position' | 'radius'> & { item: string; alt?: string };
8
+ export type ProfileBox = { x: number; y: number; width: number; height: number };
9
+ const boxStyle = ({ x, y, width, height }: ProfileBox): F.Style => ({ position: 'absolute', left: x, top: y, width, height });
10
+
11
+ /** A bounded, deliberately placed region. Add a slide when the material outgrows it. */
12
+ export function ProfileRegion({ children, ...box }: ProfileBox & { children?: ReactNode }) {
13
+ return <F.View style={{ ...boxStyle(box), overflow: 'hidden' }}>{children}</F.View>;
14
+ }
15
+
16
+ export function ProfileRule({ theme, x, y, width }: { theme: DocTheme; x: number; y: number; width: number }) {
17
+ return <F.View style={{ position: 'absolute', left: x, top: y, width, height: 1, backgroundColor: theme.line }} />;
18
+ }
19
+
20
+ export function ProfileText({ id, theme, children, size = 19, muted = false, label = false, style }: {
21
+ id: string; theme: DocTheme; children: ReactNode; size?: number; muted?: boolean; label?: boolean; style?: F.Style;
22
+ }) {
23
+ return <Paragraph id={id} role={label ? 'label' : undefined} style={{
24
+ ...(label ? themeType(theme, 'label') : { fontFamily: theme.body }),
25
+ fontSize: size, color: muted ? theme.muted : theme.ink, lineHeight: 1.3, marginTop: 0, marginBottom: 10, ...style,
26
+ }}><TextSlot slot="text" from="children">{children}</TextSlot></Paragraph>;
27
+ }
28
+
29
+ /** No image is a labelled placeholder; a supplied missing media item is a render error. */
30
+ export function ProfileImage({ id, theme, image, label = 'Image position', ...box }: ProfileBox & {
31
+ id: string; theme: DocTheme; image?: ProfileImageSource; label?: string;
32
+ }) {
33
+ return <Block id={id} style={boxStyle(box)}>
34
+ {image ? <MediaFrame {...image} width={box.width} height={box.height} /> : <F.View style={{ width: box.width, height: box.height, backgroundColor: theme.line, padding: 20, justifyContent: 'flex-end' }}>
35
+ <F.Text style={{ fontFamily: theme.body, fontSize: 13, color: theme.ink }}><TextSlot slot="label" from="label">{label}</TextSlot></F.Text>
36
+ </F.View>}
37
+ </Block>;
38
+ }
39
+
40
+ export function ProfileSlide({ id, theme, title, eyebrow, children, cover = false, titleSize, folio, footer = 'COMPANY PROFILE' }: {
41
+ id: string; theme: DocTheme; title: ReactNode; eyebrow?: ReactNode; children?: ReactNode;
42
+ cover?: boolean; titleSize?: number; folio?: string; footer?: string;
43
+ }) {
44
+ return <Slide id={id} padding={0} style={{ ...themePage(theme).style, backgroundColor: theme.paper, lineBreaking: 'greedy' }}>
45
+ <ProfileRegion x={40} y={30} width={cover ? 440 : 880} height={28}>
46
+ {eyebrow && <ProfileText id={`${id}-eyebrow`} theme={theme} size={12} label><TextSlot slot="eyebrow" from="eyebrow">{eyebrow}</TextSlot></ProfileText>}
47
+ </ProfileRegion>
48
+ <ProfileRegion x={40} y={cover ? 142 : 72} width={cover ? 464 : 880} height={cover ? 202 : 116}>
49
+ <Heading id={`${id}-title`} level={1} style={{ ...themeType(theme, 'h1'), fontFamily: theme.heading, fontSize: titleSize ?? (cover ? 52 : 36), lineHeight: 1.08, marginTop: 0, marginBottom: 0 }}><TextSlot slot="title" from="title">{title}</TextSlot></Heading>
50
+ </ProfileRegion>
51
+ {children}
52
+ <ProfileRule theme={theme} x={40} y={cover ? 494 : 496} width={cover ? 464 : 880} />
53
+ <ProfileRegion x={40} y={508} width={cover ? 410 : 820} height={20}>
54
+ <ProfileText id={`${id}-footer`} theme={theme} size={9} muted><TextSlot slot="footer" from="footer">{footer}</TextSlot></ProfileText>
55
+ </ProfileRegion>
56
+ {folio && <ProfileRegion x={cover ? 478 : 888} y={508} width={32} height={20}>
57
+ <ProfileText id={`${id}-folio`} theme={theme} size={9} muted><TextSlot slot="folio" from="folio">{folio}</TextSlot></ProfileText>
58
+ </ProfileRegion>}
59
+ </Slide>;
60
+ }
61
+
62
+ /** Reusable ledger row: the number is navigation, never an invented business metric. */
63
+ export function ProfileRow({ id, theme, number, title, detail }: { id: string; theme: DocTheme; number: string; title: ReactNode; detail: ReactNode }) {
64
+ return <F.View style={{ height: 90, overflow: 'hidden', borderTopWidth: 1, borderColor: theme.line, flexDirection: 'row', paddingTop: 14 }}>
65
+ <F.View style={{ width: 60 }}><ProfileText id={`${id}-number`} theme={theme} size={15} muted><TextSlot slot="number" from="number">{number}</TextSlot></ProfileText></F.View>
66
+ <F.View style={{ width: 260, paddingRight: 20 }}><ProfileText id={`${id}-title`} theme={theme} size={22}><TextSlot slot="title" from="title">{title}</TextSlot></ProfileText></F.View>
67
+ <F.View style={{ flex: 1 }}><ProfileText id={`${id}-detail`} theme={theme} size={18} muted><TextSlot slot="detail" from="detail">{detail}</TextSlot></ProfileText></F.View>
68
+ </F.View>;
69
+ }