@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
@@ -36,6 +36,8 @@
36
36
  <li><a class="button" href="./readme.html">README</a></li>
37
37
  <li><a class="button" href="./migration.html">Migration guide</a></li>
38
38
  <li><a class="button" href="./iiif.html">IIIF docs</a></li>
39
+ <li><a class="button" href="./authoring.html">Authoring</a></li>
40
+ <li><a class="button" href="./events.html">Events</a></li>
39
41
  <li><a class="button" href="./api/index.html">API docs</a></li>
40
42
  <li><a class="button" href="../index.html#help">Help</a></li>
41
43
  </ul>
@@ -153,6 +155,38 @@ are rendered wider with a visible track for contrast.</li>
153
155
  <td><code>font_css: &quot;stock:&lt;name&gt;&quot;</code> (or a path)</td>
154
156
  <td>paths now resolve against the page URL (not the library location), plus the font files ship via <code>@fontsource-utils/scss</code>; no separate font CSS link needed</td>
155
157
  </tr>
158
+ <tr>
159
+ <td><code>font_css: false</code> (bundler consumers)</td>
160
+ <td><code>stock:&lt;name&gt;</code> resolves via <code>import.meta.url</code>, which only survives when this package is <em>not</em> processed by a bundler — bundling inlines <code>dist/js/storymap.js</code> into a chunk and the theme URL breaks. Instead <code>import &quot;@projektemacher/storymapjs/css/fonts/font.default.css&quot;</code> (fingerprinted, <code>files/</code> rebased by the bundler) and pass <code>font_css: false</code> for no injected <code>&lt;link&gt;</code>. <code>&quot;none&quot;</code> works too for JSON. A failing theme only warns</td>
161
+ </tr>
162
+ </tbody></table>
163
+ <h2>A story with no map</h2>
164
+ <p><code>map_type: &quot;none&quot;</code> runs the storymap as text and media only. Nothing is
165
+ constructed: no <code>ol/Map</code>, no tile layer, no tile consent row, and the overview
166
+ control is hidden. The slider panel takes the full width, because there is no
167
+ map behind it to fade over.</p>
168
+ <p>This is the shape a photo essay or a transcript-led story wants, and it is the
169
+ one the map engine&#39;s unconditional construction used to make impossible. Note
170
+ that <code>map_type: &quot;&quot;</code> and an absent <code>map_type</code> both still mean OpenStreetMap, and
171
+ <code>map_type: null</code> now falls back to that default instead of throwing out of the
172
+ constructor — absence is not reinterpreted, so no existing document changes
173
+ meaning. Map-derived accessors (<code>getBaseLayer()</code>, <code>getMarkers()</code>, …) return
174
+ their neutral values, and the map setters are no-ops.</p>
175
+ <table>
176
+ <thead>
177
+ <tr>
178
+ <th>Old</th>
179
+ <th>New</th>
180
+ </tr>
181
+ </thead>
182
+ <tbody><tr>
183
+ <td>a text-only story with a dummy <code>map_type</code></td>
184
+ <td><code>map_type: &quot;none&quot;</code></td>
185
+ </tr>
186
+ <tr>
187
+ <td><code>map_type: null</code> (crashed the constructor)</td>
188
+ <td>normalised to the default, <code>&quot;&quot;</code> → OSM</td>
189
+ </tr>
156
190
  </tbody></table>
157
191
  <h2>Removed globals and exports</h2>
158
192
  <table>
@@ -197,7 +231,7 @@ are rendered wider with a visible track for contrast.</li>
197
231
  </thead>
198
232
  <tbody><tr>
199
233
  <td><code>vine</code> media type (service shut down)</td>
200
- <td>vine URLs fall back to the <code>website</code> iframe — use another media source for those slides</td>
234
+ <td>vine URLs fall back to the <code>website</code> iframe — or paste the provider&#39;s <code>&lt;iframe&gt;</code> snippet into the slide text (sanitized, https-only); use another media source for those slides</td>
201
235
  </tr>
202
236
  <tr>
203
237
  <td>Juxtapose <code>frame/?uid=</code> embed URLs</td>
@@ -207,7 +241,26 @@ are rendered wider with a visible track for contrast.</li>
207
241
  <td>Twitter <code>@nickname</code> rendering</td>
