@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
@@ -0,0 +1,54 @@
1
+ {
2
+ "@context": {
3
+ "@version": 1.1,
4
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
5
+ "storymap_navplace": "https://christianmahnke.de/iiif/storymap#",
6
+ "name": "storymap_navplace:navplaceName",
7
+ "zoom": {
8
+ "@id": "storymap_navplace:navplaceZoom",
9
+ "@type": "xsd:integer"
10
+ },
11
+ "line": {
12
+ "@id": "storymap_navplace:navplaceLine",
13
+ "@type": "xsd:boolean"
14
+ },
15
+ "icon": {
16
+ "@id": "storymap_navplace:navplaceIcon",
17
+ "@type": "@id"
18
+ },
19
+ "iconSize": {
20
+ "@id": "storymap_navplace:navplaceIconSize",
21
+ "@container": "@list"
22
+ },
23
+ "image": {
24
+ "@id": "storymap_navplace:navplaceImage",
25
+ "@type": "@id"
26
+ },
27
+ "use_custom_marker": {
28
+ "@id": "storymap_navplace:navplaceUseCustomMarker",
29
+ "@type": "xsd:boolean"
30
+ },
31
+ "popup": {
32
+ "@id": "storymap_navplace:navplacePopup",
33
+ "@type": "xsd:boolean"
34
+ },
35
+ "audioBadge": {
36
+ "@id": "storymap_navplace:navplaceAudioBadge",
37
+ "@type": "xsd:boolean"
38
+ },
39
+ "rotation": {
40
+ "@id": "storymap_navplace:navplaceRotation",
41
+ "@type": "xsd:decimal"
42
+ },
43
+ "basemap": {
44
+ "@id": "storymap_navplace:navplaceBasemap",
45
+ "@type": "@id"
46
+ },
47
+ "filter": {
48
+ "@id": "storymap_navplace:navplaceFilter"
49
+ },
50
+ "mask": {
51
+ "@id": "storymap_navplace:navplaceMask"
52
+ }
53
+ }
54
+ }
package/dist/site.css CHANGED
@@ -1,3 +1,4 @@
1
+ @charset "UTF-8";
1
2
  /*
2
3
  * Site chrome for the landing/docs pages (index.html, demo.html, docs/*).
3
4
  *
@@ -12,8 +13,8 @@
12
13
  font-family: georgia, "Times New Roman", times, serif;
13
14
  font-size: 18px;
14
15
  line-height: 1.618;
15
- color: #222;
16
- background-color: #fff;
16
+ color: var(--sm-color-text, #222);
17
+ background-color: var(--sm-color-page, #fff);
17
18
  }
18
19
  .sm-site *,
19
20
  .sm-site *::before,
@@ -30,7 +31,7 @@
30
31
  .sm-site pre {
31
32
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
32
33
  font-size: 0.85em;
33
- background-color: #f0f0f0;
34
+ background-color: var(--sm-color-light, #f0f0f0);
34
35
  border-radius: 3px;
35
36
  }
36
37
  .sm-site code {
@@ -68,7 +69,7 @@
68
69
  font-style: italic;
69
70
  font-weight: normal;
70
71
  font-size: 3.82rem;
71
- color: #222;
72
+ color: var(--sm-color-text, #222);
72
73
  margin: 0;
73
74
  }
74
75
  @media (width <= 767px) {
@@ -105,10 +106,10 @@
105
106
  position: relative;
106
107
  overflow: hidden;
107
108
  padding: 0.89rem 1.78rem 0.94rem;
108
- border: 1px solid #d4d4d4;
109
+ border: 1px solid var(--sm-color-border-light, #d4d4d4);
109
110
  border-radius: 4px;
110
111
  background-color: transparent;
111
- color: #646464;
112
+ color: var(--sm-color-grey, #646464);
112
113
  font-family: "Helvetica Neue", helvetica, arial, "Segoe UI", system-ui, sans-serif;
113
114
  font-size: 0.89rem;
114
115
  text-align: center;
@@ -122,7 +123,7 @@
122
123
  .sm-site .button:hover {
123
124
  background-color: #fdfdfd;
124
125
  border-color: #d7d7d7;
125
- color: #646464;
126
+ color: var(--sm-color-grey, #646464);
126
127
  text-decoration: none;
127
128
  }
128
129
  .sm-site .button:focus-visible {
@@ -216,11 +217,11 @@
216
217
  border-color: rgba(255, 255, 255, 0.1);
217
218
  }
218
219
  .sm-site .navbar .button-active {
219
- background-color: #d4d4d4;
220
- color: #222;
220
+ background-color: var(--sm-color-border-light, #d4d4d4);
221
+ color: var(--sm-color-text, #222);
221
222
  }
222
223
  .sm-site .navbar .button-active:hover {
223
- background-color: #d4d4d4;
224
+ background-color: var(--sm-color-border-light, #d4d4d4);
224
225
  }
225
226
  .sm-site .navbar-dark {
226
227
  background-color: #484848;
@@ -233,8 +234,8 @@
233
234
  .sm-site .header-product {
234
235
  padding: 2rem 2rem 0;
235
236
  margin-bottom: 0;
236
- border-bottom: 1px solid #b8b8b8;
237
- background-color: #f0f0f0;
237
+ border-bottom: 1px solid var(--sm-color-border, #b8b8b8);
238
+ background-color: var(--sm-color-light, #f0f0f0);
238
239
  text-align: center;
239
240
  }
240
241
  .sm-site .header-product .product-tagline {
@@ -251,7 +252,7 @@
251
252
  }
252
253
  .sm-site .navbar-subnav {
253
254
  margin-top: 1rem;
254
- background-color: #f0f0f0;
255
+ background-color: var(--sm-color-light, #f0f0f0);
255
256
  }
256
257
  @media (width <= 767px) {
257
258
  .sm-site .navbar-subnav {
@@ -259,12 +260,12 @@
259
260
  }
260
261
  }
261
262
  .sm-site .navbar-subnav .button {
262
- border-color: #d4d4d4;
263
+ border-color: var(--sm-color-border-light, #d4d4d4);
263
264
  box-shadow: none;
264
- color: #646464;
265
+ color: var(--sm-color-grey, #646464);
265
266
  }
266
267
  .sm-site .navbar-subnav .button:hover {
267
- color: #222;
268
+ color: var(--sm-color-text, #222);
268
269
  background-color: rgba(255, 255, 255, 0.6);
269
270
  }
270
271
  .sm-site .container {
@@ -307,12 +308,12 @@
307
308
  margin-bottom: 0;
308
309
  }
309
310
  .sm-site .fill-color-grey {
310
- background-color: #f0f0f0;
311
+ background-color: var(--sm-color-light, #f0f0f0);
311
312
  }
312
313
  .sm-site .note {
313
- background-color: #f0f0f0;
314
+ background-color: var(--sm-color-light, #f0f0f0);
314
315
  border-radius: 8px;
315
- color: #9c9c9c;
316
+ color: var(--sm-color-muted, #9c9c9c);
316
317
  font-family: "Helvetica Neue", helvetica, arial, "Segoe UI", system-ui, sans-serif;
317
318
  font-size: 0.9em;
318
319
  font-style: italic;
@@ -328,7 +329,7 @@
328
329
  display: block;
329
330
  width: 100%;
330
331
  border: 0;
331
- background-color: #f0f0f0;
332
+ background-color: var(--sm-color-light, #f0f0f0);
332
333
  }
333
334
  .sm-site .cards {
334
335
  display: grid;
@@ -356,7 +357,7 @@
356
357
  }
357
358
  .sm-site .cards .card {
358
359
  padding: 0;
359
- border: 1px solid #d4d4d4;
360
+ border: 1px solid var(--sm-color-border-light, #d4d4d4);
360
361
  border-radius: 4px;
361
362
  background-color: #fff;
362
363
  overflow: hidden;
@@ -379,7 +380,7 @@
379
380
  height: 100%;
380
381
  background-position: center;
381
382
  background-size: cover;
382
- background-color: #646464;
383
+ background-color: var(--sm-color-grey, #646464);
383
384
  transition: filter 0.3s ease;
384
385
  }
385
386
  .sm-site .cards .card .header-image-background.bw {
@@ -391,17 +392,17 @@
391
392
  .sm-site .cards .card article.card-content h3 {
392
393
  font-size: 1rem;
393
394
  margin: 0;
394
- color: #222;
395
+ color: var(--sm-color-text, #222);
395
396
  }
396
397
  .sm-site .cards .card footer {
397
398
  margin-top: auto;
398
399
  padding: 0.6rem 1rem 0.8rem;
399
400
  font-family: "Helvetica Neue", helvetica, arial, "Segoe UI", system-ui, sans-serif;
400
401
  font-size: 0.75em;
401
- color: #9c9c9c;
402
+ color: var(--sm-color-muted, #9c9c9c);
402
403
  }
403
404
  .sm-site .cards .card:hover {
404
- border-color: #222;
405
+ border-color: var(--sm-color-text, #222);
405
406
  }
406
407
  .sm-site .cards .card:hover .header-image-background.bw {
407
408
  filter: grayscale(0%);
@@ -417,15 +418,15 @@
417
418
  position: relative;
418
419
  padding: 0.5rem;
419
420
  margin-bottom: 0.5rem;
420
- background-color: #f8f8f8;
421
- border: 1px solid #d4d4d4;
421
+ background-color: var(--sm-color-lighter, #f8f8f8);
422
+ border: 1px solid var(--sm-color-border-light, #d4d4d4);
422
423
  border-radius: 8px;
423
424
  }
424
425
  .sm-site ul.accordion li:hover {
425
426
  border-color: #484848;
426
427
  }
427
428
  .sm-site ul.accordion li:hover h3 {
428
- color: #222;
429
+ color: var(--sm-color-text, #222);
429
430
  }
430
431
  .sm-site ul.accordion li input[type=checkbox] {
431
432
  position: absolute;
@@ -461,7 +462,7 @@
461
462
  font-size: 1.2rem;
462
463
  font-weight: 700;
463
464
  margin: 0.4rem 1.5rem 0.4rem 0.6rem;
464
- color: #222;
465
+ color: var(--sm-color-text, #222);
465
466
  }
466
467
  .sm-site ul.accordion li .accordion-content {
467
468
  position: relative;
@@ -511,12 +512,12 @@
511
512
  .sm-site .sm-docs table th,
512
513
  .sm-site .sm-docs table td {
513
514
  padding: 0.5rem 0.75rem;
514
- border: 1px solid #d4d4d4;
515
+ border: 1px solid var(--sm-color-border-light, #d4d4d4);
515
516
  text-align: left;
516
517
  vertical-align: top;
517
518
  }
518
519
  .sm-site .sm-docs table th {
519
- background-color: #f0f0f0;
520
+ background-color: var(--sm-color-light, #f0f0f0);
520
521
  }
521
522
  .sm-site .sm-docs table code {
522
523
  background: none;
@@ -525,8 +526,8 @@
525
526
  .sm-site .sm-docs blockquote {
526
527
  margin: 1rem 0;
527
528
  padding: 0.25rem 1rem;
528
- border-left: 4px solid #d4d4d4;
529
- color: #646464;
529
+ border-left: 4px solid var(--sm-color-border-light, #d4d4d4);
530
+ color: var(--sm-color-grey, #646464);
530
531
  }
531
532
  .sm-site .sm-docs img {
532
533
  max-width: 100%;
@@ -538,8 +539,8 @@
538
539
  padding: 60px 80px 30px;
539
540
  font-family: "Helvetica Neue", helvetica, arial, "Segoe UI", system-ui, sans-serif;
540
541
  font-size: 0.85em;
541
- background-color: #f0f0f0;
542
- border-top: 1px solid #b8b8b8;
542
+ background-color: var(--sm-color-light, #f0f0f0);
543
+ border-top: 1px solid var(--sm-color-border, #b8b8b8);
543
544
  }
544
545
  .sm-site .footer-knightlab .footer-grid {
545
546
  display: flex;
@@ -583,10 +584,27 @@
583
584
  list-style: none;
584
585
  }
585
586
  .sm-site .footer-knightlab ul.list-social a {
586
- color: #646464;
587
+ color: var(--sm-color-grey, #646464);
587
588
  font-size: 1.1em;
588
589
  font-weight: 700;
589
590
  }
590
591
  .sm-site .footer-knightlab ul.list-social a:hover {
591
592
  color: #df4e13;
593
+ }
594
+
595
+ /* Dark landing (dark theme plan): the surfaces above redeclared. Brand
596
+ accents (badge, green, navbar, orange links) keep their light values —
597
+ they read on both. Follows the OS setting; the widget additionally
598
+ honours an explicit `theme` option. */
599
+ @media (prefers-color-scheme: dark) {
600
+ .sm-site {
601
+ --sm-color-page: #1a1a1a;
602
+ --sm-color-text: #e0e0e0;
603
+ --sm-color-grey: #a8a8a8;
604
+ --sm-color-light: #262626;
605
+ --sm-color-lighter: #2e2e2e;
606
+ --sm-color-border: #555;
607
+ --sm-color-border-light: #444;
608
+ --sm-color-muted: #b0b0b0;
609
+ }
592
610
  }
