@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,1534 +0,0 @@
1
- import { t as require_lib } from "./astro_n_aria-query.js";
2
- import { t as require_lib$1 } from "./astro_n_axobject-query.js";
3
- import { escape } from "./astro_n_html-escaper.js";
4
- import { t as settings } from "./astro_runtime_client_dev-toolbar_entrypoint__js.js";
5
- import { t as closeOnOutsideClick } from "./window-vo3A6TMn.js";
6
- import { i as positionHighlight, n as createHighlight, r as getElementsPositionInDocument, t as attachTooltipToHighlight } from "./highlight-BLtvqtzO.js";
7
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/annotations.js
8
- var ELEMENT_ANNOTATIONS = /* @__PURE__ */ new WeakMap();
9
- function getAnnotationsForElement(element) {
10
- return ELEMENT_ANNOTATIONS.get(element);
11
- }
12
- var ANNOTATION_MAP = {
13
- "data-astro-source-file": "file",
14
- "data-astro-source-loc": "location"
15
- };
16
- function extractAnnotations(element) {
17
- const annotations = {};
18
- for (const [attr, key] of Object.entries(ANNOTATION_MAP)) annotations[key] = element.getAttribute(attr);
19
- for (const attr of Object.keys(ANNOTATION_MAP)) element.removeAttribute(attr);
20
- return annotations;
21
- }
22
- function processAnnotations() {
23
- for (const element of document.querySelectorAll(`[data-astro-source-file]`)) ELEMENT_ANNOTATIONS.set(element, extractAnnotations(element));
24
- }
25
- //#endregion
26
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/rules/a11y.js
27
- var import_lib = require_lib();
28
- var import_lib$1 = require_lib$1();
29
- /**
30
- * https://github.com/sveltejs/svelte/blob/61e5e53eee82e895c1a5b4fd36efb87eafa1fc2d/LICENSE.md
31
- * @license MIT
32
- *
33
- * Copyright (c) 2016-23 [these people](https://github.com/sveltejs/svelte/graphs/contributors)
34
- *
35
- * Permission is hereby granted, free of charge, to any person obtaining a copy
36
- * of this software and associated documentation files (the "Software"), to deal
37
- * in the Software without restriction, including without limitation the rights
38
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
- * copies of the Software, and to permit persons to whom the Software is
40
- * furnished to do so, subject to the following conditions:
41
- *
42
- * The above copyright notice and this permission notice shall be included in all
43
- * copies or substantial portions of the Software.
44
- *
45
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
- * SOFTWARE.
52
- */
53
- var WHITESPACE_REGEX = /\s+/;
54
- function isHiddenByClosedDetails(element) {
55
- for (let parent = element.parentElement; parent; parent = parent.parentElement) {
56
- if (parent.localName !== "details" || parent.open) continue;
57
- if (!Array.from(parent.children).find((child) => child.localName === "summary")?.contains(element)) return true;
58
- }
59
- return false;
60
- }
61
- var a11y_required_attributes = {
62
- a: ["href"],
63
- area: [
64
- "alt",
65
- "aria-label",
66
- "aria-labelledby"
67
- ],
68
- html: ["lang"],
69
- iframe: ["title"],
70
- img: ["alt"],
71
- object: [
72
- "title",
73
- "aria-label",
74
- "aria-labelledby"
75
- ]
76
- };
77
- var MAYBE_INTERACTIVE = /* @__PURE__ */ new Map([
78
- ["a", "href"],
79
- ["input", "type"],
80
- ["audio", "controls"],
81
- ["img", "usemap"],
82
- ["object", "usemap"],
83
- ["video", "controls"]
84
- ]);
85
- var interactiveElements = [
86
- "button",
87
- "details",
88
- "embed",
89
- "iframe",
90
- "label",
91
- "select",
92
- "textarea",
93
- ...MAYBE_INTERACTIVE.keys()
94
- ];
95
- var labelableElements = [
96
- "button",
97
- "input",
98
- "meter",
99
- "output",
100
- "progress",
101
- "select",
102
- "textarea"
103
- ];
104
- var aria_non_interactive_roles = [
105
- "alert",
106
- "alertdialog",
107
- "application",
108
- "article",
109
- "banner",
110
- "cell",
111
- "columnheader",
112
- "complementary",
113
- "contentinfo",
114
- "definition",
115
- "dialog",
116
- "directory",
117
- "document",
118
- "feed",
119
- "figure",
120
- "form",
121
- "group",
122
- "heading",
123
- "image",
124
- "img",
125
- "list",
126
- "listitem",
127
- "log",
128
- "main",
129
- "marquee",
130
- "math",
131
- "navigation",
132
- "none",
133
- "note",
134
- "presentation",
135
- "region",
136
- "row",
137
- "rowgroup",
138
- "rowheader",
139
- "search",
140
- "status",
141
- "tabpanel",
142
- "term",
143
- "timer",
144
- "toolbar",
145
- "tooltip"
146
- ];
147
- var roleless_elements = ["div", "span"];
148
- var a11y_required_content = [
149
- "a",
150
- "h1",
151
- "h2",
152
- "h3",
153
- "h4",
154
- "h5",
155
- "h6"
156
- ];
157
- var a11y_distracting_elements = ["blink", "marquee"];
158
- var a11y_implicit_semantics = /* @__PURE__ */ new Map([
159
- ["a", "link"],
160
- ["area", "link"],
161
- ["article", "article"],
162
- ["aside", "complementary"],
163
- ["body", "document"],
164
- ["button", "button"],
165
- ["datalist", "listbox"],
166
- ["dd", "definition"],
167
- ["dfn", "term"],
168
- ["dialog", "dialog"],
169
- ["details", "group"],
170
- ["dt", "term"],
171
- ["fieldset", "group"],
172
- ["figure", "figure"],
173
- ["form", "form"],
174
- ["h1", "heading"],
175
- ["h2", "heading"],
176
- ["h3", "heading"],
177
- ["h4", "heading"],
178
- ["h5", "heading"],
179
- ["h6", "heading"],
180
- ["hr", "separator"],
181
- ["img", "image"],
182
- ["li", "listitem"],
183
- ["link", "link"],
184
- ["main", "main"],
185
- ["menu", "list"],
186
- ["meter", "progressbar"],
187
- ["nav", "navigation"],
188
- ["ol", "list"],
189
- ["option", "option"],
190
- ["optgroup", "group"],
191
- ["output", "status"],
192
- ["progress", "progressbar"],
193
- ["section", "region"],
194
- ["summary", "button"],
195
- ["table", "table"],
196
- ["tbody", "rowgroup"],
197
- ["textarea", "textbox"],
198
- ["tfoot", "rowgroup"],
199
- ["thead", "rowgroup"],
200
- ["tr", "row"],
201
- ["ul", "list"]
202
- ]);
203
- var menuitem_type_to_implicit_role = /* @__PURE__ */ new Map([
204
- ["command", "menuitem"],
205
- ["checkbox", "menuitemcheckbox"],
206
- ["radio", "menuitemradio"]
207
- ]);
208
- var input_type_to_implicit_role = /* @__PURE__ */ new Map([
209
- ["button", "button"],
210
- ["image", "button"],
211
- ["reset", "button"],
212
- ["submit", "button"],
213
- ["checkbox", "checkbox"],
214
- ["radio", "radio"],
215
- ["range", "slider"],
216
- ["number", "spinbutton"],
217
- ["email", "textbox"],
218
- ["search", "searchbox"],
219
- ["tel", "textbox"],
220
- ["text", "textbox"],
221
- ["url", "textbox"]
222
- ]);
223
- var ariaAttributes = new Set("activedescendant atomic autocomplete busy checked colcount colindex colspan controls current describedby details disabled dropeffect errormessage expanded flowto grabbed haspopup hidden invalid keyshortcuts label labelledby level live modal multiline multiselectable orientation owns placeholder posinset pressed readonly relevant required roledescription rowcount rowindex rowspan selected setsize sort valuemax valuemin valuenow valuetext".split(" "));
224
- var ariaRoles = new Set("alert alertdialog application article banner blockquote button caption cell checkbox code columnheader combobox command complementary composite contentinfo definition deletion dialog directory document emphasis feed figure form generic grid gridcell group heading image img input insertion landmark link list listbox listitem log main marquee math meter menu menubar menuitem menuitemcheckbox menuitemradio navigation none note option paragraph presentation progressbar radio radiogroup range region roletype row rowgroup rowheader scrollbar search searchbox section sectionhead select separator slider spinbutton status strong structure subscript superscript switch tab table tablist tabpanel term textbox time timer toolbar tooltip tree treegrid treeitem widget window".split(" "));
225
- function isInteractive(element) {
226
- const attribute = MAYBE_INTERACTIVE.get(element.localName);
227
- if (attribute) return element.hasAttribute(attribute);
228
- return true;
229
- }
230
- function hasAccessibleName(element) {
231
- return element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
232
- }
233
- var conditional_implicit_roles = /* @__PURE__ */ new Map([
234
- ["a", (el) => el.hasAttribute("href") ? "link" : null],
235
- ["aside", (el) => {
236
- return !!!el.parentElement?.closest("article, aside, nav, section") || hasAccessibleName(el) ? "complementary" : null;
237
- }],
238
- ["img", (el) => {
239
- if (el.getAttribute("alt") === "") return null;
240
- return "image";
241
- }],
242
- ["section", (el) => {
243
- return hasAccessibleName(el) ? "region" : null;
244
- }]
245
- ]);
246
- var a11y = [
247
- {
248
- code: "a11y-accesskey",
249
- title: "Avoid using `accesskey`",
250
- message: "The `accesskey` attribute can cause accessibility issues. The shortcuts can conflict with the browser's or operating system's shortcuts, and they are difficult for users to discover and use.",
251
- selector: "[accesskey]"
252
- },
253
- {
254
- code: "a11y-aria-activedescendant-has-tabindex",
255
- title: "Elements with attribute `aria-activedescendant` must be tabbable",
256
- message: "Element with the `aria-activedescendant` attribute must either have an inherent `tabindex` or declare `tabindex` as an attribute.",
257
- selector: "[aria-activedescendant]",
258
- match(element) {
259
- if (!element.tabIndex && !element.hasAttribute("tabindex")) return true;
260
- }
261
- },
262
- {
263
- code: "a11y-aria-attributes",
264
- title: "Element does not support ARIA roles.",
265
- message: "Elements like `meta`, `html`, `script`, `style` do not support having ARIA roles.",
266
- selector: ":is(meta, html, script, style)[role]",
267
- match(element) {
268
- for (const attribute of element.attributes) if (attribute.name.startsWith("aria-")) return true;
269
- }
270
- },
271
- {
272
- code: "a11y-autofocus",
273
- title: "Avoid using `autofocus`",
274
- message: "The `autofocus` attribute can cause accessibility issues, as it can cause the focus to move around unexpectedly for screen reader users.",
275
- selector: "[autofocus]"
276
- },
277
- {
278
- code: "a11y-distracting-elements",
279
- title: "Distracting elements should not be used",
280
- message: "Elements that can be visually distracting like `<marquee>` or `<blink>` can cause accessibility issues for visually impaired users and should be avoided.",
281
- selector: `:is(${a11y_distracting_elements.join(",")})`
282
- },
283
- {
284
- code: "a11y-hidden",
285
- title: "Certain DOM elements are useful for screen reader navigation and should not be hidden",
286
- message: (element) => `${element.localName} element should not be hidden.`,
287
- selector: "[aria-hidden]:is(h1,h2,h3,h4,h5,h6)"
288
- },
289
- {
290
- code: "a11y-img-redundant-alt",
291
- title: "Redundant text in alt attribute",
292
- message: "Screen readers already announce `img` elements as an image. There is no need to use words such as \"image\", \"photo\", and/or \"picture\".",
293
- selector: "img[alt]:not([aria-hidden])",
294
- match: (img) => /\b(?:image|picture|photo)\b/i.test(img.alt)
295
- },
296
- {
297
- code: "a11y-incorrect-aria-attribute-type",
298
- title: "Incorrect value for ARIA attribute.",
299
- message: "`aria-hidden` should only receive a boolean.",
300
- selector: "[aria-hidden]",
301
- match(element) {
302
- const value = element.getAttribute("aria-hidden");
303
- if (!value) return true;
304
- if (!["true", "false"].includes(value)) return true;
305
- }
306
- },
307
- {
308
- code: "a11y-invalid-href",
309
- title: "Invalid `href` attribute",
310
- message: "`href` should not be empty, `'#'`, or `javascript:`.",
311
- selector: "a[href]:is([href=\"\"], [href=\"#\"], [href^=\"javascript:\" i])"
312
- },
313
- {
314
- code: "a11y-invalid-label",
315
- title: "`label` element should have an associated control and a text content.",
316
- message: "The `label` element must be associated with a control either by using the `for` attribute or by containing a nested form element. Additionally, the `label` element must have text content.",
317
- selector: "label",
318
- match(element) {
319
- const hasFor = element.hasAttribute("for");
320
- const nestedLabelableElement = element.querySelector(`${labelableElements.join(", ")}`);
321
- if (!hasFor && !nestedLabelableElement) return true;
322
- if (element.innerText.trim() === "") return true;
323
- }
324
- },
325
- {
326
- code: "a11y-media-has-caption",
327
- title: "Unmuted video elements should have captions",
328
- message: "Videos without captions can be difficult for deaf and hard-of-hearing users to follow along with. If the video does not need captions, add the `muted` attribute.",
329
- selector: "video:not([muted])",
330
- match(element) {
331
- const tracks = element.querySelectorAll("track");
332
- if (!tracks.length) return true;
333
- return !Array.from(tracks).some((track) => track.getAttribute("kind") === "captions");
334
- }
335
- },
336
- {
337
- code: "a11y-misplaced-scope",
338
- title: "The `scope` attribute should only be used on `<th>` elements",
339
- message: "The `scope` attribute tells the browser and screen readers how to navigate tables. In HTML5, it should only be used on `<th>` elements.",
340
- selector: ":not(th)[scope]"
341
- },
342
- {
343
- code: "a11y-missing-attribute",
344
- title: "Required attributes missing.",
345
- description: "Some HTML elements require additional attributes for accessibility. For example, an `img` element requires an `alt` attribute, this attribute is used to describe the content of the image for screen readers.",
346
- message: (element) => {
347
- const missingAttributes = a11y_required_attributes[element.localName].filter((attribute) => !element.hasAttribute(attribute));
348
- return `${element.localName} element is missing required attributes for accessibility: ${missingAttributes.join(", ")} `;
349
- },
350
- selector: Object.keys(a11y_required_attributes).join(","),
351
- match(element) {
352
- const requiredAttributes = a11y_required_attributes[element.localName];
353
- if (!requiredAttributes) return true;
354
- for (const attribute of requiredAttributes) if (!element.hasAttribute(attribute)) return true;
355
- return false;
356
- }
357
- },
358
- {
359
- code: "a11y-missing-content",
360
- title: "Missing content",
361
- message: "Headings and anchors must have an accessible name, which can come from: inner text, aria-label, aria-labelledby, an img with alt property, or an svg with a tag <title></title>.",
362
- selector: a11y_required_content.join(","),
363
- match(element) {
364
- if (isHiddenByClosedDetails(element)) return false;
365
- const innerText = element.innerText?.trim();
366
- if (innerText && innerText !== "") return false;
367
- const ariaLabel = element.getAttribute("aria-label")?.trim();
368
- if (ariaLabel && ariaLabel !== "") return false;
369
- const ariaLabelledby = element.getAttribute("aria-labelledby")?.trim();
370
- if (ariaLabelledby) {
371
- const ids = ariaLabelledby.split(" ");
372
- for (const id of ids) {
373
- const referencedElement = document.getElementById(id);
374
- if (referencedElement && referencedElement.innerText.trim() !== "") return false;
375
- }
376
- }
377
- const imgElements = element.querySelectorAll("img");
378
- for (const img of imgElements) {
379
- const altAttribute = img.getAttribute("alt");
380
- if (altAttribute && altAttribute.trim() !== "") return false;
381
- }
382
- const svgElements = element.querySelectorAll("svg");
383
- for (const svg of svgElements) {
384
- const titleText = svg.querySelector("title");
385
- if (titleText && titleText.textContent && titleText.textContent.trim() !== "") return false;
386
- }
387
- const inputElements = element.querySelectorAll("input");
388
- for (const input of inputElements) {
389
- if (input.type === "image") {
390
- const altAttribute = input.getAttribute("alt");
391
- if (altAttribute && altAttribute.trim() !== "") return false;
392
- }
393
- const inputAriaLabel = input.getAttribute("aria-label")?.trim();
394
- if (inputAriaLabel && inputAriaLabel !== "") return false;
395
- const inputAriaLabelledby = input.getAttribute("aria-labelledby")?.trim();
396
- if (inputAriaLabelledby) {
397
- const ids = inputAriaLabelledby.split(" ");
398
- for (const id of ids) {
399
- const referencedElement = document.getElementById(id);
400
- if (referencedElement && referencedElement.innerText.trim() !== "") return false;
401
- }
402
- }
403
- const title = input.getAttribute("title")?.trim();
404
- if (title && title !== "") return false;
405
- }
406
- return true;
407
- }
408
- },
409
- {
410
- code: "a11y-no-redundant-roles",
411
- title: "HTML element has redundant ARIA roles",
412
- message: "Giving these elements an ARIA role that is already set by the browser has no effect and is redundant.",
413
- selector: `[role]:is(${[...a11y_implicit_semantics.keys()].join(",")},input)`,
414
- match(element) {
415
- const role = element.getAttribute("role");
416
- if (!role) return false;
417
- const localName = element.localName;
418
- if (localName === "ul" && role === "list" || localName === "ol" && role === "list" || localName === "li" && role === "listitem") return false;
419
- if (localName === "input") {
420
- const type = element.getAttribute("type") || "text";
421
- return role === input_type_to_implicit_role.get(type);
422
- }
423
- const getConditionalRole = conditional_implicit_roles.get(localName);
424
- if (getConditionalRole) {
425
- const effectiveRole = getConditionalRole(element);
426
- return effectiveRole ? role === effectiveRole : false;
427
- }
428
- const implicitRole = a11y_implicit_semantics.get(localName);
429
- if (!implicitRole) return false;
430
- return role === implicitRole;
431
- }
432
- },
433
- {
434
- code: "a11y-no-interactive-element-to-noninteractive-role",
435
- title: "Non-interactive ARIA role used on interactive HTML element.",
436
- message: "Interactive HTML elements like `<a>` and `<button>` cannot use non-interactive roles like `heading`, `list`, `menu`, and `toolbar`.",
437
- selector: `[role]:is(${interactiveElements.join(",")})`,
438
- match(element) {
439
- if (!isInteractive(element)) return false;
440
- const role = element.getAttribute("role");
441
- if (!role) return false;
442
- if (!ariaRoles.has(role)) return false;
443
- if (roleless_elements.includes(element.localName)) return false;
444
- if (aria_non_interactive_roles.includes(role)) return true;
445
- }
446
- },
447
- {
448
- code: "a11y-no-noninteractive-element-to-interactive-role",
449
- title: "Interactive ARIA role used on non-interactive HTML element.",
450
- message: "Interactive roles should not be used to convert a non-interactive element to an interactive element",
451
- selector: `[role]:not(${interactiveElements.join(",")})`,
452
- match(element) {
453
- if (!isInteractive(element)) return false;
454
- const role = element.getAttribute("role");
455
- if (!role) return false;
456
- if (!ariaRoles.has(role)) return false;
457
- if (a11y_non_interactive_element_to_interactive_role_exceptions[element.localName]?.includes(role)) return false;
458
- if (roleless_elements.includes(element.localName)) return false;
459
- if (!aria_non_interactive_roles.includes(role)) return true;
460
- }
461
- },
462
- {
463
- code: "a11y-no-noninteractive-tabindex",
464
- title: "Invalid `tabindex` on non-interactive element",
465
- description: "The `tabindex` attribute should only be used on interactive elements, as it can be confusing for keyboard-only users to navigate through non-interactive elements. If your element is only conditionally interactive, consider using `tabindex=\"-1\"` to make it focusable only when it is actually interactive.",
466
- message: (element) => `${element.localName} elements should not have \`tabindex\` attribute`,
467
- selector: "[tabindex]:not([role=\"tabpanel\"])",
468
- match(element) {
469
- if (element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth) return false;
470
- if (element.localName === "pre") return false;
471
- if (!isInteractive(element)) return false;
472
- if (!interactiveElements.includes(element.localName) && !roleless_elements.includes(element.localName)) return true;
473
- }
474
- },
475
- {
476
- code: "a11y-positive-tabindex",
477
- title: "Avoid positive `tabindex` property values",
478
- message: "This will move elements out of the expected tab order, creating a confusing experience for keyboard users.",
479
- selector: "[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])"
480
- },
481
- {
482
- code: "a11y-role-has-required-aria-props",
483
- title: "Missing attributes required for ARIA role",
484
- message: (element) => {
485
- const { __astro_role: role, __astro_missing_attributes: required } = element;
486
- return `${element.localName} element is missing required attributes for its role (${role}): ${required.join(", ")}`;
487
- },
488
- selector: "*",
489
- match(element) {
490
- const role = getRole(element);
491
- if (!role) return false;
492
- if (is_semantic_role_element(role, element.localName, getAttributeObject(element))) return;
493
- const elementRoles = role.split(WHITESPACE_REGEX);
494
- for (const elementRole of elementRoles) {
495
- const roleData = import_lib.roles.get(normalizeAriaRole(elementRole));
496
- if (!roleData) continue;
497
- const { requiredProps } = roleData;
498
- const missingProps = Object.keys(requiredProps).filter((prop) => !element.hasAttribute(prop));
499
- if (missingProps.length > 0) {
500
- element.__astro_role = elementRole;
501
- element.__astro_missing_attributes = missingProps;
502
- return true;
503
- }
504
- }
505
- }
506
- },
507
- {
508
- code: "a11y-role-supports-aria-props",
509
- title: "Unsupported ARIA attribute",
510
- message: (element) => {
511
- const { __astro_role: role, __astro_unsupported_attributes: unsupported } = element;
512
- return `${element.localName} element has ARIA attributes that are not supported by its role (${role}): ${unsupported.join(", ")}`;
513
- },
514
- selector: "*",
515
- match(element) {
516
- const role = getRole(element);
517
- if (!role) return false;
518
- const elementRoles = role.split(WHITESPACE_REGEX);
519
- for (const elementRole of elementRoles) {
520
- const roleData = import_lib.roles.get(normalizeAriaRole(elementRole));
521
- if (!roleData) continue;
522
- const { props } = roleData;
523
- const attributes = getAttributeObject(element);
524
- const unsupportedAttributes = import_lib.aria.keys().filter((attribute) => !(attribute in props));
525
- const invalidAttributes = Object.keys(attributes).filter((key) => key.startsWith("aria-") && unsupportedAttributes.includes(key));
526
- if (invalidAttributes.length > 0) {
527
- element.__astro_role = elementRole;
528
- element.__astro_unsupported_attributes = invalidAttributes;
529
- return true;
530
- }
531
- }
532
- }
533
- },
534
- {
535
- code: "a11y-structure",
536
- title: "Invalid DOM structure",
537
- message: "The DOM structure must be valid for accessibility of the page, for example `figcaption` must be a direct child of `figure`.",
538
- selector: "figcaption:not(figure > figcaption)"
539
- },
540
- {
541
- code: "a11y-unknown-aria-attribute",
542
- title: "Unknown ARIA attribute",
543
- message: "ARIA attributes prefixed with `aria-` must be valid, non-abstract ARIA attributes.",
544
- selector: "*",
545
- match(element) {
546
- for (const attribute of element.attributes) if (attribute.name.startsWith("aria-")) {
547
- if (!ariaAttributes.has(attribute.name.slice(5))) return true;
548
- }
549
- }
550
- },
551
- {
552
- code: "a11y-unknown-role",
553
- title: "Unknown ARIA role",
554
- message: "ARIA roles must be valid, non-abstract ARIA roles.",
555
- selector: "[role]",
556
- match(element) {
557
- const role = element.getAttribute("role");
558
- if (!role) return true;
559
- if (!ariaRoles.has(role)) return true;
560
- }
561
- }
562
- ];
563
- var a11y_non_interactive_element_to_interactive_role_exceptions = {
564
- ul: [
565
- "listbox",
566
- "menu",
567
- "menubar",
568
- "radiogroup",
569
- "tablist",
570
- "tree",
571
- "treegrid"
572
- ],
573
- ol: [
574
- "listbox",
575
- "menu",
576
- "menubar",
577
- "radiogroup",
578
- "tablist",
579
- "tree",
580
- "treegrid"
581
- ],
582
- li: [
583
- "menuitem",
584
- "option",
585
- "row",
586
- "tab",
587
- "treeitem"
588
- ],
589
- table: ["grid"],
590
- td: ["gridcell"],
591
- fieldset: ["radiogroup", "presentation"]
592
- };
593
- var combobox_if_list = [
594
- "email",
595
- "search",
596
- "tel",
597
- "text",
598
- "url"
599
- ];
600
- function input_implicit_role(attributes) {
601
- if (!("type" in attributes)) return;
602
- const { type, list } = attributes;
603
- if (!type) return;
604
- if (list && combobox_if_list.includes(type)) return "combobox";
605
- return input_type_to_implicit_role.get(type);
606
- }
607
- function menuitem_implicit_role(attributes) {
608
- if (!("type" in attributes)) return;
609
- const { type } = attributes;
610
- if (!type) return;
611
- return menuitem_type_to_implicit_role.get(type);
612
- }
613
- var ariaQueryRoleAliases = { image: "img" };
614
- function normalizeAriaRole(role) {
615
- return ariaQueryRoleAliases[role] ?? role;
616
- }
617
- function getRole(element) {
618
- if (element.hasAttribute("role")) return element.getAttribute("role");
619
- return getImplicitRole(element);
620
- }
621
- function getImplicitRole(element) {
622
- const name = element.localName;
623
- const attrs = getAttributeObject(element);
624
- if (name === "menuitem") return menuitem_implicit_role(attrs);
625
- else if (name === "input") return input_implicit_role(attrs);
626
- else return a11y_implicit_semantics.get(name);
627
- }
628
- function getAttributeObject(element) {
629
- let obj = {};
630
- for (let i = 0; i < element.attributes.length; i++) {
631
- const attribute = element.attributes.item(i);
632
- obj[attribute.name] = attribute.value;
633
- }
634
- return obj;
635
- }
636
- function is_semantic_role_element(role, tag_name, attributes) {
637
- for (const [schema, ax_object] of import_lib$1.elementAXObjects.entries()) if (schema.name === tag_name && (!schema.attributes || schema.attributes.every((attr) => attributes[attr.name] === attr.value))) for (const name of ax_object) {
638
- const axRoles = import_lib$1.AXObjectRoles.get(name);
639
- if (axRoles) {
640
- for (const { name: _name } of axRoles) if (_name === role) return true;
641
- }
642
- }
643
- return false;
644
- }
645
- //#endregion
646
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/rules/perf.js
647
- var EXTERNAL_URL_REGEX = /^(?:[a-z+]+:)?\/\//i;
648
- var perf = [
649
- {
650
- code: "perf-use-image-component",
651
- title: "Use the Image component",
652
- message: "This image could be replaced with the Image component to improve performance.",
653
- selector: "img:not([data-image-component])",
654
- async match(element) {
655
- if (element.closest("astro-island")) return false;
656
- const src = element.getAttribute("src");
657
- if (!src) return false;
658
- if (src.startsWith("data:")) return false;
659
- if (!EXTERNAL_URL_REGEX.test(src)) {
660
- if ((await fetch(src).then((response) => response.blob())).size < 20480) return false;
661
- }
662
- return true;
663
- }
664
- },
665
- {
666
- code: "perf-use-loading-lazy",
667
- title: "Unoptimized loading attribute",
668
- message: (element) => `This ${element.nodeName} tag is below the fold and could be lazy-loaded to improve performance.`,
669
- selector: "img:not([loading]), img[loading=\"eager\"], iframe:not([loading]), iframe[loading=\"eager\"]",
670
- match(element) {
671
- const htmlElement = element;
672
- let currentElement = element;
673
- let elementYPosition = 0;
674
- while (currentElement) {
675
- elementYPosition += currentElement.offsetTop;
676
- currentElement = currentElement.offsetParent;
677
- }
678
- if (elementYPosition < window.innerHeight) return false;
679
- if (htmlElement.src.startsWith("data:")) return false;
680
- return true;
681
- }
682
- },
683
- {
684
- code: "perf-use-loading-eager",
685
- title: "Unoptimized loading attribute",
686
- message: (element) => `This ${element.nodeName} tag is above the fold and could be eagerly-loaded to improve performance.`,
687
- selector: "img[loading=\"lazy\"], iframe[loading=\"lazy\"]",
688
- match(element) {
689
- const htmlElement = element;
690
- let currentElement = element;
691
- let elementYPosition = 0;
692
- while (currentElement) {
693
- elementYPosition += currentElement.offsetTop;
694
- currentElement = currentElement.offsetParent;
695
- }
696
- if (elementYPosition > window.innerHeight) return false;
697
- if (htmlElement.src.startsWith("data:")) return false;
698
- return true;
699
- }
700
- },
701
- {
702
- code: "perf-use-videos",
703
- title: "Use videos instead of GIFs for large animations",
704
- message: "This GIF could be replaced with a video to reduce its file size and improve performance.",
705
- selector: "img[src$=\".gif\"]",
706
- async match(element) {
707
- const src = element.getAttribute("src");
708
- if (!src) return false;
709
- if (EXTERNAL_URL_REGEX.test(src)) return false;
710
- if (!EXTERNAL_URL_REGEX.test(src)) {
711
- if ((await fetch(src).then((response) => response.blob())).size < 102400) return false;
712
- }
713
- return true;
714
- }
715
- },
716
- {
717
- code: "perf-slow-component-server-render",
718
- title: "Server-rendered component took a long time to render",
719
- message: (element) => `This component took an unusually long time to render on the server (${getCleanRenderingTime(element.getAttribute("server-render-time"))}). This might be a sign that it's doing too much work on the server, or something is blocking rendering.`,
720
- selector: "astro-island[server-render-time]",
721
- match(element) {
722
- const serverRenderTime = element.getAttribute("server-render-time");
723
- if (!serverRenderTime) return false;
724
- const renderingTime = Number.parseFloat(serverRenderTime);
725
- if (Number.isNaN(renderingTime)) return false;
726
- return renderingTime > 500;
727
- }
728
- },
729
- {
730
- code: "perf-slow-component-client-hydration",
731
- title: "Client-rendered component took a long time to hydrate",
732
- message: (element) => `This component took an unusually long time to render on the server (${getCleanRenderingTime(element.getAttribute("client-render-time"))}). This could be a sign that something is blocking the main thread and preventing the component from hydrating quickly.`,
733
- selector: "astro-island[client-render-time]",
734
- match(element) {
735
- const clientRenderTime = element.getAttribute("client-render-time");
736
- if (!clientRenderTime) return false;
737
- const renderingTime = Number.parseFloat(clientRenderTime);
738
- if (Number.isNaN(renderingTime)) return false;
739
- return renderingTime > 500;
740
- }
741
- }
742
- ];
743
- function getCleanRenderingTime(time) {
744
- if (!time) return "unknown";
745
- const renderingTime = Number.parseFloat(time);
746
- if (Number.isNaN(renderingTime)) return "unknown";
747
- return renderingTime.toFixed(2) + "s";
748
- }
749
- //#endregion
750
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/rules/index.js
751
- var rulesCategories = [{
752
- code: "a11y",
753
- name: "Accessibility",
754
- icon: "person-arms-spread",
755
- rules: a11y
756
- }, {
757
- code: "perf",
758
- name: "Performance",
759
- icon: "gauge",
760
- rules: perf
761
- }];
762
- var dynamicAuditRuleKeys = [
763
- "title",
764
- "message",
765
- "description"
766
- ];
767
- function resolveAuditRule(rule, element) {
768
- let resolved = { ...rule };
769
- for (const key of dynamicAuditRuleKeys) {
770
- const value = rule[key];
771
- if (typeof value === "string") continue;
772
- try {
773
- if (!value) {
774
- resolved[key] = "";
775
- continue;
776
- }
777
- resolved[key] = value(element);
778
- } catch (err) {
779
- settings.logger.error(`Error resolving dynamic audit rule ${rule.code}'s ${key}: ${err}`);
780
- resolved[key] = "Error resolving dynamic rule";
781
- }
782
- }
783
- return resolved;
784
- }
785
- function getAuditCategory(rule) {
786
- return rule.code.split("-")[0];
787
- }
788
- //#endregion
789
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/ui/audit-list-item.js
790
- var DevToolbarAuditListItem = class extends HTMLElement {
791
- clickAction;
792
- shadowRoot;
793
- isManualFocus;
794
- constructor() {
795
- super();
796
- this.shadowRoot = this.attachShadow({ mode: "open" });
797
- this.isManualFocus = false;
798
- this.shadowRoot.innerHTML = `
799
- <style>
800
- :host>button, :host>div {
801
- box-sizing: border-box;
802
- padding: 16px;
803
- background: transparent;
804
- border: none;
805
- border-bottom: 1px solid #1F2433;
806
- text-decoration: none;
807
- width: 100%;
808
- height: 100%;
809
- }
810
-
811
- h1, h2, h3, h4, h5, h6 {
812
- color: #fff;
813
- font-weight: 600;
814
- }
815
-
816
- :host>button:hover, :host([hovered])>button {
817
- background: #FFFFFF20;
818
- }
819
-
820
- svg {
821
- display: block;
822
- margin: 0 auto;
823
- }
824
-
825
- :host>button#astro-overlay-card {
826
- text-align: left;
827
- box-shadow: none;
828
- display: flex;
829
- align-items: center;
830
- overflow: hidden;
831
- gap: 8px;
832
- }
833
-
834
- :host(:not([active]))>button:hover {
835
- cursor: pointer;
836
- }
837
-
838
- .extended-info {
839
- display: none;
840
- color: white;
841
- font-size: 14px;
842
- }
843
-
844
- .extended-info hr {
845
- border: 1px solid rgba(27, 30, 36, 1);
846
- }
847
-
848
- :host([active]) .extended-info {
849
- display: block;
850
- position: absolute;
851
- height: 100%;
852
- top: 98px;
853
- height: calc(100% - 98px);
854
- background: #0d0e12;
855
- user-select: text;
856
- overflow: auto;
857
- border: none;
858
- z-index: 1000000000;
859
- flex-direction: column;
860
- line-height: 1.25rem;
861
- }
862
-
863
- :host([active])>button#astro-overlay-card {
864
- display: none;
865
- }
866
-
867
- .audit-title {
868
- margin: 0;
869
- margin-bottom: 4px;
870
- }
871
-
872
- .extended-info .audit-selector {
873
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
874
- display: flex;
875
- align-items: center;
876
- border-bottom: 1px solid transparent;
877
- user-select: none;
878
- color: rgba(191, 193, 201, 1);
879
- }
880
-
881
- .extended-info .audit-selector:hover {
882
- border-bottom: 1px solid rgba(255, 255, 255);
883
- cursor: pointer;
884
- color: #fff;
885
- }
886
-
887
- .audit-selector svg {
888
- width: 16px;
889
- height: 16px;
890
- display: inline;
891
- }
892
-
893
- .extended-info .audit-description {
894
- color: rgba(191, 193, 201, 1);
895
- }
896
-
897
- .extended-info code {
898
- padding: 1px 3px;
899
- border-radius: 3px;
900
- background: #1F2433;
901
- }
902
-
903
- .reset-button {
904
- text-align: left;
905
- border: none;
906
- margin: 0;
907
- width: auto;
908
- overflow: visible;
909
- background: transparent;
910
- font: inherit;
911
- line-height: normal;
912
- -webkit-font-smoothing: inherit;
913
- -moz-osx-font-smoothing: inherit;
914
- -webkit-appearance: none;
915
- padding: 0;
916
- color: white;
917
- }
918
- </style>
919
-
920
- <button id="astro-overlay-card">
921
- <slot />
922
- </button>
923
- `;
924
- }
925
- connectedCallback() {
926
- if (this.clickAction) this.shadowRoot.getElementById("astro-overlay-card")?.addEventListener("click", this.clickAction);
927
- }
928
- };
929
- //#endregion
930
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/ui/audit-list-window.js
931
- function createRoundedBadge(icon) {
932
- const badge = document.createElement("astro-dev-toolbar-badge");
933
- badge.shadowRoot.innerHTML += `
934
- <style>
935
- :host>div {
936
- padding: 12px 8px;
937
- font-size: 14px;
938
- display: flex;
939
- gap: 4px;
940
- }
941
- </style>
942
- `;
943
- badge.innerHTML = `<astro-dev-toolbar-icon icon="${icon}"></astro-dev-toolbar-icon>0`;
944
- return {
945
- badge,
946
- updateCount: (count) => {
947
- if (count === 0) badge.badgeStyle = "green";
948
- else badge.badgeStyle = "purple";
949
- badge.innerHTML = `<astro-dev-toolbar-icon icon="${icon}"></astro-dev-toolbar-icon>${count}`;
950
- }
951
- };
952
- }
953
- var DevToolbarAuditListWindow = class extends HTMLElement {
954
- _audits = [];
955
- shadowRoot;
956
- badges = {};
957
- get audits() {
958
- return this._audits;
959
- }
960
- set audits(value) {
961
- this._audits = value;
962
- this.render();
963
- }
964
- constructor() {
965
- super();
966
- this.shadowRoot = this.attachShadow({ mode: "open" });
967
- this.shadowRoot.innerHTML = `<style>
968
- :host {
969
- box-sizing: border-box;
970
- display: flex;
971
- flex-direction: column;
972
- background: linear-gradient(0deg, #13151a, #13151a), linear-gradient(0deg, #343841, #343841);
973
- border: 1px solid rgba(52, 56, 65, 1);
974
- width: min(640px, 100%);
975
- max-height: 480px;
976
- border-radius: 12px;
977
- padding: 24px;
978
- font-family:
979
- ui-sans-serif,
980
- system-ui,
981
- -apple-system,
982
- BlinkMacSystemFont,
983
- "Segoe UI",
984
- Roboto,
985
- "Helvetica Neue",
986
- Arial,
987
- "Noto Sans",
988
- sans-serif,
989
- "Apple Color Emoji",
990
- "Segoe UI Emoji",
991
- "Segoe UI Symbol",
992
- "Noto Color Emoji";
993
- color: rgba(191, 193, 201, 1);
994
- position: fixed;
995
- z-index: 2000000009;
996
- bottom: 72px;
997
- left: 50%;
998
- transform: translateX(-50%);
999
- box-shadow:
1000
- 0px 0px 0px 0px rgba(19, 21, 26, 0.3),
1001
- 0px 1px 2px 0px rgba(19, 21, 26, 0.29),
1002
- 0px 4px 4px 0px rgba(19, 21, 26, 0.26),
1003
- 0px 10px 6px 0px rgba(19, 21, 26, 0.15),
1004
- 0px 17px 7px 0px rgba(19, 21, 26, 0.04),
1005
- 0px 26px 7px 0px rgba(19, 21, 26, 0.01);
1006
- }
1007
-
1008
- @media (forced-colors: active) {
1009
- :host {
1010
- background: white;
1011
- }
1012
- }
1013
-
1014
- @media (max-width: 640px) {
1015
- :host {
1016
- border-radius: 0;
1017
- }
1018
- }
1019
-
1020
- hr,
1021
- ::slotted(hr) {
1022
- border: 1px solid rgba(27, 30, 36, 1);
1023
- margin: 1em 0;
1024
- }
1025
-
1026
- .reset-button {
1027
- text-align: left;
1028
- border: none;
1029
- margin: 0;
1030
- width: auto;
1031
- overflow: visible;
1032
- background: transparent;
1033
- font: inherit;
1034
- line-height: normal;
1035
- -webkit-font-smoothing: inherit;
1036
- -moz-osx-font-smoothing: inherit;
1037
- -webkit-appearance: none;
1038
- padding: 0;
1039
- }
1040
-
1041
- :host {
1042
- left: initial;
1043
- top: 8px;
1044
- right: 8px;
1045
- transform: none;
1046
- width: 350px;
1047
- min-height: 350px;
1048
- max-height: 420px;
1049
- padding: 0;
1050
- overflow: hidden;
1051
- }
1052
-
1053
- hr {
1054
- margin: 0;
1055
- }
1056
-
1057
- header {
1058
- display: flex;
1059
- align-items: center;
1060
- gap: 4px;
1061
- }
1062
-
1063
- header > section {
1064
- display: flex;
1065
- align-items: center;
1066
- gap: 1em;
1067
- padding: 18px;
1068
- }
1069
-
1070
- header.category-header {
1071
- background: rgba(27, 30, 36, 1);
1072
- padding: 10px 16px;
1073
- position: sticky;
1074
- top: 0;
1075
- }
1076
-
1077
- header.category-header astro-dev-toolbar-icon {
1078
- opacity: 0.6;
1079
- }
1080
-
1081
- #audit-counts {
1082
- display: flex;
1083
- gap: 0.5em;
1084
- }
1085
-
1086
- #audit-counts > div {
1087
- display: flex;
1088
- gap: 8px;
1089
- align-items: center;
1090
- }
1091
-
1092
- ul,
1093
- li {
1094
- margin: 0;
1095
- padding: 0;
1096
- list-style: none;
1097
- }
1098
-
1099
- h1 {
1100
- font-size: 24px;
1101
- font-weight: 600;
1102
- color: #fff;
1103
- margin: 0;
1104
- }
1105
-
1106
- h2 {
1107
- font-weight: 600;
1108
- margin: 0;
1109
- color: white;
1110
- font-size: 14px;
1111
- }
1112
-
1113
- h3 {
1114
- font-weight: normal;
1115
- margin: 0;
1116
- color: white;
1117
- font-size: 14px;
1118
- }
1119
-
1120
- .audit-header {
1121
- display: flex;
1122
- gap: 8px;
1123
- align-items: center;
1124
- }
1125
-
1126
- .audit-selector {
1127
- color: white;
1128
- font-size: 12px;
1129
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
1130
- "Liberation Mono", "Courier New", monospace;
1131
- border: 1px solid rgba(255, 255, 255, 0.1);
1132
- border-radius: 4px;
1133
- padding: 4px 6px;
1134
- }
1135
-
1136
- [active] .audit-selector:hover {
1137
- text-decoration: underline;
1138
- cursor: pointer;
1139
- }
1140
-
1141
- .selector-title-container {
1142
- display: flex;
1143
- align-items: center;
1144
- gap: 8px;
1145
- }
1146
-
1147
- astro-dev-toolbar-icon {
1148
- color: white;
1149
- fill: white;
1150
- display: inline-block;
1151
- height: 16px;
1152
- width: 16px;
1153
- }
1154
-
1155
- #audit-list {
1156
- display: flex;
1157
- flex-direction: column;
1158
- overflow: auto;
1159
- overscroll-behavior: contain;
1160
- height: 100%;
1161
- }
1162
-
1163
- #back-to-list {
1164
- display: none;
1165
- align-items: center;
1166
- justify-content: center;
1167
- background: rgba(27, 30, 36, 1);
1168
- gap: 8px;
1169
- padding: 8px;
1170
- color: white;
1171
- font-size: 14px;
1172
- padding-right: 24px;
1173
- }
1174
-
1175
- #back-to-list:hover {
1176
- cursor: pointer;
1177
- background: #313236;
1178
- }
1179
-
1180
- #back-to-list:has(+ #audit-list astro-dev-toolbar-audit-list-item[active]) {
1181
- display: flex;
1182
- }
1183
-
1184
- .no-audit-container {
1185
- display: flex;
1186
- flex-direction: column;
1187
- padding: 24px;
1188
- }
1189
-
1190
- .no-audit-container h1 {
1191
- font-size: 20px;
1192
- }
1193
-
1194
- .no-audit-container astro-dev-toolbar-icon {
1195
- width: auto;
1196
- height: auto;
1197
- margin: 0 auto;
1198
- }
1199
- </style>
1200
-
1201
- <template id="category-template">
1202
- <div>
1203
- <header class="category-header">
1204
- </header>
1205
- <div class="category-content"></div>
1206
- </div>
1207
- </template>
1208
-
1209
- <header>
1210
- <section id="header-left">
1211
- <h1>Audit</h1>
1212
- <section id="audit-counts"></section>
1213
- </section>
1214
- </header>
1215
- <hr />
1216
- <button id="back-to-list" class="reset-button">
1217
- <astro-dev-toolbar-icon icon="arrow-left"></astro-dev-toolbar-icon>
1218
- Back to list
1219
- </button>
1220
- <div id="audit-list"></div>
1221
- `;
1222
- const auditCounts = this.shadowRoot.getElementById("audit-counts");
1223
- if (auditCounts) rulesCategories.forEach((category) => {
1224
- const headerEntryContainer = document.createElement("div");
1225
- const auditCount = this.audits.filter((audit) => getAuditCategory(audit.rule) === category.code).length;
1226
- const categoryBadge = createRoundedBadge(category.icon);
1227
- categoryBadge.updateCount(auditCount);
1228
- headerEntryContainer.append(categoryBadge.badge);
1229
- auditCounts.append(headerEntryContainer);
1230
- this.badges[category.code] = categoryBadge;
1231
- });
1232
- const backToListButton = this.shadowRoot.getElementById("back-to-list");
1233
- if (backToListButton) backToListButton.addEventListener("click", () => {
1234
- const activeAudit = this.shadowRoot.querySelector("astro-dev-toolbar-audit-list-item[active]");
1235
- if (activeAudit) activeAudit.toggleAttribute("active", false);
1236
- });
1237
- }
1238
- connectedCallback() {
1239
- this.render();
1240
- }
1241
- updateAuditList() {
1242
- const auditListContainer = this.shadowRoot.getElementById("audit-list");
1243
- if (auditListContainer) {
1244
- auditListContainer.innerHTML = "";
1245
- if (this.audits.length > 0) for (const category of rulesCategories) {
1246
- const template = this.shadowRoot.getElementById("category-template");
1247
- if (!template) return;
1248
- const clone = document.importNode(template.content, true);
1249
- const categoryContainer = clone.querySelector("div");
1250
- const categoryHeader = clone.querySelector(".category-header");
1251
- categoryHeader.innerHTML = `<astro-dev-toolbar-icon icon="${category.icon}"></astro-dev-toolbar-icon><h2>${category.name}</h2>`;
1252
- categoryContainer.append(categoryHeader);
1253
- const categoryContent = clone.querySelector(".category-content");
1254
- const categoryAudits = this.audits.filter((audit) => getAuditCategory(audit.rule) === category.code);
1255
- for (const audit of categoryAudits) if (audit.card) categoryContent.append(audit.card);
1256
- categoryContainer.append(categoryContent);
1257
- auditListContainer.append(categoryContainer);
1258
- }
1259
- else {
1260
- const noAuditContainer = document.createElement("div");
1261
- noAuditContainer.classList.add("no-audit-container");
1262
- noAuditContainer.innerHTML = `
1263
- <header>
1264
- <h1></astro-dev-toolbar-icon>No accessibility or performance issues detected.</h1>
1265
- </header>
1266
- <p>
1267
- Nice work! This app scans the page and highlights common accessibility and performance issues for you, like a missing "alt" attribute on an image, or an image not using performant attributes.
1268
- </p>
1269
- <astro-dev-toolbar-icon icon="houston-detective"></astro-dev-toolbar-icon>
1270
- `;
1271
- auditListContainer.append(noAuditContainer);
1272
- }
1273
- }
1274
- }
1275
- updateBadgeCounts() {
1276
- for (const category of rulesCategories) {
1277
- const auditCount = this.audits.filter((audit) => getAuditCategory(audit.rule) === category.code).length;
1278
- this.badges[category.code].updateCount(auditCount);
1279
- }
1280
- }
1281
- render() {
1282
- this.updateAuditList();
1283
- this.updateBadgeCounts();
1284
- }
1285
- };
1286
- //#endregion
1287
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/ui/audit-ui.js
1288
- function truncate(val, maxLength) {
1289
- return val.length > maxLength ? val.slice(0, maxLength - 1) + "&hellip;" : val;
1290
- }
1291
- function createAuditUI(audit, audits) {
1292
- const highlight = createHighlight(audit.auditedElement.getBoundingClientRect(), "warning", { "data-audit-code": audit.rule.code });
1293
- const resolvedAuditRule = resolveAuditRule(audit.rule, audit.auditedElement);
1294
- const tooltip = buildAuditTooltip(resolvedAuditRule, audit.auditedElement);
1295
- const card = buildAuditCard(resolvedAuditRule, highlight, audit.auditedElement, audits);
1296
- ["focus", "mouseover"].forEach((event) => {
1297
- const attribute = event === "focus" ? "active" : "hovered";
1298
- highlight.addEventListener(event, () => {
1299
- if (event === "focus") {
1300
- audits.forEach((adt) => {
1301
- if (adt.card) adt.card.toggleAttribute("active", false);
1302
- });
1303
- if (!card.isManualFocus) card.scrollIntoView();
1304
- card.toggleAttribute("active", true);
1305
- } else card.toggleAttribute(attribute, true);
1306
- });
1307
- });
1308
- highlight.addEventListener("mouseout", () => {
1309
- card.toggleAttribute("hovered", false);
1310
- });
1311
- const { isFixed } = getElementsPositionInDocument(audit.auditedElement);
1312
- if (isFixed) tooltip.style.position = highlight.style.position = "fixed";
1313
- attachTooltipToHighlight(highlight, tooltip, audit.auditedElement);
1314
- return {
1315
- highlight,
1316
- card
1317
- };
1318
- }
1319
- function buildAuditTooltip(rule, element) {
1320
- const tooltip = document.createElement("astro-dev-toolbar-tooltip");
1321
- const { title, message } = rule;
1322
- tooltip.sections = [{
1323
- icon: "warning",
1324
- title: escape(title)
1325
- }, { content: escape(message) }];
1326
- const { file: elementFile, location: elementPosition } = getAnnotationsForElement(element) ?? {};
1327
- if (elementFile) {
1328
- const elementFileWithPosition = elementFile + (elementPosition ? ":" + elementPosition : "");
1329
- tooltip.sections.push({
1330
- content: elementFileWithPosition.slice(window.__astro_dev_toolbar__.root.length - 1),
1331
- clickDescription: "Click to go to file",
1332
- async clickAction() {
1333
- await fetch("/__open-in-editor?file=" + encodeURIComponent(elementFileWithPosition));
1334
- }
1335
- });
1336
- }
1337
- return tooltip;
1338
- }
1339
- function buildAuditCard(rule, highlightElement, auditedElement, audits) {
1340
- const card = document.createElement("astro-dev-toolbar-audit-list-item");
1341
- card.clickAction = () => {
1342
- if (card.hasAttribute("active")) return;
1343
- audits.forEach((audit) => {
1344
- audit.card?.toggleAttribute("active", false);
1345
- });
1346
- highlightElement.scrollIntoView();
1347
- card.isManualFocus = true;
1348
- highlightElement.focus();
1349
- card.isManualFocus = false;
1350
- };
1351
- const selectorTitleContainer = document.createElement("section");
1352
- selectorTitleContainer.classList.add("selector-title-container");
1353
- const selector = document.createElement("span");
1354
- const selectorName = truncate(auditedElement.tagName.toLowerCase(), 8);
1355
- selector.classList.add("audit-selector");
1356
- selector.innerHTML = escape(selectorName);
1357
- const title = document.createElement("h3");
1358
- title.classList.add("audit-title");
1359
- title.innerText = rule.title;
1360
- selectorTitleContainer.append(selector, title);
1361
- card.append(selectorTitleContainer);
1362
- const extendedInfo = document.createElement("div");
1363
- extendedInfo.classList.add("extended-info");
1364
- const selectorButton = document.createElement("button");
1365
- selectorButton.className = "audit-selector reset-button";
1366
- selectorButton.innerHTML = `${selectorName} <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256"><path d="M128,136v64a8,8,0,0,1-16,0V155.32L45.66,221.66a8,8,0,0,1-11.32-11.32L100.68,144H56a8,8,0,0,1,0-16h64A8,8,0,0,1,128,136ZM208,32H80A16,16,0,0,0,64,48V96a8,8,0,0,0,16,0V48H208V176H160a8,8,0,0,0,0,16h48a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32Z"></path></svg>`;
1367
- selectorButton.addEventListener("click", () => {
1368
- highlightElement.scrollIntoView();
1369
- highlightElement.focus();
1370
- });
1371
- extendedInfo.append(title.cloneNode(true));
1372
- extendedInfo.append(selectorButton);
1373
- extendedInfo.append(document.createElement("hr"));
1374
- const message = document.createElement("p");
1375
- message.classList.add("audit-message");
1376
- message.innerHTML = simpleRenderMarkdown(rule.message);
1377
- extendedInfo.appendChild(message);
1378
- const description = rule.description;
1379
- if (description) {
1380
- const descriptionElement = document.createElement("p");
1381
- descriptionElement.classList.add("audit-description");
1382
- descriptionElement.innerHTML = simpleRenderMarkdown(description);
1383
- extendedInfo.appendChild(descriptionElement);
1384
- }
1385
- card.shadowRoot.appendChild(extendedInfo);
1386
- return card;
1387
- }
1388
- var linkRegex = /\[([^[]+)\]\((.*)\)/g;
1389
- var boldRegex = /\*\*(.+)\*\*/g;
1390
- var codeRegex = /`([^`]+)`/g;
1391
- function simpleRenderMarkdown(markdown) {
1392
- return escape(markdown).replace(linkRegex, `<a href="$2" target="_blank">$1</a>`).replace(boldRegex, "<b>$1</b>").replace(codeRegex, "<code>$1</code>");
1393
- }
1394
- //#endregion
1395
- //#region ../../../node_modules/astro/dist/runtime/client/dev-toolbar/apps/audit/index.js
1396
- var icon = "<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 1 20 16\" aria-hidden=\"true\"><path fill=\"#fff\" d=\"M.6 2A1.1 1.1 0 0 1 1.7.9h16.6a1.1 1.1 0 1 1 0 2.2H1.6A1.1 1.1 0 0 1 .8 2Zm1.1 7.1h6a1.1 1.1 0 0 0 0-2.2h-6a1.1 1.1 0 0 0 0 2.2ZM9.3 13H1.8a1.1 1.1 0 1 0 0 2.2h7.5a1.1 1.1 0 1 0 0-2.2Zm11.3 1.9a1.1 1.1 0 0 1-1.5 0l-1.7-1.7a4.1 4.1 0 1 1 1.6-1.6l1.6 1.7a1.1 1.1 0 0 1 0 1.6Zm-5.3-3.4a1.9 1.9 0 1 0 0-3.8 1.9 1.9 0 0 0 0 3.8Z\"/></svg>";
1397
- try {
1398
- customElements.define("astro-dev-toolbar-audit-window", DevToolbarAuditListWindow);
1399
- customElements.define("astro-dev-toolbar-audit-list-item", DevToolbarAuditListItem);
1400
- } catch {}
1401
- var showState = false;
1402
- var audit_default = {
1403
- id: "astro:audit",
1404
- name: "Audit",
1405
- icon,
1406
- async init(canvas, eventTarget) {
1407
- let audits = [];
1408
- let auditWindow = document.createElement("astro-dev-toolbar-audit-window");
1409
- let hasCreatedUI = false;
1410
- auditWindow.popover = "";
1411
- canvas.appendChild(auditWindow);
1412
- await run();
1413
- let mutationDebounce;
1414
- const observer = new MutationObserver(() => {
1415
- if (mutationDebounce) clearTimeout(mutationDebounce);
1416
- mutationDebounce = setTimeout(() => {
1417
- settings.logger.verboseLog("Rerunning audit lints because the DOM has been updated.");
1418
- if ("requestIdleCallback" in window) window.requestIdleCallback(async () => {
1419
- run().then(() => {
1420
- if (showState) createAuditsUI();
1421
- });
1422
- }, { timeout: 300 });
1423
- else setTimeout(async () => {
1424
- run().then(() => {
1425
- if (showState) createAuditsUI();
1426
- });
1427
- }, 150);
1428
- }, 250);
1429
- });
1430
- setupObserver();
1431
- document.addEventListener("astro:before-preparation", () => {
1432
- observer.disconnect();
1433
- });
1434
- document.addEventListener("astro:after-swap", async () => {
1435
- run();
1436
- });
1437
- document.addEventListener("astro:page-load", async () => {
1438
- refreshLintPositions();
1439
- setTimeout(() => {
1440
- setupObserver();
1441
- }, 100);
1442
- });
1443
- eventTarget.addEventListener("app-toggled", (event) => {
1444
- if (event.detail.state === true) {
1445
- showState = true;
1446
- createAuditsUI();
1447
- } else showState = false;
1448
- });
1449
- closeOnOutsideClick(eventTarget, () => {
1450
- const activeAudits = audits.filter((audit) => audit.card?.hasAttribute("active"));
1451
- if (activeAudits.length > 0) {
1452
- activeAudits.forEach((audit) => {
1453
- audit.card?.toggleAttribute("active", false);
1454
- });
1455
- return true;
1456
- }
1457
- return false;
1458
- });
1459
- async function createAuditsUI() {
1460
- if (hasCreatedUI) return;
1461
- const fragment = document.createDocumentFragment();
1462
- for (const audit of audits) {
1463
- const { card, highlight } = createAuditUI(audit, audits);
1464
- audit.card = card;
1465
- audit.highlight = highlight;
1466
- fragment.appendChild(highlight);
1467
- }
1468
- auditWindow.audits = audits;
1469
- canvas.appendChild(fragment);
1470
- hasCreatedUI = true;
1471
- }
1472
- async function run() {
1473
- processAnnotations();
1474
- await lint();
1475
- }
1476
- async function lint() {
1477
- if (audits.length > 0) {
1478
- audits.forEach((audit) => {
1479
- audit.highlight?.remove();
1480
- audit.card?.remove();
1481
- });
1482
- audits = [];
1483
- hasCreatedUI = false;
1484
- }
1485
- const selectorCache = /* @__PURE__ */ new Map();
1486
- for (const ruleCategory of rulesCategories) for (const rule of ruleCategory.rules) {
1487
- const elements = selectorCache.get(rule.selector) ?? document.querySelectorAll(rule.selector);
1488
- let matches = [];
1489
- if (typeof rule.match === "undefined") matches = Array.from(elements);
1490
- else for (const element of elements) try {
1491
- if (await rule.match(element)) matches.push(element);
1492
- } catch (e) {
1493
- settings.logger.error(`Error while running audit's match function: ${e}`);
1494
- }
1495
- for (const element of matches) {
1496
- if (audits.some((audit) => audit.auditedElement === element)) continue;
1497
- await createAuditProblem(rule, element);
1498
- }
1499
- }
1500
- eventTarget.dispatchEvent(new CustomEvent("toggle-notification", { detail: { state: audits.length > 0 } }));
1501
- }
1502
- async function createAuditProblem(rule, originalElement) {
1503
- const computedStyle = window.getComputedStyle(originalElement);
1504
- if ((originalElement.children[0] || originalElement).offsetParent === null || computedStyle.display === "none") return;
1505
- if (originalElement.nodeName === "IMG" && !originalElement.complete) await new Promise((resolve) => {
1506
- originalElement.addEventListener("load", () => resolve(), { once: true });
1507
- originalElement.addEventListener("error", () => resolve(), { once: true });
1508
- });
1509
- audits.push({
1510
- auditedElement: originalElement,
1511
- rule,
1512
- card: null,
1513
- highlight: null
1514
- });
1515
- }
1516
- function refreshLintPositions() {
1517
- audits.forEach(({ highlight, auditedElement }) => {
1518
- const rect = auditedElement.getBoundingClientRect();
1519
- if (highlight) positionHighlight(highlight, rect);
1520
- });
1521
- }
1522
- ["scroll", "resize"].forEach((event) => {
1523
- window.addEventListener(event, refreshLintPositions);
1524
- });
1525
- function setupObserver() {
1526
- observer.observe(document.body, {
1527
- childList: true,
1528
- subtree: true
1529
- });
1530
- }
1531
- }
1532
- };
1533
- //#endregion
1534
- export { audit_default as default };