@janga/norna 0.7.18 → 0.7.23

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 (615) hide show
  1. package/README.md +22 -12
  2. package/astro.config.mjs +25 -0
  3. package/bin/norna-cli.mjs +8 -2
  4. package/package.json +60 -13
  5. package/schemas/category.schema.json +20 -0
  6. package/schemas/config.schema.json +22 -14
  7. package/schemas/content-frontmatter.schema.json +25 -5
  8. package/schemas/manifest.json +2 -1
  9. package/schemas/page-theme.schema.json +58 -30
  10. package/schemas/sitewide-content.schema.json +20 -19
  11. package/schemas/theme.schema.json +542 -243
  12. package/scripts/add-site-node.mjs +251 -0
  13. package/scripts/check-config.mjs +32 -4
  14. package/scripts/deploy-site.mjs +5 -9
  15. package/scripts/dev-local.mjs +175 -112
  16. package/scripts/generate-images.mjs +11 -15
  17. package/scripts/generate-schemas.mjs +4 -1
  18. package/scripts/init-site.mjs +35 -0
  19. package/scripts/lib/astro-command.mjs +14 -9
  20. package/scripts/lib/content-sync-apply.mjs +34 -0
  21. package/scripts/lib/content-sync-plan.mjs +179 -0
  22. package/scripts/lib/editor-language-service.mjs +156 -177
  23. package/scripts/lib/heading-ids.mjs +4 -2
  24. package/scripts/lib/image-presentation.mjs +2 -0
  25. package/scripts/lib/markdown-links.mjs +182 -0
  26. package/scripts/lib/navigation-model.mjs +36 -19
  27. package/scripts/lib/norna-markdown-blocks.mjs +65 -145
  28. package/scripts/lib/norna-markdown-render-plugin.mjs +37 -0
  29. package/scripts/lib/object.mjs +28 -0
  30. package/scripts/lib/page-aliases.mjs +164 -0
  31. package/scripts/lib/page-markdown.mjs +332 -0
  32. package/scripts/lib/presentation-contract.mjs +266 -0
  33. package/scripts/lib/presentation-palette-metadata.mjs +51 -0
  34. package/scripts/lib/presentation.mjs +508 -79
  35. package/scripts/lib/project-config.mjs +78 -10
  36. package/scripts/lib/schema-definitions.mjs +67 -16
  37. package/scripts/lib/schema-editor-metadata.mjs +126 -24
  38. package/scripts/lib/schema-value-definitions.mjs +30 -12
  39. package/scripts/lib/site-content.mjs +46 -239
  40. package/scripts/lib/site-link-graph.mjs +326 -0
  41. package/scripts/lib/site-page-urls.mjs +10 -0
  42. package/scripts/lib/site-paths.mjs +2 -3
  43. package/scripts/lib/site-structure.mjs +189 -0
  44. package/scripts/lib/sitemap.mjs +34 -0
  45. package/scripts/lib/theme-presets.mjs +118 -119
  46. package/scripts/lib/theme-profiles.mjs +223 -0
  47. package/scripts/lib/typography.mjs +220 -35
  48. package/scripts/lib/yaml-config.mjs +50 -6
  49. package/scripts/lib/yaml-indentation.mjs +86 -0
  50. package/scripts/show-typography.mjs +2 -3
  51. package/scripts/sync-content-sections.mjs +158 -244
  52. package/scripts/sync-site-public.mjs +23 -2
  53. package/src/components/CodeBlockCopyScript.astro +92 -0
  54. package/src/components/DisplaySettings.astro +107 -0
  55. package/src/components/ImageCarousel.astro +38 -13
  56. package/src/components/NavigationPageTree.astro +103 -88
  57. package/src/components/PageAliasRedirect.astro +49 -0
  58. package/src/components/PageContentsNavigation.astro +21 -0
  59. package/src/components/SectionNavigationScript.astro +112 -2
  60. package/src/components/SiteBreadcrumbs.astro +15 -12
  61. package/src/components/SiteNavigation.astro +104 -41
  62. package/src/components/SitePage.astro +76 -40
  63. package/src/components/SiteSection.astro +40 -191
  64. package/src/components/SiteTreeNavigation.astro +10 -10
  65. package/src/content.config.ts +5 -2
  66. package/src/layouts/BaseLayout.astro +55 -9
  67. package/src/lib/generatedImages.ts +0 -7
  68. package/src/lib/readerPreferencesScript.mjs +141 -0
  69. package/src/lib/sectionContent.ts +119 -201
  70. package/src/lib/siteNavigation.ts +36 -18
  71. package/src/lib/sitePages.ts +92 -20
  72. package/src/pages/[...slug].astro +35 -8
  73. package/src/styles/content.css +494 -0
  74. package/src/styles/foundations.css +284 -0
  75. package/src/styles/global.css +6 -2047
  76. package/src/styles/media.css +523 -0
  77. package/src/styles/navigation.css +495 -0
  78. package/src/styles/page-layout.css +437 -0
  79. package/src/styles/responsive.css +525 -0
  80. package/starters/basic/README.md +3 -3
  81. package/docs/README.md +0 -137
  82. package/docs/assets/norna-dog-shelter.jpg +0 -0
  83. package/docs/commands.md +0 -189
  84. package/docs/configuration.md +0 -142
  85. package/docs/content.md +0 -351
  86. package/docs/design/command-organization.md +0 -414
  87. package/docs/design/navigation-and-theme-plan.md +0 -186
  88. package/docs/design/norna-diagram-design.md +0 -159
  89. package/docs/design/site-examples-structure.md +0 -119
  90. package/docs/engine-development.md +0 -215
  91. package/docs/getting-started.md +0 -206
  92. package/docs/how-to/embedded-site.md +0 -35
  93. package/docs/images-and-metadata.md +0 -188
  94. package/docs/local-development.md +0 -82
  95. package/docs/pages.md +0 -190
  96. package/docs/public-files.md +0 -118
  97. package/docs/publishing.md +0 -117
  98. package/docs/requirements.md +0 -54
  99. package/docs/site-files.md +0 -152
  100. package/docs/sitewide-content.md +0 -73
  101. package/docs/theme.md +0 -237
  102. package/docs/typography.md +0 -168
  103. package/examples/README.md +0 -49
  104. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +0 -35
  105. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +0 -97
  106. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +0 -852
  107. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +0 -4
  108. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +0 -1
  109. package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +0 -183
  110. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +0 -1
  111. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +0 -8
  112. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +0 -13
  113. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +0 -36
  114. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +0 -5
  115. package/examples/complete-sites/dog-shelter-multi-page/.astro/types.d.ts +0 -2
  116. package/examples/complete-sites/dog-shelter-multi-page/README.md +0 -24
  117. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +0 -74
  118. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  119. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  120. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  121. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  122. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  123. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  124. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  125. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  126. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  127. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  128. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  129. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  130. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  131. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  132. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  133. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  134. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/package.json +0 -3
  135. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  136. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  137. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  138. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  139. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  140. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  141. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  142. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  143. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  144. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  145. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  146. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +0 -98
  147. package/examples/complete-sites/dog-shelter-multi-page/site/config.yaml +0 -1
  148. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/content.md +0 -23
  149. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/images/shelter-dog.jpg +0 -0
  150. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/content.md +0 -21
  151. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rex.jpg +0 -0
  152. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rover.jpg +0 -0
  153. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/content.md +0 -22
  154. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/images/adoption-dog.jpg +0 -0
  155. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +0 -10
  156. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +0 -9
  157. package/examples/complete-sites/dog-shelter-multi-page/site/public/robots.txt +0 -2
  158. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +0 -4
  159. package/examples/complete-sites/dog-shelter-multi-page/site/theme.yaml +0 -1
  160. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +0 -35
  161. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +0 -97
  162. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +0 -852
  163. package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +0 -4
  164. package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +0 -1
  165. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +0 -183
  166. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +0 -1
  167. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +0 -8
  168. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +0 -13
  169. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +0 -18
  170. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +0 -5
  171. package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +0 -2
  172. package/examples/complete-sites/dog-shelter-single-page/README.md +0 -24
  173. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +0 -74
  174. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  175. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  176. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  177. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  178. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  179. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  180. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  181. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  182. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  183. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  184. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  185. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  186. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  187. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  188. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  189. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  190. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +0 -3
  191. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  192. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  193. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  194. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  195. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  196. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  197. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  198. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  199. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  200. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  201. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  202. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +0 -50
  203. package/examples/complete-sites/dog-shelter-single-page/site/config.yaml +0 -1
  204. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/content.md +0 -37
  205. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/foster-dog.jpg +0 -0
  206. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/rescue-dog.jpg +0 -0
  207. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +0 -10
  208. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +0 -9
  209. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +0 -2
  210. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +0 -4
  211. package/examples/complete-sites/dog-shelter-single-page/site/theme.yaml +0 -1
  212. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +0 -35
  213. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +0 -97
  214. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +0 -844
  215. package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +0 -4
  216. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +0 -1
  217. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +0 -183
  218. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +0 -1
  219. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +0 -14
  220. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +0 -5
  221. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +0 -2
  222. package/examples/feature-demos/media-and-surfaces/README.md +0 -21
  223. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +0 -80
  224. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  225. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  226. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  227. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  228. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  229. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  230. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  231. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  232. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  233. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  234. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  235. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  236. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +0 -1389
  237. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  238. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  239. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  240. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  241. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  242. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +0 -3
  243. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  244. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  245. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  246. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  247. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  248. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  249. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  250. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  251. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  252. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  253. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  254. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +0 -66
  255. package/examples/feature-demos/media-and-surfaces/site/config.yaml +0 -1
  256. package/examples/feature-demos/media-and-surfaces/site/pages/000-home/content.md +0 -15
  257. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/content.md +0 -71
  258. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-carousel.svg +0 -11
  259. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-stack.svg +0 -9
  260. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-surfaces.svg +0 -8
  261. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-one.svg +0 -8
  262. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-three.svg +0 -13
  263. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-two.svg +0 -8
  264. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-one.svg +0 -8
  265. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-two.svg +0 -9
  266. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +0 -42
  267. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -2
  268. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +0 -2
  269. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  270. package/examples/feature-demos/media-and-surfaces/site/theme.yaml +0 -1
  271. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +0 -59
  272. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +0 -138
  273. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +0 -755
  274. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +0 -1
  275. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +0 -1
  276. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +0 -183
  277. package/examples/feature-demos/sitewide-content/.astro/data-store.json +0 -1
  278. package/examples/feature-demos/sitewide-content/.astro/dev.json +0 -13
  279. package/examples/feature-demos/sitewide-content/.astro/dev.log +0 -18
  280. package/examples/feature-demos/sitewide-content/.astro/settings.json +0 -5
  281. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +0 -2
  282. package/examples/feature-demos/sitewide-content/README.md +0 -26
  283. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +0 -74
  284. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  285. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  286. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  287. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  288. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  289. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  290. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  291. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  292. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  293. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  294. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  295. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  296. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  297. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  298. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  299. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  300. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +0 -3
  301. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  302. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  303. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  304. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  305. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  306. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  307. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  308. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  309. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  310. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  311. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  312. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +0 -1
  313. package/examples/feature-demos/sitewide-content/site/config.yaml +0 -1
  314. package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +0 -17
  315. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +0 -17
  316. package/examples/feature-demos/sitewide-content/site/pages/020-notices/content.md +0 -23
  317. package/examples/feature-demos/sitewide-content/site/pages/030-footer/content.md +0 -18
  318. package/examples/feature-demos/sitewide-content/site/public/logo.svg +0 -6
  319. package/examples/feature-demos/sitewide-content/site/public/robots.txt +0 -2
  320. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +0 -14
  321. package/examples/feature-demos/sitewide-content/site/theme.yaml +0 -1
  322. package/examples/feature-demos/theme-preset-documentation/README.md +0 -16
  323. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +0 -74
  324. package/examples/feature-demos/theme-preset-documentation/site/config.yaml +0 -1
  325. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/content.md +0 -30
  326. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/black-schnauzer.jpg +0 -0
  327. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/retriever-portrait.jpg +0 -0
  328. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/schnauzer-portrait.jpg +0 -0
  329. package/examples/feature-demos/theme-preset-documentation/site/public/robots.txt +0 -2
  330. package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +0 -3
  331. package/examples/feature-demos/theme-preset-documentation/site/theme.yaml +0 -1
  332. package/examples/feature-demos/theme-preset-portfolio/README.md +0 -16
  333. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +0 -74
  334. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +0 -1
  335. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/content.md +0 -31
  336. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/puppy-portrait.jpg +0 -0
  337. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/shepherd-portrait.jpg +0 -0
  338. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/white-puppy.jpg +0 -0
  339. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +0 -2
  340. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +0 -3
  341. package/examples/feature-demos/theme-preset-portfolio/site/theme.yaml +0 -1
  342. package/examples/feature-demos/theme-preset-project/.astro/collections/routeTheme.schema.json +0 -746
  343. package/examples/feature-demos/theme-preset-project/.astro/collections/site.schema.json +0 -59
  344. package/examples/feature-demos/theme-preset-project/.astro/collections/sitewide.schema.json +0 -138
  345. package/examples/feature-demos/theme-preset-project/.astro/collections/theme.schema.json +0 -755
  346. package/examples/feature-demos/theme-preset-project/.astro/content-assets.mjs +0 -4
  347. package/examples/feature-demos/theme-preset-project/.astro/content-modules.mjs +0 -1
  348. package/examples/feature-demos/theme-preset-project/.astro/content.d.ts +0 -183
  349. package/examples/feature-demos/theme-preset-project/.astro/data-store.json +0 -1
  350. package/examples/feature-demos/theme-preset-project/.astro/dev-local.json +0 -8
  351. package/examples/feature-demos/theme-preset-project/.astro/dev.json +0 -15
  352. package/examples/feature-demos/theme-preset-project/.astro/dev.log +0 -164
  353. package/examples/feature-demos/theme-preset-project/.astro/settings.json +0 -5
  354. package/examples/feature-demos/theme-preset-project/.astro/types.d.ts +0 -2
  355. package/examples/feature-demos/theme-preset-project/README.md +0 -16
  356. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/_metadata.json +0 -80
  357. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  358. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  359. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  360. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  361. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  362. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  363. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  364. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  365. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  366. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  367. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  368. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  369. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js +0 -1389
  370. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  371. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  372. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  373. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  374. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  375. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/package.json +0 -3
  376. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  377. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  378. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  379. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  380. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  381. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  382. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  383. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  384. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  385. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  386. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  387. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +0 -74
  388. package/examples/feature-demos/theme-preset-project/site/config.yaml +0 -1
  389. package/examples/feature-demos/theme-preset-project/site/pages/000-home/content.md +0 -31
  390. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/boxer-portrait.jpg +0 -0
  391. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grass-puppy.jpg +0 -0
  392. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grey-street-dog.jpg +0 -0
  393. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +0 -2
  394. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +0 -3
  395. package/examples/feature-demos/theme-preset-project/site/theme.yaml +0 -1
  396. package/examples/feature-demos/theme-preset-statement/README.md +0 -16
  397. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +0 -74
  398. package/examples/feature-demos/theme-preset-statement/site/config.yaml +0 -1
  399. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/content.md +0 -31
  400. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/black-pedigree.jpg +0 -0
  401. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-grass.jpg +0 -0
  402. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-wide.jpg +0 -0
  403. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +0 -2
  404. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +0 -3
  405. package/examples/feature-demos/theme-preset-statement/site/theme.yaml +0 -1
  406. package/fixtures/basic/site/.norna/generated-images.json +0 -1
  407. package/fixtures/basic/site/config.yaml +0 -1
  408. package/fixtures/basic/site/pages/000-home/content.md +0 -14
  409. package/fixtures/basic/site/pages/000-home/images/.gitkeep +0 -1
  410. package/fixtures/basic/site/public/robots.txt +0 -2
  411. package/fixtures/basic/site/sitewide-content.yaml +0 -3
  412. package/fixtures/basic/site/theme.yaml +0 -1
  413. package/fixtures/content-model-v2/.astro/collections/site.schema.json +0 -776
  414. package/fixtures/content-model-v2/.astro/collections/theme.schema.json +0 -668
  415. package/fixtures/content-model-v2/.astro/content-assets.mjs +0 -4
  416. package/fixtures/content-model-v2/.astro/content-modules.mjs +0 -1
  417. package/fixtures/content-model-v2/.astro/content.d.ts +0 -175
  418. package/fixtures/content-model-v2/.astro/data-store.json +0 -1
  419. package/fixtures/content-model-v2/.astro/dev-local.json +0 -8
  420. package/fixtures/content-model-v2/.astro/dev.json +0 -13
  421. package/fixtures/content-model-v2/.astro/dev.log +0 -231
  422. package/fixtures/content-model-v2/.astro/settings.json +0 -5
  423. package/fixtures/content-model-v2/.astro/types.d.ts +0 -2
  424. package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
  425. package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +0 -1
  426. package/fixtures/content-model-v2/dist/guide/index.html +0 -3
  427. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
  428. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
  429. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
  430. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
  431. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
  432. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
  433. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
  434. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
  435. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
  436. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
  437. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
  438. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
  439. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
  440. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
  441. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
  442. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
  443. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
  444. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
  445. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
  446. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
  447. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
  448. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
  449. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
  450. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
  451. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
  452. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
  453. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
  454. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
  455. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
  456. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
  457. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
  458. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
  459. package/fixtures/content-model-v2/dist/index.html +0 -8
  460. package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +0 -80
  461. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  462. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  463. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  464. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  465. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  466. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  467. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  468. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  469. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  470. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  471. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  472. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  473. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +0 -1389
  474. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  475. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  476. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  477. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  478. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  479. package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +0 -3
  480. package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  481. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  482. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  483. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  484. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  485. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  486. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  487. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  488. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  489. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  490. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  491. package/fixtures/content-model-v2/site/.norna/generated-images.json +0 -210
  492. package/fixtures/content-model-v2/site/config.yaml +0 -1
  493. package/fixtures/content-model-v2/site/pages/000-home/content.md +0 -79
  494. package/fixtures/content-model-v2/site/pages/000-home/images/adopt.svg +0 -9
  495. package/fixtures/content-model-v2/site/pages/000-home/images/detail.jpg +0 -0
  496. package/fixtures/content-model-v2/site/pages/000-home/images/duplicate.jpg +0 -0
  497. package/fixtures/content-model-v2/site/pages/000-home/images/foster.svg +0 -12
  498. package/fixtures/content-model-v2/site/pages/000-home/images/hero.jpg +0 -0
  499. package/fixtures/content-model-v2/site/pages/000-home/images/image.jpg +0 -0
  500. package/fixtures/content-model-v2/site/pages/000-home/images/slide-one.jpg +0 -0
  501. package/fixtures/content-model-v2/site/pages/000-home/images/slide-three.jpg +0 -0
  502. package/fixtures/content-model-v2/site/pages/000-home/images/slide-two.jpg +0 -0
  503. package/fixtures/content-model-v2/site/pages/010-guide/content.md +0 -18
  504. package/fixtures/content-model-v2/site/pages/010-guide/images/duplicate.jpg +0 -0
  505. package/fixtures/content-model-v2/site/theme.yaml +0 -4
  506. package/fixtures/nested-pages/.astro/collections/site.schema.json +0 -35
  507. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +0 -97
  508. package/fixtures/nested-pages/.astro/collections/theme.schema.json +0 -844
  509. package/fixtures/nested-pages/.astro/content-assets.mjs +0 -4
  510. package/fixtures/nested-pages/.astro/content-modules.mjs +0 -1
  511. package/fixtures/nested-pages/.astro/content.d.ts +0 -183
  512. package/fixtures/nested-pages/.astro/data-store.json +0 -1
  513. package/fixtures/nested-pages/.astro/dev-local.json +0 -8
  514. package/fixtures/nested-pages/.astro/dev.log +0 -1128
  515. package/fixtures/nested-pages/.astro/settings.json +0 -5
  516. package/fixtures/nested-pages/.astro/types.d.ts +0 -2
  517. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +0 -74
  518. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  519. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  520. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  521. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  522. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  523. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  524. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  525. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  526. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  527. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  528. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  529. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  530. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  531. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  532. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  533. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  534. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +0 -3
  535. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  536. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  537. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  538. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  539. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  540. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  541. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  542. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  543. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  544. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  545. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  546. package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
  547. package/fixtures/nested-pages/site/config.yaml +0 -3
  548. package/fixtures/nested-pages/site/pages/000-home/content.md +0 -15
  549. package/fixtures/nested-pages/site/pages/010-guides/content.md +0 -15
  550. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +0 -21
  551. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +0 -21
  552. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +0 -18
  553. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +0 -2
  554. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
  555. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +0 -9
  556. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +0 -3
  557. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +0 -3
  558. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +0 -3
  559. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +0 -3
  560. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +0 -3
  561. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +0 -3
  562. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +0 -3
  563. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +0 -3
  564. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +0 -3
  565. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +0 -3
  566. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +0 -3
  567. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +0 -3
  568. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +0 -3
  569. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +0 -3
  570. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +0 -3
  571. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +0 -3
  572. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +0 -3
  573. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +0 -3
  574. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -7
  575. package/fixtures/nested-pages/site/pages/020-reference/content.md +0 -10
  576. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +0 -11
  577. package/fixtures/nested-pages/site/theme.yaml +0 -1
  578. package/scripts/build-pages.mjs +0 -69
  579. package/scripts/lib/example-sites.mjs +0 -49
  580. package/scripts/lib/frontmatter-yaml.mjs +0 -113
  581. package/scripts/lib/git-status.mjs +0 -7
  582. package/scripts/release.mjs +0 -153
  583. package/scripts/test-banner-visibility.mjs +0 -80
  584. package/scripts/test-ci-lockfile.mjs +0 -65
  585. package/scripts/test-cli-discovery.mjs +0 -124
  586. package/scripts/test-client-javascript.mjs +0 -225
  587. package/scripts/test-content-check.mjs +0 -621
  588. package/scripts/test-content-model-v2.mjs +0 -1693
  589. package/scripts/test-documentation.mjs +0 -189
  590. package/scripts/test-editor-language-service.mjs +0 -305
  591. package/scripts/test-engine-commands.mjs +0 -204
  592. package/scripts/test-examples.mjs +0 -53
  593. package/scripts/test-heading-ids.mjs +0 -68
  594. package/scripts/test-navigation-model.mjs +0 -63
  595. package/scripts/test-navigation-preview.mjs +0 -108
  596. package/scripts/test-navigation.mjs +0 -157
  597. package/scripts/test-nested-pages.mjs +0 -125
  598. package/scripts/test-package-check.mjs +0 -500
  599. package/scripts/test-page-model.mjs +0 -108
  600. package/scripts/test-project-config.mjs +0 -139
  601. package/scripts/test-schemas.mjs +0 -169
  602. package/scripts/test-site-public.mjs +0 -85
  603. package/scripts/test-theme-presets.mjs +0 -188
  604. package/src/components/SiteNotesScript.astro +0 -43
  605. package/starters/project/.github/workflows/deploy.yml +0 -64
  606. package/starters/project/README.md +0 -84
  607. package/starters/project/package-lock.json +0 -4296
  608. package/starters/project/package.json +0 -37
  609. package/starters/project/site/config.yaml +0 -1
  610. package/starters/project/site/pages/000-home/content.md +0 -119
  611. package/starters/project/site/pages/010-guide/content.md +0 -80
  612. package/starters/project/site/public/robots.txt +0 -2
  613. package/starters/project/site/sitewide-content.yaml +0 -3
  614. package/starters/project/site/theme.yaml +0 -1
  615. package/tsconfig.json +0 -5