@@ -72,15 +72,36 @@ element, ... }` to configure the underlying OpenLayers map; `element`
72
72
 
73
73
  ## Changed options and map types
74
74
 
75
- | Old | New |
76
- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
77
- | `map_type: "zoomify"` (+ `options.zoomify`) | preferred: `map_type: "iiif"` with `options.iiif = { url, attribution }` (IIIF Image API 2/3); zoomify still works as a legacy image-pyramid basemap (see below) |
78
- | `map_type: "stamen:toner"` etc. | `"stamen:*"` types are deprecated and remapped: `stamen:watercolor` → `ch-watercolor`, others → `osm:standard` |
79
- | Stadia Maps paid tiles via `map_access_token` | Recommended: free OpenStreetMap vector styles, e.g. `map_type: "osm:bright"` (OpenFreeMap), or any style JSON URL |
80
- | Bundled `map_access_token` | removed — pass `map_access_token` in the options if you use Mapbox/Stadia tiles |
81
- | Bundled Flickr API key | removed — pass `api_key_flickr` in the options if you use `flickr.com/photos` API URLs |
82
- | `relative_date: true` (moment.js) | removed — format dates in the story text |
83
- | `font_css: "stock:<name>"` (or a path) | paths now resolve against the page URL (not the library location), plus the font files ship via `@fontsource-utils/scss`; no separate font CSS link needed |
75
+ | Old | New |
76
+ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
77
+ | `map_type: "zoomify"` (+ `options.zoomify`) | preferred: `map_type: "iiif"` with `options.iiif = { url, attribution }` (IIIF Image API 2/3); zoomify still works as a legacy image-pyramid basemap (see below) |
78
+ | `map_type: "stamen:toner"` etc. | `"stamen:*"` types are deprecated and remapped: `stamen:watercolor` → `ch-watercolor`, others → `osm:standard` |
79
+ | Stadia Maps paid tiles via `map_access_token` | Recommended: free OpenStreetMap vector styles, e.g. `map_type: "osm:bright"` (OpenFreeMap), or any style JSON URL |
80
+ | Bundled `map_access_token` | removed — pass `map_access_token` in the options if you use Mapbox/Stadia tiles |
81
+ | Bundled Flickr API key | removed — pass `api_key_flickr` in the options if you use `flickr.com/photos` API URLs |
82
+ | `relative_date: true` (moment.js) | removed — format dates in the story text |
83
+ | `font_css: "stock:<name>"` (or a path) | paths now resolve against the page URL (not the library location), plus the font files ship via `@fontsource-utils/scss`; no separate font CSS link needed |
84
+ | `font_css: false` (bundler consumers) | `stock:<name>` resolves via `import.meta.url`, which only survives when this package is _not_ processed by a bundler — bundling inlines `dist/js/storymap.js` into a chunk and the theme URL breaks. Instead `import "@projektemacher/storymapjs/css/fonts/font.default.css"` (fingerprinted, `files/` rebased by the bundler) and pass `font_css: false` for no injected `<link>`. `"none"` works too for JSON. A failing theme only warns |
85
+
86
+ ## A story with no map
87
+
88
+ `map_type: "none"` runs the storymap as text and media only. Nothing is
89
+ constructed: no `ol/Map`, no tile layer, no tile consent row, and the overview
90
+ control is hidden. The slider panel takes the full width, because there is no
91
+ map behind it to fade over.
92
+
93
+ This is the shape a photo essay or a transcript-led story wants, and it is the
94
+ one the map engine's unconditional construction used to make impossible. Note
95
+ that `map_type: ""` and an absent `map_type` both still mean OpenStreetMap, and
96
+ `map_type: null` now falls back to that default instead of throwing out of the
97
+ constructor — absence is not reinterpreted, so no existing document changes
98
+ meaning. Map-derived accessors (`getBaseLayer()`, `getMarkers()`, …) return
99
+ their neutral values, and the map setters are no-ops.
100
+
101
+ | Old | New |
102
+ | ------------------------------------------ | ------------------------------------- |
103
+ | a text-only story with a dummy `map_type` | `map_type: "none"` |
104
+ | `map_type: null` (crashed the constructor) | normalised to the default, `""` → OSM |
84
105
 
85
106
  ## Removed globals and exports
86
107
 
@@ -97,9 +118,28 @@ element, ... }` to configure the underlying OpenLayers map; `element`
97
118
 
