@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.
- package/.agents/skills/opendoc-apply-comments/SKILL.md +30 -0
- package/.agents/skills/opendoc-apply-comments/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-create/SKILL.md +63 -0
- package/.agents/skills/opendoc-create/agents/openai.yaml +6 -0
- package/.agents/skills/opendoc-create-template/SKILL.md +50 -0
- package/.agents/skills/opendoc-create-template/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-create-template/references/structured-reports.md +11 -0
- package/.agents/skills/opendoc-create-theme/SKILL.md +40 -0
- package/.agents/skills/opendoc-create-theme/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-current-document/SKILL.md +32 -0
- package/.agents/skills/opendoc-current-document/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-current-document/references/context-fields.md +20 -0
- package/.agents/skills/opendoc-review-document/SKILL.md +60 -0
- package/.agents/skills/opendoc-review-document/agents/openai.yaml +4 -0
- package/AGENTS.md +69 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/SECURITY.md +9 -0
- package/THIRD_PARTY.md +49 -0
- package/VALIDATION.md +99 -0
- package/bin/opendoc.mjs +6 -0
- package/dist/assets/Markdown-sNZyjJi7.js +29 -0
- package/dist/assets/OpenDocSerif-Regular-D3OXs9A9.ttf +0 -0
- package/dist/assets/OpenDocSerif-Semibold-CjL9oDRo.ttf +0 -0
- package/dist/assets/geist-latin-ext-wght-italic-XgKbg5n7.woff2 +0 -0
- package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/assets/geist-latin-wght-italic-dTnRTFFJ.woff2 +0 -0
- package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/assets/index-DdrZ6ozO.css +1 -0
- package/dist/assets/index-DgNBz7mL.js +39 -0
- package/dist/assets/pdf-B7Emtyld.js +54 -0
- package/dist/assets/pdf.worker.min-Dswkl-cV.mjs +29 -0
- package/dist/assets/wordmark-DsqLlZpb.png +0 -0
- package/dist/index.html +17 -0
- package/docs/APPEARANCE.md +21 -0
- package/docs/ASSETS.md +176 -0
- package/docs/AUTHORING.md +178 -0
- package/docs/HEADLESS.md +120 -0
- package/docs/MEDIA.md +112 -0
- package/docs/PROJECTS.md +55 -0
- package/docs/PROSE.md +15 -0
- package/docs/SELECTION.md +59 -0
- package/docs/TEMPLATES.md +55 -0
- package/docs/THEMES.md +106 -0
- package/node_modules/@formepdf/core/LICENSE +21 -0
- package/node_modules/@formepdf/core/README.md +53 -0
- package/node_modules/@formepdf/core/dist/attachments.d.ts +55 -0
- package/node_modules/@formepdf/core/dist/attachments.js +59 -0
- package/node_modules/@formepdf/core/dist/extract.d.ts +8 -0
- package/node_modules/@formepdf/core/dist/extract.js +56 -0
- package/node_modules/@formepdf/core/dist/index.d.ts +311 -0
- package/node_modules/@formepdf/core/dist/index.js +167 -0
- package/node_modules/@formepdf/core/dist/layout.d.ts +132 -0
- package/node_modules/@formepdf/core/dist/layout.js +240 -0
- package/node_modules/@formepdf/core/dist/shared/browserHelpers.d.ts +19 -0
- package/node_modules/@formepdf/core/dist/shared/browserHelpers.js +128 -0
- package/node_modules/@formepdf/core/package.json +35 -0
- package/node_modules/@formepdf/core/pkg-node/LICENSE +21 -0
- package/node_modules/@formepdf/core/pkg-node/README.md +84 -0
- package/node_modules/@formepdf/core/pkg-node/forme.d.ts +39 -0
- package/node_modules/@formepdf/core/pkg-node/forme.js +394 -0
- package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm +0 -0
- package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm.d.ts +21 -0
- package/node_modules/@formepdf/core/pkg-node/package.json +25 -0
- package/node_modules/@formepdf/react/README.md +70 -0
- package/node_modules/@formepdf/react/dist/charts.d.ts +72 -0
- package/node_modules/@formepdf/react/dist/charts.js +338 -0
- package/node_modules/@formepdf/react/dist/components.d.ts +533 -0
- package/node_modules/@formepdf/react/dist/components.js +608 -0
- package/node_modules/@formepdf/react/dist/expr.d.ts +20 -0
- package/node_modules/@formepdf/react/dist/expr.js +39 -0
- package/node_modules/@formepdf/react/dist/font.d.ts +2 -0
- package/node_modules/@formepdf/react/dist/font.js +1 -0
- package/node_modules/@formepdf/react/dist/index.d.ts +11 -0
- package/node_modules/@formepdf/react/dist/index.js +15 -0
- package/node_modules/@formepdf/react/dist/render.d.ts +12 -0
- package/node_modules/@formepdf/react/dist/render.js +15 -0
- package/node_modules/@formepdf/react/dist/serialize.d.ts +12 -0
- package/node_modules/@formepdf/react/dist/serialize.js +1470 -0
- package/node_modules/@formepdf/react/dist/stylesheet.d.ts +4 -0
- package/node_modules/@formepdf/react/dist/stylesheet.js +5 -0
- package/node_modules/@formepdf/react/dist/template-proxy.d.ts +38 -0
- package/node_modules/@formepdf/react/dist/template-proxy.js +100 -0
- package/node_modules/@formepdf/react/dist/types.d.ts +287 -0
- package/node_modules/@formepdf/react/dist/types.js +1 -0
- package/node_modules/@formepdf/react/package.json +41 -0
- package/node_modules/@formepdf/shared/README.md +7 -0
- package/node_modules/@formepdf/shared/dist/canvas.d.ts +6 -0
- package/node_modules/@formepdf/shared/dist/canvas.js +43 -0
- package/node_modules/@formepdf/shared/dist/charts.d.ts +100 -0
- package/node_modules/@formepdf/shared/dist/charts.js +98 -0
- package/node_modules/@formepdf/shared/dist/encode.d.ts +27 -0
- package/node_modules/@formepdf/shared/dist/encode.js +93 -0
- package/node_modules/@formepdf/shared/dist/font.d.ts +13 -0
- package/node_modules/@formepdf/shared/dist/font.js +52 -0
- package/node_modules/@formepdf/shared/dist/index.d.ts +10 -0
- package/node_modules/@formepdf/shared/dist/index.js +15 -0
- package/node_modules/@formepdf/shared/dist/parser.d.ts +30 -0
- package/node_modules/@formepdf/shared/dist/parser.js +756 -0
- package/node_modules/@formepdf/shared/dist/semantics.d.ts +15 -0
- package/node_modules/@formepdf/shared/dist/semantics.js +44 -0
- package/node_modules/@formepdf/shared/dist/style.d.ts +7 -0
- package/node_modules/@formepdf/shared/dist/style.js +1024 -0
- package/node_modules/@formepdf/shared/dist/types.d.ts +743 -0
- package/node_modules/@formepdf/shared/dist/types.js +2 -0
- package/node_modules/@formepdf/shared/package.json +35 -0
- package/node_modules/@types/node/LICENSE +21 -0
- package/node_modules/@types/node/README.md +15 -0
- package/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/node_modules/@types/node/assert.d.ts +1078 -0
- package/node_modules/@types/node/async_hooks.d.ts +603 -0
- package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/node_modules/@types/node/buffer.d.ts +1934 -0
- package/node_modules/@types/node/child_process.d.ts +1476 -0
- package/node_modules/@types/node/cluster.d.ts +578 -0
- package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/node_modules/@types/node/console.d.ts +452 -0
- package/node_modules/@types/node/constants.d.ts +21 -0
- package/node_modules/@types/node/crypto.d.ts +4545 -0
- package/node_modules/@types/node/dgram.d.ts +600 -0
- package/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/node_modules/@types/node/dns.d.ts +923 -0
- package/node_modules/@types/node/domain.d.ts +170 -0
- package/node_modules/@types/node/events.d.ts +976 -0
- package/node_modules/@types/node/fs/promises.d.ts +1306 -0
- package/node_modules/@types/node/fs.d.ts +4463 -0
- package/node_modules/@types/node/globals.d.ts +172 -0
- package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/node_modules/@types/node/http.d.ts +2097 -0
- package/node_modules/@types/node/http2.d.ts +2843 -0
- package/node_modules/@types/node/https.d.ts +579 -0
- package/node_modules/@types/node/index.d.ts +98 -0
- package/node_modules/@types/node/inspector.d.ts +253 -0
- package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/node_modules/@types/node/module.d.ts +891 -0
- package/node_modules/@types/node/net.d.ts +1076 -0
- package/node_modules/@types/node/os.d.ts +506 -0
- package/node_modules/@types/node/package.json +145 -0
- package/node_modules/@types/node/path.d.ts +200 -0
- package/node_modules/@types/node/perf_hooks.d.ts +968 -0
- package/node_modules/@types/node/process.d.ts +2084 -0
- package/node_modules/@types/node/punycode.d.ts +117 -0
- package/node_modules/@types/node/querystring.d.ts +152 -0
- package/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/node_modules/@types/node/readline.d.ts +594 -0
- package/node_modules/@types/node/repl.d.ts +428 -0
- package/node_modules/@types/node/sea.d.ts +162 -0
- package/node_modules/@types/node/sqlite.d.ts +722 -0
- package/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/node_modules/@types/node/stream/web.d.ts +573 -0
- package/node_modules/@types/node/stream.d.ts +1694 -0
- package/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/node_modules/@types/node/test.d.ts +2265 -0
- package/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/node_modules/@types/node/timers.d.ts +287 -0
- package/node_modules/@types/node/tls.d.ts +1319 -0
- package/node_modules/@types/node/trace_events.d.ts +197 -0
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +98 -0
- package/node_modules/@types/node/tty.d.ts +208 -0
- package/node_modules/@types/node/url.d.ts +984 -0
- package/node_modules/@types/node/util.d.ts +2606 -0
- package/node_modules/@types/node/v8.d.ts +920 -0
- package/node_modules/@types/node/vm.d.ts +1053 -0
- package/node_modules/@types/node/wasi.d.ts +181 -0
- package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/node_modules/@types/node/web-globals/streams.d.ts +22 -0
- package/node_modules/@types/node/worker_threads.d.ts +819 -0
- package/node_modules/@types/node/zlib.d.ts +747 -0
- package/node_modules/@types/react/LICENSE +21 -0
- package/node_modules/@types/react/README.md +15 -0
- package/node_modules/@types/react/canary.d.ts +129 -0
- package/node_modules/@types/react/compiler-runtime.d.ts +4 -0
- package/node_modules/@types/react/experimental.d.ts +184 -0
- package/node_modules/@types/react/global.d.ts +166 -0
- package/node_modules/@types/react/index.d.ts +4378 -0
- package/node_modules/@types/react/jsx-dev-runtime.d.ts +33 -0
- package/node_modules/@types/react/jsx-runtime.d.ts +24 -0
- package/node_modules/@types/react/package.json +210 -0
- package/node_modules/@types/react/ts5.0/canary.d.ts +129 -0
- package/node_modules/@types/react/ts5.0/experimental.d.ts +184 -0
- package/node_modules/@types/react/ts5.0/global.d.ts +166 -0
- package/node_modules/@types/react/ts5.0/index.d.ts +4365 -0
- package/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts +33 -0
- package/node_modules/@types/react/ts5.0/jsx-runtime.d.ts +24 -0
- package/node_modules/csstype/LICENSE +19 -0
- package/node_modules/csstype/README.md +291 -0
- package/node_modules/csstype/index.d.ts +22569 -0
- package/node_modules/csstype/index.js.flow +6863 -0
- package/node_modules/csstype/package.json +70 -0
- package/node_modules/entities/LICENSE +11 -0
- package/node_modules/entities/decode.d.ts +1 -0
- package/node_modules/entities/decode.js +3 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.js +511 -0
- package/node_modules/entities/dist/commonjs/decode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.js +73 -0
- package/node_modules/entities/dist/commonjs/encode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.js +121 -0
- package/node_modules/entities/dist/commonjs/escape.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/index.d.ts +96 -0
- package/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/index.js +131 -0
- package/node_modules/entities/dist/commonjs/index.js.map +1 -0
- package/node_modules/entities/dist/commonjs/package.json +3 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/esm/decode.d.ts +209 -0
- package/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode.js +497 -0
- package/node_modules/entities/dist/esm/decode.js.map +1 -0
- package/node_modules/entities/dist/esm/encode.d.ts +22 -0
- package/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/encode.js +69 -0
- package/node_modules/entities/dist/esm/encode.js.map +1 -0
- package/node_modules/entities/dist/esm/escape.d.ts +43 -0
- package/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/escape.js +117 -0
- package/node_modules/entities/dist/esm/escape.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/esm/index.d.ts +96 -0
- package/node_modules/entities/dist/esm/index.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/index.js +107 -0
- package/node_modules/entities/dist/esm/index.js.map +1 -0
- package/node_modules/entities/dist/esm/package.json +3 -0
- package/node_modules/entities/escape.d.ts +1 -0
- package/node_modules/entities/escape.js +3 -0
- package/node_modules/entities/package.json +118 -0
- package/node_modules/entities/readme.md +122 -0
- package/node_modules/entities/src/decode-codepoint.ts +81 -0
- package/node_modules/entities/src/decode.spec.ts +320 -0
- package/node_modules/entities/src/decode.ts +620 -0
- package/node_modules/entities/src/encode.spec.ts +78 -0
- package/node_modules/entities/src/encode.ts +77 -0
- package/node_modules/entities/src/escape.spec.ts +14 -0
- package/node_modules/entities/src/escape.ts +148 -0
- package/node_modules/entities/src/generated/.eslintrc.json +10 -0
- package/node_modules/entities/src/generated/decode-data-html.ts +8 -0
- package/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
- package/node_modules/entities/src/generated/encode-html.ts +17 -0
- package/node_modules/entities/src/index.spec.ts +125 -0
- package/node_modules/entities/src/index.ts +188 -0
- package/node_modules/parse5/LICENSE +19 -0
- package/node_modules/parse5/README.md +38 -0
- package/node_modules/parse5/dist/cjs/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/cjs/common/doctype.js +118 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.js +66 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.js +237 -0
- package/node_modules/parse5/dist/cjs/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/cjs/common/html.js +528 -0
- package/node_modules/parse5/dist/cjs/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/common/token.js +24 -0
- package/node_modules/parse5/dist/cjs/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/cjs/common/unicode.js +70 -0
- package/node_modules/parse5/dist/cjs/index.d.ts +71 -0
- package/node_modules/parse5/dist/cjs/index.js +54 -0
- package/node_modules/parse5/dist/cjs/package.json +1 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.js +114 -0
- package/node_modules/parse5/dist/cjs/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/cjs/parser/index.js +3240 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.js +328 -0
- package/node_modules/parse5/dist/cjs/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/cjs/serializer/index.js +172 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.js +2714 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.js +200 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.js +176 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.js +2 -0
- package/node_modules/parse5/dist/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/common/doctype.js +114 -0
- package/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/common/error-codes.js +63 -0
- package/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/common/foreign-content.js +228 -0
- package/node_modules/parse5/dist/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/common/html.js +523 -0
- package/node_modules/parse5/dist/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/common/token.js +20 -0
- package/node_modules/parse5/dist/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/common/unicode.js +62 -0
- package/node_modules/parse5/dist/index.d.ts +71 -0
- package/node_modules/parse5/dist/index.js +42 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
- package/node_modules/parse5/dist/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/parser/index.js +3245 -0
- package/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
- package/node_modules/parse5/dist/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/serializer/index.js +168 -0
- package/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/tokenizer/index.js +2710 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
- package/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/tree-adapters/default.js +173 -0
- package/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
- package/node_modules/parse5/package.json +50 -0
- package/node_modules/undici-types/LICENSE +21 -0
- package/node_modules/undici-types/README.md +6 -0
- package/node_modules/undici-types/agent.d.ts +31 -0
- package/node_modules/undici-types/api.d.ts +43 -0
- package/node_modules/undici-types/balanced-pool.d.ts +29 -0
- package/node_modules/undici-types/cache.d.ts +36 -0
- package/node_modules/undici-types/client.d.ts +108 -0
- package/node_modules/undici-types/connector.d.ts +34 -0
- package/node_modules/undici-types/content-type.d.ts +21 -0
- package/node_modules/undici-types/cookies.d.ts +28 -0
- package/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
- package/node_modules/undici-types/dispatcher.d.ts +256 -0
- package/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
- package/node_modules/undici-types/errors.d.ts +149 -0
- package/node_modules/undici-types/eventsource.d.ts +61 -0
- package/node_modules/undici-types/fetch.d.ts +209 -0
- package/node_modules/undici-types/file.d.ts +39 -0
- package/node_modules/undici-types/filereader.d.ts +54 -0
- package/node_modules/undici-types/formdata.d.ts +108 -0
- package/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/node_modules/undici-types/global-origin.d.ts +7 -0
- package/node_modules/undici-types/handlers.d.ts +15 -0
- package/node_modules/undici-types/header.d.ts +4 -0
- package/node_modules/undici-types/index.d.ts +71 -0
- package/node_modules/undici-types/interceptors.d.ts +17 -0
- package/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/node_modules/undici-types/mock-client.d.ts +25 -0
- package/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/node_modules/undici-types/package.json +55 -0
- package/node_modules/undici-types/patch.d.ts +33 -0
- package/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/node_modules/undici-types/pool.d.ts +39 -0
- package/node_modules/undici-types/proxy-agent.d.ts +28 -0
- package/node_modules/undici-types/readable.d.ts +65 -0
- package/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/node_modules/undici-types/retry-handler.d.ts +116 -0
- package/node_modules/undici-types/util.d.ts +18 -0
- package/node_modules/undici-types/webidl.d.ts +228 -0
- package/node_modules/undici-types/websocket.d.ts +150 -0
- package/package.json +80 -0
- package/scripts/rebuild-forme.mjs +61 -0
- package/src/app/AppearanceControl.tsx +44 -0
- package/src/app/AssetThemeDefaults.tsx +87 -0
- package/src/app/AssetsBrowser.tsx +273 -0
- package/src/app/CommentDock.tsx +108 -0
- package/src/app/CreateDocumentDialog.tsx +51 -0
- package/src/app/DocumentActions.tsx +69 -0
- package/src/app/DocumentCard.tsx +50 -0
- package/src/app/DocumentViewControl.tsx +31 -0
- package/src/app/DocumentsBrowser.tsx +70 -0
- package/src/app/ExportHistoryDialog.tsx +86 -0
- package/src/app/ExportMenu.tsx +127 -0
- package/src/app/GuideDialog.tsx +80 -0
- package/src/app/InspectionLayer.tsx +77 -0
- package/src/app/LogoUploadDialog.tsx +92 -0
- package/src/app/Markdown.tsx +34 -0
- package/src/app/MaterialsBrowser.tsx +149 -0
- package/src/app/PageNumberInput.tsx +56 -0
- package/src/app/Pdf.tsx +561 -0
- package/src/app/ProjectDialogs.tsx +100 -0
- package/src/app/Reader.tsx +769 -0
- package/src/app/SearchField.tsx +13 -0
- package/src/app/Sidebar.tsx +86 -0
- package/src/app/SkillIndex.tsx +30 -0
- package/src/app/TemplatesBrowser.tsx +149 -0
- package/src/app/ThemesBrowser.tsx +159 -0
- package/src/app/api.ts +47 -0
- package/src/app/appearance.ts +35 -0
- package/src/app/assets.css +139 -0
- package/src/app/catalogPreview.ts +20 -0
- package/src/app/colors.css +167 -0
- package/src/app/comment-dock.css +53 -0
- package/src/app/commentDrafts.ts +67 -0
- package/src/app/componentCorrection.ts +17 -0
- package/src/app/edit-workbench.css +87 -0
- package/src/app/editSession.ts +238 -0
- package/src/app/editorRecovery.ts +25 -0
- package/src/app/export-history.css +31 -0
- package/src/app/export.css +17 -0
- package/src/app/guideLinks.ts +21 -0
- package/src/app/guides.css +40 -0
- package/src/app/main.tsx +221 -0
- package/src/app/materials.css +53 -0
- package/src/app/pdfLoading.ts +12 -0
- package/src/app/pdfSelection.ts +112 -0
- package/src/app/projects.css +63 -0
- package/src/app/reader-toolbar.css +65 -0
- package/src/app/selection.css +150 -0
- package/src/app/sidebar.css +60 -0
- package/src/app/skills.css +7 -0
- package/src/app/style.css +1061 -0
- package/src/app/templates.css +49 -0
- package/src/app/themes.css +80 -0
- package/src/app/ui/Icon.tsx +92 -0
- package/src/app/ui/README.md +27 -0
- package/src/app/ui/fonts.css +36 -0
- package/src/app/ui/index.tsx +223 -0
- package/src/app/ui/ui.css +388 -0
- package/src/app/useReaderPreview.ts +19 -0
- package/src/app/useTextEditing.ts +155 -0
- package/src/assets/adapter.ts +122 -0
- package/src/assets/files.ts +378 -0
- package/src/assets/import-worker.ts +294 -0
- package/src/assets/imports.ts +124 -0
- package/src/assets/index.ts +60 -0
- package/src/assets/store.ts +798 -0
- package/src/assets/usage.ts +118 -0
- package/src/cli/check.ts +25 -0
- package/src/cli/init.ts +119 -0
- package/src/cli/lock.ts +34 -0
- package/src/cli/main.ts +118 -0
- package/src/cli/process.ts +19 -0
- package/src/cli/start.ts +96 -0
- package/src/cli/update.ts +348 -0
- package/src/cli/workspace.ts +94 -0
- package/src/document/index.tsx +641 -0
- package/src/document/page.tsx +53 -0
- package/src/document/text-targets.tsx +162 -0
- package/src/media/files.ts +124 -0
- package/src/media/render.ts +63 -0
- package/src/rendering/resolve-sources.ts +84 -0
- package/src/runtime/jsx-dev-runtime.ts +2 -0
- package/src/runtime/jsx-runtime.ts +2 -0
- package/src/runtime/paths.ts +12 -0
- package/src/server/assets-cli.ts +162 -0
- package/src/server/assets-http.ts +100 -0
- package/src/server/client.ts +50 -0
- package/src/server/clipboard.ts +22 -0
- package/src/server/comments-cli.ts +64 -0
- package/src/server/comments.ts +130 -0
- package/src/server/create-cli.ts +33 -0
- package/src/server/create.ts +228 -0
- package/src/server/dependencies.ts +91 -0
- package/src/server/documents.ts +143 -0
- package/src/server/edits.ts +249 -0
- package/src/server/export-batch.ts +105 -0
- package/src/server/export-errors.ts +2 -0
- package/src/server/export-file.ts +57 -0
- package/src/server/export-inputs.ts +66 -0
- package/src/server/export-preview.ts +69 -0
- package/src/server/export.ts +32 -0
- package/src/server/exports.ts +283 -0
- package/src/server/files.ts +21 -0
- package/src/server/guides.ts +71 -0
- package/src/server/index.ts +432 -0
- package/src/server/materials.ts +39 -0
- package/src/server/media-cli.ts +73 -0
- package/src/server/media-mutations.ts +168 -0
- package/src/server/pptx.ts +160 -0
- package/src/server/preflight.ts +129 -0
- package/src/server/projects-cli.ts +29 -0
- package/src/server/projects.ts +187 -0
- package/src/server/render-error.ts +9 -0
- package/src/server/render-source.ts +24 -0
- package/src/server/render.ts +48 -0
- package/src/server/review-cli.ts +40 -0
- package/src/server/review.ts +161 -0
- package/src/server/selection.ts +23 -0
- package/src/server/source-overrides.ts +97 -0
- package/src/server/templates-cli.ts +51 -0
- package/src/server/templates.ts +186 -0
- package/src/server/text-layout.ts +41 -0
- package/src/server/text-source.ts +307 -0
- package/src/server/themes-cli.ts +59 -0
- package/src/server/themes.ts +215 -0
- package/src/server/ttf2eot.d.ts +3 -0
- package/src/server/worker.ts +166 -0
- package/src/server/workspace.ts +242 -0
- package/src/shared/anchors.ts +69 -0
- package/src/shared/assets.ts +154 -0
- package/src/shared/export.ts +34 -0
- package/src/shared/media.ts +33 -0
- package/src/shared/projects.ts +19 -0
- package/src/shared/selection.ts +94 -0
- package/src/shared/skill-index.ts +14 -0
- package/src/shared/starters.ts +19 -0
- package/src/shared/templates.ts +18 -0
- package/src/shared/themes.ts +24 -0
- package/src/shared/types.ts +39 -0
- package/src/template/index.ts +27 -0
- package/src/themes/index.ts +3 -0
- package/src/themes/neutral.ts +20 -0
- package/src/themes/types.ts +110 -0
- package/starter/assets/brand/wordmark.png +0 -0
- package/starter/assets/fonts/InterUI-LICENSE.txt +93 -0
- package/starter/assets/fonts/InterUI-Medium.ttf +0 -0
- package/starter/assets/fonts/InterUI-Regular.ttf +0 -0
- package/starter/assets/fonts/InterUI-source.json +19 -0
- package/starter/assets/fonts/OpenDocMono-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Italic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Semibold.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-SemiboldItalic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Italic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Semibold.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-SemiboldItalic.ttf +0 -0
- package/starter/assets/fonts/SourceCode-LICENSE.md +93 -0
- package/starter/assets/fonts/SourceSans-LICENSE.md +93 -0
- package/starter/assets/fonts/SourceSerif-LICENSE.md +93 -0
- package/starter/assets/fonts/geist/OFL.txt +93 -0
- package/starter/assets/fonts/geist/asset.json +7 -0
- package/starter/assets/fonts/geist/files/1a9874b3be0fc168692a3d2327bccb4d28835653d3b91537a755296a467a83e3.ttf +0 -0
- package/starter/assets/fonts/geist/files/a8eefb873ba9c9020665f8a98302697ce1f3b79ab2deef6ee508c0ca6a82e876.ttf +0 -0
- package/starter/assets/fonts/geist/files/ccce59465ae5c61930ada5453834f60500fbd95084d85db63e0e65fad0125455.ttf +0 -0
- package/starter/assets/fonts/geist/files/f5e95110d70593672515080bee9148463ada0a7f77b89ed65a3d43cb2b0ff83a.pdf +0 -0
- package/starter/assets/fonts/geist/revisions/9a2bc12fb2f23cb27bc227087e63e1407bb804ee0586480bd6b7966ec69fb474.json +60 -0
- package/starter/assets/fonts/inter/OFL.txt +93 -0
- package/starter/assets/fonts/inter/asset.json +7 -0
- package/starter/assets/fonts/inter/files/1b08e7fc267a5c7e1d614100f604b83e7e8a0be241f0f288faa2b3ac93a683ba.ttf +0 -0
- package/starter/assets/fonts/inter/files/5b6f0c6f26e5c554a64cdcc3a9b5d802b7f9aec6206f1dbcfcdcad7b5860a2a9.ttf +0 -0
- package/starter/assets/fonts/inter/files/957db8560d510a198a7d0333fae7b6b444b00c20801581126273978d778eb3c3.pdf +0 -0
- package/starter/assets/fonts/inter/files/b37284b5701b6b168dfc770aa1a4ac492106422fd3ba76bc7641e37434e8019c.ttf +0 -0
- package/starter/assets/fonts/inter/files/c1811d32ac0f6eed1bbf57529f2ecdfc6c717d48a969dd864942436315a1b198.ttf +0 -0
- package/starter/assets/fonts/inter/files/e7a1aaf7eda9f2fad4131725fa556265ec75ca7b2d756260173a040363e8d4f7.ttf +0 -0
- package/starter/assets/fonts/inter/files/ef8f755d933b9310804cc9152f1f18cb2ac460d6b05054ec913d889c9f11f79e.ttf +0 -0
- package/starter/assets/fonts/inter/revisions/600391517c413963b71e278a57c26c40366c81fa3939a6b9755f446206766d12.json +99 -0
- package/starter/assets/fonts/inter/source.json +57 -0
- package/starter/assets/fonts/lato/OFL.txt +93 -0
- package/starter/assets/fonts/lato/asset.json +7 -0
- package/starter/assets/fonts/lato/files/4a6b566dbb28adb473a8789ce5169306f42f0c8a070ac92bae93636f36348b0d.pdf +0 -0
- package/starter/assets/fonts/lato/files/5adeb6b334d8fb99ef053bc052b952773d544315e0e1d668a12c0ce8bd51375c.ttf +0 -0
- package/starter/assets/fonts/lato/files/62c1b7f0d2e74b45960154c3520efc337b553db0961bfdc950d5618334596cc8.ttf +0 -0
- package/starter/assets/fonts/lato/files/71b8b7decbe75a881ed267be539d402bd1e9420b799658aada4e0d1bd5af803c.ttf +0 -0
- package/starter/assets/fonts/lato/files/8a0aace75d33794eece4b28187bfc1df0bbd2888b5d8a56e01788c8d65d16be1.ttf +0 -0
- package/starter/assets/fonts/lato/files/d636e4683231f931eda222d588e944d082bfd3bdba02f928bee461c0f185b251.ttf +0 -0
- package/starter/assets/fonts/lato/files/e399c44efe1387100531d26c7e4800c5d12251b890d6654a3098c7c679cb1786.ttf +0 -0
- package/starter/assets/fonts/lato/revisions/49ccb93400a9d466fab7d9843b1ecf8916ec6d47a475dd79a597a22eb39616bc.json +99 -0
- package/starter/assets/fonts/lato/source.json +57 -0
- package/starter/assets/fonts/merriweather/OFL.txt +93 -0
- package/starter/assets/fonts/merriweather/asset.json +7 -0
- package/starter/assets/fonts/merriweather/files/1c54f91b910454251c4c2b7bd4e472e1abf265fba7ca3c0ef2eee2f41324099e.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/8bde8da2bb7f0265e27ba0481f70bb48d0f98a976c145f2f239c648ddd6532e0.pdf +0 -0
- package/starter/assets/fonts/merriweather/files/90b7db4460fcd1a5ca49575c2668a793f3cd6447664d312a068d690e1c01e6bc.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/afff81272b7653417bb6f8bef57add055b1f9fda36f27eba5f32b40752bd08da.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/e029d3b71e5bae3877c73f4f2b15af28db16593d49b0aed2a328d37ff7075846.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/e9864a6790bf712a04e20f3662b206a1535186ed3e877fd859dd5fb9682335df.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/fa71baebdd20a7d0de2e5e445a5922530fe9e1d740efbe791f113b682d3cb093.ttf +0 -0
- package/starter/assets/fonts/merriweather/revisions/1888e390b3e4f38a3d7cd2dc1bb805aeb6ce13f986a97656f0265fd436bc91d2.json +99 -0
- package/starter/assets/fonts/merriweather/source.json +57 -0
- package/starter/assets/fonts/open-sans/OFL.txt +92 -0
- package/starter/assets/fonts/open-sans/asset.json +7 -0
- package/starter/assets/fonts/open-sans/files/1bc0594a83762b2c25d38915a34464b7fec6088298ca22d151757bf98d6700ec.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/47ed1cfaa7ffca04a04ab850b2938fd52c09d1b44cfa3e2980878e166b0cbd87.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/574939af301f07df8e21cfff279465c5981dd9d9cf62086f7515897df951c6f5.pdf +0 -0
- package/starter/assets/fonts/open-sans/files/6d3884d0d57c1b67e9c50c54eca7b69c535c114e76bd7a9cfda0258588185553.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/733eb93b167e6d45de09aa768f6c0355647c2c26f5416dbc7407a08ed41e81c6.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/75367e6da7d914eaed87883ba51b2a2b5816b5cdbb39f96ec5c81a5b032bfd5a.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/ff4fdc11204e0edd14e9a0bb6c374b847a9093b0ec2c16702e03afca79ac4ef7.ttf +0 -0
- package/starter/assets/fonts/open-sans/revisions/bbbe3a4915b9bccbc883c0decb4097511c43b6bd09ae22a1516aff128c219bc5.json +99 -0
- package/starter/assets/fonts/open-sans/source.json +57 -0
- package/starter/assets/fonts/roboto/OFL.txt +93 -0
- package/starter/assets/fonts/roboto/asset.json +7 -0
- package/starter/assets/fonts/roboto/files/22d45d989248a624252b8382067ac56550212fa675dcdbaf12f03d297dd87a58.pdf +0 -0
- package/starter/assets/fonts/roboto/files/35757eaa996b3359022f47f164a67ee9eac04971af24c5b8fbd4b89e844ff190.ttf +0 -0
- package/starter/assets/fonts/roboto/files/4d3035883c531846bd1ce2dc89f36d932e72dc114f56062c7e3a9cdd74f3d3ea.ttf +0 -0
- package/starter/assets/fonts/roboto/files/be7639306a4fc4a02ce2ae2ff59eb1335e4db4a7379dd0a384ed7cc053817789.ttf +0 -0
- package/starter/assets/fonts/roboto/files/d2920cbb1b60a3fd11fbf22049286e43a6baf522d37fdf1e7c89562319bcfea5.ttf +0 -0
- package/starter/assets/fonts/roboto/files/dece7c71bbe61710787f0839c722c65e87355dd2eb4a823e6b5488121ff81e4b.ttf +0 -0
- package/starter/assets/fonts/roboto/files/f478ba88b0292e685e487901dfbb1401457d32d6ebee4030cdfd5698235bffa8.ttf +0 -0
- package/starter/assets/fonts/roboto/revisions/bda5e2d84c17313373dd2dbf3e64fe0dd450c7e1b59e6929e69557e122fe976e.json +99 -0
- package/starter/assets/fonts/roboto/source.json +57 -0
- package/starter/assets/logos/opendoc/asset.json +6 -0
- package/starter/assets/logos/opendoc/files/831d5ccd9eb6709cc8439ea257c03d81452e81a28a3d1eedbd6a3b7daff687b6.png +0 -0
- package/starter/assets/logos/opendoc/revisions/834dde8926ddb81de687254195a168bb13bfb77803307f1257de1f2228be63b2.json +33 -0
- package/starter/assets/ui-fonts/geist/OFL.txt +93 -0
- package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-italic.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-normal.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-wght-italic.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-wght-normal.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/source.json +26 -0
- package/starter/documents/welcome/assets.json +7 -0
- package/starter/documents/welcome/index.tsx +160 -0
- package/starter/documents/welcome/media/.gitkeep +0 -0
- package/starter/documents/welcome/media/paper-architecture/image.png +0 -0
- package/starter/documents/welcome/media/paper-architecture/meta.json +9 -0
- package/starter/documents/welcome/media/paper-architecture/prompt.txt +1 -0
- package/starter/documents/welcome/media/studio-rhythm/chart.svg +2343 -0
- package/starter/documents/welcome/media/studio-rhythm/data.json +234 -0
- package/starter/documents/welcome/media/studio-rhythm/generation.json +9 -0
- package/starter/documents/welcome/media/studio-rhythm/image.png +0 -0
- package/starter/documents/welcome/media/studio-rhythm/meta.json +11 -0
- package/starter/documents/welcome/media/studio-rhythm/recipe.py +79 -0
- package/starter/documents/welcome/theme.tsx +5 -0
- package/starter/documents/welcome-presentation/assets.json +7 -0
- package/starter/documents/welcome-presentation/index.tsx +166 -0
- package/starter/documents/welcome-presentation/media/.gitkeep +0 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/image.png +0 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/meta.json +9 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/prompt.txt +1 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/chart.svg +1336 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/data.json +234 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/generation.json +9 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/image.png +0 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/meta.json +13 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/recipe.py +49 -0
- package/starter/documents/welcome-presentation/theme.tsx +5 -0
- package/starter/projects.json +17 -0
- package/starter/templates/AGENTS.md +9 -0
- package/starter/templates/_shared/BusinessLogo.tsx +14 -0
- package/starter/templates/_shared/Pricing.tsx +40 -0
- package/starter/templates/_shared/commerce.ts +93 -0
- package/starter/templates/brand-guidelines/AGENTS.md +32 -0
- package/starter/templates/brand-guidelines/index.tsx +62 -0
- package/starter/templates/brand-guidelines/preview.tsx +181 -0
- package/starter/templates/brand-guidelines/starter.tsx +179 -0
- package/starter/templates/brand-guidelines/template.json +15 -0
- package/starter/templates/business-proposal/AGENTS.md +13 -0
- package/starter/templates/business-proposal/README.md +36 -0
- package/starter/templates/business-proposal/data.json +37 -0
- package/starter/templates/business-proposal/examples/long.json +142 -0
- package/starter/templates/business-proposal/examples/sparse.json +17 -0
- package/starter/templates/business-proposal/examples/typical.json +37 -0
- package/starter/templates/business-proposal/index.tsx +59 -0
- package/starter/templates/business-proposal/preview.tsx +47 -0
- package/starter/templates/business-proposal/schema.ts +14 -0
- package/starter/templates/business-proposal/starter.tsx +18 -0
- package/starter/templates/business-proposal/template.json +11 -0
- package/starter/templates/company-profile/AGENTS.md +48 -0
- package/starter/templates/company-profile/index.tsx +69 -0
- package/starter/templates/company-profile/preview.tsx +185 -0
- package/starter/templates/company-profile/starter.tsx +186 -0
- package/starter/templates/company-profile/template.json +15 -0
- package/starter/templates/consulting-report/AGENTS.md +11 -0
- package/starter/templates/consulting-report/README.md +13 -0
- package/starter/templates/consulting-report/RESEARCH.md +10 -0
- package/starter/templates/consulting-report/index.tsx +44 -0
- package/starter/templates/consulting-report/preview.tsx +39 -0
- package/starter/templates/consulting-report/starter.tsx +15 -0
- package/starter/templates/consulting-report/template.json +11 -0
- package/starter/templates/editorial-essay/AGENTS.md +11 -0
- package/starter/templates/editorial-essay/README.md +11 -0
- package/starter/templates/editorial-essay/index.tsx +30 -0
- package/starter/templates/editorial-essay/preview.tsx +26 -0
- package/starter/templates/editorial-essay/starter.tsx +15 -0
- package/starter/templates/editorial-essay/template.json +11 -0
- package/starter/templates/executive-brief/AGENTS.md +9 -0
- package/starter/templates/executive-brief/README.md +11 -0
- package/starter/templates/executive-brief/index.tsx +33 -0
- package/starter/templates/executive-brief/preview.tsx +37 -0
- package/starter/templates/executive-brief/starter.tsx +11 -0
- package/starter/templates/executive-brief/template.json +11 -0
- package/starter/templates/image-story/AGENTS.md +37 -0
- package/starter/templates/image-story/index.tsx +106 -0
- package/starter/templates/image-story/preview.tsx +33 -0
- package/starter/templates/image-story/starter.tsx +24 -0
- package/starter/templates/image-story/template.json +13 -0
- package/starter/templates/invoice/AGENTS.md +13 -0
- package/starter/templates/invoice/README.md +40 -0
- package/starter/templates/invoice/data.json +61 -0
- package/starter/templates/invoice/examples/long.json +241 -0
- package/starter/templates/invoice/examples/sparse.json +33 -0
- package/starter/templates/invoice/examples/typical.json +61 -0
- package/starter/templates/invoice/index.tsx +57 -0
- package/starter/templates/invoice/preview.tsx +12 -0
- package/starter/templates/invoice/schema.ts +45 -0
- package/starter/templates/invoice/starter.tsx +12 -0
- package/starter/templates/invoice/template.json +11 -0
- package/starter/templates/literary-text/AGENTS.md +9 -0
- package/starter/templates/literary-text/README.md +11 -0
- package/starter/templates/literary-text/index.tsx +31 -0
- package/starter/templates/literary-text/preview.tsx +20 -0
- package/starter/templates/literary-text/starter.tsx +11 -0
- package/starter/templates/literary-text/template.json +11 -0
- package/starter/templates/magazine-feature/AGENTS.md +11 -0
- package/starter/templates/magazine-feature/README.md +13 -0
- package/starter/templates/magazine-feature/index.tsx +41 -0
- package/starter/templates/magazine-feature/preview.tsx +34 -0
- package/starter/templates/magazine-feature/starter.tsx +15 -0
- package/starter/templates/magazine-feature/template.json +11 -0
- package/starter/templates/monthly-report/AGENTS.md +11 -0
- package/starter/templates/monthly-report/README.md +24 -0
- package/starter/templates/monthly-report/data.json +131 -0
- package/starter/templates/monthly-report/examples/long.json +519 -0
- package/starter/templates/monthly-report/examples/sparse.json +20 -0
- package/starter/templates/monthly-report/examples/typical.json +37 -0
- package/starter/templates/monthly-report/index.tsx +92 -0
- package/starter/templates/monthly-report/preview.tsx +14 -0
- package/starter/templates/monthly-report/schema.ts +127 -0
- package/starter/templates/monthly-report/starter.tsx +13 -0
- package/starter/templates/monthly-report/template.json +11 -0
- package/starter/templates/pitch-deck/AGENTS.md +32 -0
- package/starter/templates/pitch-deck/index.tsx +46 -0
- package/starter/templates/pitch-deck/preview.tsx +142 -0
- package/starter/templates/pitch-deck/starter.tsx +140 -0
- package/starter/templates/pitch-deck/template.json +15 -0
- package/starter/templates/proposal-deck/AGENTS.md +25 -0
- package/starter/templates/proposal-deck/index.tsx +52 -0
- package/starter/templates/proposal-deck/preview.tsx +172 -0
- package/starter/templates/proposal-deck/starter.tsx +168 -0
- package/starter/templates/proposal-deck/template.json +7 -0
- package/starter/templates/quotation/AGENTS.md +13 -0
- package/starter/templates/quotation/README.md +42 -0
- package/starter/templates/quotation/data.json +64 -0
- package/starter/templates/quotation/examples/long.json +272 -0
- package/starter/templates/quotation/examples/sparse.json +31 -0
- package/starter/templates/quotation/examples/typical.json +64 -0
- package/starter/templates/quotation/index.tsx +51 -0
- package/starter/templates/quotation/preview.tsx +12 -0
- package/starter/templates/quotation/schema.ts +27 -0
- package/starter/templates/quotation/starter.tsx +12 -0
- package/starter/templates/quotation/template.json +11 -0
- package/starter/templates/scientific-paper/AGENTS.md +11 -0
- package/starter/templates/scientific-paper/README.md +13 -0
- package/starter/templates/scientific-paper/index.tsx +47 -0
- package/starter/templates/scientific-paper/preview.tsx +43 -0
- package/starter/templates/scientific-paper/starter.tsx +15 -0
- package/starter/templates/scientific-paper/template.json +11 -0
- package/starter/themes/Specimen.tsx +54 -0
- package/starter/themes/civic-spectrum/components.tsx +92 -0
- package/starter/themes/civic-spectrum/design.md +70 -0
- package/starter/themes/civic-spectrum/index.ts +57 -0
- package/starter/themes/civic-spectrum/preview.tsx +66 -0
- package/starter/themes/field-manual/components.tsx +106 -0
- package/starter/themes/field-manual/design.md +72 -0
- package/starter/themes/field-manual/index.ts +57 -0
- package/starter/themes/field-manual/preview.tsx +82 -0
- package/starter/themes/index.ts +3 -0
- package/starter/themes/mckinsey-consulting/components.tsx +69 -0
- package/starter/themes/mckinsey-consulting/design.md +68 -0
- package/starter/themes/mckinsey-consulting/index.ts +60 -0
- package/starter/themes/mckinsey-consulting/preview.tsx +53 -0
- package/starter/themes/neutral/design.md +35 -0
- package/starter/themes/neutral/index.ts +21 -0
- package/starter/themes/neutral/preview.tsx +4 -0
- package/starter/themes/opendoc-neutral/components.tsx +77 -0
- package/starter/themes/opendoc-neutral/design.md +70 -0
- package/starter/themes/opendoc-neutral/index.ts +54 -0
- package/starter/themes/opendoc-neutral/preview.tsx +43 -0
- package/starter/themes/types.ts +3 -0
- package/tsconfig.workspace.json +24 -0
- package/vendor/formepdf/LICENSE +21 -0
- package/vendor/formepdf/README.md +97 -0
- package/vendor/formepdf/font-subset.patch +228 -0
- package/vendor/formepdf/text-writer.patch +507 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
{
|
|
2
|
+
"basis": "Synthetic data for a design demonstration; not observed work or product performance.",
|
|
3
|
+
"units": {
|
|
4
|
+
"pages": "pages",
|
|
5
|
+
"research": "hours",
|
|
6
|
+
"drafting": "hours",
|
|
7
|
+
"design": "hours",
|
|
8
|
+
"review": "hours"
|
|
9
|
+
},
|
|
10
|
+
"stages": [
|
|
11
|
+
"research",
|
|
12
|
+
"drafting",
|
|
13
|
+
"design",
|
|
14
|
+
"review"
|
|
15
|
+
],
|
|
16
|
+
"documents": [
|
|
17
|
+
{
|
|
18
|
+
"id": "document-01-1",
|
|
19
|
+
"week": 1,
|
|
20
|
+
"pages": 7,
|
|
21
|
+
"research": 7,
|
|
22
|
+
"drafting": 11,
|
|
23
|
+
"design": 4,
|
|
24
|
+
"review": 5
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "document-01-2",
|
|
28
|
+
"week": 1,
|
|
29
|
+
"pages": 14,
|
|
30
|
+
"research": 10,
|
|
31
|
+
"drafting": 16,
|
|
32
|
+
"design": 8,
|
|
33
|
+
"review": 7
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "document-02-1",
|
|
37
|
+
"week": 2,
|
|
38
|
+
"pages": 10,
|
|
39
|
+
"research": 9,
|
|
40
|
+
"drafting": 14,
|
|
41
|
+
"design": 5,
|
|
42
|
+
"review": 7
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "document-02-2",
|
|
46
|
+
"week": 2,
|
|
47
|
+
"pages": 17,
|
|
48
|
+
"research": 12,
|
|
49
|
+
"drafting": 19,
|
|
50
|
+
"design": 9,
|
|
51
|
+
"review": 9
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "document-03-1",
|
|
55
|
+
"week": 3,
|
|
56
|
+
"pages": 13,
|
|
57
|
+
"research": 11,
|
|
58
|
+
"drafting": 17,
|
|
59
|
+
"design": 6,
|
|
60
|
+
"review": 9
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "document-03-2",
|
|
64
|
+
"week": 3,
|
|
65
|
+
"pages": 20,
|
|
66
|
+
"research": 14,
|
|
67
|
+
"drafting": 22,
|
|
68
|
+
"design": 10,
|
|
69
|
+
"review": 11
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "document-04-1",
|
|
73
|
+
"week": 4,
|
|
74
|
+
"pages": 16,
|
|
75
|
+
"research": 13,
|
|
76
|
+
"drafting": 20,
|
|
77
|
+
"design": 7,
|
|
78
|
+
"review": 11
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "document-04-2",
|
|
82
|
+
"week": 4,
|
|
83
|
+
"pages": 6,
|
|
84
|
+
"research": 5,
|
|
85
|
+
"drafting": 10,
|
|
86
|
+
"design": 11,
|
|
87
|
+
"review": 3
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "document-05-1",
|
|
91
|
+
"week": 5,
|
|
92
|
+
"pages": 19,
|
|
93
|
+
"research": 15,
|
|
94
|
+
"drafting": 8,
|
|
95
|
+
"design": 8,
|
|
96
|
+
"review": 3
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "document-05-2",
|
|
100
|
+
"week": 5,
|
|
101
|
+
"pages": 9,
|
|
102
|
+
"research": 7,
|
|
103
|
+
"drafting": 13,
|
|
104
|
+
"design": 3,
|
|
105
|
+
"review": 5
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "document-06-1",
|
|
109
|
+
"week": 6,
|
|
110
|
+
"pages": 5,
|
|
111
|
+
"research": 6,
|
|
112
|
+
"drafting": 11,
|
|
113
|
+
"design": 9,
|
|
114
|
+
"review": 5
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "document-06-2",
|
|
118
|
+
"week": 6,
|
|
119
|
+
"pages": 12,
|
|
120
|
+
"research": 9,
|
|
121
|
+
"drafting": 16,
|
|
122
|
+
"design": 4,
|
|
123
|
+
"review": 7
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "document-07-1",
|
|
127
|
+
"week": 7,
|
|
128
|
+
"pages": 8,
|
|
129
|
+
"research": 8,
|
|
130
|
+
"drafting": 14,
|
|
131
|
+
"design": 10,
|
|
132
|
+
"review": 7
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "document-07-2",
|
|
136
|
+
"week": 7,
|
|
137
|
+
"pages": 15,
|
|
138
|
+
"research": 11,
|
|
139
|
+
"drafting": 19,
|
|
140
|
+
"design": 5,
|
|
141
|
+
"review": 9
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "document-08-1",
|
|
145
|
+
"week": 8,
|
|
146
|
+
"pages": 11,
|
|
147
|
+
"research": 10,
|
|
148
|
+
"drafting": 17,
|
|
149
|
+
"design": 11,
|
|
150
|
+
"review": 9
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "document-08-2",
|
|
154
|
+
"week": 8,
|
|
155
|
+
"pages": 18,
|
|
156
|
+
"research": 13,
|
|
157
|
+
"drafting": 22,
|
|
158
|
+
"design": 6,
|
|
159
|
+
"review": 11
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"id": "document-09-1",
|
|
163
|
+
"week": 9,
|
|
164
|
+
"pages": 14,
|
|
165
|
+
"research": 12,
|
|
166
|
+
"drafting": 20,
|
|
167
|
+
"design": 3,
|
|
168
|
+
"review": 11
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "document-09-2",
|
|
172
|
+
"week": 9,
|
|
173
|
+
"pages": 4,
|
|
174
|
+
"research": 15,
|
|
175
|
+
"drafting": 10,
|
|
176
|
+
"design": 7,
|
|
177
|
+
"review": 3
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "document-10-1",
|
|
181
|
+
"week": 10,
|
|
182
|
+
"pages": 17,
|
|
183
|
+
"research": 14,
|
|
184
|
+
"drafting": 8,
|
|
185
|
+
"design": 4,
|
|
186
|
+
"review": 3
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "document-10-2",
|
|
190
|
+
"week": 10,
|
|
191
|
+
"pages": 7,
|
|
192
|
+
"research": 6,
|
|
193
|
+
"drafting": 13,
|
|
194
|
+
"design": 8,
|
|
195
|
+
"review": 5
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"id": "document-11-1",
|
|
199
|
+
"week": 11,
|
|
200
|
+
"pages": 20,
|
|
201
|
+
"research": 5,
|
|
202
|
+
"drafting": 11,
|
|
203
|
+
"design": 5,
|
|
204
|
+
"review": 5
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"id": "document-11-2",
|
|
208
|
+
"week": 11,
|
|
209
|
+
"pages": 10,
|
|
210
|
+
"research": 8,
|
|
211
|
+
"drafting": 16,
|
|
212
|
+
"design": 9,
|
|
213
|
+
"review": 7
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "document-12-1",
|
|
217
|
+
"week": 12,
|
|
218
|
+
"pages": 6,
|
|
219
|
+
"research": 7,
|
|
220
|
+
"drafting": 14,
|
|
221
|
+
"design": 6,
|
|
222
|
+
"review": 7
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"id": "document-12-2",
|
|
226
|
+
"week": 12,
|
|
227
|
+
"pages": 13,
|
|
228
|
+
"research": 10,
|
|
229
|
+
"drafting": 19,
|
|
230
|
+
"design": 10,
|
|
231
|
+
"review": 9
|
|
232
|
+
}
|
|
233
|
+
]
|
|
234
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"imageHash": "79eea7d1122692fe26197f3b97d9c720e6ce0cc6573e7e39dfea033b21eb8f1d",
|
|
4
|
+
"inputs": {
|
|
5
|
+
"media/studio-rhythm/data.json": "f307dc1c2cf822755899b4dc2393e55d66188150dd06d9fedd1f99c8b0a40c97",
|
|
6
|
+
"media/studio-rhythm/recipe.py": "ee111692f6d0b663e22a3ba995fa3a30f358c9777a9aeb7c8b68008a069f2196"
|
|
7
|
+
},
|
|
8
|
+
"recordedAt": "2026-09-11T06:46:40.534Z"
|
|
9
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "The shape of a working season",
|
|
3
|
+
"description": "Three coordinated views of a synthetic 24-document studio: weekly hours by workstream, total hours by workstream, and document length against total effort. Demonstrates a detailed local chart with reusable data and a generation recipe.",
|
|
4
|
+
"file": "image.png",
|
|
5
|
+
"kind": "chart",
|
|
6
|
+
"alt": "A stacked area chart shows twelve weeks of research, drafting, design and review. A horizontal bar chart totals each workstream; a scatterplot compares pages and hours for twenty-four fictional documents.",
|
|
7
|
+
"sources": ["Original synthetic demonstration dataset authored for the OpenDoc welcome document, 11 September 2026. No project activity or product performance was measured."],
|
|
8
|
+
"data": "data.json",
|
|
9
|
+
"recipe": "recipe.py",
|
|
10
|
+
"attribution": "Illustrative data only. This is not an OpenDoc productivity benchmark."
|
|
11
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Render the illustrative studio dataset. Requires matplotlib and numpy.
|
|
2
|
+
Run: uv run --with matplotlib python documents/welcome/media/studio-rhythm/recipe.py
|
|
3
|
+
All values are synthetic. The script reads and never regenerates the prepared data.
|
|
4
|
+
"""
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
import json
|
|
7
|
+
import numpy as np
|
|
8
|
+
import matplotlib
|
|
9
|
+
matplotlib.use("Agg")
|
|
10
|
+
import matplotlib.pyplot as plt
|
|
11
|
+
from matplotlib.font_manager import FontProperties, fontManager
|
|
12
|
+
|
|
13
|
+
HERE = Path(__file__).resolve().parent
|
|
14
|
+
ROOT = HERE.parents[3]
|
|
15
|
+
DATA = json.loads((HERE / "data.json").read_text())
|
|
16
|
+
for face in ["Regular", "Semibold"]:
|
|
17
|
+
fontManager.addfont(str(ROOT / "assets" / "fonts" / f"OpenDocSans-{face}.ttf"))
|
|
18
|
+
regular = FontProperties(fname=ROOT / "assets/fonts/OpenDocSans-Regular.ttf")
|
|
19
|
+
bold = FontProperties(fname=ROOT / "assets/fonts/OpenDocSans-Semibold.ttf")
|
|
20
|
+
plt.rcParams.update({"font.family": regular.get_name(), "font.size": 9.5, "text.color": "#171A1D", "axes.labelcolor": "#62686D", "xtick.color": "#62686D", "ytick.color": "#62686D", "axes.edgecolor": "#D7D7D2", "axes.linewidth": .6, "svg.fonttype": "path"})
|
|
21
|
+
stages = DATA["stages"]
|
|
22
|
+
rows = DATA["documents"]
|
|
23
|
+
weeks = np.arange(1, 13)
|
|
24
|
+
values = np.array([[sum(row[stage] for row in rows if row["week"] == week) for week in weeks] for stage in stages])
|
|
25
|
+
palette = ["#D4D0C7", "#969DA5", "#30363C", "#3758F9"]
|
|
26
|
+
fig = plt.figure(figsize=(7.6, 4.8), facecolor="#FFFFFF")
|
|
27
|
+
fig.text(.055, .964, "A / THE SHAPE OF A WORKING SEASON", fontsize=8, fontproperties=bold)
|
|
28
|
+
fig.text(.055, .914, "Hours per week · 24 fictional documents over 12 weeks", fontsize=8.5, color="#62686D")
|
|
29
|
+
ax = fig.add_axes([.065, .50, .91, .35])
|
|
30
|
+
ax.stackplot(weeks, values, colors=palette, linewidth=.6, edgecolor="white", alpha=1)
|
|
31
|
+
ax.set_xlim(1, 12)
|
|
32
|
+
ax.set_ylim(0, 100)
|
|
33
|
+
ax.set_yticks([0, 25, 50, 75, 100])
|
|
34
|
+
ax.set_xticks([1, 3, 5, 7, 9, 12], ["W01", "W03", "W05", "W07", "W09", "W12"])
|
|
35
|
+
ax.tick_params(length=0, pad=6, labelsize=8)
|
|
36
|
+
ax.grid(axis="y", color="#D7D7D2", alpha=.55, linewidth=.5)
|
|
37
|
+
ax.set_axisbelow(True)
|
|
38
|
+
for side in ["top", "right", "left"]:
|
|
39
|
+
ax.spines[side].set_visible(False)
|
|
40
|
+
for i, (stage, color) in enumerate(zip(stages, palette)):
|
|
41
|
+
x = .075 + i * .235
|
|
42
|
+
fig.add_artist(plt.Rectangle((x, .415), .014, .014, transform=fig.transFigure, color=color, clip_on=False))
|
|
43
|
+
fig.text(x + .025, .415, stage.capitalize(), fontsize=8.5)
|
|
44
|
+
|
|
45
|
+
fig.text(.055, .345, "B / WHERE THE TIME GOES", fontsize=8, fontproperties=bold)
|
|
46
|
+
bar = fig.add_axes([.17, .08, .30, .20])
|
|
47
|
+
totals = values.sum(axis=1)
|
|
48
|
+
y = np.arange(4)
|
|
49
|
+
bar.barh(y, totals, height=.52, color=palette)
|
|
50
|
+
bar.set_yticks(y, [s.capitalize() for s in stages], fontsize=8)
|
|
51
|
+
bar.invert_yaxis()
|
|
52
|
+
bar.set_xlim(0, max(totals) * 1.25)
|
|
53
|
+
bar.set_xticks([])
|
|
54
|
+
bar.tick_params(axis="y", length=0, pad=8)
|
|
55
|
+
for spine in bar.spines.values(): spine.set_visible(False)
|
|
56
|
+
for i, total in enumerate(totals):
|
|
57
|
+
bar.text(total + 6, i, f"{total:.0f} h", va="center", fontsize=8)
|
|
58
|
+
|
|
59
|
+
fig.text(.56, .345, "C / EVERY DOCUMENT IS DIFFERENT", fontsize=8, fontproperties=bold)
|
|
60
|
+
scatter = fig.add_axes([.605, .10, .365, .18])
|
|
61
|
+
pages = [row["pages"] for row in rows]
|
|
62
|
+
hours = [sum(row[s] for s in stages) for row in rows]
|
|
63
|
+
scatter.scatter(pages, hours, c="#969DA5", s=20, linewidths=.5, edgecolors="#FFFFFF", alpha=.9)
|
|
64
|
+
focus = rows.index(max(rows, key=lambda r: r["review"]))
|
|
65
|
+
scatter.scatter([pages[focus]], [hours[focus]], color="#3758F9", s=30, zorder=3, edgecolors="white", linewidths=.6)
|
|
66
|
+
scatter.set_xlim(0, 22)
|
|
67
|
+
scatter.set_ylim(0, 70)
|
|
68
|
+
scatter.set_xticks([0, 10, 20])
|
|
69
|
+
scatter.set_yticks([0, 30, 60])
|
|
70
|
+
scatter.set_xlabel("Document length (pages)", fontsize=7.5, labelpad=4)
|
|
71
|
+
scatter.set_ylabel("Hours", fontsize=7.5, labelpad=1)
|
|
72
|
+
scatter.tick_params(length=0, pad=4, labelsize=7.5)
|
|
73
|
+
scatter.grid(color="#EAE7DF", linewidth=.5)
|
|
74
|
+
scatter.set_axisbelow(True)
|
|
75
|
+
for side in ["top", "right"]: scatter.spines[side].set_visible(False)
|
|
76
|
+
fig.savefig(HERE / "image.png", dpi=320, facecolor="white")
|
|
77
|
+
fig.savefig(HERE / "chart.svg", facecolor="white")
|
|
78
|
+
plt.close(fig)
|
|
79
|
+
print(json.dumps({"documents": len(rows), "hours": int(sum(totals)), "stages": dict(zip(stages, map(int, totals))), "peak_week_hours": int(values.sum(axis=0).max()), "image": str(HERE / "image.png")}, indent=2))
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { Presentation, Slide, Paragraph, Heading, Block, View, MediaFrame, Logo, Strong, Cite, References, type DocumentMeta } from 'opendoc';
|
|
3
|
+
import { colors as c } from '../../themes/opendoc-neutral';
|
|
4
|
+
import { theme } from './theme';
|
|
5
|
+
import studio from './media/studio-rhythm/data.json';
|
|
6
|
+
|
|
7
|
+
export const meta: DocumentMeta = {
|
|
8
|
+
title: 'Welcome to OpenDoc',
|
|
9
|
+
description: 'An illustrated presentation tour: ideas, composition, imagery, evidence, shared assets, feedback, and a reviewed PDF.',
|
|
10
|
+
kind: 'A guided tour', theme: theme.id,
|
|
11
|
+
};
|
|
12
|
+
const slideTheme = { ...theme, fontSize: 20, lineHeight: 1.35, paragraphGap: 12,
|
|
13
|
+
design: { ...theme.design, typography: { ...theme.design?.typography,
|
|
14
|
+
body: { fontSize: 20, lineHeight: 1.35 }, small: { fontSize: 16, lineHeight: 1.4 },
|
|
15
|
+
h1: { fontSize: 44, fontWeight: 600 as const, lineHeight: 1.08, letterSpacing: -1, marginTop: 0, marginBottom: 16 },
|
|
16
|
+
h2: { fontSize: 25, fontWeight: 600 as const, lineHeight: 1.15, marginTop: 0, marginBottom: 12 },
|
|
17
|
+
} },
|
|
18
|
+
};
|
|
19
|
+
const label = { fontFamily: 'OpenDoc Mono', fontSize: 11, letterSpacing: 1, lineHeight: 1.3, marginBottom: 0 };
|
|
20
|
+
const note = { fontSize: 12, lineHeight: 1.35, color: c.muted, marginBottom: 0 };
|
|
21
|
+
function At({ x, y, w, children }: { x: number; y: number; w: number; children: ReactNode }) {
|
|
22
|
+
return <View style={{ position: 'absolute', left: x, top: y, width: w }}>{children}</View>;
|
|
23
|
+
}
|
|
24
|
+
function Rule({ x=48, y, w=864, color=c.rule }: { x?: number; y: number; w?: number; color?: string }) {
|
|
25
|
+
return <View style={{ position:'absolute', left:x, top:y, width:w, height:0.6, backgroundColor:color }}/>;
|
|
26
|
+
}
|
|
27
|
+
function Folio({ id, n, dark=false }: { id: string; n: string; dark?: boolean }) {
|
|
28
|
+
return <><Rule y={500} color={dark?c.inverseRule:c.rule}/><At x={48} y={513} w={800}><Paragraph id={`${id}-running-label`} style={{...label,fontSize:9,color:dark?c.inverseMuted:c.muted}}>OPENDOC / A GUIDED TOUR</Paragraph></At><At x={870} y={510} w={42}><Paragraph id={`${id}-folio`} style={{...note,textAlign:'right',color:dark?c.inverseMuted:c.muted}}>{n}</Paragraph></At></>;
|
|
29
|
+
}
|
|
30
|
+
function Sheet({ x,y,w,h,blue=false }: {x:number;y:number;w:number;h:number;blue?:boolean}) {
|
|
31
|
+
return <View style={{position:'absolute',left:x,top:y,width:w,height:h,backgroundColor:blue?c.blue:c.white,borderWidth:blue?0:0.7,borderColor:c.rule,padding:22}}>
|
|
32
|
+
<View style={{height:5,width:w*.35,backgroundColor:blue?c.inverse:c.ink,marginBottom:24}}/>
|
|
33
|
+
{[.86,.72,.84,.56].map((width,i)=><View key={i} style={{height:2,width:(w-44)*width,backgroundColor:blue?'#9AAAFD':c.rule,marginBottom:10}}/>)}
|
|
34
|
+
<View style={{height:h*.25,marginTop:10,backgroundColor:blue?'#6B83FC':c.stone}}/>
|
|
35
|
+
</View>;
|
|
36
|
+
}
|
|
37
|
+
const stages = ['research','drafting','design','review'] as const;
|
|
38
|
+
const totals = stages.map(key => studio.documents.reduce((sum,row)=>sum+row[key],0));
|
|
39
|
+
const total = totals.reduce((a,b)=>a+b,0);
|
|
40
|
+
|
|
41
|
+
export default function WelcomePresentation() {
|
|
42
|
+
return <Presentation title={meta.title} author="OpenDoc" theme={slideTheme} references={{
|
|
43
|
+
workspace:{author:'OpenDoc',title:'Workspace guide: README.md',year:'2026'},
|
|
44
|
+
authoring:{author:'OpenDoc',title:'Authoring: docs/AUTHORING.md',year:'2026'},
|
|
45
|
+
media:{author:'OpenDoc',title:'Media and assets: docs/MEDIA.md and docs/ASSETS.md',year:'2026'},
|
|
46
|
+
}}>
|
|
47
|
+
<Slide id="welcome" padding={0}>
|
|
48
|
+
<At x={48} y={38} w={165}><Block id="welcome-logo"><Logo width={165}/></Block></At>
|
|
49
|
+
<At x={48} y={139} w={510}>
|
|
50
|
+
<Paragraph id="welcome-label" style={{...label,color:c.blue,marginBottom:24}}>THE POSSIBILITIES START HERE</Paragraph>
|
|
51
|
+
<Heading id="welcome-title" level={1} style={{fontSize:70,lineHeight:1.01,letterSpacing:-2.6,marginBottom:24}}>{'Welcome to\nOpenDoc.'}</Heading>
|
|
52
|
+
<Paragraph id="welcome-lead" style={{fontSize:24,width:440}}>A local place to make work you are proud to share.</Paragraph>
|
|
53
|
+
</At>
|
|
54
|
+
<Block id="welcome-paper-composition"><Sheet x={622} y={124} w={202} h={274}/><Sheet x={682} y={174} w={202} h={274} blue/><Sheet x={578} y={230} w={202} h={228}/></Block>
|
|
55
|
+
<At x={48} y={454} w={480}><Paragraph id="welcome-caption" style={note}>An illustrated tour, made with the same tools you will use.</Paragraph></At>
|
|
56
|
+
<Folio id="welcome" n="01"/>
|
|
57
|
+
</Slide>
|
|
58
|
+
|
|
59
|
+
<Slide id="the-working-relationship" padding={0}>
|
|
60
|
+
<At x={48} y={46} w={850}><Paragraph id="relationship-label" style={{...label,color:c.blue,marginBottom:20}}>01 / FROM INTENT TO ARTIFACT</Paragraph><Heading id="relationship-title" level={1}>You direct. The work takes shape.</Heading><Paragraph id="relationship-lead" style={{width:730,color:c.muted}}>Bring the idea and material. Develop the writing and design with your coding agent. Read the result in OpenDoc.</Paragraph></At>
|
|
61
|
+
<Rule y={254}/>
|
|
62
|
+
<At x={48} y={282} w={245}><Paragraph id="relationship-you-label" style={{...label,color:c.blue,marginBottom:17}}>YOU</Paragraph><Heading id="relationship-you-title" level={2}>Set the direction.</Heading><Paragraph id="relationship-you-copy">The reader, the purpose, the source material, and what good looks like.</Paragraph></At>
|
|
63
|
+
<At x={354} y={282} w={245}><Paragraph id="relationship-agent-label" style={{...label,color:c.blue,marginBottom:17}}>YOUR CODING AGENT</Paragraph><Heading id="relationship-agent-title" level={2}>Author the work.</Heading><Paragraph id="relationship-agent-copy">Writing, layout, images, charts, and revisions in the local source.</Paragraph></At>
|
|
64
|
+
<At x={660} y={282} w={252}><Paragraph id="relationship-app-label" style={{...label,color:c.blue,marginBottom:17}}>OPENDOC</Paragraph><Heading id="relationship-app-title" level={2}>Make it tangible.</Heading><Paragraph id="relationship-app-copy">The real PDF, with selection, corrections, comments, and export.</Paragraph></At>
|
|
65
|
+
<At x={48} y={463} w={840}><Paragraph id="relationship-local-note" style={note}>OpenDoc has no built-in AI chat. You choose the external agent and what you share with it.</Paragraph></At>
|
|
66
|
+
<Folio id="the-working-relationship" n="02"/>
|
|
67
|
+
</Slide>
|
|
68
|
+
|
|
69
|
+
<Slide id="give-work-a-home" padding={0}>
|
|
70
|
+
<At x={48} y={46} w={800}><Paragraph id="home-label" style={{...label,color:c.blue,marginBottom:20}}>02 / BEGIN</Paragraph><Heading id="home-title" level={1}>Give good work a home.</Heading></At>
|
|
71
|
+
<At x={48} y={179} w={360}><Paragraph id="home-projects">Create a project for a client, a course, or a body of work. Choose a default theme for a consistent starting point.</Paragraph><Paragraph id="home-create" style={{marginTop:20}}>Choose <Strong>Create presentation</Strong>, copy the prompt, and add your brief in your coding agent. Your project travels with it. <Cite source="workspace"/></Paragraph></At>
|
|
72
|
+
<View style={{position:'absolute',left:480,top:178,width:432,height:252,backgroundColor:c.stone,padding:28}}>
|
|
73
|
+
<Paragraph id="home-project-label" style={{...label,color:c.muted,marginBottom:12}}>PROJECT</Paragraph><Heading id="home-project-name" level={2}>Getting started</Heading><View style={{height:1,backgroundColor:c.rule,marginTop:8,marginBottom:24}}/>
|
|
74
|
+
<View style={{flexDirection:'row',gap:28}}><View style={{width:172}}><Paragraph id="home-documents" style={{fontSize:24,fontWeight:600}}>Documents</Paragraph><Paragraph id="home-document-example" style={{fontSize:16,color:c.muted}}>The written field guide</Paragraph></View><View style={{width:172}}><Paragraph id="home-presentations" style={{fontSize:24,fontWeight:600}}>Presentations</Paragraph><Paragraph id="home-presentation-example" style={{fontSize:16,color:c.muted}}>The tour you are reading</Paragraph></View></View>
|
|
75
|
+
</View>
|
|
76
|
+
<At x={480} y={448} w={420}><Paragraph id="home-library-note" style={note}>Separate library pages. One project. The same editing tools.</Paragraph></At><Folio id="give-work-a-home" n="03"/>
|
|
77
|
+
</Slide>
|
|
78
|
+
|
|
79
|
+
<Slide id="a-useful-brief" padding={0} style={{backgroundColor:c.night}}>
|
|
80
|
+
<At x={48} y={46} w={820}><Paragraph id="brief-label" style={{...label,color:c.inverseMuted,marginBottom:24}}>03 / START THE CONVERSATION</Paragraph><Heading id="brief-title" level={1} style={{color:c.inverse}}>A good brief gives the work direction.</Heading></At>
|
|
81
|
+
<View style={{position:'absolute',left:48,top:178,width:4,height:181,backgroundColor:c.blue}}/>
|
|
82
|
+
<At x={76} y={171} w={788}><Paragraph id="brief-example" style={{fontFamily:'OpenDoc Serif',fontStyle:'italic',fontSize:32,lineHeight:1.3,color:c.inverse}}>Create a presentation from my notes for a first client meeting. Explain the problem, our approach, and the next decision. Flag missing facts. Review every slide before handing it back.</Paragraph></At>
|
|
83
|
+
<Rule y={395} color={c.inverseRule}/>
|
|
84
|
+
<At x={48} y={419} w={180}><Paragraph id="brief-reader" style={{...label,color:c.inverseMuted}}>READER</Paragraph><Paragraph id="brief-reader-value" style={{fontSize:18,color:c.inverse,marginTop:8}}>A first-time client</Paragraph></At>
|
|
85
|
+
<At x={276} y={419} w={180}><Paragraph id="brief-purpose" style={{...label,color:c.inverseMuted}}>PURPOSE</Paragraph><Paragraph id="brief-purpose-value" style={{fontSize:18,color:c.inverse,marginTop:8}}>A next decision</Paragraph></At>
|
|
86
|
+
<At x={504} y={419} w={180}><Paragraph id="brief-material" style={{...label,color:c.inverseMuted}}>MATERIAL</Paragraph><Paragraph id="brief-material-value" style={{fontSize:18,color:c.inverse,marginTop:8}}>Your existing notes</Paragraph></At>
|
|
87
|
+
<At x={732} y={419} w={180}><Paragraph id="brief-standard" style={{...label,color:c.inverseMuted}}>STANDARD</Paragraph><Paragraph id="brief-standard-value" style={{fontSize:18,color:c.inverse,marginTop:8}}>Checked, honest, clear</Paragraph></At><Folio id="a-useful-brief" n="04" dark/>
|
|
88
|
+
</Slide>
|
|
89
|
+
|
|
90
|
+
<Slide id="compose-with-intention" padding={0}>
|
|
91
|
+
<At x={48} y={46} w={860}><Paragraph id="composition-label" style={{...label,color:c.blue,marginBottom:20}}>04 / COMPOSE</Paragraph><Heading id="composition-title" level={1}>Let the slide change its pace.</Heading><Paragraph id="composition-intro" style={{width:755,color:c.muted}}>Use scale, space, and a clear grid. Give each idea the composition it needs.</Paragraph></At>
|
|
92
|
+
<Block id="composition-title-study"><View style={{position:'absolute',left:48,top:235,width:272,height:153,backgroundColor:c.white,borderWidth:.6,borderColor:c.rule,padding:22}}><View style={{width:90,height:3,backgroundColor:c.blue,marginBottom:22}}/><View style={{width:185,height:17,backgroundColor:c.ink,marginBottom:8}}/><View style={{width:142,height:17,backgroundColor:c.ink,marginBottom:17}}/><View style={{width:188,height:3,backgroundColor:c.rule}}/></View></Block>
|
|
93
|
+
<Block id="composition-comparison-study"><View style={{position:'absolute',left:344,top:235,width:272,height:153,backgroundColor:c.white,borderWidth:.6,borderColor:c.rule,padding:22,flexDirection:'row',gap:18}}>{[0,1].map(i=><View key={i} style={{width:105}}><View style={{width:40,height:4,backgroundColor:i?c.blue:c.ink,marginBottom:22}}/>{[95,81,98,70].map((w,j)=><View key={j} style={{width:w,height:3,backgroundColor:c.rule,marginBottom:10}}/>)}</View>)}</View></Block>
|
|
94
|
+
<Block id="composition-visual-study"><View style={{position:'absolute',left:640,top:235,width:272,height:153,backgroundColor:c.night,padding:22,flexDirection:'row',gap:20}}><View style={{width:73}}><View style={{height:4,width:42,backgroundColor:c.blue,marginBottom:24}}/><View style={{height:10,width:70,backgroundColor:c.inverse,marginBottom:8}}/><View style={{height:10,width:53,backgroundColor:c.inverse}}/></View><View style={{width:135,height:109,backgroundColor:c.stone}}/></View></Block>
|
|
95
|
+
<At x={48} y={407} w={272}><Heading id="composition-claim" level={2} style={{fontSize:22}}>One strong statement</Heading><Paragraph id="composition-claim-copy" style={{fontSize:16,color:c.muted}}>A new idea deserves room.</Paragraph></At>
|
|
96
|
+
<At x={344} y={407} w={272}><Heading id="composition-compare" level={2} style={{fontSize:22}}>Two related thoughts</Heading><Paragraph id="composition-compare-copy" style={{fontSize:16,color:c.muted}}>A grid makes comparison natural.</Paragraph></At>
|
|
97
|
+
<At x={640} y={407} w={272}><Heading id="composition-visual" level={2} style={{fontSize:22}}>An image with a job</Heading><Paragraph id="composition-visual-copy" style={{fontSize:16,color:c.muted}}>Let a visual carry the explanation.</Paragraph></At><Folio id="compose-with-intention" n="05"/>
|
|
98
|
+
</Slide>
|
|
99
|
+
|
|
100
|
+
<Slide id="ideas-taking-form" padding={0} style={{backgroundColor:c.night}}>
|
|
101
|
+
<At x={48} y={48} w={370}><Paragraph id="imagery-label" style={{...label,color:c.inverseMuted,marginBottom:31}}>05 / IMAGINE</Paragraph><Heading id="imagery-title" level={1} style={{fontSize:51,color:c.inverse,lineHeight:1.06}}>{'Ideas\ntaking form.'}</Heading><Paragraph id="imagery-copy" style={{fontSize:21,color:c.inverseMuted,marginTop:20}}>Give the image a subject, a mood, and a place in the story.</Paragraph><Paragraph id="imagery-provenance" style={{fontSize:17,color:c.inverseMuted,marginTop:24}}>Keep its prompt, attribution, and source notes with the artwork.</Paragraph></At>
|
|
102
|
+
<At x={456} y={48} w={456}><Block id="imagery-paper-sculpture"><MediaFrame item="paper-architecture" width={456} height={380} fit="cover"/></Block></At>
|
|
103
|
+
<At x={456} y={445} w={452}><Paragraph id="imagery-caption" style={{...note,color:c.inverseMuted}}>AI-generated paper sculpture from the welcome guide. An imagined scene, not documentary evidence.</Paragraph></At><Folio id="ideas-taking-form" n="06" dark/>
|
|
104
|
+
</Slide>
|
|
105
|
+
|
|
106
|
+
<Slide id="evidence-with-a-story" padding={0} style={{backgroundColor:c.white}}>
|
|
107
|
+
<At x={48} y={43} w={850}><Paragraph id="evidence-label" style={{...label,color:c.blue,marginBottom:15}}>06 / EXPLAIN</Paragraph><Heading id="evidence-title" level={1}>The shape of a working season.</Heading></At>
|
|
108
|
+
<At x={48} y={133} w={864}><Paragraph id="evidence-summary" style={{fontSize:17,color:c.muted}}>{`24 fictional documents · 12 weeks · ${total} hours: research ${totals[0]}, drafting ${totals[1]}, design ${totals[2]}, review ${totals[3]}.`}</Paragraph></At>
|
|
109
|
+
<At x={48} y={165} w={864}><Block id="evidence-chart"><MediaFrame item="studio-rhythm" width={864} height={300} fit="contain"/></Block></At>
|
|
110
|
+
<At x={48} y={473} w={860}><Paragraph id="evidence-caption" style={{...note,fontSize:11}}>Synthetic demonstration data from the welcome guide. No activity or product performance was measured.</Paragraph></At><Folio id="evidence-with-a-story" n="07"/>
|
|
111
|
+
</Slide>
|
|
112
|
+
|
|
113
|
+
<Slide id="a-voice-in-type" padding={0}>
|
|
114
|
+
<At x={48} y={46} w={864}><Paragraph id="type-label" style={{...label,color:c.blue,marginBottom:20}}>07 / FIND THE VOICE</Paragraph><Heading id="type-title" level={1}>Rigorous can still feel alive.</Heading></At>
|
|
115
|
+
<At x={48} y={181} w={252}><Paragraph id="type-sans" style={{fontSize:112,fontWeight:600,lineHeight:1,letterSpacing:-4,color:c.blue}}>Aa</Paragraph><Heading id="type-sans-title" level={2} style={{fontSize:22,marginTop:20}}>Clear and direct</Heading><Paragraph id="type-sans-copy" style={{fontSize:18,color:c.muted}}>Sans carries the argument.</Paragraph></At>
|
|
116
|
+
<At x={354} y={181} w={252}><Paragraph id="type-serif" style={{fontFamily:'OpenDoc Serif',fontStyle:'italic',fontSize:112,lineHeight:1,letterSpacing:-4}}>Aa</Paragraph><Heading id="type-serif-title" level={2} style={{fontSize:22,marginTop:20}}>A reflective voice</Heading><Paragraph id="type-serif-copy" style={{fontSize:18,color:c.muted}}>Serif italic changes the pace.</Paragraph></At>
|
|
117
|
+
<At x={660} y={201} w={252}><Paragraph id="type-theme-copy" style={{fontSize:21}}>A theme gives the work a visual language: fonts, colors, and a sense of proportion.</Paragraph><Paragraph id="type-local-copy" style={{fontSize:18,color:c.muted,marginTop:15}}>This deck uses OpenDoc Neutral, with typography composed for the slide.</Paragraph></At>
|
|
118
|
+
<Rule y={430}/><At x={48} y={447} w={864}><Paragraph id="type-theme-boundary" style={{fontSize:16,color:c.muted}}>Document templates are available today. Dedicated presentation templates and theme variants come later.</Paragraph></At><Folio id="a-voice-in-type" n="08"/>
|
|
119
|
+
</Slide>
|
|
120
|
+
|
|
121
|
+
<Slide id="keep-the-materials" padding={0}>
|
|
122
|
+
<At x={48} y={46} w={860}><Paragraph id="assets-label" style={{...label,color:c.blue,marginBottom:20}}>08 / KEEP</Paragraph><Heading id="assets-title" level={1}>A home for every asset.</Heading></At>
|
|
123
|
+
<At x={48} y={171} w={245}><Paragraph id="assets-logo-label" style={{...label,color:c.muted,marginBottom:22}}>SHARED / LOGOS</Paragraph><Block id="assets-wordmark"><Logo width={196}/></Block><Paragraph id="assets-logo-copy" style={{fontSize:19,marginTop:24}}>Import the identity once. Choose a variation that works on the actual PDF background.</Paragraph></At>
|
|
124
|
+
<At x={354} y={171} w={245}><Paragraph id="assets-font-label" style={{...label,color:c.muted,marginBottom:22}}>SHARED / FONTS</Paragraph><Paragraph id="assets-font-sample" style={{fontSize:48,fontWeight:600,lineHeight:1.1}}>Aa Bb Cc</Paragraph><Paragraph id="assets-font-copy" style={{fontSize:19,marginTop:24}}>Keep original font faces. Inspect their real PDF specimen, then bind the family you want.</Paragraph></At>
|
|
125
|
+
<At x={660} y={171} w={252}><Paragraph id="assets-media-label" style={{...label,color:c.muted,marginBottom:22}}>OWNED / MEDIA</Paragraph><Paragraph id="assets-media-sample" style={{fontFamily:'OpenDoc Mono',fontSize:18,lineHeight:1.3,marginBottom:0}}>{'image + data\nrecipe + source notes'}</Paragraph><Paragraph id="assets-media-copy" style={{fontSize:19,marginTop:24}}>Keep prepared visuals with the document. Review and record a chart again when its inputs change.</Paragraph></At>
|
|
126
|
+
<Rule y={435}/><At x={48} y={453} w={864}><Paragraph id="assets-version-note" style={{fontSize:16,color:c.muted}}>Each document keeps its saved logo and font versions until you explicitly update them. <Cite source="media"/></Paragraph></At><Folio id="keep-the-materials" n="09"/>
|
|
127
|
+
</Slide>
|
|
128
|
+
|
|
129
|
+
<Slide id="read-notice-revise" padding={0}>
|
|
130
|
+
<At x={48} y={46} w={860}><Paragraph id="review-label" style={{...label,color:c.blue,marginBottom:20}}>09 / REFINE</Paragraph><Heading id="review-title" level={1}>The next draft is yours.</Heading><Paragraph id="review-intro" style={{color:c.muted}}>Select native text or a component. Make a correction, or leave feedback for your agent.</Paragraph></At>
|
|
131
|
+
<View style={{position:'absolute',left:48,top:226,width:516,height:191,backgroundColor:c.wash,padding:28}}><Paragraph id="review-practice-label" style={{...label,color:c.blue,marginBottom:22}}>TRY IT ON THIS SLIDE</Paragraph><Paragraph id="review-practice" style={{fontSize:30,lineHeight:1.22,marginBottom:0}}>This sentence is ready for your first edit.</Paragraph></View>
|
|
132
|
+
<At x={612} y={226} w={300}><Heading id="review-edit-title" level={2} style={{fontSize:24}}>Edit the wording.</Heading><Paragraph id="review-edit-copy" style={{fontSize:18}}>Choose Edit. Make a few corrections, use Undo or Redo, then Save all.</Paragraph><Heading id="review-comment-title" level={2} style={{fontSize:24,marginTop:19}}>Comment on the idea.</Heading><Paragraph id="review-comment-copy" style={{fontSize:18}}>Ask for a stronger argument, a source check, or a new composition.</Paragraph></At>
|
|
133
|
+
<At x={48} y={445} w={516}><Paragraph id="review-saved-note" style={{...note,fontSize:14}}>Saved corrections reach the local source. Comments keep their history.</Paragraph></At><Folio id="read-notice-revise" n="10"/>
|
|
134
|
+
</Slide>
|
|
135
|
+
|
|
136
|
+
<Slide id="one-canvas-one-thought" padding={0}>
|
|
137
|
+
<At x={48} y={46} w={864}><Paragraph id="canvas-label" style={{...label,color:c.blue,marginBottom:20}}>10 / THINK IN SLIDES</Paragraph><Heading id="canvas-title" level={1}>One canvas. One complete thought.</Heading></At>
|
|
138
|
+
<View style={{position:'absolute',left:48,top:190,width:512,height:288,backgroundColor:c.white,borderWidth:1,borderColor:c.rule,padding:26}}>
|
|
139
|
+
<Paragraph id="canvas-ratio" style={{fontSize:67,fontWeight:600,lineHeight:1,color:c.blue}}>16:9</Paragraph><Paragraph id="canvas-size" style={{...label,marginTop:10,color:c.muted}}>960 × 540 POINTS</Paragraph><View style={{height:1,backgroundColor:c.rule,marginTop:30,marginBottom:23}}/><Paragraph id="canvas-promise" style={{fontSize:23}}>Every authored slide becomes one PDF page.</Paragraph>
|
|
140
|
+
</View>
|
|
141
|
+
<At x={612} y={190} w={300}><Heading id="canvas-fit-title" level={2}>Make the content fit.</Heading><Paragraph id="canvas-fit-copy" style={{fontSize:19}}>Shorten the thought, recompose the slide, or add another slide deliberately.</Paragraph><Heading id="canvas-overflow-title" level={2} style={{marginTop:26}}>Overflow needs a revision.</Heading><Paragraph id="canvas-overflow-copy" style={{fontSize:19}}>Content cannot spill into a continuation slide. An invalid revision blocks export. <Cite source="authoring"/></Paragraph></At><Folio id="one-canvas-one-thought" n="11"/>
|
|
142
|
+
</Slide>
|
|
143
|
+
|
|
144
|
+
<Slide id="export-with-care" padding={0} style={{backgroundColor:c.night}}>
|
|
145
|
+
<At x={48} y={46} w={850}><Paragraph id="export-label" style={{...label,color:c.inverseMuted,marginBottom:24}}>11 / SHARE</Paragraph><Heading id="export-title" level={1} style={{fontSize:54,color:c.inverse}}>Made here. Ready to share.</Heading><Paragraph id="export-lead" style={{color:c.inverseMuted,fontSize:23,width:770}}>Export the revision you have read, checked, and made your own.</Paragraph></At>
|
|
146
|
+
<Rule y={242} color={c.inverseRule}/>
|
|
147
|
+
<At x={48} y={269} w={245}><Paragraph id="export-save-number" style={{fontSize:39,color:c.blue}}>01</Paragraph><Heading id="export-save-title" level={2} style={{color:c.inverse}}>Save and review.</Heading><Paragraph id="export-save-copy" style={{fontSize:18,color:c.inverseMuted}}>Save pending corrections. Inspect every slide, including figures and final details.</Paragraph></At>
|
|
148
|
+
<At x={354} y={269} w={245}><Paragraph id="export-pdf-number" style={{fontSize:39,color:c.blue}}>02</Paragraph><Heading id="export-pdf-title" level={2} style={{color:c.inverse}}>Save the PDF.</Heading><Paragraph id="export-pdf-copy" style={{fontSize:18,color:c.inverseMuted}}>Choose Export, name the file, then Save PDF. Download another copy when you need it.</Paragraph></At>
|
|
149
|
+
<At x={660} y={269} w={252}><Paragraph id="export-version-number" style={{fontSize:39,color:c.blue}}>03</Paragraph><Heading id="export-version-title" level={2} style={{color:c.inverse}}>Keep the version.</Heading><Paragraph id="export-version-copy" style={{fontSize:18,color:c.inverseMuted}}>Previous exports keeps your saved files. A later edit does not change an earlier PDF.</Paragraph></At><Folio id="export-with-care" n="12" dark/>
|
|
150
|
+
</Slide>
|
|
151
|
+
|
|
152
|
+
<Slide id="behind-the-tour" padding={0}>
|
|
153
|
+
<At x={48} y={46} w={864}><Paragraph id="sources-label" style={{...label,color:c.blue,marginBottom:20}}>12 / THE MATERIAL BEHIND THE TOUR</Paragraph><Heading id="sources-title" level={1}>A demonstration you can inspect.</Heading></At>
|
|
154
|
+
<At x={48} y={170} w={470}><References title="Local workspace guides" headingStyle={{fontSize:23,marginTop:0,marginBottom:20}}/></At>
|
|
155
|
+
<At x={582} y={170} w={330}><Heading id="sources-example-title" level={2}>About the examples</Heading><Paragraph id="sources-example-copy" style={{fontSize:19}}>The studio data are synthetic. The paper sculpture was AI-generated for the welcome document. The brief and quotations are original OpenDoc copy.</Paragraph><Paragraph id="sources-preservation" style={{fontSize:18,color:c.muted,marginTop:18}}>Their prepared files and provenance are kept in this presentation’s Media folder.</Paragraph></At>
|
|
156
|
+
<At x={48} y={441} w={860}><Paragraph id="sources-local-note" style={{fontSize:16,color:c.muted}}>Your source, assets, feedback, and PDFs stay local. Keep the workspace in your backup routine.</Paragraph></At><Folio id="behind-the-tour" n="13"/>
|
|
157
|
+
</Slide>
|
|
158
|
+
|
|
159
|
+
<Slide id="your-next-idea" padding={0} style={{backgroundColor:c.night}}>
|
|
160
|
+
<At x={48} y={50} w={830}><Paragraph id="closing-label" style={{...label,color:c.inverseMuted}}>THE NEXT PAGE IS YOURS</Paragraph></At>
|
|
161
|
+
<At x={48} y={152} w={838}><Heading id="closing-title" level={1} style={{fontFamily:'OpenDoc Serif',fontStyle:'italic',fontWeight:400,fontSize:59,lineHeight:1.13,letterSpacing:-1,color:c.inverse}}>{'Bring an idea worth\nputting on a page.'}</Heading><Paragraph id="closing-copy" style={{fontSize:24,lineHeight:1.35,width:655,color:c.inverseMuted,marginTop:27}}>Choose a project. Give your agent a brief. Make something you are proud to share.</Paragraph></At>
|
|
162
|
+
<View style={{position:'absolute',left:48,top:424,width:64,height:4,backgroundColor:c.blue}}/>
|
|
163
|
+
<At x={48} y={454} w={800}><Paragraph id="closing-source" style={{...note,color:c.inverseMuted}}>Welcome to OpenDoc · Presentation edition · Getting started</Paragraph></At><Folio id="your-next-idea" n="14" dark/>
|
|
164
|
+
</Slide>
|
|
165
|
+
</Presentation>;
|
|
166
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Ideas taking form",
|
|
3
|
+
"description": "An editorial paper sculpture generated for the OpenDoc welcome document: curved sheets, layered paper, charcoal shadows, and small blue print marks.",
|
|
4
|
+
"file": "image.png",
|
|
5
|
+
"kind": "illustration",
|
|
6
|
+
"alt": "Warm-white sheets rise into a sculptural arch above stacks of paper, with sparse blue marks and soft light in a charcoal studio.",
|
|
7
|
+
"sources": ["Generated with the built-in Imagegen tool for OpenDoc on 11 September 2026. See prompt.txt for the exact generation prompt."],
|
|
8
|
+
"attribution": "AI-generated editorial illustration. This is an imagined scene, not a photograph documenting a real object."
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use case: stylized-concept. Create one exquisite editorial still-life image for OpenDoc, a local document-making application. The concept is 'ideas taking form': real tactile sheets of warm-white paper folded, curved and stacked into a small architectural landscape, one long sheet rising into a sculptural arch, precise layers and beautiful negative space. A few sheets carry tiny abstract graphite lines and sparse ultramarine blue print marks, no readable text. Photograph the physical paper sculpture in a quiet charcoal studio with a warm neutral stone surface, soft directional daylight from upper left, deep but readable shadows, subtle paper grain, convincingly thin paper edges. Sophisticated design-journal art direction, restrained, sculptural, material, genuinely photographic detail rather than plastic CGI. Wide landscape composition at roughly 3:2, image fills the frame, highest practical resolution. Dominant bone white and near black; ultramarine blue is a very small accent. The entire sculpture fits within the frame with breathing room. No people, screens, computers, UI, lettering, logo, watermark, glowing effects, gradients as graphic decoration, or stock-photo office objects.
|