@projektemacher/storymapjs 0.10.7 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/CHANGELOG +431 -19
  2. package/README.md +168 -17
  3. package/dist/assets/demo-bWnOyfUw.js +1 -0
  4. package/dist/assets/harness-C3JUv5Ii.js +1 -0
  5. package/dist/assets/harness-multi-XZNex3tb.js +1 -0
  6. package/dist/assets/harness-support-CjfZIVeb.js +1 -0
  7. package/dist/assets/index-wHPqGrBS.js +1 -0
  8. package/dist/assets/main-DQ32hWBM.js +17 -0
  9. package/dist/context.json +23 -9
  10. package/dist/css/fonts/files/amatic-sc-cyrillic-400-normal.woff2 +0 -0
  11. package/dist/css/fonts/files/amatic-sc-cyrillic-700-normal.woff2 +0 -0
  12. package/dist/css/fonts/files/amatic-sc-hebrew-400-normal.woff2 +0 -0
  13. package/dist/css/fonts/files/amatic-sc-hebrew-700-normal.woff2 +0 -0
  14. package/dist/css/fonts/files/amatic-sc-vietnamese-400-normal.woff2 +0 -0
  15. package/dist/css/fonts/files/amatic-sc-vietnamese-700-normal.woff2 +0 -0
  16. package/dist/css/fonts/files/bitter-cyrillic-100-italic.woff2 +0 -0
  17. package/dist/css/fonts/files/bitter-cyrillic-100-normal.woff2 +0 -0
  18. package/dist/css/fonts/files/bitter-cyrillic-200-italic.woff2 +0 -0
  19. package/dist/css/fonts/files/bitter-cyrillic-200-normal.woff2 +0 -0
  20. package/dist/css/fonts/files/bitter-cyrillic-300-italic.woff2 +0 -0
  21. package/dist/css/fonts/files/bitter-cyrillic-300-normal.woff2 +0 -0
  22. package/dist/css/fonts/files/bitter-cyrillic-400-italic.woff2 +0 -0
  23. package/dist/css/fonts/files/bitter-cyrillic-400-normal.woff2 +0 -0
  24. package/dist/css/fonts/files/bitter-cyrillic-500-italic.woff2 +0 -0
  25. package/dist/css/fonts/files/bitter-cyrillic-500-normal.woff2 +0 -0
  26. package/dist/css/fonts/files/bitter-cyrillic-600-italic.woff2 +0 -0
  27. package/dist/css/fonts/files/bitter-cyrillic-600-normal.woff2 +0 -0
  28. package/dist/css/fonts/files/bitter-cyrillic-700-italic.woff2 +0 -0
  29. package/dist/css/fonts/files/bitter-cyrillic-700-normal.woff2 +0 -0
  30. package/dist/css/fonts/files/bitter-cyrillic-800-italic.woff2 +0 -0
  31. package/dist/css/fonts/files/bitter-cyrillic-800-normal.woff2 +0 -0
  32. package/dist/css/fonts/files/bitter-cyrillic-900-italic.woff2 +0 -0
  33. package/dist/css/fonts/files/bitter-cyrillic-900-normal.woff2 +0 -0
  34. package/dist/css/fonts/files/bitter-cyrillic-ext-100-italic.woff2 +0 -0
  35. package/dist/css/fonts/files/bitter-cyrillic-ext-100-normal.woff2 +0 -0
  36. package/dist/css/fonts/files/bitter-cyrillic-ext-200-italic.woff2 +0 -0
  37. package/dist/css/fonts/files/bitter-cyrillic-ext-200-normal.woff2 +0 -0
  38. package/dist/css/fonts/files/bitter-cyrillic-ext-300-italic.woff2 +0 -0
  39. package/dist/css/fonts/files/bitter-cyrillic-ext-300-normal.woff2 +0 -0
  40. package/dist/css/fonts/files/bitter-cyrillic-ext-400-italic.woff2 +0 -0
  41. package/dist/css/fonts/files/bitter-cyrillic-ext-400-normal.woff2 +0 -0
  42. package/dist/css/fonts/files/bitter-cyrillic-ext-500-italic.woff2 +0 -0
  43. package/dist/css/fonts/files/bitter-cyrillic-ext-500-normal.woff2 +0 -0
  44. package/dist/css/fonts/files/bitter-cyrillic-ext-600-italic.woff2 +0 -0
  45. package/dist/css/fonts/files/bitter-cyrillic-ext-600-normal.woff2 +0 -0
  46. package/dist/css/fonts/files/bitter-cyrillic-ext-700-italic.woff2 +0 -0
  47. package/dist/css/fonts/files/bitter-cyrillic-ext-700-normal.woff2 +0 -0
  48. package/dist/css/fonts/files/bitter-cyrillic-ext-800-italic.woff2 +0 -0
  49. package/dist/css/fonts/files/bitter-cyrillic-ext-800-normal.woff2 +0 -0
  50. package/dist/css/fonts/files/bitter-cyrillic-ext-900-italic.woff2 +0 -0
  51. package/dist/css/fonts/files/bitter-cyrillic-ext-900-normal.woff2 +0 -0
  52. package/dist/css/fonts/files/bitter-cyrillic-ext-wght-italic.woff2 +0 -0
  53. package/dist/css/fonts/files/bitter-cyrillic-ext-wght-normal.woff2 +0 -0
  54. package/dist/css/fonts/files/bitter-cyrillic-wght-italic.woff2 +0 -0
  55. package/dist/css/fonts/files/bitter-cyrillic-wght-normal.woff2 +0 -0
  56. package/dist/css/fonts/files/bitter-vietnamese-100-italic.woff2 +0 -0
  57. package/dist/css/fonts/files/bitter-vietnamese-100-normal.woff2 +0 -0
  58. package/dist/css/fonts/files/bitter-vietnamese-200-italic.woff2 +0 -0
  59. package/dist/css/fonts/files/bitter-vietnamese-200-normal.woff2 +0 -0
  60. package/dist/css/fonts/files/bitter-vietnamese-300-italic.woff2 +0 -0
  61. package/dist/css/fonts/files/bitter-vietnamese-300-normal.woff2 +0 -0
  62. package/dist/css/fonts/files/bitter-vietnamese-400-italic.woff2 +0 -0
  63. package/dist/css/fonts/files/bitter-vietnamese-400-normal.woff2 +0 -0
  64. package/dist/css/fonts/files/bitter-vietnamese-500-italic.woff2 +0 -0
  65. package/dist/css/fonts/files/bitter-vietnamese-500-normal.woff2 +0 -0
  66. package/dist/css/fonts/files/bitter-vietnamese-600-italic.woff2 +0 -0
  67. package/dist/css/fonts/files/bitter-vietnamese-600-normal.woff2 +0 -0
  68. package/dist/css/fonts/files/bitter-vietnamese-700-italic.woff2 +0 -0
  69. package/dist/css/fonts/files/bitter-vietnamese-700-normal.woff2 +0 -0
  70. package/dist/css/fonts/files/bitter-vietnamese-800-italic.woff2 +0 -0
  71. package/dist/css/fonts/files/bitter-vietnamese-800-normal.woff2 +0 -0
  72. package/dist/css/fonts/files/bitter-vietnamese-900-italic.woff2 +0 -0
  73. package/dist/css/fonts/files/bitter-vietnamese-900-normal.woff2 +0 -0
  74. package/dist/css/fonts/files/bitter-vietnamese-wght-italic.woff2 +0 -0
  75. package/dist/css/fonts/files/bitter-vietnamese-wght-normal.woff2 +0 -0
  76. package/dist/css/fonts/files/cairo-arabic-200-normal.woff2 +0 -0
  77. package/dist/css/fonts/files/cairo-arabic-300-normal.woff2 +0 -0
  78. package/dist/css/fonts/files/cairo-arabic-400-normal.woff2 +0 -0
  79. package/dist/css/fonts/files/cairo-arabic-500-normal.woff2 +0 -0
  80. package/dist/css/fonts/files/cairo-arabic-600-normal.woff2 +0 -0
  81. package/dist/css/fonts/files/cairo-arabic-700-normal.woff2 +0 -0
  82. package/dist/css/fonts/files/cairo-arabic-800-normal.woff2 +0 -0
  83. package/dist/css/fonts/files/cairo-arabic-900-normal.woff2 +0 -0
  84. package/dist/css/fonts/files/cairo-latin-200-normal.woff2 +0 -0
  85. package/dist/css/fonts/files/cairo-latin-300-normal.woff2 +0 -0
  86. package/dist/css/fonts/files/cairo-latin-400-normal.woff2 +0 -0
  87. package/dist/css/fonts/files/cairo-latin-500-normal.woff2 +0 -0
  88. package/dist/css/fonts/files/cairo-latin-600-normal.woff2 +0 -0
  89. package/dist/css/fonts/files/cairo-latin-700-normal.woff2 +0 -0
  90. package/dist/css/fonts/files/cairo-latin-800-normal.woff2 +0 -0
  91. package/dist/css/fonts/files/cairo-latin-900-normal.woff2 +0 -0
  92. package/dist/css/fonts/files/cairo-latin-ext-200-normal.woff2 +0 -0
  93. package/dist/css/fonts/files/cairo-latin-ext-300-normal.woff2 +0 -0
  94. package/dist/css/fonts/files/cairo-latin-ext-400-normal.woff2 +0 -0
  95. package/dist/css/fonts/files/cairo-latin-ext-500-normal.woff2 +0 -0
  96. package/dist/css/fonts/files/cairo-latin-ext-600-normal.woff2 +0 -0
  97. package/dist/css/fonts/files/cairo-latin-ext-700-normal.woff2 +0 -0
  98. package/dist/css/fonts/files/cairo-latin-ext-800-normal.woff2 +0 -0
  99. package/dist/css/fonts/files/cairo-latin-ext-900-normal.woff2 +0 -0
  100. package/dist/css/fonts/files/dancing-script-vietnamese-wght-normal.woff2 +0 -0
  101. package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-italic.woff2 +0 -0
  102. package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-normal.woff2 +0 -0
  103. package/dist/css/fonts/files/eb-garamond-cyrillic-wght-italic.woff2 +0 -0
  104. package/dist/css/fonts/files/eb-garamond-cyrillic-wght-normal.woff2 +0 -0
  105. package/dist/css/fonts/files/eb-garamond-greek-ext-wght-italic.woff2 +0 -0
  106. package/dist/css/fonts/files/eb-garamond-greek-ext-wght-normal.woff2 +0 -0
  107. package/dist/css/fonts/files/eb-garamond-greek-wght-italic.woff2 +0 -0
  108. package/dist/css/fonts/files/eb-garamond-greek-wght-normal.woff2 +0 -0
  109. package/dist/css/fonts/files/eb-garamond-vietnamese-wght-italic.woff2 +0 -0
  110. package/dist/css/fonts/files/eb-garamond-vietnamese-wght-normal.woff2 +0 -0
  111. package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-italic.woff2 +0 -0
  112. package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-normal.woff2 +0 -0
  113. package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-italic.woff2 +0 -0
  114. package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-normal.woff2 +0 -0
  115. package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-italic.woff2 +0 -0
  116. package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-normal.woff2 +0 -0
  117. package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-italic.woff2 +0 -0
  118. package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-normal.woff2 +0 -0
  119. package/dist/css/fonts/files/gentium-book-plus-greek-400-italic.woff2 +0 -0
  120. package/dist/css/fonts/files/gentium-book-plus-greek-400-normal.woff2 +0 -0
  121. package/dist/css/fonts/files/gentium-book-plus-greek-700-italic.woff2 +0 -0
  122. package/dist/css/fonts/files/gentium-book-plus-greek-700-normal.woff2 +0 -0
  123. package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-italic.woff2 +0 -0
  124. package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-normal.woff2 +0 -0
  125. package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-italic.woff2 +0 -0
  126. package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-normal.woff2 +0 -0
  127. package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-italic.woff2 +0 -0
  128. package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-normal.woff2 +0 -0
  129. package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-italic.woff2 +0 -0
  130. package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-normal.woff2 +0 -0
  131. package/dist/css/fonts/files/old-standard-tt-cyrillic-400-italic.woff2 +0 -0
  132. package/dist/css/fonts/files/old-standard-tt-cyrillic-400-normal.woff2 +0 -0
  133. package/dist/css/fonts/files/old-standard-tt-cyrillic-700-normal.woff2 +0 -0
  134. package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-italic.woff2 +0 -0
  135. package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-normal.woff2 +0 -0
  136. package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-700-normal.woff2 +0 -0
  137. package/dist/css/fonts/files/old-standard-tt-vietnamese-400-italic.woff2 +0 -0
  138. package/dist/css/fonts/files/old-standard-tt-vietnamese-400-normal.woff2 +0 -0
  139. package/dist/css/fonts/files/old-standard-tt-vietnamese-700-normal.woff2 +0 -0
  140. package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-italic.woff2 +0 -0
  141. package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-normal.woff2 +0 -0
  142. package/dist/css/fonts/files/open-sans-cyrillic-wght-italic.woff2 +0 -0
  143. package/dist/css/fonts/files/open-sans-cyrillic-wght-normal.woff2 +0 -0
  144. package/dist/css/fonts/files/open-sans-greek-ext-wght-italic.woff2 +0 -0
  145. package/dist/css/fonts/files/open-sans-greek-ext-wght-normal.woff2 +0 -0
  146. package/dist/css/fonts/files/open-sans-greek-wght-italic.woff2 +0 -0
  147. package/dist/css/fonts/files/open-sans-greek-wght-normal.woff2 +0 -0
  148. package/dist/css/fonts/files/open-sans-hebrew-wght-italic.woff2 +0 -0
  149. package/dist/css/fonts/files/open-sans-hebrew-wght-normal.woff2 +0 -0
  150. package/dist/css/fonts/files/open-sans-vietnamese-wght-italic.woff2 +0 -0
  151. package/dist/css/fonts/files/open-sans-vietnamese-wght-normal.woff2 +0 -0
  152. package/dist/css/fonts/files/playfair-display-cyrillic-wght-italic.woff2 +0 -0
  153. package/dist/css/fonts/files/playfair-display-cyrillic-wght-normal.woff2 +0 -0
  154. package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-italic.woff2 +0 -0
  155. package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-normal.woff2 +0 -0
  156. package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-italic.woff2 +0 -0
  157. package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-normal.woff2 +0 -0
  158. package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-italic.woff2 +0 -0
  159. package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-normal.woff2 +0 -0
  160. package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-italic.woff2 +0 -0
  161. package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-normal.woff2 +0 -0
  162. package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-italic.woff2 +0 -0
  163. package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-normal.woff2 +0 -0
  164. package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-italic.woff2 +0 -0
  165. package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-normal.woff2 +0 -0
  166. package/dist/css/fonts/files/playfair-display-vietnamese-wght-italic.woff2 +0 -0
  167. package/dist/css/fonts/files/playfair-display-vietnamese-wght-normal.woff2 +0 -0
  168. package/dist/css/fonts/files/pt-sans-cyrillic-400-italic.woff2 +0 -0
  169. package/dist/css/fonts/files/pt-sans-cyrillic-400-normal.woff2 +0 -0
  170. package/dist/css/fonts/files/pt-sans-cyrillic-700-italic.woff2 +0 -0
  171. package/dist/css/fonts/files/pt-sans-cyrillic-700-normal.woff2 +0 -0
  172. package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-italic.woff2 +0 -0
  173. package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-normal.woff2 +0 -0
  174. package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-italic.woff2 +0 -0
  175. package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-normal.woff2 +0 -0
  176. package/dist/css/fonts/files/pt-sans-narrow-cyrillic-400-normal.woff2 +0 -0
  177. package/dist/css/fonts/files/pt-sans-narrow-cyrillic-700-normal.woff2 +0 -0
  178. package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-400-normal.woff2 +0 -0
  179. package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-700-normal.woff2 +0 -0
  180. package/dist/css/fonts/files/pt-serif-cyrillic-400-italic.woff2 +0 -0
  181. package/dist/css/fonts/files/pt-serif-cyrillic-400-normal.woff2 +0 -0
  182. package/dist/css/fonts/files/pt-serif-cyrillic-700-italic.woff2 +0 -0
  183. package/dist/css/fonts/files/pt-serif-cyrillic-700-normal.woff2 +0 -0
  184. package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-italic.woff2 +0 -0
  185. package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-normal.woff2 +0 -0
  186. package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-italic.woff2 +0 -0
  187. package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-normal.woff2 +0 -0
  188. package/dist/css/fonts/files/raleway-cyrillic-ext-wght-italic.woff2 +0 -0
  189. package/dist/css/fonts/files/raleway-cyrillic-ext-wght-normal.woff2 +0 -0
  190. package/dist/css/fonts/files/raleway-cyrillic-wght-italic.woff2 +0 -0
  191. package/dist/css/fonts/files/raleway-cyrillic-wght-normal.woff2 +0 -0
  192. package/dist/css/fonts/files/raleway-vietnamese-wght-italic.woff2 +0 -0
  193. package/dist/css/fonts/files/raleway-vietnamese-wght-normal.woff2 +0 -0
  194. package/dist/css/fonts/files/roboto-slab-cyrillic-ext-wght-normal.woff2 +0 -0
  195. package/dist/css/fonts/files/roboto-slab-cyrillic-wght-normal.woff2 +0 -0
  196. package/dist/css/fonts/files/roboto-slab-greek-ext-wght-normal.woff2 +0 -0
  197. package/dist/css/fonts/files/roboto-slab-greek-wght-normal.woff2 +0 -0
  198. package/dist/css/fonts/files/roboto-slab-vietnamese-wght-normal.woff2 +0 -0
  199. package/dist/css/fonts/files/ubuntu-cyrillic-300-italic.woff2 +0 -0
  200. package/dist/css/fonts/files/ubuntu-cyrillic-300-normal.woff2 +0 -0
  201. package/dist/css/fonts/files/ubuntu-cyrillic-400-italic.woff2 +0 -0
  202. package/dist/css/fonts/files/ubuntu-cyrillic-400-normal.woff2 +0 -0
  203. package/dist/css/fonts/files/ubuntu-cyrillic-500-italic.woff2 +0 -0
  204. package/dist/css/fonts/files/ubuntu-cyrillic-500-normal.woff2 +0 -0
  205. package/dist/css/fonts/files/ubuntu-cyrillic-700-italic.woff2 +0 -0
  206. package/dist/css/fonts/files/ubuntu-cyrillic-700-normal.woff2 +0 -0
  207. package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-italic.woff2 +0 -0
  208. package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-normal.woff2 +0 -0
  209. package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-italic.woff2 +0 -0
  210. package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-normal.woff2 +0 -0
  211. package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-italic.woff2 +0 -0
  212. package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-normal.woff2 +0 -0
  213. package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-italic.woff2 +0 -0
  214. package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-normal.woff2 +0 -0
  215. package/dist/css/fonts/files/ubuntu-greek-300-italic.woff2 +0 -0
  216. package/dist/css/fonts/files/ubuntu-greek-300-normal.woff2 +0 -0
  217. package/dist/css/fonts/files/ubuntu-greek-400-italic.woff2 +0 -0
  218. package/dist/css/fonts/files/ubuntu-greek-400-normal.woff2 +0 -0
  219. package/dist/css/fonts/files/ubuntu-greek-500-italic.woff2 +0 -0
  220. package/dist/css/fonts/files/ubuntu-greek-500-normal.woff2 +0 -0
  221. package/dist/css/fonts/files/ubuntu-greek-700-italic.woff2 +0 -0
  222. package/dist/css/fonts/files/ubuntu-greek-700-normal.woff2 +0 -0
  223. package/dist/css/fonts/files/ubuntu-greek-ext-300-italic.woff2 +0 -0
  224. package/dist/css/fonts/files/ubuntu-greek-ext-300-normal.woff2 +0 -0
  225. package/dist/css/fonts/files/ubuntu-greek-ext-400-italic.woff2 +0 -0
  226. package/dist/css/fonts/files/ubuntu-greek-ext-400-normal.woff2 +0 -0
  227. package/dist/css/fonts/files/ubuntu-greek-ext-500-italic.woff2 +0 -0
  228. package/dist/css/fonts/files/ubuntu-greek-ext-500-normal.woff2 +0 -0
  229. package/dist/css/fonts/files/ubuntu-greek-ext-700-italic.woff2 +0 -0
  230. package/dist/css/fonts/files/ubuntu-greek-ext-700-normal.woff2 +0 -0
  231. package/dist/css/fonts/files/unica-one-vietnamese-400-normal.woff2 +0 -0
  232. package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-italic.woff2 +0 -0
  233. package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-normal.woff2 +0 -0
  234. package/dist/css/fonts/files/vollkorn-cyrillic-wght-italic.woff2 +0 -0
  235. package/dist/css/fonts/files/vollkorn-cyrillic-wght-normal.woff2 +0 -0
  236. package/dist/css/fonts/files/vollkorn-greek-wght-italic.woff2 +0 -0
  237. package/dist/css/fonts/files/vollkorn-greek-wght-normal.woff2 +0 -0
  238. package/dist/css/fonts/files/vollkorn-vietnamese-wght-italic.woff2 +0 -0
  239. package/dist/css/fonts/files/vollkorn-vietnamese-wght-normal.woff2 +0 -0
  240. package/dist/css/fonts/font.abril-droidsans.css +3 -0
  241. package/dist/css/fonts/font.amatic-andika.css +57 -0
  242. package/dist/css/fonts/font.bitter-raleway.css +111 -0
  243. package/dist/css/fonts/font.cairo.css +312 -0
  244. package/dist/css/fonts/font.clicker-garamond.css +93 -0
  245. package/dist/css/fonts/font.dancing-ledger.css +12 -0
  246. package/dist/css/fonts/font.default.css +183 -0
  247. package/dist/css/fonts/font.fjalla-average.css +3 -0
  248. package/dist/css/fonts/font.georgia-helvetica.css +3 -0
  249. package/dist/css/fonts/font.knightlab.css +642 -0
  250. package/dist/css/fonts/font.lustria-lato.css +3 -0
  251. package/dist/css/fonts/font.medula-lato.css +3 -0
  252. package/dist/css/fonts/font.oldstandard.css +84 -0
  253. package/dist/css/fonts/font.opensans-gentiumbook.css +183 -0
  254. package/dist/css/fonts/font.playfair-faunaone.css +39 -0
  255. package/dist/css/fonts/font.playfair.css +147 -0
  256. package/dist/css/fonts/font.pt.css +183 -0
  257. package/dist/css/fonts/font.roboto-megrim.css +3 -0
  258. package/dist/css/fonts/font.rufina-sintony.css +3 -0
  259. package/dist/css/fonts/font.ubuntu.css +291 -0
  260. package/dist/css/fonts/font.unicaone-vollkorn.css +84 -0
  261. package/dist/css/storymap.css +1 -1
  262. package/dist/demo.html +3 -2
  263. package/dist/docs/api/.nojekyll +1 -0
  264. package/dist/docs/api/assets/custom.css +47 -0
  265. package/dist/docs/api/assets/hierarchy.js +1 -0
  266. package/dist/docs/api/assets/highlight.css +57 -0
  267. package/dist/docs/api/assets/icons.js +18 -0
  268. package/dist/docs/api/assets/icons.svg +1 -0
  269. package/dist/docs/api/assets/main.js +60 -0
  270. package/dist/docs/api/assets/navigation.js +1 -0
  271. package/dist/docs/api/assets/search.js +1 -0
  272. package/dist/docs/api/assets/style.css +1648 -0
  273. package/dist/docs/api/classes/StoryMap.html +2112 -0
  274. package/dist/docs/api/functions/MediaType.html +51 -0
  275. package/dist/docs/api/functions/isPresentation3Collection.html +47 -0
  276. package/dist/docs/api/functions/isPresentation3Manifest.html +53 -0
  277. package/dist/docs/api/functions/isSlideshowCollection.html +51 -0
  278. package/dist/docs/api/functions/loadCSS.html +63 -0
  279. package/dist/docs/api/functions/manifestToStorymapData.html +49 -0
  280. package/dist/docs/api/functions/setLanguage.html +54 -0
  281. package/dist/docs/api/functions/slideshowToStorymapData.html +51 -0
  282. package/dist/docs/api/functions/slideshowVersion.html +48 -0
  283. package/dist/docs/api/functions/storymapToManifest.html +57 -0
  284. package/dist/docs/api/functions/validateStorymap.html +53 -0
  285. package/dist/docs/api/functions/validateStorymapAndReport.html +54 -0
  286. package/dist/docs/api/hierarchy.html +28 -0
  287. package/dist/docs/api/index.html +300 -0
  288. package/dist/docs/api/interfaces/AnimationHandle.html +60 -0
  289. package/dist/docs/api/interfaces/ImagereadyPayload.html +71 -0
  290. package/dist/docs/api/interfaces/LanguageEntry.html +102 -0
  291. package/dist/docs/api/interfaces/LatLngLiteral.html +73 -0
  292. package/dist/docs/api/interfaces/LoadOptions.html +59 -0
  293. package/dist/docs/api/interfaces/MapEvents.html +116 -0
  294. package/dist/docs/api/interfaces/MapMarkerEvents.html +66 -0
  295. package/dist/docs/api/interfaces/MarkerEventPayload.html +57 -0
  296. package/dist/docs/api/interfaces/MediaEvents.html +78 -0
  297. package/dist/docs/api/interfaces/MenuBarEvents.html +114 -0
  298. package/dist/docs/api/interfaces/MessageEvents.html +72 -0
  299. package/dist/docs/api/interfaces/OlLayer.html +1400 -0
  300. package/dist/docs/api/interfaces/OlMap.html +1656 -0
  301. package/dist/docs/api/interfaces/OlProjection.html +332 -0
  302. package/dist/docs/api/interfaces/OlSource.html +784 -0
  303. package/dist/docs/api/interfaces/OlTileLayer.html +1497 -0
  304. package/dist/docs/api/interfaces/OlVectorLayer.html +1559 -0
  305. package/dist/docs/api/interfaces/OlView.html +1958 -0
  306. package/dist/docs/api/interfaces/SlideBackgroundState.html +66 -0
  307. package/dist/docs/api/interfaces/SlideEvents.html +78 -0
  308. package/dist/docs/api/interfaces/SlideNavEvents.html +72 -0
  309. package/dist/docs/api/interfaces/SlideshowPlayerSettings.html +182 -0
  310. package/dist/docs/api/interfaces/SlideshowToStorymapResult.html +60 -0
  311. package/dist/docs/api/interfaces/SlideshowTranslatorOptions.html +65 -0
  312. package/dist/docs/api/interfaces/SlideshowWarning.html +72 -0
  313. package/dist/docs/api/interfaces/StoryMapEvents.html +146 -0
  314. package/dist/docs/api/interfaces/StoryMapMarker.html +763 -0
  315. package/dist/docs/api/interfaces/StorySliderEvents.html +102 -0
  316. package/dist/docs/api/interfaces/StorymapBasemap.html +69 -0
  317. package/dist/docs/api/interfaces/StorymapData.html +77 -0
  318. package/dist/docs/api/interfaces/StorymapDataWrapper.html +60 -0
  319. package/dist/docs/api/interfaces/StorymapDocument.html +68 -0
  320. package/dist/docs/api/interfaces/StorymapError.html +63 -0
  321. package/dist/docs/api/interfaces/StorymapGeoreference.html +93 -0
  322. package/dist/docs/api/interfaces/StorymapGeoreferenceBody.html +74 -0
  323. package/dist/docs/api/interfaces/StorymapGroundControlPoint.html +69 -0
  324. package/dist/docs/api/interfaces/StorymapLanguageMap.html +57 -0
  325. package/dist/docs/api/interfaces/StorymapManifest.html +118 -0
  326. package/dist/docs/api/interfaces/StorymapManifestAnnotation.html +137 -0
  327. package/dist/docs/api/interfaces/StorymapManifestBackground.html +81 -0
  328. package/dist/docs/api/interfaces/StorymapManifestCanvas.html +188 -0
  329. package/dist/docs/api/interfaces/StorymapManifestContentResource.html +97 -0
  330. package/dist/docs/api/interfaces/StorymapManifestFeatureCollection.html +82 -0
  331. package/dist/docs/api/interfaces/StorymapManifestGeoreferencing.html +87 -0
  332. package/dist/docs/api/interfaces/StorymapManifestImageService.html +69 -0
  333. package/dist/docs/api/interfaces/StorymapManifestRange.html +75 -0
  334. package/dist/docs/api/interfaces/StorymapManifestService.html +77 -0
  335. package/dist/docs/api/interfaces/StorymapManifestSpecificResource.html +69 -0
  336. package/dist/docs/api/interfaces/StorymapManifestStatement.html +63 -0
  337. package/dist/docs/api/interfaces/StorymapMapOptions.html +92 -0
  338. package/dist/docs/api/interfaces/StorymapOptions.html +734 -0
  339. package/dist/docs/api/interfaces/StorymapOverlayLayer.html +157 -0
  340. package/dist/docs/api/interfaces/StorymapSlide.html +186 -0
  341. package/dist/docs/api/interfaces/StorymapSlideBackground.html +72 -0
  342. package/dist/docs/api/interfaces/StorymapSlideLocation.html +161 -0
  343. package/dist/docs/api/interfaces/StorymapSlideMarker.html +103 -0
  344. package/dist/docs/api/interfaces/StorymapSlideMedia.html +149 -0
  345. package/dist/docs/api/interfaces/StorymapSlideNarration.html +117 -0
  346. package/dist/docs/api/interfaces/StorymapSlideText.html +72 -0
  347. package/dist/docs/api/interfaces/StorymapTilejson.html +105 -0
  348. package/dist/docs/api/interfaces/SwipableEvents.html +102 -0
  349. package/dist/docs/api/interfaces/TextEvents.html +66 -0
  350. package/dist/docs/api/media/es.json +31 -0
  351. package/dist/docs/api/media/events.md +66 -0
  352. package/dist/docs/api/media/migration-from-knightlab.md +399 -0
  353. package/dist/docs/api/media/slideshow.md +109 -0
  354. package/dist/docs/api/media/storymap-as-iiif-manifest.md +1007 -0
  355. package/dist/docs/api/modules.html +50 -0
  356. package/dist/docs/api/types/ContentState.html +70 -0
  357. package/dist/docs/api/types/FiredEvent.html +43 -0
  358. package/dist/docs/api/types/ImagereadyKind.html +34 -0
  359. package/dist/docs/api/types/MediaTypeMatch.html +78 -0
  360. package/dist/docs/api/types/SwipeDirection.html +36 -0
  361. package/dist/docs/api/types/TileSourceFactory.html +53 -0
  362. package/dist/docs/authoring.html +306 -0
  363. package/dist/docs/events.html +263 -0
  364. package/dist/docs/iiif.html +738 -69
  365. package/dist/docs/migration.html +360 -11
  366. package/dist/docs/readme.html +149 -17
  367. package/dist/embed/index.html +8 -1
  368. package/dist/examples/font-css-false.json +33 -0
  369. package/dist/examples/issue-242-nonlatin.json +55 -0
  370. package/dist/examples/issue-305-start-at-slide-data.json +96 -0
  371. package/dist/examples/issue-358-iframe.json +57 -0
  372. package/dist/examples/issue-iiif-geo.json +32 -0
  373. package/dist/examples/issue-image-alt.json +23 -0
  374. package/dist/examples/issue-image-region.json +42 -0
  375. package/dist/examples/issue-image-srcset.json +24 -0
  376. package/dist/examples/layers-control.json +60 -0
  377. package/dist/examples/map-area-overlays.json +68 -0
  378. package/dist/examples/map-template-provider.json +36 -0
  379. package/dist/examples/multi-media.json +71 -0
  380. package/dist/examples/no-map.json +44 -0
  381. package/dist/examples-iiif/annotated-image.json +204 -0
  382. package/dist/examples-iiif/bob-boilen.json +11 -5
  383. package/dist/examples-iiif/courbet.json +9 -6
  384. package/dist/examples-iiif/empty.json +8 -4
  385. package/dist/examples-iiif/flickr-drewvigal.json +248 -24
  386. package/dist/examples-iiif/flickr-zach.wise.json +8 -4
  387. package/dist/examples-iiif/font-css-false.json +114 -0
  388. package/dist/examples-iiif/georeferenced-layer-unsupported.json +153 -0
  389. package/dist/examples-iiif/georeferenced-layer.json +318 -0
  390. package/dist/examples-iiif/iiif-wellcome.json +9 -6
  391. package/dist/examples-iiif/instagram-chenpamela.json +381 -36
  392. package/dist/examples-iiif/instagram_brentfoster.json +429 -40
  393. package/dist/examples-iiif/instagram_couch.json +261 -26
  394. package/dist/examples-iiif/instagram_joegermuska.json +441 -41
  395. package/dist/examples-iiif/instagram_matteich.json +261 -26
  396. package/dist/examples-iiif/instagram_mirandamulligan.json +261 -26
  397. package/dist/examples-iiif/instagram_raymondmccrea.json +261 -26
  398. package/dist/examples-iiif/instagram_test.json +261 -26
  399. package/dist/examples-iiif/issue-134-no-lines.json +9 -5
  400. package/dist/examples-iiif/issue-177-color-vars.json +9 -5
  401. package/dist/examples-iiif/issue-211-rtl.json +9 -5
  402. package/dist/examples-iiif/issue-242-nonlatin.json +239 -0
  403. package/dist/examples-iiif/issue-272-facebook.json +9 -5
  404. package/dist/examples-iiif/issue-305-start-at-slide-data.json +305 -0
  405. package/dist/examples-iiif/issue-305-start-at-slide.json +9 -5
  406. package/dist/examples-iiif/issue-341-distance.json +9 -5
  407. package/dist/examples-iiif/issue-358-iframe.json +190 -0
  408. package/dist/examples-iiif/issue-360-juxtapose.json +22 -7
  409. package/dist/examples-iiif/issue-368-null-fields.json +9 -5
  410. package/dist/examples-iiif/issue-375-code-lists.json +9 -5
  411. package/dist/examples-iiif/issue-381-dateline.json +9 -5
  412. package/dist/examples-iiif/issue-405-custom-icon.json +203 -0
  413. package/dist/examples-iiif/issue-425-many-slides.json +9 -5
  414. package/dist/examples-iiif/issue-428-background.json +20 -8
  415. package/dist/examples-iiif/issue-435-googlemaps.json +9 -5
  416. package/dist/examples-iiif/issue-437-documentcloud.json +22 -7
  417. package/dist/examples-iiif/issue-451-webp.json +9 -5
  418. package/dist/examples-iiif/issue-455-audio.json +9 -5
  419. package/dist/examples-iiif/issue-480-shorts.json +9 -5
  420. package/dist/examples-iiif/issue-506-marker-sync.json +9 -5
  421. package/dist/examples-iiif/issue-iiif-geo.json +200 -0
  422. package/dist/examples-iiif/issue-image-alt.json +90 -0
  423. package/dist/examples-iiif/issue-image-region.json +203 -0
  424. package/dist/examples-iiif/issue-image-srcset.json +87 -0
  425. package/dist/examples-iiif/jansteen.json +9 -6
  426. package/dist/examples-iiif/katrina.json +197 -41
  427. package/dist/examples-iiif/layers-control.json +226 -0
  428. package/dist/examples-iiif/map-area-overlays.json +289 -0
  429. package/dist/examples-iiif/map-template-provider.json +133 -0
  430. package/dist/examples-iiif/marktwain.json +255 -58
  431. package/dist/examples-iiif/multi-media.json +237 -0
  432. package/dist/examples-iiif/no-map.json +148 -0
  433. package/dist/examples-iiif/population.json +440 -76
  434. package/dist/examples-iiif/president.json +456 -83
  435. package/dist/examples-iiif/scroll-hint.json +190 -0
  436. package/dist/examples-iiif/seurat.json +113 -22
  437. package/dist/examples-iiif/zoomify-clamp.json +153 -0
  438. package/dist/examples-slideshow/single.json +79 -0
  439. package/dist/examples-slideshow/static/pixel.png +0 -0
  440. package/dist/examples-slideshow/static.json +44 -0
  441. package/dist/harness-multi.html +17 -0
  442. package/dist/harness.html +4 -2
  443. package/dist/index.html +19 -12
  444. package/dist/js/storymap.d.ts +2669 -307
  445. package/dist/js/storymap.js +10820 -6196
  446. package/dist/js/storymap.js.map +1 -1
  447. package/dist/navplace-properties.json +54 -0
  448. package/dist/site.css +54 -36
  449. package/docs/migration-from-knightlab.md +279 -19
  450. package/docs/storymap-as-iiif-manifest.md +633 -136
  451. package/package.json +12 -7
  452. package/schema/storymap.schema.json +733 -80
  453. package/src/animation/easings.ts +8 -1
  454. package/src/animation/tween.ts +186 -0
  455. package/src/core/Browser.ts +6 -5
  456. package/src/core/Load.ts +54 -2
  457. package/src/core/Util.ts +257 -193
  458. package/src/core/mixins.ts +66 -35
  459. package/src/core/viewers.ts +94 -0
  460. package/src/dom/DomEvent.ts +27 -8
  461. package/src/globals.d.ts +8 -0
  462. package/src/language/Language.ts +206 -25
  463. package/src/language/locale/.expected-gaps.json +346 -0
  464. package/src/language/locale/be.json +15 -2
  465. package/src/language/locale/bg.json +15 -2
  466. package/src/language/locale/cs.json +15 -2
  467. package/src/language/locale/de.json +23 -2
  468. package/src/language/locale/el.json +15 -2
  469. package/src/language/locale/en.json +17 -3
  470. package/src/language/locale/es.json +15 -2
  471. package/src/language/locale/et.json +5 -1
  472. package/src/language/locale/fr.json +15 -2
  473. package/src/language/locale/he.json +16 -3
  474. package/src/language/locale/hu.json +15 -2
  475. package/src/language/locale/is.json +5 -1
  476. package/src/language/locale/it.json +15 -2
  477. package/src/language/locale/jp.json +15 -2
  478. package/src/language/locale/ko.json +15 -2
  479. package/src/language/locale/nl.json +15 -2
  480. package/src/language/locale/nn.json +5 -1
  481. package/src/language/locale/no.json +15 -2
  482. package/src/language/locale/pl.json +15 -2
  483. package/src/language/locale/pt.json +15 -2
  484. package/src/language/locale/ru.json +15 -2
  485. package/src/language/locale/sk.json +15 -2
  486. package/src/language/locale/sr.json +5 -1
  487. package/src/language/locale/sv.json +15 -2
  488. package/src/language/locale/tr.json +15 -2
  489. package/src/language/locale/uk.json +15 -2
  490. package/src/language/locale/ur.json +5 -1
  491. package/src/language/locale/zh-cn.json +15 -2
  492. package/src/language/locale/zh-tw.json +15 -2
  493. package/src/main.ts +143 -0
  494. package/src/map/Map.ts +227 -112
  495. package/src/map/MapMarker.ts +44 -8
  496. package/src/map/georeference.ts +325 -0
  497. package/src/map/openlayers/Map.OpenLayers.ts +1601 -263
  498. package/src/map/openlayers/MapMarker.OpenLayers.ts +348 -24
  499. package/src/map/openlayers/zoomifyTiles.ts +1 -4
  500. package/src/map/slideView.ts +149 -0
  501. package/src/map/types.ts +2 -0
  502. package/src/media/EmbedUtil.ts +333 -24
  503. package/src/media/Media.ts +270 -59
  504. package/src/media/embedId.ts +110 -0
  505. package/src/media/types/Audio.ts +9 -82
  506. package/src/media/types/Blockquote.ts +2 -3
  507. package/src/media/types/DailyMotion.ts +5 -10
  508. package/src/media/types/DocumentCloud.ts +6 -35
  509. package/src/media/types/Facebook.ts +3 -4
  510. package/src/media/types/Flickr.ts +23 -12
  511. package/src/media/types/GoogleDoc.ts +3 -4
  512. package/src/media/types/HtmlMedia.ts +233 -0
  513. package/src/media/types/IFrame.ts +3 -4
  514. package/src/media/types/Image.ts +87 -9
  515. package/src/media/types/Juxtapose.ts +14 -5
  516. package/src/media/types/SoundCloud.ts +28 -6
  517. package/src/media/types/Text.ts +46 -21
  518. package/src/media/types/Twitter.ts +35 -20
  519. package/src/media/types/Video.ts +9 -79
  520. package/src/media/types/Vimeo.ts +11 -11
  521. package/src/media/types/Website.ts +23 -13
  522. package/src/media/types/Wikipedia.ts +18 -8
  523. package/src/media/types/YouTube.ts +72 -40
  524. package/src/scss/Typography.scss +16 -18
  525. package/src/scss/VCO.StoryMap.scss +208 -12
  526. package/src/scss/Variables.scss +3 -2
  527. package/src/scss/core/Mixins.scss +5 -63
  528. package/src/scss/core/Reset.scss +5 -18
  529. package/src/scss/fonts/font.amatic-andika.scss +3 -0
  530. package/src/scss/fonts/font.bitter-raleway.scss +6 -0
  531. package/src/scss/fonts/font.cairo.scss +79 -0
  532. package/src/scss/fonts/font.clicker-garamond.scss +5 -0
  533. package/src/scss/fonts/font.dancing-ledger.scss +1 -0
  534. package/src/scss/fonts/font.knightlab.scss +14 -0
  535. package/src/scss/fonts/font.oldstandard.scss +6 -0
  536. package/src/scss/fonts/font.opensans-gentiumbook.scss +5 -0
  537. package/src/scss/fonts/font.playfair-faunaone.scss +2 -0
  538. package/src/scss/fonts/font.playfair.scss +4 -0
  539. package/src/scss/fonts/font.pt.scss +6 -0
  540. package/src/scss/fonts/font.ubuntu.scss +4 -0
  541. package/src/scss/fonts/font.unicaone-vollkorn.scss +5 -0
  542. package/src/scss/map/VCO.Map.scss +1 -1
  543. package/src/scss/map/VCO.MapMarker.scss +114 -8
  544. package/src/scss/map/openlayers/VCO.Map.OpenLayers.scss +7 -4
  545. package/src/scss/media/VCO.Media.scss +14 -17
  546. package/src/scss/media/types/VCO.Media.Blockquote.scss +1 -1
  547. package/src/scss/media/types/VCO.Media.Text.scss +13 -5
  548. package/src/scss/media/types/VCO.Media.Twitter.scss +4 -4
  549. package/src/scss/media/types/VCO.Media.Wikipedia.scss +3 -19
  550. package/src/scss/site/site.scss +55 -36
  551. package/src/scss/slider/VCO.Slide.scss +61 -13
  552. package/src/scss/slider/VCO.SlideNav.scss +34 -24
  553. package/src/scss/slider/VCO.StorySlider.scss +53 -1
  554. package/src/scss/snapmap/VCO.SnapMap.scss +3 -3
  555. package/src/scss/ui/VCO.Consent.scss +63 -13
  556. package/src/scss/ui/VCO.Layers.scss +119 -0
  557. package/src/scss/ui/VCO.MenuBar.Button.scss +143 -14
  558. package/src/scss/ui/VCO.MenuBar.scss +9 -2
  559. package/src/scss/ui/VCO.Message.scss +16 -5
  560. package/src/site/site.ts +2 -1
  561. package/src/slider/Slide.ts +326 -74
  562. package/src/slider/SlideNav.ts +54 -9
  563. package/src/slider/StorySlider.ts +352 -60
  564. package/src/storymap/Consent.ts +429 -82
  565. package/src/storymap/StoryMap.ts +2163 -340
  566. package/src/storymap/content-state.ts +180 -0
  567. package/src/storymap/font-css.ts +72 -0
  568. package/src/storymap/from-slideshow.ts +785 -0
  569. package/src/storymap/iiif-shared.ts +228 -0
  570. package/src/storymap/iiif.ts +1742 -95
  571. package/src/storymap/to-iiif.ts +1008 -0
  572. package/src/storymap/validate.ts +80 -7
  573. package/src/types.ts +591 -29
  574. package/src/ui/LayersControl.ts +302 -0
  575. package/src/ui/MenuBar.ts +325 -61
  576. package/src/ui/Message.ts +44 -2
  577. package/src/ui/Swipable.ts +170 -85
  578. package/dist/assets/demo-D6cTmzn6.js +0 -1
  579. package/dist/assets/harness-BPFlzutp.js +0 -1
  580. package/dist/assets/index-DDsPBPZA.js +0 -1
  581. package/dist/assets/main-Y-MYUSJ4.js +0 -17
  582. package/src/animation/morpheus.d.ts +0 -41
  583. package/src/scss/VCO.StoryMap.Dark.scss +0 -138
  584. package/src/scss/Variables.Dark.scss +0 -56
  585. package/src/scss/media/types/VCO.Media.Instagram.scss +0 -7
  586. package/src/scss/media/types/VCO.Media.Profile.scss +0 -5
  587. package/src/ui/Draggable.ts +0 -374
