@openpresentation/opf 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +74 -3
  3. package/dist/catalogs-x1oFFQnd.d.ts +1198 -0
  4. package/dist/catalogs.d.ts +2 -32413
  5. package/dist/catalogs.js +1 -18505
  6. package/dist/chunk-75N5I6M4.js +229 -0
  7. package/dist/chunk-EMTMQRX4.js +1007 -0
  8. package/dist/chunk-GCXOU5MZ.js +6515 -0
  9. package/dist/chunk-HJNJHB5H.js +454 -0
  10. package/dist/chunk-OZULJBSG.js +3368 -0
  11. package/dist/chunk-PIQXLBBJ.js +445 -0
  12. package/dist/chunk-SOSOBKQ2.js +145 -0
  13. package/dist/chunk-TWMRZ43O.js +18576 -0
  14. package/dist/composition.d.ts +190 -0
  15. package/dist/composition.js +1 -0
  16. package/dist/data.d.ts +32 -0
  17. package/dist/data.js +1 -0
  18. package/dist/docs.d.ts +17 -0
  19. package/dist/docs.js +120 -0
  20. package/dist/examples.d.ts +43 -0
  21. package/dist/examples.js +44828 -0
  22. package/dist/index.d.ts +7 -4
  23. package/dist/index.js +8 -29015
  24. package/dist/pagination.d.ts +52 -0
  25. package/dist/pagination.js +5 -0
  26. package/dist/{validator-MwlR2F56.d.ts → presentation-BjP4yTQ1.d.ts} +87 -40
  27. package/dist/previews.js +1 -447
  28. package/dist/repo-readme.d.ts +4 -0
  29. package/dist/repo-readme.js +7 -0
  30. package/dist/schemas-C1DxapX2.d.ts +206 -0
  31. package/dist/schemas.d.ts +1 -12373
  32. package/dist/schemas.js +1 -6275
  33. package/dist/spec/README.md +57 -0
  34. package/dist/spec/catalogs/audiences/engineering-team.json +1 -1
  35. package/dist/spec/catalogs/audiences/index.json +1 -1
  36. package/dist/spec/catalogs/chart-types/index.json +1 -1
  37. package/dist/spec/catalogs/color-schemes/index.json +1 -1
  38. package/dist/spec/catalogs/font-schemes/index.json +1 -1
  39. package/dist/spec/catalogs/languages/index.json +1 -1
  40. package/dist/spec/catalogs/layouts/chart-1x.json +4 -1
  41. package/dist/spec/catalogs/layouts/chart-2x.json +5 -1
  42. package/dist/spec/catalogs/layouts/chart-3x.json +5 -1
  43. package/dist/spec/catalogs/layouts/code-1x.json +4 -1
  44. package/dist/spec/catalogs/layouts/extract/canonical.json +94 -21
  45. package/dist/spec/catalogs/layouts/image-1x.json +4 -1
  46. package/dist/spec/catalogs/layouts/image-2x.json +5 -1
  47. package/dist/spec/catalogs/layouts/image-3x.json +5 -1
  48. package/dist/spec/catalogs/layouts/index.json +1 -1
  49. package/dist/spec/catalogs/layouts/list-2x.json +4 -1
  50. package/dist/spec/catalogs/layouts/list-3x.json +4 -1
  51. package/dist/spec/catalogs/layouts/list-4x.json +5 -1
  52. package/dist/spec/catalogs/layouts/list-5x.json +5 -1
  53. package/dist/spec/catalogs/layouts/list-6x.json +5 -1
  54. package/dist/spec/catalogs/layouts/media-1x.json +4 -1
  55. package/dist/spec/catalogs/layouts/number-2x.json +4 -1
  56. package/dist/spec/catalogs/layouts/number-3x.json +4 -1
  57. package/dist/spec/catalogs/layouts/number-4x.json +5 -1
  58. package/dist/spec/catalogs/layouts/number-5x.json +5 -1
  59. package/dist/spec/catalogs/layouts/number-6x.json +5 -1
  60. package/dist/spec/catalogs/layouts/table-1x.json +4 -1
  61. package/dist/spec/catalogs/layouts/text-2x.json +4 -1
  62. package/dist/spec/catalogs/layouts/text-3x.json +4 -1
  63. package/dist/spec/catalogs/narratives/index.json +2 -2
  64. package/dist/spec/catalogs/purposes/index.json +1 -1
  65. package/dist/spec/catalogs/social-platforms/index.json +1 -1
  66. package/dist/spec/catalogs/themes/index.json +1 -1
  67. package/dist/spec/catalogs/tones/casual.json +1 -1
  68. package/dist/spec/catalogs/tones/conversational.json +1 -1
  69. package/dist/spec/catalogs/tones/index.json +1 -1
  70. package/dist/spec/catalogs/tones/technical.json +1 -1
  71. package/dist/spec/openapi.yaml +66 -26
  72. package/dist/spec/previews/layouts/index.json +71 -71
  73. package/dist/spec/schemas/catalog-index.schema.json +53 -0
  74. package/dist/spec/schemas/layout-preview-index.schema.json +54 -0
  75. package/dist/spec/schemas/layout.schema.json +63 -0
  76. package/dist/spec/schemas/opf.schema.json +182 -3
  77. package/dist/spec-files.d.ts +14 -2386
  78. package/dist/spec-files.js +1 -3349
  79. package/dist/types.d.ts +4 -1102
  80. package/dist/types.js +0 -2
  81. package/dist/validator.d.ts +33 -3
  82. package/dist/validator.js +4 -6712
  83. package/package.json +29 -4
  84. package/dist/catalogs.js.map +0 -1
  85. package/dist/index.js.map +0 -1
  86. package/dist/previews.js.map +0 -1
  87. package/dist/schemas.js.map +0 -1
  88. package/dist/spec-files.js.map +0 -1
  89. package/dist/types.js.map +0 -1
  90. package/dist/validator.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ # spec/
