@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,168 @@
|
|
|
1
|
+
import { ProposalDeck, ProposalSlide, ProposalPanel as Panel, ProposalCopy as Copy, ProposalLabel as Label, ProposalRule as Rule, ProposalPicture as Picture, ProposalLedgerRow as Row } from '../../templates/proposal-deck';
|
|
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
|
+
export const meta = { title, description: 'A client proposal skeleton. Replace all placeholders with agreed scope and supported evidence.', kind: 'client proposal', theme: "__OPENDOC_THEME__" };
|
|
7
|
+
export const provenance = { template: 'templates/proposal-deck/index.tsx' };
|
|
8
|
+
|
|
9
|
+
// All copy lives in this instance. Omit, reorder or adapt slides to the actual decision.
|
|
10
|
+
// Add reviewed document-owned media via image={{item:'your-image'}}. Never invent case results or commercial terms.
|
|
11
|
+
export default function Proposal() {
|
|
12
|
+
return <ProposalDeck title={title} theme={theme}>
|
|
13
|
+
<ProposalSlide id="commission" theme={theme} layout="cover" title={title} eyebrow="A PROPOSAL FOR [CLIENT]" footer="[Prepared by] · [Version / date]" number="01">
|
|
14
|
+
<Picture id="commission-image" x={644} y={0} w={316} h={488} theme={theme} label="Image position · the client's world, desired experience or project site"/>
|
|
15
|
+
<Panel id="commission-summary" x={64} y={364} w={510} h={124} theme={theme}>
|
|
16
|
+
<Copy id="commission-promise" theme={theme} size={24}>[The client outcome this engagement is designed to enable.]</Copy>
|
|
17
|
+
<Copy id="commission-context" theme={theme} size={14}>[Client organization] / [Project or opportunity reference]</Copy>
|
|
18
|
+
</Panel>
|
|
19
|
+
</ProposalSlide>
|
|
20
|
+
|
|
21
|
+
<ProposalSlide id="recommendation" theme={theme} title="The recommendation, at a glance." eyebrow="01 / THE DECISION" footer="Proposal skeleton · replace with an agreed client brief" number="02">
|
|
22
|
+
<Panel id="recommendation-memo" x={88} y={190} w={515} h={304} theme={theme}>
|
|
23
|
+
<Label id="recommendation-label" theme={theme}>WE RECOMMEND</Label>
|
|
24
|
+
<Copy id="recommendation-statement" theme={theme} size={30} bold>[A specific course of action that answers the client's highest priority.]</Copy>
|
|
25
|
+
<Copy id="recommendation-rationale" theme={theme}>[Why this approach fits the situation, and the trade-off it makes.]</Copy>
|
|
26
|
+
</Panel>
|
|
27
|
+
<Rule x={638} y={178} w={274} theme={theme}/>
|
|
28
|
+
<Panel id="recommendation-facts" x={658} y={196} w={254} h={298} theme={theme}>
|
|
29
|
+
<Label id="recommendation-outcome-label" theme={theme}>VALUE TO [CLIENT]</Label>
|
|
30
|
+
<Copy id="recommendation-outcome" theme={theme} size={16}>[Expected benefit and how it will be measured.]</Copy>
|
|
31
|
+
<Label id="recommendation-effort-label" theme={theme}>COMMITMENT REQUIRED</Label>
|
|
32
|
+
<Copy id="recommendation-effort" theme={theme} size={16}>[Investment basis, delivery period and client input.]</Copy>
|
|
33
|
+
<Label id="recommendation-decision-label" theme={theme}>DECISION REQUESTED</Label>
|
|
34
|
+
<Copy id="recommendation-decision" theme={theme} size={16}>[What the approver needs to authorize next.]</Copy>
|
|
35
|
+
</Panel>
|
|
36
|
+
</ProposalSlide>
|
|
37
|
+
|
|
38
|
+
<ProposalSlide id="situation" theme={theme} title="Start with the client's reality." eyebrow="02 / UNDERSTANDING" number="03">
|
|
39
|
+
<Panel id="situation-current" x={88} y={186} w={364} h={225} theme={theme}>
|
|
40
|
+
<Label id="situation-current-label" theme={theme}>WHAT IS HAPPENING</Label>
|
|
41
|
+
<Copy id="situation-current-title" theme={theme} size={28} bold>[The current state, in the client's words.]</Copy>
|
|
42
|
+
<Copy id="situation-current-body" theme={theme}>[Who is affected, where friction occurs and what the client has already tried.]</Copy>
|
|
43
|
+
</Panel>
|
|
44
|
+
<Panel id="situation-stakes" x={510} y={186} w={402} h={225} theme={theme}>
|
|
45
|
+
<Label id="situation-stakes-label" theme={theme}>WHY IT MATTERS NOW</Label>
|
|
46
|
+
<Copy id="situation-stakes-title" theme={theme} size={28} bold>[The business consequence or opportunity.]</Copy>
|
|
47
|
+
<Copy id="situation-stakes-body" theme={theme}>[The trigger, constraints and cost of leaving the situation unresolved. Separate facts from assumptions.]</Copy>
|
|
48
|
+
</Panel>
|
|
49
|
+
<Rule x={88} y={429} w={824} theme={theme}/>
|
|
50
|
+
<Panel id="situation-source" x={88} y={447} w={824} h={47} theme={theme}><Copy id="situation-source-copy" theme={theme} size={13}>[Basis: client discovery / supplied brief / dated source. Note open questions for confirmation.]</Copy></Panel>
|
|
51
|
+
</ProposalSlide>
|
|
52
|
+
|
|
53
|
+
<ProposalSlide id="outcomes" theme={theme} title="Define what success will mean." eyebrow="03 / OUTCOMES" number="04">
|
|
54
|
+
<Panel id="outcome-primary" x={88} y={188} w={248} h={252} theme={theme}>
|
|
55
|
+
<Copy id="outcome-primary-number" theme={theme} size={54} bold>01</Copy>
|
|
56
|
+
<Copy id="outcome-primary-title" theme={theme} size={24} bold>[Primary outcome]</Copy>
|
|
57
|
+
<Copy id="outcome-primary-measure" theme={theme} size={16}>[Baseline → agreed target] · [Measure / evidence] · [Accountable owner]</Copy>
|
|
58
|
+
</Panel>
|
|
59
|
+
<Panel id="outcome-secondary" x={376} y={188} w={248} h={252} theme={theme}>
|
|
60
|
+
<Copy id="outcome-secondary-number" theme={theme} size={54} bold>02</Copy>
|
|
61
|
+
<Copy id="outcome-secondary-title" theme={theme} size={24} bold>[Second outcome]</Copy>
|
|
62
|
+
<Copy id="outcome-secondary-measure" theme={theme} size={16}>[Baseline → agreed target] · [Measure / evidence] · [Accountable owner]</Copy>
|
|
63
|
+
</Panel>
|
|
64
|
+
<Panel id="outcome-enabler" x={664} y={188} w={248} h={252} theme={theme}>
|
|
65
|
+
<Copy id="outcome-enabler-number" theme={theme} size={54} bold>03</Copy>
|
|
66
|
+
<Copy id="outcome-enabler-title" theme={theme} size={24} bold>[Enabling outcome]</Copy>
|
|
67
|
+
<Copy id="outcome-enabler-measure" theme={theme} size={16}>[Baseline → agreed target] · [Measure / evidence] · [Accountable owner]</Copy>
|
|
68
|
+
</Panel>
|
|
69
|
+
<Panel id="outcome-agreement" x={88} y={460} w={824} h={34} theme={theme}><Copy id="outcome-agreement-copy" theme={theme} size={13}>[Confirm measurement period, data access and acceptance authority before delivery begins.]</Copy></Panel>
|
|
70
|
+
</ProposalSlide>
|
|
71
|
+
|
|
72
|
+
<ProposalSlide id="approach" theme={theme} title="An approach shaped around the outcome." eyebrow="04 / RECOMMENDED APPROACH" titleSize={36} number="05">
|
|
73
|
+
<Panel id="approach-reasoning" x={88} y={190} w={345} h={304} theme={theme}>
|
|
74
|
+
<Label id="approach-principle-label" theme={theme}>THE CORE IDEA</Label>
|
|
75
|
+
<Copy id="approach-principle" theme={theme} size={27} bold>[The organizing principle behind the solution.]</Copy>
|
|
76
|
+
<Copy id="approach-logic" theme={theme} size={18}>[Explain how the approach produces the desired change. Include the important design choice.]</Copy>
|
|
77
|
+
<Copy id="approach-alternative" theme={theme} size={14}>[Alternative considered and the reason for this recommendation.]</Copy>
|
|
78
|
+
</Panel>
|
|
79
|
+
<Picture id="approach-visual" x={484} y={182} w={428} h={245} theme={theme} label="Visual position · solution diagram, experience concept or annotated prototype"/>
|
|
80
|
+
<Panel id="approach-caption" x={484} y={442} w={428} h={52} theme={theme}><Copy id="approach-caption-copy" theme={theme} size={13}>[Caption: connect the visual to a specific client benefit.]</Copy></Panel>
|
|
81
|
+
</ProposalSlide>
|
|
82
|
+
|
|
83
|
+
<ProposalSlide id="workstreams" theme={theme} title="Translate the idea into work." eyebrow="05 / DELIVERY APPROACH" number="06">
|
|
84
|
+
<Panel id="workstream-discover" x={88} y={183} w={200} h={90} theme={theme}><Label id="workstream-discover-label" theme={theme}>WORKSTREAM 01</Label><Copy id="workstream-discover-title" theme={theme} size={24} bold>[Understand]</Copy></Panel>
|
|
85
|
+
<Panel id="workstream-discover-detail" x={358} y={183} w={554} h={90} theme={theme}><Copy id="workstream-discover-body" theme={theme}>[Activities and decisions that establish the baseline and test the critical assumptions.]</Copy><Copy id="workstream-discover-output" theme={theme} size={13}>[Output → the next workstream needs this result.]</Copy></Panel>
|
|
86
|
+
<Rule x={88} y={278} w={824} theme={theme}/>
|
|
87
|
+
<Panel id="workstream-create" x={88} y={297} w={200} h={90} theme={theme}><Label id="workstream-create-label" theme={theme}>WORKSTREAM 02</Label><Copy id="workstream-create-title" theme={theme} size={24} bold>[Create]</Copy></Panel>
|
|
88
|
+
<Panel id="workstream-create-detail" x={358} y={297} w={554} h={90} theme={theme}><Copy id="workstream-create-body" theme={theme}>[Activities that develop and test the proposed solution with the people who will use it.]</Copy><Copy id="workstream-create-output" theme={theme} size={13}>[Output → the next decision this work enables.]</Copy></Panel>
|
|
89
|
+
<Rule x={88} y={392} w={824} theme={theme}/>
|
|
90
|
+
<Panel id="workstream-enable" x={88} y={411} w={200} h={83} theme={theme}><Label id="workstream-enable-label" theme={theme}>WORKSTREAM 03</Label><Copy id="workstream-enable-title" theme={theme} size={24} bold>[Enable]</Copy></Panel>
|
|
91
|
+
<Panel id="workstream-enable-detail" x={358} y={411} w={554} h={83} theme={theme}><Copy id="workstream-enable-body" theme={theme}>[Activities that support adoption, handover and measurement of the agreed results.]</Copy></Panel>
|
|
92
|
+
</ProposalSlide>
|
|
93
|
+
|
|
94
|
+
<ProposalSlide id="deliverables" theme={theme} title="Make the deliverables testable." eyebrow="06 / SCOPE & ACCEPTANCE" number="07">
|
|
95
|
+
<Row id="deliverables-header" theme={theme} y={178} header deliverable="DELIVERABLE" acceptance="ACCEPTANCE EVIDENCE" owner="APPROVER" timing="DUE / GATE"/>
|
|
96
|
+
<Row id="deliverable-baseline" theme={theme} y={222} deliverable="[Named output and format]" acceptance="[Objective completeness or quality criterion]" owner="[Client role]" timing="[Milestone]"/>
|
|
97
|
+
<Row id="deliverable-solution" theme={theme} y={318} deliverable="[Named output and format]" acceptance="[Review method and evidence required]" owner="[Client role]" timing="[Milestone]"/>
|
|
98
|
+
<Row id="deliverable-handover" theme={theme} y={414} deliverable="[Named output and format]" acceptance="[What demonstrates a successful handover]" owner="[Client role]" timing="[Milestone]"/>
|
|
99
|
+
</ProposalSlide>
|
|
100
|
+
|
|
101
|
+
<ProposalSlide id="scope-boundary" theme={theme} title="A clear boundary protects delivery." eyebrow="07 / SCOPE BOUNDARY" dark number="08">
|
|
102
|
+
<Panel id="scope-included" x={88} y={185} w={360} h={230} theme={theme}>
|
|
103
|
+
<Label id="scope-included-label" theme={theme} dark>INCLUDED</Label>
|
|
104
|
+
<Copy id="scope-included-title" theme={theme} size={28} bold dark>[What we are responsible for.]</Copy>
|
|
105
|
+
<Copy id="scope-included-copy" theme={theme} size={18} dark>[Services, audiences, locations, systems and review cycles included in this proposal.]</Copy>
|
|
106
|
+
</Panel>
|
|
107
|
+
<Panel id="scope-excluded" x={528} y={185} w={384} h={230} theme={theme}>
|
|
108
|
+
<Label id="scope-excluded-label" theme={theme} dark>OUTSIDE THIS PROPOSAL</Label>
|
|
109
|
+
<Copy id="scope-excluded-title" theme={theme} size={28} bold dark>[What would need separate agreement.]</Copy>
|
|
110
|
+
<Copy id="scope-excluded-copy" theme={theme} size={18} dark>[Exclusions and optional future work. Be specific about ambiguous boundaries.]</Copy>
|
|
111
|
+
</Panel>
|
|
112
|
+
<Rule x={88} y={432} w={824} theme={theme} dark/>
|
|
113
|
+
<Panel id="scope-change" x={88} y={448} w={824} h={46} theme={theme}><Copy id="scope-change-copy" theme={theme} size={14} dark>[Change route: who assesses scope, cost and timing impacts, and who approves a change.]</Copy></Panel>
|
|
114
|
+
</ProposalSlide>
|
|
115
|
+
|
|
116
|
+
<ProposalSlide id="roadmap" theme={theme} title="Sequence the work around decisions." eyebrow="08 / MILESTONES" number="09">
|
|
117
|
+
<Rule x={88} y={200} w={824} theme={theme}/>
|
|
118
|
+
<Panel id="roadmap-align" x={88} y={217} w={178} h={225} theme={theme}><Label id="roadmap-align-time" theme={theme}>[PERIOD / DATES]</Label><Copy id="roadmap-align-title" theme={theme} size={27} bold>[Align]</Copy><Copy id="roadmap-align-copy" theme={theme} size={16}>[Key activities and output.]</Copy><Label id="roadmap-align-gate-label" theme={theme}>DECISION GATE</Label><Copy id="roadmap-align-gate" theme={theme} size={15}>[Approve baseline and scope.]</Copy></Panel>
|
|
119
|
+
<Panel id="roadmap-design" x={302} y={217} w={178} h={225} theme={theme}><Label id="roadmap-design-time" theme={theme}>[PERIOD / DATES]</Label><Copy id="roadmap-design-title" theme={theme} size={27} bold>[Develop]</Copy><Copy id="roadmap-design-copy" theme={theme} size={16}>[Key activities and output.]</Copy><Label id="roadmap-design-gate-label" theme={theme}>DECISION GATE</Label><Copy id="roadmap-design-gate" theme={theme} size={15}>[Select a direction.]</Copy></Panel>
|
|
120
|
+
<Panel id="roadmap-validate" x={516} y={217} w={178} h={225} theme={theme}><Label id="roadmap-validate-time" theme={theme}>[PERIOD / DATES]</Label><Copy id="roadmap-validate-title" theme={theme} size={27} bold>[Validate]</Copy><Copy id="roadmap-validate-copy" theme={theme} size={16}>[Key activities and output.]</Copy><Label id="roadmap-validate-gate-label" theme={theme}>DECISION GATE</Label><Copy id="roadmap-validate-gate" theme={theme} size={15}>[Accept the tested result.]</Copy></Panel>
|
|
121
|
+
<Panel id="roadmap-transfer" x={730} y={217} w={182} h={225} theme={theme}><Label id="roadmap-transfer-time" theme={theme}>[PERIOD / DATES]</Label><Copy id="roadmap-transfer-title" theme={theme} size={27} bold>[Transfer]</Copy><Copy id="roadmap-transfer-copy" theme={theme} size={16}>[Key activities and output.]</Copy><Label id="roadmap-transfer-gate-label" theme={theme}>DECISION GATE</Label><Copy id="roadmap-transfer-gate" theme={theme} size={15}>[Confirm handover.]</Copy></Panel>
|
|
122
|
+
<Panel id="roadmap-dependency" x={88} y={460} w={824} h={34} theme={theme}><Copy id="roadmap-dependency-copy" theme={theme} size={13}>[Schedule basis: start condition, client review windows and dependencies. Confirm before committing dates.]</Copy></Panel>
|
|
123
|
+
</ProposalSlide>
|
|
124
|
+
|
|
125
|
+
<ProposalSlide id="governance" theme={theme} title="Make ownership visible." eyebrow="09 / PEOPLE & GOVERNANCE" number="10">
|
|
126
|
+
<Panel id="governance-sponsor" x={88} y={186} w={248} h={190} theme={theme}><Label id="governance-sponsor-label" theme={theme}>CLIENT SPONSOR</Label><Copy id="governance-sponsor-name" theme={theme} size={26} bold>[Name / role]</Copy><Copy id="governance-sponsor-duty" theme={theme} size={17}>[Owns the business outcome and approves scope, investment and key decisions.]</Copy></Panel>
|
|
127
|
+
<Panel id="governance-lead" x={376} y={186} w={248} h={190} theme={theme}><Label id="governance-lead-label" theme={theme}>DELIVERY LEAD</Label><Copy id="governance-lead-name" theme={theme} size={26} bold>[Name / role]</Copy><Copy id="governance-lead-duty" theme={theme} size={17}>[Owns day-to-day delivery, quality and the agreed escalation route.]</Copy></Panel>
|
|
128
|
+
<Panel id="governance-team" x={664} y={186} w={248} h={190} theme={theme}><Label id="governance-team-label" theme={theme}>SPECIALIST TEAM</Label><Copy id="governance-team-name" theme={theme} size={26} bold>[Named roles]</Copy><Copy id="governance-team-duty" theme={theme} size={17}>[Relevant capability, allocation and responsibility. Confirm availability.]</Copy></Panel>
|
|
129
|
+
<Rule x={88} y={392} w={824} theme={theme}/>
|
|
130
|
+
<Panel id="governance-cadence" x={88} y={415} w={824} h={79} theme={theme}><Label id="governance-cadence-label" theme={theme}>HOW WE WORK TOGETHER</Label><Copy id="governance-cadence-copy" theme={theme} size={17}>[Working cadence] · [Decision forum] · [Reporting artifact] · [Escalation owner]</Copy></Panel>
|
|
131
|
+
</ProposalSlide>
|
|
132
|
+
|
|
133
|
+
<ProposalSlide id="proof-story" theme={theme} layout="case" title="Relevant work. Specific proof." titleSize={32} eyebrow="10 / EVIDENCE" number="11">
|
|
134
|
+
<Picture id="proof-story-image" x={0} y={0} w={552} h={486} theme={theme} label="Case image position · approved project photograph, output or annotated evidence"/>
|
|
135
|
+
<Panel id="proof-story-caption" x={36} y={498} w={495} h={30} theme={theme}><Copy id="proof-story-caption-copy" theme={theme} size={11}>[Client permission / image attribution / case reference]</Copy></Panel>
|
|
136
|
+
<Panel id="proof-story-detail" x={596} y={184} w={316} h={310} theme={theme}>
|
|
137
|
+
<Label id="proof-story-context-label" theme={theme}>COMPARABLE CHALLENGE</Label><Copy id="proof-story-context" theme={theme} size={16}>[Relevant context and why it resembles this engagement.]</Copy>
|
|
138
|
+
<Label id="proof-story-action-label" theme={theme}>OUR CONTRIBUTION</Label><Copy id="proof-story-action" theme={theme} size={16}>[The team's actual scope and actions.]</Copy>
|
|
139
|
+
<Label id="proof-story-result-label" theme={theme}>VERIFIABLE RESULT</Label><Copy id="proof-story-result" theme={theme} size={16}>[Supported outcome, measurement period and source. State limits to transferability.]</Copy>
|
|
140
|
+
</Panel>
|
|
141
|
+
</ProposalSlide>
|
|
142
|
+
|
|
143
|
+
<ProposalSlide id="investment" theme={theme} title="Make the commercial choice clear." eyebrow="11 / INVESTMENT" number="12">
|
|
144
|
+
<Panel id="investment-core" x={88} y={180} w={384} h={198} theme={theme}>
|
|
145
|
+
<Label id="investment-core-label" theme={theme}>[OPTION A / CORE SCOPE]</Label><Copy id="investment-core-price" theme={theme} size={29} bold>[Amount + currency]</Copy><Copy id="investment-core-basis" theme={theme} size={15}>[Fixed fee / time basis / unit basis]</Copy><Copy id="investment-core-inclusion" theme={theme} size={17}>[Included outcomes, deliverables and capacity. Explain who this option fits.]</Copy>
|
|
146
|
+
</Panel>
|
|
147
|
+
<Panel id="investment-extended" x={530} y={180} w={382} h={198} theme={theme}>
|
|
148
|
+
<Label id="investment-extended-label" theme={theme}>[OPTION B / EXTENDED SCOPE]</Label><Copy id="investment-extended-price" theme={theme} size={29} bold>[Amount + currency]</Copy><Copy id="investment-extended-basis" theme={theme} size={15}>[Same comparison basis as option A]</Copy><Copy id="investment-extended-inclusion" theme={theme} size={17}>[Additional value, scope and trade-offs. Omit this option if it is not useful.]</Copy>
|
|
149
|
+
</Panel>
|
|
150
|
+
<Rule x={88} y={389} w={824} theme={theme}/>
|
|
151
|
+
<Panel id="investment-terms" x={88} y={406} w={824} h={88} theme={theme}><Label id="investment-terms-label" theme={theme}>COMMERCIAL BASIS TO CONFIRM</Label><Copy id="investment-terms-copy" theme={theme} size={15}>[Tax and expenses] · [Payment milestones / terms] · [Validity] · [Currency / assumptions] · [Reference the detailed quotation or agreement; do not leave material costs implicit.]</Copy></Panel>
|
|
152
|
+
</ProposalSlide>
|
|
153
|
+
|
|
154
|
+
<ProposalSlide id="delivery-conditions" theme={theme} title="Surface what delivery depends on." eyebrow="12 / ASSUMPTIONS & RISK" number="13">
|
|
155
|
+
<Panel id="conditions-client" x={88} y={185} w={250} h={230} theme={theme}><Label id="conditions-client-label" theme={theme}>CLIENT DEPENDENCIES</Label><Copy id="conditions-client-title" theme={theme} size={26} bold>[What we need]</Copy><Copy id="conditions-client-copy" theme={theme} size={17}>[Access, data, people, decisions and facilities.]</Copy><Copy id="conditions-client-owner" theme={theme} size={14}>[Owner / required by / impact if late]</Copy></Panel>
|
|
156
|
+
<Panel id="conditions-assumptions" x={376} y={185} w={248} h={230} theme={theme}><Label id="conditions-assumptions-label" theme={theme}>ASSUMPTIONS</Label><Copy id="conditions-assumptions-title" theme={theme} size={26} bold>[What must hold]</Copy><Copy id="conditions-assumptions-copy" theme={theme} size={17}>[Conditions underpinning scope, timing and price.]</Copy><Copy id="conditions-assumptions-owner" theme={theme} size={14}>[Validation owner / confirmation date]</Copy></Panel>
|
|
157
|
+
<Panel id="conditions-risk" x={664} y={185} w={248} h={230} theme={theme}><Label id="conditions-risk-label" theme={theme}>PRIORITY RISK</Label><Copy id="conditions-risk-title" theme={theme} size={26} bold>[What could change]</Copy><Copy id="conditions-risk-copy" theme={theme} size={17}>[Cause → event → delivery consequence.]</Copy><Copy id="conditions-risk-owner" theme={theme} size={14}>[Mitigation / owner / escalation trigger]</Copy></Panel>
|
|
158
|
+
<Rule x={88} y={429} w={824} theme={theme}/>
|
|
159
|
+
<Panel id="conditions-followup" x={88} y={447} w={824} h={47} theme={theme}><Copy id="conditions-followup-copy" theme={theme} size={13}>[Open issues and how they will be resolved before the work is commissioned.]</Copy></Panel>
|
|
160
|
+
</ProposalSlide>
|
|
161
|
+
|
|
162
|
+
<ProposalSlide id="next-decision" theme={theme} layout="closing" title="A clear decision. A practical next step." titleSize={43} eyebrow="13 / NEXT DECISION" dark number="14">
|
|
163
|
+
<Panel id="next-decision-request" x={88} y={302} w={520} h={145} theme={theme}><Copy id="next-decision-request-copy" theme={theme} size={24} dark>[Approve the chosen scope and commercial basis, or confirm the changes needed to proceed.]</Copy></Panel>
|
|
164
|
+
<Panel id="next-decision-owner" x={676} y={312} w={236} h={141} theme={theme}><Label id="next-decision-owner-label" theme={theme} dark>DECISION OWNER / BY</Label><Copy id="next-decision-owner-copy" theme={theme} size={17} dark>[Approver] / [Agreed date]</Copy><Label id="next-decision-action-label" theme={theme} dark>ON AGREEMENT</Label><Copy id="next-decision-action-copy" theme={theme} size={17} dark>[Immediate next action and owner]</Copy></Panel>
|
|
165
|
+
<Panel id="next-decision-contact" x={88} y={466} w={824} h={28} theme={theme}><Copy id="next-decision-contact-copy" theme={theme} size={13} dark>[Contact name] · [Email] · [Proposal reference]</Copy></Panel>
|
|
166
|
+
</ProposalSlide>
|
|
167
|
+
</ProposalDeck>;
|
|
168
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Proposal deck",
|
|
3
|
+
"description": "A client decision deck with an executive recommendation, measurable outcomes, scope and acceptance, delivery gates, proof and a clear commercial decision.",
|
|
4
|
+
"format": "16:9 · Client proposal",
|
|
5
|
+
"documentFormat": "presentation",
|
|
6
|
+
"structure": ["Executive recommendation and client priorities", "Measurable outcomes and an image-led approach", "Workstreams and deliverable acceptance ledger", "Scope boundary and stage-gate roadmap", "Accountability and editorial evidence story", "Investment options, dependencies and next decision"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Quotation
|
|
2
|
+
|
|
3
|
+
Use this as a soft foundation for a business quotation, with room for variation and creativity. Its starting character is a clear commercial heading, paired business/client details, a readable pricing table, and totals aligned to the right. Adapt the title size, spacing, visual identity, and relative emphasis to the actual business and scope. For example, a longer project title can use a smaller `titleStyle`, and a short quote may need neither introductory prose nor an acceptance area.
|
|
4
|
+
|
|
5
|
+
Keep each document's input in its own `data.json`. The shared template owns the layout; the caller's theme owns visual hierarchy, rhythm, and component treatments. Change one document's design locally unless a shared option preserves other documents' defaults. Terms and acceptance are supplied text, not generated legal conditions or a prescribed sales method. Preserve quoted wording and stable record IDs. Do not invent business identities, dates, rates, prices, or approval.
|
|
6
|
+
|
|
7
|
+
Validation and calculation are functional requirements. Use decimal strings for quantity and money, explicit currency precision, and the documented rounding order. Totals are calculated; do not type a second total into the document. The current pricing model supports one currency, an optional fixed discount, and one supplied tax rate on the discounted subtotal. Extend the contract explicitly if the real case requires multiple rates, inclusive pricing, credits, or other charges; do not hide those cases in free text or imply that this generic template certifies compliance.
|
|
8
|
+
|
|
9
|
+
Use native Forme flow and existing OpenDoc blocks. Tables repeat their headers, totals stay together, and long terms flow. Business details occupy a bounded pair of columns; put lengthy background in the introduction or terms. Do not force a one-page result, manually split lines, auto-shrink the content, or patch the renderer. Omit unused optional fields rather than adding filler. Keep illustrative data visibly marked until all sample material has been replaced with supplied facts.
|
|
10
|
+
|
|
11
|
+
Review every adapted PDF. Shared changes need sparse, typical, and long datasets, a second theme, arithmetic and invalid-input checks, and a created document whose private data and export work. Preserve unrelated templates, documents, and feedback.
|
|
12
|
+
|
|
13
|
+
The opening logo placeholder is an adaptable brand slot. Replace it with supplied, proportionally sized artwork through `logo`, or pass null to omit it. Do not invent a real company logo or alter its colors to match a theme. Keep the stable logo block ID and check the opening and downstream page breaks after replacement.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Quotation
|
|
2
|
+
|
|
3
|
+
A native Forme quotation with an opening reference and dates, paired seller/client details, line items, calculated totals, and optional terms and acceptance. Defaults are A4 portrait, 48-point top/side margins and 52-point bottom margin, 10.5/14.7-point body type, and a 28-point title. The caller's theme supplies appearance. The design is an adaptable starting point, not a fixed page count or commercial writing method.
|
|
4
|
+
|
|
5
|
+
`quotationTemplate(theme)` supplies the existing `parse`, `meta`, and `render` contract. Bind it to local JSON with `bindTemplate`. For a local design variation, `Quotation` accepts parsed `data`, `theme`, and a native `titleStyle`. Keep input parsing at the document boundary before metadata or rendering. `preview.tsx` offers sparse, typical, and long specimens; the catalog proof uses Neutral.
|
|
6
|
+
|
|
7
|
+
## Instance data
|
|
8
|
+
|
|
9
|
+
Creation copies this folder's `data.json` into the new document and safely fills the initial title. Each document then edits its own data. Its TSX entry exports template and data provenance; changing `data.json` changes the content and metadata. Existing quotations and template examples do not share mutable input.
|
|
10
|
+
|
|
11
|
+
Required fields are `schemaVersion: 1`, `title`, `number`, `issuedOn`, `seller`, `client`, `synthetic`, and `pricing`. Dates use real `YYYY-MM-DD` values. Optional `validUntil` cannot precede the issue date. Each party has a required `name` (one supplied line, up to 180 characters) and optional `details` (up to 700 characters and eight supplied address/contact lines). Both wrap naturally within the columns. Longer background belongs in the flowing introduction or terms.
|
|
12
|
+
|
|
13
|
+
Optional `introduction` and `acceptance` are prose. Acceptance adds blank name, signature, and date lines, not an assertion that anyone has signed. Optional `terms` is an array of `{ id, title, text }`; each ID must be unique and stable when reordered. Term comment targets include a length-prefixed ID. The pricing table is a single stable comment target across pages. Unknown fields fail rather than silently disappearing.
|
|
14
|
+
|
|
15
|
+
Set `synthetic: true` for illustrative data. All bundled examples identify fictional parties, dates, prices, rates, and terms in the PDF and each footer. Set it to false only after replacing the samples with actual supplied material. This is a generic quotation format; no jurisdiction-specific tax or legal certification is claimed.
|
|
16
|
+
|
|
17
|
+
## Pricing contract
|
|
18
|
+
|
|
19
|
+
`pricing.currency` requires a three-letter uppercase `code` and an explicit `decimals` integer from 0 to 3. Currency precision is supplied, not guessed. All prices, quantities, discounts, and percentages are decimal **strings**, never floating-point numbers, signed values, exponents, or formatted values with commas.
|
|
20
|
+
|
|
21
|
+
- Each of 1–500 `items` has a unique stable `id`, a `description` of at most 600 characters and eight supplied lines, positive `quantity` with up to three decimal places, and nonnegative `unitPrice` with up to the currency's declared decimal places. Optional single-line `unit` describes the quantity. Decimal inputs allow up to nine integer digits.
|
|
22
|
+
- Optional `discount` is a fixed monetary amount and cannot exceed the subtotal. Omit it when unused.
|
|
23
|
+
- Optional `tax` has a supplied `label` and `ratePercent` from 0 to 100, with up to two decimal places. Omission means no tax calculation was supplied; it does not classify the transaction as exempt. No rate is inferred. The example's 10% is illustrative only.
|
|
24
|
+
|
|
25
|
+
The shared `templates/_shared/commerce.ts` uses integer arithmetic: quantity × unit price is rounded to the currency precision **for each line, half up**; those rounded lines form the subtotal; the fixed discount is subtracted; the supplied tax rate is applied to that net amount and rounded half up once; the quoted total is net plus tax. Both subtotal and total must fit within `Number.MAX_SAFE_INTEGER` minor units, although calculations themselves use BigInt. The typical example is 1,225.00 − 25.00 + 120.00 = USD 1,320.00.
|
|
26
|
+
|
|
27
|
+
This version supports one currency and one tax rate applied to the whole discounted subtotal. Inclusive tax, line-specific rates, percentage discounts, credits, and additional charges need an explicit contract extension. Do not work around validation by typing different totals into prose. `templates/_shared/Pricing.tsx` provides the native line-item and totals display for the quotation, invoice, and proposal layouts.
|
|
28
|
+
|
|
29
|
+
## Logo
|
|
30
|
+
|
|
31
|
+
The opening has a quiet, outlined **YOUR LOGO** placeholder at the upper right. It appears once, on the cover when present or at the start of the body. Replace it with supplied artwork through the optional `logo` prop, or pass `logo={null}` to omit it. The placeholder follows the selected theme; actual artwork retains its own colors. Keep logo dimensions bounded and preserve its aspect ratio; 88 × 28 points is a starting size, not a brand requirement.
|
|
32
|
+
|
|
33
|
+
Import reusable artwork into the shared [asset library](../../docs/ASSETS.md), inspect its variation guidance, and bind an exact version to the intended document:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
pnpm assets -- inspect logo acme
|
|
37
|
+
pnpm assets -- bind my-document logo acme --variation default
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Import `Logo` from `opendoc` and supply `<Logo width={88} height={28} />` through the `logo` prop. Choose a variation for the actual page background, preserve its proportions, and review the PDF. The existing logo block provides the feedback target; a decorative mark needs no figure caption. Artwork belongs in the layout, separately from commercial JSON.
|
|
41
|
+
|
|
42
|
+
The bound starter accepts `quotationTemplate(theme, { logo: <Logo width={88} height={28} /> })`; use `{ logo: null }` to omit it. Pass the adapted document theme from `./theme` to this factory.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "__OPENDOC_TITLE__",
|
|
4
|
+
"number": "SAMPLE-Q-001",
|
|
5
|
+
"issuedOn": "2026-09-08",
|
|
6
|
+
"validUntil": "2026-09-22",
|
|
7
|
+
"seller": {
|
|
8
|
+
"name": "Example Studio",
|
|
9
|
+
"details": "Studio address placeholder\nContact details placeholder"
|
|
10
|
+
},
|
|
11
|
+
"client": {
|
|
12
|
+
"name": "Example Client",
|
|
13
|
+
"details": "Client address placeholder\nAttention: project contact"
|
|
14
|
+
},
|
|
15
|
+
"synthetic": true,
|
|
16
|
+
"introduction": "A sample scope and pricing schedule. Replace the illustrative details with the work and commercial terms actually agreed with the client.",
|
|
17
|
+
"pricing": {
|
|
18
|
+
"currency": {
|
|
19
|
+
"code": "USD",
|
|
20
|
+
"decimals": 2
|
|
21
|
+
},
|
|
22
|
+
"items": [
|
|
23
|
+
{
|
|
24
|
+
"id": "planning",
|
|
25
|
+
"description": "Content planning workshop",
|
|
26
|
+
"quantity": "2.5",
|
|
27
|
+
"unit": "hours",
|
|
28
|
+
"unitPrice": "160.00"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "writing",
|
|
32
|
+
"description": "Website copy package: supplied scope and agreed deliverables",
|
|
33
|
+
"quantity": "1",
|
|
34
|
+
"unit": "package",
|
|
35
|
+
"unitPrice": "600.00"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "review",
|
|
39
|
+
"description": "Review and revision sessions",
|
|
40
|
+
"quantity": "3",
|
|
41
|
+
"unit": "hours",
|
|
42
|
+
"unitPrice": "75.00"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"discount": "25.00",
|
|
46
|
+
"tax": {
|
|
47
|
+
"label": "Illustrative tax",
|
|
48
|
+
"ratePercent": "10"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"terms": [
|
|
52
|
+
{
|
|
53
|
+
"id": "delivery",
|
|
54
|
+
"title": "Delivery",
|
|
55
|
+
"text": "Illustrative schedule placeholder. Supply the milestones, dependencies, and delivery dates that apply to the actual work."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "payment",
|
|
59
|
+
"title": "Payment",
|
|
60
|
+
"text": "Illustrative payment placeholder. Supply the agreed payment schedule and any relevant reference details."
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"acceptance": "Optional acceptance wording placeholder. Replace with the agreed process, or omit this area when acceptance is recorded elsewhere."
|
|
64
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Website content package",
|
|
4
|
+
"number": "SAMPLE-Q-001",
|
|
5
|
+
"issuedOn": "2026-09-08",
|
|
6
|
+
"validUntil": "2026-09-22",
|
|
7
|
+
"seller": {
|
|
8
|
+
"name": "Example Studio",
|
|
9
|
+
"details": "Studio address placeholder\nContact details placeholder"
|
|
10
|
+
},
|
|
11
|
+
"client": {
|
|
12
|
+
"name": "Example Client",
|
|
13
|
+
"details": "Client address placeholder\nAttention: project contact"
|
|
14
|
+
},
|
|
15
|
+
"synthetic": true,
|
|
16
|
+
"introduction": "A sample scope and pricing schedule. Replace the illustrative details with the work and commercial terms actually agreed with the client.",
|
|
17
|
+
"pricing": {
|
|
18
|
+
"currency": {
|
|
19
|
+
"code": "USD",
|
|
20
|
+
"decimals": 2
|
|
21
|
+
},
|
|
22
|
+
"items": [
|
|
23
|
+
{
|
|
24
|
+
"id": "service-1",
|
|
25
|
+
"description": "Illustrative service 1: preparation, review, and a clearly described deliverable for this example.",
|
|
26
|
+
"quantity": "2.5",
|
|
27
|
+
"unit": "hours",
|
|
28
|
+
"unitPrice": "160.00"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "service-2",
|
|
32
|
+
"description": "Illustrative service 2: preparation, review, and a clearly described deliverable for this example.",
|
|
33
|
+
"quantity": "2.5",
|
|
34
|
+
"unit": "hours",
|
|
35
|
+
"unitPrice": "160.00"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "service-3",
|
|
39
|
+
"description": "Illustrative service 3: preparation, review, and a clearly described deliverable for this example.",
|
|
40
|
+
"quantity": "2.5",
|
|
41
|
+
"unit": "hours",
|
|
42
|
+
"unitPrice": "160.00"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "service-4",
|
|
46
|
+
"description": "Illustrative service 4: preparation, review, and a clearly described deliverable for this example.",
|
|
47
|
+
"quantity": "2.5",
|
|
48
|
+
"unit": "hours",
|
|
49
|
+
"unitPrice": "160.00"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "service-5",
|
|
53
|
+
"description": "Illustrative service 5: preparation, review, and a clearly described deliverable for this example.",
|
|
54
|
+
"quantity": "2.5",
|
|
55
|
+
"unit": "hours",
|
|
56
|
+
"unitPrice": "160.00"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "service-6",
|
|
60
|
+
"description": "Illustrative service 6: preparation, review, and a clearly described deliverable for this example.",
|
|
61
|
+
"quantity": "2.5",
|
|
62
|
+
"unit": "hours",
|
|
63
|
+
"unitPrice": "160.00"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "service-7",
|
|
67
|
+
"description": "Illustrative service 7: preparation, review, and a clearly described deliverable for this example.",
|
|
68
|
+
"quantity": "2.5",
|
|
69
|
+
"unit": "hours",
|
|
70
|
+
"unitPrice": "160.00"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "service-8",
|
|
74
|
+
"description": "Illustrative service 8: preparation, review, and a clearly described deliverable for this example.",
|
|
75
|
+
"quantity": "2.5",
|
|
76
|
+
"unit": "hours",
|
|
77
|
+
"unitPrice": "160.00"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "service-9",
|
|
81
|
+
"description": "Illustrative service 9: preparation, review, and a clearly described deliverable for this example.",
|
|
82
|
+
"quantity": "2.5",
|
|
83
|
+
"unit": "hours",
|
|
84
|
+
"unitPrice": "160.00"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "service-10",
|
|
88
|
+
"description": "Illustrative service 10: preparation, review, and a clearly described deliverable for this example.",
|
|
89
|
+
"quantity": "2.5",
|
|
90
|
+
"unit": "hours",
|
|
91
|
+
"unitPrice": "160.00"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "service-11",
|
|
95
|
+
"description": "Illustrative service 11: preparation, review, and a clearly described deliverable for this example.",
|
|
96
|
+
"quantity": "2.5",
|
|
97
|
+
"unit": "hours",
|
|
98
|
+
"unitPrice": "160.00"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "service-12",
|
|
102
|
+
"description": "Illustrative service 12: preparation, review, and a clearly described deliverable for this example.",
|
|
103
|
+
"quantity": "2.5",
|
|
104
|
+
"unit": "hours",
|
|
105
|
+
"unitPrice": "160.00"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "service-13",
|
|
109
|
+
"description": "Illustrative service 13: preparation, review, and a clearly described deliverable for this example.",
|
|
110
|
+
"quantity": "2.5",
|
|
111
|
+
"unit": "hours",
|
|
112
|
+
"unitPrice": "160.00"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "service-14",
|
|
116
|
+
"description": "Illustrative service 14: preparation, review, and a clearly described deliverable for this example.",
|
|
117
|
+
"quantity": "2.5",
|
|
118
|
+
"unit": "hours",
|
|
119
|
+
"unitPrice": "160.00"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "service-15",
|
|
123
|
+
"description": "Illustrative service 15: preparation, review, and a clearly described deliverable for this example.",
|
|
124
|
+
"quantity": "2.5",
|
|
125
|
+
"unit": "hours",
|
|
126
|
+
"unitPrice": "160.00"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "service-16",
|
|
130
|
+
"description": "Illustrative service 16: preparation, review, and a clearly described deliverable for this example.",
|
|
131
|
+
"quantity": "2.5",
|
|
132
|
+
"unit": "hours",
|
|
133
|
+
"unitPrice": "160.00"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "service-17",
|
|
137
|
+
"description": "Illustrative service 17: preparation, review, and a clearly described deliverable for this example.",
|
|
138
|
+
"quantity": "2.5",
|
|
139
|
+
"unit": "hours",
|
|
140
|
+
"unitPrice": "160.00"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "service-18",
|
|
144
|
+
"description": "Illustrative service 18: preparation, review, and a clearly described deliverable for this example.",
|
|
145
|
+
"quantity": "2.5",
|
|
146
|
+
"unit": "hours",
|
|
147
|
+
"unitPrice": "160.00"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "service-19",
|
|
151
|
+
"description": "Illustrative service 19: preparation, review, and a clearly described deliverable for this example.",
|
|
152
|
+
"quantity": "2.5",
|
|
153
|
+
"unit": "hours",
|
|
154
|
+
"unitPrice": "160.00"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "service-20",
|
|
158
|
+
"description": "Illustrative service 20: preparation, review, and a clearly described deliverable for this example.",
|
|
159
|
+
"quantity": "2.5",
|
|
160
|
+
"unit": "hours",
|
|
161
|
+
"unitPrice": "160.00"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "service-21",
|
|
165
|
+
"description": "Illustrative service 21: preparation, review, and a clearly described deliverable for this example.",
|
|
166
|
+
"quantity": "2.5",
|
|
167
|
+
"unit": "hours",
|
|
168
|
+
"unitPrice": "160.00"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "service-22",
|
|
172
|
+
"description": "Illustrative service 22: preparation, review, and a clearly described deliverable for this example.",
|
|
173
|
+
"quantity": "2.5",
|
|
174
|
+
"unit": "hours",
|
|
175
|
+
"unitPrice": "160.00"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "service-23",
|
|
179
|
+
"description": "Illustrative service 23: preparation, review, and a clearly described deliverable for this example.",
|
|
180
|
+
"quantity": "2.5",
|
|
181
|
+
"unit": "hours",
|
|
182
|
+
"unitPrice": "160.00"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"id": "service-24",
|
|
186
|
+
"description": "Illustrative service 24: preparation, review, and a clearly described deliverable for this example.",
|
|
187
|
+
"quantity": "2.5",
|
|
188
|
+
"unit": "hours",
|
|
189
|
+
"unitPrice": "160.00"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"id": "service-25",
|
|
193
|
+
"description": "Illustrative service 25: preparation, review, and a clearly described deliverable for this example.",
|
|
194
|
+
"quantity": "2.5",
|
|
195
|
+
"unit": "hours",
|
|
196
|
+
"unitPrice": "160.00"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "service-26",
|
|
200
|
+
"description": "Illustrative service 26: preparation, review, and a clearly described deliverable for this example.",
|
|
201
|
+
"quantity": "2.5",
|
|
202
|
+
"unit": "hours",
|
|
203
|
+
"unitPrice": "160.00"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "service-27",
|
|
207
|
+
"description": "Illustrative service 27: preparation, review, and a clearly described deliverable for this example.",
|
|
208
|
+
"quantity": "2.5",
|
|
209
|
+
"unit": "hours",
|
|
210
|
+
"unitPrice": "160.00"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "service-28",
|
|
214
|
+
"description": "Illustrative service 28: preparation, review, and a clearly described deliverable for this example.",
|
|
215
|
+
"quantity": "2.5",
|
|
216
|
+
"unit": "hours",
|
|
217
|
+
"unitPrice": "160.00"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"id": "service-29",
|
|
221
|
+
"description": "Illustrative service 29: preparation, review, and a clearly described deliverable for this example.",
|
|
222
|
+
"quantity": "2.5",
|
|
223
|
+
"unit": "hours",
|
|
224
|
+
"unitPrice": "160.00"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "service-30",
|
|
228
|
+
"description": "Illustrative service 30: preparation, review, and a clearly described deliverable for this example.",
|
|
229
|
+
"quantity": "2.5",
|
|
230
|
+
"unit": "hours",
|
|
231
|
+
"unitPrice": "160.00"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": "service-31",
|
|
235
|
+
"description": "Illustrative service 31: preparation, review, and a clearly described deliverable for this example.",
|
|
236
|
+
"quantity": "2.5",
|
|
237
|
+
"unit": "hours",
|
|
238
|
+
"unitPrice": "160.00"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"id": "service-32",
|
|
242
|
+
"description": "Illustrative service 32: preparation, review, and a clearly described deliverable for this example.",
|
|
243
|
+
"quantity": "2.5",
|
|
244
|
+
"unit": "hours",
|
|
245
|
+
"unitPrice": "160.00"
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
"discount": "25.00",
|
|
249
|
+
"tax": {
|
|
250
|
+
"label": "Illustrative tax",
|
|
251
|
+
"ratePercent": "10"
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"terms": [
|
|
255
|
+
{
|
|
256
|
+
"id": "delivery",
|
|
257
|
+
"title": "Delivery",
|
|
258
|
+
"text": "Illustrative schedule placeholder. Supply the milestones, dependencies, and delivery dates that apply to the actual work."
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"id": "payment",
|
|
262
|
+
"title": "Payment",
|
|
263
|
+
"text": "Illustrative payment placeholder. Supply the agreed payment schedule and any relevant reference details."
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"id": "scope",
|
|
267
|
+
"title": "Scope notes",
|
|
268
|
+
"text": "This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. This is an illustrative description of scope boundaries and dependencies. No commercial condition is being asserted. "
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"acceptance": "Optional acceptance wording placeholder. Replace with the agreed process, or omit this area when acceptance is recorded elsewhere."
|
|
272
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Sample quotation",
|
|
4
|
+
"number": "SAMPLE-Q-001",
|
|
5
|
+
"issuedOn": "2026-09-08",
|
|
6
|
+
"validUntil": null,
|
|
7
|
+
"seller": {
|
|
8
|
+
"name": "Example Studio"
|
|
9
|
+
},
|
|
10
|
+
"client": {
|
|
11
|
+
"name": "Example Client"
|
|
12
|
+
},
|
|
13
|
+
"synthetic": true,
|
|
14
|
+
"introduction": null,
|
|
15
|
+
"pricing": {
|
|
16
|
+
"currency": {
|
|
17
|
+
"code": "USD",
|
|
18
|
+
"decimals": 2
|
|
19
|
+
},
|
|
20
|
+
"items": [
|
|
21
|
+
{
|
|
22
|
+
"id": "service",
|
|
23
|
+
"description": "Illustrative service",
|
|
24
|
+
"quantity": "1",
|
|
25
|
+
"unitPrice": "100.00"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"terms": [],
|
|
30
|
+
"acceptance": null
|
|
31
|
+
}
|