@openpresentation/opf 0.27.0 → 0.28.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 (100) hide show
  1. package/dist/browser.js +18 -18
  2. package/dist/{catalog-refs-BSfGELpt.d.ts → catalog-refs-kAefsZWT.d.ts} +2 -1
  3. package/dist/{catalog-schemas-DoxA2BgY.d.ts → catalog-schemas-CC1d_h8s.d.ts} +3 -2
  4. package/dist/{chart-data-BnNqgnC-.d.ts → chart-data-Ci9s_NDN.d.ts} +2 -1
  5. package/dist/{chunk-LRTQXGJO.js → chunk-2CUCYENF.js} +523 -89
  6. package/dist/{chunk-4ZM5G3XX.js → chunk-5Q4IYLMW.js} +30 -14
  7. package/dist/{chunk-OSM3LZ2Y.js → chunk-BQUWRXTR.js} +4 -4
  8. package/dist/{chunk-4ACS57MG.js → chunk-CR72ZJ6W.js} +2 -2
  9. package/dist/{chunk-ZGTOZA2S.js → chunk-F6DCEGB3.js} +6 -6
  10. package/dist/{chunk-O3SA5SJ4.js → chunk-KELC4K62.js} +1 -1
  11. package/dist/{chunk-WJ4XTCOD.js → chunk-KXKN3W5Z.js} +3 -3
  12. package/dist/{chunk-TMREBZBQ.js → chunk-LLEXM7TQ.js} +3 -3
  13. package/dist/{chunk-GNKESMZT.js → chunk-MTFK7QEY.js} +6 -6
  14. package/dist/{chunk-JSHMFTSY.js → chunk-N77N4AOD.js} +1 -1
  15. package/dist/{chunk-7XUEKIXH.js → chunk-OAIAFXMS.js} +2 -2
  16. package/dist/{chunk-EO3JWEO5.js → chunk-P6PKYJTS.js} +1 -1
  17. package/dist/{chunk-353VBJ6K.js → chunk-PCU4XGKV.js} +5 -5
  18. package/dist/{chunk-SYW4BCGZ.js → chunk-SEZ4EPW6.js} +2 -2
  19. package/dist/{chunk-ABFDFZIW.js → chunk-TNUTRV6E.js} +1 -1
  20. package/dist/{chunk-CXPBU5W4.js → chunk-UOHWG4OS.js} +1 -1
  21. package/dist/{chunk-APLNGCEZ.js → chunk-VGGPAMP7.js} +2 -2
  22. package/dist/{chunk-PAGVSTVF.js → chunk-WPKCWQ6W.js} +149 -26
  23. package/dist/{chunk-KZPZRHL6.js → chunk-XZ23FORL.js} +6 -6
  24. package/dist/chunk-ZROVYWGU.js +1 -0
  25. package/dist/{composition-BGmpe5e4.d.ts → composition-C-hd_Ci3.d.ts} +84 -10
  26. package/dist/composition.d.ts +3 -3
  27. package/dist/composition.js +1 -1
  28. package/dist/conversion-XJTDWQ5W.js +24 -0
  29. package/dist/{conversion-8SQD4dqu.d.ts → conversion-hbZeS5kD.d.ts} +9 -8
  30. package/dist/convert.d.ts +6 -5
  31. package/dist/convert.js +7 -7
  32. package/dist/data.d.ts +4 -3
  33. package/dist/data.js +2 -2
  34. package/dist/{deck-report-BaKgPh_N.d.ts → deck-report-DQMsvyBI.d.ts} +5 -4
  35. package/dist/deck.d.ts +10 -9
  36. package/dist/deck.js +11 -11
  37. package/dist/diff.d.ts +3 -2
  38. package/dist/diff.js +4 -4
  39. package/dist/docs.d.ts +2 -1
  40. package/dist/docs.js +29 -17
  41. package/dist/examples.d.ts +3 -2
  42. package/dist/examples.js +90 -50
  43. package/dist/{explain-JSuESV-Y.d.ts → explain-iZeNOUc6.d.ts} +2 -1
  44. package/dist/{finding-Bh56sGtF.d.ts → finding-l9dlQ2NF.d.ts} +1 -1
  45. package/dist/font-policy.d.ts +2 -1
  46. package/dist/format.d.ts +2 -1
  47. package/dist/format.js +2 -2
  48. package/dist/ids.d.ts +3 -2
  49. package/dist/ids.js +4 -4
  50. package/dist/index.d.ts +38 -17
  51. package/dist/index.js +22 -22
  52. package/dist/markdown.d.ts +8 -7
  53. package/dist/markdown.js +8 -8
  54. package/dist/node-engine.d.ts +34 -11
  55. package/dist/node-engine.js +35 -29
  56. package/dist/{pagination-BsUTsQvk.d.ts → pagination-DyAKYpXu.d.ts} +4 -3
  57. package/dist/pagination.d.ts +4 -4
  58. package/dist/pagination.js +4 -4
  59. package/dist/patch.d.ts +4 -2
  60. package/dist/patch.js +3 -3
  61. package/dist/precompiled.d.ts +1 -1
  62. package/dist/precompiled.js +2 -2
  63. package/dist/{presentation-C-nHZyMw.d.ts → presentation-8jLSTFqL.d.ts} +10 -10
  64. package/dist/repo-readme.js +1 -1
  65. package/dist/schema-engine-ajv.js +1 -1
  66. package/dist/schema-engine-precompiled.js +2 -2
  67. package/dist/schema.d.ts +4 -3
  68. package/dist/schema.js +3 -3
  69. package/dist/schemas.d.ts +2 -1
  70. package/dist/schemas.js +1 -1
  71. package/dist/source.d.ts +5 -4
  72. package/dist/source.js +10 -10
  73. package/dist/spec/README.md +1 -1
  74. package/dist/spec/schemas/audience.schema.json +1 -0
  75. package/dist/spec/schemas/catalog-index.schema.json +1 -0
  76. package/dist/spec/schemas/catalog-manifest.schema.json +1 -0
  77. package/dist/spec/schemas/chart-type.schema.json +1 -0
  78. package/dist/spec/schemas/color-scheme.schema.json +1 -0
  79. package/dist/spec/schemas/finding.schema.json +1 -0
  80. package/dist/spec/schemas/font-scheme.schema.json +1 -0
  81. package/dist/spec/schemas/language.schema.json +1 -0
  82. package/dist/spec/schemas/layout-preview-index.schema.json +1 -0
  83. package/dist/spec/schemas/layout.schema.json +8 -6
  84. package/dist/spec/schemas/narrative.schema.json +1 -0
  85. package/dist/spec/schemas/opf.schema.json +8 -7
  86. package/dist/spec/schemas/purpose.schema.json +1 -0
  87. package/dist/spec/schemas/social-platform.schema.json +1 -0
  88. package/dist/spec/schemas/theme.schema.json +3 -1
  89. package/dist/spec/schemas/tone.schema.json +1 -0
  90. package/dist/spec-files.d.ts +2 -1
  91. package/dist/symbol-font-encodings.d.ts +2 -1
  92. package/dist/types.d.ts +10 -10
  93. package/dist/{validation-types-6_jEaHeE.d.ts → validation-types-mNmfcY9A.d.ts} +5 -4
  94. package/dist/validator.d.ts +8 -8
  95. package/dist/validator.js +3 -3
  96. package/dist/yaml.d.ts +8 -7
  97. package/dist/yaml.js +7 -7
  98. package/package.json +7 -7
  99. package/dist/chunk-GJO5NUVT.js +0 -1
  100. package/dist/conversion-LN6PFRZL.js +0 -24
