@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,181 @@
|
|
|
1
|
+
import { BrandGuidelines, BrandSlide as Slide, BrandText as Text, BrandImage as Image, BrandPanel as Panel, BrandRule as Rule } from '../../templates/brand-guidelines';
|
|
2
|
+
import { TextSlot } from 'opendoc';
|
|
3
|
+
import type { DocTheme } from 'opendoc/themes';
|
|
4
|
+
import { neutral as theme } from '../../themes';
|
|
5
|
+
|
|
6
|
+
const title = 'Your brand, expressed.';
|
|
7
|
+
export const meta = { title, description: 'A brand identity handbook with editable visual briefs and usage rules.', kind: 'brand guidelines', format: 'presentation', theme: 'neutral' };
|
|
8
|
+
export const provenance = { template: 'templates/brand-guidelines/index.tsx' };
|
|
9
|
+
|
|
10
|
+
// This entire skeleton belongs to the instance. Omit/reorder slides and adapt compositions.
|
|
11
|
+
// Keep IDs stable. Replace every bracketed brief with approved brand content.
|
|
12
|
+
// Artwork: import document media, then add image={{item:'your-media-id'}} to an Image.
|
|
13
|
+
// Shared marks: bind the logo first, then add logo={{variation:'approved-variation'}}.
|
|
14
|
+
// Choose the variation for the actual PDF background. Image slots never recolor artwork.
|
|
15
|
+
export function GuidelinesSkeleton({ theme, title, sparse = false }: { theme: DocTheme; title: string; sparse?: boolean }) {
|
|
16
|
+
return <BrandGuidelines title={title} theme={theme}>
|
|
17
|
+
<Slide id="brand-opening" theme={theme} section="BRAND GUIDELINES" folio="01">
|
|
18
|
+
<Image id="opening-image" theme={theme} x={510} y={74} w={410} h={426} label="The brand, in one image" detail="[Opening artwork / approved crop]"/>
|
|
19
|
+
<Text id="opening-title" theme={theme} x={40} y={115} w={440} h={200} size={title.length > 42 ? 40 : 58} role="title"><TextSlot slot="title" from="title">{title}</TextSlot></Text>
|
|
20
|
+
<Rule theme={theme} x={40} y={379} w={400}/>
|
|
21
|
+
<Text id="opening-description" theme={theme} x={40} y={400} w={390} h={56} size={19}>[A concise invitation into the brand’s world.]</Text>
|
|
22
|
+
<Text id="opening-edition" theme={theme} x={40} y={477} w={420} h={20} size={11}>[Brand owner] / [Edition] / [Review date]</Text>
|
|
23
|
+
</Slide>
|
|
24
|
+
{!sparse && <>
|
|
25
|
+
<Slide id="brand-premise" theme={theme} section="01 / FOUNDATION" folio="02" dark>
|
|
26
|
+
<Text id="premise-title" theme={theme} x={40} y={88} w={825} h={169} size={48} role="title" color={theme.paper}>[The belief that gives this brand a reason to exist.]</Text>
|
|
27
|
+
<Rule theme={theme} x={40} y={295} w={880} color={theme.muted}/>
|
|
28
|
+
<Text id="premise-audience-label" theme={theme} x={40} y={330} w={245} h={25} size={12} color={theme.paper}>WHO WE ARE FOR</Text>
|
|
29
|
+
<Text id="premise-audience" theme={theme} x={40} y={372} w={245} h={112} size={21} color={theme.paper}>[Name the people and the need that matters to them.]</Text>
|
|
30
|
+
<Text id="premise-promise-label" theme={theme} x={347} y={330} w={245} h={25} size={12} color={theme.paper}>OUR PROMISE</Text>
|
|
31
|
+
<Text id="premise-promise" theme={theme} x={347} y={372} w={245} h={112} size={21} color={theme.paper}>[The meaningful benefit we consistently deliver.]</Text>
|
|
32
|
+
<Text id="premise-proof-label" theme={theme} x={654} y={330} w={245} h={25} size={12} color={theme.paper}>HOW WE PROVE IT</Text>
|
|
33
|
+
<Text id="premise-proof" theme={theme} x={654} y={372} w={245} h={112} size={21} color={theme.paper}>[An observable behavior that earns the promise.]</Text>
|
|
34
|
+
</Slide>
|
|
35
|
+
<Slide id="brand-voice" theme={theme} section="01 / VOICE" folio="03">
|
|
36
|
+
<Text id="voice-title" theme={theme} x={40} y={80} w={820} h={65} size={39} role="title">Personality, made practical.</Text>
|
|
37
|
+
<Text id="voice-principle" theme={theme} x={40} y={172} w={285} h={170} size={32} role="title">[We sound like this. We make people feel this.]</Text>
|
|
38
|
+
<Text id="voice-context" theme={theme} x={40} y={402} w={270} h={83} size={17}>[How tone changes for a launch, a support reply, or a difficult moment.]</Text>
|
|
39
|
+
<Panel theme={theme} x={365} y={170} w={555} h={149} color={theme.line}/>
|
|
40
|
+
<Text id="voice-use-label" theme={theme} x={389} y={189} w={485} h={24} size={11}>WRITE IT THIS WAY</Text>
|
|
41
|
+
<Text id="voice-use" theme={theme} x={389} y={229} w={485} h={66} size={24}>[A concrete, approved example of our voice in use.]</Text>
|
|
42
|
+
<Rule theme={theme} x={365} y={352} w={555}/>
|
|
43
|
+
<Text id="voice-avoid-label" theme={theme} x={389} y={374} w={485} h={24} size={11}>AVOID / WHY</Text>
|
|
44
|
+
<Text id="voice-avoid" theme={theme} x={389} y={412} w={485} h={72} size={21}>[Rewrite an off-brand phrase and explain what changes.]</Text>
|
|
45
|
+
</Slide>
|
|
46
|
+
<Slide id="brand-world" theme={theme} section="01 / EXPRESSION BOARD" folio="04">
|
|
47
|
+
<Text id="world-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">A world you can recognize.</Text>
|
|
48
|
+
<Image id="world-hero" theme={theme} x={40} y={156} w={360} h={342} label="[Defining scene]" detail="[Subject / point of view]"/>
|
|
49
|
+
<Image id="world-material" theme={theme} x={416} y={156} w={242} h={190} label="[Material / texture]"/>
|
|
50
|
+
<Image id="world-gesture" theme={theme} x={674} y={156} w={246} h={190} label="[Human gesture]"/>
|
|
51
|
+
<Image id="world-detail" theme={theme} x={416} y={362} w={242} h={136} label="[Unexpected detail]"/>
|
|
52
|
+
<Text id="world-logic" theme={theme} x={690} y={378} w={215} h={115} size={20}>[Three qualities connect these images. Name them.]</Text>
|
|
53
|
+
</Slide>
|
|
54
|
+
<Slide id="brand-primary-mark" theme={theme} section="02 / PRIMARY MARK" folio="05">
|
|
55
|
+
<Text id="mark-title" theme={theme} x={40} y={78} w={760} h={60} size={39} role="title">Our signature.</Text>
|
|
56
|
+
<Image id="primary-mark-artwork" theme={theme} x={40} y={151} w={880} h={264} label="[Primary mark / approved master artwork]" detail="[Use a bound logo or contained artwork]"/>
|
|
57
|
+
<Text id="mark-purpose" theme={theme} x={40} y={443} w={400} h={57} size={19}>[What this mark expresses and when it is the default.]</Text>
|
|
58
|
+
<Text id="mark-source" theme={theme} x={527} y={443} w={393} h={57} size={15}>[Asset name / approved formats / owner / version]</Text>
|
|
59
|
+
</Slide>
|
|
60
|
+
<Slide id="brand-mark-variants" theme={theme} section="02 / MARK VARIANTS" folio="06">
|
|
61
|
+
<Text id="variants-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">One identity. The right expression.</Text>
|
|
62
|
+
<Image id="variant-light" theme={theme} x={40} y={158} w={430} h={209} label="[Mark on a light field]" detail="[Approved variation]"/>
|
|
63
|
+
<Image id="variant-dark" theme={theme} x={490} y={158} w={430} h={209} label="[Mark on a dark field]" detail="[Approved reverse variation]" dark/>
|
|
64
|
+
<Text id="variant-light-rule" theme={theme} x={40} y={389} w={410} h={99} size={20}>[Default use, background requirements, and exceptions for this version.]</Text>
|
|
65
|
+
<Text id="variant-dark-rule" theme={theme} x={490} y={389} w={410} h={99} size={20}>[When a reverse, compact, or partner lockup is permitted. Omit unused variants.]</Text>
|
|
66
|
+
</Slide>
|
|
67
|
+
<Slide id="brand-mark-measurements" theme={theme} section="02 / SPACE & SIZE" folio="07">
|
|
68
|
+
<Text id="measurements-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Make room for the mark.</Text>
|
|
69
|
+
<Panel theme={theme} x={40} y={160} w={541} h={294} outline/>
|
|
70
|
+
<Image id="clearspace-diagram" theme={theme} x={91} y={211} w={439} h={192} label="[Measured clear-space diagram]" detail="[Upload the approved annotated construction]"/>
|
|
71
|
+
<Text id="clearspace-caption" theme={theme} x={40} y={472} w={541} h={31} size={12}>[Define the reference unit and required space. Diagram is a placeholder.]</Text>
|
|
72
|
+
<Text id="size-digital-label" theme={theme} x={633} y={170} w={280} h={25} size={12}>DIGITAL MINIMUM</Text>
|
|
73
|
+
<Text id="size-digital" theme={theme} x={633} y={212} w={280} h={72} size={27}>[Approved size in px + conditions]</Text>
|
|
74
|
+
<Rule theme={theme} x={633} y={306} w={287}/>
|
|
75
|
+
<Text id="size-print-label" theme={theme} x={633} y={333} w={280} h={25} size={12}>PRINT MINIMUM</Text>
|
|
76
|
+
<Text id="size-print" theme={theme} x={633} y={375} w={280} h={103} size={27}>[Approved size in mm + production method]</Text>
|
|
77
|
+
</Slide>
|
|
78
|
+
<Slide id="brand-mark-misuse" theme={theme} section="02 / CORRECT USE" folio="08">
|
|
79
|
+
<Text id="misuse-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Show the boundary, not just the rule.</Text>
|
|
80
|
+
<Image id="misuse-proportion" theme={theme} x={40} y={162} w={280} h={220} label="[Proportion example]"/>
|
|
81
|
+
<Image id="misuse-background" theme={theme} x={340} y={162} w={280} h={220} label="[Background example]"/>
|
|
82
|
+
<Image id="misuse-lockup" theme={theme} x={640} y={162} w={280} h={220} label="[Lockup example]"/>
|
|
83
|
+
<Text id="misuse-proportion-rule" theme={theme} x={40} y={405} w={270} h={89} size={18}>[Identify the incorrect change and show the approved correction.]</Text>
|
|
84
|
+
<Text id="misuse-background-rule" theme={theme} x={340} y={405} w={270} h={89} size={18}>[Explain the legibility or contrast issue for this application.]</Text>
|
|
85
|
+
<Text id="misuse-lockup-rule" theme={theme} x={640} y={405} w={270} h={89} size={18}>[Specify which master artwork or lockup should replace it.]</Text>
|
|
86
|
+
</Slide>
|
|
87
|
+
<Slide id="brand-color-roles" theme={theme} section="03 / COLOR" folio="09">
|
|
88
|
+
<Text id="color-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">A palette with a job to do.</Text>
|
|
89
|
+
<Panel theme={theme} x={40} y={158} w={430} h={213} color={theme.ink}/>
|
|
90
|
+
<Panel theme={theme} x={490} y={158} w={205} h={213} color={theme.line}/>
|
|
91
|
+
<Panel theme={theme} x={715} y={158} w={205} h={213} color={theme.paper} outline/>
|
|
92
|
+
<Text id="color-primary" theme={theme} x={64} y={187} w={380} h={86} size={32} role="title" color={theme.paper}>[Signature color]</Text>
|
|
93
|
+
<Text id="color-primary-values" theme={theme} x={64} y={315} w={380} h={36} size={13} color={theme.paper}>[HEX / RGB / CMYK / spot specification]</Text>
|
|
94
|
+
<Text id="color-support" theme={theme} x={511} y={187} w={163} h={86} size={24}>[Supporting color]</Text>
|
|
95
|
+
<Text id="color-surface" theme={theme} x={736} y={187} w={163} h={86} size={24}>[Surface color]</Text>
|
|
96
|
+
<Text id="color-roles" theme={theme} x={40} y={402} w={525} h={69} size={21}>[Explain dominant, supporting, accent, and functional roles. Add verified specifications for each.]</Text>
|
|
97
|
+
<Text id="color-placeholder-note" theme={theme} x={640} y={407} w={280} h={81} size={13}>These swatches show the current presentation theme. Replace them with approved brand colors; widths do not prescribe usage ratios.</Text>
|
|
98
|
+
</Slide>
|
|
99
|
+
<Slide id="brand-accessibility" theme={theme} section="03 / ACCESSIBLE COMBINATIONS" folio="10">
|
|
100
|
+
<Text id="contrast-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">Color has to work for people.</Text>
|
|
101
|
+
<Panel theme={theme} x={40} y={164} w={422} h={183} color={theme.ink}/>
|
|
102
|
+
<Text id="contrast-dark-sample" theme={theme} x={65} y={195} w={370} h={108} size={43} role="title" color={theme.paper}>[Text on a dark surface]</Text>
|
|
103
|
+
<Panel theme={theme} x={486} y={164} w={434} h={183} color={theme.line}/>
|
|
104
|
+
<Text id="contrast-light-sample" theme={theme} x={511} y={195} w={380} h={108} size={43} role="title">[Text on a light surface]</Text>
|
|
105
|
+
<Text id="contrast-evidence" theme={theme} x={40} y={377} w={420} h={113} size={18}>[Record tested foreground / background values, ratio, text size, target standard, and result for each pairing.]</Text>
|
|
106
|
+
<Text id="contrast-other-cues" theme={theme} x={486} y={377} w={424} h={113} size={18}>[Demonstrate labels, shapes, or patterns alongside color. Recheck text and marks over the actual crop.]</Text>
|
|
107
|
+
</Slide>
|
|
108
|
+
<Slide id="brand-type-specimen" theme={theme} section="04 / TYPOGRAPHY" folio="11" dark>
|
|
109
|
+
<Text id="type-large" theme={theme} x={35} y={93} w={800} h={172} size={130} role="title" color={theme.paper}>Aa Bb Cc</Text>
|
|
110
|
+
<Text id="type-line" theme={theme} x={42} y={285} w={830} h={75} size={32} color={theme.paper}>[Words should feel unmistakably ours.]</Text>
|
|
111
|
+
<Rule theme={theme} x={40} y={396} w={880} color={theme.muted}/>
|
|
112
|
+
<Text id="type-display" theme={theme} x={40} y={428} w={265} h={70} size={17} color={theme.paper}>[Display family / approved weights / purpose]</Text>
|
|
113
|
+
<Text id="type-body" theme={theme} x={350} y={428} w={265} h={70} size={17} color={theme.paper}>[Text family / approved weights / purpose]</Text>
|
|
114
|
+
<Text id="type-access" theme={theme} x={655} y={428} w={265} h={70} size={17} color={theme.paper}>[Font source / license / fallback / language coverage]</Text>
|
|
115
|
+
</Slide>
|
|
116
|
+
<Slide id="brand-type-hierarchy" theme={theme} section="04 / HIERARCHY IN USE" folio="12">
|
|
117
|
+
<Text id="hierarchy-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Let the reader find their way.</Text>
|
|
118
|
+
<Panel theme={theme} x={40} y={160} w={553} h={337} color={theme.line}/>
|
|
119
|
+
<Text id="hierarchy-kicker" theme={theme} x={68} y={187} w={493} h={25} size={12}>[EYEBROW / CONTEXT]</Text>
|
|
120
|
+
<Text id="hierarchy-heading" theme={theme} x={68} y={231} w={493} h={100} size={38} role="title">[A headline with a clear role.]</Text>
|
|
121
|
+
<Text id="hierarchy-body" theme={theme} x={68} y={347} w={475} h={89} size={19}>[Use a short real passage to show hierarchy, line length, paragraph rhythm, and emphasis.]</Text>
|
|
122
|
+
<Text id="hierarchy-caption" theme={theme} x={68} y={459} w={485} h={23} size={11}>[Caption / source / contextual detail]</Text>
|
|
123
|
+
<Text id="hierarchy-rules" theme={theme} x={637} y={177} w={272} h={168} size={22}>[Specify role, size, line height, weight, and spacing for the formats you actually use.]</Text>
|
|
124
|
+
<Rule theme={theme} x={637} y={365} w={283}/>
|
|
125
|
+
<Text id="hierarchy-note" theme={theme} x={637} y={392} w={272} h={96} size={17}>[Show allowed variation and the point where a new composition is needed. These specimen sizes are not brand rules.]</Text>
|
|
126
|
+
</Slide>
|
|
127
|
+
<Slide id="brand-photography" theme={theme} section="05 / PHOTOGRAPHY" folio="13">
|
|
128
|
+
<Text id="photography-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">Our point of view, through a lens.</Text>
|
|
129
|
+
<Image id="photography-human" theme={theme} x={40} y={158} w={270} h={337} label="[People]" detail="[Casting / gesture / context]"/>
|
|
130
|
+
<Image id="photography-place" theme={theme} x={326} y={158} w={280} h={206} label="[Place / environment]"/>
|
|
131
|
+
<Image id="photography-detail" theme={theme} x={622} y={158} w={298} h={206} label="[Object / detail]"/>
|
|
132
|
+
<Text id="photography-principles" theme={theme} x={326} y={392} w={582} h={100} size={22}>[Define subject, light, composition, color treatment, and emotional quality. Use examples that make each choice visible.]</Text>
|
|
133
|
+
</Slide>
|
|
134
|
+
<Slide id="brand-crop" theme={theme} section="05 / CROP & COMPOSITION" folio="14">
|
|
135
|
+
<Text id="crop-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The crop is part of the story.</Text>
|
|
136
|
+
<Image id="crop-wide" theme={theme} x={40} y={160} w={554} h={255} label="[Wide crop / subject in context]" detail="[Specify focal point and text-safe area]"/>
|
|
137
|
+
<Image id="crop-tall" theme={theme} x={618} y={160} w={154} h={255} label="[Portrait crop]"/>
|
|
138
|
+
<Image id="crop-square" theme={theme} x={792} y={160} w={128} h={128} label="[Square]"/>
|
|
139
|
+
<Text id="crop-small-note" theme={theme} x={792} y={310} w={128} h={106} size={15}>[What must survive at smaller sizes?]</Text>
|
|
140
|
+
<Text id="crop-rules" theme={theme} x={40} y={444} w={866} h={58} size={19}>[Show the same approved image across formats. Explain the allowed crop, subject protection, overlays, and legibility checks.]</Text>
|
|
141
|
+
</Slide>
|
|
142
|
+
<Slide id="brand-graphic-language" theme={theme} section="06 / GRAPHIC LANGUAGE" folio="15">
|
|
143
|
+
<Text id="language-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The details that make it ours.</Text>
|
|
144
|
+
<Image id="language-motif" theme={theme} x={40} y={158} w={422} h={250} label="[Signature shape / pattern]"/>
|
|
145
|
+
<Image id="language-icons" theme={theme} x={486} y={158} w={434} h={147} label="[Icon or illustration family]"/>
|
|
146
|
+
<Image id="language-motion" theme={theme} x={486} y={325} w={434} h={83} label="[Motion storyboard / sequence]"/>
|
|
147
|
+
<Text id="language-geometry" theme={theme} x={40} y={434} w={422} h={68} size={18}>[Explain construction, scale, line weight, density, and relationship to the mark.]</Text>
|
|
148
|
+
<Text id="language-purpose" theme={theme} x={486} y={434} w={424} h={68} size={18}>[Name the purpose and boundaries. Omit modules the brand does not use.]</Text>
|
|
149
|
+
</Slide>
|
|
150
|
+
<Slide id="brand-digital-applications" theme={theme} section="07 / DIGITAL APPLICATIONS" folio="16">
|
|
151
|
+
<Text id="digital-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">A system, out in the world.</Text>
|
|
152
|
+
<Image id="digital-hero" theme={theme} x={40} y={160} w={527} h={293} label="[Website / product / digital campaign]" detail="[Approved example / actual breakpoint]"/>
|
|
153
|
+
<Image id="digital-mobile" theme={theme} x={591} y={160} w={145} h={293} label="[Mobile]"/>
|
|
154
|
+
<Image id="digital-social" theme={theme} x={760} y={160} w={160} h={160} label="[Social]"/>
|
|
155
|
+
<Text id="digital-transfer" theme={theme} x={760} y={342} w={160} h={111} size={17}>[What stays consistent across formats?]</Text>
|
|
156
|
+
<Text id="digital-caption" theme={theme} x={40} y={476} w={880} h={30} size={12}>[Annotate the decisions: hierarchy, color, mark, imagery, spacing, and voice.]</Text>
|
|
157
|
+
</Slide>
|
|
158
|
+
<Slide id="brand-physical-applications" theme={theme} section="07 / PHYSICAL APPLICATIONS" folio="17">
|
|
159
|
+
<Text id="physical-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The brand has a physical life.</Text>
|
|
160
|
+
<Image id="physical-environment" theme={theme} x={40} y={158} w={550} h={338} label="[Space / signage / environmental application]" detail="[Artwork + production context]"/>
|
|
161
|
+
<Image id="physical-object" theme={theme} x={610} y={158} w={310} h={203} label="[Object / packaging / print]"/>
|
|
162
|
+
<Text id="physical-specification" theme={theme} x={610} y={385} w={296} h={110} size={19}>[Specify material, finish, scale, print process, supplier proof, and relevant limitations.]</Text>
|
|
163
|
+
</Slide>
|
|
164
|
+
<Slide id="brand-handoff" theme={theme} section="08 / ASSETS & OWNERSHIP" folio="18" dark>
|
|
165
|
+
<Text id="handoff-title" theme={theme} x={40} y={82} w={830} h={120} size={48} role="title" color={theme.paper}>Make the right thing easy to find.</Text>
|
|
166
|
+
<Rule theme={theme} x={40} y={239} w={880} color={theme.muted}/>
|
|
167
|
+
<Text id="handoff-assets-label" theme={theme} x={40} y={270} w={392} h={25} size={12} color={theme.paper}>SOURCE OF TRUTH</Text>
|
|
168
|
+
<Text id="handoff-assets" theme={theme} x={40} y={314} w={392} h={90} size={24} color={theme.paper}>[Asset library / templates / master files / access instructions]</Text>
|
|
169
|
+
<Text id="handoff-rights" theme={theme} x={40} y={427} w={392} h={73} size={16} color={theme.paper}>[Image credits, model permissions, font licenses, and partner-mark restrictions.]</Text>
|
|
170
|
+
<Text id="handoff-owner-label" theme={theme} x={520} y={270} w={385} h={25} size={12} color={theme.paper}>DECISIONS & MAINTENANCE</Text>
|
|
171
|
+
<Text id="handoff-owner" theme={theme} x={520} y={314} w={385} h={90} size={24} color={theme.paper}>[Owner / contact / approval path / exception process]</Text>
|
|
172
|
+
<Text id="handoff-version" theme={theme} x={520} y={427} w={385} h={73} size={16} color={theme.paper}>[Version / published date / next review / change log location]</Text>
|
|
173
|
+
</Slide>
|
|
174
|
+
</>}
|
|
175
|
+
</BrandGuidelines>;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function Specimen({length='typical', theme: selectedTheme=theme}: {length?:'sparse'|'typical'|'long';theme?:DocTheme}) {
|
|
179
|
+
return <GuidelinesSkeleton theme={selectedTheme} title={length==='long'?'A longer brand name with an equally considered identity system':title} sparse={length==='sparse'}/>;
|
|
180
|
+
}
|
|
181
|
+
export default function Preview() { return <Specimen/>; }
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { BrandGuidelines, BrandSlide as Slide, BrandText as Text, BrandImage as Image, BrandPanel as Panel, BrandRule as Rule } from '../../templates/brand-guidelines';
|
|
2
|
+
import { TextSlot } from 'opendoc';
|
|
3
|
+
import type { DocTheme } from 'opendoc/themes';
|
|
4
|
+
// @ts-ignore The selected local theme module is inserted when this starter becomes a document.
|
|
5
|
+
import { theme } from "__OPENDOC_THEME_MODULE__";
|
|
6
|
+
|
|
7
|
+
const title = "__OPENDOC_TITLE__";
|
|
8
|
+
export const meta = { title, description: 'A brand identity handbook with editable visual briefs and usage rules.', kind: 'brand guidelines', format: 'presentation', theme: "__OPENDOC_THEME__" };
|
|
9
|
+
export const provenance = { template: 'templates/brand-guidelines/index.tsx' };
|
|
10
|
+
|
|
11
|
+
// This entire skeleton belongs to the instance. Omit/reorder slides and adapt compositions.
|
|
12
|
+
// Keep IDs stable. Replace every bracketed brief with approved brand content.
|
|
13
|
+
// Artwork: import document media, then add image={{item:'your-media-id'}} to an Image.
|
|
14
|
+
// Shared marks: bind the logo first, then add logo={{variation:'approved-variation'}}.
|
|
15
|
+
// Choose the variation for the actual PDF background. Image slots never recolor artwork.
|
|
16
|
+
export function GuidelinesSkeleton({ theme, title, sparse = false }: { theme: DocTheme; title: string; sparse?: boolean }) {
|
|
17
|
+
return <BrandGuidelines title={title} theme={theme}>
|
|
18
|
+
<Slide id="brand-opening" theme={theme} section="BRAND GUIDELINES" folio="01">
|
|
19
|
+
<Image id="opening-image" theme={theme} x={510} y={74} w={410} h={426} label="The brand, in one image" detail="[Opening artwork / approved crop]"/>
|
|
20
|
+
<Text id="opening-title" theme={theme} x={40} y={115} w={440} h={200} size={title.length > 42 ? 40 : 58} role="title"><TextSlot slot="title" from="title">{title}</TextSlot></Text>
|
|
21
|
+
<Rule theme={theme} x={40} y={379} w={400}/>
|
|
22
|
+
<Text id="opening-description" theme={theme} x={40} y={400} w={390} h={56} size={19}>[A concise invitation into the brand’s world.]</Text>
|
|
23
|
+
<Text id="opening-edition" theme={theme} x={40} y={477} w={420} h={20} size={11}>[Brand owner] / [Edition] / [Review date]</Text>
|
|
24
|
+
</Slide>
|
|
25
|
+
{!sparse && <>
|
|
26
|
+
<Slide id="brand-premise" theme={theme} section="01 / FOUNDATION" folio="02" dark>
|
|
27
|
+
<Text id="premise-title" theme={theme} x={40} y={88} w={825} h={169} size={48} role="title" color={theme.paper}>[The belief that gives this brand a reason to exist.]</Text>
|
|
28
|
+
<Rule theme={theme} x={40} y={295} w={880} color={theme.muted}/>
|
|
29
|
+
<Text id="premise-audience-label" theme={theme} x={40} y={330} w={245} h={25} size={12} color={theme.paper}>WHO WE ARE FOR</Text>
|
|
30
|
+
<Text id="premise-audience" theme={theme} x={40} y={372} w={245} h={112} size={21} color={theme.paper}>[Name the people and the need that matters to them.]</Text>
|
|
31
|
+
<Text id="premise-promise-label" theme={theme} x={347} y={330} w={245} h={25} size={12} color={theme.paper}>OUR PROMISE</Text>
|
|
32
|
+
<Text id="premise-promise" theme={theme} x={347} y={372} w={245} h={112} size={21} color={theme.paper}>[The meaningful benefit we consistently deliver.]</Text>
|
|
33
|
+
<Text id="premise-proof-label" theme={theme} x={654} y={330} w={245} h={25} size={12} color={theme.paper}>HOW WE PROVE IT</Text>
|
|
34
|
+
<Text id="premise-proof" theme={theme} x={654} y={372} w={245} h={112} size={21} color={theme.paper}>[An observable behavior that earns the promise.]</Text>
|
|
35
|
+
</Slide>
|
|
36
|
+
<Slide id="brand-voice" theme={theme} section="01 / VOICE" folio="03">
|
|
37
|
+
<Text id="voice-title" theme={theme} x={40} y={80} w={820} h={65} size={39} role="title">Personality, made practical.</Text>
|
|
38
|
+
<Text id="voice-principle" theme={theme} x={40} y={172} w={285} h={170} size={32} role="title">[We sound like this. We make people feel this.]</Text>
|
|
39
|
+
<Text id="voice-context" theme={theme} x={40} y={402} w={270} h={83} size={17}>[How tone changes for a launch, a support reply, or a difficult moment.]</Text>
|
|
40
|
+
<Panel theme={theme} x={365} y={170} w={555} h={149} color={theme.line}/>
|
|
41
|
+
<Text id="voice-use-label" theme={theme} x={389} y={189} w={485} h={24} size={11}>WRITE IT THIS WAY</Text>
|
|
42
|
+
<Text id="voice-use" theme={theme} x={389} y={229} w={485} h={66} size={24}>[A concrete, approved example of our voice in use.]</Text>
|
|
43
|
+
<Rule theme={theme} x={365} y={352} w={555}/>
|
|
44
|
+
<Text id="voice-avoid-label" theme={theme} x={389} y={374} w={485} h={24} size={11}>AVOID / WHY</Text>
|
|
45
|
+
<Text id="voice-avoid" theme={theme} x={389} y={412} w={485} h={72} size={21}>[Rewrite an off-brand phrase and explain what changes.]</Text>
|
|
46
|
+
</Slide>
|
|
47
|
+
<Slide id="brand-world" theme={theme} section="01 / EXPRESSION BOARD" folio="04">
|
|
48
|
+
<Text id="world-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">A world you can recognize.</Text>
|
|
49
|
+
<Image id="world-hero" theme={theme} x={40} y={156} w={360} h={342} label="[Defining scene]" detail="[Subject / point of view]"/>
|
|
50
|
+
<Image id="world-material" theme={theme} x={416} y={156} w={242} h={190} label="[Material / texture]"/>
|
|
51
|
+
<Image id="world-gesture" theme={theme} x={674} y={156} w={246} h={190} label="[Human gesture]"/>
|
|
52
|
+
<Image id="world-detail" theme={theme} x={416} y={362} w={242} h={136} label="[Unexpected detail]"/>
|
|
53
|
+
<Text id="world-logic" theme={theme} x={690} y={378} w={215} h={115} size={20}>[Three qualities connect these images. Name them.]</Text>
|
|
54
|
+
</Slide>
|
|
55
|
+
<Slide id="brand-primary-mark" theme={theme} section="02 / PRIMARY MARK" folio="05">
|
|
56
|
+
<Text id="mark-title" theme={theme} x={40} y={78} w={760} h={60} size={39} role="title">Our signature.</Text>
|
|
57
|
+
<Image id="primary-mark-artwork" theme={theme} x={40} y={151} w={880} h={264} label="[Primary mark / approved master artwork]" detail="[Use a bound logo or contained artwork]"/>
|
|
58
|
+
<Text id="mark-purpose" theme={theme} x={40} y={443} w={400} h={57} size={19}>[What this mark expresses and when it is the default.]</Text>
|
|
59
|
+
<Text id="mark-source" theme={theme} x={527} y={443} w={393} h={57} size={15}>[Asset name / approved formats / owner / version]</Text>
|
|
60
|
+
</Slide>
|
|
61
|
+
<Slide id="brand-mark-variants" theme={theme} section="02 / MARK VARIANTS" folio="06">
|
|
62
|
+
<Text id="variants-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">One identity. The right expression.</Text>
|
|
63
|
+
<Image id="variant-light" theme={theme} x={40} y={158} w={430} h={209} label="[Mark on a light field]" detail="[Approved variation]"/>
|
|
64
|
+
<Image id="variant-dark" theme={theme} x={490} y={158} w={430} h={209} label="[Mark on a dark field]" detail="[Approved reverse variation]" dark/>
|
|
65
|
+
<Text id="variant-light-rule" theme={theme} x={40} y={389} w={410} h={99} size={20}>[Default use, background requirements, and exceptions for this version.]</Text>
|
|
66
|
+
<Text id="variant-dark-rule" theme={theme} x={490} y={389} w={410} h={99} size={20}>[When a reverse, compact, or partner lockup is permitted. Omit unused variants.]</Text>
|
|
67
|
+
</Slide>
|
|
68
|
+
<Slide id="brand-mark-measurements" theme={theme} section="02 / SPACE & SIZE" folio="07">
|
|
69
|
+
<Text id="measurements-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Make room for the mark.</Text>
|
|
70
|
+
<Panel theme={theme} x={40} y={160} w={541} h={294} outline/>
|
|
71
|
+
<Image id="clearspace-diagram" theme={theme} x={91} y={211} w={439} h={192} label="[Measured clear-space diagram]" detail="[Upload the approved annotated construction]"/>
|
|
72
|
+
<Text id="clearspace-caption" theme={theme} x={40} y={472} w={541} h={31} size={12}>[Define the reference unit and required space. Diagram is a placeholder.]</Text>
|
|
73
|
+
<Text id="size-digital-label" theme={theme} x={633} y={170} w={280} h={25} size={12}>DIGITAL MINIMUM</Text>
|
|
74
|
+
<Text id="size-digital" theme={theme} x={633} y={212} w={280} h={72} size={27}>[Approved size in px + conditions]</Text>
|
|
75
|
+
<Rule theme={theme} x={633} y={306} w={287}/>
|
|
76
|
+
<Text id="size-print-label" theme={theme} x={633} y={333} w={280} h={25} size={12}>PRINT MINIMUM</Text>
|
|
77
|
+
<Text id="size-print" theme={theme} x={633} y={375} w={280} h={103} size={27}>[Approved size in mm + production method]</Text>
|
|
78
|
+
</Slide>
|
|
79
|
+
<Slide id="brand-mark-misuse" theme={theme} section="02 / CORRECT USE" folio="08">
|
|
80
|
+
<Text id="misuse-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Show the boundary, not just the rule.</Text>
|
|
81
|
+
<Image id="misuse-proportion" theme={theme} x={40} y={162} w={280} h={220} label="[Proportion example]"/>
|
|
82
|
+
<Image id="misuse-background" theme={theme} x={340} y={162} w={280} h={220} label="[Background example]"/>
|
|
83
|
+
<Image id="misuse-lockup" theme={theme} x={640} y={162} w={280} h={220} label="[Lockup example]"/>
|
|
84
|
+
<Text id="misuse-proportion-rule" theme={theme} x={40} y={405} w={270} h={89} size={18}>[Identify the incorrect change and show the approved correction.]</Text>
|
|
85
|
+
<Text id="misuse-background-rule" theme={theme} x={340} y={405} w={270} h={89} size={18}>[Explain the legibility or contrast issue for this application.]</Text>
|
|
86
|
+
<Text id="misuse-lockup-rule" theme={theme} x={640} y={405} w={270} h={89} size={18}>[Specify which master artwork or lockup should replace it.]</Text>
|
|
87
|
+
</Slide>
|
|
88
|
+
<Slide id="brand-color-roles" theme={theme} section="03 / COLOR" folio="09">
|
|
89
|
+
<Text id="color-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">A palette with a job to do.</Text>
|
|
90
|
+
<Panel theme={theme} x={40} y={158} w={430} h={213} color={theme.ink}/>
|
|
91
|
+
<Panel theme={theme} x={490} y={158} w={205} h={213} color={theme.line}/>
|
|
92
|
+
<Panel theme={theme} x={715} y={158} w={205} h={213} color={theme.paper} outline/>
|
|
93
|
+
<Text id="color-primary" theme={theme} x={64} y={187} w={380} h={86} size={32} role="title" color={theme.paper}>[Signature color]</Text>
|
|
94
|
+
<Text id="color-primary-values" theme={theme} x={64} y={315} w={380} h={36} size={13} color={theme.paper}>[HEX / RGB / CMYK / spot specification]</Text>
|
|
95
|
+
<Text id="color-support" theme={theme} x={511} y={187} w={163} h={86} size={24}>[Supporting color]</Text>
|
|
96
|
+
<Text id="color-surface" theme={theme} x={736} y={187} w={163} h={86} size={24}>[Surface color]</Text>
|
|
97
|
+
<Text id="color-roles" theme={theme} x={40} y={402} w={525} h={69} size={21}>[Explain dominant, supporting, accent, and functional roles. Add verified specifications for each.]</Text>
|
|
98
|
+
<Text id="color-placeholder-note" theme={theme} x={640} y={407} w={280} h={81} size={13}>These swatches show the current presentation theme. Replace them with approved brand colors; widths do not prescribe usage ratios.</Text>
|
|
99
|
+
</Slide>
|
|
100
|
+
<Slide id="brand-accessibility" theme={theme} section="03 / ACCESSIBLE COMBINATIONS" folio="10">
|
|
101
|
+
<Text id="contrast-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">Color has to work for people.</Text>
|
|
102
|
+
<Panel theme={theme} x={40} y={164} w={422} h={183} color={theme.ink}/>
|
|
103
|
+
<Text id="contrast-dark-sample" theme={theme} x={65} y={195} w={370} h={108} size={43} role="title" color={theme.paper}>[Text on a dark surface]</Text>
|
|
104
|
+
<Panel theme={theme} x={486} y={164} w={434} h={183} color={theme.line}/>
|
|
105
|
+
<Text id="contrast-light-sample" theme={theme} x={511} y={195} w={380} h={108} size={43} role="title">[Text on a light surface]</Text>
|
|
106
|
+
<Text id="contrast-evidence" theme={theme} x={40} y={377} w={420} h={113} size={18}>[Record tested foreground / background values, ratio, text size, target standard, and result for each pairing.]</Text>
|
|
107
|
+
<Text id="contrast-other-cues" theme={theme} x={486} y={377} w={424} h={113} size={18}>[Demonstrate labels, shapes, or patterns alongside color. Recheck text and marks over the actual crop.]</Text>
|
|
108
|
+
</Slide>
|
|
109
|
+
<Slide id="brand-type-specimen" theme={theme} section="04 / TYPOGRAPHY" folio="11" dark>
|
|
110
|
+
<Text id="type-large" theme={theme} x={35} y={93} w={800} h={172} size={130} role="title" color={theme.paper}>Aa Bb Cc</Text>
|
|
111
|
+
<Text id="type-line" theme={theme} x={42} y={285} w={830} h={75} size={32} color={theme.paper}>[Words should feel unmistakably ours.]</Text>
|
|
112
|
+
<Rule theme={theme} x={40} y={396} w={880} color={theme.muted}/>
|
|
113
|
+
<Text id="type-display" theme={theme} x={40} y={428} w={265} h={70} size={17} color={theme.paper}>[Display family / approved weights / purpose]</Text>
|
|
114
|
+
<Text id="type-body" theme={theme} x={350} y={428} w={265} h={70} size={17} color={theme.paper}>[Text family / approved weights / purpose]</Text>
|
|
115
|
+
<Text id="type-access" theme={theme} x={655} y={428} w={265} h={70} size={17} color={theme.paper}>[Font source / license / fallback / language coverage]</Text>
|
|
116
|
+
</Slide>
|
|
117
|
+
<Slide id="brand-type-hierarchy" theme={theme} section="04 / HIERARCHY IN USE" folio="12">
|
|
118
|
+
<Text id="hierarchy-title" theme={theme} x={40} y={78} w={820} h={60} size={39} role="title">Let the reader find their way.</Text>
|
|
119
|
+
<Panel theme={theme} x={40} y={160} w={553} h={337} color={theme.line}/>
|
|
120
|
+
<Text id="hierarchy-kicker" theme={theme} x={68} y={187} w={493} h={25} size={12}>[EYEBROW / CONTEXT]</Text>
|
|
121
|
+
<Text id="hierarchy-heading" theme={theme} x={68} y={231} w={493} h={100} size={38} role="title">[A headline with a clear role.]</Text>
|
|
122
|
+
<Text id="hierarchy-body" theme={theme} x={68} y={347} w={475} h={89} size={19}>[Use a short real passage to show hierarchy, line length, paragraph rhythm, and emphasis.]</Text>
|
|
123
|
+
<Text id="hierarchy-caption" theme={theme} x={68} y={459} w={485} h={23} size={11}>[Caption / source / contextual detail]</Text>
|
|
124
|
+
<Text id="hierarchy-rules" theme={theme} x={637} y={177} w={272} h={168} size={22}>[Specify role, size, line height, weight, and spacing for the formats you actually use.]</Text>
|
|
125
|
+
<Rule theme={theme} x={637} y={365} w={283}/>
|
|
126
|
+
<Text id="hierarchy-note" theme={theme} x={637} y={392} w={272} h={96} size={17}>[Show allowed variation and the point where a new composition is needed. These specimen sizes are not brand rules.]</Text>
|
|
127
|
+
</Slide>
|
|
128
|
+
<Slide id="brand-photography" theme={theme} section="05 / PHOTOGRAPHY" folio="13">
|
|
129
|
+
<Text id="photography-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">Our point of view, through a lens.</Text>
|
|
130
|
+
<Image id="photography-human" theme={theme} x={40} y={158} w={270} h={337} label="[People]" detail="[Casting / gesture / context]"/>
|
|
131
|
+
<Image id="photography-place" theme={theme} x={326} y={158} w={280} h={206} label="[Place / environment]"/>
|
|
132
|
+
<Image id="photography-detail" theme={theme} x={622} y={158} w={298} h={206} label="[Object / detail]"/>
|
|
133
|
+
<Text id="photography-principles" theme={theme} x={326} y={392} w={582} h={100} size={22}>[Define subject, light, composition, color treatment, and emotional quality. Use examples that make each choice visible.]</Text>
|
|
134
|
+
</Slide>
|
|
135
|
+
<Slide id="brand-crop" theme={theme} section="05 / CROP & COMPOSITION" folio="14">
|
|
136
|
+
<Text id="crop-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The crop is part of the story.</Text>
|
|
137
|
+
<Image id="crop-wide" theme={theme} x={40} y={160} w={554} h={255} label="[Wide crop / subject in context]" detail="[Specify focal point and text-safe area]"/>
|
|
138
|
+
<Image id="crop-tall" theme={theme} x={618} y={160} w={154} h={255} label="[Portrait crop]"/>
|
|
139
|
+
<Image id="crop-square" theme={theme} x={792} y={160} w={128} h={128} label="[Square]"/>
|
|
140
|
+
<Text id="crop-small-note" theme={theme} x={792} y={310} w={128} h={106} size={15}>[What must survive at smaller sizes?]</Text>
|
|
141
|
+
<Text id="crop-rules" theme={theme} x={40} y={444} w={866} h={58} size={19}>[Show the same approved image across formats. Explain the allowed crop, subject protection, overlays, and legibility checks.]</Text>
|
|
142
|
+
</Slide>
|
|
143
|
+
<Slide id="brand-graphic-language" theme={theme} section="06 / GRAPHIC LANGUAGE" folio="15">
|
|
144
|
+
<Text id="language-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The details that make it ours.</Text>
|
|
145
|
+
<Image id="language-motif" theme={theme} x={40} y={158} w={422} h={250} label="[Signature shape / pattern]"/>
|
|
146
|
+
<Image id="language-icons" theme={theme} x={486} y={158} w={434} h={147} label="[Icon or illustration family]"/>
|
|
147
|
+
<Image id="language-motion" theme={theme} x={486} y={325} w={434} h={83} label="[Motion storyboard / sequence]"/>
|
|
148
|
+
<Text id="language-geometry" theme={theme} x={40} y={434} w={422} h={68} size={18}>[Explain construction, scale, line weight, density, and relationship to the mark.]</Text>
|
|
149
|
+
<Text id="language-purpose" theme={theme} x={486} y={434} w={424} h={68} size={18}>[Name the purpose and boundaries. Omit modules the brand does not use.]</Text>
|
|
150
|
+
</Slide>
|
|
151
|
+
<Slide id="brand-digital-applications" theme={theme} section="07 / DIGITAL APPLICATIONS" folio="16">
|
|
152
|
+
<Text id="digital-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">A system, out in the world.</Text>
|
|
153
|
+
<Image id="digital-hero" theme={theme} x={40} y={160} w={527} h={293} label="[Website / product / digital campaign]" detail="[Approved example / actual breakpoint]"/>
|
|
154
|
+
<Image id="digital-mobile" theme={theme} x={591} y={160} w={145} h={293} label="[Mobile]"/>
|
|
155
|
+
<Image id="digital-social" theme={theme} x={760} y={160} w={160} h={160} label="[Social]"/>
|
|
156
|
+
<Text id="digital-transfer" theme={theme} x={760} y={342} w={160} h={111} size={17}>[What stays consistent across formats?]</Text>
|
|
157
|
+
<Text id="digital-caption" theme={theme} x={40} y={476} w={880} h={30} size={12}>[Annotate the decisions: hierarchy, color, mark, imagery, spacing, and voice.]</Text>
|
|
158
|
+
</Slide>
|
|
159
|
+
<Slide id="brand-physical-applications" theme={theme} section="07 / PHYSICAL APPLICATIONS" folio="17">
|
|
160
|
+
<Text id="physical-title" theme={theme} x={40} y={78} w={840} h={60} size={39} role="title">The brand has a physical life.</Text>
|
|
161
|
+
<Image id="physical-environment" theme={theme} x={40} y={158} w={550} h={338} label="[Space / signage / environmental application]" detail="[Artwork + production context]"/>
|
|
162
|
+
<Image id="physical-object" theme={theme} x={610} y={158} w={310} h={203} label="[Object / packaging / print]"/>
|
|
163
|
+
<Text id="physical-specification" theme={theme} x={610} y={385} w={296} h={110} size={19}>[Specify material, finish, scale, print process, supplier proof, and relevant limitations.]</Text>
|
|
164
|
+
</Slide>
|
|
165
|
+
<Slide id="brand-handoff" theme={theme} section="08 / ASSETS & OWNERSHIP" folio="18" dark>
|
|
166
|
+
<Text id="handoff-title" theme={theme} x={40} y={82} w={830} h={120} size={48} role="title" color={theme.paper}>Make the right thing easy to find.</Text>
|
|
167
|
+
<Rule theme={theme} x={40} y={239} w={880} color={theme.muted}/>
|
|
168
|
+
<Text id="handoff-assets-label" theme={theme} x={40} y={270} w={392} h={25} size={12} color={theme.paper}>SOURCE OF TRUTH</Text>
|
|
169
|
+
<Text id="handoff-assets" theme={theme} x={40} y={314} w={392} h={90} size={24} color={theme.paper}>[Asset library / templates / master files / access instructions]</Text>
|
|
170
|
+
<Text id="handoff-rights" theme={theme} x={40} y={427} w={392} h={73} size={16} color={theme.paper}>[Image credits, model permissions, font licenses, and partner-mark restrictions.]</Text>
|
|
171
|
+
<Text id="handoff-owner-label" theme={theme} x={520} y={270} w={385} h={25} size={12} color={theme.paper}>DECISIONS & MAINTENANCE</Text>
|
|
172
|
+
<Text id="handoff-owner" theme={theme} x={520} y={314} w={385} h={90} size={24} color={theme.paper}>[Owner / contact / approval path / exception process]</Text>
|
|
173
|
+
<Text id="handoff-version" theme={theme} x={520} y={427} w={385} h={73} size={16} color={theme.paper}>[Version / published date / next review / change log location]</Text>
|
|
174
|
+
</Slide>
|
|
175
|
+
</>}
|
|
176
|
+
</BrandGuidelines>;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export default function BrandGuidelinesDocument() { return <GuidelinesSkeleton theme={theme} title={title}/>; }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Brand guidelines",
|
|
3
|
+
"description": "An image-rich identity handbook: bold type, mark showcases, art-direction contact sheets, working rules, and applications. Eighteen adaptable slide compositions with purposeful artwork slots.",
|
|
4
|
+
"documentFormat": "presentation",
|
|
5
|
+
"format": "16:9 · Brand guidelines",
|
|
6
|
+
"structure": [
|
|
7
|
+
"Start with the brand idea, audience, voice, and a visual expression board.",
|
|
8
|
+
"Show primary and alternate marks, measured usage rules, and concrete misuse examples.",
|
|
9
|
+
"Explain color roles and tested pairings before expressive typography and hierarchy specimens.",
|
|
10
|
+
"Give photography, crop, graphic language, and applications generous image areas.",
|
|
11
|
+
"End with source assets, ownership, permissions, version, and review responsibilities.",
|
|
12
|
+
"Every rule and image brief is an editable placeholder; the specimen invents no brand standards.",
|
|
13
|
+
"Mix or omit slides; keep stable identities and review the PDF after replacing content."
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Business proposal
|
|
2
|
+
|
|
3
|
+
Treat this as a soft foundation with room for variation and creativity. The design begins with a clear proposal title and client/team context, then provides a broad reading column for the argument, scope, delivery, and commercial material. It is a page composition, not a mandatory sales method or a form to fill. Choose section names and order for the actual reader and work.
|
|
4
|
+
|
|
5
|
+
The default shares the opening with the body. A separate cover is useful for a more substantial proposal, not compulsory. A long title may need smaller type through `titleStyle`; a short proposal may need no subtitle, schedule, running title, or acceptance area. Adjust margins, spacing, and the emphasis of an exhibit when the material benefits. Keep changes for one document local or preserve shared defaults.
|
|
6
|
+
|
|
7
|
+
Keep narrative content in ordinary OpenDoc blocks. Optional pricing has its own validated local data, rather than imposing a JSON schema on the whole proposal. Parse that input once at the document boundary. Give each ProposalPricing component a unique stable ID; multiple options may have separate pricing sections. Use calculated totals and the shared pricing contract. Do not mix currencies or unsupported tax/discount models in one calculation, or type a competing total into prose. Retain the illustrative notice until the commercial data has been replaced with supplied facts.
|
|
8
|
+
|
|
9
|
+
Scope, deliverables, timing, terms, acceptance wording, and business claims come from the author. Do not invent outcomes, credentials, quotations, commitments, approval, or legal conditions. An acceptance area contains blank fields only; it does not claim a signature. Preserve accurate references and stable IDs. The caller's theme supplies visual hierarchy, rhythm, and component treatments.
|
|
10
|
+
|
|
11
|
+
Use native Forme flow and existing blocks. Keep only short headings/leads or signature fields together; allow long prose and tables to paginate. A deliberate break before commercial details may help a particular proposal, but do not force every instance into the specimen's page count. Do not introduce automatic fitting, custom typesetting, manual line splitting, or renderer patches. Review adapted PDFs, including every page after shared changes. Cover and no-cover, sparse/unpriced and long material, a second theme, validated pricing, and a working starter all need representative checks. Preserve unrelated documents and templates.
|
|
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,36 @@
|
|
|
1
|
+
# Business proposal
|
|
2
|
+
|
|
3
|
+
A flexible narrative proposal layout with an optional cover, client/team context, broad body column, and optional calculated pricing and acceptance. Defaults are A4 portrait with 54-point side/top and 58-point bottom body margins, 11/15.95-point body text, and 10-point paragraph gaps. The opening title is 30 points on the body page or 40 points on a separate cover. The caller's theme supplies visual hierarchy, rhythm, and component treatments.
|
|
4
|
+
|
|
5
|
+
`BusinessProposal` requires `title`, `theme`, and ordinary OpenDoc `children`. Optional `subtitle`, `preparedFor`, `preparedBy`, `date`, `reference`, and `openingNote` supply opening content. These are authored text, not inferred facts or dates. `cover` defaults to false; set it to true for a separate title page. `titleStyle` accepts native Forme overrides. A short optional `runningTitle` repeats above body pages. Page numbers follow physical PDF order, including any cover pages.
|
|
6
|
+
|
|
7
|
+
The document imposes no section outline. Add scope, deliverables, schedule, evidence, or exhibits where they help. `ProposalHeading` supplies 16-point section defaults and accepts a stable `id`, children, and native `style`. Keep a heading and a genuinely short lead together with a native unbreakable View; leave longer passages in normal flow. The specimen deliberately starts commercial details on a new page, but the layout component imposes no such break.
|
|
8
|
+
|
|
9
|
+
Optional verified `references` use the existing Cite/References system and appear after the body. Optional inline `acceptance` supplies authored wording followed by blank name, signature, and date lines. Omit it when acceptance is recorded elsewhere. Neither an acceptance process nor legal terms are fabricated by the template.
|
|
10
|
+
|
|
11
|
+
## Optional pricing
|
|
12
|
+
|
|
13
|
+
Pricing is a component, not a required document structure. `ProposalPricing` accepts a unique stable `id`, parsed `data`, and the same `theme` as the proposal. Its input is `{ synthetic: boolean, pricing: ... }`, validated with `parseProposalPricing` at module load before metadata/rendering. Prose remains in TSX; only commercial data uses JSON. Unknown input fields fail clearly, and missing or invalid pricing does not silently generate a total.
|
|
14
|
+
|
|
15
|
+
The starter includes a sample pricing section and owns a copied `data.json`. Editing that file changes only its commercial data; its title and narrative remain in the document's TSX. To make an unpriced proposal, omit ProposalPricing and its input/binding and remove the unused data provenance. No separate data file is required by BusinessProposal itself. For alternative commercial options, use distinct component IDs and separately validated pricing objects. IDs preserve table and totals comment targets when sections move.
|
|
16
|
+
|
|
17
|
+
Pricing uses the same [contract and rounding](../quotation/README.md) as Quotation: decimal strings, explicit currency precision, each line rounded half up, an optional fixed discount, and one supplied tax rate on the discounted subtotal. Totals are calculated with integer arithmetic. No tax rate, payment terms, or commercial claim is inferred. Multiple tax rates, inclusive tax, other discount models, and additional charges need an explicit contract extension. An invoice's payment balance does not belong in proposed pricing.
|
|
18
|
+
|
|
19
|
+
The required `synthetic` flag keeps sample amounts visibly identified in the pricing section. Set it to false only after substituting real supplied material. The sample's 10% rate and all prices are illustrative. The typical total is USD 1,320.00. Any proposed commitment, exclusions, schedule, acceptance wording, and other conditions remain authored content outside the calculation.
|
|
20
|
+
|
|
21
|
+
`preview.tsx` supports sparse, typical, and long specimens, optional cover and pricing, and a second theme for review. The catalog defaults to a Neutral, no-cover proposal. See [AGENTS.md](AGENTS.md) for design freedom and functional requirements.
|
|
22
|
+
|
|
23
|
+
## Logo
|
|
24
|
+
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
Import reusable artwork into the shared [asset library](../../docs/ASSETS.md), inspect its variation guidance, and bind an exact version to the intended document:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
pnpm assets -- inspect logo acme
|
|
31
|
+
pnpm assets -- bind my-document logo acme --variation default
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
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.
|
|
35
|
+
|
|
36
|
+
Pass the artwork directly to `BusinessProposal` through its `logo` prop. Use the adapted document theme from `./theme`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"synthetic": true,
|
|
3
|
+
"pricing": {
|
|
4
|
+
"currency": {
|
|
5
|
+
"code": "USD",
|
|
6
|
+
"decimals": 2
|
|
7
|
+
},
|
|
8
|
+
"items": [
|
|
9
|
+
{
|
|
10
|
+
"id": "planning",
|
|
11
|
+
"description": "Content planning workshop",
|
|
12
|
+
"quantity": "2.5",
|
|
13
|
+
"unit": "hours",
|
|
14
|
+
"unitPrice": "160.00"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "writing",
|
|
18
|
+
"description": "Website copy package: supplied scope and agreed deliverables",
|
|
19
|
+
"quantity": "1",
|
|
20
|
+
"unit": "package",
|
|
21
|
+
"unitPrice": "600.00"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "review",
|
|
25
|
+
"description": "Review and revision sessions",
|
|
26
|
+
"quantity": "3",
|
|
27
|
+
"unit": "hours",
|
|
28
|
+
"unitPrice": "75.00"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"discount": "25.00",
|
|
32
|
+
"tax": {
|
|
33
|
+
"label": "Illustrative tax",
|
|
34
|
+
"ratePercent": "10"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|