2
+
3
+ Canonical, package-addressable OPF spec content. Everything in this directory ships inside `@openpresentation/opf` and is importable as `@openpresentation/opf/spec/<path>`.
4
+
5
+ New to the format? Read [`docs/how-opf-works.md`](../docs/how-opf-works.md) first — this directory is the machine-readable half of that story.
6
+
7
+ ## Layout
8
+
9
+ | Path | Contents |
10
+ |---|---|
11
+ | [`schemas/opf.schema.json`](./schemas/opf.schema.json) | Canonical JSON Schema for top-level OPF `Presentation` documents (`$id: https://openpresentation.org/schema/opf/v1`). |
12
+ | [`schemas/*.schema.json`](./schemas) | Companion schemas for catalog records. Each has a stable `$id` of the form `https://openpresentation.org/schema/opf-<kind>/v1` (e.g. `opf-narrative`, `opf-theme`, `opf-chart-type`). Two schemas in this directory — `catalog-index.schema.json` and `layout-preview-index.schema.json` — describe repo-internal *index* files instead (see rows below); they are not OPF document or catalog-record schemas and are intentionally excluded from the package's published/typed schema surface (`schemaNames` / generated types). |
13
+ | [`catalogs/<kind>/`](./catalogs) | Bundled catalog records, one JSON file per record plus an `index.json` per kind. These are the same records served from `https://www.pptx.gallery/<kind>`. Every `index.json` validates against `schemas/catalog-index.schema.json` (`$id: https://openpresentation.org/schema/opf-catalog-index/v1`), a generic shape shared across all 11 kinds. |
14
+ | [`previews/layouts/`](./previews/layouts) | Vendored HTML previews for the **slide archetype gallery** (e.g. `swot-analysis`, `agenda`, `org-chart`) — see "Preview gallery vs. layout catalog" below. Its `index.json` validates against `schemas/layout-preview-index.schema.json` (`$id: https://openpresentation.org/schema/opf-layout-preview-index/v1`). |
15
+ | [`reference/engine-defaults.json`](./reference/engine-defaults.json) | Reference example of engine-side defaults. Engine configuration, not part of the OPF document contract; it has no JSON Schema. |
16
+ | [`openapi.yaml`](./openapi.yaml) | Optional reference OpenAPI 3.1 contract for downstream services that choose to expose OPF operations (validate, parse, convert, generate, render) over HTTP. OpenPresentation does not host this API; implementers can use it as a starting point for their own hosted or internal services. Local format tooling never needs it. |
17
+
18
+ ## Preview gallery vs. layout catalog
19
+
20
+ `spec/catalogs/layouts/` and `spec/previews/layouts/` are two unrelated taxonomies that happen to share a directory name. Do not assume a preview id corresponds to a layout catalog id — none of them do.
21
+
22
+ - **`spec/catalogs/layouts/`** is the **structural layout catalog**: 28 records (`title`, `title-subtitle`, `text-1x`…`text-3x`, `list-1x`…`list-6x`, `chart-1x`…`chart-3x`, `image-bleed`, `blank`, …) that `Slide.layout` resolves against. These describe placeholder structure — how many regions a slide has and what kind of content goes where — independent of subject matter.
23
+ - **`spec/previews/layouts/`** is the **slide archetype preview gallery**: 70 self-contained HTML snippets keyed by subject-matter archetype (`swot-analysis`, `agenda`, `org-chart`, `pricing-table`, `roadmap`, …), used to render picker thumbnails. These ids describe *what a slide is about*, not its structural layout, and are never used as a `Slide.layout` value.
24
+
25
+ The preview HTML files are **vendored, generated artifacts**, not hand-authored spec content. They're produced by rendering React/Tailwind components from `lib/layout-previews.tsx` in the sibling `pptx-gallery` repo via `packages/javascript/scripts/render-layout-previews.mjs`, which requires a local `../pptx-gallery` checkout (a sibling directory to this repo) to run:
26
+
27
+ ```sh
28
+ node --import tsx packages/javascript/scripts/render-layout-previews.mjs
29
+ ```
30
+
31
+ Without that sibling checkout, treat `spec/previews/layouts/*.html` and `index.json` as read-only committed output — edit the source components in `pptx-gallery` and re-render, rather than hand-editing the generated HTML here.
32
+
33
+ ## Consuming this directory
34
+
35
+ Validate a document and load catalog records without touching the files directly:
36
+
37
+ ```ts
38
+ import { validatePresentation, narratives } from "@openpresentation/opf";
39
+
40
+ const result = validatePresentation(deck);
41
+ // result.valid — schema correctness
42
+ // result.errors — structural problems
43
+ // result.warnings — advisory issues such as unknown catalog ids
44
+ ```
45
+
46
+ Import the raw files when an engine, resolver, or non-JavaScript toolchain needs them:
47
+
48
+ ```ts
49
+ import presentationSchema from "@openpresentation/opf/spec/schemas/opf.schema.json" with { type: "json" };
50
+ import qbr from "@openpresentation/opf/spec/catalogs/narratives/qbr.json" with { type: "json" };
51
+ ```
52
+
53
+ The same paths work for any validator in any language: point a JSON Schema draft 2020-12 implementation at `schemas/opf.schema.json` and validate `.opf.json` files against it. Catalog records validate against their kind's companion schema.
54
+
55
+ ## Stability
56
+
57
+ The presentation schema `$id` is pinned to `/v1` and the package is pre-stable (0.x): expect breaking changes between minor versions until 1.0, tracked in [`CHANGELOG.md`](../CHANGELOG.md) with migration notes under [`docs/migrations/`](../docs/migrations).
@@ -9,7 +9,7 @@
9
9
  "decisionPower": "advisory",
