@openpresentation/opf 0.18.3 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/browser.js +18 -20
- package/dist/{catalog-refs-BSfGELpt.d.ts → catalog-refs-CSHevLn1.d.ts} +1 -1
- package/dist/{chunk-KA3ZPFVT.js → chunk-65GDO6TJ.js} +96 -40
- package/dist/{chunk-JCOSZTOI.js → chunk-A6COIVTD.js} +7 -2
- package/dist/{chunk-ZCFSDSUX.js → chunk-AK4UXIRP.js} +1 -1
- package/dist/{chunk-WXSPETQ6.js → chunk-F7PLNWHQ.js} +25 -3
- package/dist/{chunk-MSFE2HUK.js → chunk-FGUQHD37.js} +16 -13
- package/dist/{chunk-GVOLSWAJ.js → chunk-GRN3U5JT.js} +5 -5
- package/dist/{chunk-TRELE6I6.js → chunk-HBFRNOP4.js} +1 -1
- package/dist/{chunk-R7KIASS4.js → chunk-LRPSMQ62.js} +1 -1
- package/dist/chunk-OOT5AY4V.js +16 -0
- package/dist/{chunk-FO3WGS4R.js → chunk-OVBGGGKO.js} +25 -16
- package/dist/{chunk-2PEWUUBR.js → chunk-R5T4H4ZV.js} +350 -314
- package/dist/{chunk-L5YACLWK.js → chunk-SEUJIS55.js} +2 -2
- package/dist/{chunk-ECP7QPGK.js → chunk-SIQWYDFF.js} +6 -6
- package/dist/chunk-UJSAR6GF.js +181 -0
- package/dist/{chunk-IM337HP5.js → chunk-V3RGXJJS.js} +4 -5
- package/dist/{chunk-WHHLGDCQ.js → chunk-WHKFIFN7.js} +1 -1
- package/dist/{chunk-K5EG3UMS.js → chunk-XWMKAJSS.js} +46 -17
- package/dist/{chunk-PNINP5IF.js → chunk-YAHPQRVU.js} +1 -1
- package/dist/{chunk-MBU42S5Y.js → chunk-ZPCKGGI6.js} +1152 -273
- package/dist/{composition-C-OoqvAr.d.ts → composition-DilAHoWM.d.ts} +385 -99
- package/dist/composition.d.ts +2 -2
- package/dist/composition.js +1 -2
- package/dist/conversion-NJQHH4QW.js +19 -0
- package/dist/{conversion-BxZbBd_0.d.ts → conversion-k9l5pQsq.d.ts} +11 -11
- 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-D19fyuNu.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 +27 -21
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +23853 -20994
- package/dist/font-policy.js +1 -1
- package/dist/format.js +2 -2
- package/dist/index.d.ts +22 -21
- package/dist/index.js +24 -27
- package/dist/markdown.d.ts +4 -4
- package/dist/markdown.js +7 -9
- package/dist/node-engine.d.ts +26 -9
- package/dist/node-engine.js +23 -24
- package/dist/{pagination-BaUjDrTz.d.ts → pagination-BNj5UQn5.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/reference/font-policy.json +25 -3
- 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 +193 -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-CWhPuYUt.d.ts} +2 -2
- package/dist/validator-Cse-AD32.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 +6 -9
- 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-4CLOEG6O.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,23 +1,21 @@
|
|
|
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 {
|
|
19
|
-
export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-2PEWUUBR.js';
|
|
20
|
-
export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-WXSPETQ6.js';
|
|
1
|
+
import { OPFApiError } from './chunk-V3RGXJJS.js';
|
|
2
|
+
export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-V3RGXJJS.js';
|
|
3
|
+
export { specFileEntries, specFileKinds, specFilePaths } from './chunk-UJSAR6GF.js';
|
|
4
|
+
export { OPFDataImportError, ingest, parseTabularData } from './chunk-AK4UXIRP.js';
|
|
5
|
+
export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-GRN3U5JT.js';
|
|
6
|
+
export { fromMarkdown, toMarkdown } from './chunk-FGUQHD37.js';
|
|
7
|
+
import './chunk-SIQWYDFF.js';
|
|
8
|
+
export { OPFMarkdownError } from './chunk-LRPSMQ62.js';
|
|
9
|
+
export { diff, merge } from './chunk-SEUJIS55.js';
|
|
10
|
+
export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-WHKFIFN7.js';
|
|
11
|
+
export { OPFFormatError, format } from './chunk-A6COIVTD.js';
|
|
12
|
+
export { OPFPaginationError, paginate, paginateSlide } from './chunk-OVBGGGKO.js';
|
|
13
|
+
import './chunk-YAHPQRVU.js';
|
|
14
|
+
import './chunk-HBFRNOP4.js';
|
|
15
|
+
export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-65GDO6TJ.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-ZPCKGGI6.js';
|
|
17
|
+
export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-R5T4H4ZV.js';
|
|
18
|
+
export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-F7PLNWHQ.js';
|
|
21
19
|
|
|
22
20
|
// src/browser.ts
|
|
23
21
|
var nodeOnly = (name, message) => new OPFApiError(`\`${name}\` ${message}`, "node-only", { details: { function: name, build: "browser" } });
|
|
@@ -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,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-ZPCKGGI6.js';
|
|
2
|
+
import { schemaEntries, schemas } from './chunk-R5T4H4ZV.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 = 2;
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import { presentation } from './chunk-
|
|
1
|
+
import { presentation } from './chunk-R5T4H4ZV.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}
|
|
@@ -44,6 +44,11 @@ var fontPolicySource = {
|
|
|
44
44
|
"replacement": {
|
|
45
45
|
"family": "Noto Sans Thai",
|
|
46
46
|
"compatibility": "visual",
|
|
47
|
+
"sizeAdjust": 0.75,
|
|
48
|
+
"lineAscent": 0.83,
|
|
49
|
+
"lineAscentMixed": 0.86,
|
|
50
|
+
"lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.833 / 0.833 / 0.833 em at 18 / 24 / 32 pt, with a Latin run 0.856 / 0.866 / 0.862 (replaces the 0.85 read from 1280 px PNGs). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
51
|
+
"sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Angsana New 5.06 advances over Noto Sans Thai's, fontkit, read in place). Exact 0.7401; worst line thai-digits +1.6 percent; Latin slack 42.9 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
47
52
|
"measured": {
|
|
48
53
|
"replacement": "Noto Sans Thai",
|
|
49
54
|
"meanAbsWidthDelta": 0.7476,
|
|
@@ -275,9 +280,9 @@ var fontPolicySource = {
|
|
|
275
280
|
"family": "Noto Naskh Arabic",
|
|
276
281
|
"compatibility": "visual",
|
|
277
282
|
"sizeAdjust": 0.64,
|
|
278
|
-
"lineAscent": 0.
|
|
279
|
-
"lineAscentMixed": 0.
|
|
280
|
-
"lineAscentBasis": "
|
|
283
|
+
"lineAscent": 0.74,
|
|
284
|
+
"lineAscentMixed": 0.8,
|
|
285
|
+
"lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.741 / 0.736 / 0.740 em at 18 / 24 / 32 pt, with a Latin run 0.801 / 0.810 / 0.800. Corrects RR-38's 0.70 / 0.78 (an earlier estimator; RR-38's own 2560 px PNGs re-read 0.743 / 0.745 / 0.746 and 0.79 to 0.80 with this rule). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
281
286
|
"sizeAdjustBasis": "RR-38: sum of Arabic Typesetting 6.85 advances over sum of Noto Naskh Arabic 400 advances (fontkit, each sample's OpenType language). 0.643 on the 12 Arabic-script corpus samples of opf-render test/fixtures/script-corpora.json (per-sample range 0.57 to 0.86); 0.598 on 29 Arabic strings of the RR-05b native deck (running Arabic text); 0.614 pooled; Noto Naskh Arabic 700 gives 0.62, 0.58 and 0.59, so bold runs draw about 3 percent long. Ink height of alef, lam, meem and heh is 0.71 of Noto Naskh Arabic's. 0.64 balances the two: lines come out about 4 percent longer than PowerPoint's and glyphs about 10 percent smaller. Native check (RR-38 probe): PowerPoint's BoundWidth of the 45-character probe line is 216.9, 289.0 and 386.1 pt at 18, 24 and 32 pt, 1.8 to 2.0 percent above the fontkit advance of the installed font (213.0, 284.0, 378.7).",
|
|
282
287
|
"measured": {
|
|
283
288
|
"replacement": "Noto Naskh Arabic",
|
|
@@ -1100,6 +1105,11 @@ var fontPolicySource = {
|
|
|
1100
1105
|
"replacement": {
|
|
1101
1106
|
"family": "Noto Sans Thai",
|
|
1102
1107
|
"compatibility": "visual",
|
|
1108
|
+
"sizeAdjust": 0.68,
|
|
1109
|
+
"lineAscent": 0.82,
|
|
1110
|
+
"lineAscentMixed": 0.85,
|
|
1111
|
+
"lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.815 / 0.819 / 0.813 em at 18 / 24 / 32 pt, with a Latin run 0.856 / 0.852 / 0.841. Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
1112
|
+
"sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (DilleniaUPC 5.05 advances over Noto Sans Thai's, fontkit, read in place). Exact 0.6704; worst line thai-digits +1.6 percent; Latin slack 41.5 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
1103
1113
|
"measured": {
|
|
1104
1114
|
"replacement": "Noto Sans Thai",
|
|
1105
1115
|
"meanAbsWidthDelta": 0.7077,
|
|
@@ -1905,6 +1915,8 @@ var fontPolicySource = {
|
|
|
1905
1915
|
"replacement": {
|
|
1906
1916
|
"family": "Noto Sans KR",
|
|
1907
1917
|
"compatibility": "visual",
|
|
1918
|
+
"sizeAdjust": 1.07,
|
|
1919
|
+
"sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Malgun Gothic 6.69 advances over Noto Sans KR's, fontkit, read in place). Exact 1.0557 on precomposed Hangul; worst line kore-sentence +1.6 percent at 1.07 (Hangul); latn-numerals +2.7 percent (Latin, at any factor); Latin slack 1.6 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010. Decomposed conjoining jamo (U+1100-11FF, U+A960-A97F, U+D7B0-D7FF; sample kore-jamo, 1.0669) is a documented limitation outside the row decision: PowerPoint draws it unshaped. No lineAscent: the native baseline is 1.06 em, below core's 1.0.",
|
|
1908
1920
|
"measured": {
|
|
1909
1921
|
"replacement": "Noto Sans KR",
|
|
1910
1922
|
"meanAbsWidthDelta": 0.0176,
|
|
@@ -2195,6 +2207,11 @@ var fontPolicySource = {
|
|
|
2195
2207
|
"replacement": {
|
|
2196
2208
|
"family": "Noto Sans Devanagari",
|
|
2197
2209
|
"compatibility": "visual",
|
|
2210
|
+
"sizeAdjust": 1.07,
|
|
2211
|
+
"lineAscent": 0.97,
|
|
2212
|
+
"lineAscentMixed": 0.94,
|
|
2213
|
+
"lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): Devanagari stem bottoms 0.981 / 0.972 / 0.969 em at 18 / 24 / 32 pt, with a Latin run 0.930 / 0.935 / 0.935. Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
2214
|
+
"sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Nirmala UI 1.46 advances over Noto Sans Devanagari's, fontkit, read in place). Exact 1.0695; worst line deva-matras +2.9 percent; Latin slack 6.0 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
2198
2215
|
"measured": {
|
|
2199
2216
|
"replacement": "Noto Sans Devanagari",
|
|
2200
2217
|
"meanAbsWidthDelta": 0.0638,
|
|
@@ -2901,6 +2918,11 @@ var fontPolicySource = {
|
|
|
2901
2918
|
"replacement": {
|
|
2902
2919
|
"family": "Noto Naskh Arabic",
|
|
2903
2920
|
"compatibility": "visual",
|
|
2921
|
+
"sizeAdjust": 0.89,
|
|
2922
|
+
"lineAscent": 0.76,
|
|
2923
|
+
"lineAscentMixed": 0.81,
|
|
2924
|
+
"lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.759 / 0.764 / 0.760 em at 18 / 24 / 32 pt, with a Latin run 0.819 / 0.810 / 0.810 (replaces the 0.78 read from 1280 px PNGs). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
2925
|
+
"sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Sakkal Majalla 7.00 advances over Noto Naskh Arabic's, fontkit, read in place). Exact 0.8866; worst line arab-fa-digits +2.6 percent; Latin slack 35.1 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
|
|
2904
2926
|
"measured": {
|
|
2905
2927
|
"replacement": "Noto Naskh Arabic",
|
|
2906
2928
|
"meanAbsWidthDelta": 0.5423,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-
|
|
2
|
-
import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-
|
|
3
|
-
import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-
|
|
4
|
-
import { validate } from './chunk-
|
|
5
|
-
import { checkCatalogsOption } from './chunk-
|
|
1
|
+
import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-LRPSMQ62.js';
|
|
2
|
+
import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-YAHPQRVU.js';
|
|
3
|
+
import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-HBFRNOP4.js';
|
|
4
|
+
import { validate } from './chunk-65GDO6TJ.js';
|
|
5
|
+
import { checkCatalogsOption, PROMOTED_REGION_KEY } from './chunk-ZPCKGGI6.js';
|
|
6
6
|
|
|
7
7
|
// src/markdown/canon.ts
|
|
8
8
|
var FORMAT_KEYS = FORMATTING;
|
|
@@ -1340,10 +1340,11 @@ var SlideParser = class {
|
|
|
1340
1340
|
set("tag", options.tag);
|
|
1341
1341
|
set("title", this.title);
|
|
1342
1342
|
set("subtitle", this.subtitle);
|
|
1343
|
-
const
|
|
1344
|
-
const
|
|
1343
|
+
const promoted = (block) => typeof block.options?.region === "string" && PROMOTED_REGION_KEY.test(block.options.region);
|
|
1344
|
+
const content = this.blocks.filter((block) => !promoted(block));
|
|
1345
|
+
const regions = this.blocks.filter(promoted);
|
|
1345
1346
|
const [only2] = content;
|
|
1346
|
-
if (content.length === 1 && only2?.key !== void 0 && only2.options?.id === void 0 && only2.options?.type === void 0 && isContentKey(only2.key) && Object.keys(only2.payload).length === 1) {
|
|
1347
|
+
if (content.length === 1 && only2?.key !== void 0 && only2.options?.id === void 0 && only2.options?.type === void 0 && only2.options?.region === void 0 && isContentKey(only2.key) && Object.keys(only2.payload).length === 1) {
|
|
1347
1348
|
slide[only2.key] = only2.payload[only2.key];
|
|
1348
1349
|
ctx.ranges.set(`${path}/${only2.key}`, only2.range);
|
|
1349
1350
|
} else if (content.length) {
|
|
@@ -1352,6 +1353,7 @@ var SlideParser = class {
|
|
|
1352
1353
|
const out = {};
|
|
1353
1354
|
if (block.options?.id !== void 0) out.id = block.options.id;
|
|
1354
1355
|
if (block.options?.type !== void 0) out.type = block.options.type;
|
|
1356
|
+
if (block.options?.region !== void 0) out.region = block.options.region;
|
|
1355
1357
|
return Object.assign(out, block.payload);
|
|
1356
1358
|
});
|
|
1357
1359
|
}
|
|
@@ -1596,7 +1598,7 @@ function nativeLines(key, canon, marker) {
|
|
|
1596
1598
|
}
|
|
1597
1599
|
function blockOptionsLine(spec, as) {
|
|
1598
1600
|
const parts = [];
|
|
1599
|
-
for (const [key, value] of [["id", spec.id], ["type", spec.type], ["as", as], ["region", spec.region]]) {
|
|
1601
|
+
for (const [key, value] of [["id", spec.id], ["type", spec.type], ["as", as], ["region", spec.region ?? spec.pin]]) {
|
|
1600
1602
|
if (value === void 0) continue;
|
|
1601
1603
|
const text = typeof value === "string" ? optionValue(value) : void 0;
|
|
1602
1604
|
if (text === void 0) return void 0;
|
|
@@ -1615,7 +1617,7 @@ function nativeBlock(spec, marker) {
|
|
|
1615
1617
|
const all = options ? [options, ...lines] : lines;
|
|
1616
1618
|
const { slide, clean } = parseSlideText(all.join("\n"));
|
|
1617
1619
|
if (!slide || !clean) continue;
|
|
1618
|
-
const target = spec.region !== void 0 ? slide[spec.region] : spec.id !== void 0 || spec.type !== void 0 ? slide.blocks?.[0] : slide;
|
|
1620
|
+
const target = spec.region !== void 0 ? slide[spec.region] : spec.id !== void 0 || spec.type !== void 0 || spec.pin !== void 0 ? slide.blocks?.[0] : slide;
|
|
1619
1621
|
if (target && same(target[spec.key], canon)) return all;
|
|
1620
1622
|
}
|
|
1621
1623
|
return void 0;
|
|
@@ -1695,9 +1697,10 @@ function emitSlide(slide, index, mode) {
|
|
|
1695
1697
|
slide.blocks.forEach((block, i) => {
|
|
1696
1698
|
const where = `${path}/blocks/${i}`;
|
|
1697
1699
|
if (!isRecord(block)) return;
|
|
1698
|
-
const
|
|
1700
|
+
const pin = typeof block.region === "string" ? block.region : void 0;
|
|
1701
|
+
const keys = Object.keys(block).filter((key) => key !== "id" && key !== "type" && !(key === "region" && pin !== void 0));
|
|
1699
1702
|
const only3 = keys.length === 1 && isContent(keys[0]) ? keys[0] : void 0;
|
|
1700
|
-
specs.push({ spec: { key: only3 ?? "", value: only3 ? block[only3] : void 0, id: block.id, type: block.type }, where, payload: block });
|
|
1703
|
+
specs.push({ spec: { key: only3 ?? "", value: only3 ? block[only3] : void 0, id: block.id, type: block.type, ...pin !== void 0 ? { pin } : {} }, where, payload: block });
|
|
1701
1704
|
});
|
|
1702
1705
|
for (const key of CONTENT2) if (slide[key] !== void 0) extras[key] = slide[key];
|
|
1703
1706
|
} else {
|
|
@@ -1716,7 +1719,7 @@ function emitSlide(slide, index, mode) {
|
|
|
1716
1719
|
const lines2 = spec.key ? nativeBlock(spec, marker) : void 0;
|
|
1717
1720
|
if (lines2) {
|
|
1718
1721
|
sections.push({ lines: lines2 });
|
|
1719
|
-
const written = { ...spec.id !== void 0 ? { id: spec.id } : {}, ...spec.type !== void 0 ? { type: spec.type } : {}, [spec.key]: canonContent(spec.key, spec.value) };
|
|
1722
|
+
const written = { ...spec.id !== void 0 ? { id: spec.id } : {}, ...spec.type !== void 0 ? { type: spec.type } : {}, ...spec.pin !== void 0 ? { region: spec.pin } : {}, [spec.key]: canonContent(spec.key, spec.value) };
|
|
1720
1723
|
if (spec.region !== void 0) exp[spec.region] = written;
|
|
1721
1724
|
else expBlocks.push(written);
|
|
1722
1725
|
const list = spec.key === "items" || spec.key === "bullets";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { fromMarkdown, toMarkdown } from './chunk-
|
|
2
|
-
import { fromYaml, toYaml } from './chunk-
|
|
3
|
-
import { NOT_CHECKED } from './chunk-
|
|
4
|
-
import { parseSource, validate, OPFValidationError } from './chunk-
|
|
5
|
-
import { checkCatalogsOption } from './chunk-
|
|
1
|
+
import { fromMarkdown, toMarkdown } from './chunk-FGUQHD37.js';
|
|
2
|
+
import { fromYaml, toYaml } from './chunk-SIQWYDFF.js';
|
|
3
|
+
import { NOT_CHECKED } from './chunk-LRPSMQ62.js';
|
|
4
|
+
import { parseSource, validate, OPFValidationError } from './chunk-65GDO6TJ.js';
|
|
5
|
+
import { checkCatalogsOption } from './chunk-ZPCKGGI6.js';
|
|
6
6
|
|
|
7
7
|
// src/deck-report.ts
|
|
8
8
|
var DECK_FORMATS = ["json", "yaml", "markdown"];
|