98
119
  | Removed | Replacement |
99
120
  | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
100
- | `vine` media type (service shut down) | vine URLs fall back to the `website` iframe — use another media source for those slides |
121
+ | `vine` media type (service shut down) | vine URLs fall back to the `website` iframe — or paste the provider's `<iframe>` snippet into the slide text (sanitized, https-only); use another media source for those slides |
101
122
  | Juxtapose `frame/?uid=` embed URLs | the `juxtapose.knightlab.com/frame/?uid=` host is dead — use the published format `https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=...` (note: this keeps a Knight Lab CDN dependency for those slides) |
102
123
  | Twitter `@nickname` rendering | tweets from `x.com` URLs are now parsed too (fixes `@undefined` nicknames); no migration needed |
124
+ | Ricoh360/theta360 embeds (#391) | service no longer available (won't fix) — paste the provider's `<iframe>` snippet into the slide text if the service returns |
125
+
126
+ Extra media per slide (#358, partial): a slide takes `media_extra` (a list of
127
+ further media items, rendered after the primary one) plus `media_layout`
128
+ (`stack`, the default, or `row` for two side-by-side items). An `<iframe>`
129
+ embed snippet pasted into the slide `text` field still renders sanitized
130
+ (scripts, event handlers and non-https sources dropped) — keep that as the
131
+ migration path for removed media types:
132
+
133
+ ```html
134
+ <p>Extra footage:</p>
135
+ <iframe
136
+ src="https://example.com/embed/123"
137
+ width="560"
138
+ height="315"
139
+ frameborder="0"
140
+ allowfullscreen
141
+ ></iframe>
142
+ ```
103
143
 
104
144
  `map_type: "zoomify"` is supported again (legacy): the image pyramid renders
105
145
  via the storymap data's `zoomify` options (`path`, `width`, `height`), using a
@@ -113,12 +153,206 @@ storymap JSON sources.
113
153
  ## Map engine: Leaflet → OpenLayers
114
154
 
115
155
  - `storymap.map` now exposes the **OpenLayers `Map`** instance instead of a
116
- Leaflet map. Port any direct Leaflet calls (e.g. `setView`, `flyTo`) to the
117
- OpenLayers API (`getView().animate(...)`, ...).
156
+ Leaflet map. Port any direct Leaflet calls to the OpenLayers API (table
157
+ below). It is `null` until the map has been built.
118
158
  - Markers are DOM overlays (`.vco-mapmarker` / `.vco-mapmarker-active`) like
119
159
  before; the mini map is an OpenLayers `OverviewMap` control.
120
160
  - New basemap options: vector styles via `map_type: "osm:<style>"` (OpenFreeMap)
121
161
  or a Mapbox style JSON URL.
162
+ - The `Ol*` aliases re-exported from `src/main.ts` (`OlMap`, `OlView`,
163
+ `OlLayer`, `OlTileLayer`, `OlVectorLayer`, `OlSource`, `OlProjection`) let
164
+ a consumer type the map and layers without depending on `ol` directly;
165
+ anything beyond those (features, geometries, coordinates) still needs `ol`.
166
+
167
+ ### Direct Leaflet calls → OpenLayers
168
+
169
+ Both maps are reachable from the same place (`storymap.map`), so only the
170
+ call syntax changes:
171
+
172
+ | Leaflet | OpenLayers |
173
+ | ------------------------------------------ | ------------------------------------------------------------------------- |
174
+ | `map.getCenter()` | `map.getView().getCenter()` — panel-shifted, see below |
175
+ | `map.getZoom()` | `map.getView().getZoom()` |
176
+ | `map.setView(c, z)` / `map.fitBounds(b)` | `map.getView().fit(extent, { size: map.getSize() })` |
177
+ | `map.panTo(c)` / `map.flyTo(c, z)` | `map.getView().animate({ center: c, duration: 300 })` |
178
+ | `map.setZoom(z)` | `map.getView().setZoom(z)` (or `.animate({ zoom: z })`) |
179
+ | `map.getSize()` / `map.getBounds()` | `map.getSize()` / `map.getView().calculateExtent(map.getSize())` |
180
+ | `map.on("moveend", fn)` | `map.on("moveend", fn)` (same event names; `movestart`/`move` also exist) |
181
+ | `L.tileLayer(url, opts).addTo(map)` | `new TileLayer({ source: new XYZ({ url, attributions }) }).setMap(map)` |
182
+ | `L.control.attribution` / `L.control.zoom` | OL `Attribution` / `Zoom` controls (pass them via `map_options.controls`) |
183
+ | `map.getPane("overlayPane")` | `map.getOverlayContainer()` (markers are DOM siblings, not OL features) |
184
+ | `map.invalidateSize()` | `map.updateSize()` |
185
+ | `map.remove()` | `map.setTarget(undefined); map.dispose();` (or `storymap.dispose()`) |
186
+
187
+ The exposed center is deliberately panel-shifted: in landscape the view is
188
+ offset so the visible map sits left of the slide panel, which means
189
+ `getView().getCenter()` does **not** equal the current slide's location.
190
+ That is a display concern, not a data one — read the location from the
191
+ slide, not from the view. There is intentionally no offset-aware getter;
192
+ an earlier `_getMapCenter(offset)` parameter promised that correction and
193
+ never applied it, so it was removed rather than left to mislead.
194
+ | `map.options.crs` / `map.getPixelOrigin()` | `map.getView().getProjection()` / `map.getPixelFromCoordinate(coord)` |
195
+
196
+ Marker positions are still DOM elements, so `marker.getLatLng()` has no
197
+ equivalent — read the slide data (`storymap.data.stlides[n].location`) or use
198
+ `storymap._map.getMarker(n).latLon()`.
199
+
200
+ ### Map and marker methods
201
+
202
+ The map/marker methods of the original viewer are still there with the same
203
+ names and behaviour (`storymap._map.<method>()`, `marker.<method>()`); the OL
204
+ engine implements them as thin wrappers over `storymap.map`. Two methods are
205
+ deprecated no-ops and one is gone:
206
+
207
+ | Original method | Status |
208
+ | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
209
+ | `updateDisplay`, `goTo`, `panTo`, `zoomTo`, `viewTo` | unchanged |
210
+ | `getBoundsZoom`, `markerOverview`, `calculateMarkerZooms` | unchanged (`getBoundsZoom()` now returns `number \| undefined` instead of a falsy value) |
211
+ | `createMiniMap`, `createMarkers`, `createMarker` | unchanged |
212
+ | `setMapOffset`, `calculateMinMaxZoom`, `updateMinMaxZoom`, `initialMapLocation` | unchanged |
213
+ | `show()` / `hide()` (map and marker) | **deprecated no-ops** — they were already empty in the original viewer. Style `.vco-mapmarker` or use `marker.active(false)` |
214
+ | `map.addTo(container)` / `map.removeFrom(container)` | unchanged — inherited from the `DomMixed` mixin: append/remove the map container and fire `added`/`removed`. The engine override re-targets and re-measures the OpenLayers viewport, so a move into a differently sized parent works |
215
+ | `marker.createPopup()` | **deprecated no-op** — it never did anything upstream either (empty base body, commented-out Leaflet body), so the `map_popup` option that called it had no effect. Still accepted, still inert. Use `marker.openPopup()` / `storymap.openMarkerPopup(n)` instead |
216
+ | `marker.addTo()`, `marker.removeFrom()`, `marker.updateDisplay()`, `marker.active()`, `marker.location()` | unchanged |
217
+ | `marker.openPopup()` / `closePopup()` / `togglePopup()` / `isPopupEnabled()` / `popupOpen` | **new** — programmatic control of the popup card (`marker: { popup: true }`); `openPopup()` returns false when disabled or not a real marker, `popupOpen` reports the state |
218
+ | `storymap.openMarkerPopup(n)` / `closeMarkerPopup(n?)` / `isPopupOpen(n)` | **new** — open/close/query a stop's card from the viewer; `openMarkerPopup` navigates to `n` first and returns false (changing nothing) when disabled, out of range, disposed or mapless |
219
+
220
+ Marker helpers that Leaflet provided on the marker object (`getLatLng`,
221
+ `setIcon`, `bindPopup`) are gone; use `marker.latLon()`, the
222
+ `.vco-mapmarker` element and your own DOM/CSS.
223
+
224
+ ## Reaching the map, layers and markers
225
+
226
+ `storymap.map` is the raw `ol/Map` (typed as `OlMap | null` — it is set during
227
+ construction, so check it before first use in an async setup). Everything the
228
+ viewer keeps internally is available through accessors on `storymap` (and on
229
+ `storymap._map` for the engine methods):
230
+
231
+ | Accessor | Returns |
232
+ | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
233
+ | `getBaseLayer()` | the base tile/vector layer |
234
+ | `getOverlayLayers()` / `getOverlayLayer(i)` | overlay layers / one by index (`null` if out of range) |
235
+ | `getOverlayCount()` | number of overlays |
236
+ | `setOverlayVisible(i, on)` / `setOverlayOpacity(i, opacity)` | show/hide and fade one overlay |
237
+ | `getMinimap()` | the inner overview `ol/Map` (`OlMap \| null`), not the `OverviewMap` control itself — there is no accessor for the control object |
238
+ | `getLine()` / `getLineActive()` | the full and the travelled route `VectorLayer` |
239
+ | `getMarker(n)` / `getMarkers()` | one marker or all of them, in slide order |
240
+ | `setExtraAttributions(html)` | extra attribution HTML, listed after the source credits |
241
+ | `isImageSpace()` | whether the map is a IIIF image in image space (see below) |
242
+
243
+ `tile_source_factory` may return a full `ol/layer/Layer` (not just a source)
244
+ anywhere a layer is built, so custom layers can carry their own opacity,
245
+ z-index and events. A custom layer without a source (Allmaps'
246
+ `WarpedMapLayer`) passes through untouched; source reads go through a
247
+ capability check, so it simply skips the tile-grid fits.
248
+
249
+ The viewer reserves three z-index ranges and custom layers should stay out
250
+ of them: **0** for the base tiles, **1..n** for the stacked `overlays[]`
251
+ entries in order, and **10/11** for the full and travelled route lines. A
252
+ custom layer with no explicit z-index lands wherever OpenLayers puts it,
253
+ which is above the lines — set one explicitly if the layer must sit inside
254
+ the stack.
255
+
256
+ ### Layer switcher
257
+
258
+ `show_layers_control: true` adds a disclosure button to the menubar with
259
+ basemap radios and overlay checkboxes. Basemap candidates come from
260
+ `basemaps[]` (entry 0 is the initial basemap unless `map_type` says
261
+ otherwise; omit for an overlays-only control); overlay rows come from the
262
+ built `overlays[]` entries, so a malformed entry never gets a row and row
263
+ _i_ is always layer _i_. `label` may be a function for host i18n (re-invoked
264
+ on `refreshLabels()`), `locked: true` renders a row checked and disabled,
265
+ `control: false` hides a row without removing the overlay — but function
266
+ labels survive only in constructor options, because `mergeData()` lets
267
+ storymap JSON overwrite same-named option keys. A runtime basemap swap
268
+ rebuilds layers but never the view, so candidates needing another
269
+ projection are refused with a warning; switching fires `basemapchange` /
270
+ `overlaychange`, and the visitor's choice is never persisted.
271
+
272
+ ### Image space vs. georeferenced
273
+
274
+ `map_type: "iiif"` is a mercator map by default. With `map_as_image: true` the
275
+ image _is_ the map: the view projection becomes `EPSG:4326`, the view is
276
+ fitted to the image extent and marker locations are pixel offsets into the
277
+ image rather than lat/lon. Ask `storymap.isImageSpace()` instead of testing
278
+ `map_type` — georeferenced IIIF (a manifest with `navPlace` regions) is an
279
+ ordinary mercator map, and `map_bbox` with a georeferenced layer is one too.
280
+
281
+ ### Knowing when the imagery is there
282
+
283
+ Tile and image sources attach asynchronously, so `loaded` can fire before the
284
+ imagery exists. Listen for `imageready`, which fires once a source is ready and
285
+ carries `{ source, kind, layer }` (`kind` is `"iiif"`, `"zoomify"` or
286
+ `"tiles"`); it is re-fired on the `storymap` as well:
287
+
288
+ ```js
289
+ storymap.on("imageready", ({ kind, source }) => {
290
+ console.log("imagery ready", kind, source);
291
+ });
292
+ ```
293
+
294
+ ### Tearing a storymap down
295
+
296
+ Call `storymap.dispose()` when the embedding view goes away (SPA route change,
297
+ dialog close). It clears the timers and the resize observer, removes the
298
+ `window`/`document` listeners, cancels running slide animations, disposes the
299
+ slider and the OpenLayers map, and sets `storymap.map` to `null`. Calling it
300
+ twice is safe; the instance is unusable afterwards.
301
+
302
+ ## Custom map providers
303
+
304
+ Any slippy-map tile URL works as `map_type` — pass the template verbatim
305
+ (including `{z}/{x}/{y}`), relative or absolute:
306
+
307
+ ```js
308
+ new StoryMap("embed", data, {
309
+ map_type: "https://tiles.example.org/base/{z}/{x}/{y}.png",
310
+ });
311
+ ```
312
+
313
+ Mapbox style JSON URLs render as vector tile layers; OpenLayers
314
+ `Map`/`View` pass-through stays available via `options.map_options`
315
+ (`controls` replaces the defaults, `interactions` are added to the
316
+ viewer's own pan/zoom set, `view` merges over the computed default).
317
+
318
+ For source classes the templates cannot express (WMS, authenticated or
319
+ gridded sources), use the `tile_source_factory` option. It is consulted
320
+ for every base, overlay and minimap layer before the built-in
321
+ `map_type` handling — return any `ol/layer/Layer` (used as-is) or a bare
322
+ `Source` (which is wrapped in a `TileLayer`), or `null`/`undefined` to fall
323
+ through:
324
+
325
+ ```js
326
+ import TileLayer from "ol/layer/Tile";
327
+ import TileWMS from "ol/source/TileWMS";
328
+
329
+ new StoryMap("embed", data, {
330
+ map_type: "wms:flood",
331
+ tile_source_factory: (map_type, { options, createDefault }) =>
332
+ map_type.startsWith("wms:")
333
+ ? new TileLayer({
334
+ source: new TileWMS({
335
+ url: "https://geoserver.example.org/wms",
336
+ params: { LAYERS: map_type.slice(4) },
337
+ crossOrigin: "anonymous",
338
+ }),
339
+ })
340
+ : createDefault(),
341
+ });
342
+ ```
343
+
344
+ The second factory argument also carries the resolved `options`
345
+ (`{ options, createDefault }`). A factory may return any `ol/layer/Layer`
346
+ (used as-is — including sourceless layers such as Allmaps'
347
+ `WarpedMapLayer`), a bare `Source` (wrapped in a `TileLayer`), or
348
+ `null`/`undefined` to fall through to the default `map_type` handling.
349
+
350
+ Custom sources must carry their own attributions (via the returned
351
+ source or the `attribution` option) — only the built-in `osm*` types
352
+ are credited automatically. `tile_source_factory` is constructor- and
353
+ runtime-only (functions cannot ride storymap JSON) and also applies to
354
+ `overlays[]` entries, whose `map_type` values go through the same
355
+ factory.
122
356
 
123
357
  ## Data and tooling
124
358
 
@@ -126,14 +360,40 @@ storymap JSON sources.
126
360
  (`schema/storymap.schema.json`); invalid documents are reported to the
127
361
  console at load time.
128
362
  - IIIF Presentation 3 manifests are accepted directly as storymap sources.
129
- - The StoryMap IIIF extension context changed to
130
- `https://christianmahnke.de/iiif/storymap` — manifests produced with the old
131
- `https://example.org/ns/storymap/v1` context need re-converting
132
- (`scripts/convert-to-iiif.mjs`).
363
+ The map settings map onto `storymap:` terms of a map configuration service
364
+ (IIIF has no basemap or tile-layer vocabulary of its own), and the
365
+ geospatial parts use the native extensions where they exist: `navPlace`
366
+ Points for slide locations, a `navPlace` Polygon for the story extent
367
+ (`map_bbox`), an IIIF Image API Selector for `location.region`, and the
368
+ Georeference Extension for placed rasters. A georeferenced layer is
369
+ manifest-only (the legacy format cannot express ground control points); see
370
+ [docs/storymap-as-iiif-manifest.md](storymap-as-iiif-manifest.md#geo-referenced-layers).
133
371
  - The editor, staging/backend infrastructure, AWS/GitHub hosting scripts and the
134
372
  Python authoring server are gone — this is a viewer-only library.
373
+ - **Slideshow tours** are a third input format: W3C `AnnotationCollection`
374
+ documents (the format of slideshow-style guided image tours) load
375
+ directly by object, file or URL, auto-detected after the IIIF branch
376
+ (`slideshow: false` opts out). A pure translator converts them to
377
+ storymap data — per-slide image regions, rotation, filter grading,
378
+ spotlight masks, per-slide basemaps, narration with playback flags and
379
+ player chrome — which renders only for slideshow tours (the internal
380
+ `slideshow_source` marker; other documents are unaffected). Convert
381
+ offline with `npm run convert:slideshow`; the full mapping is in
382
+ [docs/slideshow.md](slideshow.md).
383
+
384
+ ## Events (unchanged, plus new ones)
135
385
 
136
- ## Events (unchanged)
386
+ The canonical reference is [docs/events.md](events.md) — one table per
387
+ emitter, with payloads. What changed in migration terms: `change` gains
388
+ `current_id`, `loaded`, `title`, `dataloaded`, `fontLoaded`,
389
+ `transitionstart`/`transitionend`, `error` and the constructor listener map
390
+ all work as before; `markerAdded`/`markerRemoved` still fire on the map
391
+ object; `imageready`, `markerclick` and `popupopen`/`popupclose` are new
392
+ (see above).
137
393
 
138
- `change` (with `current_slide`), `loaded`, `title`, `dataloaded`,
139
- `fontLoaded`, plus the listener map in the constructor — all work as before.
394
+ Two additions for IIIF tours: `await storymap.loadAnnotations()` fetches a
395
+ manifest's externally referenced annotation pages and appends them as stops,
396
+ then fires `annotationsloaded` with `{ stops, searchService, failed }`. A
397
+ slide's stable identity is available as `storymap.getSlideId(index)`, which
398
+ is what the `#slide-N` hash and the `iiif-content` deep link resolve
399
+ through.