10
10
  "attentionBudgetMinutes": 45,
11
11
  "recommendedNarratives": [
12
- "engineering-update",
12
+ "status-update",
13
13
  "challenge-resolution",
14
14
  "innovation",
15
15
  "weekly-progress"
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-audience-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of presentation audiences available in the openpresentation.org catalog. Each entry is a lightweight summary; full audience records (seniority, technical fluency, decision power, attention budget, recommended narratives and tones) live in the per-id JSON files alongside this index. Audiences are referenced from OPF documents via audience.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-chart-type-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of chart types available in the pptx.gallery catalog. Each entry is a lightweight summary; full chart-type records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-color-scheme-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of color schemes available in the openpresentation.org catalog. Each entry is a lightweight summary; full color-scheme records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-font-scheme-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of font schemes available in the openpresentation.org catalog. Each entry is a lightweight summary; full font-scheme records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-language-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of languages available in the openpresentation.org catalog. Each entry is a lightweight summary with the canonical BCP-47 tag; full language records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -18,5 +18,9 @@
18
18
  {
19
19
  "type": "text"
20
20
  }
21
- ]
21
+ ],
22
+ "composition": {
23
+ "mode": "grid",
24
+ "columns": 2
25
+ }
22
26
  }
@@ -24,5 +24,9 @@
24
24
  {
25
25
  "type": "text"
26
26
  }