@@ -2,6 +2,7 @@
2
2
  var presentation = {
3
3
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4
4
  "$id": "https://openpresentation.org/schema/opf/v1",
5
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
5
6
  "title": "Presentation",
6
7
  "description": "Open-source JSON format for describing PowerPoint presentations. Agents describe narratives, content, audience, reusable assets, and design \u2014 the engine handles OOXML complexity.\n\nContent references (Slide.layout, design.theme, design.colorScheme / design.colorScheme.id, design.fontScheme / design.fontScheme.id, narrative, audience, purpose and tone, and the colorScheme / fontScheme a theme record names) point at catalog records. Each is a bare 'id' or a 'name:id' whose prefix names a group in 'catalogs'. A bare id resolves in catalogs.custom, then in the records embedded under catalogs.default, then in the catalog the host registered for catalogs.default.source (or the host's default catalog when 'default' is omitted); 'name:id' resolves in catalogs.<name>, then in the catalog the host registered for its source. A reference that resolves nowhere is the warning opf/unresolved-reference, and the slide uses automatic composition or the engine default. Engines never fetch a catalog: a saved document embeds every record it uses, and hosts register any other catalog by its source string. See docs/default-catalog.md.\n\nchart.type, the language tag and the keys of Organization.socials / Speaker.socials are engine vocabularies, validated directly with no catalog lookup. When a document names no theme, colour scheme or font scheme, every engine uses the same small engine defaults (spec/reference/engine-defaults.json). Asset references use 'asset:<id>' strings that point into the top-level assets registry, and content color fields (rich-text runs, styled table cells) accept hex values, color-scheme slot/role names, or 'var:<id>' references into the top-level variables map.",
7
8
  "type": "object",
@@ -1234,7 +1235,7 @@ var presentation = {
1234
1235
  "center",
1235
1236
  "right"
1236
1237
  ],
1237
- "description": "Default horizontal alignment for body/content regions in resolved layouts. Effective value: the slide's design, then the deck's design, then the theme's design.contentAlignment, then the layout record's design.contentAlignment, then the engine default. The tag follows titleAlignment (and a cover's subtitle with it) unless the slide's own design sets contentAlignment."
1238
+ "description": "Default horizontal alignment for body/content regions in resolved layouts. Effective value: the slide's design, then the deck's design, then the theme's design.contentAlignment, then the layout record's design.contentAlignment, then the engine default. The tag follows titleAlignment (and so does a subtitle in the title area, as on a cover) unless the slide's own design sets contentAlignment."
1238
1239
  },
1239
1240
  "contentBox": {
1240
1241
  "type": "boolean",
@@ -1266,15 +1267,16 @@ var presentation = {
1266
1267
  "contain",
1267
1268
  "stretch"
1268
1269
  ],
1269
- "description": "Default fit of image blocks (and Slide.image) that set no fit of their own: 'cover' fills the frame and crops what overflows around the block's focus, 'contain' shows the whole picture centered in the frame, 'stretch' scales it to the frame exactly. Effective value: the slide's design, then the deck's design, then the theme's design.imageFit, then the layout record's design.imageFit, then 'cover'. Backgrounds set their own fit."
1270
+ "description": "Default fit of image blocks (and Slide.image) that set no fit of their own: 'cover' fills the frame and crops what overflows around the block's focus, 'contain' shows the whole picture in a frame of its own proportions, centered across and placed down the cell by the region's anchor (top by default), 'stretch' scales it to the frame exactly. Effective value: the slide's design, then the deck's design, then the theme's design.imageFit, then the layout record's design.imageFit, then 'cover'; a slide composed with no layout shows its pictures whole ('contain') instead. Backgrounds set their own fit."
1270
1271
  },
