@openpresentation/opf 0.6.0 → 0.8.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.
@@ -1,4 +1,4 @@
1
- import { P as Presentation } from './presentation-UpSHz0aK.js';
1
+ import { P as Presentation } from './presentation-BMTdX6O1.js';
2
2
 
3
3
  interface ExampleRecord {
4
4
  /** Filename slug, without the `.opf.json` suffix. */
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export { S as SchemaEntry, a as SchemaName, b as audience, c as chartType, d as colorScheme, f as fontScheme, l as language, e as layout, n as narrative, p as presentation, g as purpose, s as schemaEntries, h as schemaNames, i as schemas, j as socialPlatform, t as theme, k as tone } from './schemas-C1DxapX2.js';
2
- export { A as Audience, C as CatalogEntry, a as CatalogIndex, b as CatalogIndexRecord, c as CatalogKind, d as CatalogRecord, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone, i as audiences, j as catalogEntries, k as catalogIndexes, l as catalogKinds, m as catalogSchemaNames, n as catalogs, o as chartTypes, p as colorSchemes, q as fontSchemes, r as languages, s as layouts, t as narratives, u as purposes, v as socialPlatforms, w as themes, x as tones } from './catalogs-x1oFFQnd.js';
1
+ export { S as SchemaEntry, a as SchemaName, b as audience, c as chartType, d as colorScheme, f as fontScheme, l as language, e as layout, n as narrative, p as presentation, g as purpose, s as schemaEntries, h as schemaNames, i as schemas, j as socialPlatform, t as theme, k as tone } from './schemas--QRVBhU1.js';
2
+ export { A as Audience, C as CatalogEntry, a as CatalogIndex, b as CatalogIndexRecord, c as CatalogKind, d as CatalogRecord, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone, i as audiences, j as catalogEntries, k as catalogIndexes, l as catalogKinds, m as catalogSchemaNames, n as catalogs, o as chartTypes, p as colorSchemes, q as fontSchemes, r as languages, s as layouts, t as narratives, u as purposes, v as socialPlatforms, w as themes, x as tones } from './catalogs-BnnkUX9O.js';
3
3
  export { OPFValidationError, ValidationIssue, ValidationResult, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './validator.js';
4
4
  export { SpecFileEntry, SpecFileKind, SpecFilePath, specFileEntries, specFileKinds, specFilePaths } from './spec-files.js';
5
5
  export { LayoutPreviewIndex, LayoutPreviewRecord, getLayoutPreview, hasLayoutPreview, layoutPreviewIndex, layoutPreviewSlugs, layoutPreviews } from './previews.js';
6
- export { P as Presentation } from './presentation-UpSHz0aK.js';
7
- export { ComposeSlideOptions, ComposedFlow, ComposedGroup, ComposedItem, Composition, CompositionTrack, FontFamilies, LayoutBox, LayoutDiagnostic, ListEntryLayout, ListFit, ListText, ListValue, MAX_COMPOSITION_DEPTH, MeasureTextWidth, OPFCompositionError, RichTextFit, RichTextFragment, RichTextLine, RichTextOptions, RichTextRun, SlideComposition, TextFit, TextMeasurement, TextStyle, composeSlide, fitList, fitRichText, fitText, measureText, resolveCanvasDimensions, resolveFontFamilies, resolveTextStyle, textWidthMeasurer, wrapText } from './composition.js';
6
+ export { P as Presentation } from './presentation-BMTdX6O1.js';
7
+ export { ComposeSlideOptions, ComposedFlow, ComposedGroup, ComposedItem, Composition, CompositionCandidate, CompositionDecision, CompositionExplanation, CompositionPenalties, CompositionTrack, FontFamilies, LayoutBox, LayoutDiagnostic, ListEntryLayout, ListFit, ListText, ListValue, MAX_COMPOSITION_DEPTH, MeasureTextWidth, OPFCompositionError, QuoteContent, QuoteLayout, QuoteLayoutDiagnostic, QuoteLayoutOptions, QuoteTextPart, QuoteTextSource, RichTextFit, RichTextFragment, RichTextLine, RichTextOptions, RichTextRun, SlideComposition, TextFit, TextMeasurement, TextStyle, composeSlide, fitList, fitRichText, fitText, layoutQuote, measureText, resolveCanvasDimensions, resolveFontFamilies, resolveTextStyle, textWidthMeasurer, wrapText } from './composition.js';
8
8
  export { OPFPaginationError, PaginatedPage, PaginationMapping, PaginationOptions, PaginationResult, PresentationPaginationOptions, PresentationPaginationResult, paginatePresentation, paginateSlide } from './pagination.js';
9
9
  export { DataCell, DataContentOptions, DataImportOptions, OPFDataImportError, TabularData, createDataContent, parseTabularData } from './data.js';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  export { specFileEntries, specFileKinds, specFilePaths } from './chunk-OZULJBSG.js';
2
2
  export { getLayoutPreview, hasLayoutPreview, layoutPreviewIndex, layoutPreviewSlugs, layoutPreviews } from './chunk-PIQXLBBJ.js';
3
3
  export { OPFDataImportError, createDataContent, parseTabularData } from './chunk-SOSOBKQ2.js';
4
- export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-C6U7LLBT.js';
5
- export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-23MXJL2K.js';
6
- export { MAX_COMPOSITION_DEPTH, OPFCompositionError, composeSlide, fitList, fitRichText, fitText, measureText, resolveCanvasDimensions, resolveFontFamilies, resolveTextStyle, textWidthMeasurer, wrapText } from './chunk-C7GKRLI6.js';
7
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-KSN6RQG2.js';
4
+ export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-X22DFHMW.js';
5
+ export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-HIY26FJV.js';
6
+ export { MAX_COMPOSITION_DEPTH, OPFCompositionError, composeSlide, fitList, fitRichText, fitText, layoutQuote, measureText, resolveCanvasDimensions, resolveFontFamilies, resolveTextStyle, textWidthMeasurer, wrapText } from './chunk-NEQAPMS2.js';
7
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-GQSK3T7X.js';
8
8
  export { audiences, catalogEntries, catalogIndexes, catalogKinds, catalogSchemaNames, catalogs, chartTypes, colorSchemes, fontSchemes, languages, layouts, narratives, purposes, socialPlatforms, themes, tones } from './chunk-TWMRZ43O.js';
@@ -1,5 +1,5 @@
1
- export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-C6U7LLBT.js';
2
- import './chunk-23MXJL2K.js';
3
- import './chunk-C7GKRLI6.js';
4
- import './chunk-KSN6RQG2.js';
1
+ export { OPFPaginationError, paginatePresentation, paginateSlide } from './chunk-X22DFHMW.js';
2
+ import './chunk-HIY26FJV.js';
3
+ import './chunk-NEQAPMS2.js';
4
+ import './chunk-GQSK3T7X.js';
5
5
  import './chunk-TWMRZ43O.js';
@@ -370,21 +370,26 @@ type BulletItem = (string | TextRun[] | {
370
370
  */
371
371
  type ChartDataCell = (string | number | boolean | null);
372
372
  /**
373
- * A cell in table content. Scalar values keep their text representation; TextRun arrays preserve inline formatting and use mixed-style text measurement.
373
+ * A scalar, rich-run array, or styled/spanning cell object. Existing scalar and rich forms remain valid.
374
374
  *
375
375
  * This interface was referenced by `Presentation`'s JSON-Schema
376
376
  * via the `definition` "TableCell".
377
377
  */
378
- type TableCell = (string | number | boolean | null | TextRun[]);
378
+ type TableCell = (TableCellValue | StyledTableCell);
379
+ /**
380
+ * A scalar table value or canonical rich text runs, without cell decoration or geometry.
381
+ *
382
+ * This interface was referenced by `Presentation`'s JSON-Schema
383
+ * via the `definition` "TableCellValue".
384
+ */
385
+ type TableCellValue = (string | number | boolean | null | TextRun[]);
379
386
  /**
380
387
  * A content leaf or recursively composed group. A group contains blocks and optional composition; it cannot mix blocks with leaf payload fields. Groups may nest up to 32 levels.
381
388
  *
382
389
  * This interface was referenced by `Presentation`'s JSON-Schema
383
390
  * via the `definition` "ContentPayload".
384
391
  */
385
- type ContentPayload = ({
386
- [k: string]: unknown;
387
- } & {
392
+ type ContentPayload = {
388
393
  /**
389
394
  * Optional content kind. When omitted, engines infer the kind from the fields present.
390
395
  */
@@ -499,7 +504,7 @@ type ContentPayload = ({
499
504
  */
500
505
  blocks?: [ContentPayload, ...(ContentPayload)[]];
501
506
  composition?: Composition;
502
- });
507
+ };
503
508
  /**
504
509
  * Catalog source location. Accepts:
505
510
  * - A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'.
@@ -1210,6 +1215,8 @@ interface GradientBackground {
1210
1215
  angle?: number;
1211
1216
  /**
1212
1217
  * Ordered list of color stops along the gradient.
1218
+ *
1219
+ * Items: Color stop along the gradient.
1213
1220
  */
1214
1221
  stops?: {
1215
1222
  /**
@@ -2244,14 +2251,101 @@ interface ChartDataSource {
2244
2251
  */
2245
2252
  interface Table {
2246
2253
  /**
2247
- * Optional column labels rendered above table rows. Each label is a string or an array of TextRun values for inline formatting.
2254
+ * Optional column labels. Labels may be strings, rich runs or styled cell objects. Null is an empty label or a placeholder covered by a preceding column span.
2248
2255
  */
2249
- columns?: (string | TextRun[])[];
2256
+ columns?: (string | TextRun[] | StyledTableCell | null)[];
2250
2257
  /**
2251
2258
  * Two-dimensional table row data; each row aligns by index with columns when columns are supplied.
2252
2259
  */
2253
2260
  rows: TableCell[][];
2254
2261
  }
2262
+ /**
2263
+ * A cell with explicit visual style or merged geometry. Its position remains its array column index; use null placeholders for every covered grid position.
2264
+ *
2265
+ * This interface was referenced by `Presentation`'s JSON-Schema
2266
+ * via the `definition` "StyledTableCell".
2267
+ */
2268
+ interface StyledTableCell {
2269
+ /**
2270
+ * Editable cell content; styling and spans do not change its scalar type or rich runs.
2271
+ */
2272
+ value: (string | number | boolean | null | TextRun[]);
2273
+ style?: TableCellStyle;
2274
+ /**
2275
+ * Number of grid columns covered, starting at this cell. Covered positions must contain null. Default 1.
2276
+ */
2277
+ colSpan?: number;
2278
+ /**
2279
+ * Number of grid rows covered, starting at this cell. Covered positions must contain null. Header cells cannot span into body rows. Default 1.
2280
+ */
2281
+ rowSpan?: number;
2282
+ }
2283
+ /**
2284
+ * Cell appearance. Sizes use reference pixels at a 720-pixel canvas short edge and scale with the slide.
2285
+ *
2286
+ * This interface was referenced by `Presentation`'s JSON-Schema
2287
+ * via the `definition` "TableCellStyle".
2288
+ */
2289
+ interface TableCellStyle {
2290
+ /**
2291
+ * Explicit RGB or RGBA color. Eight-digit colors include alpha; #00000000 is transparent.
2292
+ */
2293
+ fill?: string;
2294
+ /**
2295
+ * Default text color, overridden by individual rich run colors.
2296
+ */
2297
+ color?: string;
2298
+ /**
2299
+ * Horizontal text alignment inside the cell.
2300
+ */
2301
+ align?: ("left" | "center" | "right");
2302
+ /**
2303
+ * Vertical alignment inside the padded cell box.
2304
+ */
2305
+ verticalAlign?: ("top" | "middle" | "bottom");
2306
+ padding?: TableCellPadding;
2307
+ /**
2308
+ * Independent cell edges. Omitted edges retain the table theme border; width 0 removes an edge.
2309
+ */
2310
+ borders?: {
2311
+ top?: TableCellBorder;
2312
+ right?: TableCellBorder;
2313
+ bottom?: TableCellBorder;
2314
+ left?: TableCellBorder;
2315
+ };
2316
+ }
2317
+ /**
2318
+ * Text insets in reference pixels. Defaults: top 8, right 10, bottom 4, left 10.
2319
+ *
2320
+ * This interface was referenced by `Presentation`'s JSON-Schema
2321
+ * via the `definition` "TableCellPadding".
2322
+ */
2323
+ interface TableCellPadding {
2324
+ top?: number;
2325
+ right?: number;
2326
+ bottom?: number;
2327
+ left?: number;
2328
+ }
2329
+ /**
2330
+ * One explicit cell border.
2331
+ *
2332
+ * This interface was referenced by `Presentation`'s JSON-Schema
2333
+ * via the `definition` "TableCellBorder".
2334
+ */
2335
+ interface TableCellBorder {
2336
+ /**
2337
+ * Explicit RGB or RGBA color. Eight-digit colors include alpha; #00000000 is transparent.
2338
+ */
2339
+ color: string;
2340
+ /**
2341
+ * Border width in reference pixels; 0 removes this edge.
2342
+ */
2343
+ width: number;
2344
+ /**
2345
+ * Default solid.
2346
+ */
2347
+ dash?: ("solid" | "dash" | "dot");
2348
+ }
2255
2349
  /**
2256
2350
  * Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting, and 'filename' when the rendered block should show a file label. A string value in a code field is shorthand for { "source": value }.
2257
2351
  *
@@ -2362,9 +2456,9 @@ interface Chart1 {
2362
2456
  */
2363
2457
  interface Table1 {
2364
2458
  /**
2365
- * Optional column labels rendered above table rows. Each label is a string or an array of TextRun values for inline formatting.
2459
+ * Optional column labels. Labels may be strings, rich runs or styled cell objects. Null is an empty label or a placeholder covered by a preceding column span.
2366
2460
  */
2367
- columns?: (string | TextRun[])[];
2461
+ columns?: (string | TextRun[] | StyledTableCell | null)[];
2368
2462
  /**
2369
2463
  * Two-dimensional table row data; each row aligns by index with columns when columns are supplied.
2370
2464
  */
@@ -1,5 +1,5 @@
1
1
  // src/generated/repo-readme.ts
2
- var repoReadmeRaw = '# Open Presentation Format (OPF)\n\n[![npm version](https://img.shields.io/npm/v/@openpresentation/opf?label=npm)](https://www.npmjs.com/package/@openpresentation/opf)\n[![npm downloads](https://img.shields.io/npm/dw/@openpresentation/opf)](https://www.npmjs.com/package/@openpresentation/opf)\n[![license](https://img.shields.io/npm/l/@openpresentation/opf)](./LICENSE)\n\nPublic npm package: [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf) (`npm install @openpresentation/opf`).\n\nOpen Presentation Format is the portable, human-readable JSON document format for slide decks.\n\nThis repository is the canonical home for the OPF **spec**, **JSON Schemas**, **catalog presets**, examples, generated developer types, local validation tooling, and planning docs for the future render/edit/convert toolkit. OpenPresentation publishes open-source code and documentation only; it does not provide hosted APIs, hosted rendering functions, queues, storage, authentication, jobs, previews, SLAs, telemetry, or managed infrastructure.\n\nFor AI agents, use the [OPF skill set](docs/agent-skills.md) for authoring, layout, presets, editing, export, and schema inspection.\n\nFor LLM authoring, start with [the authoring guide](docs/llm-authoring.md), [dynamic composition](docs/dynamic-composition.md), and [local ecosystem verification](docs/ecosystem-development.md).\n\n## File naming\n\nOpen Presentation Format documents are JSON files. Use `*.opf.json` for complete OPF presentation documents, for example `board-review.opf.json` or `deck.opf.json`.\n\nAvoid using bare `*.opf` for OPF JSON. The `.opf` extension is already used by other document and project formats, while `.opf.json` keeps the OPF identity and still makes the underlying JSON format clear to editors, validators, agents, and version-control tooling.\n\n## Naming and reuse\n\nThe format name is **Open Presentation Format**. The schemas, catalogs, packages, and local tooling in this repository are free and open source under the MIT license, so third-party tools may read, write, validate, render, convert, and describe support for Open Presentation Format without adopting any product-specific branding.\n\n## Why OPF\n\n`.pptx` is a zipped bundle of XML. Humans can\'t diff it, LLMs can\'t read or write it reliably, and git can\'t track it meaningfully. Every change looks like a binary blob.\n\nOPF is plain JSON. A human can open it in an editor. A model can read and write it without guessing at schema-by-example. Decks live in git like the rest of your work.\n\nThat\'s the shift that lets LLMs actually *author* decks. When the format stops fighting them, models can do the work that matters \u2014 narrative structure, persuasive framing, data analysis, chart recommendations, ruthless revision passes \u2014 instead of wrestling with `<p:sp>` tags.\n\nAnd they don\'t start from a blank canvas. [pptx.gallery](https://pptx.gallery) is the human-browsable reference for OPF catalog presets: layouts, themes, color schemes, font schemes, chart types, narratives, audiences, purposes, tones, languages, and social platforms.\n\n## Start in three steps\n\n1. **Install the format package.** `npm install @openpresentation/opf`.\n2. **Author and validate a deck.** Write a `*.opf.json` file \u2014 start from [`docs/how-opf-works.md`](./docs/how-opf-works.md) or copy [`examples/technical/full-feature-tour.opf.json`](./examples/technical/full-feature-tour.opf.json) \u2014 and run `validatePresentation` on it.\n3. **Build on it.** Browse presets at [pptx.gallery](https://pptx.gallery), pin the schemas in your pipeline, and track the [toolkit libraries](#toolkit-libraries) for the render and convert libraries.\n\nYour deck lives in git from the first commit. Nothing in these steps calls a hosted service, and nothing ever will \u2014 that boundary is the point.\n\n## JavaScript and TypeScript\n\nThe canonical JavaScript/TypeScript package is published at [`packages/javascript`](./packages/javascript) as [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf). The schema is pre-stable (0.x \u2014 expect breaking changes between minor versions until 1.0). Its responsibility is local and format-level only:\n\n- export the canonical schemas from [`spec/`](./spec)\n- export bundled catalog records from [`spec/`](./spec)\n- export a typed raw spec file manifest for package-addressable `spec/` content\n- generate TypeScript types, with `Presentation` as the top-level type\n- validate OPF JSON and catalog records locally\n\nIt does not render `.pptx`, parse `.pptx`, generate content with AI, fetch remote catalogs, call hosted APIs, or provide managed services. Render/edit/convert packages live in separate MIT repos that depend on `@openpresentation/opf`. The format package also exposes pure composition geometry so those packages share layout behavior.\n\n## Toolkit libraries\n\nThe local toolkit lives in sibling repositories. See [ecosystem development](docs/ecosystem-development.md) for coordinated builds and verification, and [dynamic composition](docs/dynamic-composition.md) for portable layout rules.\n\n| Repo | Role | Boundary |\n|---|---|---|\n| `opf-render` | OPF to SVG/PNG/PDF | Local and embeddable rendering library |\n| `opf-editor` | WYSIWYG bindings/components | Headless editor primitives plus optional UI components |\n| `opf-pptx` | OPF to PPTX and PPTX to OPF | Pure local import/export library for browser and server use where supported |\n\nThese repos provide OSS primitives only. Downstream applications own hosting, auth, storage, collaboration, queues, previews, analytics, support, and workflow UX.\n\n## Usage\n\nInstall from npm:\n\n```sh\npnpm add @openpresentation/opf\n# or: npm install @openpresentation/opf\n```\n\nTo work on the package itself, clone this repo and build the workspace:\n\n```sh\npnpm install\npnpm build\n```\n\nUse the format package from JavaScript or TypeScript:\n\n```ts\nimport {\n presentation,\n audiences,\n purposes,\n tones,\n validatePresentation,\n} from "@openpresentation/opf";\n\nimport type { Presentation } from "@openpresentation/opf";\n\nconst deck: Presentation = {\n name: "Quarterly Review",\n slides: [{ title: "Quarterly Review", items: ["Revenue", "Product", "Hiring"] }],\n};\n\nconst result = validatePresentation(deck);\nconsole.log(result.valid); // schema correctness\nconsole.log(result.warnings); // advisory issues, e.g. unknown catalog ids\nconsole.log(audiences.length, purposes.length, tones.length);\n```\n\nUse focused imports when you only need one surface:\n\n```ts\nimport { presentation } from "@openpresentation/opf/schemas";\nimport { audiences, purposes } from "@openpresentation/opf/catalogs";\nimport { specFileEntries } from "@openpresentation/opf/spec-files";\nimport { validate } from "@openpresentation/opf/validator";\nimport type { Presentation } from "@openpresentation/opf/types";\n```\n\nUse raw JSON when an engine or resolver needs package-addressable files:\n\n```ts\nimport presentationSchema from "@openpresentation/opf/spec/schemas/opf.schema.json" with {\n type: "json",\n};\n```\n\nUse the [installable OPF CLI](./packages/cli/README.md) to create, validate, and edit files locally:\n\n```sh\npnpm --filter @openpresentation/cli build\nnode packages/cli/dist/index.js create deck.opf.json --title "Decision brief"\nnode packages/cli/dist/index.js validate deck.opf.json\nnode packages/cli/dist/index.js edit deck.opf.json --patch changes.json --in-place\n```\n\nSee [CSV and JSON data import](./docs/data-import.md) for editable tables and charts in the editor, CLI, and package API.\n\n## Layout\n\n| Path | Contents |\n|---|---|\n| [`spec/schemas/opf.schema.json`](./spec/schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents. |\n| [`docs/how-opf-works.md`](./docs/how-opf-works.md) | Conceptual introduction: the document model, content shapes, catalog resolution, and the validation philosophy. Start here. |\n| [`docs/design-resolution.md`](./docs/design-resolution.md) | The design precedence algorithm (slide design \u2192 deck design \u2192 resolved theme \u2192 engine defaults) with worked examples. |\n| [`docs/schema-reference.md`](./docs/schema-reference.md) | Author-facing reference for top-level OPF fields and every presentation schema `$defs` object/type. |\n| [`docs/catalog-schema-reference.md`](./docs/catalog-schema-reference.md) | Author-facing reference for every companion catalog schema. |\n| [`docs/content-payloads.md`](./docs/content-payloads.md) | Author-facing notes for slide and region content payloads, including chart and table object shapes. |\n| [`docs/examples.md`](./docs/examples.md) | Guide to the expanded scenario-oriented examples under `examples/gallery/`. |\n| [`docs/live-editor.md`](./docs/live-editor.md) | Browser canvas, live OPF editing, font loading, installable preview packages, and current fidelity limits. |\n| [`docs/release-process.md`](./docs/release-process.md) | Maintainer runbook for tagging, trusted npm publishing, verification, and GitHub release notes. |\n| [`spec/schemas/*.schema.json`](./spec/schemas) | Companion schemas for catalog records and sub-objects. |\n| [`spec/catalogs/<catalog-kind>/`](./spec/catalogs) | Canonical bundled catalog records. |\n| [`spec/openapi.yaml`](./spec/openapi.yaml) | Optional reference OpenAPI contract for downstream services that choose to expose OPF over HTTP. OpenPresentation does not host this API. |\n| [`examples/technical/`](./examples/technical) | Focused OPF fixtures for validator, renderer, catalog-resolution, design, content-payload, and region behavior. |\n| [`examples/gallery/`](./examples/gallery) | Broader OPF example decks organized by industry, function, education, government, presentation type, international, and design/media scenarios. |\n| [`packages/javascript/`](./packages/javascript) | Public pre-stable source for `@openpresentation/opf`. |\n| [`packages/cli/`](./packages/cli) | Installable local CLI for creating, validating, editing, and inspecting OPF. |\n| [`legacy/`](./legacy) | Tombstone for service-specific clients, CLIs, tool integrations, and workflows removed from the OpenPresentation OSS repo. |\n\n## OpenPresentation Boundary\n\nOpenPresentation defines the format, bundled presets, local validation, examples, docs, and planned local render/edit/convert libraries. It does not provide hosted functions or managed product surfaces.\n\nFuture non-JavaScript OPF packages should follow the same local-first boundary: Python and Go packages should expose schemas, types/models, catalogs, validation, and package-addressable assets. Future toolkit packages should expose embeddable library APIs with no required network calls, hosted callbacks, hidden telemetry, or managed infrastructure assumptions.\n\nThe published JavaScript package copies package-addressable OPF schemas, catalogs, reference assets, and the optional reference `spec/openapi.yaml` from `spec/`. It intentionally remains `@openpresentation/opf` instead of introducing a separate `@openpresentation/opf-spec` package so downstream imports can advance by semver-pinning one canonical package.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n';
2
+ var repoReadmeRaw = '# Open Presentation Format (OPF)\n\n[![npm version](https://img.shields.io/npm/v/@openpresentation/opf?label=npm)](https://www.npmjs.com/package/@openpresentation/opf)\n[![npm downloads](https://img.shields.io/npm/dw/@openpresentation/opf)](https://www.npmjs.com/package/@openpresentation/opf)\n[![license](https://img.shields.io/npm/l/@openpresentation/opf)](./LICENSE)\n\nPublic npm package: [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf) (`npm install @openpresentation/opf`).\n\nOpen Presentation Format is the portable, human-readable JSON document format for slide decks.\n\nThis repository is the canonical home for the OPF **spec**, **JSON Schemas**, **catalog presets**, examples, generated developer types, local validation tooling, and planning docs for the future render/edit/convert toolkit. OpenPresentation publishes open-source code and documentation only; it does not provide hosted APIs, hosted rendering functions, queues, storage, authentication, jobs, previews, SLAs, telemetry, or managed infrastructure.\n\nFor AI agents, use the [OPF skill set](docs/agent-skills.md) for authoring, layout, presets, editing, export, and schema inspection.\n\nCLI 0.5.0 installs all six skills into your project with `npx @openpresentation/cli@latest skills install`. It uses local copies, preserves existing instructions and refuses to overwrite customized skills. See the [installation and update guide](docs/agent-skills.md) for personal or agent-specific targets and pre-release testing.\n\nFor LLM authoring, start with [the authoring guide](docs/llm-authoring.md), [dynamic composition](docs/dynamic-composition.md), and [local ecosystem verification](docs/ecosystem-development.md).\n\n## File naming\n\nOpen Presentation Format documents are JSON files. Use `*.opf.json` for complete OPF presentation documents, for example `board-review.opf.json` or `deck.opf.json`.\n\nAvoid using bare `*.opf` for OPF JSON. The `.opf` extension is already used by other document and project formats, while `.opf.json` keeps the OPF identity and still makes the underlying JSON format clear to editors, validators, agents, and version-control tooling.\n\n## Naming and reuse\n\nThe format name is **Open Presentation Format**. The schemas, catalogs, packages, and local tooling in this repository are free and open source under the MIT license, so third-party tools may read, write, validate, render, convert, and describe support for Open Presentation Format without adopting any product-specific branding.\n\n## Why OPF\n\n`.pptx` is a zipped bundle of XML. Humans can\'t diff it, LLMs can\'t read or write it reliably, and git can\'t track it meaningfully. Every change looks like a binary blob.\n\nOPF is plain JSON. A human can open it in an editor. A model can read and write it without guessing at schema-by-example. Decks live in git like the rest of your work.\n\nThat\'s the shift that lets LLMs actually *author* decks. When the format stops fighting them, models can do the work that matters \u2014 narrative structure, persuasive framing, data analysis, chart recommendations, ruthless revision passes \u2014 instead of wrestling with `<p:sp>` tags.\n\nAnd they don\'t start from a blank canvas. [pptx.gallery](https://pptx.gallery) is the human-browsable reference for OPF catalog presets: layouts, themes, color schemes, font schemes, chart types, narratives, audiences, purposes, tones, languages, and social platforms.\n\n## Start in three steps\n\n1. **Install the format package.** `npm install @openpresentation/opf`.\n2. **Author and validate a deck.** Write a `*.opf.json` file \u2014 start from [`docs/how-opf-works.md`](./docs/how-opf-works.md) or copy [`examples/technical/full-feature-tour.opf.json`](./examples/technical/full-feature-tour.opf.json) \u2014 and run `validatePresentation` on it.\n3. **Build on it.** Browse presets at [pptx.gallery](https://pptx.gallery), pin the schemas in your pipeline, and track the [toolkit libraries](#toolkit-libraries) for the render and convert libraries.\n\nYour deck lives in git from the first commit. Nothing in these steps calls a hosted service, and nothing ever will \u2014 that boundary is the point.\n\n## JavaScript and TypeScript\n\nThe canonical JavaScript/TypeScript package is published at [`packages/javascript`](./packages/javascript) as [`@openpresentation/opf`](https://www.npmjs.com/package/@openpresentation/opf). The schema is pre-stable (0.x \u2014 expect breaking changes between minor versions until 1.0). Its responsibility is local and format-level only:\n\n- export the canonical schemas from [`spec/`](./spec)\n- export bundled catalog records from [`spec/`](./spec)\n- export a typed raw spec file manifest for package-addressable `spec/` content\n- generate TypeScript types, with `Presentation` as the top-level type\n- validate OPF JSON and catalog records locally\n\nIt does not render `.pptx`, parse `.pptx`, generate content with AI, fetch remote catalogs, call hosted APIs, or provide managed services. Render/edit/convert packages live in separate MIT repos that depend on `@openpresentation/opf`. The format package also exposes pure composition geometry so those packages share layout behavior.\n\n## Toolkit libraries\n\nThe local toolkit lives in sibling repositories. See [ecosystem development](docs/ecosystem-development.md) for coordinated builds and verification, and [dynamic composition](docs/dynamic-composition.md) for portable layout rules.\n\n| Repo | Role | Boundary |\n|---|---|---|\n| `opf-render` | OPF to SVG/PNG/PDF | Local and embeddable rendering library |\n| `opf-editor` | WYSIWYG bindings/components | Headless editor primitives plus optional UI components |\n| `opf-pptx` | OPF to PPTX and PPTX to OPF | Pure local import/export library for browser and server use where supported |\n\nThese repos provide OSS primitives only. Downstream applications own hosting, auth, storage, collaboration, queues, previews, analytics, support, and workflow UX.\n\n## Usage\n\nInstall from npm:\n\n```sh\npnpm add @openpresentation/opf\n# or: npm install @openpresentation/opf\n```\n\nTo work on the package itself, clone this repo and build the workspace:\n\n```sh\npnpm install\npnpm build\n```\n\nUse the format package from JavaScript or TypeScript:\n\n```ts\nimport {\n presentation,\n audiences,\n purposes,\n tones,\n validatePresentation,\n} from "@openpresentation/opf";\n\nimport type { Presentation } from "@openpresentation/opf";\n\nconst deck: Presentation = {\n name: "Quarterly Review",\n slides: [{ title: "Quarterly Review", items: ["Revenue", "Product", "Hiring"] }],\n};\n\nconst result = validatePresentation(deck);\nconsole.log(result.valid); // schema correctness\nconsole.log(result.warnings); // advisory issues, e.g. unknown catalog ids\nconsole.log(audiences.length, purposes.length, tones.length);\n```\n\nUse focused imports when you only need one surface:\n\n```ts\nimport { presentation } from "@openpresentation/opf/schemas";\nimport { audiences, purposes } from "@openpresentation/opf/catalogs";\nimport { specFileEntries } from "@openpresentation/opf/spec-files";\nimport { validate } from "@openpresentation/opf/validator";\nimport type { Presentation } from "@openpresentation/opf/types";\n```\n\nUse raw JSON when an engine or resolver needs package-addressable files:\n\n```ts\nimport presentationSchema from "@openpresentation/opf/spec/schemas/opf.schema.json" with {\n type: "json",\n};\n```\n\nUse the [installable OPF CLI](./packages/cli/README.md) to create, validate, and edit files locally:\n\n```sh\npnpm --filter @openpresentation/cli build\nnode packages/cli/dist/index.js create deck.opf.json --title "Decision brief"\nnode packages/cli/dist/index.js validate deck.opf.json\nnode packages/cli/dist/index.js edit deck.opf.json --patch changes.json --in-place\n```\n\nSee [CSV and JSON data import](./docs/data-import.md) for editable tables and charts in the editor, CLI, and package API.\n\n## Layout\n\n| Path | Contents |\n|---|---|\n| [`spec/schemas/opf.schema.json`](./spec/schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents. |\n| [`docs/how-opf-works.md`](./docs/how-opf-works.md) | Conceptual introduction: the document model, content shapes, catalog resolution, and the validation philosophy. Start here. |\n| [`docs/design-resolution.md`](./docs/design-resolution.md) | The design precedence algorithm (slide design \u2192 deck design \u2192 resolved theme \u2192 engine defaults) with worked examples. |\n| [`docs/schema-reference.md`](./docs/schema-reference.md) | Author-facing reference for top-level OPF fields and every presentation schema `$defs` object/type. |\n| [`docs/catalog-schema-reference.md`](./docs/catalog-schema-reference.md) | Author-facing reference for every companion catalog schema. |\n| [`docs/content-payloads.md`](./docs/content-payloads.md) | Author-facing notes for slide and region content payloads, including chart and table object shapes. |\n| [`docs/examples.md`](./docs/examples.md) | Guide to the expanded scenario-oriented examples under `examples/gallery/`. |\n| [`docs/live-editor.md`](./docs/live-editor.md) | Browser canvas, live OPF editing, font loading, installable preview packages, and current fidelity limits. |\n| [`docs/release-process.md`](./docs/release-process.md) | Maintainer runbook for tagging, trusted npm publishing, verification, and GitHub release notes. |\n| [`spec/schemas/*.schema.json`](./spec/schemas) | Companion schemas for catalog records and sub-objects. |\n| [`spec/catalogs/<catalog-kind>/`](./spec/catalogs) | Canonical bundled catalog records. |\n| [`spec/openapi.yaml`](./spec/openapi.yaml) | Optional reference OpenAPI contract for downstream services that choose to expose OPF over HTTP. OpenPresentation does not host this API. |\n| [`examples/technical/`](./examples/technical) | Focused OPF fixtures for validator, renderer, catalog-resolution, design, content-payload, and region behavior. |\n| [`examples/gallery/`](./examples/gallery) | Broader OPF example decks organized by industry, function, education, government, presentation type, international, and design/media scenarios. |\n| [`packages/javascript/`](./packages/javascript) | Public pre-stable source for `@openpresentation/opf`. |\n| [`packages/cli/`](./packages/cli) | Installable local CLI for creating, validating, editing, and inspecting OPF. |\n| [`legacy/`](./legacy) | Tombstone for service-specific clients, CLIs, tool integrations, and workflows removed from the OpenPresentation OSS repo. |\n\n## OpenPresentation Boundary\n\nOpenPresentation defines the format, bundled presets, local validation, examples, docs, and planned local render/edit/convert libraries. It does not provide hosted functions or managed product surfaces.\n\nFuture non-JavaScript OPF packages should follow the same local-first boundary: Python and Go packages should expose schemas, types/models, catalogs, validation, and package-addressable assets. Future toolkit packages should expose embeddable library APIs with no required network calls, hosted callbacks, hidden telemetry, or managed infrastructure assumptions.\n\nThe published JavaScript package copies package-addressable OPF schemas, catalogs, reference assets, and the optional reference `spec/openapi.yaml` from `spec/`. It intentionally remains `@openpresentation/opf` instead of introducing a separate `@openpresentation/opf-spec` package so downstream imports can advance by semver-pinning one canonical package.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n';
3
3
 
4
4
  // src/repo-readme.ts
5
5
  var repoReadme = repoReadmeRaw;
@@ -66,6 +66,11 @@ declare const presentation: JsonSchemaDocument & {
66
66
  readonly "ChartDataSource": JsonObject;
67
67
  readonly "ChartDataCell": JsonObject;
68
68
  readonly "TableCell": JsonObject;
69
+ readonly "TableCellValue": JsonObject;
70
+ readonly "StyledTableCell": JsonObject;
71
+ readonly "TableCellStyle": JsonObject;
72
+ readonly "TableCellPadding": JsonObject;
73
+ readonly "TableCellBorder": JsonObject;
69
74
  readonly "Catalogs": JsonObject;
70
75
  readonly "CatalogEntry": JsonObject;
71
76
  readonly "CatalogSource": JsonObject;
@@ -154,6 +159,11 @@ declare const schemas: {
154
159
  readonly "ChartDataSource": JsonObject;
155
160
  readonly "ChartDataCell": JsonObject;
156
161
  readonly "TableCell": JsonObject;
162
+ readonly "TableCellValue": JsonObject;
163
+ readonly "StyledTableCell": JsonObject;
164
+ readonly "TableCellStyle": JsonObject;
165
+ readonly "TableCellPadding": JsonObject;
166
+ readonly "TableCellBorder": JsonObject;
157
167
  readonly "Catalogs": JsonObject;
158
168
  readonly "CatalogEntry": JsonObject;
159
169
  readonly "CatalogSource": JsonObject;
package/dist/schemas.d.ts CHANGED
@@ -1 +1 @@
1
- export { S as SchemaEntry, a as SchemaName, b as audience, c as chartType, d as colorScheme, f as fontScheme, l as language, e as layout, n as narrative, p as presentation, g as purpose, s as schemaEntries, h as schemaNames, i as schemas, j as socialPlatform, t as theme, k as tone } from './schemas-C1DxapX2.js';
1
+ export { S as SchemaEntry, a as SchemaName, b as audience, c as chartType, d as colorScheme, f as fontScheme, l as language, e as layout, n as narrative, p as presentation, g as purpose, s as schemaEntries, h as schemaNames, i as schemas, j as socialPlatform, t as theme, k as tone } from './schemas--QRVBhU1.js';
package/dist/schemas.js CHANGED
@@ -1 +1 @@
1
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-KSN6RQG2.js';
1
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-GQSK3T7X.js';
@@ -2484,22 +2484,66 @@
2484
2484
  "type": "object",
2485
2485
  "description": "Table content. Columns are optional; rows are the only required field.",
2486
2486
  "additionalProperties": false,
2487
- "required": ["rows"],
2487
+ "required": [
2488
+ "rows"
2489
+ ],
2488
2490
  "properties": {
2489
2491
  "columns": {
2490
2492
  "type": "array",
2491
- "items": { "oneOf": [{ "type": "string" }, { "type": "array", "items": { "$ref": "#/$defs/TextRun" } }] },
2492
- "description": "Optional column labels rendered above table rows. Each label is a string or an array of TextRun values for inline formatting.",
2493
- "examples": [["Region", "Q3 Revenue", "Q4 Revenue", "YoY %"]]
2493
+ "items": {
2494
+ "oneOf": [
2495
+ {
2496
+ "type": "string"
2497
+ },
2498
+ {
2499
+ "type": "array",
2500
+ "items": {
2501
+ "$ref": "#/$defs/TextRun"
2502
+ }
2503
+ },
2504
+ {
2505
+ "$ref": "#/$defs/StyledTableCell"
2506
+ },
2507
+ {
2508
+ "type": "null"
2509
+ }
2510
+ ]
2511
+ },
2512
+ "description": "Optional column labels. Labels may be strings, rich runs or styled cell objects. Null is an empty label or a placeholder covered by a preceding column span.",
2513
+ "examples": [
2514
+ [
2515
+ "Region",
2516
+ "Q3 Revenue",
2517
+ "Q4 Revenue",
2518
+ "YoY %"
2519
+ ]
2520
+ ]
2494
2521
  },
2495
2522
  "rows": {
2496
2523
  "type": "array",
2497
2524
  "items": {
2498
2525
  "type": "array",
2499
- "items": { "$ref": "#/$defs/TableCell" }
2526
+ "items": {
2527
+ "$ref": "#/$defs/TableCell"
2528
+ }
2500
2529
  },
2501
2530
  "description": "Two-dimensional table row data; each row aligns by index with columns when columns are supplied.",
2502
- "examples": [[["North America", 12.4, 18.1, "46%"], ["EMEA", 8.2, 11.5, "40%"]]]
2531
+ "examples": [
2532
+ [
2533
+ [
2534
+ "North America",
2535
+ 12.4,
2536
+ 18.1,
2537
+ "46%"
2538
+ ],
2539
+ [
2540
+ "EMEA",
2541
+ 8.2,
2542
+ 11.5,
2543
+ "40%"
2544
+ ]
2545
+ ]
2546
+ ]
2503
2547
  }
2504
2548
  }
2505
2549
  },
@@ -2568,13 +2612,179 @@
2568
2612
  },
2569
2613
  "TableCell": {
2570
2614
  "oneOf": [
2571
- { "type": "string" },
2572
- { "type": "number" },
2573
- { "type": "boolean" },
2574
- { "type": "null" },
2575
- { "type": "array", "items": { "$ref": "#/$defs/TextRun" } }
2615
+ {
2616
+ "$ref": "#/$defs/TableCellValue"
2617
+ },
2618
+ {
2619
+ "$ref": "#/$defs/StyledTableCell"
2620
+ }
2621
+ ],
2622
+ "description": "A scalar, rich-run array, or styled/spanning cell object. Existing scalar and rich forms remain valid."
2623
+ },
2624
+ "TableCellValue": {
2625
+ "oneOf": [
2626
+ {
2627
+ "type": "string"
2628
+ },
2629
+ {
2630
+ "type": "number"
2631
+ },
2632
+ {
2633
+ "type": "boolean"
2634
+ },
2635
+ {
2636
+ "type": "null"
2637
+ },
2638
+ {
2639
+ "type": "array",
2640
+ "items": {
2641
+ "$ref": "#/$defs/TextRun"
2642
+ }
2643
+ }
2644
+ ],
2645
+ "description": "A scalar table value or canonical rich text runs, without cell decoration or geometry."
2646
+ },
2647
+ "StyledTableCell": {
2648
+ "type": "object",
2649
+ "additionalProperties": false,
2650
+ "required": [
2651
+ "value"
2652
+ ],
2653
+ "properties": {
2654
+ "value": {
2655
+ "$ref": "#/$defs/TableCellValue",
2656
+ "description": "Editable cell content; styling and spans do not change its scalar type or rich runs."
2657
+ },
2658
+ "style": {
2659
+ "$ref": "#/$defs/TableCellStyle"
2660
+ },
2661
+ "colSpan": {
2662
+ "type": "integer",
2663
+ "minimum": 1,
2664
+ "description": "Number of grid columns covered, starting at this cell. Covered positions must contain null. Default 1."
2665
+ },
2666
+ "rowSpan": {
2667
+ "type": "integer",
2668
+ "minimum": 1,
2669
+ "description": "Number of grid rows covered, starting at this cell. Covered positions must contain null. Header cells cannot span into body rows. Default 1."
2670
+ }
2671
+ },
2672
+ "description": "A cell with explicit visual style or merged geometry. Its position remains its array column index; use null placeholders for every covered grid position."
2673
+ },
2674
+ "TableCellStyle": {
2675
+ "type": "object",
2676
+ "additionalProperties": false,
2677
+ "properties": {
2678
+ "fill": {
2679
+ "type": "string",
2680
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
2681
+ "description": "Explicit RGB or RGBA color. Eight-digit colors include alpha; #00000000 is transparent."
2682
+ },
2683
+ "color": {
2684
+ "type": "string",
2685
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
2686
+ "description": "Default text color, overridden by individual rich run colors."
2687
+ },
2688
+ "align": {
2689
+ "type": "string",
2690
+ "enum": [
2691
+ "left",
2692
+ "center",
2693
+ "right"
2694
+ ],
2695
+ "description": "Horizontal text alignment inside the cell."
2696
+ },
2697
+ "verticalAlign": {
2698
+ "type": "string",
2699
+ "enum": [
2700
+ "top",
2701
+ "middle",
2702
+ "bottom"
2703
+ ],
2704
+ "description": "Vertical alignment inside the padded cell box."
2705
+ },
2706
+ "padding": {
2707
+ "$ref": "#/$defs/TableCellPadding"
2708
+ },
2709
+ "borders": {
2710
+ "type": "object",
2711
+ "additionalProperties": false,
2712
+ "properties": {
2713
+ "top": {
2714
+ "$ref": "#/$defs/TableCellBorder"
2715
+ },
2716
+ "right": {
2717
+ "$ref": "#/$defs/TableCellBorder"
2718
+ },
2719
+ "bottom": {
2720
+ "$ref": "#/$defs/TableCellBorder"
2721
+ },
2722
+ "left": {
2723
+ "$ref": "#/$defs/TableCellBorder"
2724
+ }
2725
+ },
2726
+ "description": "Independent cell edges. Omitted edges retain the table theme border; width 0 removes an edge."
2727
+ }
2728
+ },
2729
+ "description": "Cell appearance. Sizes use reference pixels at a 720-pixel canvas short edge and scale with the slide."
2730
+ },
2731
+ "TableCellPadding": {
2732
+ "type": "object",
2733
+ "additionalProperties": false,
2734
+ "properties": {
2735
+ "top": {
2736
+ "type": "number",
2737
+ "minimum": 0,
2738
+ "maximum": 200
2739
+ },
2740
+ "right": {
2741
+ "type": "number",
2742
+ "minimum": 0,
2743
+ "maximum": 200
2744
+ },
2745
+ "bottom": {
2746
+ "type": "number",
2747
+ "minimum": 0,
2748
+ "maximum": 200
2749
+ },
2750
+ "left": {
2751
+ "type": "number",
2752
+ "minimum": 0,
2753
+ "maximum": 200
2754
+ }
2755
+ },
2756
+ "description": "Text insets in reference pixels. Defaults: top 8, right 10, bottom 4, left 10."
2757
+ },
2758
+ "TableCellBorder": {
2759
+ "type": "object",
2760
+ "additionalProperties": false,
2761
+ "required": [
2762
+ "color",
2763
+ "width"
2576
2764
  ],
2577
- "description": "A cell in table content. Scalar values keep their text representation; TextRun arrays preserve inline formatting and use mixed-style text measurement."
2765
+ "properties": {
2766
+ "color": {
2767
+ "type": "string",
2768
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
2769
+ "description": "Explicit RGB or RGBA color. Eight-digit colors include alpha; #00000000 is transparent."
2770
+ },
2771
+ "width": {
2772
+ "type": "number",
2773
+ "minimum": 0,
2774
+ "maximum": 32,
2775
+ "description": "Border width in reference pixels; 0 removes this edge."
2776
+ },
2777
+ "dash": {
2778
+ "type": "string",
2779
+ "enum": [
2780
+ "solid",
2781
+ "dash",
2782
+ "dot"
2783
+ ],
2784
+ "description": "Default solid."
2785
+ }
2786
+ },
2787
+ "description": "One explicit cell border."
2578
2788
  },
2579
2789
  "Catalogs": {
2580
2790
  "type": "object",
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { P as Presentation } from './presentation-UpSHz0aK.js';
2
- export { A as Audience, c as CatalogKind, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone } from './catalogs-x1oFFQnd.js';
3
- export { a as SchemaName } from './schemas-C1DxapX2.js';
1
+ export { P as Presentation } from './presentation-BMTdX6O1.js';
2
+ export { A as Audience, c as CatalogKind, e as ChartType, f as ColorScheme, F as FontScheme, L as Language, g as Layout, N as Narrative, P as Purpose, S as SocialPlatform, T as Theme, h as Tone } from './catalogs-BnnkUX9O.js';
3
+ export { a as SchemaName } from './schemas--QRVBhU1.js';
4
4
  export { ValidationIssue, ValidationResult } from './validator.js';
@@ -1,6 +1,6 @@
1
- import { P as Presentation } from './presentation-UpSHz0aK.js';
2
- import { c as CatalogKind } from './catalogs-x1oFFQnd.js';
3
- import { a as SchemaName, J as JsonSchema } from './schemas-C1DxapX2.js';
1
+ import { P as Presentation } from './presentation-BMTdX6O1.js';
2
+ import { c as CatalogKind } from './catalogs-BnnkUX9O.js';
3
+ import { a as SchemaName, J as JsonSchema } from './schemas--QRVBhU1.js';
4
4
 
5
5
  interface ValidationIssue {
6
6
  path: string;
package/dist/validator.js CHANGED
@@ -1,4 +1,4 @@
1
- export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-23MXJL2K.js';
2
- import './chunk-C7GKRLI6.js';
3
- import './chunk-KSN6RQG2.js';
1
+ export { OPFValidationError, assertValid, assertValidCatalogRecord, assertValidPresentation, validate, validateCatalogRecord, validatePresentation } from './chunk-HIY26FJV.js';
2
+ import './chunk-NEQAPMS2.js';
3
+ import './chunk-GQSK3T7X.js';
4
4
  import './chunk-TWMRZ43O.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openpresentation/opf",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Canonical Open Presentation Format schemas, catalogs, TypeScript types, and local validation.",
5
5
  "license": "MIT",
6
6
  "author": "Open Presentation",
@@ -109,7 +109,7 @@
109
109
  },
110
110
  "devDependencies": {
111
111
  "@types/node": "^20.19.0",
112
- "json-schema-to-typescript": "^15.0.4",
112
+ "json-schema-to-typescript": "^16.0.0",
113
113
  "tsup": "^8.5.1",
114
114
  "typescript": "^5.9.3"
115
115
  }