27
- ]
27
+ ],
28
+ "composition": {
29
+ "mode": "grid",
30
+ "columns": 3
31
+ }
28
32
  }
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -45,7 +45,10 @@
45
45
  {
46
46
  "type": "text"
47
47
  }
48
- ]
48
+ ],
49
+ "composition": {
50
+ "mode": "row"
51
+ }
49
52
  },
50
53
  {
51
54
  "id": "text-3x",
@@ -63,7 +66,10 @@
63
66
  {
64
67
  "type": "text"
65
68
  }
66
- ]
69
+ ],
70
+ "composition": {
71
+ "mode": "row"
72
+ }
67
73
  },
68
74
  {
69
75
  "id": "list-1x",
@@ -90,7 +96,10 @@
90
96
  {
91
97
  "type": "list"
92
98
  }
93
- ]
99
+ ],
100
+ "composition": {
101
+ "mode": "row"
102
+ }
94
103
  },
95
104
  {
96
105
  "id": "list-3x",
@@ -108,7 +117,10 @@
108
117
  {
109
118
  "type": "list"
110
119
  }
111
- ]
120
+ ],
121
+ "composition": {
122
+ "mode": "row"
123
+ }
112
124
  },
113
125
  {
114
126
  "id": "list-4x",
@@ -129,7 +141,11 @@
129
141
  {
130
142
  "type": "list"
131
143
  }
132
- ]
144
+ ],
145
+ "composition": {
146
+ "mode": "grid",
147
+ "columns": 2
148
+ }
133
149
  },
134
150
  {
135
151
  "id": "list-5x",
@@ -153,7 +169,11 @@
153
169
  {
154
170
  "type": "list"
155
171
  }
156
- ]
172
+ ],
173
+ "composition": {
174
+ "mode": "grid",
175
+ "columns": 3
176
+ }
157
177
  },
158
178
  {
159
179
  "id": "list-6x",
@@ -180,7 +200,11 @@
180
200
  {
181
201
  "type": "list"
182
202
  }
183
- ]
203
+ ],
204
+ "composition": {
205
+ "mode": "grid",
206
+ "columns": 3
207
+ }
184
208
  },
185
209
  {
186
210
  "id": "number-1x",
@@ -207,7 +231,10 @@
207
231
  {
208
232
  "type": "text"
209
233
  }
210
- ]
234
+ ],
235
+ "composition": {
236
+ "mode": "row"
237
+ }
211
238
  },
212
239
  {
213
240
  "id": "number-3x",
@@ -225,7 +252,10 @@
225
252
  {
226
253
  "type": "text"
227
254
  }
228
- ]
255
+ ],
256
+ "composition": {
257
+ "mode": "row"
258
+ }
229
259
  },
230
260
  {
231
261
  "id": "number-4x",
@@ -246,7 +276,11 @@
246
276
  {
247
277
  "type": "text"
248
278
  }
249
- ]
279
+ ],
280
+ "composition": {
281
+ "mode": "grid",
282
+ "columns": 2
283
+ }
250
284
  },
