@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,185 @@
1
+ import { CompanyProfile, ProfileSlide, ProfileRegion, ProfileText, ProfileImage, ProfileRule, ProfileRow } from './index';
2
+ import { neutral as theme } from '../../themes';
3
+
4
+ const title = 'Company profile';
5
+ const themeId = 'neutral';
6
+ export const meta = { title, description: 'A company profile with replaceable content and image positions.', kind: 'company profile', theme: themeId };
7
+
8
+
9
+ // This content belongs to the instance. Replace placeholders with supplied facts.
10
+ // Remove irrelevant slides, keep IDs stable, and add slides rather than squeezing copy.
11
+ // Image example: image={{item:'team-at-work',position:{x:0.6,y:0.5}}}
12
+ export default function Specimen() {
13
+ return <CompanyProfile title={title} theme={theme}>
14
+ <ProfileSlide id="profile-cover" theme={theme} cover title={title} eyebrow="COMPANY PROFILE / [EDITION DATE]" folio="01">
15
+ <ProfileImage id="cover-image" theme={theme} x={560} y={0} width={400} height={540} label="Signature project or place" />
16
+ <ProfileRegion x={40} y={364} width={450} height={104}>
17
+ <ProfileText id="cover-positioning" theme={theme} size={23}>[Company name] helps [audience] achieve [specific outcome].</ProfileText>
18
+ <ProfileText id="cover-context" theme={theme} size={13} muted>[Prepared for audience / geography / edition]</ProfileText>
19
+ </ProfileRegion>
20
+ </ProfileSlide>
21
+
22
+ <ProfileSlide id="profile-snapshot" theme={theme} title="The company at a glance." eyebrow="01 / INTRODUCTION" folio="02">
23
+ <ProfileRegion x={40} y={196} width={428} height={266}>
24
+ <ProfileText id="snapshot-positioning" theme={theme} size={29}>[What you do, for whom, and the useful difference you make.]</ProfileText>
25
+ <ProfileText id="snapshot-description" theme={theme} size={18} muted>[Explain the business in plain language. State the actual scale and scope; distinguish the company from a group or partner network.]</ProfileText>
26
+ </ProfileRegion>
27
+ <ProfileRule theme={theme} x={510} y={202} width={410} />
28
+ <ProfileRegion x={530} y={216} width={175} height={108}>
29
+ <ProfileText id="snapshot-founded-label" theme={theme} size={12} label>ESTABLISHED</ProfileText>
30
+ <ProfileText id="snapshot-founded" theme={theme} size={27}>[Year]</ProfileText>
31
+ </ProfileRegion>
32
+ <ProfileRegion x={740} y={216} width={180} height={108}>
33
+ <ProfileText id="snapshot-base-label" theme={theme} size={12} label>BASED IN</ProfileText>
34
+ <ProfileText id="snapshot-base" theme={theme} size={27}>[Location]</ProfileText>
35
+ </ProfileRegion>
36
+ <ProfileRule theme={theme} x={510} y={338} width={410} />
37
+ <ProfileRegion x={530} y={354} width={175} height={116}>
38
+ <ProfileText id="snapshot-team-label" theme={theme} size={12} label>TEAM / CAPACITY</ProfileText>
39
+ <ProfileText id="snapshot-team" theme={theme} size={22}>[Verified figure]</ProfileText>
40
+ </ProfileRegion>
41
+ <ProfileRegion x={740} y={354} width={180} height={116}>
42
+ <ProfileText id="snapshot-status-label" theme={theme} size={12} label>OWNERSHIP / STATUS</ProfileText>
43
+ <ProfileText id="snapshot-status" theme={theme} size={22}>[Accurate status]</ProfileText>
44
+ </ProfileRegion>
45
+ </ProfileSlide>
46
+
47
+ <ProfileSlide id="profile-purpose" theme={theme} title="The belief behind the work." eyebrow="02 / POINT OF VIEW" folio="03">
48
+ <ProfileRegion x={40} y={204} width={585} height={210}>
49
+ <ProfileText id="purpose-statement" theme={theme} size={39}>[A clear point of view about what should improve in your field.]</ProfileText>
50
+ </ProfileRegion>
51
+ <ProfileRegion x={680} y={204} width={240} height={256}>
52
+ <ProfileText id="purpose-practice-label" theme={theme} size={12} label>IN PRACTICE</ProfileText>
53
+ <ProfileText id="purpose-practice" theme={theme} size={20}>[Describe the decision or behavior this belief changes. Show a useful principle instead of a list of generic values.]</ProfileText>
54
+ </ProfileRegion>
55
+ <ProfileRule theme={theme} x={40} y={444} width={585} />
56
+ <ProfileRegion x={40} y={456} width={585} height={26}><ProfileText id="purpose-proof" theme={theme} size={12} muted>[One practical example, documented policy, or relevant commitment.]</ProfileText></ProfileRegion>
57
+ </ProfileSlide>
58
+
59
+ <ProfileSlide id="profile-capabilities" theme={theme} title="What we bring to the table." eyebrow="03 / CAPABILITIES" folio="04">
60
+ <ProfileRegion x={40} y={196} width={880} height={282}>
61
+ <ProfileRow id="capability-discovery" theme={theme} number="01" title="[Core capability]" detail="[Name the buyer's need and the concrete deliverable you provide.]" />
62
+ <ProfileRow id="capability-delivery" theme={theme} number="02" title="[Core capability]" detail="[Describe a distinct service, product, or expertise. Avoid overlapping categories.]" />
63
+ <ProfileRow id="capability-support" theme={theme} number="03" title="[Core capability]" detail="[Explain the outcome and a specific differentiator you can substantiate.]" />
64
+ </ProfileRegion>
65
+ </ProfileSlide>
66
+
67
+ <ProfileSlide id="profile-sectors" theme={theme} title="Where our expertise is relevant." eyebrow="04 / SECTORS & CONTEXTS" folio="05">
68
+ <ProfileImage id="sector-primary-image" theme={theme} x={40} y={192} width={510} height={236} label="Sector / product / operating context" />
69
+ <ProfileImage id="sector-secondary-image" theme={theme} x={574} y={192} width={346} height={106} label="Second context" />
70
+ <ProfileImage id="sector-detail-image" theme={theme} x={574} y={322} width={150} height={106} label="Detail" />
71
+ <ProfileRegion x={746} y={322} width={174} height={108}>
72
+ <ProfileText id="sector-detail" theme={theme} size={16}>[A specific use case that makes the sector relevant.]</ProfileText>
73
+ </ProfileRegion>
74
+ <ProfileRegion x={40} y={443} width={510} height={40}><ProfileText id="sector-primary" theme={theme} size={17}>[Sector] / [typical need or application]</ProfileText></ProfileRegion>
75
+ <ProfileRegion x={574} y={443} width={346} height={40}><ProfileText id="sector-secondary" theme={theme} size={15} muted>[Additional verified sectors, if useful]</ProfileText></ProfileRegion>
76
+ </ProfileSlide>
77
+
78
+ <ProfileSlide id="profile-method" theme={theme} title="How the work moves forward." eyebrow="05 / OPERATING MODEL" folio="06">
79
+ <ProfileRule theme={theme} x={40} y={216} width={880} />
80
+ <ProfileRegion x={40} y={232} width={202} height={236}>
81
+ <ProfileText id="method-align-number" theme={theme} size={34} muted>01</ProfileText>
82
+ <ProfileText id="method-align-title" theme={theme} size={24}>[Understand]</ProfileText>
83
+ <ProfileText id="method-align-detail" theme={theme} size={18}>[How needs, context, and success criteria become clear.]</ProfileText>
84
+ <ProfileText id="method-align-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
85
+ </ProfileRegion>
86
+ <ProfileRegion x={266} y={232} width={202} height={236}>
87
+ <ProfileText id="method-shape-number" theme={theme} size={34} muted>02</ProfileText>
88
+ <ProfileText id="method-shape-title" theme={theme} size={24}>[Shape]</ProfileText>
89
+ <ProfileText id="method-shape-detail" theme={theme} size={18}>[How options become an agreed approach with clear ownership.]</ProfileText>
90
+ <ProfileText id="method-shape-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
91
+ </ProfileRegion>
92
+ <ProfileRegion x={492} y={232} width={202} height={236}>
93
+ <ProfileText id="method-deliver-number" theme={theme} size={34} muted>03</ProfileText>
94
+ <ProfileText id="method-deliver-title" theme={theme} size={24}>[Deliver]</ProfileText>
95
+ <ProfileText id="method-deliver-detail" theme={theme} size={18}>[How work is produced, checked, and handed over.]</ProfileText>
96
+ <ProfileText id="method-deliver-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
97
+ </ProfileRegion>
98
+ <ProfileRegion x={718} y={232} width={202} height={236}>
99
+ <ProfileText id="method-improve-number" theme={theme} size={34} muted>04</ProfileText>
100
+ <ProfileText id="method-improve-title" theme={theme} size={24}>[Improve]</ProfileText>
101
+ <ProfileText id="method-improve-detail" theme={theme} size={18}>[How performance, learning, or ongoing support is handled.]</ProfileText>
102
+ <ProfileText id="method-improve-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
103
+ </ProfileRegion>
104
+ </ProfileSlide>
105
+
106
+ <ProfileSlide id="profile-case-context" theme={theme} title="[A project that shows the work.]" eyebrow="06 / SELECTED WORK" folio="07">
107
+ <ProfileImage id="case-hero-image" theme={theme} x={40} y={196} width={580} height={280} label="Actual project / product / result" />
108
+ <ProfileRegion x={656} y={196} width={264} height={280}>
109
+ <ProfileText id="case-client-label" theme={theme} size={12} label>CLIENT / CONTEXT</ProfileText>
110
+ <ProfileText id="case-client" theme={theme} size={23}>[Named with permission, or accurately anonymized]</ProfileText>
111
+ <ProfileText id="case-role-label" theme={theme} size={12} label>OUR ROLE</ProfileText>
112
+ <ProfileText id="case-role" theme={theme} size={18}>[Specific scope. Distinguish your contribution from the wider project.]</ProfileText>
113
+ <ProfileText id="case-period" theme={theme} size={13} muted>[Location / delivery period / status]</ProfileText>
114
+ </ProfileRegion>
115
+ </ProfileSlide>
116
+
117
+ <ProfileSlide id="profile-case-evidence" theme={theme} title="What changed, and how we know." eyebrow="06 / SELECTED WORK — EVIDENCE" folio="08">
118
+ <ProfileRegion x={40} y={200} width={264} height={210}>
119
+ <ProfileText id="case-challenge-label" theme={theme} size={12} label>THE CHALLENGE</ProfileText>
120
+ <ProfileText id="case-challenge" theme={theme} size={22}>[The starting situation and constraints that mattered.]</ProfileText>
121
+ </ProfileRegion>
122
+ <ProfileRegion x={342} y={200} width={264} height={210}>
123
+ <ProfileText id="case-action-label" theme={theme} size={12} label>OUR CONTRIBUTION</ProfileText>
124
+ <ProfileText id="case-action" theme={theme} size={22}>[The concrete intervention and the part your team owned.]</ProfileText>
125
+ </ProfileRegion>
126
+ <ProfileRegion x={644} y={200} width={276} height={210}>
127
+ <ProfileText id="case-outcome-label" theme={theme} size={12} label>THE OBSERVED RESULT</ProfileText>
128
+ <ProfileText id="case-outcome" theme={theme} size={28}>[Verified outcome]</ProfileText>
129
+ <ProfileText id="case-outcome-context" theme={theme} size={15} muted>[Unit, baseline, period, and qualification where needed.]</ProfileText>
130
+ </ProfileRegion>
131
+ <ProfileRule theme={theme} x={40} y={430} width={880} />
132
+ <ProfileRegion x={40} y={444} width={880} height={38}>
133
+ <ProfileText id="case-source" theme={theme} size={13} muted>Evidence / [Source, date, measurement method, permission, and limits of attribution.]</ProfileText>
134
+ </ProfileRegion>
135
+ </ProfileSlide>
136
+
137
+ <ProfileSlide id="profile-footprint" theme={theme} title="Present where the work happens." eyebrow="07 / PRESENCE & REACH" folio="09">
138
+ <ProfileRegion x={40} y={200} width={400} height={276}>
139
+ <ProfileText id="footprint-base-label" theme={theme} size={12} label>OFFICE / OPERATING BASE</ProfileText>
140
+ <ProfileText id="footprint-base" theme={theme} size={26}>[Actual location]</ProfileText>
141
+ <ProfileText id="footprint-service-label" theme={theme} size={12} label>ACTIVE SERVICE AREA</ProfileText>
142
+ <ProfileText id="footprint-service" theme={theme} size={22}>[Locations you can currently serve]</ProfileText>
143
+ <ProfileText id="footprint-model" theme={theme} size={17} muted>[Explain local presence, remote delivery, or partner coverage accurately. Include relevant limits.]</ProfileText>
144
+ </ProfileRegion>
145
+ <ProfileImage id="footprint-image" theme={theme} x={486} y={196} width={434} height={234} label="Workplace / facility / local context" />
146
+ <ProfileRegion x={486} y={445} width={434} height={35}><ProfileText id="footprint-caption" theme={theme} size={13} muted>[Location and truthful caption; date if relevant]</ProfileText></ProfileRegion>
147
+ </ProfileSlide>
148
+
149
+ <ProfileSlide id="profile-people" theme={theme} title="The people accountable for the work." eyebrow="08 / PEOPLE & EXPERTISE" folio="10">
150
+ <ProfileImage id="people-lead-image" theme={theme} x={40} y={196} width={266} height={164} label="Portrait / team at work" />
151
+ <ProfileImage id="people-delivery-image" theme={theme} x={346} y={196} width={266} height={164} label="Portrait / team at work" />
152
+ <ProfileImage id="people-specialist-image" theme={theme} x={652} y={196} width={268} height={164} label="Portrait / team at work" />
153
+ <ProfileRegion x={40} y={376} width={266} height={104}>
154
+ <ProfileText id="people-lead-name" theme={theme} size={22}>[Name / role]</ProfileText>
155
+ <ProfileText id="people-lead-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
156
+ </ProfileRegion>
157
+ <ProfileRegion x={346} y={376} width={266} height={104}>
158
+ <ProfileText id="people-delivery-name" theme={theme} size={22}>[Name / role]</ProfileText>
159
+ <ProfileText id="people-delivery-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
160
+ </ProfileRegion>
161
+ <ProfileRegion x={652} y={376} width={268} height={104}>
162
+ <ProfileText id="people-specialist-name" theme={theme} size={22}>[Name / role]</ProfileText>
163
+ <ProfileText id="people-specialist-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
164
+ </ProfileRegion>
165
+ </ProfileSlide>
166
+
167
+ <ProfileSlide id="profile-assurance" theme={theme} title="The standards we can stand behind." eyebrow="09 / CREDENTIALS & RESPONSIBILITY — OPTIONAL" folio="11">
168
+ <ProfileRegion x={40} y={196} width={880} height={282}>
169
+ <ProfileRow id="assurance-credential" theme={theme} number="01" title="[Credential / license]" detail="[Issuer, exact scope, current status, expiry, and verification source. Omit if not applicable.]" />
170
+ <ProfileRow id="assurance-quality" theme={theme} number="02" title="[Quality / governance]" detail="[A real process or policy, its owner, and evidence of how it is applied.]" />
171
+ <ProfileRow id="assurance-responsibility" theme={theme} number="03" title="[Responsibility]" detail="[A documented commitment or measured result. Distinguish future goals from achieved outcomes.]" />
172
+ </ProfileRegion>
173
+ </ProfileSlide>
174
+
175
+ <ProfileSlide id="profile-contact" theme={theme} cover title="Start a useful conversation." titleSize={48} eyebrow="10 / CONTACT" folio="12">
176
+ <ProfileImage id="contact-image" theme={theme} x={560} y={0} width={400} height={540} label="People / product / place" />
177
+ <ProfileRegion x={40} y={354} width={464} height={124}>
178
+ <ProfileText id="contact-name" theme={theme} size={21}>[Contact name / role]</ProfileText>
179
+ <ProfileText id="contact-email" theme={theme} size={18}>[Email] / [Phone]</ProfileText>
180
+ <ProfileText id="contact-website" theme={theme} size={18}>[Website] / [Office or time zone]</ProfileText>
181
+ <ProfileText id="contact-invitation" theme={theme} size={13} muted>[A clear reason to connect and the next conversation to have.]</ProfileText>
182
+ </ProfileRegion>
183
+ </ProfileSlide>
184
+ </CompanyProfile>;
185
+ }
@@ -0,0 +1,186 @@
1
+ import { CompanyProfile, ProfileSlide, ProfileRegion, ProfileText, ProfileImage, ProfileRule, ProfileRow } from '../../templates/company-profile';
2
+ // @ts-ignore The selected local theme module is inserted when this starter becomes a document.
3
+ import { theme } from "__OPENDOC_THEME_MODULE__";
4
+
5
+ const title = "__OPENDOC_TITLE__";
6
+ const themeId = "__OPENDOC_THEME__";
7
+ export const meta = { title, description: 'A company profile with replaceable content and image positions.', kind: 'company profile', theme: themeId };
8
+ export const provenance = { template: 'templates/company-profile/index.tsx' };
9
+
10
+ // This content belongs to the instance. Replace placeholders with supplied facts.
11
+ // Remove irrelevant slides, keep IDs stable, and add slides rather than squeezing copy.
12
+ // Image example: image={{item:'team-at-work',position:{x:0.6,y:0.5}}}
13
+ export default function Profile() {
14
+ return <CompanyProfile title={title} theme={theme}>
15
+ <ProfileSlide id="profile-cover" theme={theme} cover title={title} eyebrow="COMPANY PROFILE / [EDITION DATE]" folio="01">
16
+ <ProfileImage id="cover-image" theme={theme} x={560} y={0} width={400} height={540} label="Signature project or place" />
17
+ <ProfileRegion x={40} y={364} width={450} height={104}>
18
+ <ProfileText id="cover-positioning" theme={theme} size={23}>[Company name] helps [audience] achieve [specific outcome].</ProfileText>
19
+ <ProfileText id="cover-context" theme={theme} size={13} muted>[Prepared for audience / geography / edition]</ProfileText>
20
+ </ProfileRegion>
21
+ </ProfileSlide>
22
+
23
+ <ProfileSlide id="profile-snapshot" theme={theme} title="The company at a glance." eyebrow="01 / INTRODUCTION" folio="02">
24
+ <ProfileRegion x={40} y={196} width={428} height={266}>
25
+ <ProfileText id="snapshot-positioning" theme={theme} size={29}>[What you do, for whom, and the useful difference you make.]</ProfileText>
26
+ <ProfileText id="snapshot-description" theme={theme} size={18} muted>[Explain the business in plain language. State the actual scale and scope; distinguish the company from a group or partner network.]</ProfileText>
27
+ </ProfileRegion>
28
+ <ProfileRule theme={theme} x={510} y={202} width={410} />
29
+ <ProfileRegion x={530} y={216} width={175} height={108}>
30
+ <ProfileText id="snapshot-founded-label" theme={theme} size={12} label>ESTABLISHED</ProfileText>
31
+ <ProfileText id="snapshot-founded" theme={theme} size={27}>[Year]</ProfileText>
32
+ </ProfileRegion>
33
+ <ProfileRegion x={740} y={216} width={180} height={108}>
34
+ <ProfileText id="snapshot-base-label" theme={theme} size={12} label>BASED IN</ProfileText>
35
+ <ProfileText id="snapshot-base" theme={theme} size={27}>[Location]</ProfileText>
36
+ </ProfileRegion>
37
+ <ProfileRule theme={theme} x={510} y={338} width={410} />
38
+ <ProfileRegion x={530} y={354} width={175} height={116}>
39
+ <ProfileText id="snapshot-team-label" theme={theme} size={12} label>TEAM / CAPACITY</ProfileText>
40
+ <ProfileText id="snapshot-team" theme={theme} size={22}>[Verified figure]</ProfileText>
41
+ </ProfileRegion>
42
+ <ProfileRegion x={740} y={354} width={180} height={116}>
43
+ <ProfileText id="snapshot-status-label" theme={theme} size={12} label>OWNERSHIP / STATUS</ProfileText>
44
+ <ProfileText id="snapshot-status" theme={theme} size={22}>[Accurate status]</ProfileText>
45
+ </ProfileRegion>
46
+ </ProfileSlide>
47
+
48
+ <ProfileSlide id="profile-purpose" theme={theme} title="The belief behind the work." eyebrow="02 / POINT OF VIEW" folio="03">
49
+ <ProfileRegion x={40} y={204} width={585} height={210}>
50
+ <ProfileText id="purpose-statement" theme={theme} size={39}>[A clear point of view about what should improve in your field.]</ProfileText>
51
+ </ProfileRegion>
52
+ <ProfileRegion x={680} y={204} width={240} height={256}>
53
+ <ProfileText id="purpose-practice-label" theme={theme} size={12} label>IN PRACTICE</ProfileText>
54
+ <ProfileText id="purpose-practice" theme={theme} size={20}>[Describe the decision or behavior this belief changes. Show a useful principle instead of a list of generic values.]</ProfileText>
55
+ </ProfileRegion>
56
+ <ProfileRule theme={theme} x={40} y={444} width={585} />
57
+ <ProfileRegion x={40} y={456} width={585} height={26}><ProfileText id="purpose-proof" theme={theme} size={12} muted>[One practical example, documented policy, or relevant commitment.]</ProfileText></ProfileRegion>
58
+ </ProfileSlide>
59
+
60
+ <ProfileSlide id="profile-capabilities" theme={theme} title="What we bring to the table." eyebrow="03 / CAPABILITIES" folio="04">
61
+ <ProfileRegion x={40} y={196} width={880} height={282}>
62
+ <ProfileRow id="capability-discovery" theme={theme} number="01" title="[Core capability]" detail="[Name the buyer's need and the concrete deliverable you provide.]" />
63
+ <ProfileRow id="capability-delivery" theme={theme} number="02" title="[Core capability]" detail="[Describe a distinct service, product, or expertise. Avoid overlapping categories.]" />
64
+ <ProfileRow id="capability-support" theme={theme} number="03" title="[Core capability]" detail="[Explain the outcome and a specific differentiator you can substantiate.]" />
65
+ </ProfileRegion>
66
+ </ProfileSlide>
67
+
68
+ <ProfileSlide id="profile-sectors" theme={theme} title="Where our expertise is relevant." eyebrow="04 / SECTORS & CONTEXTS" folio="05">
69
+ <ProfileImage id="sector-primary-image" theme={theme} x={40} y={192} width={510} height={236} label="Sector / product / operating context" />
70
+ <ProfileImage id="sector-secondary-image" theme={theme} x={574} y={192} width={346} height={106} label="Second context" />
71
+ <ProfileImage id="sector-detail-image" theme={theme} x={574} y={322} width={150} height={106} label="Detail" />
72
+ <ProfileRegion x={746} y={322} width={174} height={108}>
73
+ <ProfileText id="sector-detail" theme={theme} size={16}>[A specific use case that makes the sector relevant.]</ProfileText>
74
+ </ProfileRegion>
75
+ <ProfileRegion x={40} y={443} width={510} height={40}><ProfileText id="sector-primary" theme={theme} size={17}>[Sector] / [typical need or application]</ProfileText></ProfileRegion>
76
+ <ProfileRegion x={574} y={443} width={346} height={40}><ProfileText id="sector-secondary" theme={theme} size={15} muted>[Additional verified sectors, if useful]</ProfileText></ProfileRegion>
77
+ </ProfileSlide>
78
+
79
+ <ProfileSlide id="profile-method" theme={theme} title="How the work moves forward." eyebrow="05 / OPERATING MODEL" folio="06">
80
+ <ProfileRule theme={theme} x={40} y={216} width={880} />
81
+ <ProfileRegion x={40} y={232} width={202} height={236}>
82
+ <ProfileText id="method-align-number" theme={theme} size={34} muted>01</ProfileText>
83
+ <ProfileText id="method-align-title" theme={theme} size={24}>[Understand]</ProfileText>
84
+ <ProfileText id="method-align-detail" theme={theme} size={18}>[How needs, context, and success criteria become clear.]</ProfileText>
85
+ <ProfileText id="method-align-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
86
+ </ProfileRegion>
87
+ <ProfileRegion x={266} y={232} width={202} height={236}>
88
+ <ProfileText id="method-shape-number" theme={theme} size={34} muted>02</ProfileText>
89
+ <ProfileText id="method-shape-title" theme={theme} size={24}>[Shape]</ProfileText>
90
+ <ProfileText id="method-shape-detail" theme={theme} size={18}>[How options become an agreed approach with clear ownership.]</ProfileText>
91
+ <ProfileText id="method-shape-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
92
+ </ProfileRegion>
93
+ <ProfileRegion x={492} y={232} width={202} height={236}>
94
+ <ProfileText id="method-deliver-number" theme={theme} size={34} muted>03</ProfileText>
95
+ <ProfileText id="method-deliver-title" theme={theme} size={24}>[Deliver]</ProfileText>
96
+ <ProfileText id="method-deliver-detail" theme={theme} size={18}>[How work is produced, checked, and handed over.]</ProfileText>
97
+ <ProfileText id="method-deliver-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
98
+ </ProfileRegion>
99
+ <ProfileRegion x={718} y={232} width={202} height={236}>
100
+ <ProfileText id="method-improve-number" theme={theme} size={34} muted>04</ProfileText>
101
+ <ProfileText id="method-improve-title" theme={theme} size={24}>[Improve]</ProfileText>
102
+ <ProfileText id="method-improve-detail" theme={theme} size={18}>[How performance, learning, or ongoing support is handled.]</ProfileText>
103
+ <ProfileText id="method-improve-output" theme={theme} size={12} muted>OUTPUT / [Decision or artifact]</ProfileText>
104
+ </ProfileRegion>
105
+ </ProfileSlide>
106
+
107
+ <ProfileSlide id="profile-case-context" theme={theme} title="[A project that shows the work.]" eyebrow="06 / SELECTED WORK" folio="07">
108
+ <ProfileImage id="case-hero-image" theme={theme} x={40} y={196} width={580} height={280} label="Actual project / product / result" />
109
+ <ProfileRegion x={656} y={196} width={264} height={280}>
110
+ <ProfileText id="case-client-label" theme={theme} size={12} label>CLIENT / CONTEXT</ProfileText>
111
+ <ProfileText id="case-client" theme={theme} size={23}>[Named with permission, or accurately anonymized]</ProfileText>
112
+ <ProfileText id="case-role-label" theme={theme} size={12} label>OUR ROLE</ProfileText>
113
+ <ProfileText id="case-role" theme={theme} size={18}>[Specific scope. Distinguish your contribution from the wider project.]</ProfileText>
114
+ <ProfileText id="case-period" theme={theme} size={13} muted>[Location / delivery period / status]</ProfileText>
115
+ </ProfileRegion>
116
+ </ProfileSlide>
117
+
118
+ <ProfileSlide id="profile-case-evidence" theme={theme} title="What changed, and how we know." eyebrow="06 / SELECTED WORK — EVIDENCE" folio="08">
119
+ <ProfileRegion x={40} y={200} width={264} height={210}>
120
+ <ProfileText id="case-challenge-label" theme={theme} size={12} label>THE CHALLENGE</ProfileText>
121
+ <ProfileText id="case-challenge" theme={theme} size={22}>[The starting situation and constraints that mattered.]</ProfileText>
122
+ </ProfileRegion>
123
+ <ProfileRegion x={342} y={200} width={264} height={210}>
124
+ <ProfileText id="case-action-label" theme={theme} size={12} label>OUR CONTRIBUTION</ProfileText>
125
+ <ProfileText id="case-action" theme={theme} size={22}>[The concrete intervention and the part your team owned.]</ProfileText>
126
+ </ProfileRegion>
127
+ <ProfileRegion x={644} y={200} width={276} height={210}>
128
+ <ProfileText id="case-outcome-label" theme={theme} size={12} label>THE OBSERVED RESULT</ProfileText>
129
+ <ProfileText id="case-outcome" theme={theme} size={28}>[Verified outcome]</ProfileText>
130
+ <ProfileText id="case-outcome-context" theme={theme} size={15} muted>[Unit, baseline, period, and qualification where needed.]</ProfileText>
131
+ </ProfileRegion>
132
+ <ProfileRule theme={theme} x={40} y={430} width={880} />
133
+ <ProfileRegion x={40} y={444} width={880} height={38}>
134
+ <ProfileText id="case-source" theme={theme} size={13} muted>Evidence / [Source, date, measurement method, permission, and limits of attribution.]</ProfileText>
135
+ </ProfileRegion>
136
+ </ProfileSlide>
137
+
138
+ <ProfileSlide id="profile-footprint" theme={theme} title="Present where the work happens." eyebrow="07 / PRESENCE & REACH" folio="09">
139
+ <ProfileRegion x={40} y={200} width={400} height={276}>
140
+ <ProfileText id="footprint-base-label" theme={theme} size={12} label>OFFICE / OPERATING BASE</ProfileText>
141
+ <ProfileText id="footprint-base" theme={theme} size={26}>[Actual location]</ProfileText>
142
+ <ProfileText id="footprint-service-label" theme={theme} size={12} label>ACTIVE SERVICE AREA</ProfileText>
143
+ <ProfileText id="footprint-service" theme={theme} size={22}>[Locations you can currently serve]</ProfileText>
144
+ <ProfileText id="footprint-model" theme={theme} size={17} muted>[Explain local presence, remote delivery, or partner coverage accurately. Include relevant limits.]</ProfileText>
145
+ </ProfileRegion>
146
+ <ProfileImage id="footprint-image" theme={theme} x={486} y={196} width={434} height={234} label="Workplace / facility / local context" />
147
+ <ProfileRegion x={486} y={445} width={434} height={35}><ProfileText id="footprint-caption" theme={theme} size={13} muted>[Location and truthful caption; date if relevant]</ProfileText></ProfileRegion>
148
+ </ProfileSlide>
149
+
150
+ <ProfileSlide id="profile-people" theme={theme} title="The people accountable for the work." eyebrow="08 / PEOPLE & EXPERTISE" folio="10">
151
+ <ProfileImage id="people-lead-image" theme={theme} x={40} y={196} width={266} height={164} label="Portrait / team at work" />
152
+ <ProfileImage id="people-delivery-image" theme={theme} x={346} y={196} width={266} height={164} label="Portrait / team at work" />
153
+ <ProfileImage id="people-specialist-image" theme={theme} x={652} y={196} width={268} height={164} label="Portrait / team at work" />
154
+ <ProfileRegion x={40} y={376} width={266} height={104}>
155
+ <ProfileText id="people-lead-name" theme={theme} size={22}>[Name / role]</ProfileText>
156
+ <ProfileText id="people-lead-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
157
+ </ProfileRegion>
158
+ <ProfileRegion x={346} y={376} width={266} height={104}>
159
+ <ProfileText id="people-delivery-name" theme={theme} size={22}>[Name / role]</ProfileText>
160
+ <ProfileText id="people-delivery-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
161
+ </ProfileRegion>
162
+ <ProfileRegion x={652} y={376} width={268} height={104}>
163
+ <ProfileText id="people-specialist-name" theme={theme} size={22}>[Name / role]</ProfileText>
164
+ <ProfileText id="people-specialist-expertise" theme={theme} size={16} muted>[Relevant expertise and what this person is accountable for.]</ProfileText>
165
+ </ProfileRegion>
166
+ </ProfileSlide>
167
+
168
+ <ProfileSlide id="profile-assurance" theme={theme} title="The standards we can stand behind." eyebrow="09 / CREDENTIALS & RESPONSIBILITY — OPTIONAL" folio="11">
169
+ <ProfileRegion x={40} y={196} width={880} height={282}>
170
+ <ProfileRow id="assurance-credential" theme={theme} number="01" title="[Credential / license]" detail="[Issuer, exact scope, current status, expiry, and verification source. Omit if not applicable.]" />
171
+ <ProfileRow id="assurance-quality" theme={theme} number="02" title="[Quality / governance]" detail="[A real process or policy, its owner, and evidence of how it is applied.]" />
172
+ <ProfileRow id="assurance-responsibility" theme={theme} number="03" title="[Responsibility]" detail="[A documented commitment or measured result. Distinguish future goals from achieved outcomes.]" />
173
+ </ProfileRegion>
174
+ </ProfileSlide>
175
+
176
+ <ProfileSlide id="profile-contact" theme={theme} cover title="Start a useful conversation." titleSize={48} eyebrow="10 / CONTACT" folio="12">
177
+ <ProfileImage id="contact-image" theme={theme} x={560} y={0} width={400} height={540} label="People / product / place" />
178
+ <ProfileRegion x={40} y={354} width={464} height={124}>
179
+ <ProfileText id="contact-name" theme={theme} size={21}>[Contact name / role]</ProfileText>
180
+ <ProfileText id="contact-email" theme={theme} size={18}>[Email] / [Phone]</ProfileText>
181
+ <ProfileText id="contact-website" theme={theme} size={18}>[Website] / [Office or time zone]</ProfileText>
182
+ <ProfileText id="contact-invitation" theme={theme} size={13} muted>[A clear reason to connect and the next conversation to have.]</ProfileText>
183
+ </ProfileRegion>
184
+ </ProfileSlide>
185
+ </CompanyProfile>;
186
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "Company profile",
3
+ "description": "An architectural introduction to an organization: capabilities, sectors, people, and documented proof, with generous photography and a clear route to contact.",
4
+ "format": "16:9 · Company profile",
5
+ "documentFormat": "presentation",
6
+ "structure": [
7
+ "Twelve adaptable slides: introduce, explain, demonstrate, and connect.",
8
+ "A tall-image cover, numbered capability ledger, unequal image spread, and four-stage operating rail.",
9
+ "A two-slide case study separates project context from verifiable outcomes and attribution.",
10
+ "Location ledger and people portraits communicate presence without invented maps or scale.",
11
+ "Optional credential register states issuer, scope, status, and evidence.",
12
+ "Every image, metric, name, claim, and contact field begins as an explicit placeholder.",
13
+ "Native text and stable slide identities support corrections, comments, and reordering."
14
+ ]
15
+ }
@@ -0,0 +1,11 @@
1
+ # Consulting report
2
+
3
+ Use this template as a soft foundation for a consulting document. Its character is clear hierarchy, consistent alignment, readable evidence, and useful navigation. The cover groups its content toward the bottom using native page alignment. The cover, type sizes, margins, and spacing are defaults, not a fixed rule system. A long title may need smaller type through `titleStyle`; a short report may work better with `cover={false}`. Rebalance the composition, adjust exhibit proportions, and adapt the rhythm to the actual reader and material. There is room for variation and creativity.
4
+
5
+ The design research favored distinct title/body/note levels, clear section openings, exhibits with informative headlines, and sources close to the evidence. These are useful directions, not a mandatory writing method. Let the writer choose the content and its order. Add a summary or contents page only when it helps the document; do not force every report into the same outline. Use emphasis selectively so a reader can scan without every sentence competing for attention.
6
+
7
+ Tables and charts need legible labels, units, and enough width. Prefer simplifying or reorienting a dense exhibit over shrinking its text beyond comfortable reading. Keep captions with figures and use existing native table header repetition. Choose a short `runningTitle` if the full title crowds the header. The cover is optional; page numbers follow the PDF's physical page order, including the cover.
8
+
9
+ Use existing OpenDoc blocks and Forme's native Page, Fixed, View, Text, and Table flow. Keep variable prose breakable, and use Section for a heading with a short lead. Avoid custom text fitting, page splitting, simulated newspaper columns, or renderer patches. The theme supplies visual hierarchy, rhythm, and component treatments; document-specific design changes should stay local or use options that preserve shared defaults. Preserve stable IDs and accurate evidence.
10
+
11
+ Review the actual PDF after adapting it. Shared changes need short and long specimens, table continuations, a second theme, and a working starter. Use Neutral for the catalog preview. Read `RESEARCH.md` for the formatting references and `README.md` for the component's options. Preserve unrelated documents and templates.
@@ -0,0 +1,13 @@
1
+ # Consulting report
2
+
3
+ A reusable starting layout for advisory reports, assessments, and recommendations. It combines an optional, bottom-aligned typographic cover with flowing A4 report pages. The cover uses native page `justifyContent: 'flex-end'`; content retains its normal spacing and remains breakable. Defaults are 54-point side margins (approximately 487 points of content width), 62-point body top and 58-point bottom margins, 11.5/16.675-point body type, and 10-point paragraph gaps. The running title and page numbers orient the reader. Fonts and colors come from the caller's theme.
4
+
5
+ Pass `title`, `theme`, and ordinary OpenDoc blocks as `children`. Optional `subtitle`, `author`, `date`, `label`, and `coverNote` form the opening. `cover` defaults to true; set it to false for a short report whose title and body should share a page. No summary, contents page, argument, or section order is required.
6
+
7
+ Use `titleStyle={{ fontSize: 32 }}` when a long title needs smaller type, or another native Forme text style for a purposeful variation. `runningTitle="A short report title"` provides a compact header; `false` omits it. Body page numbers reflect physical PDF page order, including an unnumbered cover. Opening text remains breakable; if an unusually long opening spans pages, shorten or restyle it after reviewing rather than relying on automatic fitting.
8
+
9
+ Use ordinary `Section`, `Paragraph`, `Figure`, and `DataTable` blocks. A Section keeps only its heading and short lead together; the rest flows. The specimen uses native `style={{ breakBefore: true }}` on its comparison section to start a substantial table with its introduction on a fresh page; this is an authoring choice, not a layout requirement. A Figure keeps its image and caption together, so the complete group must fit on a page. DataTable uses Forme's native table continuation and repeated header rows. Place a descriptive heading above an exhibit when helpful, and keep source notes with it. Native charts currently have the workspace's known font-encoding limitation; use the established local `Media` workflow for charts and native `Image` rendering, as described in [the media guidance](../../docs/MEDIA.md).
10
+
11
+ Supply verified `references` and use `Cite` within prose for the normal reference list. The layout specimens use explicit placeholder captions and synthetic table rows, with no invented business findings. `Specimen` in `preview.tsx` accepts sparse, typical, and long lengths plus an optional theme for review. The catalog always uses Neutral; `starter.tsx` creates an ordinary linked document.
12
+
13
+ The template is an adaptable foundation. See [AGENTS.md](AGENTS.md) for design judgment and [RESEARCH.md](RESEARCH.md) for the formatting references. There is no custom typesetting, pagination, or fitting engine.
@@ -0,0 +1,10 @@
1
+ # Formatting references
2
+
3
+ Reviewed on 8 September 2026 to inform this layout. These are examples of published consulting reports, not a universal consulting formatting standard. The choices below are design judgments; their measurements and branding are not copied into this template.
4
+
5
+ - [BCG, Global Payments Report 2025](https://web-assets.bcg.com/25/91/2269153c468ca43684442f055cb0/2025-global-payments-report-sep-2025.pdf): visually inspected PDF pages 1, 4, and 7. The cover separates publication identity, headline, and date. The highlights page uses distinct levels for figures and explanation. The narrative/exhibit page aligns content consistently and gives the exhibit its own headline, units, source notes, and page furniture. Its two-column narrative is not reproduced here; this template uses a single native flowing column.
6
+ - [McKinsey, Superagency in the workplace, January 2025](https://www.mckinsey.com/~/media/mckinsey/business%20functions/quantumblack/our%20insights/superagency%20in%20the%20workplace%20empowering%20people%20to%20unlock%20ais%20full%20potential%20at%20work/superagency-in-the-workplace-empowering-people-to-unlock-ais-full-potential-v3.pdf): reviewed the PDF's extracted structure and exhibit text, particularly PDF pages 8 and 13–15. Numbered exhibits use informative headlines and specify units, sample sizes, sources, and qualifications. This was a structural/text review, not a visual typography assessment.
7
+
8
+ Applied here: a clear title/body/note hierarchy; optional cover; consistent alignment and navigation; ample exhibit width; nearby captions and source notes; and native table header repetition. Authors should keep evidence labels readable and use emphasis selectively. A summary or contents page may help a long report, but neither is required by the layout.
9
+
10
+ The catalog specimen contains none of these reports' prose, data, charts, logos, or photography. Its content is expressly illustrative. Typography, color, and exact spacing remain adaptable to the document and its theme.
@@ -0,0 +1,44 @@
1
+ import type { ReactNode } from 'react';
2
+ import * as F from '@formepdf/react';
3
+ import { TextSlot, Document, Heading, Paragraph, References, Page } from 'opendoc';
4
+ import { themePage, type DocTheme } from 'opendoc/themes';
5
+
6
+ export interface ConsultingReportProps {
7
+ title: string;
8
+ theme: DocTheme;
9
+ subtitle?: ReactNode;
10
+ author?: string;
11
+ date?: string;
12
+ label?: string;
13
+ cover?: boolean;
14
+ coverNote?: ReactNode;
15
+ runningTitle?: string | false;
16
+ titleStyle?: F.Style;
17
+ children: ReactNode;
18
+ references?: Parameters<typeof Document>[0]['references'];
19
+ }
20
+
21
+ /** An optional cover and ordinary flowing report pages, using native Forme layout. */
22
+ export function ConsultingReport({ title, theme, subtitle, author, date, label, cover = true, coverNote, runningTitle = title, titleStyle, children, references }: ConsultingReportProps) {
23
+ const layoutTheme: DocTheme = theme.design ? theme : { ...theme, fontSize: 11.5, lineHeight: 1.45, paragraphGap: 10 };
24
+ const opening = <F.View style={{ ...theme.design?.title?.block, ...(cover ? theme.design?.cover?.block : undefined) }}>
25
+ {label && <Paragraph id="report-label" role="label" baseStyle={{ fontSize: 9, letterSpacing: 0.8, color: theme.accent, marginBottom: cover ? 56 : 16 }} style={{ ...theme.design?.title?.eyebrow, ...(cover ? theme.design?.cover?.eyebrow : undefined) }}>{theme.design?.title?.uppercaseEyebrow ? label.toUpperCase() : <TextSlot slot="label" from="label">{label}</TextSlot>}</Paragraph>}
26
+ <Heading id="report-title" level={1} baseStyle={{ fontSize: cover ? 38 : 30, lineHeight: 1.12, marginBottom: 20 }} style={{ ...theme.design?.title?.heading, ...(cover ? theme.design?.cover?.title : undefined), ...titleStyle }}><TextSlot slot="title" from="title">{title}</TextSlot></Heading>
27
+ {subtitle && <Paragraph id="report-subtitle" role="lead" baseStyle={{ fontSize: 17, lineHeight: 1.4, color: theme.muted, marginBottom: 24 }} style={{ ...theme.design?.title?.subtitle, ...(cover ? theme.design?.cover?.subtitle : undefined) }}><TextSlot slot="subtitle" from="subtitle">{subtitle}</TextSlot></Paragraph>}
28
+ {(author || date) && <F.View style={{ marginTop: cover ? 38 : 0, marginBottom: cover ? 32 : 22, borderTopWidth: 0.6, borderColor: theme.line, paddingTop: 14 }}>
29
+ {author && <Paragraph id="report-author" role="small" baseStyle={{ fontSize: 10, marginBottom: 6 }} style={{ ...theme.design?.title?.byline, ...(cover ? theme.design?.cover?.byline : undefined) }}><TextSlot slot="author" from="author">{author}</TextSlot></Paragraph>}
30
+ {date && <Paragraph id="report-date" role="small" baseStyle={{ fontSize: 10, color: theme.muted, marginBottom: 0 }} style={{ ...theme.design?.title?.byline, ...(cover ? theme.design?.cover?.byline : undefined) }}><TextSlot slot="date" from="date">{date}</TextSlot></Paragraph>}
31
+ </F.View>}
32
+ {coverNote && <Paragraph id="report-context" role="small" baseStyle={{ fontSize: 10, color: theme.muted, marginBottom: 24 }} style={cover ? theme.design?.cover?.byline : undefined}><TextSlot slot="coverNote" from="coverNote">{coverNote}</TextSlot></Paragraph>}
33
+ </F.View>;
34
+ return <Document title={title} author={author} theme={layoutTheme} references={references}>
35
+ {cover && <Page {...themePage(theme, { top: 72, bottom: 58, left: 54, right: 54 })} style={{ lineBreaking: 'greedy', justifyContent: 'flex-end', ...theme.design?.page?.style, ...theme.design?.cover?.page }}>{opening}</Page>}
36
+ <Page {...themePage(theme, { top: 62, bottom: 58, left: 54, right: 54 })} style={{ lineBreaking: 'greedy', ...theme.design?.page?.style }}>
37
+ {runningTitle !== false && (!theme.design || theme.runningHeader) && <F.Fixed position="header"><F.Text style={{ fontFamily: theme.body, fontSize: 8, color: theme.muted, borderBottomWidth: 0.5, borderColor: theme.line, paddingBottom: 8, ...theme.design?.furniture?.text, ...theme.design?.furniture?.header }}>{theme.design?.furniture?.uppercaseHeader ? runningTitle.toUpperCase() : runningTitle}</F.Text></F.Fixed>}
38
+ {(!theme.design || theme.runningFooter) && <F.Fixed position="footer"><F.Text style={{ fontFamily: theme.body, 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>}
39
+ {!cover && opening}
40
+ {children}
41
+ <References headingBaseStyle={{ fontSize: 14, marginTop: 26, marginBottom: 10 }} />
42
+ </Page>
43
+ </Document>;
44
+ }
@@ -0,0 +1,39 @@
1
+ import * as F from '@formepdf/react';
2
+ import { DataTable, Figure, Heading, Paragraph, Section } from 'opendoc';
3
+ import { neutral } from '../../themes';
4
+ import { type DocTheme } from 'opendoc/themes';
5
+ import { ConsultingReport } from './index';
6
+
7
+ export const meta = { title: 'Consulting report', description: 'A Neutral formatting specimen with illustrative placeholders only.', kind: 'report' as const, theme: 'neutral' };
8
+ const paragraph = 'This paragraph demonstrates the reading measure and spacing of the report. Its content is illustrative: it describes no client, market, or finding. In an authored document, the material would determine the section order and the evidence needed. The layout gives prose, headings, and exhibits a shared alignment while leaving room to adapt their size and emphasis.';
9
+
10
+ export function Specimen({ length = 'typical', theme = neutral }: { length?: 'sparse' | 'typical' | 'long'; theme?: DocTheme } = {}) {
11
+ const sparse = length === 'sparse';
12
+ return <ConsultingReport title={meta.title} theme={theme} cover={!sparse}
13
+ subtitle={sparse ? undefined : 'A clear structure for reading, comparing evidence, and finding the next passage.'}
14
+ author={sparse ? undefined : 'Author or team name'} date={sparse ? undefined : 'Month / Year'}
15
+ coverNote={sparse ? undefined : 'Illustrative formatting specimen. All prose, exhibit areas, and table entries are placeholders; no business findings are claimed.'}>
16
+ <Section id="specimen-opening" title="A clear section opening" lead="A short opening sits with the heading. This is a placement example, not a prescribed report section.">
17
+ <Paragraph id="specimen-first-paragraph">{paragraph}</Paragraph>
18
+ </Section>
19
+ {!sparse && <>
20
+ {Array.from({ length: length === 'long' ? 9 : 1 }, (_, index) => <Paragraph key={index} id={`specimen-body-${index + 1}`}>{paragraph}</Paragraph>)}
21
+ <Section id="specimen-exhibit" title="Give the exhibit a useful headline" lead="This heading introduces an illustrative visual area. In a real report, its wording should reflect the evidence presented.">
22
+ <Figure id="specimen-figure" caption="Exhibit position. Labels, units, and legends belong inside the visual where they can be read." sourceNote="Source note position. Placeholder only; no source is claimed.">
23
+ <F.View style={{ height: 155, backgroundColor: theme.paper, borderWidth: 0.6, borderColor: theme.line, justifyContent: 'center', alignItems: 'center' }}>
24
+ <F.Text style={{ fontSize: 10, color: theme.muted }}>Full-width exhibit · Illustrative placeholder</F.Text>
25
+ </F.View>
26
+ </Figure>
27
+ </Section>
28
+ <Section id="specimen-comparison" style={{ breakBefore: true }} title="Make comparisons easy to follow" lead="Tables share the reading width. The example below uses synthetic labels and repeats its header if it continues.">
29
+ <DataTable id="specimen-table" caption="Illustrative comparison rows" columns={[{ label: 'Item', width: 1 }, { label: 'Description', width: 2 }, { label: 'Note', width: 1.4 }]}
30
+ rows={Array.from({ length: length === 'long' ? 30 : 5 }, (_, index) => [`Example ${index + 1}`, 'Placeholder entry for layout review', 'Illustrative only'])}
31
+ sourceNote="Synthetic table for formatting review. No measured or client data." />
32
+ </Section>
33
+ <Paragraph id="specimen-closing">The report continues in the author's chosen order. This closing placeholder checks that text after a table remains available and readable.</Paragraph>
34
+ <Heading id="specimen-reference-heading" style={{ fontSize: 14, marginTop: 26 }}>References</Heading>
35
+ <Paragraph id="specimen-reference" style={{ fontSize: 9, color: theme.muted }}>Reference placement specimen. Real references appear here only when cited; no source is being claimed.</Paragraph>
36
+ </>}
37
+ </ConsultingReport>;
38
+ }
39
+ export default Specimen;
@@ -0,0 +1,15 @@
1
+ import { ConsultingReport } from '../../templates/consulting-report';
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
+
6
+ const title = "__OPENDOC_TITLE__";
7
+ const themeId = "__OPENDOC_THEME__";
8
+ export const meta = { title, description: 'A consulting report, ready for your material.', kind: 'report' as const, theme: themeId };
9
+ export const provenance = { template: 'templates/consulting-report/index.tsx' };
10
+
11
+ export default function Report() {
12
+ return <ConsultingReport title={title} theme={theme} label="REPORT" subtitle="Replace this placeholder with your report's purpose." author="Author or team name">
13
+ <Paragraph id="report-opening">Your report begins here. Replace this placeholder with your own material, and choose the sections and exhibits that serve the reader.</Paragraph>
14
+ </ConsultingReport>;
15
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "Consulting report",
3
+ "description": "An optional cover and structured report pages, with clear section openings, generous exhibit width, and consistent navigation. For advisory reports, assessments, and recommendations.",
4
+ "format": "A4 · Cover and report",
5
+ "structure": [
6
+ "An optional bottom-aligned cover gives the title, subtitle, author, and date a clear hierarchy. Short documents can begin directly with the body.",
7
+ "Consistent margins align section headings, prose, tables, and exhibits on a shared reading width.",
8
+ "Exhibits can pair a descriptive headline with a caption and source note. Native tables repeat their headers when they continue.",
9
+ "A running title and page numbers support navigation. References follow the authored content; no section order is prescribed."
10
+ ]
11
+ }
@@ -0,0 +1,11 @@
1
+ # Editorial essay
2
+
3
+ Use this template as a soft foundation for the essay, with room for variation and creativity. It suggests a narrow, continuous literary reading column, never an argument or writing method. Its measurements are starting values: reduce the title size for a long title, rebalance the opening space, or adjust the measure and paragraph rhythm to suit the text. Preserve a readable hierarchy and sustained flow rather than every specimen detail.
4
+
5
+ Close leading, first-line indents, and modest 6-point paragraph gaps are the current baseline. Flush openings after headings or visual breaks, a quiet byline, and a distinct standfirst support that character. Adapt or omit these treatments when another choice better serves the document; long prose must still flow naturally.
6
+
7
+ Headings can be sparse or more frequent according to the material. Occasional visuals may span the text width, with a caption beneath. References normally sit quietly at the end. The starting design is restrained, but it does not prohibit a purposeful departure or impose a mandatory outline.
8
+
9
+ The layout wraps body blocks in `Prose`, which expands author components before applying paragraph flow. Keep ordinary `Paragraph` blocks and their IDs; don't add leading spaces to content or manually split lines. `Prose` inserts a measured em-space run for the first line and leaves continuation lines flush across page breaks. Keep it scoped to body prose, never captions or references. Do not nest `Prose` regions. Read `docs/PROSE.md` before changing this compatibility helper.
10
+
11
+ The caller supplies the theme; the template's type sizes and spacing remain adaptable. Preview the catalog specimen with the shared Neutral theme. Keep document-specific variations local so other documents retain their existing layout. Preserve stable content IDs and review all pages after a layout change; shared changes need sparse and long specimens as well. Do not change unrelated templates or documents.
@@ -0,0 +1,11 @@
1
+ # Editorial essay
2
+
3
+ A layout component for continuous, single-column essays. It sets A4 geometry, 105-point side margins, an open title/byline/standfirst arrangement, close 11/15.62-point body typography, and discreet page numbers. Openings are flush left; later paragraphs have a 1½-em first-line indent, with 6-point gaps between body paragraphs. Prose flows through as many pages as it needs. Fonts and colors come from the caller's theme.
4
+
5
+ Use `EditorialEssay` with `title`, `theme`, optional `author` and `standfirst`, and ordinary OpenDoc blocks as `children`. Supply verified `references` to the component and use `Cite` within the text; cited references appear at the end. There is no mandatory content outline or JSON schema. Content may use the document's own data contract when useful.
6
+
7
+ The template uses the [Prose compatibility helper](../../docs/PROSE.md) to indent body paragraphs after author components have expanded. It resets at headings and figures, leaves captions and reference entries alone, and preserves comment targets. Forme still handles line wrapping and pagination; source text contains no manually inserted whitespace or line breaks.
8
+
9
+ `preview.tsx` supplies a Neutral layout specimen with clearly identified placeholders, including visual and reference positions. Its `Specimen` export also accepts `length="sparse"` or `length="long"` for flow checks. Specimen-generated IDs belong only to the fixed proof; authored content must keep stable semantic IDs.
10
+
11
+ `starter.tsx` becomes a new ordinary document when the user chooses this template. Creation replaces the title/theme sentinels safely and imports the generated `./theme` adapter; layout imports remain linked to this folder. Preserve the adapter and `assets.json` in each instance. Changing an existing essay's theme must not change this template's geometry. Read `AGENTS.md` before altering its layout.