@@ -1,1389 +0,0 @@
1
- //#region ../../../node_modules/embla-carousel/esm/embla-carousel.esm.js
2
- function isNumber(subject) {
3
- return typeof subject === "number";
4
- }
5
- function isString(subject) {
6
- return typeof subject === "string";
7
- }
8
- function isBoolean(subject) {
9
- return typeof subject === "boolean";
10
- }
11
- function isObject(subject) {
12
- return Object.prototype.toString.call(subject) === "[object Object]";
13
- }
14
- function mathAbs(n) {
15
- return Math.abs(n);
16
- }
17
- function mathSign(n) {
18
- return Math.sign(n);
19
- }
20
- function deltaAbs(valueB, valueA) {
21
- return mathAbs(valueB - valueA);
22
- }
23
- function factorAbs(valueB, valueA) {
24
- if (valueB === 0 || valueA === 0) return 0;
25
- if (mathAbs(valueB) <= mathAbs(valueA)) return 0;
26
- return mathAbs(deltaAbs(mathAbs(valueB), mathAbs(valueA)) / valueB);
27
- }
28
- function roundToTwoDecimals(num) {
29
- return Math.round(num * 100) / 100;
30
- }
31
- function arrayKeys(array) {
32
- return objectKeys(array).map(Number);
33
- }
34
- function arrayLast(array) {
35
- return array[arrayLastIndex(array)];
36
- }
37
- function arrayLastIndex(array) {
38
- return Math.max(0, array.length - 1);
39
- }
40
- function arrayIsLastIndex(array, index) {
41
- return index === arrayLastIndex(array);
42
- }
43
- function arrayFromNumber(n, startAt = 0) {
44
- return Array.from(Array(n), (_, i) => startAt + i);
45
- }
46
- function objectKeys(object) {
47
- return Object.keys(object);
48
- }
49
- function objectsMergeDeep(objectA, objectB) {
50
- return [objectA, objectB].reduce((mergedObjects, currentObject) => {
51
- objectKeys(currentObject).forEach((key) => {
52
- const valueA = mergedObjects[key];
53
- const valueB = currentObject[key];
54
- mergedObjects[key] = isObject(valueA) && isObject(valueB) ? objectsMergeDeep(valueA, valueB) : valueB;
55
- });
56
- return mergedObjects;
57
- }, {});
58
- }
59
- function isMouseEvent(evt, ownerWindow) {
60
- return typeof ownerWindow.MouseEvent !== "undefined" && evt instanceof ownerWindow.MouseEvent;
61
- }
62
- function Alignment(align, viewSize) {
63
- const predefined = {
64
- start,
65
- center,
66
- end
67
- };
68
- function start() {
69
- return 0;
70
- }
71
- function center(n) {
72
- return end(n) / 2;
73
- }
74
- function end(n) {
75
- return viewSize - n;
76
- }
77
- function measure(n, index) {
78
- if (isString(align)) return predefined[align](n);
79
- return align(viewSize, n, index);
80
- }
81
- return { measure };
82
- }
83
- function EventStore() {
84
- let listeners = [];
85
- function add(node, type, handler, options = { passive: true }) {
86
- let removeListener;
87
- if ("addEventListener" in node) {
88
- node.addEventListener(type, handler, options);
89
- removeListener = () => node.removeEventListener(type, handler, options);
90
- } else {
91
- const legacyMediaQueryList = node;
92
- legacyMediaQueryList.addListener(handler);
93
- removeListener = () => legacyMediaQueryList.removeListener(handler);
94
- }
95
- listeners.push(removeListener);
96
- return self;
97
- }
98
- function clear() {
99
- listeners = listeners.filter((remove) => remove());
100
- }
101
- const self = {
102
- add,
103
- clear
104
- };
105
- return self;
106
- }
107
- function Animations(ownerDocument, ownerWindow, update, render) {
108
- const documentVisibleHandler = EventStore();
109
- const fixedTimeStep = 1e3 / 60;
110
- let lastTimeStamp = null;
111
- let accumulatedTime = 0;
112
- let animationId = 0;
113
- function init() {
114
- documentVisibleHandler.add(ownerDocument, "visibilitychange", () => {
115
- if (ownerDocument.hidden) reset();
116
- });
117
- }
118
- function destroy() {
119
- stop();
120
- documentVisibleHandler.clear();
121
- }
122
- function animate(timeStamp) {
123
- if (!animationId) return;
124
- if (!lastTimeStamp) {
125
- lastTimeStamp = timeStamp;
126
- update();
127
- update();
128
- }
129
- const timeElapsed = timeStamp - lastTimeStamp;
130
- lastTimeStamp = timeStamp;
131
- accumulatedTime += timeElapsed;
132
- while (accumulatedTime >= fixedTimeStep) {
133
- update();
134
- accumulatedTime -= fixedTimeStep;
135
- }
136
- render(accumulatedTime / fixedTimeStep);
137
- if (animationId) animationId = ownerWindow.requestAnimationFrame(animate);
138
- }
139
- function start() {
140
- if (animationId) return;
141
- animationId = ownerWindow.requestAnimationFrame(animate);
142
- }
143
- function stop() {
144
- ownerWindow.cancelAnimationFrame(animationId);
145
- lastTimeStamp = null;
146
- accumulatedTime = 0;
147
- animationId = 0;
148
- }
149
- function reset() {
150
- lastTimeStamp = null;
151
- accumulatedTime = 0;
152
- }
153
- return {
154
- init,
155
- destroy,
156
- start,
157
- stop,
158
- update,
159
- render
160
- };
161
- }
162
- function Axis(axis, contentDirection) {
163
- const isRightToLeft = contentDirection === "rtl";
164
- const isVertical = axis === "y";
165
- const scroll = isVertical ? "y" : "x";
166
- const cross = isVertical ? "x" : "y";
167
- const sign = !isVertical && isRightToLeft ? -1 : 1;
168
- const startEdge = getStartEdge();
169
- const endEdge = getEndEdge();
170
- function measureSize(nodeRect) {
171
- const { height, width } = nodeRect;
172
- return isVertical ? height : width;
173
- }
174
- function getStartEdge() {
175
- if (isVertical) return "top";
176
- return isRightToLeft ? "right" : "left";
177
- }
178
- function getEndEdge() {
179
- if (isVertical) return "bottom";
180
- return isRightToLeft ? "left" : "right";
181
- }
182
- function direction(n) {
183
- return n * sign;
184
- }
185
- return {
186
- scroll,
187
- cross,
188
- startEdge,
189
- endEdge,
190
- measureSize,
191
- direction
192
- };
193
- }
194
- function Limit(min = 0, max = 0) {
195
- const length = mathAbs(min - max);
196
- function reachedMin(n) {
197
- return n < min;
198
- }
199
- function reachedMax(n) {
200
- return n > max;
201
- }
202
- function reachedAny(n) {
203
- return reachedMin(n) || reachedMax(n);
204
- }
205
- function constrain(n) {
206
- if (!reachedAny(n)) return n;
207
- return reachedMin(n) ? min : max;
208
- }
209
- function removeOffset(n) {
210
- if (!length) return n;
211
- return n - length * Math.ceil((n - max) / length);
212
- }
213
- return {
214
- length,
215
- max,
216
- min,
217
- constrain,
218
- reachedAny,
219
- reachedMax,
220
- reachedMin,
221
- removeOffset
222
- };
223
- }
224
- function Counter(max, start, loop) {
225
- const { constrain } = Limit(0, max);
226
- const loopEnd = max + 1;
227
- let counter = withinLimit(start);
228
- function withinLimit(n) {
229
- return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);
230
- }
231
- function get() {
232
- return counter;
233
- }
234
- function set(n) {
235
- counter = withinLimit(n);
236
- return self;
237
- }
238
- function add(n) {
239
- return clone().set(get() + n);
240
- }
241
- function clone() {
242
- return Counter(max, get(), loop);
243
- }
244
- const self = {
245
- get,
246
- set,
247
- add,
248
- clone
249
- };
250
- return self;
251
- }
252
- function DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {
253
- const { cross: crossAxis, direction } = axis;
254
- const focusNodes = [
255
- "INPUT",
256
- "SELECT",
257
- "TEXTAREA"
258
- ];
259
- const nonPassiveEvent = { passive: false };
260
- const initEvents = EventStore();
261
- const dragEvents = EventStore();
262
- const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));
263
- const snapForceBoost = {
264
- mouse: 300,
265
- touch: 400
266
- };
267
- const freeForceBoost = {
268
- mouse: 500,
269
- touch: 600
270
- };
271
- const baseSpeed = dragFree ? 43 : 25;
272
- let isMoving = false;
273
- let startScroll = 0;
274
- let startCross = 0;
275
- let pointerIsDown = false;
276
- let preventScroll = false;
277
- let preventClick = false;
278
- let isMouse = false;
279
- function init(emblaApi) {
280
- if (!watchDrag) return;
281
- function downIfAllowed(evt) {
282
- if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);
283
- }
284
- const node = rootNode;
285
- initEvents.add(node, "dragstart", (evt) => evt.preventDefault(), nonPassiveEvent).add(node, "touchmove", () => void 0, nonPassiveEvent).add(node, "touchend", () => void 0).add(node, "touchstart", downIfAllowed).add(node, "mousedown", downIfAllowed).add(node, "touchcancel", up).add(node, "contextmenu", up).add(node, "click", click, true);
286
- }
287
- function destroy() {
288
- initEvents.clear();
289
- dragEvents.clear();
290
- }
291
- function addDragEvents() {
292
- const node = isMouse ? ownerDocument : rootNode;
293
- dragEvents.add(node, "touchmove", move, nonPassiveEvent).add(node, "touchend", up).add(node, "mousemove", move, nonPassiveEvent).add(node, "mouseup", up);
294
- }
295
- function isFocusNode(node) {
296
- const nodeName = node.nodeName || "";
297
- return focusNodes.includes(nodeName);
298
- }
299
- function forceBoost() {
300
- return (dragFree ? freeForceBoost : snapForceBoost)[isMouse ? "mouse" : "touch"];
301
- }
302
- function allowedForce(force, targetChanged) {
303
- const next = index.add(mathSign(force) * -1);
304
- const baseForce = scrollTarget.byDistance(force, !dragFree).distance;
305
- if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;
306
- if (skipSnaps && targetChanged) return baseForce * .5;
307
- return scrollTarget.byIndex(next.get(), 0).distance;
308
- }
309
- function down(evt) {
310
- const isMouseEvt = isMouseEvent(evt, ownerWindow);
311
- isMouse = isMouseEvt;
312
- preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;
313
- isMoving = deltaAbs(target.get(), location.get()) >= 2;
314
- if (isMouseEvt && evt.button !== 0) return;
315
- if (isFocusNode(evt.target)) return;
316
- pointerIsDown = true;
317
- dragTracker.pointerDown(evt);
318
- scrollBody.useFriction(0).useDuration(0);
319
- target.set(location);
320
- addDragEvents();
321
- startScroll = dragTracker.readPoint(evt);
322
- startCross = dragTracker.readPoint(evt, crossAxis);
323
- eventHandler.emit("pointerDown");
324
- }
325
- function move(evt) {
326
- if (!isMouseEvent(evt, ownerWindow) && evt.touches.length >= 2) return up(evt);
327
- const lastScroll = dragTracker.readPoint(evt);
328
- const lastCross = dragTracker.readPoint(evt, crossAxis);
329
- const diffScroll = deltaAbs(lastScroll, startScroll);
330
- const diffCross = deltaAbs(lastCross, startCross);
331
- if (!preventScroll && !isMouse) {
332
- if (!evt.cancelable) return up(evt);
333
- preventScroll = diffScroll > diffCross;
334
- if (!preventScroll) return up(evt);
335
- }
336
- const diff = dragTracker.pointerMove(evt);
337
- if (diffScroll > dragThreshold) preventClick = true;
338
- scrollBody.useFriction(.3).useDuration(.75);
339
- animation.start();
340
- target.add(direction(diff));
341
- evt.preventDefault();
342
- }
343
- function up(evt) {
344
- const targetChanged = scrollTarget.byDistance(0, false).index !== index.get();
345
- const rawForce = dragTracker.pointerUp(evt) * forceBoost();
346
- const force = allowedForce(direction(rawForce), targetChanged);
347
- const forceFactor = factorAbs(rawForce, force);
348
- const speed = baseSpeed - 10 * forceFactor;
349
- const friction = baseFriction + forceFactor / 50;
350
- preventScroll = false;
351
- pointerIsDown = false;
352
- dragEvents.clear();
353
- scrollBody.useDuration(speed).useFriction(friction);
354
- scrollTo.distance(force, !dragFree);
355
- isMouse = false;
356
- eventHandler.emit("pointerUp");
357
- }
358
- function click(evt) {
359
- if (preventClick) {
360
- evt.stopPropagation();
361
- evt.preventDefault();
362
- preventClick = false;
363
- }
364
- }
365
- function pointerDown() {
366
- return pointerIsDown;
367
- }
368
- return {
369
- init,
370
- destroy,
371
- pointerDown
372
- };
373
- }
374
- function DragTracker(axis, ownerWindow) {
375
- const logInterval = 170;
376
- let startEvent;
377
- let lastEvent;
378
- function readTime(evt) {
379
- return evt.timeStamp;
380
- }
381
- function readPoint(evt, evtAxis) {
382
- const coord = `client${(evtAxis || axis.scroll) === "x" ? "X" : "Y"}`;
383
- return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];
384
- }
385
- function pointerDown(evt) {
386
- startEvent = evt;
387
- lastEvent = evt;
388
- return readPoint(evt);
389
- }
390
- function pointerMove(evt) {
391
- const diff = readPoint(evt) - readPoint(lastEvent);
392
- const expired = readTime(evt) - readTime(startEvent) > logInterval;
393
- lastEvent = evt;
394
- if (expired) startEvent = evt;
395
- return diff;
396
- }
397
- function pointerUp(evt) {
398
- if (!startEvent || !lastEvent) return 0;
399
- const diffDrag = readPoint(lastEvent) - readPoint(startEvent);
400
- const diffTime = readTime(evt) - readTime(startEvent);
401
- const expired = readTime(evt) - readTime(lastEvent) > logInterval;
402
- const force = diffDrag / diffTime;
403
- return diffTime && !expired && mathAbs(force) > .1 ? force : 0;
404
- }
405
- return {
406
- pointerDown,
407
- pointerMove,
408
- pointerUp,
409
- readPoint
410
- };
411
- }
412
- function NodeRects() {
413
- function measure(node) {
414
- const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node;
415
- return {
416
- top: offsetTop,
417
- right: offsetLeft + offsetWidth,
418
- bottom: offsetTop + offsetHeight,
419
- left: offsetLeft,
420
- width: offsetWidth,
421
- height: offsetHeight
422
- };
423
- }
424
- return { measure };
425
- }
426
- function PercentOfView(viewSize) {
427
- function measure(n) {
428
- return viewSize * (n / 100);
429
- }
430
- return { measure };
431
- }
432
- function ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {
433
- const observeNodes = [container].concat(slides);
434
- let resizeObserver;
435
- let containerSize;
436
- let slideSizes = [];
437
- let destroyed = false;
438
- function readSize(node) {
439
- return axis.measureSize(nodeRects.measure(node));
440
- }
441
- function init(emblaApi) {
442
- if (!watchResize) return;
443
- containerSize = readSize(container);
444
- slideSizes = slides.map(readSize);
445
- function defaultCallback(entries) {
446
- for (const entry of entries) {
447
- if (destroyed) return;
448
- const isContainer = entry.target === container;
449
- const slideIndex = slides.indexOf(entry.target);
450
- const lastSize = isContainer ? containerSize : slideSizes[slideIndex];
451
- if (mathAbs(readSize(isContainer ? container : slides[slideIndex]) - lastSize) >= .5) {
452
- emblaApi.reInit();
453
- eventHandler.emit("resize");
454
- break;
455
- }
456
- }
457
- }
458
- resizeObserver = new ResizeObserver((entries) => {
459
- if (isBoolean(watchResize) || watchResize(emblaApi, entries)) defaultCallback(entries);
460
- });
461
- ownerWindow.requestAnimationFrame(() => {
462
- observeNodes.forEach((node) => resizeObserver.observe(node));
463
- });
464
- }
465
- function destroy() {
466
- destroyed = true;
467
- if (resizeObserver) resizeObserver.disconnect();
468
- }
469
- return {
470
- init,
471
- destroy
472
- };
473
- }
474
- function ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {
475
- let scrollVelocity = 0;
476
- let scrollDirection = 0;
477
- let scrollDuration = baseDuration;
478
- let scrollFriction = baseFriction;
479
- let rawLocation = location.get();
480
- let rawLocationPrevious = 0;
481
- function seek() {
482
- const displacement = target.get() - location.get();
483
- const isInstant = !scrollDuration;
484
- let scrollDistance = 0;
485
- if (isInstant) {
486
- scrollVelocity = 0;
487
- previousLocation.set(target);
488
- location.set(target);
489
- scrollDistance = displacement;
490
- } else {
491
- previousLocation.set(location);
492
- scrollVelocity += displacement / scrollDuration;
493
- scrollVelocity *= scrollFriction;
494
- rawLocation += scrollVelocity;
495
- location.add(scrollVelocity);
496
- scrollDistance = rawLocation - rawLocationPrevious;
497
- }
498
- scrollDirection = mathSign(scrollDistance);
499
- rawLocationPrevious = rawLocation;
500
- return self;
501
- }
502
- function settled() {
503
- return mathAbs(target.get() - offsetLocation.get()) < .001;
504
- }
505
- function duration() {
506
- return scrollDuration;
507
- }
508
- function direction() {
509
- return scrollDirection;
510
- }
511
- function velocity() {
512
- return scrollVelocity;
513
- }
514
- function useBaseDuration() {
515
- return useDuration(baseDuration);
516
- }
517
- function useBaseFriction() {
518
- return useFriction(baseFriction);
519
- }
520
- function useDuration(n) {
521
- scrollDuration = n;
522
- return self;
523
- }
524
- function useFriction(n) {
525
- scrollFriction = n;
526
- return self;
527
- }
528
- const self = {
529
- direction,
530
- duration,
531
- velocity,
532
- seek,
533
- settled,
534
- useBaseFriction,
535
- useBaseDuration,
536
- useFriction,
537
- useDuration
538
- };
539
- return self;
540
- }
541
- function ScrollBounds(limit, location, target, scrollBody, percentOfView) {
542
- const pullBackThreshold = percentOfView.measure(10);
543
- const edgeOffsetTolerance = percentOfView.measure(50);
544
- const frictionLimit = Limit(.1, .99);
545
- let disabled = false;
546
- function shouldConstrain() {
547
- if (disabled) return false;
548
- if (!limit.reachedAny(target.get())) return false;
549
- if (!limit.reachedAny(location.get())) return false;
550
- return true;
551
- }
552
- function constrain(pointerDown) {
553
- if (!shouldConstrain()) return;
554
- const diffToEdge = mathAbs(limit[limit.reachedMin(location.get()) ? "min" : "max"] - location.get());
555
- const diffToTarget = target.get() - location.get();
556
- const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);
557
- target.subtract(diffToTarget * friction);
558
- if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {
559
- target.set(limit.constrain(target.get()));
560
- scrollBody.useDuration(25).useBaseFriction();
561
- }
562
- }
563
- function toggleActive(active) {
564
- disabled = !active;
565
- }
566
- return {
567
- shouldConstrain,
568
- constrain,
569
- toggleActive
570
- };
571
- }
572
- function ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {
573
- const scrollBounds = Limit(-contentSize + viewSize, 0);
574
- const snapsBounded = measureBounded();
575
- const scrollContainLimit = findScrollContainLimit();
576
- const snapsContained = measureContained();
577
- function usePixelTolerance(bound, snap) {
578
- return deltaAbs(bound, snap) <= 1;
579
- }
580
- function findScrollContainLimit() {
581
- const startSnap = snapsBounded[0];
582
- const endSnap = arrayLast(snapsBounded);
583
- return Limit(snapsBounded.lastIndexOf(startSnap), snapsBounded.indexOf(endSnap) + 1);
584
- }
585
- function measureBounded() {
586
- return snapsAligned.map((snapAligned, index) => {
587
- const { min, max } = scrollBounds;
588
- const snap = scrollBounds.constrain(snapAligned);
589
- const isFirst = !index;
590
- const isLast = arrayIsLastIndex(snapsAligned, index);
591
- if (isFirst) return max;
592
- if (isLast) return min;
593
- if (usePixelTolerance(min, snap)) return min;
594
- if (usePixelTolerance(max, snap)) return max;
595
- return snap;
596
- }).map((scrollBound) => parseFloat(scrollBound.toFixed(3)));
597
- }
598
- function measureContained() {
599
- if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];
600
- if (containScroll === "keepSnaps") return snapsBounded;
601
- const { min, max } = scrollContainLimit;
602
- return snapsBounded.slice(min, max);
603
- }
604
- return {
605
- snapsContained,
606
- scrollContainLimit
607
- };
608
- }
609
- function ScrollLimit(contentSize, scrollSnaps, loop) {
610
- const max = scrollSnaps[0];
611
- return { limit: Limit(loop ? max - contentSize : arrayLast(scrollSnaps), max) };
612
- }
613
- function ScrollLooper(contentSize, limit, location, vectors) {
614
- const jointSafety = .1;
615
- const { reachedMin, reachedMax } = Limit(limit.min + jointSafety, limit.max + jointSafety);
616
- function shouldLoop(direction) {
617
- if (direction === 1) return reachedMax(location.get());
618
- if (direction === -1) return reachedMin(location.get());
619
- return false;
620
- }
621
- function loop(direction) {
622
- if (!shouldLoop(direction)) return;
623
- const loopDistance = contentSize * (direction * -1);
624
- vectors.forEach((v) => v.add(loopDistance));
625
- }
626
- return { loop };
627
- }
628
- function ScrollProgress(limit) {
629
- const { max, length } = limit;
630
- function get(n) {
631
- const currentLocation = n - max;
632
- return length ? currentLocation / -length : 0;
633
- }
634
- return { get };
635
- }
636
- function ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {
637
- const { startEdge, endEdge } = axis;
638
- const { groupSlides } = slidesToScroll;
639
- const alignments = measureSizes().map(alignment.measure);
640
- const snaps = measureUnaligned();
641
- const snapsAligned = measureAligned();
642
- function measureSizes() {
643
- return groupSlides(slideRects).map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);
644
- }
645
- function measureUnaligned() {
646
- return slideRects.map((rect) => containerRect[startEdge] - rect[startEdge]).map((snap) => -mathAbs(snap));
647
- }
648
- function measureAligned() {
649
- return groupSlides(snaps).map((g) => g[0]).map((snap, index) => snap + alignments[index]);
650
- }
651
- return {
652
- snaps,
653
- snapsAligned
654
- };
655
- }
656
- function SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {
657
- const { groupSlides } = slidesToScroll;
658
- const { min, max } = scrollContainLimit;
659
- const slideRegistry = createSlideRegistry();
660
- function createSlideRegistry() {
661
- const groupedSlideIndexes = groupSlides(slideIndexes);
662
- const doNotContain = !containSnaps || containScroll === "keepSnaps";
663
- if (scrollSnaps.length === 1) return [slideIndexes];
664
- if (doNotContain) return groupedSlideIndexes;
665
- return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {
666
- const isFirst = !index;
667
- const isLast = arrayIsLastIndex(groups, index);
668
- if (isFirst) return arrayFromNumber(arrayLast(groups[0]) + 1);
669
- if (isLast) return arrayFromNumber(arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1, arrayLast(groups)[0]);
670
- return group;
671
- });
672
- }
673
- return { slideRegistry };
674
- }
675
- function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {
676
- const { reachedAny, removeOffset, constrain } = limit;
677
- function minDistance(distances) {
678
- return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];
679
- }
680
- function findTargetSnap(target) {
681
- const distance = loop ? removeOffset(target) : constrain(target);
682
- const { index } = scrollSnaps.map((snap, index) => ({
683
- diff: shortcut(snap - distance, 0),
684
- index
685
- })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))[0];
686
- return {
687
- index,
688
- distance
689
- };
690
- }
691
- function shortcut(target, direction) {
692
- const targets = [
693
- target,
694
- target + contentSize,
695
- target - contentSize
696
- ];
697
- if (!loop) return target;
698
- if (!direction) return minDistance(targets);
699
- const matchingTargets = targets.filter((t) => mathSign(t) === direction);
700
- if (matchingTargets.length) return minDistance(matchingTargets);
701
- return arrayLast(targets) - contentSize;
702
- }
703
- function byIndex(index, direction) {
704
- return {
705
- index,
706
- distance: shortcut(scrollSnaps[index] - targetVector.get(), direction)
707
- };
708
- }
709
- function byDistance(distance, snap) {
710
- const target = targetVector.get() + distance;
711
- const { index, distance: targetSnapDistance } = findTargetSnap(target);
712
- const reachedBound = !loop && reachedAny(target);
713
- if (!snap || reachedBound) return {
714
- index,
715
- distance
716
- };
717
- return {
718
- index,
719
- distance: distance + shortcut(scrollSnaps[index] - targetSnapDistance, 0)
720
- };
721
- }
722
- return {
723
- byDistance,
724
- byIndex,
725
- shortcut
726
- };
727
- }
728
- function ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {
729
- function scrollTo(target) {
730
- const distanceDiff = target.distance;
731
- const indexDiff = target.index !== indexCurrent.get();
732
- targetVector.add(distanceDiff);
733
- if (distanceDiff) if (scrollBody.duration()) animation.start();
734
- else {
735
- animation.update();
736
- animation.render(1);
737
- animation.update();
738
- }
739
- if (indexDiff) {
740
- indexPrevious.set(indexCurrent.get());
741
- indexCurrent.set(target.index);
742
- eventHandler.emit("select");
743
- }
744
- }
745
- function distance(n, snap) {
746
- scrollTo(scrollTarget.byDistance(n, snap));
747
- }
748
- function index(n, direction) {
749
- const targetIndex = indexCurrent.clone().set(n);
750
- scrollTo(scrollTarget.byIndex(targetIndex.get(), direction));
751
- }
752
- return {
753
- distance,
754
- index
755
- };
756
- }
757
- function SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {
758
- const focusListenerOptions = {
759
- passive: true,
760
- capture: true
761
- };
762
- let lastTabPressTime = 0;
763
- function init(emblaApi) {
764
- if (!watchFocus) return;
765
- function defaultCallback(index) {
766
- if ((/* @__PURE__ */ new Date()).getTime() - lastTabPressTime > 10) return;
767
- eventHandler.emit("slideFocusStart");
768
- root.scrollLeft = 0;
769
- const group = slideRegistry.findIndex((group) => group.includes(index));
770
- if (!isNumber(group)) return;
771
- scrollBody.useDuration(0);
772
- scrollTo.index(group, 0);
773
- eventHandler.emit("slideFocus");
774
- }
775
- eventStore.add(document, "keydown", registerTabPress, false);
776
- slides.forEach((slide, slideIndex) => {
777
- eventStore.add(slide, "focus", (evt) => {
778
- if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) defaultCallback(slideIndex);
779
- }, focusListenerOptions);
780
- });
781
- }
782
- function registerTabPress(event) {
783
- if (event.code === "Tab") lastTabPressTime = (/* @__PURE__ */ new Date()).getTime();
784
- }
785
- return { init };
786
- }
787
- function Vector1D(initialValue) {
788
- let value = initialValue;
789
- function get() {
790
- return value;
791
- }
792
- function set(n) {
793
- value = normalizeInput(n);
794
- }
795
- function add(n) {
796
- value += normalizeInput(n);
797
- }
798
- function subtract(n) {
799
- value -= normalizeInput(n);
800
- }
801
- function normalizeInput(n) {
802
- return isNumber(n) ? n : n.get();
803
- }
804
- return {
805
- get,
806
- set,
807
- add,
808
- subtract
809
- };
810
- }
811
- function Translate(axis, container) {
812
- const translate = axis.scroll === "x" ? x : y;
813
- const containerStyle = container.style;
814
- let previousTarget = null;
815
- let disabled = false;
816
- function x(n) {
817
- return `translate3d(${n}px,0px,0px)`;
818
- }
819
- function y(n) {
820
- return `translate3d(0px,${n}px,0px)`;
821
- }
822
- function to(target) {
823
- if (disabled) return;
824
- const newTarget = roundToTwoDecimals(axis.direction(target));
825
- if (newTarget === previousTarget) return;
826
- containerStyle.transform = translate(newTarget);
827
- previousTarget = newTarget;
828
- }
829
- function toggleActive(active) {
830
- disabled = !active;
831
- }
832
- function clear() {
833
- if (disabled) return;
834
- containerStyle.transform = "";
835
- if (!container.getAttribute("style")) container.removeAttribute("style");
836
- }
837
- return {
838
- clear,
839
- to,
840
- toggleActive
841
- };
842
- }
843
- function SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {
844
- const roundingSafety = .5;
845
- const ascItems = arrayKeys(slideSizesWithGaps);
846
- const descItems = arrayKeys(slideSizesWithGaps).reverse();
847
- const loopPoints = startPoints().concat(endPoints());
848
- function removeSlideSizes(indexes, from) {
849
- return indexes.reduce((a, i) => {
850
- return a - slideSizesWithGaps[i];
851
- }, from);
852
- }
853
- function slidesInGap(indexes, gap) {
854
- return indexes.reduce((a, i) => {
855
- return removeSlideSizes(a, gap) > 0 ? a.concat([i]) : a;
856
- }, []);
857
- }
858
- function findSlideBounds(offset) {
859
- return snaps.map((snap, index) => ({
860
- start: snap - slideSizes[index] + roundingSafety + offset,
861
- end: snap + viewSize - roundingSafety + offset
862
- }));
863
- }
864
- function findLoopPoints(indexes, offset, isEndEdge) {
865
- const slideBounds = findSlideBounds(offset);
866
- return indexes.map((index) => {
867
- const initial = isEndEdge ? 0 : -contentSize;
868
- const altered = isEndEdge ? contentSize : 0;
869
- const boundEdge = isEndEdge ? "end" : "start";
870
- const loopPoint = slideBounds[index][boundEdge];
871
- return {
872
- index,
873
- loopPoint,
874
- slideLocation: Vector1D(-1),
875
- translate: Translate(axis, slides[index]),
876
- target: () => location.get() > loopPoint ? initial : altered
877
- };
878
- });
879
- }
880
- function startPoints() {
881
- const gap = scrollSnaps[0];
882
- return findLoopPoints(slidesInGap(descItems, gap), contentSize, false);
883
- }
884
- function endPoints() {
885
- return findLoopPoints(slidesInGap(ascItems, viewSize - scrollSnaps[0] - 1), -contentSize, true);
886
- }
887
- function canLoop() {
888
- return loopPoints.every(({ index }) => {
889
- return removeSlideSizes(ascItems.filter((i) => i !== index), viewSize) <= .1;
890
- });
891
- }
892
- function loop() {
893
- loopPoints.forEach((loopPoint) => {
894
- const { target, translate, slideLocation } = loopPoint;
895
- const shiftLocation = target();
896
- if (shiftLocation === slideLocation.get()) return;
897
- translate.to(shiftLocation);
898
- slideLocation.set(shiftLocation);
899
- });
900
- }
901
- function clear() {
902
- loopPoints.forEach((loopPoint) => loopPoint.translate.clear());
903
- }
904
- return {
905
- canLoop,
906
- clear,
907
- loop,
908
- loopPoints
909
- };
910
- }
911
- function SlidesHandler(container, eventHandler, watchSlides) {
912
- let mutationObserver;
913
- let destroyed = false;
914
- function init(emblaApi) {
915
- if (!watchSlides) return;
916
- function defaultCallback(mutations) {
917
- for (const mutation of mutations) if (mutation.type === "childList") {
918
- emblaApi.reInit();
919
- eventHandler.emit("slidesChanged");
920
- break;
921
- }
922
- }
923
- mutationObserver = new MutationObserver((mutations) => {
924
- if (destroyed) return;
925
- if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) defaultCallback(mutations);
926
- });
927
- mutationObserver.observe(container, { childList: true });
928
- }
929
- function destroy() {
930
- if (mutationObserver) mutationObserver.disconnect();
931
- destroyed = true;
932
- }
933
- return {
934
- init,
935
- destroy
936
- };
937
- }
938
- function SlidesInView(container, slides, eventHandler, threshold) {
939
- const intersectionEntryMap = {};
940
- let inViewCache = null;
941
- let notInViewCache = null;
942
- let intersectionObserver;
943
- let destroyed = false;
944
- function init() {
945
- intersectionObserver = new IntersectionObserver((entries) => {
946
- if (destroyed) return;
947
- entries.forEach((entry) => {
948
- const index = slides.indexOf(entry.target);
949
- intersectionEntryMap[index] = entry;
950
- });
951
- inViewCache = null;
952
- notInViewCache = null;
953
- eventHandler.emit("slidesInView");
954
- }, {
955
- root: container.parentElement,
956
- threshold
957
- });
958
- slides.forEach((slide) => intersectionObserver.observe(slide));
959
- }
960
- function destroy() {
961
- if (intersectionObserver) intersectionObserver.disconnect();
962
- destroyed = true;
963
- }
964
- function createInViewList(inView) {
965
- return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {
966
- const index = parseInt(slideIndex);
967
- const { isIntersecting } = intersectionEntryMap[index];
968
- if (inView && isIntersecting || !inView && !isIntersecting) list.push(index);
969
- return list;
970
- }, []);
971
- }
972
- function get(inView = true) {
973
- if (inView && inViewCache) return inViewCache;
974
- if (!inView && notInViewCache) return notInViewCache;
975
- const slideIndexes = createInViewList(inView);
976
- if (inView) inViewCache = slideIndexes;
977
- if (!inView) notInViewCache = slideIndexes;
978
- return slideIndexes;
979
- }
980
- return {
981
- init,
982
- destroy,
983
- get
984
- };
985
- }
986
- function SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {
987
- const { measureSize, startEdge, endEdge } = axis;
988
- const withEdgeGap = slideRects[0] && readEdgeGap;
989
- const startGap = measureStartGap();
990
- const endGap = measureEndGap();
991
- const slideSizes = slideRects.map(measureSize);
992
- const slideSizesWithGaps = measureWithGaps();
993
- function measureStartGap() {
994
- if (!withEdgeGap) return 0;
995
- const slideRect = slideRects[0];
996
- return mathAbs(containerRect[startEdge] - slideRect[startEdge]);
997
- }
998
- function measureEndGap() {
999
- if (!withEdgeGap) return 0;
1000
- const style = ownerWindow.getComputedStyle(arrayLast(slides));
1001
- return parseFloat(style.getPropertyValue(`margin-${endEdge}`));
1002
- }
1003
- function measureWithGaps() {
1004
- return slideRects.map((rect, index, rects) => {
1005
- const isFirst = !index;
1006
- const isLast = arrayIsLastIndex(rects, index);
1007
- if (isFirst) return slideSizes[index] + startGap;
1008
- if (isLast) return slideSizes[index] + endGap;
1009
- return rects[index + 1][startEdge] - rect[startEdge];
1010
- }).map(mathAbs);
1011
- }
1012
- return {
1013
- slideSizes,
1014
- slideSizesWithGaps,
1015
- startGap,
1016
- endGap
1017
- };
1018
- }
1019
- function SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {
1020
- const { startEdge, endEdge, direction } = axis;
1021
- const groupByNumber = isNumber(slidesToScroll);
1022
- function byNumber(array, groupSize) {
1023
- return arrayKeys(array).filter((i) => i % groupSize === 0).map((i) => array.slice(i, i + groupSize));
1024
- }
1025
- function bySize(array) {
1026
- if (!array.length) return [];
1027
- return arrayKeys(array).reduce((groups, rectB, index) => {
1028
- const rectA = arrayLast(groups) || 0;
1029
- const isFirst = rectA === 0;
1030
- const isLast = rectB === arrayLastIndex(array);
1031
- const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];
1032
- const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];
1033
- const gapA = !loop && isFirst ? direction(startGap) : 0;
1034
- const chunkSize = mathAbs(edgeB - (!loop && isLast ? direction(endGap) : 0) - (edgeA + gapA));
1035
- if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);
1036
- if (isLast) groups.push(array.length);
1037
- return groups;
1038
- }, []).map((currentSize, index, groups) => {
1039
- const previousSize = Math.max(groups[index - 1] || 0);
1040
- return array.slice(previousSize, currentSize);
1041
- });
1042
- }
1043
- function groupSlides(array) {
1044
- return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);
1045
- }
1046
- return { groupSlides };
1047
- }
1048
- function Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {
1049
- const { align, axis: scrollAxis, direction, startIndex, loop, duration, dragFree, dragThreshold, inViewThreshold, slidesToScroll: groupSlides, skipSnaps, containScroll, watchResize, watchSlides, watchDrag, watchFocus } = options;
1050
- const pixelTolerance = 2;
1051
- const nodeRects = NodeRects();
1052
- const containerRect = nodeRects.measure(container);
1053
- const slideRects = slides.map(nodeRects.measure);
1054
- const axis = Axis(scrollAxis, direction);
1055
- const viewSize = axis.measureSize(containerRect);
1056
- const percentOfView = PercentOfView(viewSize);
1057
- const alignment = Alignment(align, viewSize);
1058
- const containSnaps = !loop && !!containScroll;
1059
- const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(axis, containerRect, slideRects, slides, loop || !!containScroll, ownerWindow);
1060
- const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);
1061
- const { snaps, snapsAligned } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);
1062
- const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);
1063
- const { snapsContained, scrollContainLimit } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);
1064
- const scrollSnaps = containSnaps ? snapsContained : snapsAligned;
1065
- const { limit } = ScrollLimit(contentSize, scrollSnaps, loop);
1066
- const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);
1067
- const indexPrevious = index.clone();
1068
- const slideIndexes = arrayKeys(slides);
1069
- const update = ({ dragHandler, scrollBody, scrollBounds, options: { loop } }) => {
1070
- if (!loop) scrollBounds.constrain(dragHandler.pointerDown());
1071
- scrollBody.seek();
1072
- };
1073
- const render = ({ scrollBody, translate, location, offsetLocation, previousLocation, scrollLooper, slideLooper, dragHandler, animation, eventHandler, scrollBounds, options: { loop } }, alpha) => {
1074
- const shouldSettle = scrollBody.settled();
1075
- const withinBounds = !scrollBounds.shouldConstrain();
1076
- const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;
1077
- const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();
1078
- if (hasSettledAndIdle) animation.stop();
1079
- const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);
1080
- offsetLocation.set(interpolatedLocation);
1081
- if (loop) {
1082
- scrollLooper.loop(scrollBody.direction());
1083
- slideLooper.loop();
1084
- }
1085
- translate.to(offsetLocation.get());
1086
- if (hasSettledAndIdle) eventHandler.emit("settle");
1087
- if (!hasSettled) eventHandler.emit("scroll");
1088
- };
1089
- const animation = Animations(ownerDocument, ownerWindow, () => update(engine), (alpha) => render(engine, alpha));
1090
- const friction = .68;
1091
- const startLocation = scrollSnaps[index.get()];
1092
- const location = Vector1D(startLocation);
1093
- const previousLocation = Vector1D(startLocation);
1094
- const offsetLocation = Vector1D(startLocation);
1095
- const target = Vector1D(startLocation);
1096
- const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);
1097
- const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);
1098
- const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);
1099
- const scrollProgress = ScrollProgress(limit);
1100
- const eventStore = EventStore();
1101
- const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);
1102
- const { slideRegistry } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);
1103
- const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);
1104
- const engine = {
1105
- ownerDocument,
1106
- ownerWindow,
1107
- eventHandler,
1108
- containerRect,
1109
- slideRects,
1110
- animation,
1111
- axis,
1112
- dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),
1113
- eventStore,
1114
- percentOfView,
1115
- index,
1116
- indexPrevious,
1117
- limit,
1118
- location,
1119
- offsetLocation,
1120
- previousLocation,
1121
- options,
1122
- resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),
1123
- scrollBody,
1124
- scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),
1125
- scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [
1126
- location,
1127
- offsetLocation,
1128
- previousLocation,
1129
- target
1130
- ]),
1131
- scrollProgress,
1132
- scrollSnapList: scrollSnaps.map(scrollProgress.get),
1133
- scrollSnaps,
1134
- scrollTarget,
1135
- scrollTo,
1136
- slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),
1137
- slideFocus,
1138
- slidesHandler: SlidesHandler(container, eventHandler, watchSlides),
1139
- slidesInView,
1140
- slideIndexes,
1141
- slideRegistry,
1142
- slidesToScroll,
1143
- target,
1144
- translate: Translate(axis, container)
1145
- };
1146
- return engine;
1147
- }
1148
- function EventHandler() {
1149
- let listeners = {};
1150
- let api;
1151
- function init(emblaApi) {
1152
- api = emblaApi;
1153
- }
1154
- function getListeners(evt) {
1155
- return listeners[evt] || [];
1156
- }
1157
- function emit(evt) {
1158
- getListeners(evt).forEach((e) => e(api, evt));
1159
- return self;
1160
- }
1161
- function on(evt, cb) {
1162
- listeners[evt] = getListeners(evt).concat([cb]);
1163
- return self;
1164
- }
1165
- function off(evt, cb) {
1166
- listeners[evt] = getListeners(evt).filter((e) => e !== cb);
1167
- return self;
1168
- }
1169
- function clear() {
1170
- listeners = {};
1171
- }
1172
- const self = {
1173
- init,
1174
- emit,
1175
- off,
1176
- on,
1177
- clear
1178
- };
1179
- return self;
1180
- }
1181
- var defaultOptions = {
1182
- align: "center",
1183
- axis: "x",
1184
- container: null,
1185
- slides: null,
1186
- containScroll: "trimSnaps",
1187
- direction: "ltr",
1188
- slidesToScroll: 1,
1189
- inViewThreshold: 0,
1190
- breakpoints: {},
1191
- dragFree: false,
1192
- dragThreshold: 10,
1193
- loop: false,
1194
- skipSnaps: false,
1195
- duration: 25,
1196
- startIndex: 0,
1197
- active: true,
1198
- watchDrag: true,
1199
- watchResize: true,
1200
- watchSlides: true,
1201
- watchFocus: true
1202
- };
1203
- function OptionsHandler(ownerWindow) {
1204
- function mergeOptions(optionsA, optionsB) {
1205
- return objectsMergeDeep(optionsA, optionsB || {});
1206
- }
1207
- function optionsAtMedia(options) {
1208
- const optionsAtMedia = options.breakpoints || {};
1209
- return mergeOptions(options, objectKeys(optionsAtMedia).filter((media) => ownerWindow.matchMedia(media).matches).map((media) => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {}));
1210
- }
1211
- function optionsMediaQueries(optionsList) {
1212
- return optionsList.map((options) => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);
1213
- }
1214
- return {
1215
- mergeOptions,
1216
- optionsAtMedia,
1217
- optionsMediaQueries
1218
- };
1219
- }
1220
- function PluginsHandler(optionsHandler) {
1221
- let activePlugins = [];
1222
- function init(emblaApi, plugins) {
1223
- activePlugins = plugins.filter(({ options }) => optionsHandler.optionsAtMedia(options).active !== false);
1224
- activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler));
1225
- return plugins.reduce((map, plugin) => Object.assign(map, { [plugin.name]: plugin }), {});
1226
- }
1227
- function destroy() {
1228
- activePlugins = activePlugins.filter((plugin) => plugin.destroy());
1229
- }
1230
- return {
1231
- init,
1232
- destroy
1233
- };
1234
- }
1235
- function EmblaCarousel(root, userOptions, userPlugins) {
1236
- const ownerDocument = root.ownerDocument;
1237
- const ownerWindow = ownerDocument.defaultView;
1238
- const optionsHandler = OptionsHandler(ownerWindow);
1239
- const pluginsHandler = PluginsHandler(optionsHandler);
1240
- const mediaHandlers = EventStore();
1241
- const eventHandler = EventHandler();
1242
- const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler;
1243
- const { on, off, emit } = eventHandler;
1244
- const reInit = reActivate;
1245
- let destroyed = false;
1246
- let engine;
1247
- let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);
1248
- let options = mergeOptions(optionsBase);
1249
- let pluginList = [];
1250
- let pluginApis;
1251
- let container;
1252
- let slides;
1253
- function storeElements() {
1254
- const { container: userContainer, slides: userSlides } = options;
1255
- container = (isString(userContainer) ? root.querySelector(userContainer) : userContainer) || root.children[0];
1256
- const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;
1257
- slides = [].slice.call(customSlides || container.children);
1258
- }
1259
- function createEngine(options) {
1260
- const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);
1261
- if (options.loop && !engine.slideLooper.canLoop()) return createEngine(Object.assign({}, options, { loop: false }));
1262
- return engine;
1263
- }
1264
- function activate(withOptions, withPlugins) {
1265
- if (destroyed) return;
1266
- optionsBase = mergeOptions(optionsBase, withOptions);
1267
- options = optionsAtMedia(optionsBase);
1268
- pluginList = withPlugins || pluginList;
1269
- storeElements();
1270
- engine = createEngine(options);
1271
- optionsMediaQueries([optionsBase, ...pluginList.map(({ options }) => options)]).forEach((query) => mediaHandlers.add(query, "change", reActivate));
1272
- if (!options.active) return;
1273
- engine.translate.to(engine.location.get());
1274
- engine.animation.init();
1275
- engine.slidesInView.init();
1276
- engine.slideFocus.init(self);
1277
- engine.eventHandler.init(self);
1278
- engine.resizeHandler.init(self);
1279
- engine.slidesHandler.init(self);
1280
- if (engine.options.loop) engine.slideLooper.loop();
1281
- if (container.offsetParent && slides.length) engine.dragHandler.init(self);
1282
- pluginApis = pluginsHandler.init(self, pluginList);
1283
- }
1284
- function reActivate(withOptions, withPlugins) {
1285
- const startIndex = selectedScrollSnap();
1286
- deActivate();
1287
- activate(mergeOptions({ startIndex }, withOptions), withPlugins);
1288
- eventHandler.emit("reInit");
1289
- }
1290
- function deActivate() {
1291
- engine.dragHandler.destroy();
1292
- engine.eventStore.clear();
1293
- engine.translate.clear();
1294
- engine.slideLooper.clear();
1295
- engine.resizeHandler.destroy();
1296
- engine.slidesHandler.destroy();
1297
- engine.slidesInView.destroy();
1298
- engine.animation.destroy();
1299
- pluginsHandler.destroy();
1300
- mediaHandlers.clear();
1301
- }
1302
- function destroy() {
1303
- if (destroyed) return;
1304
- destroyed = true;
1305
- mediaHandlers.clear();
1306
- deActivate();
1307
- eventHandler.emit("destroy");
1308
- eventHandler.clear();
1309
- }
1310
- function scrollTo(index, jump, direction) {
1311
- if (!options.active || destroyed) return;
1312
- engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);
1313
- engine.scrollTo.index(index, direction || 0);
1314
- }
1315
- function scrollNext(jump) {
1316
- scrollTo(engine.index.add(1).get(), jump, -1);
1317
- }
1318
- function scrollPrev(jump) {
1319
- scrollTo(engine.index.add(-1).get(), jump, 1);
1320
- }
1321
- function canScrollNext() {
1322
- return engine.index.add(1).get() !== selectedScrollSnap();
1323
- }
1324
- function canScrollPrev() {
1325
- return engine.index.add(-1).get() !== selectedScrollSnap();
1326
- }
1327
- function scrollSnapList() {
1328
- return engine.scrollSnapList;
1329
- }
1330
- function scrollProgress() {
1331
- return engine.scrollProgress.get(engine.offsetLocation.get());
1332
- }
1333
- function selectedScrollSnap() {
1334
- return engine.index.get();
1335
- }
1336
- function previousScrollSnap() {
1337
- return engine.indexPrevious.get();
1338
- }
1339
- function slidesInView() {
1340
- return engine.slidesInView.get();
1341
- }
1342
- function slidesNotInView() {
1343
- return engine.slidesInView.get(false);
1344
- }
1345
- function plugins() {
1346
- return pluginApis;
1347
- }
1348
- function internalEngine() {
1349
- return engine;
1350
- }
1351
- function rootNode() {
1352
- return root;
1353
- }
1354
- function containerNode() {
1355
- return container;
1356
- }
1357
- function slideNodes() {
1358
- return slides;
1359
- }
1360
- const self = {
1361
- canScrollNext,
1362
- canScrollPrev,
1363
- containerNode,
1364
- internalEngine,
1365
- destroy,
1366
- off,
1367
- on,
1368
- emit,
1369
- plugins,
1370
- previousScrollSnap,
1371
- reInit,
1372
- rootNode,
1373
- scrollNext,
1374
- scrollPrev,
1375
- scrollProgress,
1376
- scrollSnapList,
1377
- scrollTo,
1378
- selectedScrollSnap,
1379
- slideNodes,
1380
- slidesInView,
1381
- slidesNotInView
1382
- };
1383
- activate(userOptions, userPlugins);
1384
- setTimeout(() => eventHandler.emit("init"), 0);
1385
- return self;
1386
- }
1387
- EmblaCarousel.globalOptions = void 0;
1388
- //#endregion
1389
- export { EmblaCarousel as default };