251
285
  {
252
286
  "id": "number-5x",
@@ -270,7 +304,11 @@
270
304
  {
271
305
  "type": "text"
272
306
  }
273
- ]
307
+ ],
308
+ "composition": {
309
+ "mode": "grid",
310
+ "columns": 3
311
+ }
274
312
  },
275
313
  {
276
314
  "id": "number-6x",
@@ -297,7 +335,11 @@
297
335
  {
298
336
  "type": "text"
299
337
  }
300
- ]
338
+ ],
339
+ "composition": {
340
+ "mode": "grid",
341
+ "columns": 3
342
+ }
301
343
  },
302
344
  {
303
345
  "id": "chart-1x",
@@ -312,7 +354,10 @@
312
354
  {
313
355
  "type": "text"
314
356
  }
315
- ]
357
+ ],
358
+ "composition": {
359
+ "mode": "row"
360
+ }
316
361
  },
317
362
  {
318
363
  "id": "chart-2x",
@@ -333,7 +378,11 @@
333
378
  {
334
379
  "type": "text"
335
380
  }
336
- ]
381
+ ],
382
+ "composition": {
383
+ "mode": "grid",
384
+ "columns": 2
385
+ }
337
386
  },
338
387
  {
339
388
  "id": "chart-3x",
@@ -360,7 +409,11 @@
360
409
  {
361
410
  "type": "text"
362
411
  }
363
- ]
412
+ ],
413
+ "composition": {
414
+ "mode": "grid",
415
+ "columns": 3
416
+ }
364
417
  },
365
418
  {
366
419
  "id": "image-1x",
@@ -375,7 +428,10 @@
375
428
  {
376
429
  "type": "text"
377
430
  }
378
- ]
431
+ ],
432
+ "composition": {
433
+ "mode": "row"
434
+ }
379
435
  },
380
436
  {
381
437
  "id": "image-2x",
@@ -396,7 +452,11 @@
396
452
  {
397
453
  "type": "text"
398
454
  }
399
- ]
455
+ ],
456
+ "composition": {
457
+ "mode": "grid",
458
+ "columns": 2
459
+ }
400
460
  },
401
461
  {
402
462
  "id": "image-3x",
@@ -423,7 +483,11 @@
423
483
  {
424
484
  "type": "text"
425
485
  }
426
- ]
486
+ ],
487
+ "composition": {
488
+ "mode": "grid",
489
+ "columns": 3
490
+ }
427
491
  },
428
492
  {
429
493
  "id": "table-1x",
@@ -438,7 +502,10 @@
438
502
  {
439
503
  "type": "text"
440
504
  }
441
- ]
505
+ ],
506
+ "composition": {
507
+ "mode": "row"
508
+ }
442
509
  },
443
510
  {
444
511
  "id": "code-1x",
@@ -453,7 +520,10 @@
453
520
  {
454
521
  "type": "text"
455
522
  }
456
- ]
523
+ ],
524
+ "composition": {
525
+ "mode": "row"
526
+ }
457
527
  },
458
528
  {
459
529
  "id": "media-1x",
@@ -468,7 +538,10 @@
468
538
  {
469
539
  "type": "text"
470
540
  }
471
- ]
541
+ ],
542
+ "composition": {
543
+ "mode": "row"
544
+ }
472
545
  },
473
546
  {
474
547
  "id": "image-bleed",
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -18,5 +18,9 @@
18
18
  {
19
19
  "type": "text"
20
20
  }
21
- ]
21
+ ],
22
+ "composition": {
23
+ "mode": "grid",
24
+ "columns": 2
25
+ }
22
26
  }
@@ -24,5 +24,9 @@
24
24
  {
25
25
  "type": "text"
26
26
  }
27
- ]
27
+ ],
28
+ "composition": {
29
+ "mode": "grid",
30
+ "columns": 3
31
+ }
28
32
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-layout-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of slide layouts available in the openpresentation.org catalog. Each entry is a lightweight summary; full layout records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "list"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -15,5 +15,8 @@
15
15
  {
16
16
  "type": "list"
17
17
  }