@@ -10,31 +10,70 @@
10
10
  "type": "object",
11
11
  "required": ["slides"],
12
12
  "properties": {
13
- "language": { "type": "string" },
13
+ "language": {
14
+ "type": "string"
15
+ },
14
16
  "map_type": {
15
- "type": "string",
16
- "description": "Basemap type: osm:<style>, osm (classic raster), mapbox://styles/<user>/<style>, stadia:<style>, stamen:<style> (deprecated, remapped), tile URL template or style JSON URL (absolute https://... or relative ./tiles/{z}/{x}/{y}.png, /tiles/{z}/...), iiif, ch-watercolor, zoomify (legacy image pyramid, needs the zoomify options)."
17
+ "description": "Basemap type, or \"none\" for a storymap with no map at all. A keyword: \"\" (the default, OpenStreetMap), osm:<style>, osm (classic raster), mapbox://styles/<user>/<style>, stadia:<style>, stamen:<style> (deprecated, remapped), iiif, ch-watercolor, zoomify (legacy image pyramid, needs the zoomify options). Or a tile URL template or style JSON URL (absolute https://... or relative ./tiles/{z}/{x}/{y}.png, /tiles/{z}/...).",
18
+ "anyOf": [
19
+ {
20
+ "type": "string",
21
+ "enum": [
22
+ "",
23
+ "none",
24
+ "osm",
25
+ "iiif",
26
+ "stamen",
27
+ "stadia",
28
+ "ch-watercolor",
29
+ "zoomify"
30
+ ]
31
+ },
32
+ {
33
+ "type": "string",
34
+ "pattern": "^(?:osm|stadia|mapbox|ch|esri|stamen)(?::|$)|\\{|/|\\.json$"
35
+ }
36
+ ]
17
37
  },
18
38
  "zoomify": {
19
39
  "anyOf": [
20
40
  {
21
41
  "type": "object",
22
42
  "properties": {
23
- "path": { "type": "string" },
24
- "width": { "type": "number" },
25
- "height": { "type": "number" },
26
- "tolerance": { "type": "number" },
27
- "attribution": { "type": "string" }
43
+ "path": {
44
+ "type": "string"
45
+ },
46
+ "width": {
47
+ "type": "number"
48
+ },
49
+ "height": {
50
+ "type": "number"
51
+ },
52
+ "tolerance": {
53
+ "type": "number"
54
+ },
55
+ "attribution": {
56
+ "type": "string"
57
+ }
28
58
  }
29
59
  },
30
- { "type": "boolean" }
60
+ {
61
+ "type": "boolean"
62
+ }
31
63
  ]
32
64
  },
33
- "map_as_image": { "type": "boolean" },
34
- "map_mini": { "type": "boolean" },
35
- "map_subdomains": { "type": "string" },
36
- "map_access_token": { "type": "string" },
37
- "map_background_color": { "type": "string" },
65
+ "map_as_image": {
66
+ "type": "boolean"
67
+ },
68
+ "map_mini": {
69
+ "type": "boolean"
70
+ },
71
+ "map_access_token": {
72
+ "type": "string"
73
+ },
74
+ "map_background_color": {
75
+ "type": "string"
76
+ },
38
77
  "map_options": {
39
78
  "type": "object",
40
79
  "description": "OpenLayers passthrough options (view, controls, interactions); element replaces the map container"
@@ -43,39 +82,188 @@
43
82
  "anyOf": [
44
83
  {
45
84
  "type": "array",
46
- "items": { "type": "number" },
85
+ "items": {
86
+ "type": "number"
87
+ },
47
88
  "minItems": 4,
48
89
  "maxItems": 4
49
90
  },
50
- { "type": "null" }
91
+ {
92
+ "type": "null"
93
+ }
51
94
  ]
52
95
  },
53
96
  "map_area": {
54
97
  "type": "string",
55
98
  "enum": ["full", "left"]
56
99
  },
57
- "consent_required": { "type": "boolean" },
100
+ "overview_extent": {
101
+ "anyOf": [
102
+ {
103
+ "type": "array",
104
+ "items": {
105
+ "type": "number"
106
+ },
107
+ "minItems": 4,
108
+ "maxItems": 4
109
+ },
110
+ {
111
+ "type": "null"
112
+ }
113
+ ],
114
+ "description": "Constrain the minimap overview to this lon/lat bounding box [west, south, east, north]; null (default) leaves it unconstrained"
115
+ },
116
+ "keyboard": {
117
+ "type": "boolean",
118
+ "description": "Navigate slides with the arrow keys anywhere on the page (default false)"
119
+ },
120
+ "overlays": {
121
+ "type": "array",
122
+ "description": "Raster layers stacked above the base map and below the route lines",
123
+ "items": {
124
+ "type": "object",
125
+ "properties": {
126
+ "map_type": {
127
+ "type": "string",
128
+ "description": "Any map_type the tile layer factory accepts. Omit when the entry carries a georeference instead."
129
+ },
130
+ "opacity": {
131
+ "type": "number",
132
+ "minimum": 0,
133
+ "maximum": 1
134
+ },
135
+ "visible": {
136
+ "type": "boolean"
137
+ },
138
+ "attribution": {
139
+ "type": "string"
140
+ },
141
+ "label": {
142
+ "type": "string",
143
+ "description": "Layer switcher row label (defaults to map_type)"
144
+ },
145
+ "locked": {
146
+ "type": "boolean",
147
+ "description": "Render the switcher row checked and disabled"
148
+ },
149
+ "control": {
150
+ "type": "boolean",
151
+ "description": "False hides the row from the switcher without removing the overlay"
152
+ },
153
+ "className": {
154
+ "type": "string",
155
+ "description": "CSS class of the layer container, isolating it from the shared ol-layer canvas (e.g. for blend modes)"
156
+ },
157
+ "blendMode": {
158
+ "type": "string"
159
+ },
160
+ "extent": {
161
+ "type": "array",
162
+ "items": {
163
+ "type": "number"
164
+ },
165
+ "minItems": 4,
166
+ "maxItems": 4,
167
+ "description": "Clip the layer to this lon/lat bounding box [west, south, east, north] (mercator maps)"
168
+ },
169
+ "georeference": {
170
+ "type": "object",
171
+ "description": "A IIIF Georeference Extension annotation body plus the image it places. In a IIIF manifest this is a motivation: \"georeferencing\" annotation whose target embeds the image and whose body is the FeatureCollection of ground control points.",
172
+ "required": ["url", "width", "height", "body"],
173
+ "properties": {
174
+ "url": {
175
+ "type": "string",
176
+ "description": "IIIF Image API service base, or a full-size image URL"
177
+ },
178
+ "width": {
179
+ "type": "number",
180
+ "exclusiveMinimum": 0,
181
+ "description": "Image width in pixels (the resourceCoords space)"
182
+ },
183
+ "height": {
184
+ "type": "number",
185
+ "exclusiveMinimum": 0,
186
+ "description": "Image height in pixels"
187
+ },
188
+ "body": {
189
+ "type": "object",
190
+ "description": "The Georeference Extension annotation body, verbatim: a GeoJSON FeatureCollection of ground control points pairing properties.resourceCoords (image pixels) with geometry.coordinates (WGS84 lon/lat), optionally with a transformation hint.",
191
+ "required": ["type", "features"],
192
+ "properties": {
193
+ "type": {
194
+ "const": "FeatureCollection"
195
+ },
196
+ "transformation": {
197
+ "type": "object"
198
+ },
199
+ "features": {
200
+ "type": "array",
201
+ "minItems": 1
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ },
208
+ "anyOf": [
209
+ {
210
+ "required": ["map_type"]
211
+ },
212
+ {
213
+ "required": ["georeference"]
214
+ }
215
+ ]
216
+ }
217
+ },
218
+ "consent_required": {
219
+ "type": "boolean"
220
+ },
58
221
  "map_center_offset": {
59
222
  "type": "object",
60
223
  "properties": {
61
- "left": { "type": "number" },
62
- "top": { "type": "number" }
224
+ "left": {
225
+ "type": "number"
226
+ },
227
+ "top": {
228
+ "type": "number"
229
+ }
63
230
  }
64
231
  },
65
- "map_popup": { "type": "boolean" },
66
- "use_custom_markers": { "type": "boolean" },
67
- "zoom_distance": { "type": "number" },
68
- "calculate_zoom": { "type": "boolean" },
69
- "less_bounce": { "type": "boolean" },
70
- "line_follows_path": { "type": "boolean" },
71
- "show_lines": { "type": "boolean" },
72
- "show_history_line": { "type": "boolean" },
73
- "line_color": { "type": "string" },
74
- "line_color_inactive": { "type": "string" },
75
- "line_weight": { "type": "number" },
76
- "line_opacity": { "type": "number", "minimum": 0, "maximum": 1 },
77
- "line_dash": { "type": "string" },
78
- "line_join": { "type": "string" },
232
+ "use_custom_markers": {
233
+ "type": "boolean"
234
+ },
235
+ "calculate_zoom": {
236
+ "type": "boolean"
237
+ },
238
+ "line_follows_path": {
239
+ "type": "boolean"
240
+ },
241
+ "show_lines": {
242
+ "type": "boolean"
243
+ },
244
+ "show_history_line": {
245
+ "type": "boolean"
246
+ },
247
+ "line_color": {
248
+ "type": "string"
249
+ },
250
+ "line_color_inactive": {
251
+ "type": "string"
252
+ },
253
+ "line_weight": {
254
+ "type": "number"
255
+ },
256
+ "line_opacity": {
257
+ "type": "number",
258
+ "minimum": 0,
259
+ "maximum": 1
260
+ },
261
+ "line_dash": {
262
+ "type": "string"
263
+ },
264
+ "line_join": {
265
+ "type": "string"
266
+ },
79
267
  "iiif": {
80
268
  "type": "object",
81
269
  "required": ["url"],
@@ -84,52 +272,331 @@
84
272
  "type": "string",
85
273
  "description": "URL of the IIIF Image API info.json document"
86
274
  },
87
- "attribution": { "type": "string" }
275
+ "attribution": {
276
+ "type": "string"
277
+ },
278
+ "width": {
279
+ "type": "number",
280
+ "exclusiveMinimum": 0,
281
+ "description": "Canvas width in pixels, enabling region clamping and the static fallback without another fetch"
282
+ },
283
+ "height": {
284
+ "type": "number",
285
+ "exclusiveMinimum": 0,
286
+ "description": "Canvas height in pixels, enabling region clamping and the static fallback without another fetch"
287
+ },
288
+ "fallbackUrl": {
289
+ "type": "string",
290
+ "format": "uri",
291
+ "description": "Full-size image used when info.json cannot be loaded (slideshow image_static)"
292
+ }
88
293
  }
89
294
  },
90
- "font_css": { "type": "string" },
91
- "call_to_action": { "type": "boolean" },
92
- "call_to_action_text": { "type": "string" },
93
- "fullscreen": { "type": "boolean" },
94
- "show_overview": { "type": "boolean" },
95
- "show_back_to_start": { "type": "boolean" },
96
- "show_progress": { "type": "boolean" },
97
- "show_distance": { "type": "boolean" },
98
- "marker_labels": { "type": "boolean" },
99
- "text_align": { "type": "string" },
100
- "text_color": { "type": "string" },
101
- "text_background_color": { "type": "string" },
102
- "nocache": { "type": "boolean" },
295
+ "tilejson": {
296
+ "type": "object",
297
+ "description": "TileJSON source for the base layer: tiles becomes the map_type template, the rest constrains the source/view where the map can act on it",
298
+ "required": ["tiles"],
299
+ "properties": {
300
+ "tiles": {
301
+ "anyOf": [
302
+ { "type": "string" },
303
+ { "type": "array", "items": { "type": "string" }, "minItems": 1 }
304
+ ]
305
+ },
306
+ "minzoom": { "type": "number" },
307
+ "maxzoom": { "type": "number" },
308
+ "bounds": {
309
+ "type": "array",
310
+ "items": { "type": "number" },
311
+ "minItems": 4,
312
+ "maxItems": 4
313
+ },
314
+ "scheme": { "type": "string", "enum": ["xyz", "tms"] },
315
+ "center": {
316
+ "type": "array",
317
+ "items": { "type": "number" },
318
+ "minItems": 3,
319
+ "maxItems": 3
320
+ }
321
+ }
322
+ },
323
+ "see_also": {
324
+ "type": "array",
325
+ "description": "seeAlso targets recorded from a IIIF manifest (annotation collections/pages); recorded but not fetched on load",
326
+ "items": {
327
+ "type": "object",
328
+ "required": ["id", "type"],
329
+ "properties": {
330
+ "id": { "type": "string" },
331
+ "type": { "type": "string" }
332
+ }
333
+ }
334
+ },
335
+ "title": {
336
+ "type": "string",
337
+ "description": "Story title carried by IIIF manifests (label) and slideshow tours; extra on legacy documents"
338
+ },
339
+ "metadata": {
340
+ "type": "array",
341
+ "description": "Label/value pairs carried from a IIIF manifest or slideshow tour; data-only, handed on as data.metadata[]"
342
+ },
343
+ "logo": {
344
+ "description": "Publisher logo carried from a IIIF manifest; data-only, offered as data.logo"
345
+ },
346
+ "font_css": {
347
+ "anyOf": [{ "type": "string" }, { "const": false }],
348
+ "description": "Font theme stylesheet (stock:<name> or URL); false disables the injected stylesheet because the host bundles the theme itself"
349
+ },
350
+ "theme": {
351
+ "type": "string",
352
+ "enum": ["dark", "light"],
353
+ "description": "Colour theme: dark forces the dark palette, light pins the light one; unset follows prefers-color-scheme"
354
+ },
355
+ "call_to_action": {
356
+ "type": "boolean"
357
+ },
358
+ "call_to_action_text": {
359
+ "type": "string"
360
+ },
361
+ "fullscreen": {
362
+ "type": "boolean"
363
+ },
364
+ "show_overview": {
365
+ "type": "boolean"
366
+ },
367
+ "show_back_to_start": {
368
+ "type": "boolean"
369
+ },
370
+ "show_progress": {
371
+ "type": "boolean"
372
+ },
373
+ "progressbar": {
374
+ "anyOf": [
375
+ { "type": "boolean" },
376
+ {
377
+ "type": "string",
378
+ "enum": ["bar", "dots", "squares", "block", "thinblock", "off"]
379
+ }
380
+ ],
381
+ "description": "Progress indicator style (slideshow progressbar): false/off hides it, true/bar is the classic fill bar, dots/squares render one step per slide, block/thinblock are fill-bar height variants. Absent means show_progress decides with the bar style. Honored only with slideshow_source."
382
+ },
383
+ "show_layers_control": {
384
+ "type": "boolean",
385
+ "description": "Show the basemap/overlay switcher in the menubar"
386
+ },
387
+ "basemaps": {
388
+ "type": "array",
389
+ "description": "Selectable base maps for the layer switcher; entry 0 is the initial basemap unless map_type says otherwise",
390
+ "items": {
391
+ "type": "object",
392
+ "required": ["map_type"],
393
+ "properties": {
394
+ "map_type": {
395
+ "type": "string",
396
+ "description": "Any map_type value"
397
+ },
398
+ "label": {
399
+ "type": "string",
400
+ "description": "Control row label (defaults to map_type)"
401
+ }
402
+ }
403
+ }
404
+ },
405
+ "show_distance": {
406
+ "type": "boolean"
407
+ },
408
+ "marker_labels": {
409
+ "type": "boolean"
410
+ },
411
+ "text_align": {
412
+ "type": "string",
413
+ "enum": ["left", "center", "right"],
414
+ "description": "Default horizontal alignment for slide text"
415
+ },
416
+ "textmode": {
417
+ "type": "string",
418
+ "enum": ["left", "right", "bottom"],
419
+ "description": "Slide panel dock (slideshow textmode) in landscape: right (default) is the current layout, left mirrors it, bottom docks the panel below the map. Portrait layouts always behave like bottom. Honored only with slideshow_source."
420
+ },
421
+ "textsize": {
422
+ "type": "number",
423
+ "minimum": 10,
424
+ "maximum": 80,
425
+ "description": "Slide panel size as a percentage (slideshow textsize): percent of the width for side docks, of the height for the bottom dock. Absent keeps the built-in 50/50 split. Honored only with slideshow_source."
426
+ },
427
+ "fxmode": {
428
+ "type": "string",
429
+ "enum": ["slide", "fade", "none"],
430
+ "description": "Slide transition effect (slideshow fxmode): slide (default) is the current glide, fade cross-fades slides, none jumps without animation. prefers-reduced-motion still forces none. Honored only with slideshow_source."
431
+ },
432
+ "mode": {
433
+ "type": "string",
434
+ "enum": ["standard", "static"],
435
+ "description": "Reading mode (slideshow mode): standard (default) is the slider; static stacks all slides in a scrollable list and follows the map to the slide in view. Honored only with slideshow_source."
436
+ },
437
+ "hudcolor": {
438
+ "type": "string",
439
+ "description": "HUD foreground color override (slideshow hudcolor). Honored only with slideshow_source."
440
+ },
441
+ "hudbgcolor": {
442
+ "type": "string",
443
+ "description": "HUD background color override (slideshow hudbgcolor). Honored only with slideshow_source."
444
+ },
445
+ "hudopacity": {
446
+ "type": "number",
447
+ "minimum": 0,
448
+ "maximum": 100,
449
+ "description": "HUD opacity percent 0..100 (slideshow hudopacity), applied to the HUD background. Honored only with slideshow_source."
450
+ },
451
+ "shownav": {
452
+ "type": "boolean",
453
+ "description": "Show the previous/next slide navigation (slideshow shownav). Default true. Honored only with slideshow_source."
454
+ },
455
+ "show_headings": {
456
+ "type": "boolean",
457
+ "description": "Render slide headlines (slideshow showheadings). Default true; false hides headline elements. Honored only with slideshow_source."
458
+ },
459
+ "show_scrollbars": {
460
+ "type": "boolean",
461
+ "description": "Show scrollbars in the slide panel (slideshow showscrollbars). Default true; false hides them (content still scrolls). Honored only with slideshow_source."
462
+ },
463
+ "viewerheight": {
464
+ "type": "string",
465
+ "pattern": "^[0-9]+(\\.[0-9]+)?(px|%|vh)$",
466
+ "description": "Fixed viewer height (slideshow viewerheight), e.g. 400px: applied as a container height override when set. Honored only with slideshow_source."
467
+ },
468
+ "show_info": {
469
+ "type": "boolean",
470
+ "description": "Show media captions and credits (slideshow showinfo). Default true; false hides the caption/credit block. Honored only with slideshow_source."
471
+ },
472
+ "text_color": {
473
+ "type": "string"
474
+ },
475
+ "text_background_color": {
476
+ "type": "string"
477
+ },
478
+ "nocache": {
479
+ "type": "boolean"
480
+ },
103
481
  "autoplay": {
104
482
  "type": "number",
105
- "description": "Seconds per slide; 0 disables autoplay"
483
+ "description": "Milliseconds per slide; 0 (the default) disables autoplay"
484
+ },
485
+ "autoplay_media": {
486
+ "type": "boolean",
487
+ "default": false,
488
+ "description": "When autoplaying, wait for the slide media to end before advancing; the autoplay timer stays as the fallback."
489
+ },
490
+ "trackResize": {
491
+ "type": "boolean"
492
+ },
493
+ "duration": {
494
+ "type": "number"
106
495
  },
107
- "trackResize": { "type": "boolean" },
108
- "dragging": { "type": "boolean" },
109
- "duration": { "type": "number" },
110
496
  "map_overview_center": {
111
497
  "anyOf": [
112
498
  {
113
499
  "type": "object",
114
500
  "properties": {
115
- "lat": { "type": "number" },
116
- "lon": { "type": "number" }
501
+ "lat": {
502
+ "type": "number"
503
+ },
504
+ "lon": {
505
+ "type": "number"
506
+ }
117
507
  }
118
508
  },
119
- { "type": "null" }
509
+ {
510
+ "type": "null"
511
+ }
120
512
  ]
121
513
  },
122
- "api_key_flickr": { "type": "string" },
123
- "attribution": { "type": "string" },
124
- "start_at_slide": { "type": "integer", "minimum": 0 },
514
+ "api_key_flickr": {
515
+ "type": "string"
516
+ },
517
+ "attribution": {
518
+ "type": "string"
519
+ },
520
+ "start_at_slide": {
521
+ "type": "integer",
522
+ "minimum": 0
523
+ },
125
524
  "slides": {
126
525
  "type": "array",
127
- "items": { "$ref": "#/$defs/slide" }
526
+ "items": {
527
+ "$ref": "#/$defs/slide"
528
+ }
529
+ },
530
+ "credit": {
531
+ "type": "object",
532
+ "description": "Authorship and rights for the story (slideshow creator/rights); rendered into the map attribution line for slideshow tours.",
533
+ "properties": {
534
+ "creator": { "type": "string" },
535
+ "rights": { "type": "string" },
536
+ "licenseUrl": { "type": "string", "format": "uri" }
537
+ }
538
+ },
539
+ "layout": {
540
+ "type": "string",
541
+ "enum": ["landscape", "portrait"],
542
+ "description": "Force a layout instead of deriving it from the container width. \"portrait\" is what the viewer picks at or below skinny_size."
128
543
  }
129
544
  }
130
545
  }
131
546
  },
132
547
  "$defs": {
548
+ "media": {
549
+ "type": "object",
550
+ "properties": {
551
+ "url": {
552
+ "type": ["string", "null"]
553
+ },
554
+ "caption": {
555
+ "type": ["string", "null"]
556
+ },
557
+ "credit": {
558
+ "type": ["string", "null"]
559
+ },
560
+ "thumb": {
561
+ "type": "string"
562
+ },
563
+ "alt": {
564
+ "type": "string"
565
+ },
566
+ "srcset": {
567
+ "type": "string"
568
+ },
569
+ "sizes": {
570
+ "type": "string"
571
+ },
572
+ "subtitles": {
573
+ "type": ["string", "null"],
574
+ "format": "uri",
575
+ "description": "WebVTT subtitle file for an audio or video slide, rendered as a <track kind=\"subtitles\">."
576
+ },
577
+ "offset": {
578
+ "type": "number",
579
+ "minimum": 0,
580
+ "description": "Start offset in seconds for audio/video media (slideshow audio.offset). Honored only with slideshow_source"
581
+ },
582
+ "loop": {
583
+ "type": "boolean",
584
+ "description": "Loop audio/video media (slideshow audio.loop). Honored only with slideshow_source"
585
+ },
586
+ "play": {
587
+ "type": "string",
588
+ "enum": ["auto", "click"],
589
+ "description": "auto plays on activation; click arms paused for the visitor to start. Honored only with slideshow_source"
590
+ },
591
+ "stopOnExit": {
592
+ "type": "boolean",
593
+ "description": "Stop this media when leaving the slide (default true); false lets an audio bed continue. Honored only with slideshow_source"
594
+ },
595
+ "mediatype": {
596
+ "type": ["object", "null"]
597
+ }
598
+ }
599
+ },
133
600
  "slide": {
134
601
  "type": "object",
135
602
  "properties": {
@@ -137,8 +604,16 @@
137
604
  "type": "string",
138
605
  "description": "'overview' marks the map overview slide"
139
606
  },
140
- "date": { "type": ["string", "object", "null"] },
141
- "group": { "type": "string" },
607
+ "date": {
608
+ "type": ["string", "object", "null"]
609
+ },
610
+ "group": {
611
+ "type": "string"
612
+ },
613
+ "language": {
614
+ "type": "string",
615
+ "description": "The language tag this slide's text is in. A IIIF manifest states text as a language map; the reader picks the viewer's configured language and reports which one it used, so a host can offer a language switch. Absent for language-neutral (none) text."
616
+ },
142
617
  "location": {
143
618
  "type": "object",
144
619
  "properties": {
@@ -150,46 +625,224 @@
150
625
  "type": "number",
151
626
  "description": "Longitude, or horizontal position in image pixels for image maps"
152
627
  },
153
- "zoom": { "type": "number" },
154
- "line": { "type": "boolean" },
155
- "name": { "type": "string" },
156
- "icon": { "type": "string", "format": "uri" },
628
+ "region": {
629
+ "type": "array",
630
+ "items": {
631
+ "type": "number"
632
+ },
633
+ "minItems": 4,
634
+ "maxItems": 4,
635
+ "description": "Image region [x, y, w, h] in image pixels (IIIF xywh convention) for image maps; the view fits the region on navigation. Negative origins are clamped to the canvas."
636
+ },
637
+ "rotation": {
638
+ "type": "number",
639
+ "description": "View rotation in degrees clockwise (slideshow rotation); absent means north-up. Honored only with slideshow_source"
640
+ },
641
+ "filter": {
642
+ "type": "object",
643
+ "description": "Per-slide image grading (slideshow filters), applied as a CSS filter() on the map viewport. Honored only with slideshow_source",
644
+ "properties": {
645
+ "brightness": { "type": "number", "minimum": 0, "maximum": 200 },
646
+ "contrast": { "type": "number", "minimum": 0, "maximum": 200 },
647
+ "saturate": { "type": "number", "minimum": 0, "maximum": 200 },
648
+ "hueRotate": { "type": "number", "minimum": -180, "maximum": 180 },
649
+ "sepia": { "type": "number", "minimum": 0, "maximum": 100 },
650
+ "blur": { "type": "number", "minimum": 0, "maximum": 20 }
651
+ }
652
+ },
653
+ "mask": {
654
+ "type": "object",
655
+ "description": "Spotlight mask (slideshow passepartout): normalized viewport fractions left visible while the rest is dimmed. Honored only with slideshow_source",
656
+ "required": ["x", "y", "w", "h"],
657
+ "properties": {
658
+ "x": { "type": "number" },
659
+ "y": { "type": "number" },
660
+ "w": { "type": "number", "exclusiveMinimum": 0 },
661
+ "h": { "type": "number", "exclusiveMinimum": 0 },
662
+ "color": { "type": "string" },
663
+ "invert": { "type": "boolean" },
664
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 }
665
+ }
666
+ },
667
+ "basemap": {
668
+ "type": "string",
669
+ "description": "Per-slide basemap override (multi-manifest tours): any map_type value or IIIF info.json URL. Absent keeps the story basemap. Honored only with slideshow_source."
670
+ },
671
+ "zoom": {
672
+ "type": "number"
673
+ },
674
+ "line": {
675
+ "type": "boolean"
676
+ },
677
+ "name": {
678
+ "type": "string"
679
+ },
680
+ "icon": {
681
+ "type": "string",
682
+ "format": "uri"
683
+ },
157
684
  "iconSize": {
158
685
  "type": "array",
159
- "items": { "type": "number" },
686
+ "items": {
687
+ "type": "number"
688
+ },
160
689
  "minItems": 1,
161
690
  "maxItems": 2
162
691
  },
163
- "image": { "type": "string", "format": "uri" },
164
- "use_custom_marker": { "type": "boolean" }
692
+ "image": {
693
+ "type": "string",
694
+ "format": "uri"
695
+ },
696
+ "use_custom_marker": {
697
+ "type": "boolean"
698
+ }
165
699
  }
166
700
  },
167
701
  "media": {
168
- "type": "object",
169
- "properties": {
170
- "url": { "type": ["string", "null"] },
171
- "caption": { "type": ["string", "null"] },
172
- "credit": { "type": ["string", "null"] },
173
- "thumb": { "type": "string" },
174
- "mediatype": { "type": ["object", "null"] }
702
+ "$ref": "#/$defs/media"
703
+ },
704
+ "media_extra": {
705
+ "type": ["array", "null"],
706
+ "description": "Additional visible media for this slide (#358), rendered after media in order. Items without a non-empty url are skipped. In a IIIF manifest these are further painting annotations on the canvas.",
707
+ "items": {
708
+ "$ref": "#/$defs/media"
175
709
  }
176
710
  },
711
+ "media_layout": {
712
+ "type": "string",
713
+ "enum": ["stack", "row"],
714
+ "description": "Layout of a multi-media slide (#358): stack piles the items vertically (the panel scrolls), row puts two items side by side. Defaults to stack; row with anything but two items falls back to stack."
715
+ },
177
716
  "text": {
178
717
  "type": "object",
179
718
  "properties": {
180
- "headline": { "type": "string" },
181
- "text": { "type": "string" },
182
- "date": { "type": ["string", "object", "null"] }
719
+ "headline": {
720
+ "type": "string"
721
+ },
722
+ "text": {
723
+ "type": "string"
724
+ },
725
+ "date": {
726
+ "type": ["string", "object", "null"]
727
+ },
728
+ "text_align": {
729
+ "type": "string",
730
+ "enum": ["left", "center", "right"],
731
+ "description": "Horizontal alignment of this slide's text block"
732
+ }
733
+ }
734
+ },
735
+ "marker": {
736
+ "type": ["object", "null"],
737
+ "description": "Per-slide marker presentation. location.icon/iconSize/image/use_custom_marker and location.name remain supported as legacy spellings; marker.* wins when present. In a IIIF manifest these arrive in the navPlace Feature properties instead.",
738
+ "properties": {
739
+ "icon": {
740
+ "type": "string",
741
+ "format": "uri"
742
+ },
743
+ "iconSize": {
744
+ "type": "array",
745
+ "items": {
746
+ "type": "number"
747
+ }
748
+ },
749
+ "image": {
750
+ "type": "string",
751
+ "format": "uri"
752
+ },
753
+ "label": {
754
+ "type": "string"
755
+ },
756
+ "popup": {
757
+ "type": "boolean"
758
+ },
759
+ "audioBadge": {
760
+ "type": "boolean"
761
+ }
183
762
  }
184
763
  },
764
+ "narration": {
765
+ "type": ["object", "null"],
766
+ "description": "Spoken narration for this slide, played through a dedicated audio element. In a IIIF manifest this is a motivation: supplementing Sound/Video body, read and written alongside the painting annotation.",
767
+ "properties": {
768
+ "url": {
769
+ "type": "string",
770
+ "format": "uri"
771
+ },
772
+ "loop": {
773
+ "type": "boolean",
774
+ "description": "Loop the narration (slideshow audio.loop). Honored only with slideshow_source"
775
+ },
776
+ "offset": {
777
+ "type": "number",
778
+ "minimum": 0,
779
+ "description": "Start offset in seconds (slideshow audio.offset). Honored only with slideshow_source"
780
+ },
781
+ "play": {
782
+ "type": "string",
783
+ "enum": ["auto", "click"],
784
+ "description": "auto plays on navigation; click arms paused for the visitor to start (slideshow audio.play). Honored only with slideshow_source"
785
+ },
786
+ "stopOnExit": {
787
+ "type": "boolean",
788
+ "description": "Stop when leaving the slide (default true); false keeps an audio bed across slides while the URL is unchanged. Honored only with slideshow_source"
789
+ },
790
+ "stopAllPrevious": {
791
+ "type": "boolean",
792
+ "description": "Stop any other playing track before starting (default true); false allows ambient overlap. Honored only with slideshow_source"
793
+ }
794
+ },
795
+ "required": ["url"]
796
+ },
797
+ "slidetimeout": {
798
+ "type": "number",
799
+ "minimum": 0,
800
+ "description": "Per-slide autoplay dwell in milliseconds (slideshow slidetimeout): overrides the global autoplay interval for this slide; 0 holds. Absent means the global interval. Honored only with slideshow_source."
801
+ },
802
+ "imgoverlay": {
803
+ "anyOf": [{ "type": "object" }, { "type": "null" }],
804
+ "description": "Per-slide image overlay on the map (slideshow imgoverlay), shown while this slide is active. Honored only with slideshow_source",
805
+ "properties": {
806
+ "url": { "type": "string", "format": "uri" },
807
+ "size": { "type": "number", "exclusiveMinimum": 0 },
808
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 },
809
+ "extent": {
810
+ "type": "array",
811
+ "items": { "type": "number" },
812
+ "minItems": 4,
813
+ "maxItems": 4
814
+ }
815
+ },
816
+ "required": ["url"]
817
+ },
185
818
  "background": {
186
819
  "type": ["object", "string"],
187
820
  "properties": {
188
- "url": { "type": ["string", "null"], "format": "uri" },
189
- "color": { "type": ["string", "null"] }
821
+ "url": {
822
+ "type": ["string", "null"],
823
+ "format": "uri"
824
+ },
825
+ "color": {
826
+ "type": ["string", "null"]
827
+ },
828
+ "opacity": {
829
+ "type": "number",
830
+ "description": "Background image opacity, 0-1"
831
+ }
190
832
  }
191
833
  },
192
- "uniqueid": { "type": "string" }
834
+ "uniqueid": {
835
+ "type": "string"
836
+ },
837
+ "provenance": {
838
+ "type": "object",
839
+ "description": "Provenance identifiers for the slide's source (slideshow manifest/canvas/image ids). Data-only, never rendered.",
840
+ "properties": {
841
+ "manifest": { "type": "string", "format": "uri" },
842
+ "canvas": { "type": "string", "format": "uri" },
843
+ "image": { "type": "string", "format": "uri" }
844
+ }
845
+ }
193
846
  }
194
847
  }
195
848
  }