@wildo-ai/saas-website 1.1.1

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 (383) hide show
  1. package/LICENSE +34 -0
  2. package/dist/esm/.builder.pid +9 -0
  3. package/dist/esm/astro/blog-post-bridge.d.ts +324 -0
  4. package/dist/esm/astro/blog-post-bridge.d.ts.map +1 -0
  5. package/dist/esm/astro/blog-post-bridge.js +57 -0
  6. package/dist/esm/astro/blog-post-bridge.js.map +1 -0
  7. package/dist/esm/astro/blog-post-head.renderer.d.ts +129 -0
  8. package/dist/esm/astro/blog-post-head.renderer.d.ts.map +1 -0
  9. package/dist/esm/astro/blog-post-head.renderer.js +139 -0
  10. package/dist/esm/astro/blog-post-head.renderer.js.map +1 -0
  11. package/dist/esm/astro/bridge-runtime.d.ts +224 -0
  12. package/dist/esm/astro/bridge-runtime.d.ts.map +1 -0
  13. package/dist/esm/astro/bridge-runtime.js +30 -0
  14. package/dist/esm/astro/bridge-runtime.js.map +1 -0
  15. package/dist/esm/astro/collect-expected-label-keys.d.ts +65 -0
  16. package/dist/esm/astro/collect-expected-label-keys.d.ts.map +1 -0
  17. package/dist/esm/astro/collect-expected-label-keys.js +101 -0
  18. package/dist/esm/astro/collect-expected-label-keys.js.map +1 -0
  19. package/dist/esm/astro/headers-renderer.d.ts +32 -0
  20. package/dist/esm/astro/headers-renderer.d.ts.map +1 -0
  21. package/dist/esm/astro/headers-renderer.js +64 -0
  22. package/dist/esm/astro/headers-renderer.js.map +1 -0
  23. package/dist/esm/astro/i18n-routing.helper.d.ts +91 -0
  24. package/dist/esm/astro/i18n-routing.helper.d.ts.map +1 -0
  25. package/dist/esm/astro/i18n-routing.helper.js +23 -0
  26. package/dist/esm/astro/i18n-routing.helper.js.map +1 -0
  27. package/dist/esm/astro/internal/html-escape.d.ts +31 -0
  28. package/dist/esm/astro/internal/html-escape.d.ts.map +1 -0
  29. package/dist/esm/astro/internal/html-escape.js +40 -0
  30. package/dist/esm/astro/internal/html-escape.js.map +1 -0
  31. package/dist/esm/astro/label-pack-loader.d.ts +134 -0
  32. package/dist/esm/astro/label-pack-loader.d.ts.map +1 -0
  33. package/dist/esm/astro/label-pack-loader.js +298 -0
  34. package/dist/esm/astro/label-pack-loader.js.map +1 -0
  35. package/dist/esm/astro/llms-txt-server.d.ts +28 -0
  36. package/dist/esm/astro/llms-txt-server.d.ts.map +1 -0
  37. package/dist/esm/astro/llms-txt-server.js +33 -0
  38. package/dist/esm/astro/llms-txt-server.js.map +1 -0
  39. package/dist/esm/astro/pick-labels-for-page.d.ts +63 -0
  40. package/dist/esm/astro/pick-labels-for-page.d.ts.map +1 -0
  41. package/dist/esm/astro/pick-labels-for-page.js +73 -0
  42. package/dist/esm/astro/pick-labels-for-page.js.map +1 -0
  43. package/dist/esm/astro/robots-renderer.d.ts +85 -0
  44. package/dist/esm/astro/robots-renderer.d.ts.map +1 -0
  45. package/dist/esm/astro/robots-renderer.js +157 -0
  46. package/dist/esm/astro/robots-renderer.js.map +1 -0
  47. package/dist/esm/astro/sitemap-coverage.d.ts +101 -0
  48. package/dist/esm/astro/sitemap-coverage.d.ts.map +1 -0
  49. package/dist/esm/astro/sitemap-coverage.js +67 -0
  50. package/dist/esm/astro/sitemap-coverage.js.map +1 -0
  51. package/dist/esm/astro/structured-data.renderer.d.ts +21 -0
  52. package/dist/esm/astro/structured-data.renderer.d.ts.map +1 -0
  53. package/dist/esm/astro/structured-data.renderer.js +142 -0
  54. package/dist/esm/astro/structured-data.renderer.js.map +1 -0
  55. package/dist/esm/astro/website-page-head.renderer.d.ts +93 -0
  56. package/dist/esm/astro/website-page-head.renderer.d.ts.map +1 -0
  57. package/dist/esm/astro/website-page-head.renderer.js +184 -0
  58. package/dist/esm/astro/website-page-head.renderer.js.map +1 -0
  59. package/dist/esm/astro/website-page-runtime.helper.d.ts +112 -0
  60. package/dist/esm/astro/website-page-runtime.helper.d.ts.map +1 -0
  61. package/dist/esm/astro/website-page-runtime.helper.js +60 -0
  62. package/dist/esm/astro/website-page-runtime.helper.js.map +1 -0
  63. package/dist/esm/astro/website-site-context.d.ts +126 -0
  64. package/dist/esm/astro/website-site-context.d.ts.map +1 -0
  65. package/dist/esm/astro/website-site-context.js +37 -0
  66. package/dist/esm/astro/website-site-context.js.map +1 -0
  67. package/dist/esm/astro-island.d.ts +56 -0
  68. package/dist/esm/astro-island.d.ts.map +1 -0
  69. package/dist/esm/astro-island.js +61 -0
  70. package/dist/esm/astro-island.js.map +1 -0
  71. package/dist/esm/astro.d.ts +151 -0
  72. package/dist/esm/astro.d.ts.map +1 -0
  73. package/dist/esm/astro.js +151 -0
  74. package/dist/esm/astro.js.map +1 -0
  75. package/dist/esm/companion-exports.d.ts +38 -0
  76. package/dist/esm/companion-exports.d.ts.map +1 -0
  77. package/dist/esm/companion-exports.js +38 -0
  78. package/dist/esm/companion-exports.js.map +1 -0
  79. package/dist/esm/components/low-level/WebsiteButton.d.ts +73 -0
  80. package/dist/esm/components/low-level/WebsiteButton.d.ts.map +1 -0
  81. package/dist/esm/components/low-level/WebsiteButton.js +68 -0
  82. package/dist/esm/components/low-level/WebsiteButton.js.map +1 -0
  83. package/dist/esm/components/low-level/WebsiteHeading.d.ts +78 -0
  84. package/dist/esm/components/low-level/WebsiteHeading.d.ts.map +1 -0
  85. package/dist/esm/components/low-level/WebsiteHeading.js +41 -0
  86. package/dist/esm/components/low-level/WebsiteHeading.js.map +1 -0
  87. package/dist/esm/components/low-level/WebsiteImage.d.ts +73 -0
  88. package/dist/esm/components/low-level/WebsiteImage.d.ts.map +1 -0
  89. package/dist/esm/components/low-level/WebsiteImage.js +21 -0
  90. package/dist/esm/components/low-level/WebsiteImage.js.map +1 -0
  91. package/dist/esm/components/low-level/WebsiteInternalButton.d.ts +90 -0
  92. package/dist/esm/components/low-level/WebsiteInternalButton.d.ts.map +1 -0
  93. package/dist/esm/components/low-level/WebsiteInternalButton.js +47 -0
  94. package/dist/esm/components/low-level/WebsiteInternalButton.js.map +1 -0
  95. package/dist/esm/components/low-level/WebsiteInternalLink.d.ts +99 -0
  96. package/dist/esm/components/low-level/WebsiteInternalLink.d.ts.map +1 -0
  97. package/dist/esm/components/low-level/WebsiteInternalLink.js +68 -0
  98. package/dist/esm/components/low-level/WebsiteInternalLink.js.map +1 -0
  99. package/dist/esm/components/low-level/WebsiteLink.d.ts +50 -0
  100. package/dist/esm/components/low-level/WebsiteLink.d.ts.map +1 -0
  101. package/dist/esm/components/low-level/WebsiteLink.js +22 -0
  102. package/dist/esm/components/low-level/WebsiteLink.js.map +1 -0
  103. package/dist/esm/components/low-level/WebsiteText.d.ts +57 -0
  104. package/dist/esm/components/low-level/WebsiteText.d.ts.map +1 -0
  105. package/dist/esm/components/low-level/WebsiteText.js +57 -0
  106. package/dist/esm/components/low-level/WebsiteText.js.map +1 -0
  107. package/dist/esm/config/define-website-config.d.ts +83 -0
  108. package/dist/esm/config/define-website-config.d.ts.map +1 -0
  109. package/dist/esm/config/define-website-config.js +126 -0
  110. package/dist/esm/config/define-website-config.js.map +1 -0
  111. package/dist/esm/config/index.d.ts +38 -0
  112. package/dist/esm/config/index.d.ts.map +1 -0
  113. package/dist/esm/config/index.js +38 -0
  114. package/dist/esm/config/index.js.map +1 -0
  115. package/dist/esm/config/load-website-config.d.ts +136 -0
  116. package/dist/esm/config/load-website-config.d.ts.map +1 -0
  117. package/dist/esm/config/load-website-config.js +177 -0
  118. package/dist/esm/config/load-website-config.js.map +1 -0
  119. package/dist/esm/config/wildo-website-config.schemas.d.ts +251 -0
  120. package/dist/esm/config/wildo-website-config.schemas.d.ts.map +1 -0
  121. package/dist/esm/config/wildo-website-config.schemas.js +302 -0
  122. package/dist/esm/config/wildo-website-config.schemas.js.map +1 -0
  123. package/dist/esm/config-loader.d.ts +35 -0
  124. package/dist/esm/config-loader.d.ts.map +1 -0
  125. package/dist/esm/config-loader.js +35 -0
  126. package/dist/esm/config-loader.js.map +1 -0
  127. package/dist/esm/core/anonymous-session/InboundContactForm.d.ts +38 -0
  128. package/dist/esm/core/anonymous-session/InboundContactForm.d.ts.map +1 -0
  129. package/dist/esm/core/anonymous-session/InboundContactForm.js +77 -0
  130. package/dist/esm/core/anonymous-session/InboundContactForm.js.map +1 -0
  131. package/dist/esm/core/anonymous-session/inbound-contact-form.schema.d.ts +41 -0
  132. package/dist/esm/core/anonymous-session/inbound-contact-form.schema.d.ts.map +1 -0
  133. package/dist/esm/core/anonymous-session/inbound-contact-form.schema.js +58 -0
  134. package/dist/esm/core/anonymous-session/inbound-contact-form.schema.js.map +1 -0
  135. package/dist/esm/core/anonymous-session/website-anonymous-session-client.d.ts +81 -0
  136. package/dist/esm/core/anonymous-session/website-anonymous-session-client.d.ts.map +1 -0
  137. package/dist/esm/core/anonymous-session/website-anonymous-session-client.js +177 -0
  138. package/dist/esm/core/anonymous-session/website-anonymous-session-client.js.map +1 -0
  139. package/dist/esm/core/contexts/WebsitePageContext.d.ts +40 -0
  140. package/dist/esm/core/contexts/WebsitePageContext.d.ts.map +1 -0
  141. package/dist/esm/core/contexts/WebsitePageContext.js +8 -0
  142. package/dist/esm/core/contexts/WebsitePageContext.js.map +1 -0
  143. package/dist/esm/core/contexts/WebsiteRuntimeContext.d.ts +162 -0
  144. package/dist/esm/core/contexts/WebsiteRuntimeContext.d.ts.map +1 -0
  145. package/dist/esm/core/contexts/WebsiteRuntimeContext.js +22 -0
  146. package/dist/esm/core/contexts/WebsiteRuntimeContext.js.map +1 -0
  147. package/dist/esm/core/contexts/WebsiteSectionContext.d.ts +47 -0
  148. package/dist/esm/core/contexts/WebsiteSectionContext.d.ts.map +1 -0
  149. package/dist/esm/core/contexts/WebsiteSectionContext.js +8 -0
  150. package/dist/esm/core/contexts/WebsiteSectionContext.js.map +1 -0
  151. package/dist/esm/core/contexts/useWebsitePage.d.ts +13 -0
  152. package/dist/esm/core/contexts/useWebsitePage.d.ts.map +1 -0
  153. package/dist/esm/core/contexts/useWebsitePage.js +22 -0
  154. package/dist/esm/core/contexts/useWebsitePage.js.map +1 -0
  155. package/dist/esm/core/contexts/useWebsiteRuntime.d.ts +19 -0
  156. package/dist/esm/core/contexts/useWebsiteRuntime.d.ts.map +1 -0
  157. package/dist/esm/core/contexts/useWebsiteRuntime.js +28 -0
  158. package/dist/esm/core/contexts/useWebsiteRuntime.js.map +1 -0
  159. package/dist/esm/core/contexts/useWebsiteSection.d.ts +12 -0
  160. package/dist/esm/core/contexts/useWebsiteSection.d.ts.map +1 -0
  161. package/dist/esm/core/contexts/useWebsiteSection.js +22 -0
  162. package/dist/esm/core/contexts/useWebsiteSection.js.map +1 -0
  163. package/dist/esm/core/external-providers/frontend-provider-registry.website.d.ts +17 -0
  164. package/dist/esm/core/external-providers/frontend-provider-registry.website.d.ts.map +1 -0
  165. package/dist/esm/core/external-providers/frontend-provider-registry.website.js +23 -0
  166. package/dist/esm/core/external-providers/frontend-provider-registry.website.js.map +1 -0
  167. package/dist/esm/core/factories/define-website-page-manifest.d.ts +70 -0
  168. package/dist/esm/core/factories/define-website-page-manifest.d.ts.map +1 -0
  169. package/dist/esm/core/factories/define-website-page-manifest.js +51 -0
  170. package/dist/esm/core/factories/define-website-page-manifest.js.map +1 -0
  171. package/dist/esm/core/factories/define-website-section.d.ts +101 -0
  172. package/dist/esm/core/factories/define-website-section.d.ts.map +1 -0
  173. package/dist/esm/core/factories/define-website-section.js +71 -0
  174. package/dist/esm/core/factories/define-website-section.js.map +1 -0
  175. package/dist/esm/core/hooks/useWebsiteDesignTokens.d.ts +23 -0
  176. package/dist/esm/core/hooks/useWebsiteDesignTokens.d.ts.map +1 -0
  177. package/dist/esm/core/hooks/useWebsiteDesignTokens.js +25 -0
  178. package/dist/esm/core/hooks/useWebsiteDesignTokens.js.map +1 -0
  179. package/dist/esm/core/hooks/useWebsiteLabel.d.ts +68 -0
  180. package/dist/esm/core/hooks/useWebsiteLabel.d.ts.map +1 -0
  181. package/dist/esm/core/hooks/useWebsiteLabel.js +103 -0
  182. package/dist/esm/core/hooks/useWebsiteLabel.js.map +1 -0
  183. package/dist/esm/core/layouts/WebsitePageLayout.d.ts +87 -0
  184. package/dist/esm/core/layouts/WebsitePageLayout.d.ts.map +1 -0
  185. package/dist/esm/core/layouts/WebsitePageLayout.js +170 -0
  186. package/dist/esm/core/layouts/WebsitePageLayout.js.map +1 -0
  187. package/dist/esm/core/layouts/WebsiteSection.d.ts +91 -0
  188. package/dist/esm/core/layouts/WebsiteSection.d.ts.map +1 -0
  189. package/dist/esm/core/layouts/WebsiteSection.js +26 -0
  190. package/dist/esm/core/layouts/WebsiteSection.js.map +1 -0
  191. package/dist/esm/core/routing/internal-routing.utils.d.ts +65 -0
  192. package/dist/esm/core/routing/internal-routing.utils.d.ts.map +1 -0
  193. package/dist/esm/core/routing/internal-routing.utils.js +14 -0
  194. package/dist/esm/core/routing/internal-routing.utils.js.map +1 -0
  195. package/dist/esm/index.d.ts +129 -0
  196. package/dist/esm/index.d.ts.map +1 -0
  197. package/dist/esm/index.js +129 -0
  198. package/dist/esm/index.js.map +1 -0
  199. package/dist/esm/mdx/BlogPost.d.ts +193 -0
  200. package/dist/esm/mdx/BlogPost.d.ts.map +1 -0
  201. package/dist/esm/mdx/BlogPost.js +161 -0
  202. package/dist/esm/mdx/BlogPost.js.map +1 -0
  203. package/dist/esm/mdx/blog-post-collection.config.d.ts +139 -0
  204. package/dist/esm/mdx/blog-post-collection.config.d.ts.map +1 -0
  205. package/dist/esm/mdx/blog-post-collection.config.js +27 -0
  206. package/dist/esm/mdx/blog-post-collection.config.js.map +1 -0
  207. package/dist/esm/mdx/blog-post-frontmatter-source.d.ts +12 -0
  208. package/dist/esm/mdx/blog-post-frontmatter-source.d.ts.map +1 -0
  209. package/dist/esm/mdx/blog-post-frontmatter-source.js +13 -0
  210. package/dist/esm/mdx/blog-post-frontmatter-source.js.map +1 -0
  211. package/dist/esm/mdx/index.d.ts +22 -0
  212. package/dist/esm/mdx/index.d.ts.map +1 -0
  213. package/dist/esm/mdx/index.js +22 -0
  214. package/dist/esm/mdx/index.js.map +1 -0
  215. package/dist/esm/mdx/website-mdx-provider.d.ts +90 -0
  216. package/dist/esm/mdx/website-mdx-provider.d.ts.map +1 -0
  217. package/dist/esm/mdx/website-mdx-provider.js +8 -0
  218. package/dist/esm/mdx/website-mdx-provider.js.map +1 -0
  219. package/dist/esm/mdx.d.ts +38 -0
  220. package/dist/esm/mdx.d.ts.map +1 -0
  221. package/dist/esm/mdx.js +38 -0
  222. package/dist/esm/mdx.js.map +1 -0
  223. package/dist/esm/schemas/blog/blog-post-frontmatter.shared.schemas.d.ts +75 -0
  224. package/dist/esm/schemas/blog/blog-post-frontmatter.shared.schemas.d.ts.map +1 -0
  225. package/dist/esm/schemas/blog/blog-post-frontmatter.shared.schemas.js +85 -0
  226. package/dist/esm/schemas/blog/blog-post-frontmatter.shared.schemas.js.map +1 -0
  227. package/dist/esm/schemas/design-tokens/website-design-tokens.shared.schemas.d.ts +120 -0
  228. package/dist/esm/schemas/design-tokens/website-design-tokens.shared.schemas.d.ts.map +1 -0
  229. package/dist/esm/schemas/design-tokens/website-design-tokens.shared.schemas.js +152 -0
  230. package/dist/esm/schemas/design-tokens/website-design-tokens.shared.schemas.js.map +1 -0
  231. package/dist/esm/schemas/label-keys/website-label-key.schemas.d.ts +73 -0
  232. package/dist/esm/schemas/label-keys/website-label-key.schemas.d.ts.map +1 -0
  233. package/dist/esm/schemas/label-keys/website-label-key.schemas.js +76 -0
  234. package/dist/esm/schemas/label-keys/website-label-key.schemas.js.map +1 -0
  235. package/dist/esm/schemas/manifests/website-page-manifest.shared.schemas.d.ts +209 -0
  236. package/dist/esm/schemas/manifests/website-page-manifest.shared.schemas.d.ts.map +1 -0
  237. package/dist/esm/schemas/manifests/website-page-manifest.shared.schemas.js +218 -0
  238. package/dist/esm/schemas/manifests/website-page-manifest.shared.schemas.js.map +1 -0
  239. package/dist/esm/schemas/manifests/website-root-config.shared.schemas.d.ts +431 -0
  240. package/dist/esm/schemas/manifests/website-root-config.shared.schemas.d.ts.map +1 -0
  241. package/dist/esm/schemas/manifests/website-root-config.shared.schemas.js +438 -0
  242. package/dist/esm/schemas/manifests/website-root-config.shared.schemas.js.map +1 -0
  243. package/dist/esm/schemas/refs/page-ref.schemas.d.ts +40 -0
  244. package/dist/esm/schemas/refs/page-ref.schemas.d.ts.map +1 -0
  245. package/dist/esm/schemas/refs/page-ref.schemas.js +43 -0
  246. package/dist/esm/schemas/refs/page-ref.schemas.js.map +1 -0
  247. package/dist/esm/schemas/refs/section-ref.schemas.d.ts +41 -0
  248. package/dist/esm/schemas/refs/section-ref.schemas.d.ts.map +1 -0
  249. package/dist/esm/schemas/refs/section-ref.schemas.js +44 -0
  250. package/dist/esm/schemas/refs/section-ref.schemas.js.map +1 -0
  251. package/dist/esm/schemas/sections/website-section-category.shared.d.ts +63 -0
  252. package/dist/esm/schemas/sections/website-section-category.shared.d.ts.map +1 -0
  253. package/dist/esm/schemas/sections/website-section-category.shared.js +64 -0
  254. package/dist/esm/schemas/sections/website-section-category.shared.js.map +1 -0
  255. package/dist/esm/schemas/sections/website-section-definition.shared.schemas.d.ts +114 -0
  256. package/dist/esm/schemas/sections/website-section-definition.shared.schemas.d.ts.map +1 -0
  257. package/dist/esm/schemas/sections/website-section-definition.shared.schemas.js +69 -0
  258. package/dist/esm/schemas/sections/website-section-definition.shared.schemas.js.map +1 -0
  259. package/dist/esm/schemas/structured-data/structured-data-reconciliation.shared.d.ts +100 -0
  260. package/dist/esm/schemas/structured-data/structured-data-reconciliation.shared.d.ts.map +1 -0
  261. package/dist/esm/schemas/structured-data/structured-data-reconciliation.shared.js +355 -0
  262. package/dist/esm/schemas/structured-data/structured-data-reconciliation.shared.js.map +1 -0
  263. package/dist/esm/schemas/structured-data/website-structured-data.shared.schemas.d.ts +58 -0
  264. package/dist/esm/schemas/structured-data/website-structured-data.shared.schemas.d.ts.map +1 -0
  265. package/dist/esm/schemas/structured-data/website-structured-data.shared.schemas.js +2 -0
  266. package/dist/esm/schemas/structured-data/website-structured-data.shared.schemas.js.map +1 -0
  267. package/dist/esm/schemas/validators/label-pack.validator.d.ts +144 -0
  268. package/dist/esm/schemas/validators/label-pack.validator.d.ts.map +1 -0
  269. package/dist/esm/schemas/validators/label-pack.validator.js +100 -0
  270. package/dist/esm/schemas/validators/label-pack.validator.js.map +1 -0
  271. package/dist/tsconfig.build.tsbuildinfo +1 -0
  272. package/package.json +143 -0
  273. package/src/__tests__/bundle-isolation.test.ts +607 -0
  274. package/src/astro/__tests__/blog-post-bridge.test.tsx +288 -0
  275. package/src/astro/__tests__/blog-post-head.renderer.test.ts +249 -0
  276. package/src/astro/__tests__/bridge-runtime.test.tsx +198 -0
  277. package/src/astro/__tests__/collect-expected-label-keys.test.ts +69 -0
  278. package/src/astro/__tests__/headers-renderer.test.ts +143 -0
  279. package/src/astro/__tests__/i18n-routing.helper.test.ts +116 -0
  280. package/src/astro/__tests__/label-pack-loader.test.ts +305 -0
  281. package/src/astro/__tests__/llms-txt-server.test.ts +127 -0
  282. package/src/astro/__tests__/pick-labels-for-page.test.ts +60 -0
  283. package/src/astro/__tests__/robots-renderer.test.ts +228 -0
  284. package/src/astro/__tests__/sitemap-coverage.test.ts +230 -0
  285. package/src/astro/__tests__/structured-data.renderer.test.ts +172 -0
  286. package/src/astro/__tests__/website-page-head.renderer.test.ts +424 -0
  287. package/src/astro/__tests__/website-page-runtime.helper.test.ts +157 -0
  288. package/src/astro/__tests__/website-site-context.test.ts +121 -0
  289. package/src/astro/blog-post-bridge.tsx +404 -0
  290. package/src/astro/blog-post-head.renderer.ts +293 -0
  291. package/src/astro/bridge-runtime.tsx +270 -0
  292. package/src/astro/collect-expected-label-keys.ts +113 -0
  293. package/src/astro/headers-renderer.ts +82 -0
  294. package/src/astro/i18n-routing.helper.ts +116 -0
  295. package/src/astro/internal/html-escape.ts +41 -0
  296. package/src/astro/label-pack-loader.ts +385 -0
  297. package/src/astro/llms-txt-server.ts +56 -0
  298. package/src/astro/pick-labels-for-page.ts +85 -0
  299. package/src/astro/robots-renderer.ts +171 -0
  300. package/src/astro/sitemap-coverage.ts +186 -0
  301. package/src/astro/structured-data.renderer.ts +171 -0
  302. package/src/astro/website-page-head.renderer.ts +279 -0
  303. package/src/astro/website-page-runtime.helper.ts +188 -0
  304. package/src/astro/website-site-context.ts +136 -0
  305. package/src/astro-island.ts +61 -0
  306. package/src/astro.ts +151 -0
  307. package/src/companion-exports.ts +38 -0
  308. package/src/components/low-level/WebsiteButton.tsx +118 -0
  309. package/src/components/low-level/WebsiteHeading.tsx +96 -0
  310. package/src/components/low-level/WebsiteImage.tsx +96 -0
  311. package/src/components/low-level/WebsiteInternalButton.tsx +172 -0
  312. package/src/components/low-level/WebsiteInternalLink.tsx +193 -0
  313. package/src/components/low-level/WebsiteLink.tsx +71 -0
  314. package/src/components/low-level/WebsiteText.tsx +75 -0
  315. package/src/components/low-level/__tests__/WebsiteInternalButton.test.tsx +169 -0
  316. package/src/components/low-level/__tests__/WebsiteInternalLink.test.tsx +202 -0
  317. package/src/components/low-level/__tests__/primitives.test.tsx +141 -0
  318. package/src/config/__tests__/define-website-config.test.ts +231 -0
  319. package/src/config/__tests__/load-website-config.test.ts +215 -0
  320. package/src/config/define-website-config.ts +134 -0
  321. package/src/config/index.ts +38 -0
  322. package/src/config/load-website-config.ts +229 -0
  323. package/src/config/wildo-website-config.schemas.ts +322 -0
  324. package/src/config-loader.ts +35 -0
  325. package/src/core/__tests__/WebsitePageLayout.test.tsx +184 -0
  326. package/src/core/__tests__/WebsiteSection.test.tsx +85 -0
  327. package/src/core/__tests__/contexts.test.tsx +133 -0
  328. package/src/core/__tests__/core-boundary.test.ts +85 -0
  329. package/src/core/__tests__/define-website-page-manifest.test.tsx +111 -0
  330. package/src/core/__tests__/define-website-section.test.tsx +89 -0
  331. package/src/core/__tests__/useWebsiteDesignTokens.test.tsx +41 -0
  332. package/src/core/__tests__/useWebsiteLabel.test.tsx +117 -0
  333. package/src/core/anonymous-session/InboundContactForm.tsx +157 -0
  334. package/src/core/anonymous-session/__tests__/inbound-contact-form.schema.test.ts +44 -0
  335. package/src/core/anonymous-session/inbound-contact-form.schema.ts +62 -0
  336. package/src/core/anonymous-session/website-anonymous-session-client.ts +194 -0
  337. package/src/core/contexts/WebsitePageContext.tsx +52 -0
  338. package/src/core/contexts/WebsiteRuntimeContext.tsx +175 -0
  339. package/src/core/contexts/WebsiteSectionContext.tsx +59 -0
  340. package/src/core/contexts/useWebsitePage.ts +28 -0
  341. package/src/core/contexts/useWebsiteRuntime.ts +34 -0
  342. package/src/core/contexts/useWebsiteSection.ts +28 -0
  343. package/src/core/external-providers/frontend-provider-registry.website.ts +62 -0
  344. package/src/core/factories/define-website-page-manifest.ts +102 -0
  345. package/src/core/factories/define-website-section.ts +128 -0
  346. package/src/core/hooks/useWebsiteDesignTokens.ts +26 -0
  347. package/src/core/hooks/useWebsiteLabel.ts +121 -0
  348. package/src/core/layouts/WebsitePageLayout.tsx +311 -0
  349. package/src/core/layouts/WebsiteSection.tsx +139 -0
  350. package/src/core/routing/__tests__/internal-routing.utils.test.ts +134 -0
  351. package/src/core/routing/internal-routing.utils.ts +77 -0
  352. package/src/index.ts +132 -0
  353. package/src/mdx/BlogPost.tsx +296 -0
  354. package/src/mdx/__tests__/BlogPost.test.tsx +218 -0
  355. package/src/mdx/__tests__/blog-post-collection.config.test.ts +127 -0
  356. package/src/mdx/__tests__/website-mdx-provider.test.tsx +82 -0
  357. package/src/mdx/blog-post-collection.config.ts +177 -0
  358. package/src/mdx/blog-post-frontmatter-source.ts +31 -0
  359. package/src/mdx/index.ts +39 -0
  360. package/src/mdx/website-mdx-provider.tsx +95 -0
  361. package/src/mdx.ts +38 -0
  362. package/src/schemas/__tests__/blog-frontmatter.test.ts +50 -0
  363. package/src/schemas/__tests__/companion-exports-react-free.test.ts +51 -0
  364. package/src/schemas/__tests__/design-tokens.test.ts +163 -0
  365. package/src/schemas/__tests__/label-key.test.ts +46 -0
  366. package/src/schemas/__tests__/label-pack-validator.test.ts +146 -0
  367. package/src/schemas/__tests__/page-manifest.test.ts +66 -0
  368. package/src/schemas/__tests__/refs.test.ts +37 -0
  369. package/src/schemas/__tests__/root-config.test.ts +292 -0
  370. package/src/schemas/__tests__/section-definition.test.ts +47 -0
  371. package/src/schemas/__tests__/structured-data-reconciliation.test.ts +543 -0
  372. package/src/schemas/blog/blog-post-frontmatter.shared.schemas.ts +111 -0
  373. package/src/schemas/design-tokens/website-design-tokens.shared.schemas.ts +166 -0
  374. package/src/schemas/label-keys/website-label-key.schemas.ts +88 -0
  375. package/src/schemas/manifests/website-page-manifest.shared.schemas.ts +266 -0
  376. package/src/schemas/manifests/website-root-config.shared.schemas.ts +504 -0
  377. package/src/schemas/refs/page-ref.schemas.ts +49 -0
  378. package/src/schemas/refs/section-ref.schemas.ts +50 -0
  379. package/src/schemas/sections/website-section-category.shared.ts +65 -0
  380. package/src/schemas/sections/website-section-definition.shared.schemas.ts +120 -0
  381. package/src/schemas/structured-data/structured-data-reconciliation.shared.ts +579 -0
  382. package/src/schemas/structured-data/website-structured-data.shared.schemas.ts +62 -0
  383. package/src/schemas/validators/label-pack.validator.ts +201 -0