1271
1272
  "listBullet": {
1272
1273
  "type": "string",
1273
1274
  "enum": [
1274
1275
  "character",
1275
- "image"
1276
+ "image",
1277
+ "none"
1276
1278
  ],
1277
- "description": "Marker style for items and bullets lists. Effective value: the slide's design, then the deck's design, then the theme's design.listBullet, then the layout record's design.listBullet, then 'character'. 'character' (the default) draws the glyph marker. 'image' draws the primary organization's icon logo (or the organization and shape design.logo names; the onDark value on dark backgrounds) as a picture bullet: a square with side 0.65 times the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field."
1279
+ "description": "Marker style for items and bullets lists. Effective value: the slide's design, then the deck's design, then the theme's design.listBullet, then the layout record's design.listBullet, then 'character'. 'character' (the default) draws the glyph marker. 'image' draws the primary organization's icon logo (or the organization and shape design.logo names; the onDark value on dark backgrounds) as a picture bullet: a square with side 0.65 times the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field. 'none' draws no marker and no hanging indent, so each entry's text (and its description) starts at the left edge of the list: use it for label-and-description lists such as pillars, team members and questions with answers. Nested levels keep their indent. A list that sets numbering still draws its numbers."
1278
1280
  },
1279
1281
  "mirror": {
1280
1282
  "type": "boolean",
@@ -3384,7 +3386,7 @@ var presentation = {
3384
3386
  "contain",
3385
3387
  "stretch"
3386
3388
  ],
3387
- "description": "Image payloads only. How the picture fills its frame: 'cover' fills it and crops what overflows around focus; 'contain' shows the whole picture centered; 'stretch' scales it to the frame exactly. Default: the effective design.imageFit, else 'cover'."
3389
+ "description": "Image payloads only. How the picture fills its frame: 'cover' fills it and crops what overflows around focus; 'contain' shows the whole picture, in a frame of its own proportions placed at the region's anchor (top by default); 'stretch' scales it to the frame exactly. Default: the effective design.imageFit, else 'cover' in a layout and 'contain' on a slide with no layout."
3388
3390
  },