208
242
  <td>tweets from <code>x.com</code> URLs are now parsed too (fixes <code>@undefined</code> nicknames); no migration needed</td>
209
243
  </tr>
244
+ <tr>
245
+ <td>Ricoh360/theta360 embeds (#391)</td>
246
+ <td>service no longer available (won&#39;t fix) — paste the provider&#39;s <code>&lt;iframe&gt;</code> snippet into the slide text if the service returns</td>
247
+ </tr>
210
248
  </tbody></table>
249
+ <p>Extra media per slide (#358, partial): a slide takes <code>media_extra</code> (a list of
250
+ further media items, rendered after the primary one) plus <code>media_layout</code>
251
+ (<code>stack</code>, the default, or <code>row</code> for two side-by-side items). An <code>&lt;iframe&gt;</code>
252
+ embed snippet pasted into the slide <code>text</code> field still renders sanitized
253
+ (scripts, event handlers and non-https sources dropped) — keep that as the
254
+ migration path for removed media types:</p>
255
+ <pre><code class="language-html">&lt;p&gt;Extra footage:&lt;/p&gt;
256
+ &lt;iframe
257
+ src=&quot;https://example.com/embed/123&quot;
258
+ width=&quot;560&quot;
259
+ height=&quot;315&quot;
260
+ frameborder=&quot;0&quot;
261
+ allowfullscreen
262
+ &gt;&lt;/iframe&gt;
263
+ </code></pre>
211
264
  <p><code>map_type: &quot;zoomify&quot;</code> is supported again (legacy): the image pyramid renders
212
265
  via the storymap data&#39;s <code>zoomify</code> options (<code>path</code>, <code>width</code>, <code>height</code>), using a
213
266
  JS warning instead of the previous removal error. Cropped edge/remainder tiles
@@ -219,29 +272,325 @@ storymap JSON sources.</p>
219
272
  <h2>Map engine: Leaflet → OpenLayers</h2>
220
273
  <ul>
221
274
  <li><code>storymap.map</code> now exposes the <strong>OpenLayers <code>Map</code></strong> instance instead of a
222
- Leaflet map. Port any direct Leaflet calls (e.g. <code>setView</code>, <code>flyTo</code>) to the
223
- OpenLayers API (<code>getView().animate(...)</code>, ...).</li>
275
+ Leaflet map. Port any direct Leaflet calls to the OpenLayers API (table
276
+ below). It is <code>null</code> until the map has been built.</li>
224
277
  <li>Markers are DOM overlays (<code>.vco-mapmarker</code> / <code>.vco-mapmarker-active</code>) like
225
278
  before; the mini map is an OpenLayers <code>OverviewMap</code> control.</li>
226
279
  <li>New basemap options: vector styles via <code>map_type: &quot;osm:&lt;style&gt;&quot;</code> (OpenFreeMap)
227
280
  or a Mapbox style JSON URL.</li>
281
+ <li>The <code>Ol*</code> aliases re-exported from <code>src/main.ts</code> (<code>OlMap</code>, <code>OlView</code>,
282
+ <code>OlLayer</code>, <code>OlTileLayer</code>, <code>OlVectorLayer</code>, <code>OlSource</code>, <code>OlProjection</code>) let
283
+ a consumer type the map and layers without depending on <code>ol</code> directly;
284
+ anything beyond those (features, geometries, coordinates) still needs <code>ol</code>.</li>
228
285
  </ul>
286
+ <h3>Direct Leaflet calls → OpenLayers</h3>
287
+ <p>Both maps are reachable from the same place (<code>storymap.map</code>), so only the
288
+ call syntax changes:</p>
289
+ <table>
290
+ <thead>
291
+ <tr>
292
+ <th>Leaflet</th>
293
+ <th>OpenLayers</th>
294
+ </tr>
295
+ </thead>
296
+ <tbody><tr>
297
+ <td><code>map.getCenter()</code></td>
298
+ <td><code>map.getView().getCenter()</code> — panel-shifted, see below</td>
299
+ </tr>
300
+ <tr>
301
+ <td><code>map.getZoom()</code></td>
302
+ <td><code>map.getView().getZoom()</code></td>
303
+ </tr>
304
+ <tr>
305
+ <td><code>map.setView(c, z)</code> / <code>map.fitBounds(b)</code></td>
306
+ <td><code>map.getView().fit(extent, { size: map.getSize() })</code></td>
307
+ </tr>
308
+ <tr>
309
+ <td><code>map.panTo(c)</code> / <code>map.flyTo(c, z)</code></td>
310
+ <td><code>map.getView().animate({ center: c, duration: 300 })</code></td>
311
+ </tr>
312
+ <tr>
313
+ <td><code>map.setZoom(z)</code></td>
314
+ <td><code>map.getView().setZoom(z)</code> (or <code>.animate({ zoom: z })</code>)</td>
315
+ </tr>
316
+ <tr>
317
+ <td><code>map.getSize()</code> / <code>map.getBounds()</code></td>
318
+ <td><code>map.getSize()</code> / <code>map.getView().calculateExtent(map.getSize())</code></td>
319
+ </tr>
320
+ <tr>
321
+ <td><code>map.on(&quot;moveend&quot;, fn)</code></td>
322
+ <td><code>map.on(&quot;moveend&quot;, fn)</code> (same event names; <code>movestart</code>/<code>move</code> also exist)</td>
323
+ </tr>
324
+ <tr>
325
+ <td><code>L.tileLayer(url, opts).addTo(map)</code></td>
326
+ <td><code>new TileLayer({ source: new XYZ({ url, attributions }) }).setMap(map)</code></td>
327
+ </tr>
328
+ <tr>
329
+ <td><code>L.control.attribution</code> / <code>L.control.zoom</code></td>
330
+ <td>OL <code>Attribution</code> / <code>Zoom</code> controls (pass them via <code>map_options.controls</code>)</td>
331
+ </tr>
332
+ <tr>
333
+ <td><code>map.getPane(&quot;overlayPane&quot;)</code></td>
334
+ <td><code>map.getOverlayContainer()</code> (markers are DOM siblings, not OL features)</td>
335
+ </tr>
336
+ <tr>
337
+ <td><code>map.invalidateSize()</code></td>
338
+ <td><code>map.updateSize()</code></td>
339
+ </tr>
340
+ <tr>
341
+ <td><code>map.remove()</code></td>
342
+ <td><code>map.setTarget(undefined); map.dispose();</code> (or <code>storymap.dispose()</code>)</td>
343
+ </tr>
344
+ </tbody></table>
345
+ <p>The exposed center is deliberately panel-shifted: in landscape the view is
346
+ offset so the visible map sits left of the slide panel, which means
347
+ <code>getView().getCenter()</code> does <strong>not</strong> equal the current slide&#39;s location.
348
+ That is a display concern, not a data one — read the location from the
349
+ slide, not from the view. There is intentionally no offset-aware getter;
350
+ an earlier <code>_getMapCenter(offset)</code> parameter promised that correction and
351
+ never applied it, so it was removed rather than left to mislead.
352
+ | <code>map.options.crs</code> / <code>map.getPixelOrigin()</code> | <code>map.getView().getProjection()</code> / <code>map.getPixelFromCoordinate(coord)</code> |</p>
353
+ <p>Marker positions are still DOM elements, so <code>marker.getLatLng()</code> has no
354
+ equivalent — read the slide data (<code>storymap.data.stlides[n].location</code>) or use
355
+ <code>storymap._map.getMarker(n).latLon()</code>.</p>
356
+ <h3>Map and marker methods</h3>
357
+ <p>The map/marker methods of the original viewer are still there with the same
358
+ names and behaviour (<code>storymap._map.&lt;method&gt;()</code>, <code>marker.&lt;method&gt;()</code>); the OL
359
+ engine implements them as thin wrappers over <code>storymap.map</code>. Two methods are
360
+ deprecated no-ops and one is gone:</p>
361
+ <table>
362
+ <thead>
363
+ <tr>
364
+ <th>Original method</th>
365
+ <th>Status</th>
366
+ </tr>
367
+ </thead>
368
+ <tbody><tr>
369
+ <td><code>updateDisplay</code>, <code>goTo</code>, <code>panTo</code>, <code>zoomTo</code>, <code>viewTo</code></td>
370
+ <td>unchanged</td>
371
+ </tr>
372
+ <tr>
373
+ <td><code>getBoundsZoom</code>, <code>markerOverview</code>, <code>calculateMarkerZooms</code></td>
374
+ <td>unchanged (<code>getBoundsZoom()</code> now returns <code>number | undefined</code> instead of a falsy value)</td>
375
+ </tr>
376
+ <tr>
377
+ <td><code>createMiniMap</code>, <code>createMarkers</code>, <code>createMarker</code></td>
378
+ <td>unchanged</td>
379
+ </tr>
380
+ <tr>
381
+ <td><code>setMapOffset</code>, <code>calculateMinMaxZoom</code>, <code>updateMinMaxZoom</code>, <code>initialMapLocation</code></td>
382
+ <td>unchanged</td>
383
+ </tr>
384
+ <tr>
385
+ <td><code>show()</code> / <code>hide()</code> (map and marker)</td>
386
+ <td><strong>deprecated no-ops</strong> — they were already empty in the original viewer. Style <code>.vco-mapmarker</code> or use <code>marker.active(false)</code></td>
387
+ </tr>
388
+ <tr>
389
+ <td><code>map.addTo(container)</code> / <code>map.removeFrom(container)</code></td>
390
+ <td>unchanged — inherited from the <code>DomMixed</code> mixin: append/remove the map container and fire <code>added</code>/<code>removed</code>. The engine override re-targets and re-measures the OpenLayers viewport, so a move into a differently sized parent works</td>
391
+ </tr>
392
+ <tr>
393
+ <td><code>marker.createPopup()</code></td>
394
+ <td><strong>deprecated no-op</strong> — it never did anything upstream either (empty base body, commented-out Leaflet body), so the <code>map_popup</code> option that called it had no effect. Still accepted, still inert. Use <code>marker.openPopup()</code> / <code>storymap.openMarkerPopup(n)</code> instead</td>
395
+ </tr>
396
+ <tr>
397
+ <td><code>marker.addTo()</code>, <code>marker.removeFrom()</code>, <code>marker.updateDisplay()</code>, <code>marker.active()</code>, <code>marker.location()</code></td>
398
+ <td>unchanged</td>
399
+ </tr>
400
+ <tr>
401
+ <td><code>marker.openPopup()</code> / <code>closePopup()</code> / <code>togglePopup()</code> / <code>isPopupEnabled()</code> / <code>popupOpen</code></td>
402
+ <td><strong>new</strong> — programmatic control of the popup card (<code>marker: { popup: true }</code>); <code>openPopup()</code> returns false when disabled or not a real marker, <code>popupOpen</code> reports the state</td>
403
+ </tr>
404
+ <tr>
405
+ <td><code>storymap.openMarkerPopup(n)</code> / <code>closeMarkerPopup(n?)</code> / <code>isPopupOpen(n)</code></td>
406
+ <td><strong>new</strong> — open/close/query a stop&#39;s card from the viewer; <code>openMarkerPopup</code> navigates to <code>n</code> first and returns false (changing nothing) when disabled, out of range, disposed or mapless</td>
407
+ </tr>
408
+ </tbody></table>
409
+ <p>Marker helpers that Leaflet provided on the marker object (<code>getLatLng</code>,
410
+ <code>setIcon</code>, <code>bindPopup</code>) are gone; use <code>marker.latLon()</code>, the
411
+ <code>.vco-mapmarker</code> element and your own DOM/CSS.</p>
412
+ <h2>Reaching the map, layers and markers</h2>
413
+ <p><code>storymap.map</code> is the raw <code>ol/Map</code> (typed as <code>OlMap | null</code> — it is set during
414
+ construction, so check it before first use in an async setup). Everything the
415
+ viewer keeps internally is available through accessors on <code>storymap</code> (and on
416
+ <code>storymap._map</code> for the engine methods):</p>
417
+ <table>
418
+ <thead>
419
+ <tr>
420
+ <th>Accessor</th>
421
+ <th>Returns</th>
422
+ </tr>
423
+ </thead>
424
+ <tbody><tr>
425
+ <td><code>getBaseLayer()</code></td>
426
+ <td>the base tile/vector layer</td>
427
+ </tr>
428
+ <tr>
429
+ <td><code>getOverlayLayers()</code> / <code>getOverlayLayer(i)</code></td>
430
+ <td>overlay layers / one by index (<code>null</code> if out of range)</td>
431
+ </tr>
432
+ <tr>
433
+ <td><code>getOverlayCount()</code></td>
434
+ <td>number of overlays</td>
435
+ </tr>
436
+ <tr>
437
+ <td><code>setOverlayVisible(i, on)</code> / <code>setOverlayOpacity(i, opacity)</code></td>
438
+ <td>show/hide and fade one overlay</td>
439
+ </tr>
440
+ <tr>
441
+ <td><code>getMinimap()</code></td>
442
+ <td>the inner overview <code>ol/Map</code> (<code>OlMap | null</code>), not the <code>OverviewMap</code> control itself — there is no accessor for the control object</td>
443
+ </tr>
444
+ <tr>
445
+ <td><code>getLine()</code> / <code>getLineActive()</code></td>
446
+ <td>the full and the travelled route <code>VectorLayer</code></td>
447
+ </tr>
448
+ <tr>
449
+ <td><code>getMarker(n)</code> / <code>getMarkers()</code></td>
450
+ <td>one marker or all of them, in slide order</td>
451
+ </tr>
452
+ <tr>
453
+ <td><code>setExtraAttributions(html)</code></td>
454
+ <td>extra attribution HTML, listed after the source credits</td>
455
+ </tr>
456
+ <tr>
457
+ <td><code>isImageSpace()</code></td>
458
+ <td>whether the map is a IIIF image in image space (see below)</td>
459
+ </tr>
460
+ </tbody></table>
461
+ <p><code>tile_source_factory</code> may return a full <code>ol/layer/Layer</code> (not just a source)
462
+ anywhere a layer is built, so custom layers can carry their own opacity,
463
+ z-index and events. A custom layer without a source (Allmaps&#39;
464
+ <code>WarpedMapLayer</code>) passes through untouched; source reads go through a
465
+ capability check, so it simply skips the tile-grid fits.</p>
466
+ <p>The viewer reserves three z-index ranges and custom layers should stay out
467
+ of them: <strong>0</strong> for the base tiles, <strong>1..n</strong> for the stacked <code>overlays[]</code>
468
+ entries in order, and <strong>10/11</strong> for the full and travelled route lines. A
469
+ custom layer with no explicit z-index lands wherever OpenLayers puts it,
470
+ which is above the lines — set one explicitly if the layer must sit inside
471
+ the stack.</p>
472
+ <h3>Layer switcher</h3>
473
+ <p><code>show_layers_control: true</code> adds a disclosure button to the menubar with
474
+ basemap radios and overlay checkboxes. Basemap candidates come from
475
+ <code>basemaps[]</code> (entry 0 is the initial basemap unless <code>map_type</code> says
476
+ otherwise; omit for an overlays-only control); overlay rows come from the
477
+ built <code>overlays[]</code> entries, so a malformed entry never gets a row and row
478
+ <em>i</em> is always layer <em>i</em>. <code>label</code> may be a function for host i18n (re-invoked
479
+ on <code>refreshLabels()</code>), <code>locked: true</code> renders a row checked and disabled,
480
+ <code>control: false</code> hides a row without removing the overlay — but function
481
+ labels survive only in constructor options, because <code>mergeData()</code> lets
482
+ storymap JSON overwrite same-named option keys. A runtime basemap swap
483
+ rebuilds layers but never the view, so candidates needing another
484
+ projection are refused with a warning; switching fires <code>basemapchange</code> /
485
+ <code>overlaychange</code>, and the visitor&#39;s choice is never persisted.</p>
486
+ <h3>Image space vs. georeferenced</h3>
487
+ <p><code>map_type: &quot;iiif&quot;</code> is a mercator map by default. With <code>map_as_image: true</code> the
488
+ image <em>is</em> the map: the view projection becomes <code>EPSG:4326</code>, the view is
489
+ fitted to the image extent and marker locations are pixel offsets into the
490
+ image rather than lat/lon. Ask <code>storymap.isImageSpace()</code> instead of testing
491
+ <code>map_type</code> — georeferenced IIIF (a manifest with <code>navPlace</code> regions) is an
492
+ ordinary mercator map, and <code>map_bbox</code> with a georeferenced layer is one too.</p>
493
+ <h3>Knowing when the imagery is there</h3>
494
+ <p>Tile and image sources attach asynchronously, so <code>loaded</code> can fire before the
495
+ imagery exists. Listen for <code>imageready</code>, which fires once a source is ready and
496
+ carries <code>{ source, kind, layer }</code> (<code>kind</code> is <code>&quot;iiif&quot;</code>, <code>&quot;zoomify&quot;</code> or
497
+ <code>&quot;tiles&quot;</code>); it is re-fired on the <code>storymap</code> as well:</p>
498
+ <pre><code class="language-js">storymap.on(&quot;imageready&quot;, ({ kind, source }) =&gt; {
499
+ console.log(&quot;imagery ready&quot;, kind, source);
500
+ });
501
+ </code></pre>
502
+ <h3>Tearing a storymap down</h3>
503
+ <p>Call <code>storymap.dispose()</code> when the embedding view goes away (SPA route change,
504
+ dialog close). It clears the timers and the resize observer, removes the
505
+ <code>window</code>/<code>document</code> listeners, cancels running slide animations, disposes the
506
+ slider and the OpenLayers map, and sets <code>storymap.map</code> to <code>null</code>. Calling it
507
+ twice is safe; the instance is unusable afterwards.</p>
508
+ <h2>Custom map providers</h2>
509
+ <p>Any slippy-map tile URL works as <code>map_type</code> — pass the template verbatim
510
+ (including <code>{z}/{x}/{y}</code>), relative or absolute:</p>
511
+ <pre><code class="language-js">new StoryMap(&quot;embed&quot;, data, {
512
+ map_type: &quot;https://tiles.example.org/base/{z}/{x}/{y}.png&quot;,
513
+ });
514
+ </code></pre>
515
+ <p>Mapbox style JSON URLs render as vector tile layers; OpenLayers
516
+ <code>Map</code>/<code>View</code> pass-through stays available via <code>options.map_options</code>
517
+ (<code>controls</code> replaces the defaults, <code>interactions</code> are added to the
518
+ viewer&#39;s own pan/zoom set, <code>view</code> merges over the computed default).</p>
519
+ <p>For source classes the templates cannot express (WMS, authenticated or
520
+ gridded sources), use the <code>tile_source_factory</code> option. It is consulted
521
+ for every base, overlay and minimap layer before the built-in
522
+ <code>map_type</code> handling — return any <code>ol/layer/Layer</code> (used as-is) or a bare
523
+ <code>Source</code> (which is wrapped in a <code>TileLayer</code>), or <code>null</code>/<code>undefined</code> to fall
524
+ through:</p>
525
+ <pre><code class="language-js">import TileLayer from &quot;ol/layer/Tile&quot;;
526
+ import TileWMS from &quot;ol/source/TileWMS&quot;;
527
+
528
+ new StoryMap(&quot;embed&quot;, data, {
529
+ map_type: &quot;wms:flood&quot;,
530
+ tile_source_factory: (map_type, { options, createDefault }) =&gt;
531
+ map_type.startsWith(&quot;wms:&quot;)
532
+ ? new TileLayer({
533
+ source: new TileWMS({
534
+ url: &quot;https://geoserver.example.org/wms&quot;,
535
+ params: { LAYERS: map_type.slice(4) },
536
+ crossOrigin: &quot;anonymous&quot;,
537
+ }),
538
+ })
539
+ : createDefault(),
540
+ });
541
+ </code></pre>
542
+ <p>The second factory argument also carries the resolved <code>options</code>
543
+ (<code>{ options, createDefault }</code>). A factory may return any <code>ol/layer/Layer</code>
544
+ (used as-is — including sourceless layers such as Allmaps&#39;
545
+ <code>WarpedMapLayer</code>), a bare <code>Source</code> (wrapped in a <code>TileLayer</code>), or
546
+ <code>null</code>/<code>undefined</code> to fall through to the default <code>map_type</code> handling.</p>
547
+ <p>Custom sources must carry their own attributions (via the returned
548
+ source or the <code>attribution</code> option) — only the built-in <code>osm*</code> types
549
+ are credited automatically. <code>tile_source_factory</code> is constructor- and
550
+ runtime-only (functions cannot ride storymap JSON) and also applies to
551
+ <code>overlays[]</code> entries, whose <code>map_type</code> values go through the same
552
+ factory.</p>
229
553
  <h2>Data and tooling</h2>
230
554
  <ul>
231
555
  <li>Storymap JSON is now validated against a JSON Schema
232
556
  (<code>schema/storymap.schema.json</code>); invalid documents are reported to the
233
557
  console at load time.</li>
234
- <li>IIIF Presentation 3 manifests are accepted directly as storymap sources.</li>
235
- <li>The StoryMap IIIF extension context changed to
236
- <code>https://christianmahnke.de/iiif/storymap</code> — manifests produced with the old
237
- <code>https://example.org/ns/storymap/v1</code> context need re-converting
238
- (<code>scripts/convert-to-iiif.mjs</code>).</li>
558
+ <li>IIIF Presentation 3 manifests are accepted directly as storymap sources.
559
+ The map settings map onto <code>storymap:</code> terms of a map configuration service
560
+ (IIIF has no basemap or tile-layer vocabulary of its own), and the
561
+ geospatial parts use the native extensions where they exist: <code>navPlace</code>
562
+ Points for slide locations, a <code>navPlace</code> Polygon for the story extent
563
+ (<code>map_bbox</code>), an IIIF Image API Selector for <code>location.region</code>, and the
564
+ Georeference Extension for placed rasters. A georeferenced layer is
565
+ manifest-only (the legacy format cannot express ground control points); see
566
+ <a href="./iiif.html#geo-referenced-layers">docs/storymap-as-iiif-manifest.md</a>.</li>
239
567
  <li>The editor, staging/backend infrastructure, AWS/GitHub hosting scripts and the
240
568
  Python authoring server are gone — this is a viewer-only library.</li>
569
+ <li><strong>Slideshow tours</strong> are a third input format: W3C <code>AnnotationCollection</code>
570
+ documents (the format of slideshow-style guided image tours) load
571
+ directly by object, file or URL, auto-detected after the IIIF branch
572
+ (<code>slideshow: false</code> opts out). A pure translator converts them to
573
+ storymap data — per-slide image regions, rotation, filter grading,
574
+ spotlight masks, per-slide basemaps, narration with playback flags and
575
+ player chrome — which renders only for slideshow tours (the internal
576
+ <code>slideshow_source</code> marker; other documents are unaffected). Convert
577
+ offline with <code>npm run convert:slideshow</code>; the full mapping is in
578
+ <a href="slideshow.md">docs/slideshow.md</a>.</li>
241
579
  </ul>
242
- <h2>Events (unchanged)</h2>
243
- <p><code>change</code> (with <code>current_slide</code>), <code>loaded</code>, <code>title</code>, <code>dataloaded</code>,
244
- <code>fontLoaded</code>, plus the listener map in the constructor — all work as before.</p>
580
+ <h2>Events (unchanged, plus new ones)</h2>
581
+ <p>The canonical reference is <a href="./events.html">docs/events.md</a> — one table per
582
+ emitter, with payloads. What changed in migration terms: <code>change</code> gains
583
+ <code>current_id</code>, <code>loaded</code>, <code>title</code>, <code>dataloaded</code>, <code>fontLoaded</code>,
584
+ <code>transitionstart</code>/<code>transitionend</code>, <code>error</code> and the constructor listener map
585
+ all work as before; <code>markerAdded</code>/<code>markerRemoved</code> still fire on the map
586
+ object; <code>imageready</code>, <code>markerclick</code> and <code>popupopen</code>/<code>popupclose</code> are new
587
+ (see above).</p>
588
+ <p>Two additions for IIIF tours: <code>await storymap.loadAnnotations()</code> fetches a
589
+ manifest&#39;s externally referenced annotation pages and appends them as stops,
590
+ then fires <code>annotationsloaded</code> with <code>{ stops, searchService, failed }</code>. A
591
+ slide&#39;s stable identity is available as <code>storymap.getSlideId(index)</code>, which
592
+ is what the <code>#slide-N</code> hash and the <code>iiif-content</code> deep link resolve
593
+ through.</p>
245
594
 
246
595
  </main>
247
596