@openpresentation/opf 0.18.4 → 0.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/browser.js +17 -19
- package/dist/{catalog-refs-BSfGELpt.d.ts → catalog-refs-CSHevLn1.d.ts} +1 -1
- package/dist/{chunk-IM337HP5.js → chunk-2AGWO7RM.js} +4 -5
- package/dist/{chunk-WHHLGDCQ.js → chunk-2XJUXMBS.js} +1 -1
- package/dist/{chunk-JCOSZTOI.js → chunk-32MHL3B3.js} +7 -2
- package/dist/{chunk-ECP7QPGK.js → chunk-4FBXVST6.js} +6 -6
- package/dist/{chunk-KA3ZPFVT.js → chunk-7QUAOKS6.js} +96 -40
- package/dist/{chunk-FO3WGS4R.js → chunk-BDXJYO6R.js} +25 -16
- package/dist/chunk-BYEIFHWS.js +16 -0
- package/dist/{chunk-K5EG3UMS.js → chunk-JMYM44I4.js} +50 -20
- package/dist/{chunk-L5YACLWK.js → chunk-L6RRLN6Q.js} +2 -2
- package/dist/{chunk-GVOLSWAJ.js → chunk-NZDWCYDI.js} +5 -5
- package/dist/{chunk-R7KIASS4.js → chunk-P6LMWUXV.js} +1 -1
- package/dist/{chunk-MSFE2HUK.js → chunk-RFJ5TR3V.js} +16 -13
- package/dist/{chunk-PNINP5IF.js → chunk-UA5EROLC.js} +1 -1
- package/dist/{chunk-MBU42S5Y.js → chunk-UAXSW6VV.js} +1237 -293
- package/dist/chunk-UJSAR6GF.js +181 -0
- package/dist/{chunk-2PEWUUBR.js → chunk-VEHLQVGQ.js} +381 -314
- package/dist/{chunk-ZCFSDSUX.js → chunk-W7G5LSXI.js} +1 -1
- package/dist/{chunk-TRELE6I6.js → chunk-ZU5EQ23T.js} +1 -1
- package/dist/{composition-C-OoqvAr.d.ts → composition-MFjGwuN_.d.ts} +395 -99
- package/dist/composition.d.ts +2 -2
- package/dist/composition.js +1 -2
- package/dist/{conversion-BxZbBd_0.d.ts → conversion-DDd1mdIj.d.ts} +11 -11
- package/dist/conversion-WHN4D4WH.js +19 -0
- package/dist/convert.d.ts +3 -3
- package/dist/convert.js +7 -9
- package/dist/data.d.ts +1 -1
- package/dist/data.js +2 -3
- package/dist/{deck-report-DiDf_Vew.d.ts → deck-report-DldBcTHe.d.ts} +3 -3
- package/dist/deck.d.ts +6 -6
- package/dist/deck.js +10 -12
- package/dist/diff.js +5 -7
- package/dist/docs.js +34 -22
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +27210 -20994
- package/dist/format.js +2 -2
- package/dist/index.d.ts +22 -21
- package/dist/index.js +23 -26
- package/dist/markdown.d.ts +4 -4
- package/dist/markdown.js +7 -9
- package/dist/node-engine.d.ts +27 -9
- package/dist/node-engine.js +22 -23
- package/dist/{pagination-BaUjDrTz.d.ts → pagination-BKsZIEcA.d.ts} +3 -3
- package/dist/pagination.d.ts +3 -3
- package/dist/pagination.js +4 -6
- package/dist/patch.js +4 -6
- package/dist/{presentation-81rNihF0.d.ts → presentation-B_e2Djga.d.ts} +35 -19
- package/dist/repo-readme.js +1 -1
- package/dist/schemas.d.ts +2 -18
- package/dist/schemas.js +1 -1
- package/dist/spec/README.md +12 -19
- package/dist/spec/reference/engine-vocabularies.json +1 -1
- package/dist/spec/schemas/catalog-index.schema.json +3 -3
- package/dist/spec/schemas/catalog-manifest.schema.json +1 -1
- package/dist/spec/schemas/chart-type.schema.json +2 -2
- package/dist/spec/schemas/language.schema.json +1 -1
- package/dist/spec/schemas/layout-preview-index.schema.json +25 -11
- package/dist/spec/schemas/layout.schema.json +212 -272
- package/dist/spec/schemas/opf.schema.json +63 -18
- package/dist/spec/schemas/social-platform.schema.json +1 -1
- package/dist/spec/schemas/theme.schema.json +60 -0
- package/dist/spec-files.d.ts +2 -2
- package/dist/spec-files.js +1 -1
- package/dist/types.d.ts +115 -40
- package/dist/{validation-types-PbGDrNUr.d.ts → validation-types-DtN8X_HZ.d.ts} +2 -2
- package/dist/validator-1d29Z3YY.d.ts +73 -0
- package/dist/validator.d.ts +6 -60
- package/dist/validator.js +3 -5
- package/dist/yaml.d.ts +4 -4
- package/dist/yaml.js +7 -9
- package/package.json +8 -11
- package/dist/catalog-schemas-CinPh5WA.d.ts +0 -12
- package/dist/catalog.d.ts +0 -91
- package/dist/catalog.js +0 -3
- package/dist/chunk-HXHOZ7AH.js +0 -4937
- package/dist/chunk-SPFV27O5.js +0 -210
- package/dist/chunk-TRDXRRQK.js +0 -17
- package/dist/chunk-WCG3THTD.js +0 -23712
- package/dist/conversion-SHYVL7FC.js +0 -21
- package/dist/spec/catalogs/audiences/academic.json +0 -24
- package/dist/spec/catalogs/audiences/all-hands.json +0 -25
- package/dist/spec/catalogs/audiences/board.json +0 -24
- package/dist/spec/catalogs/audiences/candidates.json +0 -23
- package/dist/spec/catalogs/audiences/customer.json +0 -25
- package/dist/spec/catalogs/audiences/engineering-team.json +0 -23
- package/dist/spec/catalogs/audiences/executive.json +0 -24
- package/dist/spec/catalogs/audiences/general-public.json +0 -25
- package/dist/spec/catalogs/audiences/index.json +0 -105
- package/dist/spec/catalogs/audiences/internal-team.json +0 -25
- package/dist/spec/catalogs/audiences/investor.json +0 -25
- package/dist/spec/catalogs/audiences/marketing.json +0 -25
- package/dist/spec/catalogs/audiences/media.json +0 -24
- package/dist/spec/catalogs/audiences/partner.json +0 -25
- package/dist/spec/catalogs/audiences/regulatory.json +0 -25
- package/dist/spec/catalogs/audiences/sales.json +0 -25
- package/dist/spec/catalogs/audiences/technical.json +0 -25
- package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +0 -21
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +0 -22
- package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +0 -22
- package/dist/spec/catalogs/chart-types/area.json +0 -20
- package/dist/spec/catalogs/chart-types/bar.json +0 -22
- package/dist/spec/catalogs/chart-types/box-and-whisker.json +0 -21
- package/dist/spec/catalogs/chart-types/column.json +0 -22
- package/dist/spec/catalogs/chart-types/combo.json +0 -37
- package/dist/spec/catalogs/chart-types/doughnut.json +0 -20
- package/dist/spec/catalogs/chart-types/filled-radar.json +0 -21
- package/dist/spec/catalogs/chart-types/funnel.json +0 -21
- package/dist/spec/catalogs/chart-types/histogram.json +0 -21
- package/dist/spec/catalogs/chart-types/index.json +0 -171
- package/dist/spec/catalogs/chart-types/line-with-markers.json +0 -21
- package/dist/spec/catalogs/chart-types/line.json +0 -20
- package/dist/spec/catalogs/chart-types/pareto.json +0 -22
- package/dist/spec/catalogs/chart-types/pie.json +0 -20
- package/dist/spec/catalogs/chart-types/radar-with-markers.json +0 -21
- package/dist/spec/catalogs/chart-types/radar.json +0 -21
- package/dist/spec/catalogs/chart-types/scatter.json +0 -21
- package/dist/spec/catalogs/chart-types/stacked-area.json +0 -21
- package/dist/spec/catalogs/chart-types/stacked-bar.json +0 -22
- package/dist/spec/catalogs/chart-types/stacked-column.json +0 -22
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +0 -22
- package/dist/spec/catalogs/chart-types/stacked-line.json +0 -21
- package/dist/spec/catalogs/chart-types/treemap.json +0 -21
- package/dist/spec/catalogs/chart-types/waterfall.json +0 -21
- package/dist/spec/catalogs/chart-types/world.json +0 -21
- package/dist/spec/catalogs/color-schemes/black-and-white.json +0 -26
- package/dist/spec/catalogs/color-schemes/bold-red.json +0 -26
- package/dist/spec/catalogs/color-schemes/boost.json +0 -26
- package/dist/spec/catalogs/color-schemes/burnt-orange.json +0 -26
- package/dist/spec/catalogs/color-schemes/cool-horizon.json +0 -26
- package/dist/spec/catalogs/color-schemes/corporate-blue.json +0 -26
- package/dist/spec/catalogs/color-schemes/deep-purple.json +0 -26
- package/dist/spec/catalogs/color-schemes/forest-green.json +0 -26
- package/dist/spec/catalogs/color-schemes/golden-yellow.json +0 -26
- package/dist/spec/catalogs/color-schemes/index.json +0 -79
- package/dist/spec/catalogs/color-schemes/luxury.json +0 -26
- package/dist/spec/catalogs/color-schemes/pastel-red.json +0 -26
- package/dist/spec/catalogs/color-schemes/slate-gray.json +0 -26
- package/dist/spec/catalogs/color-schemes/steel-blue.json +0 -26
- package/dist/spec/catalogs/color-schemes/vibes.json +0 -26
- package/dist/spec/catalogs/font-schemes/angsana-new.json +0 -15
- package/dist/spec/catalogs/font-schemes/aparajita.json +0 -16
- package/dist/spec/catalogs/font-schemes/aptos.json +0 -13
- package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +0 -15
- package/dist/spec/catalogs/font-schemes/arial.json +0 -13
- package/dist/spec/catalogs/font-schemes/batang.json +0 -15
- package/dist/spec/catalogs/font-schemes/bookman.json +0 -13
- package/dist/spec/catalogs/font-schemes/calibri.json +0 -13
- package/dist/spec/catalogs/font-schemes/century-schoolbook.json +0 -13
- package/dist/spec/catalogs/font-schemes/consolas.json +0 -14
- package/dist/spec/catalogs/font-schemes/constantia.json +0 -13
- package/dist/spec/catalogs/font-schemes/courier-new.json +0 -14
- package/dist/spec/catalogs/font-schemes/daunpenh.json +0 -15
- package/dist/spec/catalogs/font-schemes/david.json +0 -15
- package/dist/spec/catalogs/font-schemes/dilleniaupc.json +0 -15
- package/dist/spec/catalogs/font-schemes/fangsong.json +0 -15
- package/dist/spec/catalogs/font-schemes/garamond.json +0 -13
- package/dist/spec/catalogs/font-schemes/gautami.json +0 -15
- package/dist/spec/catalogs/font-schemes/georgia.json +0 -13
- package/dist/spec/catalogs/font-schemes/gisha.json +0 -16
- package/dist/spec/catalogs/font-schemes/grandview.json +0 -13
- package/dist/spec/catalogs/font-schemes/gungsuh.json +0 -15
- package/dist/spec/catalogs/font-schemes/impact.json +0 -13
- package/dist/spec/catalogs/font-schemes/index.json +0 -454
- package/dist/spec/catalogs/font-schemes/kalinga.json +0 -15
- package/dist/spec/catalogs/font-schemes/kartika.json +0 -15
- package/dist/spec/catalogs/font-schemes/khmer-ui.json +0 -15
- package/dist/spec/catalogs/font-schemes/latha.json +0 -15
- package/dist/spec/catalogs/font-schemes/lucida-sans.json +0 -13
- package/dist/spec/catalogs/font-schemes/malgun-gothic.json +0 -15
- package/dist/spec/catalogs/font-schemes/mangal.json +0 -17
- package/dist/spec/catalogs/font-schemes/meiryo.json +0 -15
- package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +0 -15
- package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +0 -18
- package/dist/spec/catalogs/font-schemes/mingliu.json +0 -15
- package/dist/spec/catalogs/font-schemes/miriam.json +0 -15
- package/dist/spec/catalogs/font-schemes/montserrat.json +0 -13
- package/dist/spec/catalogs/font-schemes/ms-mincho.json +0 -15
- package/dist/spec/catalogs/font-schemes/nirmala-ui.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +0 -16
- package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +0 -17
- package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +0 -16
- package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +0 -16
- package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +0 -18
- package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +0 -15
- package/dist/spec/catalogs/font-schemes/noto-sans.json +0 -18
- package/dist/spec/catalogs/font-schemes/nyala.json +0 -15
- package/dist/spec/catalogs/font-schemes/open-sans.json +0 -13
- package/dist/spec/catalogs/font-schemes/pmingliu.json +0 -15
- package/dist/spec/catalogs/font-schemes/poppins.json +0 -13
- package/dist/spec/catalogs/font-schemes/pt-serif.json +0 -13
- package/dist/spec/catalogs/font-schemes/raavi.json +0 -15
- package/dist/spec/catalogs/font-schemes/raleway.json +0 -13
- package/dist/spec/catalogs/font-schemes/roboto.json +0 -13
- package/dist/spec/catalogs/font-schemes/rockwell.json +0 -13
- package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +0 -17
- package/dist/spec/catalogs/font-schemes/seaford.json +0 -13
- package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +0 -13
- package/dist/spec/catalogs/font-schemes/segoe-ui.json +0 -13
- package/dist/spec/catalogs/font-schemes/shonar-bangla.json +0 -16
- package/dist/spec/catalogs/font-schemes/shruti.json +0 -15
- package/dist/spec/catalogs/font-schemes/simsun.json +0 -15
- package/dist/spec/catalogs/font-schemes/skeena.json +0 -13
- package/dist/spec/catalogs/font-schemes/sylfaen.json +0 -16
- package/dist/spec/catalogs/font-schemes/tahoma.json +0 -13
- package/dist/spec/catalogs/font-schemes/tenorite.json +0 -13
- package/dist/spec/catalogs/font-schemes/times-new-roman.json +0 -13
- package/dist/spec/catalogs/font-schemes/traditional-arabic.json +0 -17
- package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +0 -13
- package/dist/spec/catalogs/font-schemes/tunga.json +0 -15
- package/dist/spec/catalogs/font-schemes/verdana.json +0 -13
- package/dist/spec/catalogs/font-schemes/vrinda.json +0 -15
- package/dist/spec/catalogs/font-schemes/yu-gothic.json +0 -15
- package/dist/spec/catalogs/languages/afrikaans.json +0 -12
- package/dist/spec/catalogs/languages/albanian.json +0 -12
- package/dist/spec/catalogs/languages/amharic.json +0 -12
- package/dist/spec/catalogs/languages/arabic.json +0 -12
- package/dist/spec/catalogs/languages/armenian.json +0 -12
- package/dist/spec/catalogs/languages/aymara.json +0 -12
- package/dist/spec/catalogs/languages/azerbaijani.json +0 -12
- package/dist/spec/catalogs/languages/bengali.json +0 -12
- package/dist/spec/catalogs/languages/berber-latin.json +0 -12
- package/dist/spec/catalogs/languages/bosnian-latin.json +0 -12
- package/dist/spec/catalogs/languages/bulgarian.json +0 -12
- package/dist/spec/catalogs/languages/catalan.json +0 -12
- package/dist/spec/catalogs/languages/cebuano.json +0 -12
- package/dist/spec/catalogs/languages/chinese-simplified.json +0 -12
- package/dist/spec/catalogs/languages/chinese-traditional.json +0 -12
- package/dist/spec/catalogs/languages/chittagonian.json +0 -12
- package/dist/spec/catalogs/languages/croatian.json +0 -12
- package/dist/spec/catalogs/languages/czech.json +0 -12
- package/dist/spec/catalogs/languages/danish.json +0 -12
- package/dist/spec/catalogs/languages/dutch.json +0 -12
- package/dist/spec/catalogs/languages/english-au.json +0 -12
- package/dist/spec/catalogs/languages/english-ca.json +0 -12
- package/dist/spec/catalogs/languages/english-gb.json +0 -12
- package/dist/spec/catalogs/languages/english-in.json +0 -12
- package/dist/spec/catalogs/languages/english-us.json +0 -12
- package/dist/spec/catalogs/languages/english.json +0 -12
- package/dist/spec/catalogs/languages/estonian.json +0 -12
- package/dist/spec/catalogs/languages/filipino.json +0 -12
- package/dist/spec/catalogs/languages/finnish.json +0 -12
- package/dist/spec/catalogs/languages/french.json +0 -12
- package/dist/spec/catalogs/languages/fulfulde.json +0 -12
- package/dist/spec/catalogs/languages/galician.json +0 -12
- package/dist/spec/catalogs/languages/georgian.json +0 -12
- package/dist/spec/catalogs/languages/german.json +0 -12
- package/dist/spec/catalogs/languages/greek.json +0 -12
- package/dist/spec/catalogs/languages/gujarati.json +0 -12
- package/dist/spec/catalogs/languages/hausa.json +0 -12
- package/dist/spec/catalogs/languages/hebrew.json +0 -12
- package/dist/spec/catalogs/languages/hindi.json +0 -12
- package/dist/spec/catalogs/languages/hungarian.json +0 -12
- package/dist/spec/catalogs/languages/igbo.json +0 -12
- package/dist/spec/catalogs/languages/index.json +0 -567
- package/dist/spec/catalogs/languages/indonesian.json +0 -12
- package/dist/spec/catalogs/languages/italian.json +0 -12
- package/dist/spec/catalogs/languages/japanese.json +0 -12
- package/dist/spec/catalogs/languages/kannada.json +0 -12
- package/dist/spec/catalogs/languages/kazakh.json +0 -12
- package/dist/spec/catalogs/languages/khmer.json +0 -12
- package/dist/spec/catalogs/languages/kinyarwanda.json +0 -12
- package/dist/spec/catalogs/languages/korean.json +0 -12
- package/dist/spec/catalogs/languages/kurmanji.json +0 -12
- package/dist/spec/catalogs/languages/latvian.json +0 -12
- package/dist/spec/catalogs/languages/lithuanian.json +0 -12
- package/dist/spec/catalogs/languages/macedonian.json +0 -12
- package/dist/spec/catalogs/languages/malagasy.json +0 -12
- package/dist/spec/catalogs/languages/malay.json +0 -12
- package/dist/spec/catalogs/languages/malayalam.json +0 -12
- package/dist/spec/catalogs/languages/maori.json +0 -12
- package/dist/spec/catalogs/languages/marathi.json +0 -12
- package/dist/spec/catalogs/languages/mongolian.json +0 -12
- package/dist/spec/catalogs/languages/nepali.json +0 -12
- package/dist/spec/catalogs/languages/norwegian.json +0 -12
- package/dist/spec/catalogs/languages/odia.json +0 -12
- package/dist/spec/catalogs/languages/oromo.json +0 -12
- package/dist/spec/catalogs/languages/pashto.json +0 -12
- package/dist/spec/catalogs/languages/persian.json +0 -12
- package/dist/spec/catalogs/languages/polish.json +0 -12
- package/dist/spec/catalogs/languages/portuguese.json +0 -12
- package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +0 -12
- package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +0 -12
- package/dist/spec/catalogs/languages/romanian.json +0 -12
- package/dist/spec/catalogs/languages/russian.json +0 -12
- package/dist/spec/catalogs/languages/serbian-cyrillic.json +0 -12
- package/dist/spec/catalogs/languages/serbian-latin.json +0 -12
- package/dist/spec/catalogs/languages/shona.json +0 -12
- package/dist/spec/catalogs/languages/slovak.json +0 -12
- package/dist/spec/catalogs/languages/slovenian.json +0 -12
- package/dist/spec/catalogs/languages/somali.json +0 -12
- package/dist/spec/catalogs/languages/spanish.json +0 -12
- package/dist/spec/catalogs/languages/swahili.json +0 -12
- package/dist/spec/catalogs/languages/swedish.json +0 -12
- package/dist/spec/catalogs/languages/tagalog.json +0 -12
- package/dist/spec/catalogs/languages/tajik.json +0 -12
- package/dist/spec/catalogs/languages/tamil.json +0 -12
- package/dist/spec/catalogs/languages/telugu.json +0 -12
- package/dist/spec/catalogs/languages/thai.json +0 -12
- package/dist/spec/catalogs/languages/turkish.json +0 -12
- package/dist/spec/catalogs/languages/ukrainian.json +0 -12
- package/dist/spec/catalogs/languages/urdu.json +0 -12
- package/dist/spec/catalogs/languages/uzbek-latin.json +0 -12
- package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +0 -12
- package/dist/spec/catalogs/languages/xhosa.json +0 -12
- package/dist/spec/catalogs/languages/yoruba.json +0 -12
- package/dist/spec/catalogs/languages/zulu.json +0 -12
- package/dist/spec/catalogs/layouts/action-plan.json +0 -29
- package/dist/spec/catalogs/layouts/agenda.json +0 -28
- package/dist/spec/catalogs/layouts/appendix-index.json +0 -30
- package/dist/spec/catalogs/layouts/architecture-stack.json +0 -29
- package/dist/spec/catalogs/layouts/assumptions-dependencies.json +0 -29
- package/dist/spec/catalogs/layouts/before-after.json +0 -35
- package/dist/spec/catalogs/layouts/benchmark-target-table.json +0 -29
- package/dist/spec/catalogs/layouts/blank.json +0 -16
- package/dist/spec/catalogs/layouts/bullet-list.json +0 -32
- package/dist/spec/catalogs/layouts/business-model-canvas.json +0 -94
- package/dist/spec/catalogs/layouts/capability-map.json +0 -80
- package/dist/spec/catalogs/layouts/case-study.json +0 -29
- package/dist/spec/catalogs/layouts/chapter-recap.json +0 -28
- package/dist/spec/catalogs/layouts/chart-1x-title-center.json +0 -30
- package/dist/spec/catalogs/layouts/chart-1x.json +0 -34
- package/dist/spec/catalogs/layouts/chart-2x-title-center.json +0 -36
- package/dist/spec/catalogs/layouts/chart-2x-vertical-title-left.json +0 -37
- package/dist/spec/catalogs/layouts/chart-2x.json +0 -65
- package/dist/spec/catalogs/layouts/chart-3x-bottom-vertical-title-left.json +0 -52
- package/dist/spec/catalogs/layouts/chart-3x-left-title-center.json +0 -51
- package/dist/spec/catalogs/layouts/chart-3x-left.json +0 -46
- package/dist/spec/catalogs/layouts/chart-3x-right-title-center.json +0 -51
- package/dist/spec/catalogs/layouts/chart-3x-right.json +0 -46
- package/dist/spec/catalogs/layouts/chart-3x-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/chart-3x-top-vertical-title-left.json +0 -52
- package/dist/spec/catalogs/layouts/chart-3x.json +0 -83
- package/dist/spec/catalogs/layouts/circular-lifecycle.json +0 -29
- package/dist/spec/catalogs/layouts/code-1x.json +0 -29
- package/dist/spec/catalogs/layouts/comparison.json +0 -35
- package/dist/spec/catalogs/layouts/competitive-landscape.json +0 -30
- package/dist/spec/catalogs/layouts/customer-journey.json +0 -30
- package/dist/spec/catalogs/layouts/customer-logos.json +0 -32
- package/dist/spec/catalogs/layouts/dashboard.json +0 -67
- package/dist/spec/catalogs/layouts/data-visualization.json +0 -39
- package/dist/spec/catalogs/layouts/decision-tree.json +0 -30
- package/dist/spec/catalogs/layouts/detailed-data-table.json +0 -35
- package/dist/spec/catalogs/layouts/ecosystem-map.json +0 -30
- package/dist/spec/catalogs/layouts/executive-decision.json +0 -32
- package/dist/spec/catalogs/layouts/executive-summary.json +0 -32
- package/dist/spec/catalogs/layouts/extract/canonical.json +0 -575
- package/dist/spec/catalogs/layouts/faq.json +0 -29
- package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +0 -29
- package/dist/spec/catalogs/layouts/forecast-scenario.json +0 -39
- package/dist/spec/catalogs/layouts/funnel-pyramid.json +0 -32
- package/dist/spec/catalogs/layouts/gantt-project-plan.json +0 -32
- package/dist/spec/catalogs/layouts/geographic-map.json +0 -30
- package/dist/spec/catalogs/layouts/heatmap-cohort.json +0 -32
- package/dist/spec/catalogs/layouts/hub-and-spoke.json +0 -29
- package/dist/spec/catalogs/layouts/icon-grid.json +0 -30
- package/dist/spec/catalogs/layouts/image-1x-crop-title-center.json +0 -32
- package/dist/spec/catalogs/layouts/image-1x-crop-title-left.json +0 -32
- package/dist/spec/catalogs/layouts/image-1x-crop.json +0 -27
- package/dist/spec/catalogs/layouts/image-1x-fit-title-center.json +0 -32
- package/dist/spec/catalogs/layouts/image-1x.json +0 -32
- package/dist/spec/catalogs/layouts/image-2x-crop-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/image-2x-crop-vertical-title-left.json +0 -39
- package/dist/spec/catalogs/layouts/image-2x-crop-vertical.json +0 -34
- package/dist/spec/catalogs/layouts/image-2x-crop.json +0 -33
- package/dist/spec/catalogs/layouts/image-2x-fit-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/image-2x-fit-vertical-title-left.json +0 -39
- package/dist/spec/catalogs/layouts/image-2x-fit-vertical.json +0 -34
- package/dist/spec/catalogs/layouts/image-2x.json +0 -63
- package/dist/spec/catalogs/layouts/image-3x-crop-title-center.json +0 -41
- package/dist/spec/catalogs/layouts/image-3x-crop-vertical-title-left.json +0 -42
- package/dist/spec/catalogs/layouts/image-3x-crop-vertical.json +0 -37
- package/dist/spec/catalogs/layouts/image-3x-crop.json +0 -36
- package/dist/spec/catalogs/layouts/image-3x-fit-title-center.json +0 -41
- package/dist/spec/catalogs/layouts/image-3x-fit-vertical-title-left.json +0 -42
- package/dist/spec/catalogs/layouts/image-3x-fit-vertical.json +0 -37
- package/dist/spec/catalogs/layouts/image-3x-fit.json +0 -36
- package/dist/spec/catalogs/layouts/image-3x.json +0 -81
- package/dist/spec/catalogs/layouts/image-focus.json +0 -30
- package/dist/spec/catalogs/layouts/image-only-1x-crop-title-center.json +0 -31
- package/dist/spec/catalogs/layouts/image-only-1x-fit-title-center.json +0 -31
- package/dist/spec/catalogs/layouts/image-only-2x-crop-title-center.json +0 -37
- package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical-title-left.json +0 -38
- package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical.json +0 -33
- package/dist/spec/catalogs/layouts/image-only-2x-fit-title-center.json +0 -37
- package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical-title-left.json +0 -38
- package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical.json +0 -33
- package/dist/spec/catalogs/layouts/image-only-3x-crop-title-center.json +0 -40
- package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical-title-left.json +0 -41
- package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical.json +0 -36
- package/dist/spec/catalogs/layouts/image-only-3x-crop.json +0 -35
- package/dist/spec/catalogs/layouts/image-only-3x-fit-title-center.json +0 -40
- package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical-title-left.json +0 -41
- package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical.json +0 -36
- package/dist/spec/catalogs/layouts/image-only-3x-fit.json +0 -35
- package/dist/spec/catalogs/layouts/index.json +0 -1399
- package/dist/spec/catalogs/layouts/key-takeaway.json +0 -25
- package/dist/spec/catalogs/layouts/kpi-scorecard.json +0 -83
- package/dist/spec/catalogs/layouts/list-1x-box-title-center.json +0 -32
- package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-center.json +0 -33
- package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-left.json +0 -33
- package/dist/spec/catalogs/layouts/list-1x-box-vertical.json +0 -28
- package/dist/spec/catalogs/layouts/list-1x-box.json +0 -27
- package/dist/spec/catalogs/layouts/list-1x-itemimage-title-center.json +0 -32
- package/dist/spec/catalogs/layouts/list-1x-itemimage-vertical-title-center.json +0 -33
- package/dist/spec/catalogs/layouts/list-1x-title-center.json +0 -31
- package/dist/spec/catalogs/layouts/list-1x-vertical-title-center.json +0 -32
- package/dist/spec/catalogs/layouts/list-1x.json +0 -29
- package/dist/spec/catalogs/layouts/list-2x-box-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-left.json +0 -39
- package/dist/spec/catalogs/layouts/list-2x-box-vertical.json +0 -34
- package/dist/spec/catalogs/layouts/list-2x-box.json +0 -33
- package/dist/spec/catalogs/layouts/list-2x-itemimage-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-left.json +0 -39
- package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical.json +0 -34
- package/dist/spec/catalogs/layouts/list-2x-title-center.json +0 -37
- package/dist/spec/catalogs/layouts/list-2x-vertical-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/list-2x-vertical-title-left.json +0 -38
- package/dist/spec/catalogs/layouts/list-2x-vertical.json +0 -33
- package/dist/spec/catalogs/layouts/list-2x.json +0 -35
- package/dist/spec/catalogs/layouts/list-3x-box-title-center.json +0 -41
- package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-center.json +0 -42
- package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-left.json +0 -42
- package/dist/spec/catalogs/layouts/list-3x-box-vertical.json +0 -37
- package/dist/spec/catalogs/layouts/list-3x-box.json +0 -36
- package/dist/spec/catalogs/layouts/list-3x-itemimage-title-center.json +0 -41
- package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-center.json +0 -42
- package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-left.json +0 -42
- package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical.json +0 -37
- package/dist/spec/catalogs/layouts/list-3x-itemimage.json +0 -36
- package/dist/spec/catalogs/layouts/list-3x-title-center.json +0 -40
- package/dist/spec/catalogs/layouts/list-3x-vertical-title-center.json +0 -41
- package/dist/spec/catalogs/layouts/list-3x-vertical-title-left.json +0 -41
- package/dist/spec/catalogs/layouts/list-3x-vertical.json +0 -36
- package/dist/spec/catalogs/layouts/list-3x.json +0 -38
- package/dist/spec/catalogs/layouts/list-4x-box-title-center.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-center.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-left.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-box-vertical.json +0 -40
- package/dist/spec/catalogs/layouts/list-4x-box.json +0 -40
- package/dist/spec/catalogs/layouts/list-4x-itemimage-title-center.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-center.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-left.json +0 -45
- package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical.json +0 -40
- package/dist/spec/catalogs/layouts/list-4x-title-center.json +0 -44
- package/dist/spec/catalogs/layouts/list-4x-vertical-title-center.json +0 -44
- package/dist/spec/catalogs/layouts/list-4x-vertical-title-left.json +0 -44
- package/dist/spec/catalogs/layouts/list-4x-vertical.json +0 -39
- package/dist/spec/catalogs/layouts/list-4x.json +0 -42
- package/dist/spec/catalogs/layouts/list-5x-box-title-center.json +0 -48
- package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-center.json +0 -50
- package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-left.json +0 -50
- package/dist/spec/catalogs/layouts/list-5x-box-vertical.json +0 -45
- package/dist/spec/catalogs/layouts/list-5x-box.json +0 -43
- package/dist/spec/catalogs/layouts/list-5x-itemimage-title-center.json +0 -48
- package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-center.json +0 -48
- package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-left.json +0 -48
- package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical.json +0 -43
- package/dist/spec/catalogs/layouts/list-5x-title-center.json +0 -47
- package/dist/spec/catalogs/layouts/list-5x-vertical-title-center.json +0 -47
- package/dist/spec/catalogs/layouts/list-5x-vertical-title-left.json +0 -47
- package/dist/spec/catalogs/layouts/list-5x-vertical.json +0 -42
- package/dist/spec/catalogs/layouts/list-5x.json +0 -45
- package/dist/spec/catalogs/layouts/list-6x-box-title-center.json +0 -51
- package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-center.json +0 -53
- package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-left.json +0 -53
- package/dist/spec/catalogs/layouts/list-6x-box-vertical.json +0 -48
- package/dist/spec/catalogs/layouts/list-6x-box.json +0 -46
- package/dist/spec/catalogs/layouts/list-6x-itemimage-title-center.json +0 -51
- package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-center.json +0 -51
- package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-left.json +0 -51
- package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical.json +0 -46
- package/dist/spec/catalogs/layouts/list-6x-title-center.json +0 -50
- package/dist/spec/catalogs/layouts/list-6x-vertical-title-center.json +0 -50
- package/dist/spec/catalogs/layouts/list-6x-vertical-title-left.json +0 -50
- package/dist/spec/catalogs/layouts/list-6x-vertical.json +0 -45
- package/dist/spec/catalogs/layouts/list-6x.json +0 -48
- package/dist/spec/catalogs/layouts/logic-tree.json +0 -98
- package/dist/spec/catalogs/layouts/market-size.json +0 -53
- package/dist/spec/catalogs/layouts/matrix-quadrant.json +0 -42
- package/dist/spec/catalogs/layouts/media-1x.json +0 -29
- package/dist/spec/catalogs/layouts/network-dependency-map.json +0 -30
- package/dist/spec/catalogs/layouts/number-1x-box-title-center.json +0 -30
- package/dist/spec/catalogs/layouts/number-1x-box.json +0 -25
- package/dist/spec/catalogs/layouts/number-1x-title-center.json +0 -29
- package/dist/spec/catalogs/layouts/number-1x.json +0 -28
- package/dist/spec/catalogs/layouts/number-2x-box-title-center.json +0 -36
- package/dist/spec/catalogs/layouts/number-2x-box.json +0 -31
- package/dist/spec/catalogs/layouts/number-2x-title-center.json +0 -35
- package/dist/spec/catalogs/layouts/number-2x.json +0 -34
- package/dist/spec/catalogs/layouts/number-3x-box-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/number-3x-box.json +0 -34
- package/dist/spec/catalogs/layouts/number-3x-title-center.json +0 -38
- package/dist/spec/catalogs/layouts/number-3x.json +0 -37
- package/dist/spec/catalogs/layouts/number-4x-box-title-center.json +0 -43
- package/dist/spec/catalogs/layouts/number-4x-box.json +0 -38
- package/dist/spec/catalogs/layouts/number-4x-title-center.json +0 -42
- package/dist/spec/catalogs/layouts/number-4x.json +0 -41
- package/dist/spec/catalogs/layouts/number-5x-box-title-center.json +0 -46
- package/dist/spec/catalogs/layouts/number-5x-box.json +0 -41
- package/dist/spec/catalogs/layouts/number-5x-title-center.json +0 -45
- package/dist/spec/catalogs/layouts/number-5x.json +0 -44
- package/dist/spec/catalogs/layouts/number-6x-box-title-center.json +0 -49
- package/dist/spec/catalogs/layouts/number-6x-box.json +0 -44
- package/dist/spec/catalogs/layouts/number-6x-title-center.json +0 -48
- package/dist/spec/catalogs/layouts/number-6x.json +0 -47
- package/dist/spec/catalogs/layouts/one-column-explainer.json +0 -29
- package/dist/spec/catalogs/layouts/org-chart.json +0 -86
- package/dist/spec/catalogs/layouts/persona-grid.json +0 -30
- package/dist/spec/catalogs/layouts/photo-grid.json +0 -43
- package/dist/spec/catalogs/layouts/pricing-table.json +0 -29
- package/dist/spec/catalogs/layouts/process-flow.json +0 -29
- package/dist/spec/catalogs/layouts/product-feature.json +0 -30
- package/dist/spec/catalogs/layouts/pros-cons.json +0 -35
- package/dist/spec/catalogs/layouts/qa-discussion.json +0 -30
- package/dist/spec/catalogs/layouts/quote-1x.json +0 -23
- package/dist/spec/catalogs/layouts/quote-highlight.json +0 -29
- package/dist/spec/catalogs/layouts/raci-matrix.json +0 -29
- package/dist/spec/catalogs/layouts/risk-heatmap.json +0 -29
- package/dist/spec/catalogs/layouts/roadmap.json +0 -29
- package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +0 -30
- package/dist/spec/catalogs/layouts/section-divider.json +0 -28
- package/dist/spec/catalogs/layouts/single-message-statement.json +0 -25
- package/dist/spec/catalogs/layouts/stats-metrics.json +0 -39
- package/dist/spec/catalogs/layouts/status-rag.json +0 -29
- package/dist/spec/catalogs/layouts/swimlane-process.json +0 -30
- package/dist/spec/catalogs/layouts/swot-analysis.json +0 -42
- package/dist/spec/catalogs/layouts/table-1x.json +0 -29
- package/dist/spec/catalogs/layouts/team-bio.json +0 -30
- package/dist/spec/catalogs/layouts/testimonial-grid.json +0 -38
- package/dist/spec/catalogs/layouts/text-1x-box-title-center.json +0 -31
- package/dist/spec/catalogs/layouts/text-1x-box-title-left.json +0 -31
- package/dist/spec/catalogs/layouts/text-1x-center-box-title-center.json +0 -31
- package/dist/spec/catalogs/layouts/text-1x-center-box-title-left.json +0 -31
- package/dist/spec/catalogs/layouts/text-1x-center-box.json +0 -26
- package/dist/spec/catalogs/layouts/text-1x-center-title-center.json +0 -30
- package/dist/spec/catalogs/layouts/text-1x-center-title-left.json +0 -30
- package/dist/spec/catalogs/layouts/text-1x-center.json +0 -25
- package/dist/spec/catalogs/layouts/text-1x-left-box.json +0 -26
- package/dist/spec/catalogs/layouts/text-1x-title-center.json +0 -30
- package/dist/spec/catalogs/layouts/text-1x.json +0 -23
- package/dist/spec/catalogs/layouts/text-2x-box-title-center.json +0 -37
- package/dist/spec/catalogs/layouts/text-2x-box-vertical-title-left.json +0 -37
- package/dist/spec/catalogs/layouts/text-2x-center-box-title-center.json +0 -37
- package/dist/spec/catalogs/layouts/text-2x-center-box-vertical-title-left.json +0 -37
- package/dist/spec/catalogs/layouts/text-2x-center-box.json +0 -32
- package/dist/spec/catalogs/layouts/text-2x-center-title-center.json +0 -36
- package/dist/spec/catalogs/layouts/text-2x-center-vertical-title-left.json +0 -36
- package/dist/spec/catalogs/layouts/text-2x-center.json +0 -31
- package/dist/spec/catalogs/layouts/text-2x-left-box.json +0 -32
- package/dist/spec/catalogs/layouts/text-2x-title-center.json +0 -36
- package/dist/spec/catalogs/layouts/text-2x-vertical-title-left.json +0 -36
- package/dist/spec/catalogs/layouts/text-2x.json +0 -29
- package/dist/spec/catalogs/layouts/text-3x-box-title-center.json +0 -40
- package/dist/spec/catalogs/layouts/text-3x-box-vertical-title-left.json +0 -41
- package/dist/spec/catalogs/layouts/text-3x-center-box-title-center.json +0 -40
- package/dist/spec/catalogs/layouts/text-3x-center-box-vertical-title-left.json +0 -41
- package/dist/spec/catalogs/layouts/text-3x-center-box.json +0 -35
- package/dist/spec/catalogs/layouts/text-3x-center-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/text-3x-center-vertical-title-left.json +0 -40
- package/dist/spec/catalogs/layouts/text-3x-center.json +0 -34
- package/dist/spec/catalogs/layouts/text-3x-left-box.json +0 -35
- package/dist/spec/catalogs/layouts/text-3x-left.json +0 -34
- package/dist/spec/catalogs/layouts/text-3x-title-center.json +0 -39
- package/dist/spec/catalogs/layouts/text-3x-vertical-title-left.json +0 -40
- package/dist/spec/catalogs/layouts/text-3x.json +0 -32
- package/dist/spec/catalogs/layouts/thank-you-cta.json +0 -28
- package/dist/spec/catalogs/layouts/three-column.json +0 -39
- package/dist/spec/catalogs/layouts/timeline-1x.json +0 -23
- package/dist/spec/catalogs/layouts/timeline.json +0 -32
- package/dist/spec/catalogs/layouts/title-center-box.json +0 -27
- package/dist/spec/catalogs/layouts/title-center-image-bottom.json +0 -34
- package/dist/spec/catalogs/layouts/title-center-image-top.json +0 -34
- package/dist/spec/catalogs/layouts/title-center.json +0 -26
- package/dist/spec/catalogs/layouts/title-left-image-bottom.json +0 -34
- package/dist/spec/catalogs/layouts/title-left-image-left.json +0 -34
- package/dist/spec/catalogs/layouts/title-left-image-right.json +0 -34
- package/dist/spec/catalogs/layouts/title-left-image-top.json +0 -34
- package/dist/spec/catalogs/layouts/title-slide.json +0 -28
- package/dist/spec/catalogs/layouts/title-subtitle.json +0 -23
- package/dist/spec/catalogs/layouts/title.json +0 -20
- package/dist/spec/catalogs/layouts/two-column.json +0 -36
- package/dist/spec/catalogs/layouts/venn-overlap.json +0 -29
- package/dist/spec/catalogs/layouts/waterfall-bridge.json +0 -39
- package/dist/spec/catalogs/layouts/wheel-radial.json +0 -29
- package/dist/spec/catalogs/manifest.json +0 -111
- package/dist/spec/catalogs/narratives/board-meeting.json +0 -192
- package/dist/spec/catalogs/narratives/business-narrative.json +0 -87
- package/dist/spec/catalogs/narratives/business-review.json +0 -119
- package/dist/spec/catalogs/narratives/capacity-planning.json +0 -88
- package/dist/spec/catalogs/narratives/challenge-resolution.json +0 -80
- package/dist/spec/catalogs/narratives/change-story.json +0 -64
- package/dist/spec/catalogs/narratives/classic-story.json +0 -78
- package/dist/spec/catalogs/narratives/company-intro.json +0 -96
- package/dist/spec/catalogs/narratives/conference-talk.json +0 -54
- package/dist/spec/catalogs/narratives/data-story.json +0 -65
- package/dist/spec/catalogs/narratives/early-startup-pitch.json +0 -119
- package/dist/spec/catalogs/narratives/educate.json +0 -95
- package/dist/spec/catalogs/narratives/employee-review.json +0 -87
- package/dist/spec/catalogs/narratives/failure-analysis.json +0 -104
- package/dist/spec/catalogs/narratives/focus.json +0 -120
- package/dist/spec/catalogs/narratives/golden-circle.json +0 -50
- package/dist/spec/catalogs/narratives/heros-journey.json +0 -64
- package/dist/spec/catalogs/narratives/index.json +0 -1041
- package/dist/spec/catalogs/narratives/innovation.json +0 -96
- package/dist/spec/catalogs/narratives/justice.json +0 -112
- package/dist/spec/catalogs/narratives/marketing-strategy.json +0 -111
- package/dist/spec/catalogs/narratives/performance-improvement-plan.json +0 -87
- package/dist/spec/catalogs/narratives/performance-review.json +0 -111
- package/dist/spec/catalogs/narratives/persuade.json +0 -94
- package/dist/spec/catalogs/narratives/persuasive-sales.json +0 -87
- package/dist/spec/catalogs/narratives/pitch-deck.json +0 -107
- package/dist/spec/catalogs/narratives/problem-solution.json +0 -61
- package/dist/spec/catalogs/narratives/product-launch.json +0 -104
- package/dist/spec/catalogs/narratives/project-proposal.json +0 -104
- package/dist/spec/catalogs/narratives/pyramid-principle.json +0 -48
- package/dist/spec/catalogs/narratives/qbr.json +0 -85
- package/dist/spec/catalogs/narratives/rags-to-riches.json +0 -80
- package/dist/spec/catalogs/narratives/reveal.json +0 -87
- package/dist/spec/catalogs/narratives/scqa.json +0 -55
- package/dist/spec/catalogs/narratives/situation-complication-resolution.json +0 -56
- package/dist/spec/catalogs/narratives/sparkline.json +0 -56
- package/dist/spec/catalogs/narratives/star-method.json +0 -56
- package/dist/spec/catalogs/narratives/status-update.json +0 -72
- package/dist/spec/catalogs/narratives/strategic-advisory.json +0 -85
- package/dist/spec/catalogs/narratives/strategic-narrative.json +0 -61
- package/dist/spec/catalogs/narratives/survey-analysis.json +0 -104
- package/dist/spec/catalogs/narratives/survival-story.json +0 -103
- package/dist/spec/catalogs/narratives/transformation-arc.json +0 -50
- package/dist/spec/catalogs/narratives/trend-analysis.json +0 -79
- package/dist/spec/catalogs/narratives/underdog-victory.json +0 -87
- package/dist/spec/catalogs/narratives/venture-pitch.json +0 -109
- package/dist/spec/catalogs/narratives/vision-roadmap.json +0 -65
- package/dist/spec/catalogs/narratives/weekly-progress.json +0 -103
- package/dist/spec/catalogs/narratives/what-so-what-now-what.json +0 -48
- package/dist/spec/catalogs/purposes/align.json +0 -16
- package/dist/spec/catalogs/purposes/decide.json +0 -16
- package/dist/spec/catalogs/purposes/educate.json +0 -16
- package/dist/spec/catalogs/purposes/index.json +0 -63
- package/dist/spec/catalogs/purposes/inform.json +0 -16
- package/dist/spec/catalogs/purposes/persuade.json +0 -16
- package/dist/spec/catalogs/purposes/pitch.json +0 -16
- package/dist/spec/catalogs/purposes/plan.json +0 -16
- package/dist/spec/catalogs/purposes/report.json +0 -16
- package/dist/spec/catalogs/purposes/sell.json +0 -16
- package/dist/spec/catalogs/social-platforms/bluesky.json +0 -14
- package/dist/spec/catalogs/social-platforms/facebook.json +0 -14
- package/dist/spec/catalogs/social-platforms/github.json +0 -15
- package/dist/spec/catalogs/social-platforms/index.json +0 -69
- package/dist/spec/catalogs/social-platforms/instagram.json +0 -13
- package/dist/spec/catalogs/social-platforms/linkedin.json +0 -15
- package/dist/spec/catalogs/social-platforms/mastodon.json +0 -14
- package/dist/spec/catalogs/social-platforms/threads.json +0 -13
- package/dist/spec/catalogs/social-platforms/tiktok.json +0 -14
- package/dist/spec/catalogs/social-platforms/x.json +0 -14
- package/dist/spec/catalogs/social-platforms/youtube.json +0 -14
- package/dist/spec/catalogs/themes/bold.json +0 -13
- package/dist/spec/catalogs/themes/classic.json +0 -13
- package/dist/spec/catalogs/themes/dark.json +0 -13
- package/dist/spec/catalogs/themes/index.json +0 -33
- package/dist/spec/catalogs/themes/minimal.json +0 -13
- package/dist/spec/catalogs/tones/authoritative.json +0 -31
- package/dist/spec/catalogs/tones/casual.json +0 -31
- package/dist/spec/catalogs/tones/conversational.json +0 -31
- package/dist/spec/catalogs/tones/formal.json +0 -31
- package/dist/spec/catalogs/tones/index.json +0 -51
- package/dist/spec/catalogs/tones/inspirational.json +0 -31
- package/dist/spec/catalogs/tones/persuasive.json +0 -32
- package/dist/spec/catalogs/tones/technical.json +0 -31
- package/dist/spec/previews/layouts/action-plan.html +0 -1
- package/dist/spec/previews/layouts/agenda.html +0 -1
- package/dist/spec/previews/layouts/appendix-index.html +0 -1
- package/dist/spec/previews/layouts/architecture-stack.html +0 -1
- package/dist/spec/previews/layouts/assumptions-dependencies.html +0 -1
- package/dist/spec/previews/layouts/before-after.html +0 -1
- package/dist/spec/previews/layouts/benchmark-target-table.html +0 -1
- package/dist/spec/previews/layouts/bullet-list.html +0 -1
- package/dist/spec/previews/layouts/business-model-canvas.html +0 -1
- package/dist/spec/previews/layouts/capability-map.html +0 -1
- package/dist/spec/previews/layouts/case-study.html +0 -1
- package/dist/spec/previews/layouts/chapter-recap.html +0 -1
- package/dist/spec/previews/layouts/circular-lifecycle.html +0 -1
- package/dist/spec/previews/layouts/comparison.html +0 -1
- package/dist/spec/previews/layouts/competitive-landscape.html +0 -1
- package/dist/spec/previews/layouts/customer-journey.html +0 -1
- package/dist/spec/previews/layouts/customer-logos.html +0 -1
- package/dist/spec/previews/layouts/dashboard.html +0 -1
- package/dist/spec/previews/layouts/data-visualization.html +0 -1
- package/dist/spec/previews/layouts/decision-tree.html +0 -1
- package/dist/spec/previews/layouts/detailed-data-table.html +0 -1
- package/dist/spec/previews/layouts/ecosystem-map.html +0 -1
- package/dist/spec/previews/layouts/executive-decision.html +0 -1
- package/dist/spec/previews/layouts/executive-summary.html +0 -1
- package/dist/spec/previews/layouts/faq.html +0 -1
- package/dist/spec/previews/layouts/feature-comparison-matrix.html +0 -1
- package/dist/spec/previews/layouts/forecast-scenario.html +0 -1
- package/dist/spec/previews/layouts/funnel-pyramid.html +0 -1
- package/dist/spec/previews/layouts/gantt-project-plan.html +0 -1
- package/dist/spec/previews/layouts/geographic-map.html +0 -1
- package/dist/spec/previews/layouts/heatmap-cohort.html +0 -1
- package/dist/spec/previews/layouts/hub-and-spoke.html +0 -1
- package/dist/spec/previews/layouts/icon-grid.html +0 -1
- package/dist/spec/previews/layouts/image-focus.html +0 -1
- package/dist/spec/previews/layouts/index.json +0 -357
- package/dist/spec/previews/layouts/key-takeaway.html +0 -1
- package/dist/spec/previews/layouts/kpi-scorecard.html +0 -1
- package/dist/spec/previews/layouts/logic-tree.html +0 -1
- package/dist/spec/previews/layouts/market-size.html +0 -1
- package/dist/spec/previews/layouts/matrix-quadrant.html +0 -1
- package/dist/spec/previews/layouts/network-dependency-map.html +0 -1
- package/dist/spec/previews/layouts/one-column-explainer.html +0 -1
- package/dist/spec/previews/layouts/org-chart.html +0 -1
- package/dist/spec/previews/layouts/persona-grid.html +0 -1
- package/dist/spec/previews/layouts/photo-grid.html +0 -1
- package/dist/spec/previews/layouts/pricing-table.html +0 -1
- package/dist/spec/previews/layouts/process-flow.html +0 -1
- package/dist/spec/previews/layouts/product-feature.html +0 -1
- package/dist/spec/previews/layouts/pros-cons.html +0 -1
- package/dist/spec/previews/layouts/qa-discussion.html +0 -1
- package/dist/spec/previews/layouts/quote-highlight.html +0 -1
- package/dist/spec/previews/layouts/raci-matrix.html +0 -1
- package/dist/spec/previews/layouts/risk-heatmap.html +0 -1
- package/dist/spec/previews/layouts/roadmap.html +0 -1
- package/dist/spec/previews/layouts/screenshot-walkthrough.html +0 -1
- package/dist/spec/previews/layouts/section-divider.html +0 -1
- package/dist/spec/previews/layouts/single-message-statement.html +0 -1
- package/dist/spec/previews/layouts/stats-metrics.html +0 -1
- package/dist/spec/previews/layouts/status-rag.html +0 -1
- package/dist/spec/previews/layouts/swimlane-process.html +0 -1
- package/dist/spec/previews/layouts/swot-analysis.html +0 -1
- package/dist/spec/previews/layouts/team-bio.html +0 -1
- package/dist/spec/previews/layouts/testimonial-grid.html +0 -1
- package/dist/spec/previews/layouts/thank-you-cta.html +0 -1
- package/dist/spec/previews/layouts/three-column.html +0 -1
- package/dist/spec/previews/layouts/timeline.html +0 -1
- package/dist/spec/previews/layouts/title-slide.html +0 -1
- package/dist/spec/previews/layouts/two-column.html +0 -1
- package/dist/spec/previews/layouts/venn-overlap.html +0 -1
- package/dist/spec/previews/layouts/waterfall-bridge.html +0 -1
- package/dist/spec/previews/layouts/wheel-radial.html +0 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ Use the common root API for most application code:
|
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
32
|
import { presentation, validate, embed } from "@openpresentation/opf";
|
|
33
|
-
import {
|
|
33
|
+
import { gallery } from "@openpresentation/gallery";
|
|
34
34
|
|
|
35
35
|
import type { Presentation } from "@openpresentation/opf";
|
|
36
36
|
|
|
@@ -40,13 +40,14 @@ const deck: Presentation = {
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
console.log(presentation.$id);
|
|
43
|
-
// Register the catalogs your host trusts; core
|
|
44
|
-
|
|
43
|
+
// Register the catalogs your host trusts; core ships no records. In Node, validate, stats, paginate, embed and edit
|
|
44
|
+
// register the gallery (@openpresentation/gallery, a dependency of core) when a call names none.
|
|
45
|
+
const catalogs = [gallery];
|
|
45
46
|
console.log(validate({ ...deck, design: { theme: "classic" } }, { catalogs }).valid);
|
|
46
47
|
// Save with every record the deck uses embedded, so it renders the same with no catalog registered.
|
|
47
48
|
const saved = embed({ ...deck, design: { theme: "classic" } }, { catalogs }).document;
|
|
48
49
|
console.log(Object.keys(saved.catalogs.default.themes)); // ["classic"]
|
|
49
|
-
console.log(Object.keys(
|
|
50
|
+
console.log(Object.keys(gallery.tones));
|
|
50
51
|
```
|
|
51
52
|
|
|
52
53
|
In Node (and Bun and Deno), the root adds files: `convert` turns one file into another (a deck to PDF, PNG, SVG or PPTX, a PowerPoint file to a deck, one deck form to another, or bytes with no output path), `open` reads a deck file or imports a `.pptx`, and `save` writes one. The same import works in every runtime, so one namespace import covers an application:
|
|
@@ -67,13 +68,12 @@ Use focused imports when you only need one surface:
|
|
|
67
68
|
|
|
68
69
|
```ts
|
|
69
70
|
import { presentation, audience } from "@openpresentation/opf/schemas";
|
|
70
|
-
import { defaultCatalog, catalogDisplay, layoutPreviews, getLayoutPreview, hasLayoutPreview } from "@openpresentation/opf/catalog";
|
|
71
71
|
import { specFileEntries } from "@openpresentation/opf/spec-files";
|
|
72
72
|
import { validate, assertValid, validationRules } from "@openpresentation/opf/validator";
|
|
73
73
|
import type { Presentation, Audience, Tone } from "@openpresentation/opf/types";
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
The root entry holds the application-level API: schemas, catalog references and their resolution (`resolveReference`, `embed`, `copySlides`, `updateFromCatalog`), validation, variables, pagination, data helpers, font policy, `stats`, `resolveSlideContext` and `resolveSlideVariables`. Engines compose and draw `context.slide` from `resolveSlideContext(deck, index, { slideNumber, slideCount })`: the slide with the slide-scoped built-ins `{{slide.number}}`, `{{slide.section}}` and `{{deck.slideCount}}` substituted for the same numbers its `options` carry (`resolveSlideVariables(slide, { slideNumber, slideCount })` does that substitution alone). Header and footer text is substituted by `layoutFurniture`, which records each slide number in `FurnitureTextPart.fields`. See [templates and variables](../../docs/templates-and-variables.md#slide-scoped-built-ins). It carries no catalog records: the
|
|
76
|
+
The root entry holds the application-level API: schemas, catalog references and their resolution (`resolveReference`, `embed`, `copySlides`, `updateFromCatalog`), validation, variables, pagination, data helpers, font policy, `stats`, `resolveSlideContext` and `resolveSlideVariables`. Engines compose and draw `context.slide` from `resolveSlideContext(deck, index, { slideNumber, slideCount })`: the slide with the slide-scoped built-ins `{{slide.number}}`, `{{slide.section}}` and `{{deck.slideCount}}` substituted for the same numbers its `options` carry (`resolveSlideVariables(slide, { slideNumber, slideCount })` does that substitution alone). Header and footer text is substituted by `layoutFurniture`, which records each slide number in `FurnitureTextPart.fields`. See [templates and variables](../../docs/templates-and-variables.md#slide-scoped-built-ins). It carries no catalog records: the pptx.gallery catalog is the package `@openpresentation/gallery` (`gallery`, `catalogDisplay`, and the layout previews of `@openpresentation/gallery/previews`), a dependency of core released on its own version line, which the Node build registers when a call names no catalogs (OPF 0.19 removed `@openpresentation/opf/catalog` and `defaultCatalog`, with no alias). Every entry point that resolves references takes `{ catalogs }`, the catalogs the host registered; the first one is the default for documents that omit `catalogs.default`. See [catalogs and the default catalog](../../docs/default-catalog.md).
|
|
77
77
|
|
|
78
78
|
The layout engine's names are not on the root. `composeSlide`, `fitText`, `layoutQuote` and the other `layoutX`/`fitX` functions, numbering, footnotes and citations, colour contrast, code syntax, pattern fills, metric trends, chart options, script fonts and text direction come from `@openpresentation/opf/composition`; the symbol-font tables come from `@openpresentation/opf/symbol-font-encodings`.
|
|
79
79
|
|
|
@@ -107,14 +107,14 @@ Added in 0.12.0 (not in 0.11.4 or earlier): `@openpresentation/opf/patch` is the
|
|
|
107
107
|
|
|
108
108
|
### Layout previews
|
|
109
109
|
|
|
110
|
-
`@openpresentation/
|
|
110
|
+
`@openpresentation/gallery/previews` ships pre-rendered HTML thumbnails for the
|
|
111
111
|
slide layouts catalogued at pptx.gallery. Each preview is a Tailwind-styled
|
|
112
112
|
fragment sized to fill a 16:9 container and only depends on the standard
|
|
113
113
|
`--background`, `--foreground`, `--card`, `--muted`, `--muted-foreground`,
|
|
114
114
|
`--accent`, and `--border` CSS variables.
|
|
115
115
|
|
|
116
116
|
```tsx
|
|
117
|
-
import { getLayoutPreview } from "@openpresentation/
|
|
117
|
+
import { getLayoutPreview } from "@openpresentation/gallery/previews";
|
|
118
118
|
|
|
119
119
|
export function LayoutThumbnail({ slug }: { slug: string }) {
|
|
120
120
|
const html = getLayoutPreview(slug);
|
|
@@ -128,8 +128,7 @@ export function LayoutThumbnail({ slug }: { slug: string }) {
|
|
|
128
128
|
}
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
also addressable via `@openpresentation/opf/spec/previews/layouts/<slug>.html`.
|
|
131
|
+
The HTML source lives in [OpenPresentation/gallery](https://github.com/OpenPresentation/gallery); this checkout materializes ignored copies from the installed package for checks.
|
|
133
132
|
|
|
134
133
|
### Example decks
|
|
135
134
|
|
|
@@ -195,7 +194,7 @@ in the records the document embeds (`catalogs.custom`, `catalogs.default`, named
|
|
|
195
194
|
groups), then in the catalogs the host registered with `{ catalogs }`.
|
|
196
195
|
|
|
197
196
|
```ts
|
|
198
|
-
const report = validate(deck, { catalogs: [
|
|
197
|
+
const report = validate(deck, { catalogs: [gallery] });
|
|
199
198
|
if (!report.valid) console.error(report.findings.filter((finding) => finding.severity === "error"));
|
|
200
199
|
for (const finding of report.findings) console.warn(finding.ruleId, finding.path, finding.message);
|
|
201
200
|
```
|
|
@@ -203,10 +202,12 @@ for (const finding of report.findings) console.warn(finding.ruleId, finding.path
|
|
|
203
202
|
Validate catalog records locally:
|
|
204
203
|
|
|
205
204
|
```ts
|
|
206
|
-
import {
|
|
205
|
+
import { validateCatalogRecord } from "@openpresentation/opf";
|
|
206
|
+
import { gallery } from "@openpresentation/gallery";
|
|
207
207
|
|
|
208
|
-
for (const record of audiences) {
|
|
209
|
-
|
|
208
|
+
for (const [id, record] of Object.entries(gallery.audiences)) {
|
|
209
|
+
// A published record file carries its $schema and id; the gallery keys records by id without them.
|
|
210
|
+
const result = validateCatalogRecord("audiences", { $schema: "https://openpresentation.org/schema/opf-audience/v1", id, ...record });
|
|
210
211
|
if (!result.valid) {
|
|
211
212
|
console.error(result.findings);
|
|
212
213
|
}
|
|
@@ -230,11 +231,11 @@ const openApi = specFileEntries.find((entry) => entry.path === "openapi.yaml");
|
|
|
230
231
|
console.log(openApi?.packagePath);
|
|
231
232
|
```
|
|
232
233
|
|
|
233
|
-
|
|
234
|
+
Core ships no catalog record files (RR-78): the records are `@openpresentation/gallery`'s, and pptx.gallery serves each published record file at `https://www.pptx.gallery/<kind>/<id>.json`. Documents never point at them. A host registers the catalog instead:
|
|
234
235
|
|
|
235
236
|
```js
|
|
236
|
-
import {
|
|
237
|
-
validate(deck, { catalogs: [
|
|
237
|
+
import { gallery } from "@openpresentation/gallery";
|
|
238
|
+
validate(deck, { catalogs: [gallery] });
|
|
238
239
|
```
|
|
239
240
|
|
|
240
241
|
## Development
|
package/dist/browser.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import { OPFApiError } from './chunk-
|
|
2
|
-
export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-
|
|
3
|
-
export { specFileEntries, specFileKinds, specFilePaths } from './chunk-
|
|
4
|
-
export { OPFDataImportError, ingest, parseTabularData } from './chunk-
|
|
5
|
-
export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-
|
|
6
|
-
export { fromMarkdown, toMarkdown } from './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
export { OPFMarkdownError } from './chunk-
|
|
9
|
-
export { diff, merge } from './chunk-
|
|
10
|
-
export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-
|
|
11
|
-
export { OPFFormatError, format } from './chunk-
|
|
12
|
-
export { OPFPaginationError, paginate, paginateSlide } from './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-
|
|
16
|
-
export { CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unusedDatasets, variableDeclarations } from './chunk-
|
|
17
|
-
export {
|
|
18
|
-
export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, OPFCatalogsOptionError, OPFUnresolvedReferenceError, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, parseReference, resolveReference, unresolvedReference } from './chunk-SPFV27O5.js';
|
|
19
|
-
export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-2PEWUUBR.js';
|
|
1
|
+
import { OPFApiError } from './chunk-2AGWO7RM.js';
|
|
2
|
+
export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-2AGWO7RM.js';
|
|
3
|
+
export { specFileEntries, specFileKinds, specFilePaths } from './chunk-UJSAR6GF.js';
|
|
4
|
+
export { OPFDataImportError, ingest, parseTabularData } from './chunk-W7G5LSXI.js';
|
|
5
|
+
export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-NZDWCYDI.js';
|
|
6
|
+
export { fromMarkdown, toMarkdown } from './chunk-RFJ5TR3V.js';
|
|
7
|
+
import './chunk-4FBXVST6.js';
|
|
8
|
+
export { OPFMarkdownError } from './chunk-P6LMWUXV.js';
|
|
9
|
+
export { diff, merge } from './chunk-L6RRLN6Q.js';
|
|
10
|
+
export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-2XJUXMBS.js';
|
|
11
|
+
export { OPFFormatError, format } from './chunk-32MHL3B3.js';
|
|
12
|
+
export { OPFPaginationError, paginate, paginateSlide } from './chunk-BDXJYO6R.js';
|
|
13
|
+
import './chunk-UA5EROLC.js';
|
|
14
|
+
import './chunk-ZU5EQ23T.js';
|
|
15
|
+
export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-7QUAOKS6.js';
|
|
16
|
+
export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFCatalogsOptionError, OPFUnresolvedReferenceError, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, parseReference, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveReference, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unresolvedReference, unusedDatasets, variableDeclarations } from './chunk-UAXSW6VV.js';
|
|
17
|
+
export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-VEHLQVGQ.js';
|
|
20
18
|
export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-F7PLNWHQ.js';
|
|
21
19
|
|
|
22
20
|
// src/browser.ts
|
|
@@ -125,4 +125,4 @@ declare function catalogReferenceSites(document: unknown, options?: {
|
|
|
125
125
|
/** Records a picker can offer for `kind`: the document's embedded records, then those of the registered catalogs its groups name, with the reference to write for each. */
|
|
126
126
|
declare function catalogRecords(document: unknown, kind: CatalogKind, options?: CatalogOptions): ResolvedReference[];
|
|
127
127
|
|
|
128
|
-
export { type
|
|
128
|
+
export { type Catalog as C, OPFCatalogsOptionError as O, type RecordProvenance as R, type UnresolvedReferenceDiagnostic as U, type CatalogOptions as a, type CatalogKind as b, CATALOG_GROUP_PATTERN as c, CATALOG_REFERENCE_PATTERN as d, type CatalogRecordMap as e, type CatalogRecords as f, type CatalogReferenceSite as g, OPFUnresolvedReferenceError as h, type ResolvedReference as i, catalogGroupSource as j, catalogKinds as k, catalogRecords as l, catalogReferenceSites as m, parseReference as p, resolveReference as r, unresolvedReference as u };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { OPFDataImportError, parseTabularData } from './chunk-
|
|
2
|
-
import { applyPatchWithInverse } from './chunk-
|
|
3
|
-
import { validate, OPFValidationError } from './chunk-
|
|
4
|
-
import { isRecord, visitContentPayloads, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-
|
|
5
|
-
import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN } from './chunk-SPFV27O5.js';
|
|
1
|
+
import { OPFDataImportError, parseTabularData } from './chunk-W7G5LSXI.js';
|
|
2
|
+
import { applyPatchWithInverse } from './chunk-2XJUXMBS.js';
|
|
3
|
+
import { validate, OPFValidationError } from './chunk-7QUAOKS6.js';
|
|
4
|
+
import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-UAXSW6VV.js';
|
|
6
5
|
|
|
7
6
|
// src/api-errors.ts
|
|
8
7
|
var OPFApiError = class extends Error {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { presentation } from './chunk-
|
|
1
|
+
import { presentation } from './chunk-VEHLQVGQ.js';
|
|
2
2
|
|
|
3
3
|
// src/format.ts
|
|
4
4
|
var OPFFormatError = class extends Error {
|
|
@@ -66,7 +66,12 @@ function format(input, options = {}) {
|
|
|
66
66
|
const indent = options.indent ?? 2;
|
|
67
67
|
if (!Number.isInteger(indent) || indent < 0 || indent > 8) throw new OPFFormatError("indent must be an integer from 0 to 8.");
|
|
68
68
|
if (options.eol !== void 0 && options.eol !== "lf" && options.eol !== "crlf") throw new OPFFormatError("eol must be lf or crlf.");
|
|
69
|
-
const
|
|
69
|
+
const sorted = sortPresentationKeys(document);
|
|
70
|
+
const slides = sorted !== null && typeof sorted === "object" && !Array.isArray(sorted) ? sorted.slides : void 0;
|
|
71
|
+
if (Array.isArray(slides)) {
|
|
72
|
+
for (const slide of slides) if (slide !== null && typeof slide === "object" && slide.layout === "auto") delete slide.layout;
|
|
73
|
+
}
|
|
74
|
+
const text = JSON.stringify(sorted, null, indent);
|
|
70
75
|
if (text === void 0) throw new OPFFormatError("Nothing to format.");
|
|
71
76
|
return options.eol === "crlf" ? `${text.replaceAll("\n", "\r\n")}\r
|
|
72
77
|
` : `${text}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { NOT_CHECKED, Ctx } from './chunk-
|
|
2
|
-
import { sortPresentationKeys } from './chunk-
|
|
3
|
-
import { same } from './chunk-
|
|
4
|
-
import { validate } from './chunk-
|
|
5
|
-
import { checkCatalogsOption } from './chunk-
|
|
6
|
-
import { presentation } from './chunk-
|
|
1
|
+
import { NOT_CHECKED, Ctx } from './chunk-P6LMWUXV.js';
|
|
2
|
+
import { sortPresentationKeys } from './chunk-32MHL3B3.js';
|
|
3
|
+
import { same } from './chunk-ZU5EQ23T.js';
|
|
4
|
+
import { validate } from './chunk-7QUAOKS6.js';
|
|
5
|
+
import { checkCatalogsOption } from './chunk-UAXSW6VV.js';
|
|
6
|
+
import { presentation } from './chunk-VEHLQVGQ.js';
|
|
7
7
|
import { Parser, parseDocument, isMap, Document, visit, isScalar, isAlias, isSeq } from 'yaml';
|
|
8
8
|
|
|
9
9
|
var MAX_ALIAS_COUNT = 100;
|
|
@@ -1,11 +1,26 @@
|
|
|
1
|
-
import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, textWidthMeasurer, normalizeHexColor, resolveColorRef, resolveDesignRecords, resolveFontFamilies, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, defaultSlideBackground, isRecord, hasContentVariables, isTemplate, instantiateForValidation, resolveScriptFonts, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell,
|
|
2
|
-
import {
|
|
3
|
-
import { resolveReference, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, catalogRecords, catalogKinds, catalogGroupSource, registeredCatalog } from './chunk-SPFV27O5.js';
|
|
4
|
-
import { schemaEntries, schemas } from './chunk-2PEWUUBR.js';
|
|
1
|
+
import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, resolveReference, textWidthMeasurer, normalizeHexColor, resolveColorRef, resolveDesignRecords, resolveFontFamilies, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, defaultSlideBackground, isRecord, hasContentVariables, isTemplate, instantiateForValidation, layoutTemplateIssues, resolveScriptFonts, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, catalogRecords, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell, catalogKinds, catalogGroupSource, registeredCatalog, OPFCompositionError, composeSlide } from './chunk-UAXSW6VV.js';
|
|
2
|
+
import { schemaEntries, schemas } from './chunk-VEHLQVGQ.js';
|
|
5
3
|
import Ajv2020 from 'ajv/dist/2020.js';
|
|
6
4
|
import addFormats from 'ajv-formats';
|
|
7
5
|
import { parseTree, printParseErrorCode, getNodePath } from 'jsonc-parser';
|
|
8
6
|
|
|
7
|
+
// src/catalog-schemas.ts
|
|
8
|
+
var CATALOG_SCHEMA = 3;
|
|
9
|
+
var catalogDisplayKinds = ["chartTypes", "languages", "socialPlatforms"];
|
|
10
|
+
var catalogSchemaNames = {
|
|
11
|
+
layouts: "layout",
|
|
12
|
+
themes: "theme",
|
|
13
|
+
colorSchemes: "colorScheme",
|
|
14
|
+
fontSchemes: "fontScheme",
|
|
15
|
+
narratives: "narrative",
|
|
16
|
+
audiences: "audience",
|
|
17
|
+
purposes: "purpose",
|
|
18
|
+
tones: "tone",
|
|
19
|
+
chartTypes: "chartType",
|
|
20
|
+
languages: "language",
|
|
21
|
+
socialPlatforms: "socialPlatform"
|
|
22
|
+
};
|
|
23
|
+
|
|
9
24
|
// src/annotation-validation.ts
|
|
10
25
|
var issue = (path, message, params) => ({ path, message, keyword: "opf", schemaPath: "#/x-opf-semantics", params });
|
|
11
26
|
var pointer = (dotted) => `/${dotted.split(".").map((part) => part.replaceAll("~", "~0").replaceAll("/", "~1")).join("/")}`;
|
|
@@ -909,33 +924,6 @@ function dataUnionErrors(errors, value) {
|
|
|
909
924
|
return { ...error, message: field === "fields" ? "'fields' applies only to a dataset-backed table; add 'dataset' or remove 'fields'" : datasetTableMessage(field) };
|
|
910
925
|
});
|
|
911
926
|
}
|
|
912
|
-
var placeholderHeadings = /* @__PURE__ */ new Set(["title", "subtitle", "tag"]);
|
|
913
|
-
function placeholderGroupIssues(value) {
|
|
914
|
-
const issues = [];
|
|
915
|
-
if (!isRecord(value) || !Array.isArray(value.placeholders)) return issues;
|
|
916
|
-
const walk = (entries, path, depth) => entries.forEach((entry, index) => {
|
|
917
|
-
if (!isRecord(entry)) return;
|
|
918
|
-
const at2 = `${path}/${index}`;
|
|
919
|
-
if (entry.type === "group") {
|
|
920
|
-
if (depth >= MAX_PLACEHOLDER_GROUP_DEPTH) issues.push(semanticIssue(at2, `placeholder groups nest at most ${MAX_PLACEHOLDER_GROUP_DEPTH} levels inside a layout record; this group would be level ${depth + 1}`, { code: "layout-placeholder-group", depth: depth + 1, maxDepth: MAX_PLACEHOLDER_GROUP_DEPTH }));
|
|
921
|
-
else if (Array.isArray(entry.placeholders)) walk(entry.placeholders, `${at2}/placeholders`, depth + 1);
|
|
922
|
-
return;
|
|
923
|
-
}
|
|
924
|
-
if (depth === 0) return;
|
|
925
|
-
if (typeof entry.type === "string" && placeholderHeadings.has(entry.type)) issues.push(semanticIssue(`${at2}/type`, `a placeholder group holds body regions only; a '${entry.type}' placeholder belongs at the record's top level`, { code: "layout-placeholder-group" }));
|
|
926
|
-
if (hasOwn(entry, "placement")) issues.push(semanticIssue(`${at2}/placement`, "placement is only valid on a top-level image placeholder; a region inside a placeholder group cannot bleed to a slide edge", { code: "image-placement-invalid" }));
|
|
927
|
-
});
|
|
928
|
-
walk(value.placeholders, "/placeholders", 0);
|
|
929
|
-
return issues;
|
|
930
|
-
}
|
|
931
|
-
function withPlaceholderGroupIssues(errors, value) {
|
|
932
|
-
const issues = placeholderGroupIssues(value);
|
|
933
|
-
const entries = issues.map((issue2) => issue2.path.replace(/\/(type|placement)$/, ""));
|
|
934
|
-
const covered = (error) => entries.some((entry) => error.path === entry || error.path.startsWith(`${entry}/`));
|
|
935
|
-
const kept = errors.filter((error) => !covered(error));
|
|
936
|
-
const reported = [...kept.filter((error) => error.keyword !== "if"), ...issues].map((error) => error.path);
|
|
937
|
-
return [...kept.filter((error) => error.keyword !== "if" || !reported.some((path) => path === error.path || path.startsWith(`${error.path}/`))), ...issues];
|
|
938
|
-
}
|
|
939
927
|
function validateAgainstSchema(value, schemaOrKind = "presentation", options = {}) {
|
|
940
928
|
const resolved = resolveValidator(schemaOrKind);
|
|
941
929
|
if (resolved.schemaName === "presentation") {
|
|
@@ -968,7 +956,8 @@ function validateAgainstSchema(value, schemaOrKind = "presentation", options = {
|
|
|
968
956
|
const valid = resolved.validate(subject) === true;
|
|
969
957
|
const ajvErrors = valid ? [] : typedVariableErrors(resolved.validate.errors ?? [], subject);
|
|
970
958
|
const mapped = (resolved.schemaName === "presentation" ? dataUnionErrors(ajvErrors, subject) : ajvErrors).map(toIssue);
|
|
971
|
-
const errors =
|
|
959
|
+
const errors = mapped;
|
|
960
|
+
if (resolved.schemaName === "layout" && valid) for (const issue2 of layoutTemplateIssues(subject)) errors.push(semanticIssue(issue2.path, issue2.message, { code: issue2.code }));
|
|
972
961
|
const warnings = [];
|
|
973
962
|
if (resolved.schemaName === "presentation") {
|
|
974
963
|
errors.push(...presentationSemanticIssues(subject));
|
|
@@ -1797,7 +1786,7 @@ var readingOrderRule = rule(
|
|
|
1797
1786
|
{
|
|
1798
1787
|
standard: 'WCAG 2.2 SC 1.3.2 Meaningful Sequence, level A (PowerPoint: "Check reading order")',
|
|
1799
1788
|
cost: "composition",
|
|
1800
|
-
approximations: "Compares the composed content order with a visual order recomputed from the composed boxes: items whose vertical centres fall in the same row are ordered along the reading direction (a right-to-left deck is checked by rows only), rows from top to bottom. Headings are expected first. Free-form overlap is not analysed."
|
|
1789
|
+
approximations: "Compares the composed content order with a visual order recomputed from the composed boxes: items whose vertical centres fall in the same row are ordered along the reading direction (a right-to-left deck is checked by rows only), rows from top to bottom. Headings are expected first. Free-form overlap is not analysed. On a slide with a template layout (OPF 0.19) the expected order is the binding order instead (the regions in reading order, then the blocks of each region), and items outside a region (placed images, the row below the grid) are not compared."
|
|
1801
1790
|
}
|
|
1802
1791
|
);
|
|
1803
1792
|
var readingOrderRules = [
|
|
@@ -1819,8 +1808,11 @@ var readingOrderRules = [
|
|
|
1819
1808
|
});
|
|
1820
1809
|
}
|
|
1821
1810
|
if (body.length < 2) continue;
|
|
1822
|
-
const
|
|
1823
|
-
const
|
|
1811
|
+
const regions = composition.regions;
|
|
1812
|
+
const ordered = regions ? body.filter((item) => item.region !== void 0) : body;
|
|
1813
|
+
if (ordered.length < 2) continue;
|
|
1814
|
+
const visual = regions ? bindingOrder(ordered, regions) : visualOrder(ordered, slide.rtl);
|
|
1815
|
+
const composed = ordered.map((item) => item.path);
|
|
1824
1816
|
const index = composed.findIndex((path, i) => path !== visual[i]);
|
|
1825
1817
|
if (index < 0) continue;
|
|
1826
1818
|
const name = (path) => shortField(path);
|
|
@@ -1835,6 +1827,16 @@ var readingOrderRules = [
|
|
|
1835
1827
|
}
|
|
1836
1828
|
}
|
|
1837
1829
|
];
|
|
1830
|
+
function bindingOrder(items, regions) {
|
|
1831
|
+
const rank = new Map(regions.map((region, index) => [region.name, index]));
|
|
1832
|
+
const blockRank = (item) => {
|
|
1833
|
+
const region = regions.find((entry) => entry.name === item.region);
|
|
1834
|
+
const blocks = region ? [...region.content, ...region.overflow ?? []] : [];
|
|
1835
|
+
const found = blocks.findIndex((block) => item.path === block || item.path.startsWith(`${block}.`));
|
|
1836
|
+
return found < 0 ? blocks.length : found;
|
|
1837
|
+
};
|
|
1838
|
+
return items.map((item, index) => ({ item, index, region: rank.get(item.region ?? "") ?? regions.length, block: blockRank(item) })).sort((a, b) => a.region - b.region || a.block - b.block || a.index - b.index).map((entry) => entry.item.path);
|
|
1839
|
+
}
|
|
1838
1840
|
function visualOrder(items, rtl) {
|
|
1839
1841
|
if (rtl) return readingRows(items).flatMap((row) => row.map((item) => item.path));
|
|
1840
1842
|
return visualReadingOrder(items).map((item) => item.path);
|
|
@@ -2160,10 +2162,43 @@ var minFontRule = rule(
|
|
|
2160
2162
|
approximations: "Sizes are those composeSlide fitted, expressed on the 13.33 x 7.5 in reference slide (96 px per inch, so 1 px is 0.75 pt; a smaller canvas scales type down with it) and explicit run fontSize values in points. Per payload, the smallest part (a metric label or a quote attribution) is reported. Table cell text (default 11.25 pt), code and header/footer furniture are not checked."
|
|
2161
2163
|
}
|
|
2162
2164
|
);
|
|
2165
|
+
var regionUnknownRule = rule(
|
|
2166
|
+
"region-unknown",
|
|
2167
|
+
"layout",
|
|
2168
|
+
"warning",
|
|
2169
|
+
"A block is pinned to a region the layout does not have.",
|
|
2170
|
+
"A region pin (`region` on a root block) names a region of the slide's layout. A name the layout does not have is ignored: the block is placed by its kind, which may not be where the author meant.",
|
|
2171
|
+
{ cost: "composition" }
|
|
2172
|
+
);
|
|
2173
|
+
var regionKindRule = rule(
|
|
2174
|
+
"region-kind",
|
|
2175
|
+
"layout",
|
|
2176
|
+
"warning",
|
|
2177
|
+
"A block is pinned to a region that does not accept its kind.",
|
|
2178
|
+
"A region says which content kinds it takes. A pin to a region that does not take the block's kind is ignored and the block is placed by its kind.",
|
|
2179
|
+
{ cost: "composition" }
|
|
2180
|
+
);
|
|
2181
|
+
var regionFullRule = rule(
|
|
2182
|
+
"region-full",
|
|
2183
|
+
"layout",
|
|
2184
|
+
"warning",
|
|
2185
|
+
"A block is pinned to a region that is already full.",
|
|
2186
|
+
"A region holds at most `max` blocks on one slide. A pin to a full region is ignored and the block is placed by its kind.",
|
|
2187
|
+
{ cost: "composition" }
|
|
2188
|
+
);
|
|
2189
|
+
var unplacedRule = rule(
|
|
2190
|
+
"layout-unplaced",
|
|
2191
|
+
"layout",
|
|
2192
|
+
"warning",
|
|
2193
|
+
"No region of the layout has room for a block.",
|
|
2194
|
+
"Content is never dropped: a block no region has room for is drawn in the layout's overflow region beyond its max (or below the grid), where it crowds the others. Paginate moves it to a continuation slide with the same layout.",
|
|
2195
|
+
{ cost: "composition" }
|
|
2196
|
+
);
|
|
2197
|
+
var REGION_RULES = { "region-unknown": regionUnknownRule, "region-kind": regionKindRule, "region-full": regionFullRule, "layout-unplaced": unplacedRule };
|
|
2163
2198
|
var layoutRules = [
|
|
2164
2199
|
{
|
|
2165
2200
|
info: overflowRule,
|
|
2166
|
-
also: [unresolvedRule, layoutFailedRule, minFontRule],
|
|
2201
|
+
also: [unresolvedRule, layoutFailedRule, minFontRule, regionUnknownRule, regionKindRule, regionFullRule, unplacedRule],
|
|
2167
2202
|
run(context) {
|
|
2168
2203
|
const deckLevel = /* @__PURE__ */ new Set();
|
|
2169
2204
|
for (const slide of context.slides) {
|
|
@@ -2179,6 +2214,8 @@ var layoutRules = [
|
|
|
2179
2214
|
if (diagnostic.code === "text-overflow")
|
|
2180
2215
|
context.report(overflowRule, { path, slide, message: diagnostic.message, help: "Shorten the text, give it more space (fewer blocks, a different composition) or split the slide (paginate); raising the readable minimum makes it worse." });
|
|
2181
2216
|
else if (diagnostic.code === "small-cell") continue;
|
|
2217
|
+
else if (Object.hasOwn(REGION_RULES, diagnostic.code))
|
|
2218
|
+
context.report(REGION_RULES[diagnostic.code], { path, slide, message: diagnostic.message, help: diagnostic.code === "layout-unplaced" ? "Paginate the slide, choose a layout with more room, pin the block to a region with room, or remove a block." : "Pin the block to a region of the layout that accepts it and has room, or remove the pin." });
|
|
2182
2219
|
else context.report(unresolvedRule, { path, slide: path.startsWith("/slides/") ? slide : void 0, message: diagnostic.message, help: "Supply what the message asks for, or remove the setting that cannot be honoured." });
|
|
2183
2220
|
}
|
|
2184
2221
|
for (const tv of slide.texts)
|
|
@@ -2512,6 +2549,22 @@ var referenceRules = [
|
|
|
2512
2549
|
"A record that fails its companion schema cannot be resolved. Invalid records are left out of the lookup, so the references to them are reported too.",
|
|
2513
2550
|
{ standard: "spec/schemas/<kind>.schema.json" }
|
|
2514
2551
|
),
|
|
2552
|
+
rule(
|
|
2553
|
+
"layout-template",
|
|
2554
|
+
"references",
|
|
2555
|
+
"error",
|
|
2556
|
+
"A layout template's grid is malformed.",
|
|
2557
|
+
'A layout (OPF 0.19) is a grid of named areas. Engines cannot compose a grid whose rows have different lengths, whose names do not form one filled rectangle each, whose column or row sizes do not match the grid, that is larger than 12 x 12, or that holds a word that is not a name or ".". composeSlide refuses such a record, so a slide that names it composes automatically.',
|
|
2558
|
+
{ standard: "spec/schemas/layout.schema.json and the area rules of OPF 0.19 (docs/layout-templates.md)", approximations: "Checked on every layout record the document embeds and every registered record it uses, once the record passes its schema." }
|
|
2559
|
+
),
|
|
2560
|
+
rule(
|
|
2561
|
+
"layout-region",
|
|
2562
|
+
"references",
|
|
2563
|
+
"error",
|
|
2564
|
+
"A layout template's regions do not match its areas.",
|
|
2565
|
+
"Every body area of a layout needs a region that says what it accepts, and every region needs an area. Region names may not be title, subtitle, tag, auto or a promoted-region word (left, center, right, top, middle, bottom), so a Markdown block's region= stays unambiguous; a subtitle area needs a title area; a region with flow 'none' holds one block; overflowRegion must name a region. composeSlide refuses such a record.",
|
|
2566
|
+
{ standard: "spec/schemas/layout.schema.json and the region rules of OPF 0.19 (docs/layout-templates.md)" }
|
|
2567
|
+
),
|
|
2515
2568
|
rule(
|
|
2516
2569
|
"unresolved-reference",
|
|
2517
2570
|
"references",
|
|
@@ -2811,6 +2864,7 @@ function fields(document) {
|
|
|
2811
2864
|
}
|
|
2812
2865
|
return result;
|
|
2813
2866
|
}
|
|
2867
|
+
var recordRuleId = (issue2) => issue2.keyword === "opf" && (issue2.params.code === "layout-template" || issue2.params.code === "layout-region") ? `opf/${issue2.params.code}` : "opf/catalog-record";
|
|
2814
2868
|
var recordKey = (group, kind, id) => `${group}/${kind}/${id}`;
|
|
2815
2869
|
function recordIssues(kind, id, value) {
|
|
2816
2870
|
const schemaName = catalogSchemaNames[kind];
|
|
@@ -2826,7 +2880,7 @@ function embeddedRecordFindings(document, options, findings) {
|
|
|
2826
2880
|
const path = pointer3(["catalogs", group, kind, id]);
|
|
2827
2881
|
if (object(record) && (Object.hasOwn(record, "$schema") || Object.hasOwn(record, "id"))) continue;
|
|
2828
2882
|
const validation = recordIssues(kind, id, record);
|
|
2829
|
-
for (const issue2 of validation.errors) findings.push(issueFinding(issue2,
|
|
2883
|
+
for (const issue2 of validation.errors) findings.push(issueFinding(issue2, recordRuleId(issue2), catalogSchemaNames[kind], path, "document"));
|
|
2830
2884
|
if (!validation.valid) invalid.add(recordKey(group, kind, id));
|
|
2831
2885
|
if (group === "custom") continue;
|
|
2832
2886
|
const source = catalogGroupSource(document, group, options);
|
|
@@ -3011,7 +3065,7 @@ function contentReferenceFindings(document, options, findings) {
|
|
|
3011
3065
|
if (found?.origin === "host" && !registeredChecked.has(recordKey(found.group, site.kind, found.id))) {
|
|
3012
3066
|
registeredChecked.add(recordKey(found.group, site.kind, found.id));
|
|
3013
3067
|
for (const issue2 of recordIssues(site.kind, found.id, found.record).errors)
|
|
3014
|
-
findings.push(issueFinding(issue2,
|
|
3068
|
+
findings.push(issueFinding(issue2, recordRuleId(issue2), catalogSchemaNames[site.kind], pointer3(["catalogs", found.group, site.kind, found.id]), "context"));
|
|
3015
3069
|
}
|
|
3016
3070
|
if (found && !(found.origin === "document" && invalid.has(recordKey(found.group, site.kind, found.id)))) continue;
|
|
3017
3071
|
const diagnostic = unresolvedReference(document, site.kind, site.reference, path, options);
|
|
@@ -3378,7 +3432,7 @@ function resolveSlideContext(presentation, index, options = {}) {
|
|
|
3378
3432
|
const design = { ...rec2(deck.design), ...rec2(slide.design) };
|
|
3379
3433
|
let layout;
|
|
3380
3434
|
let layoutProvenance;
|
|
3381
|
-
if (typeof slide.layout === "string") {
|
|
3435
|
+
if (typeof slide.layout === "string" && slide.layout !== "auto") {
|
|
3382
3436
|
const found = resolveReference(presentation, "layouts", slide.layout, catalogs);
|
|
3383
3437
|
if (found) {
|
|
3384
3438
|
layout = { ...found.record };
|
|
@@ -3396,6 +3450,8 @@ function resolveSlideContext(presentation, index, options = {}) {
|
|
|
3396
3450
|
fontFamilies: resolveFontFamilies(fontScheme),
|
|
3397
3451
|
darkBackground: resolveColorRoles(colorScheme, { background: decisionColor(design.background ?? theme.background, colorScheme, rec2(deck.variables)) }).dark,
|
|
3398
3452
|
...theme.background !== void 0 ? { themeBackground: theme.background } : {},
|
|
3453
|
+
// OPF 0.19: a theme may carry the shared design keys (between the deck's design and the layout record's).
|
|
3454
|
+
...theme.design !== void 0 && rec2(theme.design) === theme.design ? { themeDesign: theme.design } : {},
|
|
3399
3455
|
...options.fonts?.textMeasurement ? { textMeasurement: options.fonts.textMeasurement } : {},
|
|
3400
3456
|
...options.date !== void 0 ? { date: options.date } : {}
|
|
3401
3457
|
};
|
|
@@ -3767,4 +3823,4 @@ function assertValidCatalogRecord(kind, value) {
|
|
|
3767
3823
|
if (!report2.valid) throw new OPFValidationError(report2);
|
|
3768
3824
|
}
|
|
3769
3825
|
|
|
3770
|
-
export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, parseSource, resolveSlideContext, resolveSlideScriptMeasurement, validate, validateCatalogRecord, validationCategories, validationRules };
|
|
3826
|
+
export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, parseSource, resolveSlideContext, resolveSlideScriptMeasurement, validate, validateCatalogRecord, validationCategories, validationRules };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-
|
|
2
|
-
import { resolveSlideVariables, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, slideTokenSpans, sliceNumberedItems } from './chunk-
|
|
3
|
-
import { checkCatalogsOption } from './chunk-SPFV27O5.js';
|
|
1
|
+
import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-7QUAOKS6.js';
|
|
2
|
+
import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-UAXSW6VV.js';
|
|
4
3
|
|
|
5
4
|
// src/pagination.ts
|
|
6
5
|
var OPFPaginationError = class extends Error {
|
|
@@ -110,16 +109,6 @@ function paginateSlide(input, options = {}) {
|
|
|
110
109
|
const { fonts, catalogs, minFontSize: _minFontSize, maxSlides: _maxSlides, reservedIds: _reservedIds, ...engineOptions } = options;
|
|
111
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;
|
|
112
111
|
const composeOptions = { ...engineOptions, ...textMeasurement ? { textMeasurement } : {} };
|
|
113
|
-
const readableLayout = (layout) => {
|
|
114
|
-
if (!isRecord(layout) || !Array.isArray(layout.placeholders) || !layout.placeholders.some((entry) => isRecord(entry) && entry.type === "group")) return layout;
|
|
115
|
-
const visit = (entries) => entries.map((entry) => {
|
|
116
|
-
if (!isRecord(entry) || entry.type !== "group") return entry;
|
|
117
|
-
const own = isRecord(entry.composition) ? entry.composition : {};
|
|
118
|
-
return { ...entry, composition: { ...own, ...typeof own.minFontSize === "number" ? { minFontSize: Math.max(minFontSize, own.minFontSize) } : {}, overflow: "warn" }, placeholders: Array.isArray(entry.placeholders) ? visit(entry.placeholders) : entry.placeholders };
|
|
119
|
-
});
|
|
120
|
-
return { ...layout, placeholders: visit(layout.placeholders) };
|
|
121
|
-
};
|
|
122
|
-
if (options.layout !== void 0) composeOptions.layout = readableLayout(options.layout);
|
|
123
112
|
const presentationSlides = options.presentation?.slides;
|
|
124
113
|
const slideCount = options.slideCount ?? (Array.isArray(presentationSlides) && presentationSlides.length ? presentationSlides.length : void 0);
|
|
125
114
|
const logoContext = options.presentation !== void 0 ? { presentation: options.presentation, darkBackground: options.darkBackground === true } : {};
|
|
@@ -129,7 +118,18 @@ function paginateSlide(input, options = {}) {
|
|
|
129
118
|
return composeSlide(resolveSlideVariables(withReadability(slide, true), { slideNumber, ...slideCount !== void 0 ? { slideCount } : {}, ...logoContext }), { ...composeOptions, slideNumber });
|
|
130
119
|
};
|
|
131
120
|
const initial = geometry(source);
|
|
132
|
-
const
|
|
121
|
+
const movable = (issue) => {
|
|
122
|
+
if (issue.region !== void 0) return true;
|
|
123
|
+
const match = /^slides\.\d+\.blocks\.(\d+)$/.exec(issue.path);
|
|
124
|
+
const block = match && Array.isArray(source.blocks) ? source.blocks[Number(match[1])] : void 0;
|
|
125
|
+
return block !== void 0 && (initial.regions ?? []).some((region) => regionAccepts(region, block));
|
|
126
|
+
};
|
|
127
|
+
const fit = (diagnostics) => diagnostics.filter((issue) => issue.code === "text-overflow" || issue.code === "small-cell" || issue.code === "layout-unplaced" && movable(issue) || !!initial.furniture?.diagnostics.includes(issue));
|
|
128
|
+
const regionOfBlock = /* @__PURE__ */ new Map();
|
|
129
|
+
for (const region of initial.regions ?? []) for (const content of [...region.content, ...region.overflow ?? []]) {
|
|
130
|
+
const match = /\.blocks\.(\d+)$/.exec(content);
|
|
131
|
+
if (match) regionOfBlock.set(Number(match[1]), { name: region.name, accepts: region.accepts });
|
|
132
|
+
}
|
|
133
133
|
const repeatedMappings = (pageIndex) => {
|
|
134
134
|
if (!initial.furniture) return [];
|
|
135
135
|
const paths = new Set(initial.items.filter((item) => headingFields.has(item.field)).map((item) => item.path));
|
|
@@ -149,7 +149,13 @@ function paginateSlide(input, options = {}) {
|
|
|
149
149
|
for (const key of path.slice(sourceBase.length + 1).split(".")) node = isRecord(node) || Array.isArray(node) ? node[key] : void 0;
|
|
150
150
|
return node === void 0 ? fallback : node;
|
|
151
151
|
};
|
|
152
|
-
const
|
|
152
|
+
const blockIndex = (path) => {
|
|
153
|
+
const match = /^slides\.\d+\.blocks\.(\d+)/.exec(path);
|
|
154
|
+
return match ? Number(match[1]) : -1;
|
|
155
|
+
};
|
|
156
|
+
const bodyItems = initial.items.filter((item) => !headingFields.has(item.field));
|
|
157
|
+
if (initial.regions) bodyItems.sort((a, b) => blockIndex(a.path) - blockIndex(b.path));
|
|
158
|
+
const leaves = bodyItems.map((item) => leafFor(item.path, item.field, sourceValue(item.path, item.value)));
|
|
153
159
|
const leafPaths = new Set(leaves.map((leaf) => leaf.path));
|
|
154
160
|
const slides = [], pages = [];
|
|
155
161
|
let selected = /* @__PURE__ */ new Map();
|
|
@@ -192,7 +198,10 @@ function paginateSlide(input, options = {}) {
|
|
|
192
198
|
const children = [];
|
|
193
199
|
value.forEach((child, index) => {
|
|
194
200
|
const projected = visit(child, `${childPath}.${index}`, `${outputPath}.${children.length}`);
|
|
195
|
-
if (projected)
|
|
201
|
+
if (!projected) return;
|
|
202
|
+
const region = root && pageIndex > 0 && projected.region === void 0 ? regionOfBlock.get(index) : void 0;
|
|
203
|
+
if (region && regionAccepts(region, projected)) projected.region = region.name;
|
|
204
|
+
children.push(projected);
|
|
196
205
|
});
|
|
197
206
|
if (children.length) {
|
|
198
207
|
result.blocks = children;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OPFApiError } from './chunk-2AGWO7RM.js';
|
|
2
|
+
import { CATALOG_SCHEMA } from './chunk-7QUAOKS6.js';
|
|
3
|
+
import { CATALOG_SCHEMA as CATALOG_SCHEMA$1, gallery } from '@openpresentation/gallery';
|
|
4
|
+
|
|
5
|
+
function galleryMismatch(declared, reads = CATALOG_SCHEMA) {
|
|
6
|
+
if (declared === reads) return void 0;
|
|
7
|
+
return `@openpresentation/gallery targets catalog schema ${JSON.stringify(declared)}, and this @openpresentation/opf reads catalog schema ${reads}. Install the gallery release for schema ${reads} (the range in @openpresentation/opf's dependencies), or pass catalogs explicitly.`;
|
|
8
|
+
}
|
|
9
|
+
var mismatch = galleryMismatch(CATALOG_SCHEMA$1);
|
|
10
|
+
var DEFAULTS = Object.freeze([gallery]);
|
|
11
|
+
function defaultCatalogs() {
|
|
12
|
+
if (mismatch) throw new OPFApiError(mismatch, "gallery-schema-mismatch", { details: { gallery: CATALOG_SCHEMA$1, core: CATALOG_SCHEMA } });
|
|
13
|
+
return DEFAULTS;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { defaultCatalogs, galleryMismatch };
|