3389
3391
  "focus": {
3390
3392
  "$ref": "#/$defs/ImageFocus",
@@ -4620,7 +4622,7 @@ var presentation = {
4620
4622
  },
4621
4623
  "Chart": {
4622
4624
  "type": "object",
4623
- "description": "Chart content. The chart object keeps chart-specific fields together so slides and regions do not expose loose chart fields.",
4625
+ "description": 'Chart content. The chart object keeps chart-specific fields together so slides and regions do not expose loose chart fields. OPF charts are `{ type, data }` where `data` is `{ columns, rows }`: the first column holds the category labels and every further column is one series. There are no `categories`, `series`, `labels` or `datasets` keys (the Chart.js and ECharts shape); write them as columns and rows. Example: `{ "type": "column", "data": { "columns": ["Quarter", "Decks"], "rows": [["Q1", 3], ["Q2", 8], ["Q3", 21]] } }`.',
4624
4626
  "additionalProperties": false,
4625
4627
  "required": [
4626
4628
  "type",
@@ -4997,7 +4999,7 @@ var presentation = {
4997
4999
  },
4998
5000
  "ChartData": {
4999
5001
  "type": "object",
5000
- "description": "Inline tabular data driving a chart. The first column usually supplies category/x-axis labels; subsequent columns are plotted measures unless 'chart.mapping' or a chart type maps them differently. Value cells are numbers; a string is read only in strict decimal syntax ('12', '-3.5', '1e6'), and anything else ('12%', '$5', '(5)', '1,234') is a gap and a 'chart-value-not-numeric' warning.",
5002
+ "description": `Inline tabular data driving a chart, written as \`{ "columns": ["Quarter", "Decks"], "rows": [["Q1", 3], ["Q2", 8]] }\`: one column of labels plus one column per series, not separate \`categories\` and \`series\` lists. The first column usually supplies category/x-axis labels; subsequent columns are plotted measures unless 'chart.mapping' or a chart type maps them differently. Value cells are numbers; a string is read only in strict decimal syntax ('12', '-3.5', '1e6'), and anything else ('12%', '$5', '(5)', '1,234') is a gap and a 'chart-value-not-numeric' warning.`,
5001
5003
  "additionalProperties": false,
5002
5004
  "required": [
5003
5005
  "columns",
@@ -5959,6 +5961,7 @@ var presentation = {
5959
5961
  var audience = {
5960
5962
  "$schema": "https://json-schema.org/draft/2020-12/schema",
5961
5963
  "$id": "https://openpresentation.org/schema/opf-audience/v1",
5964
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
5962
5965
  "title": "Audience",
5963
5966
  "description": "Schema for audience records. Each record names an audience archetype (e.g. 'executive', 'engineering-team', 'investor') and carries seniority, technical-fluency, decision-power, and attention-budget hints used by AI-driven generation. Documents reference an audience from 'audience', which also accepts free-form text.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
5964
5967
  "type": "object",
@@ -6131,6 +6134,7 @@ var audience = {
6131
6134
  var purpose = {
6132
6135
  "$schema": "https://json-schema.org/draft/2020-12/schema",
6133
6136
  "$id": "https://openpresentation.org/schema/opf-purpose/v1",
6137
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
6134
6138
  "title": "Purpose",
6135
6139
  "description": "Schema for purpose records. Each record names a presentation objective such as informing, aligning, persuading, driving a decision, or selling. Documents reference a purpose from 'purpose', which also accepts free-form text and inline Purpose objects.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
6136
6140
  "type": "object",
@@ -6242,6 +6246,7 @@ var purpose = {
6242
6246
  var tone = {
6243
6247
  "$schema": "https://json-schema.org/draft/2020-12/schema",
6244
6248
  "$id": "https://openpresentation.org/schema/opf-tone/v1",
6249
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
6245
6250
  "title": "Tone",
6246
6251
  "description": "Schema for tone records. Each record names a presentation tone (e.g. 'formal', 'casual', 'inspirational') and carries voice cues, anti-patterns, and sample phrases that AI-driven generation uses to shape output. Documents reference a tone from 'tone'.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
6247
6252
  "type": "object",
@@ -6401,6 +6406,7 @@ var tone = {
6401
6406
  var theme = {
6402
6407
  "$schema": "https://json-schema.org/draft/2020-12/schema",
6403
6408
  "$id": "https://openpresentation.org/schema/opf-theme/v1",
6409
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
6404
6410
  "title": "Theme",
6405
6411
  "description": "Schema for theme records. Each theme is a small, named bundle that pairs a color scheme, a font scheme, a default theme-controlled background, and a slide size. Documents reference a theme from design.theme; design.colorScheme, design.fontScheme, design.background and design.dimensions take precedence over the resolved theme. The theme's own colorScheme and fontScheme references resolve in the theme's group first, so a catalog's theme finds that catalog's schemes.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
6406
6412
  "type": "object",
@@ -6585,7 +6591,8 @@ var theme = {
6585
6591
  "type": "string",
6586
6592
  "enum": [
6587
6593
  "character",
6588
- "image"
6594
+ "image",
6595
+ "none"
6589
6596
  ],
6590
6597
  "description": "As design.listBullet of a deck."
6591
6598
  }
@@ -6737,6 +6744,7 @@ var theme = {
6737
6744
  var layout = {
6738
6745
  "$schema": "https://json-schema.org/draft/2020-12/schema",
6739
6746
  "$id": "https://openpresentation.org/schema/opf-layout/v2",
6747
+ "$comment": "The v2 in the $id marks the pre-1.0 line of this schema, not a frozen contract: it may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
6740
6748
  "title": "Slide Layout",
6741
6749
  "description": "Schema for slide-layout records. A layout is one ordered list of regions, declared once, in reading order: 'direction' says whether the record's 'regions' sit side by side (row) or are stacked (column), and each region says which content kinds it takes and how several blocks share it. A split is an entry that nests a second list the other way, which is how a layout gets two dimensions. 'title' and 'subtitle' are reserved heading regions. Engines compile the list into a grid of tracks (the guillotine partition it describes). Slide content stays flat: engines bind a slide's blocks to the regions by reading order, role and kind (bindRegions in @openpresentation/opf), a block may pin itself to a region with 'region', and an empty region collapses into a neighbour. Built-in and custom layouts are records of this one schema; a custom layout is embedded under catalogs.custom.layouts or shipped in a catalog. Documents reference a layout from Slide.layout; a slide without a layout, with layout 'auto', or whose layout resolves nowhere composes automatically.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
6742
6750
  "type": "object",
@@ -6813,7 +6821,7 @@ var layout = {
6813
6821
  "middle",
6814
6822
  "bottom"
6815
6823
  ],
6816
- "description": "Vertical position of the content of every body region when it is shorter than the region. A split's 'anchor' replaces it for the regions under that split, and a region's own 'anchor' replaces both. Only 'anchor' is inherited, and only by body regions: the heading regions 'title' and 'subtitle' never take it, and the other region rules stay per region. Default 'top'."
6824
+ "description": "Vertical position of the content of every body region when it is shorter than the region. A split's 'anchor' replaces it for the regions under that split, and a region's own 'anchor' replaces both. Only 'anchor' is inherited, and only by body regions: the heading regions 'title' and 'subtitle' never take it, and the other region rules stay per region. One exception places the whole slide: when the record is a column and every entry of its 'regions' list is sized 'auto' (heading regions included), the record has no numeric row to hold the leftover height, so its 'anchor' places the whole stack, title and subtitle included, in the content box's leftover height: 'middle' centres it, 'bottom' sits it at the foot, 'top' (default) starts it at the top as before. A record with any numeric entry, a row record and an anchor on a split keep the rule above. Default 'top'."
6817
6825
  },
6818
6826
  "regions": {
6819
6827
  "type": "array",
@@ -6956,7 +6964,7 @@ var layout = {
6956
6964
  "const": "auto"
6957
6965
  }
6958
6966
  ],
6959
- "description": "The region's or split's share along its parent's direction: a number above 0 and up to 100 that siblings share in proportion (the gap is taken out first), default 1; or 'auto', the length the content needs at the starting text size (at most half the content box; a split sized auto is as tall as its tallest content, and every row of a column split sized auto is auto too; auto regions with no content take no space). 'auto' is allowed only on an entry of a column; in a row it is the validate finding opf/layout-template. The default for a heading region is 'auto' in a column and 1 in a row.",
6967
+ "description": "The region's or split's share along its parent's direction: a number above 0 and up to 100 that siblings share in proportion (the gap is taken out first), default 1; or 'auto', the length the content needs at the starting text size (up to the space the heading rows and the content of the numeric rows leave; auto rows that do not all fit shrink together, each giving up the same fraction of what it can give up above its content's length at the minimum font size; a split sized auto is as tall as its tallest content, and every row of a column split sized auto is auto too; auto regions with no content take no space). 'auto' is allowed only on an entry of a column; in a row it is the validate finding opf/layout-template. When every entry of a column record is 'auto', the record's 'anchor' places the whole stack. The default for a heading region is 'auto' in a column and 1 in a row.",
6960
6968
  "examples": [
6961
6969
  1,
6962
6970
  2,
@@ -7098,7 +7106,7 @@ var layout = {
7098
7106
  "column",
7099
7107
  "auto"
7100
7108
  ],
7101
- "description": "How several blocks share the region: 'none' one block fills it; 'grid' by count (1 fills, 2 side by side, 3 in a row, 4 as 2 x 2, 5 as 3 + 2, 6 as 3 x 2, 7 to 12 in four columns; rows and columns swap in a portrait region; a short last row is centred); 'column' stacked with equal heights; 'auto' a grid when every block is short and a column when any block is long (more than 6 estimated lines in its grid cell at the starting size). design.contentDirection turns every flowing region into one row or one column. Default 'auto'."
7109
+ "description": "How several blocks share the region: 'none' one block fills it; 'grid' by count (1 fills, 2 side by side, 3 in a row, 4 as 2 x 2, 5 as 3 + 2, 6 as 3 x 2, 7 to 12 in four columns; rows and columns swap in a portrait region; a short last row is centred); 'column' stacked at the heights the blocks need, one gap apart, and placed by the region's anchor (charts, pictures, tables, timelines and videos take what the measured blocks leave; blocks that do not fit share the region, each giving up the same fraction of what it can give up above its height at the minimum font size); 'auto' a grid when every block is short and a column when any block is long (more than 6 estimated lines in its grid cell at the starting size). design.contentDirection turns every flowing region into one row or one column. Default 'auto'."
7102
7110
  },
7103
7111
  "max": {
7104
7112
  "type": "integer",
@@ -7128,7 +7136,7 @@ var layout = {
7128
7136
  "middle",
7129
7137
  "bottom"
7130
7138
  ],
7131
- "description": "Vertical position of the region's content when it is shorter than the region. Replaces the 'anchor' of the record and of the splits around it. Default: the nearest of those that sets one, else 'top'."
7139
+ "description": "Vertical position of the region's content when it is shorter than the region. Replaces the 'anchor' of the record and of the splits around it. Default: the nearest of those that sets one, else 'top'. A picture shown whole (fit 'contain') and a video, whose 16:9 frame is the largest that fits the cell, sit at the anchor inside the cell."
7132
7140
  },
7133
7141
  "empty": {
7134
7142
  "type": "string",
@@ -7202,9 +7210,10 @@ var layout = {
7202
7210
  "type": "string",
7203
7211
  "enum": [
7204
7212
  "character",
7205
- "image"
7213
+ "image",
7214
+ "none"
7206
7215
  ],
7207
- "description": "Marker style of lists: 'character' draws the glyph, 'image' draws the deck's icon logo as a picture bullet."
7216
+ "description": "Marker style of lists: 'character' draws the glyph, 'image' draws the deck's icon logo as a picture bullet, 'none' draws no marker and no hanging indent (label-and-description lists)."
7208
7217
  },
7209
7218
  "mirror": {
7210
7219
  "type": "boolean",
@@ -7250,6 +7259,7 @@ var layout = {
7250
7259
  var chartType = {
7251
7260
  "$schema": "https://json-schema.org/draft/2020-12/schema",
7252
7261
  "$id": "https://openpresentation.org/schema/opf-chart-type/v1",
7262
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
7253
7263
  "title": "Chart Type",
7254
7264
  "description": `Schema for chart-type records: display metadata for chart pickers (name, group, expected series, complexity) and the Open XML mapping a picker can describe. One record per chart type that Aspose.Slides officially supports (see mappings.renderers["aspose-slides"].chartType), plus the column-and-line combination 'combo'. A document's chart.type is an engine vocabulary validated directly; engines never look a chart-type record up. pptx.gallery publishes these records and @openpresentation/gallery ships them as catalogDisplay.chartTypes.`,
7255
7265
  "type": "object",
@@ -7528,6 +7538,7 @@ var chartType = {
7528
7538
  var narrative = {
7529
7539
  "$schema": "https://json-schema.org/draft/2020-12/schema",
7530
7540
  "$id": "https://openpresentation.org/schema/opf-narrative/v1",
7541
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
7531
7542
  "title": "Narrative Template",
7532
7543
  "description": "Schema for narrative records. A narrative is a plan: a named story arc (e.g. 'problem-solution', 'scqa') as an ordered list of beats, each saying what its slide must do. A document points at one with the string 'narrative' and links its slides to beats with 'slides[].beat'; a narrative the document defines itself is a record in catalogs.custom.narratives. Core validate warns about a 'slides[].beat' id the resolved narrative does not define (opf/unknown-beat) and about a root 'duration' outside this record's 'duration' range (opf/duration-outside-narrative), and reports a beat no slide references (opf/unused-beat).\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
7533
7544
  "type": "object",
@@ -7728,6 +7739,7 @@ var narrative = {
7728
7739
  var socialPlatform = {
7729
7740
  "$schema": "https://json-schema.org/draft/2020-12/schema",
7730
7741
  "$id": "https://openpresentation.org/schema/opf-social-platform/v1",
7742
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
7731
7743
  "title": "Social Platform",
7732
7744
  "description": "Schema for social-platform records: display metadata for authoring UIs (name, brand color, handle example) alongside the URL patterns. The keys of a Socials object are an engine vocabulary validated directly; engines link a handle with the patterns in spec/reference/engine-vocabularies.json and never look a social-platform record up. pptx.gallery publishes these records and @openpresentation/gallery ships them as catalogDisplay.socialPlatforms.",
7733
7745
  "type": "object",
@@ -7902,6 +7914,7 @@ var socialPlatform = {
7902
7914
  var language = {
7903
7915
  "$schema": "https://json-schema.org/draft/2020-12/schema",
7904
7916
  "$id": "https://openpresentation.org/schema/opf-language/v1",
7917
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
7905
7918
  "title": "Language",
7906
7919
  "description": "Schema for language records: display metadata for the language pickers of authoring tools (name, ISO code, the default font schemes a picker suggests). The document's 'language' is an engine vocabulary, a BCP-47 tag validated directly; engines never look a language record up, and their script, direction, OOXML tag and default script fonts come from spec/reference/engine-vocabularies.json. pptx.gallery publishes these records and @openpresentation/gallery ships them as catalogDisplay.languages.",
7907
7920
  "type": "object",
@@ -8090,6 +8103,7 @@ var language = {
8090
8103
  var colorScheme = {
8091
8104
  "$schema": "https://json-schema.org/draft/2020-12/schema",
8092
8105
  "$id": "https://openpresentation.org/schema/opf-color-scheme/v1",
8106
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
8093
8107
  "title": "Color Scheme",
8094
8108
  "description": "Schema for color-scheme records. Each scheme is a named palette with the twelve PowerPoint color slots (six accents, two darks, two lights, plus hyperlink and followed-hyperlink), suitable for being mapped directly into OOXML theme XML. Documents reference a scheme from design.colorScheme (or design.colorScheme.id) and from a theme's colorScheme; slot overrides on design.colorScheme take precedence over the resolved scheme.\n\nThe slot fields here mirror the inline-override fields on the in-document ColorScheme type (in opf.schema.json), so records and inline OPF overrides are interchangeable.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
8095
8109
  "type": "object",
@@ -8302,6 +8316,7 @@ var colorScheme = {
8302
8316
  var fontScheme = {
8303
8317
  "$schema": "https://json-schema.org/draft/2020-12/schema",
8304
8318
  "$id": "https://openpresentation.org/schema/opf-font-scheme/v1",
8319
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
8305
8320
  "title": "Font Scheme",
8306
8321
  "description": "Schema for font-scheme records. Each scheme pairs a major (heading) and minor (body) font family in the OOXML majorFont/minorFont sense, scoped to a target app (powerpoint or google-slides) and a language family (Latin, East Asian, or Complex Script). Documents reference a scheme from design.fontScheme (or design.fontScheme.id), from a theme's fontScheme and from a language's fontScheme / googleFontScheme. Role overrides on design.fontScheme (heading, body, accent, code), each a font family name, take precedence over the resolved scheme.\n\nA document references a record as a bare id or 'name:id' and resolves it in its own catalogs groups first, then in the catalog the host registered for the group's source; engines never fetch a catalog. A published record file carries '$schema' and 'id'; the copy a document embeds under catalogs.<group>.<kind>.<id> carries neither (the key is the id) and no 'x-*' display metadata.",
8307
8322
  "type": "object",
@@ -8539,6 +8554,7 @@ var fontScheme = {
8539
8554
  var finding = {
8540
8555
  "$schema": "https://json-schema.org/draft/2020-12/schema",
8541
8556
  "$id": "https://openpresentation.org/schema/opf-finding/v1",
8557
+ "$comment": "The v1 in the $id is the pre-1.0 line, not a frozen contract: this schema may change in any 0.x minor release. The release that produced this copy is the version of the @openpresentation/opf package it came from (opf --version; opf schemas lists it next to each id). See docs/schema-versioning.md.",
8542
8558
  "title": "Validation results",
8543
8559
  "description": "Errors, warnings and suggested fixes.",
8544
8560
  "type": "object",
@@ -1,8 +1,8 @@
1
- import { fromMarkdown, toMarkdown } from './chunk-GNKESMZT.js';
2
- import { fromYaml, toYaml } from './chunk-KZPZRHL6.js';
1
+ import { fromMarkdown, toMarkdown } from './chunk-MTFK7QEY.js';
2
+ import { fromYaml, toYaml } from './chunk-XZ23FORL.js';
3
3
  import { NOT_CHECKED } from './chunk-RYZPBJLB.js';
4
- import { parseSource, validate, OPFValidationError } from './chunk-PAGVSTVF.js';
5
- import { checkCatalogsOption } from './chunk-LRTQXGJO.js';
4
+ import { parseSource, validate, OPFValidationError } from './chunk-WPKCWQ6W.js';
5
+ import { checkCatalogsOption } from './chunk-2CUCYENF.js';
6
6
 
7
7
  // src/deck-report.ts
8
8
  var DECK_FORMATS = ["json", "yaml", "markdown"];
@@ -1,5 +1,5 @@
1
- import { applyPatch, normalizePatch, walkPatch, toIdPointer, resolveIdPointer, parsePointer, readPointer, idToken, formatPointer, isIdToken } from './chunk-PAGVSTVF.js';
2
- import { isRecord, visitContentPayloads, promotedRegionKeys } from './chunk-LRTQXGJO.js';
1
+ import { applyPatch, normalizePatch, walkPatch, toIdPointer, resolveIdPointer, parsePointer, readPointer, idToken, formatPointer, isIdToken } from './chunk-WPKCWQ6W.js';
2
+ import { isRecord, visitContentPayloads, promotedRegionKeys } from './chunk-2CUCYENF.js';
3
3
 
4
4
  // src/ids.ts
5
5
  var INDEX_TOKEN = /^(0|[1-9][0-9]*)$/;
@@ -1,8 +1,8 @@
1
- import { defaultCatalogs } from './chunk-7XUEKIXH.js';
2
- import { localAssetSources, OPFApiError, parseSlideSelection, OPFExportError, asApiError, OPFImportError } from './chunk-TMREBZBQ.js';
3
- import { paginate } from './chunk-WJ4XTCOD.js';
4
- import { deckFormatOf, readDeckReport, stringify } from './chunk-OSM3LZ2Y.js';
5
- import { validate, OPFValidationError } from './chunk-PAGVSTVF.js';
1
+ import { defaultCatalogs } from './chunk-OAIAFXMS.js';
2
+ import { localAssetSources, OPFApiError, parseSlideSelection, OPFExportError, asApiError, OPFImportError } from './chunk-LLEXM7TQ.js';
3
+ import { paginate } from './chunk-KXKN3W5Z.js';
4
+ import { deckFormatOf, readDeckReport, stringify } from './chunk-BQUWRXTR.js';
5
+ import { validate, OPFValidationError } from './chunk-WPKCWQ6W.js';
6
6
  import { link, stat, readdir, lstat, readFile, open, unlink, mkdir, rename } from 'fs/promises';
7
7
  import path6 from 'path';
8
8
  import { readFileSync, statSync, realpathSync } from 'fs';
@@ -117,7 +117,7 @@ function localAssetProblems(deck, root) {
117
117
  }
118
118
  var RENDER_PACKAGE = "@openpresentation/opf-render";
119
119
  var PPTX_PACKAGE = "@openpresentation/opf-pptx";
120
- var PEER_RANGES = { [RENDER_PACKAGE]: "^0.27.0", [PPTX_PACKAGE]: "^0.27.0" };
120
+ var PEER_RANGES = { [RENDER_PACKAGE]: "^0.28.0", [PPTX_PACKAGE]: "^0.28.0" };
121
121
  var PPTX_TEXT_OPTIONS_FROM = "0.22.0";
122
122
  var numbers = (version) => version.replace(/[-+].*$/, "").split(".").map((part) => Number.parseInt(part, 10) || 0);
123
123
  function atLeast(version, minimum) {
@@ -1,4 +1,4 @@
1
- import { presentation } from './chunk-4ZM5G3XX.js';
1
+ import { presentation } from './chunk-5Q4IYLMW.js';
2
2
 
3
3
  // src/format.ts
4
4
  var OPFFormatError = class extends Error {
@@ -1,5 +1,5 @@
1
- import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-PAGVSTVF.js';
2
- import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-LRTQXGJO.js';
1
+ import { assertValid, resolveSlideScriptMeasurement, resolveDrawnFontFamilies, resolveSlideContext } from './chunk-WPKCWQ6W.js';
2
+ import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-2CUCYENF.js';
3
3
 
4
4
  // src/pagination.ts
5
5
  var OPFPaginationError = class extends Error {
@@ -108,7 +108,7 @@ function paginateSlide(input, options = {}) {
108
108
  let evaluations = 0;
109
109
  const { fonts, catalogs, minFontSize: _minFontSize, maxSlides: _maxSlides, reservedIds: _reservedIds, ...engineOptions } = options;
110
110
  const textMeasurement = fonts?.textMeasurement && options.presentation !== void 0 ? resolveSlideScriptMeasurement(options.presentation, sourceIndex, fonts.textMeasurement, { ...catalogs !== void 0 ? { catalogs } : {}, ...options.fontFamilies ? { fontFamilies: options.fontFamilies } : {} }) : fonts?.textMeasurement;
111
- const composeOptions = { ...engineOptions, ...textMeasurement ? { textMeasurement } : {} };
111
+ const composeOptions = { ...engineOptions, ...textMeasurement ? { textMeasurement } : {}, ...textMeasurement && engineOptions.fontFamilies ? { fontFamilies: resolveDrawnFontFamilies(engineOptions.fontFamilies, textMeasurement) } : {} };
112
112
  const presentationSlides = options.presentation?.slides;
113
113
  const slideCount = options.slideCount ?? (Array.isArray(presentationSlides) && presentationSlides.length ? presentationSlides.length : void 0);
114
114
  const logoContext = options.presentation !== void 0 ? { presentation: options.presentation, darkBackground: options.darkBackground === true } : {};
@@ -1,6 +1,6 @@
1
- import { OPFDataImportError, parseTabularData } from './chunk-JSHMFTSY.js';
2
- import { applyPatchWithInverse, validate, OPFValidationError } from './chunk-PAGVSTVF.js';
3
- import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, annotationText, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-LRTQXGJO.js';
1
+ import { OPFDataImportError, parseTabularData } from './chunk-N77N4AOD.js';
2
+ import { applyPatchWithInverse, validate, OPFValidationError } from './chunk-WPKCWQ6W.js';
3
+ import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, annotationText, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-2CUCYENF.js';
4
4
 
5
5
  // src/api-errors.ts
6
6
  var OPFApiError = class extends Error {
@@ -1,10 +1,10 @@
1
1
  import { NOT_CHECKED } from './chunk-RYZPBJLB.js';
2
- import { readMarkdown, parseSlideText, escapeInline, serializeRuns } from './chunk-353VBJ6K.js';
3
- import { fenceCode } from './chunk-EO3JWEO5.js';
4
- import { OPFMarkdownError, writeYaml, Ctx, readYamlMapping, csvField, scalarText } from './chunk-SYW4BCGZ.js';
5
- import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-ABFDFZIW.js';
6
- import { validate } from './chunk-PAGVSTVF.js';
7
- import { checkCatalogsOption } from './chunk-LRTQXGJO.js';
2
+ import { readMarkdown, parseSlideText, escapeInline, serializeRuns } from './chunk-PCU4XGKV.js';
3
+ import { fenceCode } from './chunk-P6PKYJTS.js';
4
+ import { OPFMarkdownError, writeYaml, Ctx, readYamlMapping, csvField, scalarText } from './chunk-SEZ4EPW6.js';
5
+ import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-TNUTRV6E.js';
6
+ import { validate } from './chunk-WPKCWQ6W.js';
7
+ import { checkCatalogsOption } from './chunk-2CUCYENF.js';
8
8
 
9
9
  // src/markdown/canon.ts
10
10
  var FORMAT_KEYS = FORMATTING;
@@ -1,4 +1,4 @@
1
- import { chartNumber } from './chunk-LRTQXGJO.js';
1
+ import { chartNumber } from './chunk-2CUCYENF.js';
2
2
 
3
3
  // src/data.ts
4
4
  var OPFDataImportError = class extends Error {
@@ -1,5 +1,5 @@
1
- import { OPFApiError } from './chunk-TMREBZBQ.js';
2
- import { CATALOG_SCHEMA } from './chunk-PAGVSTVF.js';
1
+ import { OPFApiError } from './chunk-LLEXM7TQ.js';
2
+ import { CATALOG_SCHEMA } from './chunk-WPKCWQ6W.js';
3
3
  import { CATALOG_SCHEMA as CATALOG_SCHEMA$1, gallery } from '@openpresentation/gallery';
4
4
 
5
5
  function galleryMismatch(declared, reads = CATALOG_SCHEMA) {
@@ -1,4 +1,4 @@
1
- import { runText } from './chunk-ABFDFZIW.js';
1
+ import { runText } from './chunk-TNUTRV6E.js';
2
2
 
3
3
  // src/convert/text-lines.ts
4
4
  var LIST_PREFIX = /^([ \t]*)(?:([-*•+]|\d{1,3}[.)])[ \t]+)?/;
@@ -1,8 +1,8 @@
1
- import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen } from './chunk-EO3JWEO5.js';
2
- import { Ctx, splitLines, lineRange, readYamlMapping, readCsv, DECIMAL } from './chunk-SYW4BCGZ.js';
3
- import { runText, isRecord, FORMATTING } from './chunk-ABFDFZIW.js';
4
- import { METRIC_KEYS, nearest, BLOCK_AS_VALUES, SLIDE_OPTION_KEYS, BLOCK_OPTION_KEYS } from './chunk-PAGVSTVF.js';
5
- import { PROMOTED_REGION_KEY } from './chunk-LRTQXGJO.js';
1
+ import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen } from './chunk-P6PKYJTS.js';
2
+ import { Ctx, splitLines, lineRange, readYamlMapping, readCsv, DECIMAL } from './chunk-SEZ4EPW6.js';
3
+ import { runText, isRecord, FORMATTING } from './chunk-TNUTRV6E.js';
4
+ import { METRIC_KEYS, nearest, BLOCK_AS_VALUES, SLIDE_OPTION_KEYS, BLOCK_OPTION_KEYS } from './chunk-WPKCWQ6W.js';
5
+ import { PROMOTED_REGION_KEY } from './chunk-2CUCYENF.js';
6
6
 
7
7
  // src/markdown/inline.ts
8
8
  var PUNCT = /[\p{P}\p{S}]/u;
@@ -1,5 +1,5 @@
1
- import { isRecord, same } from './chunk-ABFDFZIW.js';
2
- import { createLocator } from './chunk-PAGVSTVF.js';
1
+ import { isRecord, same } from './chunk-TNUTRV6E.js';
2
+ import { createLocator } from './chunk-WPKCWQ6W.js';
3
3
  import { parseDocument, isMap, isSeq, isScalar, YAMLMap, Scalar, stringify, visit } from 'yaml';
4
4
 
5
5
  var sentence = (text) => text.charAt(0).toUpperCase() + text.slice(1);
@@ -1,4 +1,4 @@
1
- import { validate } from './chunk-PAGVSTVF.js';
1
+ import { validate } from './chunk-WPKCWQ6W.js';
2
2
 
3
3
  // src/convert/shared.ts
4
4
  var CONTENT_KEYS = ["text", "items", "bullets", "image", "video", "chart", "table", "code", "metric", "quote", "timeline"];
@@ -1,4 +1,4 @@
1
- import { SOURCE_EXPLAIN, ruleDocumentation, findValidationRule, us } from './chunk-PAGVSTVF.js';
1
+ import { SOURCE_EXPLAIN, ruleDocumentation, findValidationRule, us } from './chunk-WPKCWQ6W.js';
2
2
 
3
3
  // src/finding-text-explain-util.ts
4
4
  var ex = (fix, problem, fixed) => ({ fix, problem, fixed });
@@ -1,5 +1,5 @@
1
- import { jsonEqual, formatPointer } from './chunk-PAGVSTVF.js';
2
- import { annotationText } from './chunk-LRTQXGJO.js';
1
+ import { jsonEqual, formatPointer } from './chunk-WPKCWQ6W.js';
2
+ import { annotationText } from './chunk-2CUCYENF.js';
3
3
 
4
4
  // src/diff-match.ts
5
5
  var DEFAULT_MATCH_THRESHOLD = 0.5;