18
- ]
18
+ ],
19
+ "composition": {
20
+ "mode": "row"
21
+ }
19
22
  }
@@ -18,5 +18,9 @@
18
18
  {
19
19
  "type": "list"
20
20
  }
21
- ]
21
+ ],
22
+ "composition": {
23
+ "mode": "grid",
24
+ "columns": 2
25
+ }
22
26
  }
@@ -21,5 +21,9 @@
21
21
  {
22
22
  "type": "list"
23
23
  }
24
- ]
24
+ ],
25
+ "composition": {
26
+ "mode": "grid",
27
+ "columns": 3
28
+ }
25
29
  }
@@ -24,5 +24,9 @@
24
24
  {
25
25
  "type": "list"
26
26
  }
27
- ]
27
+ ],
28
+ "composition": {
29
+ "mode": "grid",
30
+ "columns": 3
31
+ }
28
32
  }
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -15,5 +15,8 @@
15
15
  {
16
16
  "type": "text"
17
17
  }
18
- ]
18
+ ],
19
+ "composition": {
20
+ "mode": "row"
21
+ }
19
22
  }
@@ -18,5 +18,9 @@
18
18
  {
19
19
  "type": "text"
20
20
  }
21
- ]
21
+ ],
22
+ "composition": {
23
+ "mode": "grid",
24
+ "columns": 2
25
+ }
22
26
  }
@@ -21,5 +21,9 @@
21
21
  {
22
22
  "type": "text"
23
23
  }
24
- ]
24
+ ],
25
+ "composition": {
26
+ "mode": "grid",
27
+ "columns": 3
28
+ }
25
29
  }
@@ -24,5 +24,9 @@
24
24
  {
25
25
  "type": "text"
26
26
  }
27
- ]
27
+ ],
28
+ "composition": {
29
+ "mode": "grid",
30
+ "columns": 3
31
+ }
28
32
  }
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -12,5 +12,8 @@
12
12
  {
13
13
  "type": "text"
14
14
  }
15
- ]
15
+ ],
16
+ "composition": {
17
+ "mode": "row"
18
+ }
16
19
  }
@@ -15,5 +15,8 @@
15
15
  {
16
16
  "type": "text"
17
17
  }
18
- ]
18
+ ],
19
+ "composition": {
20
+ "mode": "row"
21
+ }
19
22
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-narrative-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of narrative templates available in the openpresentation.org catalog. Each entry is a lightweight summary; full beat definitions live in the per-template JSON files alongside this index. Entries are grouped by usage: foundational arcs first, then pitches, sales and GTM, strategy and consulting, storytelling, keynotes and inspiration, rhythm-of-business reviews, data-driven analyses, and workforce reviews.",
5
- "templates": [
5
+ "records": [
6
6
  {
7
7
  "id": "problem-solution",
8
8
  "name": "Problem → Solution",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-purpose-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of presentation purposes available in the openpresentation.org catalog. Each entry is a lightweight summary; full purpose records live in the per-id JSON files alongside this index. Purposes are referenced from OPF documents via purpose.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-social-platform-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of social-media platforms available in the openpresentation.org catalog. Each entry is a lightweight summary; full platform records live in the per-id JSON files alongside this index. The property keys of any Socials object on Organization or Speaker resolve to ids in this catalog.",
5
5
  "records": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://openpresentation.org/schema/opf-theme-index/v1",
2
+ "$schema": "https://openpresentation.org/schema/opf-catalog-index/v1",
3
3
  "version": "1",
4
4
  "description": "Catalog of themes available in the openpresentation.org catalog. Each entry is a lightweight summary; full theme records live in the per-id JSON files alongside this index.",
5
5
  "records": [
@@ -25,7 +25,7 @@
25
25
  "weekly-progress",
26
26
  "status-update",
27
27
  "company-intro",
28
- "all-hands"
28
+ "focus"
29
29
  ],
30
30
  "tags": ["internal", "warm", "conversational"]
31
31
  }