@projektemacher/storymapjs 0.10.7 → 0.10.8
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/CHANGELOG +350 -19
- package/README.md +43 -9
- package/dist/assets/demo-DBpeF31K.js +1 -0
- package/dist/assets/harness-Cr0rYpvt.js +1 -0
- package/dist/assets/harness-multi-CYHgI0a9.js +1 -0
- package/dist/assets/harness-support-Do7sIp2j.js +1 -0
- package/dist/assets/index-wHPqGrBS.js +1 -0
- package/dist/assets/main-DXalctuR.js +17 -0
- package/dist/context.json +12 -9
- package/dist/css/fonts/files/amatic-sc-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-hebrew-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-hebrew-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/dancing-script-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-hebrew-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-hebrew-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/unica-one-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/font.abril-droidsans.css +3 -0
- package/dist/css/fonts/font.amatic-andika.css +57 -0
- package/dist/css/fonts/font.bitter-raleway.css +111 -0
- package/dist/css/fonts/font.cairo.css +312 -0
- package/dist/css/fonts/font.clicker-garamond.css +93 -0
- package/dist/css/fonts/font.dancing-ledger.css +12 -0
- package/dist/css/fonts/font.default.css +183 -0
- package/dist/css/fonts/font.fjalla-average.css +3 -0
- package/dist/css/fonts/font.georgia-helvetica.css +3 -0
- package/dist/css/fonts/font.knightlab.css +642 -0
- package/dist/css/fonts/font.lustria-lato.css +3 -0
- package/dist/css/fonts/font.medula-lato.css +3 -0
- package/dist/css/fonts/font.oldstandard.css +84 -0
- package/dist/css/fonts/font.opensans-gentiumbook.css +183 -0
- package/dist/css/fonts/font.playfair-faunaone.css +39 -0
- package/dist/css/fonts/font.playfair.css +147 -0
- package/dist/css/fonts/font.pt.css +183 -0
- package/dist/css/fonts/font.roboto-megrim.css +3 -0
- package/dist/css/fonts/font.rufina-sintony.css +3 -0
- package/dist/css/fonts/font.ubuntu.css +291 -0
- package/dist/css/fonts/font.unicaone-vollkorn.css +84 -0
- package/dist/css/storymap.css +1 -1
- package/dist/demo.html +2 -2
- package/dist/docs/api/.nojekyll +1 -0
- package/dist/docs/api/assets/custom.css +47 -0
- package/dist/docs/api/assets/hierarchy.js +1 -0
- package/dist/docs/api/assets/highlight.css +57 -0
- package/dist/docs/api/assets/icons.js +18 -0
- package/dist/docs/api/assets/icons.svg +1 -0
- package/dist/docs/api/assets/main.js +60 -0
- package/dist/docs/api/assets/navigation.js +1 -0
- package/dist/docs/api/assets/search.js +1 -0
- package/dist/docs/api/assets/style.css +1648 -0
- package/dist/docs/api/classes/StoryMap.html +1604 -0
- package/dist/docs/api/functions/MediaType.html +51 -0
- package/dist/docs/api/functions/isPresentation3Collection.html +47 -0
- package/dist/docs/api/functions/isPresentation3Manifest.html +53 -0
- package/dist/docs/api/functions/loadCSS.html +63 -0
- package/dist/docs/api/functions/manifestToStorymapData.html +49 -0
- package/dist/docs/api/functions/setLanguage.html +54 -0
- package/dist/docs/api/functions/storymapToManifest.html +57 -0
- package/dist/docs/api/functions/validateStorymap.html +53 -0
- package/dist/docs/api/functions/validateStorymapAndReport.html +54 -0
- package/dist/docs/api/hierarchy.html +28 -0
- package/dist/docs/api/index.html +197 -0
- package/dist/docs/api/interfaces/AnimationHandle.html +60 -0
- package/dist/docs/api/interfaces/ImagereadyPayload.html +71 -0
- package/dist/docs/api/interfaces/LanguageEntry.html +102 -0
- package/dist/docs/api/interfaces/LatLngLiteral.html +73 -0
- package/dist/docs/api/interfaces/LoadOptions.html +59 -0
- package/dist/docs/api/interfaces/OlLayer.html +1400 -0
- package/dist/docs/api/interfaces/OlMap.html +1656 -0
- package/dist/docs/api/interfaces/OlProjection.html +332 -0
- package/dist/docs/api/interfaces/OlSource.html +784 -0
- package/dist/docs/api/interfaces/OlTileLayer.html +1497 -0
- package/dist/docs/api/interfaces/OlVectorLayer.html +1559 -0
- package/dist/docs/api/interfaces/OlView.html +1958 -0
- package/dist/docs/api/interfaces/StorymapData.html +71 -0
- package/dist/docs/api/interfaces/StorymapDataWrapper.html +60 -0
- package/dist/docs/api/interfaces/StorymapDocument.html +68 -0
- package/dist/docs/api/interfaces/StorymapError.html +63 -0
- package/dist/docs/api/interfaces/StorymapGeoreference.html +93 -0
- package/dist/docs/api/interfaces/StorymapGeoreferenceBody.html +74 -0
- package/dist/docs/api/interfaces/StorymapGroundControlPoint.html +69 -0
- package/dist/docs/api/interfaces/StorymapLanguageMap.html +57 -0
- package/dist/docs/api/interfaces/StorymapManifest.html +118 -0
- package/dist/docs/api/interfaces/StorymapManifestAnnotation.html +105 -0
- package/dist/docs/api/interfaces/StorymapManifestBackground.html +81 -0
- package/dist/docs/api/interfaces/StorymapManifestCanvas.html +140 -0
- package/dist/docs/api/interfaces/StorymapManifestContentResource.html +97 -0
- package/dist/docs/api/interfaces/StorymapManifestFeatureCollection.html +82 -0
- package/dist/docs/api/interfaces/StorymapManifestGeoreferencing.html +87 -0
- package/dist/docs/api/interfaces/StorymapManifestImageService.html +69 -0
- package/dist/docs/api/interfaces/StorymapManifestRange.html +75 -0
- package/dist/docs/api/interfaces/StorymapManifestService.html +77 -0
- package/dist/docs/api/interfaces/StorymapManifestSpecificResource.html +69 -0
- package/dist/docs/api/interfaces/StorymapManifestStatement.html +63 -0
- package/dist/docs/api/interfaces/StorymapMapOptions.html +92 -0
- package/dist/docs/api/interfaces/StorymapOptions.html +532 -0
- package/dist/docs/api/interfaces/StorymapOverlayLayer.html +126 -0
- package/dist/docs/api/interfaces/StorymapSlide.html +132 -0
- package/dist/docs/api/interfaces/StorymapSlideBackground.html +72 -0
- package/dist/docs/api/interfaces/StorymapSlideLocation.html +117 -0
- package/dist/docs/api/interfaces/StorymapSlideMarker.html +104 -0
- package/dist/docs/api/interfaces/StorymapSlideMedia.html +110 -0
- package/dist/docs/api/interfaces/StorymapSlideNarration.html +65 -0
- package/dist/docs/api/interfaces/StorymapSlideText.html +72 -0
- package/dist/docs/api/interfaces/StorymapTilejson.html +105 -0
- package/dist/docs/api/media/es.json +31 -0
- package/dist/docs/api/media/migration-from-knightlab.md +359 -0
- package/dist/docs/api/modules.html +50 -0
- package/dist/docs/api/types/ContentState.html +70 -0
- package/dist/docs/api/types/ImagereadyKind.html +34 -0
- package/dist/docs/api/types/MediaTypeMatch.html +78 -0
- package/dist/docs/api/types/TileSourceFactory.html +53 -0
- package/dist/docs/authoring.html +293 -0
- package/dist/docs/iiif.html +617 -62
- package/dist/docs/migration.html +313 -11
- package/dist/docs/readme.html +40 -9
- package/dist/embed/index.html +1 -1
- package/dist/examples/issue-242-nonlatin.json +55 -0
- package/dist/examples/issue-305-start-at-slide-data.json +96 -0
- package/dist/examples/issue-358-iframe.json +57 -0
- package/dist/examples/issue-iiif-geo.json +32 -0
- package/dist/examples/issue-image-alt.json +23 -0
- package/dist/examples/issue-image-region.json +42 -0
- package/dist/examples/issue-image-srcset.json +24 -0
- package/dist/examples/map-area-overlays.json +68 -0
- package/dist/examples/no-map.json +44 -0
- package/dist/examples-iiif/annotated-image.json +188 -0
- package/dist/examples-iiif/bob-boilen.json +11 -5
- package/dist/examples-iiif/courbet.json +9 -6
- package/dist/examples-iiif/empty.json +8 -4
- package/dist/examples-iiif/flickr-drewvigal.json +248 -24
- package/dist/examples-iiif/flickr-zach.wise.json +8 -4
- package/dist/examples-iiif/georeferenced-layer-unsupported.json +153 -0
- package/dist/examples-iiif/georeferenced-layer.json +318 -0
- package/dist/examples-iiif/iiif-wellcome.json +9 -6
- package/dist/examples-iiif/instagram-chenpamela.json +381 -36
- package/dist/examples-iiif/instagram_brentfoster.json +429 -40
- package/dist/examples-iiif/instagram_couch.json +261 -26
- package/dist/examples-iiif/instagram_joegermuska.json +441 -41
- package/dist/examples-iiif/instagram_matteich.json +261 -26
- package/dist/examples-iiif/instagram_mirandamulligan.json +261 -26
- package/dist/examples-iiif/instagram_raymondmccrea.json +261 -26
- package/dist/examples-iiif/instagram_test.json +261 -26
- package/dist/examples-iiif/issue-134-no-lines.json +9 -5
- package/dist/examples-iiif/issue-177-color-vars.json +9 -5
- package/dist/examples-iiif/issue-211-rtl.json +9 -5
- package/dist/examples-iiif/issue-242-nonlatin.json +239 -0
- package/dist/examples-iiif/issue-272-facebook.json +9 -5
- package/dist/examples-iiif/issue-305-start-at-slide-data.json +305 -0
- package/dist/examples-iiif/issue-305-start-at-slide.json +9 -5
- package/dist/examples-iiif/issue-341-distance.json +9 -5
- package/dist/examples-iiif/issue-358-iframe.json +190 -0
- package/dist/examples-iiif/issue-360-juxtapose.json +22 -7
- package/dist/examples-iiif/issue-368-null-fields.json +9 -5
- package/dist/examples-iiif/issue-375-code-lists.json +9 -5
- package/dist/examples-iiif/issue-381-dateline.json +9 -5
- package/dist/examples-iiif/issue-405-custom-icon.json +203 -0
- package/dist/examples-iiif/issue-425-many-slides.json +9 -5
- package/dist/examples-iiif/issue-428-background.json +20 -8
- package/dist/examples-iiif/issue-435-googlemaps.json +9 -5
- package/dist/examples-iiif/issue-437-documentcloud.json +22 -7
- package/dist/examples-iiif/issue-451-webp.json +9 -5
- package/dist/examples-iiif/issue-455-audio.json +9 -5
- package/dist/examples-iiif/issue-480-shorts.json +9 -5
- package/dist/examples-iiif/issue-506-marker-sync.json +9 -5
- package/dist/examples-iiif/issue-iiif-geo.json +200 -0
- package/dist/examples-iiif/issue-image-alt.json +90 -0
- package/dist/examples-iiif/issue-image-region.json +203 -0
- package/dist/examples-iiif/issue-image-srcset.json +87 -0
- package/dist/examples-iiif/jansteen.json +9 -6
- package/dist/examples-iiif/katrina.json +197 -41
- package/dist/examples-iiif/map-area-overlays.json +289 -0
- package/dist/examples-iiif/marktwain.json +255 -58
- package/dist/examples-iiif/no-map.json +148 -0
- package/dist/examples-iiif/population.json +440 -76
- package/dist/examples-iiif/president.json +456 -83
- package/dist/examples-iiif/scroll-hint.json +190 -0
- package/dist/examples-iiif/seurat.json +113 -22
- package/dist/examples-iiif/zoomify-clamp.json +153 -0
- package/dist/harness-multi.html +17 -0
- package/dist/harness.html +3 -2
- package/dist/index.html +16 -10
- package/dist/js/storymap.d.ts +1439 -114
- package/dist/js/storymap.js +24654 -21936
- package/dist/js/storymap.js.map +1 -1
- package/dist/navplace-properties.json +40 -0
- package/docs/migration-from-knightlab.md +229 -9
- package/docs/storymap-as-iiif-manifest.md +559 -135
- package/package.json +11 -8
- package/schema/storymap.schema.json +431 -78
- package/src/animation/easings.ts +8 -1
- package/src/animation/tween.ts +186 -0
- package/src/core/Browser.ts +6 -5
- package/src/core/Load.ts +54 -2
- package/src/core/Util.ts +255 -193
- package/src/core/mixins.ts +24 -7
- package/src/core/viewers.ts +94 -0
- package/src/dom/DomEvent.ts +27 -8
- package/src/globals.d.ts +8 -0
- package/src/language/Language.ts +199 -25
- package/src/language/locale/.expected-gaps.json +86 -0
- package/src/language/locale/be.json +15 -2
- package/src/language/locale/bg.json +15 -2
- package/src/language/locale/cs.json +15 -2
- package/src/language/locale/de.json +12 -1
- package/src/language/locale/el.json +15 -2
- package/src/language/locale/en.json +6 -2
- package/src/language/locale/es.json +15 -2
- package/src/language/locale/et.json +5 -1
- package/src/language/locale/fr.json +15 -2
- package/src/language/locale/he.json +16 -3
- package/src/language/locale/hu.json +15 -2
- package/src/language/locale/is.json +5 -1
- package/src/language/locale/it.json +15 -2
- package/src/language/locale/jp.json +15 -2
- package/src/language/locale/ko.json +15 -2
- package/src/language/locale/nl.json +15 -2
- package/src/language/locale/nn.json +5 -1
- package/src/language/locale/no.json +15 -2
- package/src/language/locale/pl.json +15 -2
- package/src/language/locale/pt.json +15 -2
- package/src/language/locale/ru.json +15 -2
- package/src/language/locale/sk.json +15 -2
- package/src/language/locale/sr.json +5 -1
- package/src/language/locale/sv.json +15 -2
- package/src/language/locale/tr.json +15 -2
- package/src/language/locale/uk.json +15 -2
- package/src/language/locale/ur.json +5 -1
- package/src/language/locale/zh-cn.json +15 -2
- package/src/language/locale/zh-tw.json +15 -2
- package/src/main.ts +92 -0
- package/src/map/Map.ts +183 -106
- package/src/map/MapMarker.ts +28 -5
- package/src/map/georeference.ts +325 -0
- package/src/map/openlayers/Map.OpenLayers.ts +850 -237
- package/src/map/openlayers/MapMarker.OpenLayers.ts +248 -24
- package/src/map/openlayers/zoomifyTiles.ts +1 -4
- package/src/media/EmbedUtil.ts +308 -24
- package/src/media/Media.ts +243 -55
- package/src/media/embedId.ts +104 -0
- package/src/media/types/Audio.ts +9 -82
- package/src/media/types/Blockquote.ts +2 -3
- package/src/media/types/DailyMotion.ts +5 -10
- package/src/media/types/DocumentCloud.ts +6 -35
- package/src/media/types/Facebook.ts +3 -4
- package/src/media/types/Flickr.ts +9 -9
- package/src/media/types/GoogleDoc.ts +3 -4
- package/src/media/types/HtmlMedia.ts +167 -0
- package/src/media/types/IFrame.ts +3 -4
- package/src/media/types/Image.ts +72 -6
- package/src/media/types/Juxtapose.ts +14 -5
- package/src/media/types/SoundCloud.ts +28 -6
- package/src/media/types/Text.ts +19 -13
- package/src/media/types/Twitter.ts +27 -14
- package/src/media/types/Video.ts +9 -79
- package/src/media/types/Vimeo.ts +10 -10
- package/src/media/types/Website.ts +23 -13
- package/src/media/types/Wikipedia.ts +18 -8
- package/src/media/types/YouTube.ts +71 -39
- package/src/scss/Typography.scss +1 -3
- package/src/scss/VCO.StoryMap.Dark.scss +18 -6
- package/src/scss/VCO.StoryMap.scss +37 -6
- package/src/scss/Variables.Dark.scss +3 -2
- package/src/scss/Variables.scss +3 -2
- package/src/scss/core/Mixins.scss +5 -63
- package/src/scss/fonts/font.amatic-andika.scss +3 -0
- package/src/scss/fonts/font.bitter-raleway.scss +6 -0
- package/src/scss/fonts/font.cairo.scss +79 -0
- package/src/scss/fonts/font.clicker-garamond.scss +5 -0
- package/src/scss/fonts/font.dancing-ledger.scss +1 -0
- package/src/scss/fonts/font.knightlab.scss +14 -0
- package/src/scss/fonts/font.oldstandard.scss +6 -0
- package/src/scss/fonts/font.opensans-gentiumbook.scss +5 -0
- package/src/scss/fonts/font.playfair-faunaone.scss +2 -0
- package/src/scss/fonts/font.playfair.scss +4 -0
- package/src/scss/fonts/font.pt.scss +6 -0
- package/src/scss/fonts/font.ubuntu.scss +4 -0
- package/src/scss/fonts/font.unicaone-vollkorn.scss +5 -0
- package/src/scss/map/VCO.MapMarker.scss +98 -3
- package/src/scss/media/VCO.Media.scss +7 -10
- package/src/scss/media/types/VCO.Media.Text.scss +8 -0
- package/src/scss/media/types/VCO.Media.Wikipedia.scss +2 -1
- package/src/scss/slider/VCO.Slide.scss +13 -3
- package/src/scss/slider/VCO.SlideNav.scss +11 -17
- package/src/scss/slider/VCO.StorySlider.scss +4 -2
- package/src/scss/ui/VCO.Consent.scss +44 -0
- package/src/scss/ui/VCO.MenuBar.Button.scss +8 -0
- package/src/scss/ui/VCO.Message.scss +2 -5
- package/src/site/site.ts +2 -1
- package/src/slider/Slide.ts +121 -27
- package/src/slider/SlideNav.ts +39 -5
- package/src/slider/StorySlider.ts +153 -42
- package/src/storymap/Consent.ts +407 -82
- package/src/storymap/StoryMap.ts +1192 -182
- package/src/storymap/content-state.ts +185 -0
- package/src/storymap/iiif.ts +1526 -68
- package/src/storymap/to-iiif.ts +921 -0
- package/src/storymap/validate.ts +80 -7
- package/src/types.ts +223 -26
- package/src/ui/MenuBar.ts +98 -45
- package/src/ui/Message.ts +9 -0
- package/src/ui/Swipable.ts +145 -78
- package/dist/assets/demo-D6cTmzn6.js +0 -1
- package/dist/assets/harness-BPFlzutp.js +0 -1
- package/dist/assets/index-DDsPBPZA.js +0 -1
- package/dist/assets/main-Y-MYUSJ4.js +0 -17
- package/src/animation/morpheus.d.ts +0 -41
- package/src/scss/media/types/VCO.Media.Instagram.scss +0 -7
- package/src/scss/media/types/VCO.Media.Profile.scss +0 -5
- package/src/ui/Draggable.ts +0 -374
package/src/storymap/validate.ts
CHANGED
|
@@ -27,6 +27,10 @@ interface SchemaNode {
|
|
|
27
27
|
items?: SchemaNode;
|
|
28
28
|
required?: string[];
|
|
29
29
|
properties?: Record<string, SchemaNode>;
|
|
30
|
+
/** Value must satisfy at least one of these. */
|
|
31
|
+
anyOf?: SchemaNode[];
|
|
32
|
+
/** Annotation only — see `formatMatches`. */
|
|
33
|
+
format?: string;
|
|
30
34
|
[key: string]: unknown;
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -50,14 +54,46 @@ function typeMatches(value: unknown, type: string | string[]): boolean {
|
|
|
50
54
|
return typeof value === "boolean";
|
|
51
55
|
case "null":
|
|
52
56
|
return value === null;
|
|
53
|
-
case "uri":
|
|
54
|
-
return typeof value === "string";
|
|
55
57
|
default:
|
|
56
58
|
return true;
|
|
57
59
|
}
|
|
58
60
|
});
|
|
59
61
|
}
|
|
60
62
|
|
|
63
|
+
/**
|
|
64
|
+
* JSON Schema `format` is an annotation by default, so it is only checked
|
|
65
|
+
* where it costs nothing. The schema uses it twice, both for icon/image URLs.
|
|
66
|
+
* Note this was previously listed as a *type* in `typeMatches`, where it was
|
|
67
|
+
* unreachable: `typeMatches` is only ever called with `schemaNode.type`.
|
|
68
|
+
*/
|
|
69
|
+
/**
|
|
70
|
+
* A malformed `pattern` in the schema used to throw straight out of
|
|
71
|
+
* validation, aborting `new StoryMap(...)` instead of reporting an error.
|
|
72
|
+
*/
|
|
73
|
+
function safeRegExp(pattern: string, value: string): boolean {
|
|
74
|
+
try {
|
|
75
|
+
return new RegExp(pattern).test(value);
|
|
76
|
+
} catch {
|
|
77
|
+
// an unusable pattern must not make the document fail to load
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function formatMatches(value: unknown, format: string): boolean {
|
|
83
|
+
if (typeof value !== "string") {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
if (format === "uri" || format === "uri-reference") {
|
|
87
|
+
try {
|
|
88
|
+
new URL(value, "https://example.invalid/");
|
|
89
|
+
return true;
|
|
90
|
+
} catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
|
|
61
97
|
function validateAgainstSchema(
|
|
62
98
|
value: unknown,
|
|
63
99
|
schemaNode: SchemaNode,
|
|
@@ -78,6 +114,36 @@ function validateAgainstSchema(
|
|
|
78
114
|
return;
|
|
79
115
|
}
|
|
80
116
|
|
|
117
|
+
// anyOf — the schema uses it for map_bbox, map_overview_center and the
|
|
118
|
+
// legacy zoomify block. It was not implemented at all, so those three
|
|
119
|
+
// fields (including map_bbox's "exactly 4 numbers" rule) were accepted
|
|
120
|
+
// completely unvalidated at runtime and by the CLI.
|
|
121
|
+
if (schemaNode.anyOf) {
|
|
122
|
+
// try each branch into a scratch error list; the value is valid if any
|
|
123
|
+
// branch accepts it
|
|
124
|
+
const branchErrors: StorymapError[][] = schemaNode.anyOf.map((branch) => {
|
|
125
|
+
const collected: StorymapError[] = [];
|
|
126
|
+
validateAgainstSchema(value, branch, path, collected);
|
|
127
|
+
return collected;
|
|
128
|
+
});
|
|
129
|
+
const anyOfValid = branchErrors.some((collected) => collected.length === 0);
|
|
130
|
+
if (!anyOfValid) {
|
|
131
|
+
// report the closest branch: the most likely intent
|
|
132
|
+
let best = branchErrors[0] ?? [];
|
|
133
|
+
for (const candidate of branchErrors) {
|
|
134
|
+
if (candidate.length > 0 && candidate.length < best.length) {
|
|
135
|
+
best = candidate;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
errors.push(...best);
|
|
139
|
+
errors.push({
|
|
140
|
+
path,
|
|
141
|
+
message: `must match one of the ${schemaNode.anyOf.length} allowed shapes`,
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
81
147
|
// type
|
|
82
148
|
if (schemaNode.type) {
|
|
83
149
|
if (!typeMatches(value, schemaNode.type)) {
|
|
@@ -115,11 +181,19 @@ function validateAgainstSchema(
|
|
|
115
181
|
if (schemaNode.minLength !== undefined && value.length < schemaNode.minLength) {
|
|
116
182
|
errors.push({ path, message: `must be at least ${schemaNode.minLength} characters` });
|
|
117
183
|
}
|
|
118
|
-
if (schemaNode.
|
|
184
|
+
if (schemaNode.maxLength !== undefined && value.length > schemaNode.maxLength) {
|
|
185
|
+
errors.push({ path, message: `must be at most ${schemaNode.maxLength} characters` });
|
|
186
|
+
}
|
|
187
|
+
if (schemaNode.pattern !== undefined && !safeRegExp(schemaNode.pattern, value)) {
|
|
119
188
|
errors.push({ path, message: `must match ${schemaNode.pattern}` });
|
|
120
189
|
}
|
|
121
190
|
}
|
|
122
191
|
|
|
192
|
+
// format (annotation)
|
|
193
|
+
if (schemaNode.format && !formatMatches(value, schemaNode.format)) {
|
|
194
|
+
errors.push({ path, message: `must be a valid ${schemaNode.format}` });
|
|
195
|
+
}
|
|
196
|
+
|
|
123
197
|
// array constraints
|
|
124
198
|
if (Array.isArray(value)) {
|
|
125
199
|
if (schemaNode.minItems !== undefined && value.length < schemaNode.minItems) {
|
|
@@ -128,10 +202,9 @@ function validateAgainstSchema(
|
|
|
128
202
|
if (schemaNode.maxItems !== undefined && value.length > schemaNode.maxItems) {
|
|
129
203
|
errors.push({ path, message: `must have at most ${schemaNode.maxItems} items` });
|
|
130
204
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
);
|
|
205
|
+
const items = schemaNode.items;
|
|
206
|
+
if (items) {
|
|
207
|
+
value.forEach((item, i) => validateAgainstSchema(item, items, `${path}[${i}]`, errors));
|
|
135
208
|
}
|
|
136
209
|
}
|
|
137
210
|
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// Shared types for the StoryMapJS codebase.
|
|
2
|
+
import type { Tile as TileLayer } from "ol/layer";
|
|
3
|
+
import type Layer from "ol/layer/Layer";
|
|
4
|
+
import type Source from "ol/source/Source";
|
|
2
5
|
|
|
3
6
|
// ---------- Storymap data (exchange format) ----------
|
|
4
7
|
|
|
@@ -12,6 +15,12 @@ export interface StorymapSlideLocation {
|
|
|
12
15
|
lat?: number;
|
|
13
16
|
lon?: number;
|
|
14
17
|
zoom?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Image region `[x, y, w, h]` in image pixels (IIIF xywh convention,
|
|
20
|
+
* StrollView-style image stops): the view fits the region on
|
|
21
|
+
* navigation; image maps (`map_type: "iiif"` + `map_as_image`) only.
|
|
22
|
+
*/
|
|
23
|
+
region?: [number, number, number, number];
|
|
15
24
|
line?: boolean;
|
|
16
25
|
icon?: string;
|
|
17
26
|
iconSize?: number[];
|
|
@@ -32,8 +41,56 @@ export interface StorymapSlideMedia {
|
|
|
32
41
|
url?: string | null;
|
|
33
42
|
caption?: string | null;
|
|
34
43
|
credit?: string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Accessible description of the media, used as the image's `alt` when the
|
|
46
|
+
* media is an image. In IIIF this is the painting annotation's
|
|
47
|
+
* `accessibilitySummary`.
|
|
48
|
+
*/
|
|
49
|
+
alt?: string | null;
|
|
35
50
|
thumb?: string | null;
|
|
36
51
|
mediatype?: MediaTypeMatch | null;
|
|
52
|
+
/**
|
|
53
|
+
* WebVTT subtitle file for an audio or video slide, rendered as a
|
|
54
|
+
* `<track kind="subtitles">`. IIIF has no subtitle term, so this stays a
|
|
55
|
+
* storymap-JSON field; the authoring guide notes the
|
|
56
|
+
* `TextualBody` + `format: text/vtt` shape we also accept.
|
|
57
|
+
*/
|
|
58
|
+
subtitles?: string | null;
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Optional spoken narration for one slide, played through a dedicated audio
|
|
64
|
+
* element rather than the slide's media frame — a tour stop usually has a
|
|
65
|
+
* picture and a recording, not one media item. Storymap JSON only: the
|
|
66
|
+
* closest manifest spelling is a `Sound` body, which currently lands in
|
|
67
|
+
* `media.url` rather than here.
|
|
68
|
+
*/
|
|
69
|
+
/**
|
|
70
|
+
* Per-slide marker presentation, consolidated. `location.*` keeps working as
|
|
71
|
+
* the legacy spelling and `marker.*` wins when present — see
|
|
72
|
+
* docs/plans/iiif-media-tours.md §2.
|
|
73
|
+
*
|
|
74
|
+
* In a IIIF manifest none of this is a `storymap:` term: it all arrives in the
|
|
75
|
+
* `navPlace` Feature's `properties` bag (`icon`, `iconSize`, `image`, `name`,
|
|
76
|
+
* `popup`, `audioBadge`), which is a GeoJSON foreign-member bag and so needs
|
|
77
|
+
* no vocabulary registration.
|
|
78
|
+
*/
|
|
79
|
+
export interface StorymapSlideMarker {
|
|
80
|
+
icon?: string;
|
|
81
|
+
iconSize?: number[];
|
|
82
|
+
image?: string;
|
|
83
|
+
/** The marker label; in a manifest this is `properties.name`. */
|
|
84
|
+
label?: string;
|
|
85
|
+
/** Show the popup card when this (active) marker is clicked. */
|
|
86
|
+
popup?: boolean;
|
|
87
|
+
/** Mark slides that carry narration or audio media with a small badge. */
|
|
88
|
+
audioBadge?: boolean;
|
|
89
|
+
[key: string]: unknown;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface StorymapSlideNarration {
|
|
93
|
+
url: string;
|
|
37
94
|
[key: string]: unknown;
|
|
38
95
|
}
|
|
39
96
|
|
|
@@ -43,15 +100,33 @@ export interface StorymapSlideBackground {
|
|
|
43
100
|
opacity?: number;
|
|
44
101
|
}
|
|
45
102
|
|
|
103
|
+
/**
|
|
104
|
+
* One slide of a storymap.
|
|
105
|
+
*
|
|
106
|
+
* The nullable members (`| null`) are not decoration: the storymap JSON uses
|
|
107
|
+
* `null` to mean "explicitly absent" and the viewer seeds its own defaults
|
|
108
|
+
* with `null` before the data is merged in, so a plain `?` would not type.
|
|
109
|
+
*/
|
|
46
110
|
export interface StorymapSlide {
|
|
47
111
|
type?: string;
|
|
48
112
|
date?: string | Record<string, unknown> | null;
|
|
49
113
|
group?: string;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
114
|
+
/**
|
|
115
|
+
* The language tag this slide's text was read in (§3.4 of
|
|
116
|
+
* docs/plans/iiif-interop.md). A IIIF manifest states its text as a
|
|
117
|
+
* language map; the reader picks the viewer's configured language and
|
|
118
|
+
* reports which one it used, so a host can offer a language switch.
|
|
119
|
+
* Absent for language-neutral (`none`) text, and for a single-language
|
|
120
|
+
* storymap.
|
|
121
|
+
*/
|
|
122
|
+
language?: string;
|
|
123
|
+
location?: StorymapSlideLocation | null;
|
|
124
|
+
media?: StorymapSlideMedia | null;
|
|
125
|
+
marker?: StorymapSlideMarker | null;
|
|
126
|
+
narration?: StorymapSlideNarration | null;
|
|
127
|
+
text?: StorymapSlideText | null;
|
|
53
128
|
background?: StorymapSlideBackground | string | null;
|
|
54
|
-
uniqueid?: string;
|
|
129
|
+
uniqueid?: string | null;
|
|
55
130
|
[key: string]: unknown;
|
|
56
131
|
}
|
|
57
132
|
|
|
@@ -67,6 +142,21 @@ export interface StorymapDataWrapper {
|
|
|
67
142
|
|
|
68
143
|
// ---------- StoryMap / Map options ----------
|
|
69
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Custom tile layer/source factory (see
|
|
147
|
+
* `StorymapOptions.tile_source_factory`). `createDefault` runs the
|
|
148
|
+
* built-in `map_type` handling, so a factory can decorate or delegate.
|
|
149
|
+
*
|
|
150
|
+
* May return any `ol/layer/Layer` (used as-is — this is what lets a
|
|
151
|
+
* third-party layer such as an Allmaps `WarpedMapLayer` render), a bare
|
|
152
|
+
* `Source` (wrapped in a `TileLayer`), or `null`/`undefined` to fall
|
|
153
|
+
* through to the default `map_type` handling.
|
|
154
|
+
*/
|
|
155
|
+
export type TileSourceFactory = (
|
|
156
|
+
map_type: string,
|
|
157
|
+
context: { options: StorymapOptions; createDefault: () => TileLayer },
|
|
158
|
+
) => Layer | TileLayer | Source | null | undefined;
|
|
159
|
+
|
|
70
160
|
export interface StorymapOptions {
|
|
71
161
|
width: number;
|
|
72
162
|
height: number;
|
|
@@ -75,7 +165,6 @@ export interface StorymapOptions {
|
|
|
75
165
|
default_bg_color: { r: number; g: number; b: number };
|
|
76
166
|
map_size_sticky: number;
|
|
77
167
|
map_center_offset: { left: number; top: number } | null;
|
|
78
|
-
less_bounce: boolean;
|
|
79
168
|
start_at_slide: number;
|
|
80
169
|
call_to_action: boolean;
|
|
81
170
|
call_to_action_text: string;
|
|
@@ -89,7 +178,6 @@ export interface StorymapOptions {
|
|
|
89
178
|
skinny_size: number;
|
|
90
179
|
duration: number;
|
|
91
180
|
ease: unknown;
|
|
92
|
-
dragging: boolean;
|
|
93
181
|
trackResize: boolean;
|
|
94
182
|
/**
|
|
95
183
|
* Navigate slides with arrow keys anywhere on the page (default false:
|
|
@@ -101,6 +189,13 @@ export interface StorymapOptions {
|
|
|
101
189
|
nocache: boolean;
|
|
102
190
|
/** Advance slides automatically every N milliseconds; 0 disables (issue #380) */
|
|
103
191
|
autoplay: number;
|
|
192
|
+
/**
|
|
193
|
+
* With autoplay on, wait for the current slide's audio or video to end
|
|
194
|
+
* before advancing instead of using the `autoplay` millisecond timer,
|
|
195
|
+
* which stays as the fallback. Slides without playable media keep the
|
|
196
|
+
* timer, so a mixed story never stalls.
|
|
197
|
+
*/
|
|
198
|
+
autoplay_media: boolean;
|
|
104
199
|
/** Show a progress bar in the menubar (issue #247) */
|
|
105
200
|
show_progress: boolean;
|
|
106
201
|
/** Show the slide headline as a label on the active map marker (issue #243) */
|
|
@@ -110,6 +205,15 @@ export interface StorymapOptions {
|
|
|
110
205
|
/** Override the overview fit center (issues #107, #271) */
|
|
111
206
|
map_overview_center: { lat: number; lon: number } | null;
|
|
112
207
|
map_type: string;
|
|
208
|
+
/**
|
|
209
|
+
* Custom OpenLayers tile layer/source factory (issue #473): consulted
|
|
210
|
+
* by the tile layer factory before the built-in `map_type` switch, for
|
|
211
|
+
* every base, overlay and minimap layer. Return a `TileLayer` (or a
|
|
212
|
+
* bare `Source`, auto-wrapped in one) for custom handling — e.g. WMS —
|
|
213
|
+
* or `null`/`undefined` to fall through to the default types.
|
|
214
|
+
* Constructor- and runtime-only: functions cannot ride storymap JSON.
|
|
215
|
+
*/
|
|
216
|
+
tile_source_factory: TileSourceFactory | null;
|
|
113
217
|
attribution: string;
|
|
114
218
|
/**
|
|
115
219
|
* Stacked raster overlays above the base map, below the route lines.
|
|
@@ -119,7 +223,6 @@ export interface StorymapOptions {
|
|
|
119
223
|
*/
|
|
120
224
|
overlays: StorymapOverlayLayer[];
|
|
121
225
|
map_mini: boolean;
|
|
122
|
-
map_subdomains: string;
|
|
123
226
|
map_as_image: boolean;
|
|
124
227
|
map_access_token: string;
|
|
125
228
|
map_background_color: string;
|
|
@@ -160,7 +263,9 @@ export interface StorymapOptions {
|
|
|
160
263
|
/**
|
|
161
264
|
* Ask for permission before loading anything from external services
|
|
162
265
|
* (media embeds, map tiles, external font CSS) — GDPR consent mode.
|
|
163
|
-
*
|
|
266
|
+
* Decisions are remembered per service in `localStorage` under
|
|
267
|
+
* `storymapjs-consent` with no expiry: clearing site data is what makes
|
|
268
|
+
* the viewer ask again.
|
|
164
269
|
*/
|
|
165
270
|
consent_required: boolean;
|
|
166
271
|
/** Slide text color override, sets --vco-color-text (issue #177) */
|
|
@@ -170,14 +275,13 @@ export interface StorymapOptions {
|
|
|
170
275
|
/** Show the great-circle route distance in the menubar (issue #341) */
|
|
171
276
|
show_distance: boolean;
|
|
172
277
|
/**
|
|
173
|
-
* Raw OpenLayers map configuration. `controls`
|
|
174
|
-
*
|
|
278
|
+
* Raw OpenLayers map configuration. `controls` replaces the StoryMapJS
|
|
279
|
+
* defaults, `interactions` are *added to* the viewer's own pan/zoom
|
|
280
|
+
* interactions, and `view` is merged over the computed default view
|
|
175
281
|
* and `element` (an HTMLElement or DOM id) replaces the auto-created map
|
|
176
282
|
* container div.
|
|
177
283
|
*/
|
|
178
284
|
map_options: StorymapMapOptions;
|
|
179
|
-
map_popup: boolean;
|
|
180
|
-
zoom_distance: number;
|
|
181
285
|
calculate_zoom: boolean;
|
|
182
286
|
line_follows_path: boolean;
|
|
183
287
|
line_color: string;
|
|
@@ -190,12 +294,17 @@ export interface StorymapOptions {
|
|
|
190
294
|
show_history_line: boolean;
|
|
191
295
|
use_custom_markers: boolean;
|
|
192
296
|
iiif: { url: string; attribution: string };
|
|
297
|
+
tilejson?: StorymapTilejson;
|
|
298
|
+
/**
|
|
299
|
+
* The `seeAlso` targets a IIIF manifest points at, recorded but not
|
|
300
|
+
* fetched — see `loadSeeAlso()` (§5.2 of docs/plans/iiif-interop.md).
|
|
301
|
+
*/
|
|
302
|
+
see_also?: { id: string; type: string }[];
|
|
193
303
|
map_height: number;
|
|
194
304
|
storyslider_height: number;
|
|
195
305
|
slide_padding_lr: number;
|
|
196
306
|
slide_default_fade: string;
|
|
197
307
|
menubar_default_y: number;
|
|
198
|
-
path_gfx: string;
|
|
199
308
|
script_path: string;
|
|
200
309
|
font_css: string;
|
|
201
310
|
language: string;
|
|
@@ -219,14 +328,43 @@ export interface AnimationHandle {
|
|
|
219
328
|
|
|
220
329
|
// ---------- map ----------
|
|
221
330
|
|
|
331
|
+
/**
|
|
332
|
+
* TileJSON 2.1 tile source metadata, from a manifest's map configuration
|
|
333
|
+
* service (§2.9 of docs/plans/iiif-interop.md).
|
|
334
|
+
*
|
|
335
|
+
* This is how a manifest states a tile source: `tiles` is the URL template and
|
|
336
|
+
* the rest is the standard metadata around it, where a keyword basemap
|
|
337
|
+
* (`osm`, `stadia`, `iiif`, …) has no such thing to say. `minzoom`,
|
|
338
|
+
* `maxzoom`, `bounds` and `scheme` constrain the source; `center` and `zoom`
|
|
339
|
+
* set the initial view.
|
|
340
|
+
*/
|
|
341
|
+
export interface StorymapTilejson {
|
|
342
|
+
/** URL template, e.g. `https://tiles.example.org/{z}/{x}/{y}.png` */
|
|
343
|
+
tiles: string | string[];
|
|
344
|
+
/** Lowest zoom level the source has tiles for */
|
|
345
|
+
minzoom?: number;
|
|
346
|
+
/** Highest zoom level the source has tiles for */
|
|
347
|
+
maxzoom?: number;
|
|
348
|
+
/** `[west, south, east, north]`, WGS84 lon/lat, of the covered area */
|
|
349
|
+
bounds?: [number, number, number, number];
|
|
350
|
+
/** `xyz` (default) or `tms`, which flips the tile row order */
|
|
351
|
+
scheme?: "xyz" | "tms";
|
|
352
|
+
/** `[lon, lat, zoom]` of the map's default view */
|
|
353
|
+
center?: [number, number, number];
|
|
354
|
+
}
|
|
355
|
+
|
|
222
356
|
/**
|
|
223
357
|
* A stacked raster overlay above the base map (StorymapOptions.overlays).
|
|
224
358
|
* Presentation is declarative: hosts no longer need to reach into the
|
|
225
359
|
* layer objects for blend modes, clips or stacking tweaks.
|
|
226
360
|
*/
|
|
227
361
|
export interface StorymapOverlayLayer {
|
|
228
|
-
/**
|
|
229
|
-
|
|
362
|
+
/**
|
|
363
|
+
* Any `map_type` value the tile layer factory accepts. Required unless
|
|
364
|
+
* the entry carries a `georeference` (a placed IIIF image instead of
|
|
365
|
+
* a tile source).
|
|
366
|
+
*/
|
|
367
|
+
map_type?: string;
|
|
230
368
|
/** Layer opacity 0..1 (default 1) */
|
|
231
369
|
opacity?: number;
|
|
232
370
|
/** Initial visibility (default true) */
|
|
@@ -245,6 +383,52 @@ export interface StorymapOverlayLayer {
|
|
|
245
383
|
blendMode?: string;
|
|
246
384
|
/** Clip box `[west, south, east, north]` in lon/lat (mercator maps) */
|
|
247
385
|
extent?: [number, number, number, number];
|
|
386
|
+
/**
|
|
387
|
+
* IIIF Georeference Extension placement instead of a tile source. The
|
|
388
|
+
* ground control points are fitted affinely and the image is placed on
|
|
389
|
+
* the geographic map, so this is the manifest-side equivalent of a
|
|
390
|
+
* georeferenced raster overlay.
|
|
391
|
+
*/
|
|
392
|
+
georeference?: StorymapGeoreference;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* A IIIF Georeference Extension annotation body plus the image it places
|
|
397
|
+
* (`overlays[].georeference`). The `body` is the annotation payload of
|
|
398
|
+
* `iiif.io/api/extension/georef` verbatim: a GeoJSON FeatureCollection of
|
|
399
|
+
* ground control points pairing `properties.resourceCoords` (image pixels)
|
|
400
|
+
* with `geometry.coordinates` (WGS84 lon/lat), optionally carrying a
|
|
401
|
+
* `transformation` hint.
|
|
402
|
+
*
|
|
403
|
+
* The viewer fits the affine (first-order polynomial) case and places the
|
|
404
|
+
* image with OpenLayers' reprojection, which requires an axis-aligned
|
|
405
|
+
* placement; rotated or skewed sheets, higher-order polynomials and thin
|
|
406
|
+
* plate splines are reported and skipped — see the "Geo-referenced layers"
|
|
407
|
+
* section of docs/storymap-as-iiif-manifest.md.
|
|
408
|
+
*/
|
|
409
|
+
export interface StorymapGeoreference {
|
|
410
|
+
/** IIIF Image API service base (or a full-size image URL) to place */
|
|
411
|
+
url: string;
|
|
412
|
+
/** Image width in pixels (the resourceCoords space) */
|
|
413
|
+
width: number;
|
|
414
|
+
/** Image height in pixels */
|
|
415
|
+
height: number;
|
|
416
|
+
/** Georeference annotation body: the GCP FeatureCollection */
|
|
417
|
+
body: StorymapGeoreferenceBody;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export interface StorymapGeoreferenceBody {
|
|
421
|
+
type?: string;
|
|
422
|
+
/** `polynomial` with `order: 1`, or absent; other values are skipped */
|
|
423
|
+
transformation?: { type?: string; options?: { order?: number } };
|
|
424
|
+
features: StorymapGroundControlPoint[];
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/** One ground control point: an image pixel paired with a WGS84 position */
|
|
428
|
+
export interface StorymapGroundControlPoint {
|
|
429
|
+
type?: string;
|
|
430
|
+
properties?: { resourceCoords?: [number, number] };
|
|
431
|
+
geometry?: { type?: string; coordinates?: number[] };
|
|
248
432
|
}
|
|
249
433
|
|
|
250
434
|
/** OpenLayers passthrough options (see StorymapOptions.map_options) */
|
|
@@ -255,26 +439,39 @@ export interface StorymapMapOptions {
|
|
|
255
439
|
view?: Record<string, unknown>;
|
|
256
440
|
/** Replaces the default (empty) controls list */
|
|
257
441
|
controls?: unknown[];
|
|
258
|
-
/**
|
|
442
|
+
/**
|
|
443
|
+
* Added to the viewer's own pan/zoom interactions (not a replacement:
|
|
444
|
+
* the viewer's defaults are always added). `controls` *is* a
|
|
445
|
+
* replacement, since the viewer adds none of its own.
|
|
446
|
+
*/
|
|
259
447
|
interactions?: unknown[];
|
|
260
448
|
/** Any other ol/Map constructor option (layers, pixelRatio, ...) */
|
|
261
449
|
[key: string]: unknown;
|
|
262
450
|
}
|
|
263
451
|
|
|
452
|
+
/**
|
|
453
|
+
* A resolved geographic coordinate.
|
|
454
|
+
*
|
|
455
|
+
* `lat`/`lon` are required: this type is for points the map can actually
|
|
456
|
+
* focus on. A *slide* may carry a `location` without coordinates (an image
|
|
457
|
+
* region, an icon only) — that is `StorymapSlideLocation`, which keeps them
|
|
458
|
+
* optional. `lng` is accepted as a legacy alias on input only.
|
|
459
|
+
*/
|
|
264
460
|
export interface LatLngLiteral {
|
|
265
|
-
lat: number
|
|
266
|
-
lon
|
|
267
|
-
lng?: number
|
|
461
|
+
lat: number;
|
|
462
|
+
lon: number;
|
|
463
|
+
lng?: number;
|
|
268
464
|
}
|
|
269
465
|
|
|
270
|
-
|
|
466
|
+
/**
|
|
467
|
+
* A marker's data: the slide it was created from, plus the `real_marker` flag
|
|
468
|
+
* the marker sets once it has confirmed numeric lat/lon. A separate interface
|
|
469
|
+
* used to drift from `StorymapSlide` (narrower `text`, its own `location`),
|
|
470
|
+
* which then made `Map._createMarker(slide)` unassignable.
|
|
471
|
+
*/
|
|
472
|
+
export type MapMarkerData = StorymapSlide & {
|
|
271
473
|
real_marker?: boolean;
|
|
272
|
-
|
|
273
|
-
media?: StorymapSlideMedia & { mediatype?: MediaTypeMatch | null };
|
|
274
|
-
text?: { headline?: string };
|
|
275
|
-
type?: string;
|
|
276
|
-
[key: string]: unknown;
|
|
277
|
-
}
|
|
474
|
+
};
|
|
278
475
|
|
|
279
476
|
export type IconSpec = {
|
|
280
477
|
url: string;
|