@@ -0,0 +1,431 @@
1
+ import type { ComponentType } from 'react';
2
+ import { z } from 'zod';
3
+ import { type WebsitePageManifest } from './website-page-manifest.shared.schemas';
4
+ /**
5
+ * @wildo_source:part:start saas.website.seo.sitemap-config facet:layer:shared facet:family:website
6
+ *
7
+ * `WebsiteSitemapConfig` — site-wide sitemap policy block.
8
+ *
9
+ * Materialized at build time by `@astrojs/sitemap` (the official
10
+ * Astro plugin) when the consumer wires it into `astro.config.ts`
11
+ * (see `website-seo-aeo-geo` SKILL). The framework owns the
12
+ * **schema** (so config + enforcement live in lock-step with the
13
+ * page registry) but the framework does NOT own the runtime
14
+ * generator — `@astrojs/sitemap` already covers per-page
15
+ * `lastmod` / `changefreq` / `priority` + i18n `xhtml:link
16
+ * hreflang` annotations natively, and re-implementing that surface
17
+ * inside the engine would duplicate well-trodden Astro tooling for
18
+ * zero added value.
19
+ *
20
+ * # Field rationale
21
+ *
22
+ * **Why `enabled` defaults to `true`**:
23
+ * - Marketing sites that want to ship public pages overwhelmingly
24
+ * also want them in `sitemap.xml` (search engines treat its
25
+ * absence as a discoverability signal). The opt-OUT shape avoids
26
+ * a silent regression where a consumer ships pages that crawlers
27
+ * never index because they forgot to flip a flag.
28
+ * - The escape hatch (`enabled: false`) covers staging deployments
29
+ * and the rare per-app decision to suppress sitemap emission
30
+ * entirely (e.g. a private beta surface routed under a
31
+ * `noindex` policy).
32
+ *
33
+ * **Why `changefreq` / `priority` are OPTIONAL** (no defaults):
34
+ * - Both fields are non-binding hints — Google explicitly
35
+ * ignores `priority` and treats `changefreq` as a soft signal.
36
+ * Forcing the consumer to pick a value would either invite
37
+ * superstitious authoring (`priority: 1.0` on every page) or
38
+ * bury the field's actual ergonomic shape (per-page overrides
39
+ * via `WebsitePageManifest.seo` — deferred until a real
40
+ * consumer requests it).
41
+ * - Unset values are simply omitted from the emitted `<url>`
42
+ * entries; `@astrojs/sitemap` handles that automatically.
43
+ *
44
+ * **Validation**:
45
+ * - `priority` is `z.number().min(0).max(1)` — outside the spec
46
+ * range would silently break crawler ingestion.
47
+ * - `changefreq` is the union of the seven values the sitemap
48
+ * spec defines; arbitrary strings would be silently dropped by
49
+ * compliant crawlers.
50
+ */
51
+ declare const _WebsiteSitemapConfigSchema: z.ZodObject<{
52
+ enabled: z.ZodDefault<z.ZodBoolean>;
53
+ changefreq: z.ZodOptional<z.ZodEnum<{
54
+ never: "never";
55
+ always: "always";
56
+ hourly: "hourly";
57
+ daily: "daily";
58
+ weekly: "weekly";
59
+ monthly: "monthly";
60
+ yearly: "yearly";
61
+ }>>;
62
+ priority: z.ZodOptional<z.ZodNumber>;
63
+ }, z.core.$strip>;
64
+ export declare const WebsiteSitemapConfigSchema: typeof _WebsiteSitemapConfigSchema;
65
+ export type WebsiteSitemapConfig = z.infer<typeof _WebsiteSitemapConfigSchema>;
66
+ /** @wildo_source:part:end saas.website.seo.sitemap-config */
67
+ /**
68
+ * @wildo_source:part:start saas.website.seo.robots-config facet:layer:shared facet:family:website
69
+ *
70
+ * `WebsiteRobotsConfig` — site-wide `robots.txt` policy block.
71
+ *
72
+ * Materialized at request time by `renderRobotsTxt(siteContext)`
73
+ * from `@wildo-ai/saas-website/astro` (consumer wires a thin
74
+ * `src/pages/robots.txt.ts` Astro endpoint that returns the helper's
75
+ * output). Scoped to the SITE-WIDE policy surface — per-page
76
+ * `noindex` is a separate concern that lands on
77
+ * `WebsitePageManifest.seo` once a real consumer requests it (today
78
+ * the site-wide `disallow[]` covers staging-environment exclusion of
79
+ * specific path prefixes, the dominant real-world use case).
80
+ *
81
+ * # Field rationale
82
+ *
83
+ * **Why `policy` defaults to `'index'`**:
84
+ * - The default for a public marketing site is "let crawlers in";
85
+ * `'noindex'` is the deliberate exception (staging environments,
86
+ * beta surfaces, sites still under construction). The opt-OUT
87
+ * shape mirrors `WebsiteSitemapConfig.enabled` for consistency.
88
+ * - `'noindex'` emits a `User-agent: *\nDisallow: /` block — the
89
+ * standard "tell every well-behaved crawler to stay away"
90
+ * primitive.
91
+ *
92
+ * **Why `disallow[]` is a path-prefix list (not a regex)**:
93
+ * - The `robots.txt` spec only supports literal path prefixes
94
+ * with `*` / `$` wildcards; Disallow is NOT a regex surface.
95
+ * Typing it as `string[]` (validated to start with `/`) keeps
96
+ * the contract honest and lets consumers paste from their CDN
97
+ * allowlists without translation.
98
+ *
99
+ * **Why `allowedCrawlers` and `disallowedCrawlers` are mutually
100
+ * exclusive**:
101
+ * - The two fields are two halves of the SAME AI-crawler policy
102
+ * decision. `allowedCrawlers` is the deny-by-default shape
103
+ * (only the named bots may crawl); `disallowedCrawlers` is the
104
+ * allow-by-default shape (every bot except the named ones may
105
+ * crawl). Mixing both would emit a contradictory `robots.txt`
106
+ * (a bot in both lists would receive conflicting directives).
107
+ * A `superRefine` enforces the mutual-exclusion invariant at
108
+ * parse time so the build fails fast.
109
+ *
110
+ * **Validation**:
111
+ * - `disallow[]` entries must start with `/` (sitemap path-prefix
112
+ * spec) — anything else would silently match nothing.
113
+ * - `allowedCrawlers` / `disallowedCrawlers` entries must be
114
+ * non-empty strings (a blank User-agent token would emit
115
+ * `User-agent: ` which compliant crawlers ignore — silent
116
+ * misconfig).
117
+ * - `superRefine` rejects the combined-list anti-pattern.
118
+ */
119
+ declare const _WebsiteRobotsConfigSchema: z.ZodObject<{
120
+ policy: z.ZodDefault<z.ZodEnum<{
121
+ index: "index";
122
+ noindex: "noindex";
123
+ }>>;
124
+ disallow: z.ZodOptional<z.ZodArray<z.ZodString>>;
125
+ allowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
126
+ disallowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
127
+ }, z.core.$strip>;
128
+ export declare const WebsiteRobotsConfigSchema: typeof _WebsiteRobotsConfigSchema;
129
+ export type WebsiteRobotsConfig = z.infer<typeof _WebsiteRobotsConfigSchema>;
130
+ /** @wildo_source:part:end saas.website.seo.robots-config */
131
+ /**
132
+ * @wildo_source:part:start saas.website.seo.llms-txt-config facet:layer:shared facet:family:website
133
+ *
134
+ * `WebsiteLlmsTxtConfig` — site-wide `llms.txt` publication policy.
135
+ *
136
+ * The framework owns only the SERVING surface; the CONTENT remains
137
+ * hand-authored in `src/content/llms.txt`. This block therefore needs
138
+ * exactly one knob:
139
+ *
140
+ * - `enabled?: boolean`
141
+ * - `true` → publish when the file exists
142
+ * - `false` → suppress publication even if the file exists
143
+ * - `undefined` → auto-detect (`readLlmsTxtBody` publishes when the
144
+ * file exists, returns `null` when absent)
145
+ *
146
+ * Keeping the "auto-detect when undefined" convention in the HELPER
147
+ * (not as a schema default) is deliberate: schema defaults are static,
148
+ * while file presence is runtime/build-time state.
149
+ */
150
+ declare const _WebsiteLlmsTxtConfigSchema: z.ZodObject<{
151
+ enabled: z.ZodOptional<z.ZodBoolean>;
152
+ }, z.core.$strip>;
153
+ export declare const WebsiteLlmsTxtConfigSchema: typeof _WebsiteLlmsTxtConfigSchema;
154
+ export type WebsiteLlmsTxtConfig = z.infer<typeof _WebsiteLlmsTxtConfigSchema>;
155
+ /** @wildo_source:part:end saas.website.seo.llms-txt-config */
156
+ /**
157
+ * @wildo_source:part:start saas.website.root-config.seo facet:layer:shared facet:family:website
158
+ *
159
+ * `WebsiteSeoConfig` — site-wide SEO/social-graph configuration
160
+ * AUTHORED ON THE ROOT CONFIG.
161
+ *
162
+ * # Scope
163
+ *
164
+ * The public marketing-site origin belongs only in the per-service
165
+ * `wildo.website.config.ts` declaration. Keep it out of this site-level SEO
166
+ * block so the origin and localized routing have one source of truth.
167
+ *
168
+ * What stays on this block: site-level branding + hero-image
169
+ * fallbacks that are co-authored with chrome labels and page
170
+ * manifests respectively, NOT with the URL/i18n routing surface.
171
+ *
172
+ * # Field rationale
173
+ *
174
+ * **Why `siteName` is REQUIRED**:
175
+ * - `og:site_name` is the brand label social platforms render
176
+ * above the page title in shared previews. Without it, every
177
+ * LinkedIn / Facebook / Slack preview shows the bare title with
178
+ * no brand context.
179
+ * - It is also the recommended `application-name` meta tag value
180
+ * and a useful default for JSON-LD `Organization.name` schema
181
+ * when the application ships structured data.
182
+ *
183
+ * **Why `defaultOgImageUrl` is OPTIONAL**:
184
+ * - Each page's `WebsitePageManifest.metaLabelKeys.ogImageUrl`
185
+ * takes precedence; the site-level default is a fallback for
186
+ * pages that did not commit to a hero image.
187
+ * - Marketing surfaces shipping no OG images at all (acceptable
188
+ * for a placeholder build) should not be forced to author one.
189
+ *
190
+ * **Why `sitemap?` and `robots?` are OPTIONAL** (with sensible
191
+ * defaults inside each sub-schema):
192
+ * - The marketing-site default ships a public surface — every
193
+ * page indexable, no AI-crawler restrictions, no per-path
194
+ * disallow. Forcing every consumer to author both blocks just
195
+ * to land in that default state would pollute the call site.
196
+ * - Omitting either block at the call site is equivalent to
197
+ * authoring `{}` — `WebsiteSitemapConfig.enabled` defaults to
198
+ * `true`, `WebsiteRobotsConfig.policy` defaults to `'index'`.
199
+ * The per-block field rationale lives on each sub-schema.
200
+ * - `llmsTxt?` is similarly optional, but with a different default
201
+ * mechanic: omitting the block means "auto-detect from file
202
+ * presence" rather than "use a static schema default". The helper
203
+ * `readLlmsTxtBody(...)` publishes when `src/content/llms.txt`
204
+ * exists and returns `null` otherwise.
205
+ *
206
+ * **Validation**:
207
+ * - `siteName` is `z.string().min(1)` — empty strings would emit
208
+ * `<meta property="og:site_name" content="" />` which social
209
+ * platforms render as a blank line.
210
+ * - `defaultOgImageUrl` (when present) is `z.url()`.
211
+ * - `sitemap` / `robots` validation lives on the sub-schemas.
212
+ */
213
+ declare const _WebsiteSeoConfigSchema: z.ZodObject<{
214
+ siteName: z.ZodString;
215
+ defaultOgImageUrl: z.ZodOptional<z.ZodURL>;
216
+ sitemap: z.ZodOptional<z.ZodObject<{
217
+ enabled: z.ZodDefault<z.ZodBoolean>;
218
+ changefreq: z.ZodOptional<z.ZodEnum<{
219
+ never: "never";
220
+ always: "always";
221
+ hourly: "hourly";
222
+ daily: "daily";
223
+ weekly: "weekly";
224
+ monthly: "monthly";
225
+ yearly: "yearly";
226
+ }>>;
227
+ priority: z.ZodOptional<z.ZodNumber>;
228
+ }, z.core.$strip>>;
229
+ robots: z.ZodOptional<z.ZodObject<{
230
+ policy: z.ZodDefault<z.ZodEnum<{
231
+ index: "index";
232
+ noindex: "noindex";
233
+ }>>;
234
+ disallow: z.ZodOptional<z.ZodArray<z.ZodString>>;
235
+ allowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
236
+ disallowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
237
+ }, z.core.$strip>>;
238
+ llmsTxt: z.ZodOptional<z.ZodObject<{
239
+ enabled: z.ZodOptional<z.ZodBoolean>;
240
+ }, z.core.$strip>>;
241
+ }, z.core.$strip>;
242
+ export declare const WebsiteSeoConfigSchema: typeof _WebsiteSeoConfigSchema;
243
+ export type WebsiteSeoConfig = z.infer<typeof _WebsiteSeoConfigSchema>;
244
+ /** @wildo_source:part:end saas.website.root-config.seo */
245
+ /**
246
+ * @wildo_source:part:start saas.website.root-config.navigation facet:layer:shared facet:family:website
247
+ *
248
+ * `WebsiteNavigationConfig` — site-wide header/footer slot bindings.
249
+ *
250
+ * The framework intentionally ships no concrete header or footer. The
251
+ * application authors both as React components, registers them once here, and
252
+ * the page layout renders the site-wide chrome around every page.
253
+ *
254
+ * Both fields are typed as `unknown` at the schema layer with the
255
+ * `WebsiteNavigationConfig` interface narrowing them to
256
+ * `ComponentType<unknown>` — same rationale as
257
+ * `WebsiteSectionDefinition.Component` and `WebsitePageManifest.pageComponent`.
258
+ */
259
+ declare const _WebsiteNavigationConfigSchema: z.ZodObject<{
260
+ headerComponent: z.ZodUnknown;
261
+ footerComponent: z.ZodUnknown;
262
+ }, z.core.$strip>;
263
+ export declare const WebsiteNavigationConfigSchema: typeof _WebsiteNavigationConfigSchema;
264
+ export interface WebsiteNavigationConfig extends z.infer<typeof _WebsiteNavigationConfigSchema> {
265
+ headerComponent: ComponentType<unknown>;
266
+ footerComponent: ComponentType<unknown>;
267
+ }
268
+ /** @wildo_source:part:end saas.website.root-config.navigation */
269
+ /**
270
+ * @wildo_source:part:start saas.website.root-config.schema facet:layer:shared facet:family:website
271
+ *
272
+ * `WebsiteRootConfig` — the site-level configuration consumed by:
273
+ * - the Astro adapter to drive i18n routing, page mounting,
274
+ * and design-token CSS emission,
275
+ * - the website audit command to validate label-pack
276
+ * coverage and SEO structured-data conformance,
277
+ * - the runtime `<WebsitePageLayout>` to render navigation
278
+ * and apply design tokens.
279
+ *
280
+ * **Authoring convention**: each marketing-site service exports a single
281
+ * `WEBSITE_ROOT_CONFIG: WebsiteRootConfig` from `src/website-root.config.ts`.
282
+ * The Astro adapter and the audit command
283
+ * both consume this canonical entry point; there is exactly one site
284
+ * config per marketing site (no per-page or per-section overrides at
285
+ * this level — overrides flow through the L0/L1/L1.5 component
286
+ * registration hierarchy described in D6).
287
+ *
288
+ * # Scope
289
+ *
290
+ * This block carries site-level chrome and registry data only. Per-locale
291
+ * routing (`locales` / `defaultLocale`) and the public origin belong in the
292
+ * per-service `wildo.website.config.ts` declaration, avoiding duplicated
293
+ * configuration that could diverge during site generation.
294
+ *
295
+ * **Field-by-field rationale**:
296
+ *
297
+ * - `pageManifests` — the registry of every page on the site. Indexed
298
+ * downstream by `manifest.ref`. Refs MUST be unique (refinement
299
+ * below).
300
+ * - `designTokens` — see `WebsiteDesignTokensSchema`.
301
+ * - `navigation` — see `WebsiteNavigationConfigSchema`.
302
+ * - `chromeLabelKeys` — OPTIONAL. The set of fully-composed label keys
303
+ * the site-wide chrome (header / footer / any global slot the
304
+ * consumer renders outside a section context) reads via
305
+ * `useWebsiteLabelByKey(...)`. Declared here, NOT in section
306
+ * `expectedLabelKeys`, because chrome is rendered outside the
307
+ * page+section context — `useWebsiteLabel(slot)` is structurally
308
+ * unavailable to it. Threading these through the label-pack
309
+ * validator (a) silences the always-on "orphaned chrome key" build
310
+ * warnings and (b) lets the build fail fast when a chrome key is
311
+ * missing from a locale pack, the same way section keys do.
312
+ * Defaults to an empty array; sites with no chrome label reads
313
+ * may omit the field entirely.
314
+ * - `seo` — site-level branding + hero-image fallback (see
315
+ * `WebsiteSeoConfigSchema`). The marketing-site origin USED to live
316
+ * here as `seo.siteOrigin`; it now lives only on
317
+ * `WildoMarketingWebsiteConfig.publicOrigin`.
318
+ * - `skipToMainContentLabelKey` — see field JSDoc below.
319
+ *
320
+ * **Refinements**:
321
+ * - `pageManifests[].ref` uniqueness — the registry is keyed by ref;
322
+ * duplicates would silently overwrite each other in the lookup
323
+ * table the bridge uses for cross-page links.
324
+ * - `pageManifests[].routePath` uniqueness — two pages cannot mount
325
+ * at the same path (Astro would error at build time, but we
326
+ * surface it earlier here with a clearer diagnostic).
327
+ * - `chromeLabelKeys` uniqueness — duplicates indicate copy-paste
328
+ * bugs at the consumer's call site; surface them here.
329
+ */
330
+ declare const _WebsiteRootConfigSchema: z.ZodObject<{
331
+ pageManifests: z.ZodArray<z.ZodObject<{
332
+ ref: z.core.$ZodBranded<z.ZodString, "WebsitePageRef", "out">;
333
+ routePath: z.core.$ZodBranded<z.ZodString, "WebsitePageRoutePath", "out">;
334
+ pageComponent: z.ZodUnknown;
335
+ sectionRefs: z.ZodArray<z.core.$ZodBranded<z.ZodString, "WebsiteSectionRef", "out">>;
336
+ metaLabelKeys: z.ZodObject<{
337
+ titleKey: z.core.$ZodBranded<z.ZodString, "WebsiteLabelKey", "out">;
338
+ descriptionKey: z.core.$ZodBranded<z.ZodString, "WebsiteLabelKey", "out">;
339
+ ogImageUrl: z.ZodOptional<z.ZodURL>;
340
+ }, z.core.$strip>;
341
+ hydration: z.ZodOptional<z.ZodEnum<typeof import("./website-page-manifest.shared.schemas").WebsitePageHydrationStrategy>>;
342
+ seo: z.ZodOptional<z.ZodObject<{
343
+ noaiOptOut: z.ZodOptional<z.ZodBoolean>;
344
+ }, z.core.$strip>>;
345
+ }, z.core.$strip>>;
346
+ designTokens: z.ZodObject<{
347
+ colors: z.ZodObject<{
348
+ background: z.ZodString;
349
+ foreground: z.ZodString;
350
+ primary: z.ZodString;
351
+ primaryForeground: z.ZodString;
352
+ accent: z.ZodString;
353
+ accentForeground: z.ZodString;
354
+ surface: z.ZodString;
355
+ surfaceForeground: z.ZodString;
356
+ border: z.ZodString;
357
+ muted: z.ZodString;
358
+ mutedForeground: z.ZodString;
359
+ }, z.core.$strip>;
360
+ radii: z.ZodObject<{
361
+ none: z.ZodString;
362
+ sm: z.ZodString;
363
+ md: z.ZodString;
364
+ lg: z.ZodString;
365
+ xl: z.ZodString;
366
+ full: z.ZodString;
367
+ }, z.core.$strip>;
368
+ }, z.core.$strip>;
369
+ navigation: z.ZodObject<{
370
+ headerComponent: z.ZodUnknown;
371
+ footerComponent: z.ZodUnknown;
372
+ }, z.core.$strip>;
373
+ chromeLabelKeys: z.ZodDefault<z.ZodArray<z.core.$ZodBranded<z.ZodString, "WebsiteLabelKey", "out">>>;
374
+ seo: z.ZodObject<{
375
+ siteName: z.ZodString;
376
+ defaultOgImageUrl: z.ZodOptional<z.ZodURL>;
377
+ sitemap: z.ZodOptional<z.ZodObject<{
378
+ enabled: z.ZodDefault<z.ZodBoolean>;
379
+ changefreq: z.ZodOptional<z.ZodEnum<{
380
+ never: "never";
381
+ always: "always";
382
+ hourly: "hourly";
383
+ daily: "daily";
384
+ weekly: "weekly";
385
+ monthly: "monthly";
386
+ yearly: "yearly";
387
+ }>>;
388
+ priority: z.ZodOptional<z.ZodNumber>;
389
+ }, z.core.$strip>>;
390
+ robots: z.ZodOptional<z.ZodObject<{
391
+ policy: z.ZodDefault<z.ZodEnum<{
392
+ index: "index";
393
+ noindex: "noindex";
394
+ }>>;
395
+ disallow: z.ZodOptional<z.ZodArray<z.ZodString>>;
396
+ allowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
397
+ disallowedCrawlers: z.ZodOptional<z.ZodArray<z.ZodString>>;
398
+ }, z.core.$strip>>;
399
+ llmsTxt: z.ZodOptional<z.ZodObject<{
400
+ enabled: z.ZodOptional<z.ZodBoolean>;
401
+ }, z.core.$strip>>;
402
+ }, z.core.$strip>;
403
+ skipToMainContentLabelKey: z.core.$ZodBranded<z.ZodString, "WebsiteLabelKey", "out">;
404
+ }, z.core.$strip>;
405
+ export declare const WebsiteRootConfigSchema: typeof _WebsiteRootConfigSchema;
406
+ /**
407
+ * Runtime shape of `WebsiteRootConfig`.
408
+ *
409
+ * Hand-written (NOT a bare `z.infer<typeof _WebsiteRootConfigSchema>`)
410
+ * because `z.infer` walks the schema tree and would type
411
+ * `pageManifests[number].pageComponent`, `navigation.headerComponent`
412
+ * and `navigation.footerComponent` as `unknown` (their schema field
413
+ * type), losing the `ComponentType<unknown>` narrowing carried by the
414
+ * hand-written `WebsitePageManifest` and `WebsiteNavigationConfig`
415
+ * interfaces. Factories such as `defineWebsiteRootConfig` and the
416
+ * layout primitives consume `WebsiteRootConfig` and must see those
417
+ * fields pre-narrowed; otherwise every consumer would need a local
418
+ * `as ComponentType` cast at the JSX call site, defeating the type-safe
419
+ * component contract.
420
+ *
421
+ * The `Omit` + intersection pattern keeps the rest of the inferred
422
+ * shape (`designTokens`, `seo`, `chromeLabelKeys`,
423
+ * `skipToMainContentLabelKey`) sourced directly from the schema.
424
+ */
425
+ export type WebsiteRootConfig = Omit<z.infer<typeof _WebsiteRootConfigSchema>, 'pageManifests' | 'navigation'> & {
426
+ pageManifests: WebsitePageManifest[];
427
+ navigation: WebsiteNavigationConfig;
428
+ };
429
+ export {};
430
+ /** @wildo_source:part:end saas.website.root-config.schema */
431
+ //# sourceMappingURL=website-root-config.shared.schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-root-config.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../../src/schemas/manifests/website-root-config.shared.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,wCAAwC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,QAAA,MAAM,2BAA2B;;;;;;;;;;;;iBAU/B,CAAC;AAEH,eAAO,MAAM,0BAA0B,EAAE,OAAO,2BACnB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAC/E,6DAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,QAAA,MAAM,0BAA0B;;;;;;;;iBAsC5B,CAAC;AAEL,eAAO,MAAM,yBAAyB,EAAE,OAAO,0BACnB,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC7E,4DAA4D;AAE5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,2BAA2B;;iBAE/B,CAAC;AAEH,eAAO,MAAM,0BAA0B,EAAE,OAAO,2BACnB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAC/E,8DAA8D;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0BzB,CAAC;AAEL,eAAO,MAAM,sBAAsB,EAAE,OAAO,uBAAiD,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACvE,0DAA0D;AAE1D;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,8BAA8B;;;iBAGlC,CAAC;AAEH,eAAO,MAAM,6BAA6B,EAAE,OAAO,8BACnB,CAAC;AAEjC,MAAM,WAAW,uBACf,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC;IACtD,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACzC;AACD,iEAAiE;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2F1B,CAAC;AAEL,eAAO,MAAM,uBAAuB,EAAE,OAAO,wBAAmD,CAAC;AAEjG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,EACxC,eAAe,GAAG,YAAY,CAC/B,GAAG;IACF,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,uBAAuB,CAAC;CACrC,CAAC;;AACF,6DAA6D"}