@weatherboard/cms 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +68 -0
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.cjs.map +4 -4
  4. package/dist/index.mjs +2 -2
  5. package/dist/index.mjs.map +4 -4
  6. package/dist/next.cjs +4 -2
  7. package/dist/next.cjs.map +4 -4
  8. package/dist/next.d.cts +2 -0
  9. package/dist/next.d.mts +2 -0
  10. package/dist/next.d.ts +2 -0
  11. package/dist/next.mjs +4 -2
  12. package/dist/next.mjs.map +4 -4
  13. package/dist/portable/sections.d.cts +43 -6
  14. package/dist/portable/sections.d.mts +43 -6
  15. package/dist/portable/sections.d.ts +43 -6
  16. package/dist/portable/site-content.d.cts +41 -10
  17. package/dist/portable/site-content.d.mts +41 -10
  18. package/dist/portable/site-content.d.ts +41 -10
  19. package/dist/runtime/site-readers.d.cts +164 -0
  20. package/dist/runtime/site-readers.d.mts +164 -0
  21. package/dist/runtime/site-readers.d.ts +164 -0
  22. package/dist/runtime/test-fixtures/saved-documents.d.cts +81 -0
  23. package/dist/runtime/test-fixtures/saved-documents.d.mts +81 -0
  24. package/dist/runtime/test-fixtures/saved-documents.d.ts +81 -0
  25. package/dist/server.cjs +4 -2
  26. package/dist/server.cjs.map +4 -4
  27. package/dist/server.d.cts +2 -0
  28. package/dist/server.d.mts +2 -0
  29. package/dist/server.d.ts +2 -0
  30. package/dist/server.mjs +4 -2
  31. package/dist/server.mjs.map +4 -4
  32. package/dist/site-content.cjs +7 -4
  33. package/dist/site-content.cjs.map +4 -4
  34. package/dist/site-content.d.cts +2 -2
  35. package/dist/site-content.d.mts +2 -2
  36. package/dist/site-content.d.ts +2 -2
  37. package/dist/site-content.mjs +7 -4
  38. package/dist/site-content.mjs.map +4 -4
  39. package/package.json +4 -2
@@ -1,6 +1,6 @@
1
1
  export { MALFORMED_CONTENT, MalformedContentError, parseHomePage, parseContentPage, parseSiteSettings, portableTextToMarkdown, campaignState, HOME_PAGE_DOCUMENT_QUERY, CONTENT_PAGES_QUERY, CONTENT_PAGE_BY_SLUG_QUERY, createSiteContentReader, READER_PHOTO_SLUG, READER_ACTION_HREF, READER_JUMP_LINK, READER_STORY_LAYOUTS, READER_HOME_PAGE_ID, READER_SITE_SETTINGS_ID, homeContentQuery, contentPageQuery, contentPagesQuery, siteSettingsQuery, } from "./portable/site-content.cjs";
2
- export type { CopyInput, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.cjs";
2
+ export type { CopyInput, RichInline, RichBody, RichBodyPart, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.cjs";
3
3
  export { SITE_HERO_LAYOUTS, SITE_HERO_TAGLINE_MAX_LENGTH, SITE_HERO_LAYOUT_WARNING, SITE_HERO_TAGLINE_DROPPED_WARNING, SITE_HERO_TAGLINES_DEFAULTED_WARNING, parseSiteHero, siteHeroQuery, validateSiteHeroTaglines } from "./contracts/text.cjs";
4
4
  export type { SiteHero, ParsedSiteHero, SiteHeroLayout, SiteHeroTagline } from "./contracts/text.cjs";
5
5
  export { SPLIT_LAYOUTS, HEADING_LIST_LAYOUTS, STAGGER_ROW_LAYOUTS, SECTION_LAYOUT_DEFAULTS, READER_SECTION_KINDS, READER_GALLERY_PHOTO_MIN, READER_GALLERY_PHOTO_LIMIT, SECTION_WARNINGS, } from "./portable/sections.cjs";
6
- export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.cjs";
6
+ export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, TextItemsSectionInput, StepsSectionInput, LinkListSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.cjs";
@@ -1,6 +1,6 @@
1
1
  export { MALFORMED_CONTENT, MalformedContentError, parseHomePage, parseContentPage, parseSiteSettings, portableTextToMarkdown, campaignState, HOME_PAGE_DOCUMENT_QUERY, CONTENT_PAGES_QUERY, CONTENT_PAGE_BY_SLUG_QUERY, createSiteContentReader, READER_PHOTO_SLUG, READER_ACTION_HREF, READER_JUMP_LINK, READER_STORY_LAYOUTS, READER_HOME_PAGE_ID, READER_SITE_SETTINGS_ID, homeContentQuery, contentPageQuery, contentPagesQuery, siteSettingsQuery, } from "./portable/site-content.mjs";
2
- export type { CopyInput, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.mjs";
2
+ export type { CopyInput, RichInline, RichBody, RichBodyPart, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.mjs";
3
3
  export { SITE_HERO_LAYOUTS, SITE_HERO_TAGLINE_MAX_LENGTH, SITE_HERO_LAYOUT_WARNING, SITE_HERO_TAGLINE_DROPPED_WARNING, SITE_HERO_TAGLINES_DEFAULTED_WARNING, parseSiteHero, siteHeroQuery, validateSiteHeroTaglines } from "./contracts/text.mjs";
4
4
  export type { SiteHero, ParsedSiteHero, SiteHeroLayout, SiteHeroTagline } from "./contracts/text.mjs";
5
5
  export { SPLIT_LAYOUTS, HEADING_LIST_LAYOUTS, STAGGER_ROW_LAYOUTS, SECTION_LAYOUT_DEFAULTS, READER_SECTION_KINDS, READER_GALLERY_PHOTO_MIN, READER_GALLERY_PHOTO_LIMIT, SECTION_WARNINGS, } from "./portable/sections.mjs";
6
- export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.mjs";
6
+ export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, TextItemsSectionInput, StepsSectionInput, LinkListSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.mjs";
@@ -1,6 +1,6 @@
1
1
  export { MALFORMED_CONTENT, MalformedContentError, parseHomePage, parseContentPage, parseSiteSettings, portableTextToMarkdown, campaignState, HOME_PAGE_DOCUMENT_QUERY, CONTENT_PAGES_QUERY, CONTENT_PAGE_BY_SLUG_QUERY, createSiteContentReader, READER_PHOTO_SLUG, READER_ACTION_HREF, READER_JUMP_LINK, READER_STORY_LAYOUTS, READER_HOME_PAGE_ID, READER_SITE_SETTINGS_ID, homeContentQuery, contentPageQuery, contentPagesQuery, siteSettingsQuery, } from "./portable/site-content.js";
2
- export type { CopyInput, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.js";
2
+ export type { CopyInput, RichInline, RichBody, RichBodyPart, ActionInput, HeroInput, StoryInput, CompositionBlockInput, CompositionInput, ProposedCopy, CampaignState, HomeContent, PageContent, SiteSettingsContent, SiteContentReader, } from "./portable/site-content.js";
3
3
  export { SITE_HERO_LAYOUTS, SITE_HERO_TAGLINE_MAX_LENGTH, SITE_HERO_LAYOUT_WARNING, SITE_HERO_TAGLINE_DROPPED_WARNING, SITE_HERO_TAGLINES_DEFAULTED_WARNING, parseSiteHero, siteHeroQuery, validateSiteHeroTaglines } from "./contracts/text.js";
4
4
  export type { SiteHero, ParsedSiteHero, SiteHeroLayout, SiteHeroTagline } from "./contracts/text.js";
5
5
  export { SPLIT_LAYOUTS, HEADING_LIST_LAYOUTS, STAGGER_ROW_LAYOUTS, SECTION_LAYOUT_DEFAULTS, READER_SECTION_KINDS, READER_GALLERY_PHOTO_MIN, READER_GALLERY_PHOTO_LIMIT, SECTION_WARNINGS, } from "./portable/sections.js";
6
- export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.js";
6
+ export type { SplitLayout, HeadingListLayout, StaggerRowLayout, SectionWarningCode, SectionWarning, SectionImageInput, TextMediaSectionInput, FaqSectionInput, GallerySectionInput, ContactSectionInput, TextItemsSectionInput, StepsSectionInput, LinkListSectionInput, NewSectionInput, PageSectionInput, } from "./portable/sections.js";
@@ -1,11 +1,14 @@
1
- function S(n){if(!Array.isArray(n))return!1;for(let e=0;e<n.length;e+=1)if(!Object.hasOwn(n,e))return!1;return!0}var F=["stacked","columns"],B=["none","playful"],v={layout:"stacked",decoration:"none"},_n=`_type, _id, _rev, _updatedAt, title, locationKeys, note, signOff,
1
+ function h(n){if(!Array.isArray(n))return!1;for(let e=0;e<n.length;e+=1)if(!Object.hasOwn(n,e))return!1;return!0}var Z=["stacked","columns"],V=["none","playful"],tn={layout:"stacked",decoration:"none"},En=`_type, _id, _rev, _updatedAt, title, locationKeys, note, signOff,
2
2
  variants[]{_key, label, note, sections[]{_key, title, service, items[]{
3
3
  _key, name, description, priceNote, dietary, allergenNote, availability,
4
4
  prices[]{_key, label, amount{minor, currency}}, extras[]{_key, name, amount{minor, currency}}
5
- }}}`;var Wn=/^[A-Za-z][A-Za-z0-9_]{0,63}$/,Qn=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;function zn(n){if(!n||!Array.isArray(n.types)||n.types.length===0)throw new TypeError("CMS dependencies require document types");let e=[...n.types];for(let o of e)if(typeof o!="string"||!Wn.test(o))throw new TypeError("Invalid CMS document type");if(n.ids!==void 0&&!Array.isArray(n.ids))throw new TypeError("Invalid CMS document IDs");let t=n.ids===void 0?void 0:[...n.ids];for(let o of t??[])if(typeof o!="string"||!Qn.test(o)||/^(drafts|versions)\./.test(o))throw new TypeError("Invalid CMS document ID");if(new Set(e).size+new Set(t).size>128)throw new TypeError("Too many CMS tags");return Object.freeze({types:Object.freeze(e),...t===void 0?{}:{ids:Object.freeze(t)}})}function $(n){if(!n||typeof n.name!="string"||!/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/.test(n.name)||typeof n.query!="string"||n.query.trim()===""||typeof n.resolve!="function")throw new TypeError("Invalid CMS query configuration");let e=n.params;if(!e||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new TypeError("CMS params must be plain JSON scalars");let t={};for(let o of Reflect.ownKeys(e)){let r=Object.getOwnPropertyDescriptor(e,o);if(typeof o!="string"||!r||!Object.hasOwn(r,"value")||!r.enumerable)throw new TypeError("CMS params must be plain JSON scalars");let i=r.value;if(!(i===null||typeof i=="string"||typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i)))throw new TypeError("CMS params must be plain JSON scalars");Object.defineProperty(t,o,{value:i,enumerable:!0})}return Object.freeze({name:n.name,query:n.query,params:Object.freeze(t),dependencies:zn(n.dependencies),resolve:n.resolve})}function m(n,e){throw new b("menu",[`${n} ${e}`])}function ln(n,e,t=new Set,o){if(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))return n;if(typeof n!="object"||n===null)return m(e,"is not plain JSON data");try{if(t.has(n))return m(e,"is not acyclic JSON data");let r=Array.isArray(n),i=Object.getPrototypeOf(n);if(r?i!==Array.prototype:i!==Object.prototype&&i!==null)return m(e,"is not an ordinary saved object");t.add(n);let a=Reflect.ownKeys(n),s=r?[]:{},c=0,l=0;for(let u of a){if(typeof u!="string")return m(e,"has a symbol key");let d=r&&u!=="length"?`${e}[${u}]`:`${e}.${u}`,p;try{p=u==="_id"&&o!==void 0?o:Object.getOwnPropertyDescriptor(n,u)}catch{return m(d,"could not be snapshotted as plain JSON data")}if(!p||!Object.hasOwn(p,"value"))return m(d,"is not a saved data property");if(r&&u==="length"){let g=p.value;if(typeof g!="number"||!Number.isSafeInteger(g)||g<0)return m(d,"is not a saved list length");c=g;continue}if(!p.enumerable||r&&!/^(0|[1-9]\d*)$/.test(u))return m(d,"is not a JSON data property");let y=p.value,f=ln(y,d,t);Object.defineProperty(s,u,{value:f,enumerable:!0,writable:!0,configurable:!0}),l++}return r&&(l!==c||s.length!==c)?m(e,"is not a complete saved list"):s}catch(r){if(r instanceof b)throw r;return m(e,"could not be snapshotted as plain JSON data")}finally{t.delete(n)}}function x(n,e){return n===null||typeof n!="object"||Array.isArray(n)||Object.getPrototypeOf(n)!==Object.prototype&&Object.getPrototypeOf(n)!==null?m(e,"is not an ordinary saved object"):n}function _(n,e,t=!0){return typeof n!="string"||t&&n.trim()===""?m(e,"is not saved text"):n}function O(n,e,t){return n[e]===void 0||n[e]===null?{}:{[e]:_(n[e],`${t}.${e}`,!1)}}function R(n,e,t){return n==null?[]:S(n)?n.map((o,r)=>t(o,`${e}[${String(r)}]`)):m(e,"is not a complete saved list")}function bn(n,e){let t=x(n,e);if(typeof t.minor!="number"||!Number.isSafeInteger(t.minor)||t.minor<0)return m(`${e}.minor`,"is not a whole non-negative safe amount");let o=_(t.currency,`${e}.currency`);return/^[A-Z]{3}$/.test(o)?{minor:t.minor,currency:o}:m(`${e}.currency`,"is not a three-letter currency code")}function Jn(n,e){let t=x(n,e);return{_key:_(t._key,`${e}._key`),amount:bn(t.amount,`${e}.amount`),...O(t,"label",e)}}function Kn(n,e){let t=x(n,e);return{_key:_(t._key,`${e}._key`),name:_(t.name,`${e}.name`),amount:bn(t.amount,`${e}.amount`)}}function Zn(n,e){let t=x(n,e),o=t.availability??"available";return o!=="available"&&o!=="sold-out"&&o!=="hidden"?m(`${e}.availability`,"is not an availability choice"):{_key:_(t._key,`${e}._key`),name:_(t.name,`${e}.name`),...O(t,"description",e),...O(t,"priceNote",e),...O(t,"allergenNote",e),prices:R(t.prices,`${e}.prices`,Jn),extras:R(t.extras,`${e}.extras`,Kn),dietary:R(t.dietary,`${e}.dietary`,_),availability:o}}function Vn(n,e){let t=x(n,e);return{_key:_(t._key,`${e}._key`),title:_(t.title,`${e}.title`),...O(t,"service",e),items:R(t.items,`${e}.items`,Zn)}}function Xn(n,e){let t=x(n,e);return{_key:_(t._key,`${e}._key`),label:_(t.label,`${e}.label`),...O(t,"note",e),sections:R(t.sections,`${e}.sections`,Vn)}}function vn(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n._id;return typeof e=="string"&&e.trim()!==""&&!/^(drafts|versions)\./.test(e)}function ne(n,e="menu"){return wn(ln(n,e),e)}function kn(n,e){if(n==null||typeof n!="object")return null;let t;try{t=Object.getOwnPropertyDescriptor(n,"_id")}catch{return m(`${e}._id`,"could not be snapshotted as plain JSON data")}if(t&&!Object.hasOwn(t,"value"))return m(`${e}._id`,"is not a saved data property");let o=t?.value;return typeof o!="string"||o.trim()===""||/^(drafts|versions)\./.test(o)?null:wn(ln(n,e,new Set,t),e)}function wn(n,e){let t=x(n,e);if(t._type!=="menu")return m(`${e}._type`,"is not menu");if(!vn(t))return m(`${e}._id`,"is not a published menu identity");let o=_(t._updatedAt,`${e}._updatedAt`);if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(o)||!Number.isFinite(Date.parse(o)))return m(`${e}._updatedAt`,"is not an update date");let r=R(t.variants,`${e}.variants`,Xn);return r.length===0?m(`${e}.variants`,"has no menu choices"):{_type:"menu",_id:_(t._id,`${e}._id`),_rev:_(t._rev,`${e}._rev`),_updatedAt:o,title:_(t.title,`${e}.title`),locationKeys:R(t.locationKeys,`${e}.locationKeys`,_),variants:r,...O(t,"note",e),...Object.hasOwn(t,"signOff")?{signOff:t.signOff}:{}}}function In(n){if(n===null)return!0;try{return ne(n),!0}catch{return!1}}var N=["media-end","media-start","media-below"],W=["beside","stacked"],Q=["staggered","aligned"],D={Split:"media-end",HeadingList:"beside",StaggerRow:"staggered"},ee={featureStoriesBlock:"feature_stories",surfaceCardBlock:"cta",accentBandBlock:"accent_band",locationsBlock:"locations",textMediaBlock:"text_media",faqBlock:"faq",galleryBlock:"gallery",contactBlock:"contact",menuBlock:"menu"},nn=2,en=4,T={layoutDefaulted:"section.layout.defaulted",unknownType:"section.type.unknown",imageMissingAlt:"section.image.missing-alt",imageMissingAsset:"section.image.missing-asset",emptySkipped:"section.empty.skipped",menuUnavailable:"section.menu.unavailable"};var h=n=>n!==null&&typeof n=="object"&&!Array.isArray(n),E=n=>typeof n=="string"&&n.trim()!=="",P=n=>n===null||typeof n=="string",M=n=>n===null||typeof n=="string"&&on.test(n),Tn=n=>typeof n=="string"&&rn.test(n),w=n=>E(n)||h(n)&&E(n.text)&&(n.copySource==="captured"||n.copySource==="proposed"),C=n=>n===null||w(n),En=n=>h(n)&&w(n.label)&&Tn(n.href),H=n=>n===null||En(n),tn=n=>n===null||typeof n=="string"&&z.test(n),L=(n,e)=>n.some(t=>t===e),un=n=>h(n)&&E(n.asset)&&E(n.alt)&&P(n.caption)&&(n.hotspot===null||h(n.hotspot)&&typeof n.hotspot.x=="number"&&typeof n.hotspot.y=="number");function An(n){if(!h(n))return!1;switch(n.kind){case"campaign":return H(n.action)&&S(n.images)&&n.images.every(e=>typeof e=="string"&&M(e));case"locations":return(n.anchor===null||typeof n.anchor=="string"&&z.test(n.anchor))&&w(n.heading)&&C(n.tail)&&M(n.image);case"feature_stories":return w(n.heading)&&C(n.tail)&&S(n.items)&&n.items.length>0&&n.items.every(e=>h(e)&&w(e.heading)&&w(e.body)&&En(e.action)&&M(e.image)&&sn.some(t=>t===e.shape)&&typeof e.card=="boolean");case"accent_band":return w(n.heading)&&w(n.body)&&H(n.action)&&M(n.image);case"cta":return E(n.heading)&&P(n.body)&&h(n.link)&&E(n.link.label)&&Tn(n.link.href);default:return!1}}function te(n){if(!h(n))return!1;switch(n.kind){case"campaign":return!1;case"menu":return L(F,n.layout)&&L(B,n.decoration)&&n.menu!==null&&In(n.menu);case"text_media":return tn(n.anchor)&&L(N,n.layout)&&w(n.heading)&&C(n.tail)&&w(n.body)&&H(n.action)&&(n.image===null||un(n.image));case"faq":return tn(n.anchor)&&L(W,n.layout)&&w(n.heading)&&C(n.tail)&&C(n.intro)&&S(n.items)&&n.items.length>0&&n.items.every(e=>h(e)&&w(e.question)&&w(e.answer));case"gallery":return tn(n.anchor)&&L(Q,n.layout)&&C(n.heading)&&S(n.images)&&n.images.length>0&&n.images.every(un);case"contact":return tn(n.anchor)&&L(N,n.layout)&&w(n.heading)&&C(n.body)&&typeof n.showEmail=="boolean"&&typeof n.showPhone=="boolean"&&H(n.action)&&(n.image===null||un(n.image));default:return An(n)}}function oe(n,e){if(n===void 0)return e===void 0;if(!S(n)||!n.every(te)||!S(e)||!e.every(i=>h(i)&&L(Object.values(T),i.code)&&E(i.where)))return!1;let t=n,o=t.flatMap(i=>"anchor"in i&&i.anchor!==null?[i.anchor]:[]);return new Set(o).size!==o.length?!1:t.flatMap(i=>{switch(i.kind){case"text_media":case"contact":case"accent_band":return[i.action?.href];case"feature_stories":return i.items.map(a=>a.action.href);case"cta":return[i.link.href];default:return[]}}).every(i=>i===void 0||!i.startsWith("#")||o.includes(i.slice(1)))}function Cn(n){if(!h(n)||!P(n.intro)||!M(n.photo)||!S(n.blocks))return!1;let e=n.hero;if(e!==null&&(!h(e)||!w(e.heading)||!C(e.subline)||!C(e.intro)||!M(e.image)||!M(e.inset)||!H(e.cta)||!H(e.secondaryCta))||!n.blocks.every(An))return!1;let t=n,o=t.blocks.flatMap(i=>i.kind==="locations"&&i.anchor!==null?[i.anchor]:[]);return new Set(o).size!==o.length?!1:[t.hero?.cta?.href,t.hero?.secondaryCta?.href,...t.blocks.flatMap(i=>{switch(i.kind){case"campaign":case"accent_band":return[i.action?.href];case"feature_stories":return i.items.map(a=>a.action.href);case"cta":return[i.link.href];default:return[]}})].every(i=>i===void 0||!i.startsWith("#")||o.includes(i.slice(1)))}function $n(n){return S(n)&&n.every(e=>h(e)&&E(e.where)&&typeof e.text=="string")}function On(n){return n===null||h(n)&&Cn(n.composition)&&typeof n.body=="string"&&$n(n.proposedCopy)&&typeof n.campaign=="string"&&["shown","off","not-started","ended","none"].includes(n.campaign)}function cn(n){return n===null||h(n)&&E(n.slug)&&E(n.title)&&Cn(n.composition)&&typeof n.body=="string"&&typeof n.migrated=="boolean"&&$n(n.proposedCopy)&&oe(n.sections,n.warnings)}function Rn(n){return n===null||h(n)&&E(n.name)&&P(n.description)&&h(n.contact)&&P(n.contact.email)&&P(n.contact.phone)&&S(n.social)&&n.social.every(e=>h(e)&&E(e.network)&&typeof e.url=="string"&&/^https?:\/\//.test(e.url))}var dn="malformed-content",b=class extends Error{code=dn;documentId;problems;constructor(e,t){super(`${dn}: ${e}: ${t.join("; ")}`),this.name="MalformedContentError",this.documentId=e,this.problems=t}},on=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,rn=/^(?:\/(?![/\\])[^\s]*|#[a-z][a-z0-9]*(?:-[a-z0-9]+)*|mailto:[^\s@]+@[^\s@]+|tel:\+?[0-9][0-9 ()-]*|https?:\/\/[^\s/]+[^\s]*)$/,z=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,sn=["wide","tall","round","free"],U="homePage",j="siteSettings",G=class{problems=[];proposed=[];fail(e,t){return this.problems.push(`${e} ${t}`),null}object(e,t){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:this.fail(t,"is not an object")}dense(e,t){return S(e)?!0:(this.fail(t,"contains missing entries"),!1)}optionalString(e,t){return e==null?null:typeof e=="string"?e.trim()===""?null:e:this.fail(t,"is not text")}copy(e,t){if(e==null)return null;let o=this.object(e,t);if(o===null)return null;let r=o.text,i=o.copySource;return r!==void 0&&typeof r!="string"?this.fail(`${t}.text`,"is not text"):i!==void 0&&i!=="captured"&&i!=="proposed"?this.fail(`${t}.copySource`,`is ${JSON.stringify(i)}, not captured or proposed`):typeof r!="string"||r.trim()===""?null:i==="proposed"?(this.proposed.push({where:t,text:r}),{text:r,copySource:"proposed"}):i==="captured"?{text:r,copySource:"captured"}:r}requiredCopy(e,t){let o=this.copy(e,t);return o===null&&!this.problems.some(r=>r.startsWith(t))&&this.fail(t,"is missing its words"),o}photo(e,t){return e==null?null:typeof e=="string"&&on.test(e)?e:this.fail(t,`is ${JSON.stringify(e)}, not a photo library slug`)}photos(e,t,o){return e==null?[]:Array.isArray(e)?this.dense(e,t)?(e.length>o&&this.fail(t,`holds ${String(e.length)} photos; at most ${String(o)}`),e.map((r,i)=>this.photo(r,`${t}[${String(i)}]`)).filter(r=>r!==null)):[]:(this.fail(t,"is not a list of photos"),[])}action(e,t){if(e==null)return null;let o=this.object(e,t);if(o===null)return null;let r=this.requiredCopy(o.label,`${t}.label`),i=o.href;return typeof i!="string"||!rn.test(i)?this.fail(`${t}.href`,`is ${JSON.stringify(i)}, not a site path, #jump-link, mailto:, tel: or web address`):r===null?null:{label:r,href:i}}requiredAction(e,t){return e==null?this.fail(t,"is missing"):this.action(e,t)}};function Z(n){return typeof n=="string"?n:n.text}function re(n){let e=new G,t=yn(n,"body",e);if(e.problems.length>0)throw new b("body",e.problems);return t}function yn(n,e,t){if(n==null)return"";if(!Array.isArray(n))return t.fail(e,"is not rich text"),"";if(!t.dense(n,e))return"";let o=[],r=!1;return n.forEach((i,a)=>{let s=`${e}[${String(a)}]`,c=t.object(i,s);if(c===null)return;if(c._type!=="block"){t.fail(s,`is a ${JSON.stringify(c._type)}; only text is supported in rich text so far`);return}let l=se(c,s,t),u=c.listItem,d=c.style??"normal",p;if(u==="bullet"||u==="number"){let f=typeof c.level=="number"&&c.level>1?c.level:1;p=`${" ".repeat(f-1)}${u==="bullet"?"-":"1."} ${l}`}else if(d==="h2")p=`## ${l}`;else if(d==="h3")p=`### ${l}`;else if(d==="blockquote")p=`> ${l}`;else if(d==="normal")p=l;else{t.fail(`${s}.style`,`is ${JSON.stringify(d)}, which the schema does not offer`);return}let y=u==="bullet"||u==="number";o.length>0&&o.push(y&&r?`
5
+ }}}`;var ee=/^[A-Za-z][A-Za-z0-9_]{0,63}$/,te=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;function oe(n){if(!n||!Array.isArray(n.types)||n.types.length===0)throw new TypeError("CMS dependencies require document types");let e=[...n.types];for(let o of e)if(typeof o!="string"||!ee.test(o))throw new TypeError("Invalid CMS document type");if(n.ids!==void 0&&!Array.isArray(n.ids))throw new TypeError("Invalid CMS document IDs");let t=n.ids===void 0?void 0:[...n.ids];for(let o of t??[])if(typeof o!="string"||!te.test(o)||/^(drafts|versions)\./.test(o))throw new TypeError("Invalid CMS document ID");if(new Set(e).size+new Set(t).size>128)throw new TypeError("Too many CMS tags");return Object.freeze({types:Object.freeze(e),...t===void 0?{}:{ids:Object.freeze(t)}})}function H(n){if(!n||typeof n.name!="string"||!/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/.test(n.name)||typeof n.query!="string"||n.query.trim()===""||typeof n.resolve!="function")throw new TypeError("Invalid CMS query configuration");let e=n.params;if(!e||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new TypeError("CMS params must be plain JSON scalars");let t={};for(let o of Reflect.ownKeys(e)){let i=Object.getOwnPropertyDescriptor(e,o);if(typeof o!="string"||!i||!Object.hasOwn(i,"value")||!i.enumerable)throw new TypeError("CMS params must be plain JSON scalars");let r=i.value;if(!(r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r)))throw new TypeError("CMS params must be plain JSON scalars");Object.defineProperty(t,o,{value:r,enumerable:!0})}return Object.freeze({name:n.name,query:n.query,params:Object.freeze(t),dependencies:oe(n.dependencies),resolve:n.resolve})}function b(n,e){throw new $("menu",[`${n} ${e}`])}function dn(n,e,t=new Set,o){if(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))return n;if(typeof n!="object"||n===null)return b(e,"is not plain JSON data");try{if(t.has(n))return b(e,"is not acyclic JSON data");let i=Array.isArray(n),r=Object.getPrototypeOf(n);if(i?r!==Array.prototype:r!==Object.prototype&&r!==null)return b(e,"is not an ordinary saved object");t.add(n);let l=Reflect.ownKeys(n),s=i?[]:{},a=0,c=0;for(let u of l){if(typeof u!="string")return b(e,"has a symbol key");let d=i&&u!=="length"?`${e}[${u}]`:`${e}.${u}`,y;try{y=u==="_id"&&o!==void 0?o:Object.getOwnPropertyDescriptor(n,u)}catch{return b(d,"could not be snapshotted as plain JSON data")}if(!y||!Object.hasOwn(y,"value"))return b(d,"is not a saved data property");if(i&&u==="length"){let f=y.value;if(typeof f!="number"||!Number.isSafeInteger(f)||f<0)return b(d,"is not a saved list length");a=f;continue}if(!y.enumerable||i&&!/^(0|[1-9]\d*)$/.test(u))return b(d,"is not a JSON data property");let g=y.value,p=dn(g,d,t);Object.defineProperty(s,u,{value:p,enumerable:!0,writable:!0,configurable:!0}),c++}return i&&(c!==a||s.length!==a)?b(e,"is not a complete saved list"):s}catch(i){if(i instanceof $)throw i;return b(e,"could not be snapshotted as plain JSON data")}finally{t.delete(n)}}function U(n,e){return n===null||typeof n!="object"||Array.isArray(n)||Object.getPrototypeOf(n)!==Object.prototype&&Object.getPrototypeOf(n)!==null?b(e,"is not an ordinary saved object"):n}function I(n,e,t=!0){return typeof n!="string"||t&&n.trim()===""?b(e,"is not saved text"):n}function P(n,e,t){return n[e]===void 0||n[e]===null?{}:{[e]:I(n[e],`${t}.${e}`,!1)}}function j(n,e,t){return n==null?[]:h(n)?n.map((o,i)=>t(o,`${e}[${String(i)}]`)):b(e,"is not a complete saved list")}function Cn(n,e){let t=U(n,e);if(typeof t.minor!="number"||!Number.isSafeInteger(t.minor)||t.minor<0)return b(`${e}.minor`,"is not a whole non-negative safe amount");let o=I(t.currency,`${e}.currency`);return/^[A-Z]{3}$/.test(o)?{minor:t.minor,currency:o}:b(`${e}.currency`,"is not a three-letter currency code")}function re(n,e){let t=U(n,e);return{_key:I(t._key,`${e}._key`),amount:Cn(t.amount,`${e}.amount`),...P(t,"label",e)}}function ie(n,e){let t=U(n,e);return{_key:I(t._key,`${e}._key`),name:I(t.name,`${e}.name`),amount:Cn(t.amount,`${e}.amount`)}}function se(n,e){let t=U(n,e),o=t.availability??"available";return o!=="available"&&o!=="sold-out"&&o!=="hidden"?b(`${e}.availability`,"is not an availability choice"):{_key:I(t._key,`${e}._key`),name:I(t.name,`${e}.name`),...P(t,"description",e),...P(t,"priceNote",e),...P(t,"allergenNote",e),prices:j(t.prices,`${e}.prices`,re),extras:j(t.extras,`${e}.extras`,ie),dietary:j(t.dietary,`${e}.dietary`,I),availability:o}}function le(n,e){let t=U(n,e);return{_key:I(t._key,`${e}._key`),title:I(t.title,`${e}.title`),...P(t,"service",e),items:j(t.items,`${e}.items`,se)}}function ae(n,e){let t=U(n,e);return{_key:I(t._key,`${e}._key`),label:I(t.label,`${e}.label`),...P(t,"note",e),sections:j(t.sections,`${e}.sections`,le)}}function ce(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n._id;return typeof e=="string"&&e.trim()!==""&&!/^(drafts|versions)\./.test(e)}function ue(n,e="menu"){return On(dn(n,e),e)}function Rn(n,e){if(n==null||typeof n!="object")return null;let t;try{t=Object.getOwnPropertyDescriptor(n,"_id")}catch{return b(`${e}._id`,"could not be snapshotted as plain JSON data")}if(t&&!Object.hasOwn(t,"value"))return b(`${e}._id`,"is not a saved data property");let o=t?.value;return typeof o!="string"||o.trim()===""||/^(drafts|versions)\./.test(o)?null:On(dn(n,e,new Set,t),e)}function On(n,e){let t=U(n,e);if(t._type!=="menu")return b(`${e}._type`,"is not menu");if(!ce(t))return b(`${e}._id`,"is not a published menu identity");let o=I(t._updatedAt,`${e}._updatedAt`);if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(o)||!Number.isFinite(Date.parse(o)))return b(`${e}._updatedAt`,"is not an update date");let i=j(t.variants,`${e}.variants`,ae);return i.length===0?b(`${e}.variants`,"has no menu choices"):{_type:"menu",_id:I(t._id,`${e}._id`),_rev:I(t._rev,`${e}._rev`),_updatedAt:o,title:I(t.title,`${e}.title`),locationKeys:j(t.locationKeys,`${e}.locationKeys`,I),variants:i,...P(t,"note",e),...Object.hasOwn(t,"signOff")?{signOff:t.signOff}:{}}}function xn(n){if(n===null)return!0;try{return ue(n),!0}catch{return!1}}var Ln=["columns","rows"],Dn=40,Mn="siteHero.layout.defaulted",Hn="siteHero.tagline.dropped",Pn="siteHero.taglines.defaulted";var O={key:"hero",documentId:"siteHero",documentType:"siteHero",fields:[{name:"heading",label:"Heading",noun:{article:"a",word:"heading"},kind:"single-line",required:!0,minLength:1,maxLength:80,noTrailingFullStop:!0},{name:"intro",label:"Introduction",noun:{article:"an",word:"introduction"},kind:"multi-line",required:!0,minLength:1,maxLength:320}],copy:{currentTitle:"On your site now",editTitle:"Edit and publish",empty:"Your site has no hero text yet. Whatever you publish below becomes its first version."}};function ye(n,e){let{article:t,word:o}=n.noun;if(e.length===0)return n.required?`Enter ${t} ${o}.`:null;let i=[...e].length;return i<n.minLength?`Make the ${o} at least ${String(n.minLength)} characters. It is ${String(i)} now.`:i>n.maxLength?`Keep the ${o} to ${String(n.maxLength)} characters or fewer. It is ${String(i)} now.`:e.includes("\u2014")?`The ${o} contains a long dash. Use a comma, a colon or a short dash instead.`:n.kind==="single-line"&&/[\r\n]/.test(e)?`The ${o} must be a single line.`:n.noTrailingFullStop===!0&&e.endsWith(".")?`${o.charAt(0).toUpperCase()}${o.slice(1)}s on your site do not end with a full stop. Remove the last full stop.`:null}function X(n,e){let t={},o={};for(let i of n.fields){let r=Object.hasOwn(e,i.name)?e[i.name]:void 0,l=typeof r=="string"?r.trim():"",s=ye(i,l);Object.defineProperty(s===null?t:o,i.name,{value:s??l,enumerable:!0})}return Object.keys(o).length>0?{ok:!1,errors:o}:{ok:!0,value:t}}function jn(n){if(!Array.isArray(n))return{ok:!1,error:"Enter a list of taglines."};let e=O.fields[0];if(!e)throw new TypeError("Missing siteHero heading definition");let t={...e,name:"text",noun:{article:"a",word:"tagline"},maxLength:Dn},o=[],i=[],r=new Set;for(let[l,s]of n.entries()){if(!s||typeof s!="object"||Array.isArray(s)){i.push({index:l,error:"Enter a key and text for each tagline."});continue}let a=s,c=Object.hasOwn(a,"key")?a.key:void 0;if(typeof c!="string"||!/^[a-z][a-z0-9_-]{0,31}$/.test(c)){i.push({index:l,error:"Use a lowercase key of 1 to 32 letters, numbers, short dashes or underscores, starting with a letter."});continue}if(r.has(c)){i.push({index:l,error:"Use each tagline key only once."});continue}let u=X({...O,fields:[t]},a);if(!u.ok){i.push({index:l,error:u.errors.text??"Invalid tagline."});continue}let d=u.value.text??"";if((d.match(/\p{L}/gu)?.length??0)>=2&&!/\p{Ll}/u.test(d)){i.push({index:l,error:"Use sentence case for the tagline, rather than all capitals."});continue}r.add(c),o.push({key:c,text:d})}return{ok:!0,value:o,dropped:i}}function Un(n){let e=jn(n);if(!e.ok)return e;let t=e.dropped[0];return t?{ok:!1,error:t.error}:{ok:!0,value:e.value}}function Nn(n){return Ln.some(e=>n===e)}function Bn(n,e){let t=X(O,e),o=Un(e.taglines??[]);if(!t.ok||!o.ok||e.layout!==void 0&&!Nn(e.layout))throw new TypeError("Invalid siteHero fallback");let i={heading:t.value.heading??"",intro:t.value.intro??"",layout:e.layout??"columns",taglines:o.value};if(n===null||typeof n!="object"||Array.isArray(n))return{data:i,fallbackFields:["$"]};let r=n,l=X(O,r),s=l.ok?[]:Object.keys(l.errors);for(let y of O.fields)if(!s.includes(y.name)){let g=l.ok?l.value[y.name]:r[y.name];typeof g=="string"&&(y.name==="heading"||y.name==="intro")&&(i[y.name]=g.trim())}let a=Object.hasOwn(r,"layout")?r.layout:void 0,c=[];Nn(a)?i.layout=a:(i.layout="columns",s.push("layout"),c.push(Mn));let u=jn(Object.hasOwn(r,"taglines")?r.taglines:void 0);if(u.ok){i.taglines=u.value;for(let{index:y}of u.dropped)s.push(`taglines[${String(y)}]`);u.dropped.length>0&&c.push(Hn)}else s.push("taglines"),c.push(Pn);let d=[...O.fields.map(y=>y.name),"layout","taglines"].every(y=>s.includes(y));return{data:i,fallbackFields:d?["$"]:s,...c.length>0?{warnings:c}:{}}}function de(){return H({name:"siteHero.v1",query:'*[_id == $id && _type == "siteHero"][0]{heading,intro,layout,taglines}',params:{id:"siteHero"},dependencies:{types:["siteHero"],ids:["siteHero"]},resolve:Bn})}var B=["media-end","media-start","media-below"],x=["beside","stacked"],q=["staggered","aligned"],N={Split:"media-end",HeadingList:"beside",StaggerRow:"staggered"},pe={featureStoriesBlock:"feature_stories",surfaceCardBlock:"cta",accentBandBlock:"accent_band",locationsBlock:"locations",textMediaBlock:"text_media",faqBlock:"faq",galleryBlock:"gallery",contactBlock:"contact",textItemsBlock:"text_items",stepsBlock:"steps",linkListBlock:"link_list",menuBlock:"menu"},on=2,rn=4,A={layoutDefaulted:"section.layout.defaulted",unknownType:"section.type.unknown",imageMissingAlt:"section.image.missing-alt",imageMissingAsset:"section.image.missing-asset",emptySkipped:"section.empty.skipped",menuUnavailable:"section.menu.unavailable"};var S=n=>n!==null&&typeof n=="object"&&!Array.isArray(n),T=n=>typeof n=="string"&&n.trim()!=="",F=n=>n===null||typeof n=="string",L=n=>n===null||typeof n=="string"&&sn.test(n),fn=n=>typeof n=="string"&&ln.test(n),_=n=>T(n)||S(n)&&T(n.text)&&(n.copySource==="captured"||n.copySource==="proposed"),C=n=>n===null||_(n),qn=n=>S(n)&&_(n.label)&&fn(n.href),W=n=>n===null||qn(n),Gn=n=>S(n)&&h(n.children)&&n.children.length>0&&n.children.every(e=>S(e)&&typeof e.text=="string"&&h(e.marks)&&e.marks.every(t=>typeof t=="string"))&&h(n.markDefs)&&n.markDefs.every(e=>S(e)&&T(e.key)&&typeof e.href=="string"),fe=n=>h(n)&&n.length>0&&h(n[0])&&n[0].length>0&&n.every(e=>h(e)&&e.length===n[0].length&&e.every(t=>Gn(t)&&t.children.map(o=>o.text).join("").trim()!=="")),gn=n=>typeof n=="string"||h(n)&&n.length>0&&n.every(e=>S(e)&&(e.kind==="heading"?T(e.text):e.kind==="block"?E(["normal","h2","h3","blockquote"],e.style)&&(e.listItem===null||E(["bullet","number"],e.listItem))&&typeof e.level=="number"&&Gn(e.content):e.kind==="table"&&fe(e.rows))),G=n=>n===null||typeof n=="string"&&v.test(n),E=(n,e)=>n.some(t=>t===e),pn=n=>S(n)&&T(n.asset)&&T(n.alt)&&F(n.caption)&&(n.hotspot===null||S(n.hotspot)&&typeof n.hotspot.x=="number"&&typeof n.hotspot.y=="number");function Yn(n){if(!S(n))return!1;switch(n.kind){case"campaign":return W(n.action)&&h(n.images)&&n.images.every(e=>typeof e=="string"&&L(e));case"locations":return(n.anchor===null||typeof n.anchor=="string"&&v.test(n.anchor))&&_(n.heading)&&C(n.tail)&&L(n.image);case"feature_stories":return _(n.heading)&&C(n.tail)&&h(n.items)&&n.items.length>0&&n.items.every(e=>S(e)&&_(e.heading)&&_(e.body)&&qn(e.action)&&L(e.image)&&an.some(t=>t===e.shape)&&typeof e.card=="boolean");case"accent_band":return _(n.heading)&&(n.tail===void 0||C(n.tail))&&_(n.body)&&W(n.action)&&L(n.image);case"cta":return T(n.heading)&&(n.image===void 0||L(n.image))&&F(n.body)&&S(n.link)&&T(n.link.label)&&fn(n.link.href);default:return!1}}function ge(n){if(!S(n))return!1;switch(n.kind){case"campaign":return!1;case"menu":return E(Z,n.layout)&&E(V,n.decoration)&&n.menu!==null&&xn(n.menu);case"text_media":return G(n.anchor)&&E(B,n.layout)&&_(n.heading)&&C(n.tail)&&_(n.body)&&W(n.action)&&(n.image===null||pn(n.image));case"faq":return G(n.anchor)&&E(x,n.layout)&&C(n.heading)&&C(n.tail)&&C(n.intro)&&h(n.items)&&n.items.length>0&&n.items.every(e=>S(e)&&_(e.question)&&(_(e.answer)||S(e.answer)&&e.answer.kind==="rich"&&gn(e.answer.body)));case"gallery":return G(n.anchor)&&E(q,n.layout)&&C(n.heading)&&h(n.images)&&n.images.length>0&&n.images.every(pn);case"contact":return G(n.anchor)&&E(B,n.layout)&&_(n.heading)&&C(n.body)&&typeof n.showEmail=="boolean"&&typeof n.showPhone=="boolean"&&W(n.action)&&(n.image===null||pn(n.image));case"text_items":return G(n.anchor)&&E(q,n.layout)&&h(n.items)&&n.items.length>=2&&n.items.length<=4&&n.items.every(e=>S(e)&&_(e.title)&&_(e.body));case"steps":return G(n.anchor)&&E(x,n.layout)&&_(n.heading)&&_(n.intro)&&h(n.items)&&n.items.length>0&&n.items.every(e=>S(e)&&_(e.title)&&_(e.body));case"link_list":return G(n.anchor)&&E(x,n.layout)&&_(n.heading)&&C(n.tail)&&h(n.links)&&n.links.length>0&&n.links.every(e=>S(e)&&T(e.title)&&fn(e.href));default:return Yn(n)}}function me(n,e){if(n===void 0)return e===void 0;if(!h(n)||!n.every(ge)||!h(e)||!e.every(r=>S(r)&&E(Object.values(A),r.code)&&T(r.where)))return!1;let t=n,o=t.flatMap(r=>"anchor"in r&&r.anchor!==null?[r.anchor]:[]);return new Set(o).size!==o.length?!1:t.flatMap(r=>{switch(r.kind){case"text_media":case"contact":case"accent_band":return[r.action?.href];case"feature_stories":return r.items.map(l=>l.action.href);case"cta":return[r.link.href];default:return[]}}).every(r=>r===void 0||!r.startsWith("#")||o.includes(r.slice(1)))}function Fn(n){if(!S(n)||!F(n.intro)||!L(n.photo)||!h(n.blocks))return!1;let e=n.hero;if(e!==null&&(!S(e)||!_(e.heading)||!C(e.subline)||!C(e.intro)||!L(e.image)||!L(e.inset)||!W(e.cta)||!W(e.secondaryCta))||!n.blocks.every(Yn))return!1;let t=n,o=t.blocks.flatMap(r=>r.kind==="locations"&&r.anchor!==null?[r.anchor]:[]);return new Set(o).size!==o.length?!1:[t.hero?.cta?.href,t.hero?.secondaryCta?.href,...t.blocks.flatMap(r=>{switch(r.kind){case"campaign":case"accent_band":return[r.action?.href];case"feature_stories":return r.items.map(l=>l.action.href);case"cta":return[r.link.href];default:return[]}})].every(r=>r===void 0||!r.startsWith("#")||o.includes(r.slice(1)))}function Wn(n){return h(n)&&n.every(e=>S(e)&&T(e.where)&&typeof e.text=="string")}function zn(n){return n===null||S(n)&&S(n.composition)&&n.composition.hero!==null&&Fn(n.composition)&&gn(n.body)&&Wn(n.proposedCopy)&&typeof n.campaign=="string"&&["shown","off","not-started","ended","none"].includes(n.campaign)}function mn(n){return n===null||S(n)&&T(n.slug)&&T(n.title)&&Fn(n.composition)&&(n.titleTail===void 0||typeof n.titleTail=="string")&&gn(n.body)&&typeof n.migrated=="boolean"&&Wn(n.proposedCopy)&&me(n.sections,n.warnings)}function Qn(n){return n===null||S(n)&&T(n.name)&&F(n.description)&&S(n.contact)&&F(n.contact.email)&&F(n.contact.phone)&&h(n.social)&&n.social.every(e=>S(e)&&T(e.network)&&typeof e.url=="string"&&/^https?:\/\//.test(e.url))}var Sn="malformed-content",$=class extends Error{code=Sn;documentId;problems;constructor(e,t){super(`${Sn}: ${e}: ${t.join("; ")}`),this.name="MalformedContentError",this.documentId=e,this.problems=t}},sn=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,ln=/^(?:\/(?![/\\])[^\s]*|#[a-z][a-z0-9]*(?:-[a-z0-9]+)*|mailto:[^\s@]+@[^\s@]+|tel:\+?[0-9][0-9 ()-]*|https?:\/\/[^\s/]+[^\s]*)$/,v=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,an=["wide","tall","round","free"],Q="homePage",J="siteSettings",K=class{problems=[];proposed=[];fail(e,t){return this.problems.push(`${e} ${t}`),null}object(e,t){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:this.fail(t,"is not an object")}dense(e,t){return h(e)?!0:(this.fail(t,"contains missing entries"),!1)}optionalString(e,t){return e==null?null:typeof e=="string"?e.trim()===""?null:e:this.fail(t,"is not text")}copy(e,t){if(e==null)return null;let o=this.object(e,t);if(o===null)return null;let i=o.text,r=o.copySource;return i!==void 0&&typeof i!="string"?this.fail(`${t}.text`,"is not text"):r!==void 0&&r!=="captured"&&r!=="proposed"?this.fail(`${t}.copySource`,`is ${JSON.stringify(r)}, not captured or proposed`):typeof i!="string"||i.trim()===""?null:r==="proposed"?(this.proposed.push({where:t,text:i}),{text:i,copySource:"proposed"}):r==="captured"?{text:i,copySource:"captured"}:i}requiredCopy(e,t){let o=this.copy(e,t);return o===null&&!this.problems.some(i=>i.startsWith(t))&&this.fail(t,"is missing its words"),o}photo(e,t){return e==null?null:typeof e=="string"&&sn.test(e)?e:this.fail(t,`is ${JSON.stringify(e)}, not a photo library slug`)}photos(e,t,o){return e==null?[]:Array.isArray(e)?this.dense(e,t)?(e.length>o&&this.fail(t,`holds ${String(e.length)} photos; at most ${String(o)}`),e.map((i,r)=>this.photo(i,`${t}[${String(r)}]`)).filter(i=>i!==null)):[]:(this.fail(t,"is not a list of photos"),[])}action(e,t){if(e==null)return null;let o=this.object(e,t);if(o===null)return null;let i=this.requiredCopy(o.label,`${t}.label`),r=o.href;return typeof r!="string"||!ln.test(r)?this.fail(`${t}.href`,`is ${JSON.stringify(r)}, not a site path, #jump-link, mailto:, tel: or web address`):i===null?null:{label:i,href:r}}requiredAction(e,t){return e==null?this.fail(t,"is missing"):this.action(e,t)}};function z(n){return typeof n=="string"?n:n.text}function he(n){let e=new K,t=un(n,"body",e);if(e.problems.length>0)throw new $("body",e.problems);return t}function un(n,e,t){if(n==null)return"";if(!Array.isArray(n))return t.fail(e,"is not rich text"),"";if(!t.dense(n,e))return"";if(n.some(r=>r!==null&&typeof r=="object"&&!Array.isArray(r)&&r._type==="portableTable"))return Se(n,e,t);let o=[],i=!1;return n.forEach((r,l)=>{let s=`${e}[${String(l)}]`,a=t.object(r,s);if(a===null)return;if(a._type!=="block"){t.fail(s,`is a ${JSON.stringify(a._type)}; only text is supported in rich text so far`);return}let c=_e(a,s,t),u=a.listItem,d=a.style??"normal",y;if(u==="bullet"||u==="number"){let p=typeof a.level=="number"&&a.level>1?a.level:1;y=`${" ".repeat(p-1)}${u==="bullet"?"-":"1."} ${c}`}else if(d==="h2")y=`## ${c}`;else if(d==="h3")y=`### ${c}`;else if(d==="blockquote")y=`> ${c}`;else if(d==="normal")y=c;else{t.fail(`${s}.style`,`is ${JSON.stringify(d)}, which the schema does not offer`);return}let g=u==="bullet"||u==="number";o.length>0&&o.push(g&&i?`
6
6
  `:`
7
7
 
8
- `),o.push(p),r=y}),o.join("")}var ie={strong:"**",em:"*",code:"`"};function se(n,e,t){let o=new Map,r=Array.isArray(n.markDefs)?n.markDefs:[];if(!t.dense(r,`${e}.markDefs`))return"";for(let a of r){let s=a;s._type==="link"&&typeof s._key=="string"&&typeof s.href=="string"&&o.set(s._key,s.href)}let i=Array.isArray(n.children)?n.children:[];return t.dense(i,`${e}.children`)?i.map((a,s)=>{let c=a;if(c._type!=="span"||typeof c.text!="string")return t.fail(`${e}.children[${String(s)}]`,"is not a text span"),"";let l=c.text,u=Array.isArray(c.marks)?c.marks:[];if(!t.dense(u,`${e}.children[${String(s)}].marks`))return"";let d=null;for(let p of u){if(typeof p!="string")continue;let y=ie[p];y!==void 0?l=`${y}${l}${y}`:o.has(p)?d=o.get(p)??null:t.fail(`${e}.children[${String(s)}].marks`,`names ${JSON.stringify(p)}, which is neither a style nor a link`)}return d===null?l:`[${l}](${d})`}).join(""):""}function xn(n,e){if(typeof n!="object"||n===null)return"none";let t=n;if(t.enabled!==!0)return"off";let o=typeof t.startsAt=="string"?Date.parse(t.startsAt):null,r=typeof t.endsAt=="string"?Date.parse(t.endsAt):null;return o!==null&&e.getTime()<o?"not-started":r!==null&&e.getTime()>=r?"ended":"shown"}function q(n,e,t){return typeof e._key=="string"?`${n}[_key=="${e._key}"]`:`${n}[${String(t)}]`}function fn(n,e){let t=new G,o=t.object(n,"homePage");if(o===null)throw new b(U,t.problems);let r=typeof o._id=="string"?o._id:U;o._type!=="homePage"&&t.fail("_type",`is ${JSON.stringify(o._type)}, not homePage`);let i=null,a=o.hero===void 0?t.fail("hero","is missing"):t.object(o.hero,"hero");if(a!==null){let f=t.photos(a.photos,"hero.photos",2),g=t.requiredCopy(a.headline,"hero.headline"),k=t.copy(a.subline,"hero.subline"),A=t.copy(a.lead,"hero.lead"),I=t.action(a.primaryAction,"hero.primaryAction"),Bn=t.action(a.secondaryAction,"hero.secondaryAction");g!==null&&(i={heading:g,subline:k,intro:A,image:f[0]??null,inset:f[1]??null,cta:I,secondaryCta:Bn})}let s=[],c=[],l="",u=xn(o.campaign,e.now);if(u==="shown"){let f=t.object(o.campaign,"campaign");if(f!==null){let g=t.requiredCopy(f.title,"campaign.title"),k=t.photos(f.photos,"campaign.photos",3);k.length===0&&t.fail("campaign.photos","is empty; a shown campaign needs at least one photo");let A=yn(f.body,"campaign.body",t);A===""&&t.fail("campaign.body","is empty; a shown campaign needs its text"),f.bodyCopySource==="proposed"&&t.proposed.push({where:"campaign.body",text:A});let I=t.action(f.action,"campaign.action");I!==null&&c.push({where:"campaign.action.href",href:I.href}),g!==null&&(l=`# ${Z(g)}
8
+ `),o.push(y),i=g}),o.join("")}function cn(n){return typeof n=="string"?n:n.map(e=>e.kind==="heading"?e.text:e.kind==="block"?e.content.children.map(t=>t.text).join(""):e.rows.map(t=>t.map(o=>o.children.map(i=>i.text).join("")).join(" ")).join(`
9
+ `)).join(`
9
10
 
10
- ${A}`),s.push({kind:"campaign",action:I,images:k})}}let d=[],p=o.blocks??[];Array.isArray(p)?t.dense(p,"blocks")&&p.forEach((f,g)=>{let k=t.object(f,`blocks[${String(g)}]`);if(k===null)return;let A=q("blocks",k,g),I=Ln(k,A,t);I!==null&&(c.push(...Nn(I,k,A)),I.kind==="locations"&&I.anchor!==null&&(d.includes(I.anchor)&&t.fail(`${A}.jumpLink`,`repeats "${I.anchor}", already used by another section`),d.push(I.anchor)),s.push(I))}):t.fail("blocks","is not a list");let y=[];i?.cta&&y.push({where:"hero.primaryAction.href",href:i.cta.href}),i?.secondaryCta&&y.push({where:"hero.secondaryAction.href",href:i.secondaryCta.href}),y.push(...c);for(let{where:f,href:g}of y)g.startsWith("#")&&!d.includes(g.slice(1))&&t.fail(f,`jumps to ${g}, which no section on the page is named`);if(t.problems.length>0)throw new b(r,t.problems);return{composition:{intro:null,photo:null,hero:i,blocks:s},body:l,campaign:u,proposedCopy:t.proposed}}function Nn(n,e,t){switch(n.kind){case"feature_stories":{let o=Array.isArray(e.stories)?e.stories:[];return n.items.map((r,i)=>({where:`${q(`${t}.stories`,o[i]??{},i)}.action.href`,href:r.action.href}))}case"accent_band":return n.action===null?[]:[{where:`${t}.action.href`,href:n.action.href}];case"cta":return[{where:`${t}.action.href`,href:n.link.href}];default:return[]}}function K(n,e,t){let o=n.jumpLink;return o==null||o===""?null:typeof o!="string"||!z.test(o)?t.fail(`${e}.jumpLink`,`is ${JSON.stringify(o)}, not lowercase words joined by hyphens`):o}function Ln(n,e,t){switch(n._type){case"featureStoriesBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),r=t.copy(n.tail,`${e}.tail`),i=n.stories;if(!Array.isArray(i)||i.length===0)return t.fail(`${e}.stories`,"has no stories");if(!t.dense(i,`${e}.stories`))return null;let a=[];return i.forEach((s,c)=>{let l=t.object(s,`${e}.stories[${String(c)}]`);if(l===null)return;let u=q(`${e}.stories`,l,c),d=t.requiredCopy(l.heading,`${u}.heading`),p=t.requiredCopy(l.body,`${u}.body`),y=t.requiredAction(l.action,`${u}.action`),f=t.photo(l.photo,`${u}.photo`),g=l.layout??"wide";if(!sn.includes(g)){t.fail(`${u}.layout`,`is ${JSON.stringify(g)}, not wide, tall, round or free`);return}let k=l.onCard??!1;if(typeof k!="boolean"){t.fail(`${u}.onCard`,"is not on or off");return}d===null||p===null||y===null||a.push({heading:d,body:p,action:y,image:f,shape:g,card:k})}),o===null?null:{kind:"feature_stories",heading:o,tail:r,items:a}}case"surfaceCardBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),r=t.copy(n.body,`${e}.body`),i=t.requiredAction(n.action,`${e}.action`);return o===null||i===null?null:{kind:"cta",heading:Z(o),body:r===null?null:Z(r),link:{label:Z(i.label),href:i.href}}}case"accentBandBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),r=t.requiredCopy(n.body,`${e}.body`),i=t.action(n.action,`${e}.action`),a=t.photo(n.photo,`${e}.photo`);return o===null||r===null?null:{kind:"accent_band",heading:o,body:r,action:i,image:a}}case"locationsBlock":{let o=K(n,e,t),r=t.requiredCopy(n.heading,`${e}.heading`),i=t.copy(n.tail,`${e}.tail`),a=t.photo(n.photo,`${e}.photo`);return r===null?null:{kind:"locations",anchor:o,heading:r,tail:i,image:a}}default:return t.fail(`${e}._type`,`is ${JSON.stringify(n._type)}, not a section type this reader knows`)}}function J(n,e,t,o,r){let i=n.layout,a=t.find(s=>s===i);return a!==void 0?a:(r.push({code:T.layoutDefaulted,where:`${e}.layout`}),o)}function pn(n,e,t,o){if(n==null)return null;let r=t.object(n,e);if(r===null)return null;let i=r.asset,a=typeof i=="object"&&i!==null?i._ref:void 0;if(typeof a!="string"||a==="")return o.push({code:T.imageMissingAsset,where:`${e}.asset`}),null;let s=r.alt;if(typeof s!="string"||s.trim()==="")return o.push({code:T.imageMissingAlt,where:`${e}.alt`}),null;let c=t.optionalString(r.caption,`${e}.caption`),l=null;if(r.hotspot!==void 0&&r.hotspot!==null){let u=t.object(r.hotspot,`${e}.hotspot`),d=u?.x,p=u?.y;typeof d=="number"&&typeof p=="number"&&d>=0&&d<=1&&p>=0&&p<=1?l={x:d,y:p}:u!==null&&t.fail(`${e}.hotspot`,"is not a point inside the image")}return{asset:a,alt:s,caption:c,hotspot:l}}function ae(n){return typeof n=="string"?n.slice(0,64).replace(/[^A-Za-z0-9_.-]/g,"?"):"?"}function le(n,e,t,o){switch(n._type){case"menuBlock":{let r=kn(n.menu,`${e}.menu`);if(r===null)return o.push({code:T.menuUnavailable,where:`${e}.menu`}),null;let i=J(n,e,F,v.layout,o),a=B.find(s=>s===n.decoration);return a===void 0&&o.push({code:T.layoutDefaulted,where:`${e}.decoration`}),{kind:"menu",menu:r,layout:i,decoration:a??v.decoration}}case"featureStoriesBlock":case"surfaceCardBlock":case"accentBandBlock":case"locationsBlock":{let r=Ln(n,e,t);return r===null||r.kind==="campaign"?null:r}case"textMediaBlock":{let r=K(n,e,t),i=t.requiredCopy(n.heading,`${e}.heading`),a=t.copy(n.tail,`${e}.tail`),s=t.requiredCopy(n.body,`${e}.body`),c=t.action(n.action,`${e}.action`),l=pn(n.photo,`${e}.photo`,t,o),u=J(n,e,N,D.Split,o);return i===null||s===null?null:{kind:"text_media",anchor:r,layout:u,heading:i,tail:a,body:s,action:c,image:l}}case"faqBlock":{let r=K(n,e,t),i=t.requiredCopy(n.heading,`${e}.heading`),a=t.copy(n.tail,`${e}.tail`),s=t.copy(n.intro,`${e}.intro`),c=J(n,e,W,D.HeadingList,o),l=n.items;if(!Array.isArray(l)||l.length===0)return t.fail(`${e}.items`,"has no questions");if(!t.dense(l,`${e}.items`))return null;let u=[];return l.forEach((d,p)=>{let y=t.object(d,`${e}.items[${String(p)}]`);if(y===null)return;let f=q(`${e}.items`,y,p);if(y._type!==void 0&&y._type!=="faqItem"){t.fail(`${f}._type`,`is ${JSON.stringify(y._type)}, not faqItem`);return}let g=t.requiredCopy(y.question,`${f}.question`),k=t.requiredCopy(y.answer,`${f}.answer`);g!==null&&k!==null&&u.push({question:g,answer:k})}),i===null?null:{kind:"faq",anchor:r,layout:c,heading:i,tail:a,intro:s,items:u}}case"galleryBlock":{let r=K(n,e,t),i=t.copy(n.heading,`${e}.heading`),a=J(n,e,Q,D.StaggerRow,o),s=n.photos??[];if(!Array.isArray(s))return t.fail(`${e}.photos`,"is not a list of photos");if(!t.dense(s,`${e}.photos`))return null;if(s.length<nn||s.length>en)return t.fail(`${e}.photos`,`holds ${String(s.length)} photos; a gallery shows ${String(nn)} to ${String(en)}`);let c=s.flatMap((l,u)=>{let d=pn(l,q(`${e}.photos`,typeof l=="object"&&l!==null?l:{},u),t,o);return d===null?[]:[d]});return c.length===0?(o.push({code:T.emptySkipped,where:e}),null):{kind:"gallery",anchor:r,layout:a,heading:i,images:c}}case"contactBlock":{let r=K(n,e,t),i=t.requiredCopy(n.heading,`${e}.heading`),a=t.copy(n.body,`${e}.body`),s=y=>{let f=n[y]??!0;return typeof f=="boolean"?f:(t.fail(`${e}.${y}`,"is not on or off"),!1)},c=s("showEmail"),l=s("showPhone"),u=t.action(n.action,`${e}.action`),d=pn(n.photo,`${e}.photo`,t,o),p=J(n,e,N,D.Split,o);return i===null?null:!c&&!l&&a===null&&u===null?(o.push({code:T.emptySkipped,where:e}),null):{kind:"contact",anchor:r,layout:p,heading:i,body:a,showEmail:c,showPhone:l,action:u,image:d}}default:return o.push({code:T.unknownType,where:`${e}._type`,type:ae(n._type)}),null}}function ue(n,e,t){switch(n.kind){case"text_media":case"contact":return n.action===null?[]:[{where:`${t}.action.href`,href:n.action.href}];case"menu":case"faq":case"gallery":return[];default:return Nn(n,e,t)}}function ce(n,e){let t=[],o=[];if(!Array.isArray(n))return e.fail("sections","is not a list"),{sections:t,warnings:o};if(!e.dense(n,"sections"))return{sections:t,warnings:o};let r=[],i=[];n.forEach((a,s)=>{let c=e.object(a,`sections[${String(s)}]`);if(c===null)return;let l=q("sections",c,s),u=le(c,l,e,o);if(u===null)return;i.push(...ue(u,c,l));let d="anchor"in u?u.anchor:null;d!==null&&(r.includes(d)&&e.fail(`${l}.jumpLink`,`repeats "${d}", already used by another section`),r.push(d)),t.push(u)});for(let{where:a,href:s}of i)s.startsWith("#")&&!r.includes(s.slice(1))&&e.fail(a,`jumps to ${s}, which no section on the page is named`);return{sections:t,warnings:o}}function V(n){let e=new G,t=e.object(n,"page");if(t===null)throw new b("page",e.problems);let o=typeof t._id=="string"?t._id:"page";t._type!=="page"&&e.fail("_type",`is ${JSON.stringify(t._type)}, not page`);let r=e.optionalString(t.title,"title");r===null&&e.fail("title","is missing"),t.titleCopySource==="proposed"&&r!==null&&e.proposed.push({where:"title",text:r});let i=t.slug,a=typeof i?.current=="string"&&i.current!==""?i.current:null;a===null&&e.fail("slug.current","is missing");let s=e.copy(t.lead,"lead"),c=e.photo(t.photo,"photo"),l=yn(t.body,"body",e);t.bodyCopySource==="proposed"&&e.proposed.push({where:"body",text:l});let u=t.sections===void 0||t.sections===null?null:ce(t.sections,e);if(e.problems.length>0||r===null||a===null)throw new b(o,e.problems);return{slug:a,title:r,composition:{intro:s===null?null:Z(s),photo:c,hero:null,blocks:[]},body:l,migrated:t.migrated===!0,proposedCopy:e.proposed,...u===null?{}:u}}function gn(n){let e=new G,t=e.object(n,"siteSettings");if(t===null)throw new b(j,e.problems);let o=e.optionalString(t.title,"title");o===null&&e.fail("title","is missing; a site needs its name");let r=e.optionalString(t.description,"description"),i=t.contact===void 0?{}:e.object(t.contact,"contact")??{},a=e.optionalString(i.email,"contact.email"),s=e.optionalString(i.phone,"contact.phone"),c=[],l=t.social??[];if(Array.isArray(l)?e.dense(l,"social")&&l.forEach((u,d)=>{let p=e.object(u,`social[${String(d)}]`);if(p===null)return;let y=e.optionalString(p.network,`social[${String(d)}].network`),f=e.optionalString(p.url,`social[${String(d)}].url`);if(y===null||f===null||!/^https?:\/\//.test(f)){e.fail(`social[${String(d)}]`,"needs a network and a web address");return}c.push({network:y,url:f})}):e.fail("social","is not a list"),e.problems.length>0||o===null)throw new b(j,e.problems);return{name:o,description:r,contact:{email:a,phone:s},social:c}}var X="*[_id == $id][0]",Mn=`{..., "sections": coalesce(sections[]{..., _type == "menuBlock" => {menu->{${_n}}}}, sections)}`,mn=`*[_type == "page" && defined(slug.current)]|order(slug.current asc)${Mn}`,hn=`*[_type == "page" && slug.current == $slug][0]${Mn}`;function pe(n){return{home:async({now:e})=>{let t=await n.query(X,{params:{id:U}});return t==null?null:fn(t,{now:e})},pages:async()=>{let e=await n.query(mn);if(!Array.isArray(e))throw new b("page",["the page query did not return a list"]);if(!S(e))throw new b("page",["the page query contains missing entries"]);return e.map(t=>V(t))},pageBySlug:async e=>{let t=await n.query(hn,{params:{slug:e}});return t==null?null:V(t)},siteSettings:async()=>{let e=await n.query(X,{params:{id:j}});return e==null?null:gn(e)}}}function an(n,e,t,o){if(!o(e))throw new TypeError("Invalid CMS content fallback");return n==null?{data:e,fallbackFields:["$"]}:{data:t(n),fallbackFields:[]}}function de(n){if(!(n instanceof Date)||!Number.isFinite(n.getTime()))throw new TypeError("Invalid CMS campaign date");let e=n.getTime();return $({name:"homePage.v1",query:X,params:{id:U},dependencies:{types:["homePage"],ids:[U]},resolve:(t,o)=>an(t,o,r=>fn(r,{now:new Date(e)}),On)})}function ye(n){if(typeof n!="string"||n==="")throw new TypeError("Invalid CMS page slug");return $({name:"page.v1",query:hn,params:{slug:n},dependencies:{types:["page","menu"]},resolve:(e,t)=>an(e,t,V,cn)})}function fe(){return $({name:"pages.v1",query:mn,params:{},dependencies:{types:["page","menu"]},resolve:(n,e)=>an(n,e,t=>{if(!Array.isArray(t))throw new b("page",["the page query did not return a list"]);if(!S(t))throw new b("page",["the page query contains missing entries"]);return t.map(o=>V(o))},t=>S(t)&&t.every(o=>o!==null&&cn(o)))})}function ge(){return $({name:"siteSettings.v1",query:X,params:{id:j},dependencies:{types:["siteSettings"],ids:[j]},resolve:(n,e)=>an(n,e,gn,Rn)})}var Pn=["columns","rows"],Hn=40,Un="siteHero.layout.defaulted",jn="siteHero.tagline.dropped",Gn="siteHero.taglines.defaulted";var Y={key:"hero",documentId:"siteHero",documentType:"siteHero",fields:[{name:"heading",label:"Heading",noun:{article:"a",word:"heading"},kind:"single-line",required:!0,minLength:1,maxLength:80,noTrailingFullStop:!0},{name:"intro",label:"Introduction",noun:{article:"an",word:"introduction"},kind:"multi-line",required:!0,minLength:1,maxLength:320}],copy:{currentTitle:"On your site now",editTitle:"Edit and publish",empty:"Your site has no hero text yet. Whatever you publish below becomes its first version."}};function me(n,e){let{article:t,word:o}=n.noun;if(e.length===0)return n.required?`Enter ${t} ${o}.`:null;let r=[...e].length;return r<n.minLength?`Make the ${o} at least ${String(n.minLength)} characters. It is ${String(r)} now.`:r>n.maxLength?`Keep the ${o} to ${String(n.maxLength)} characters or fewer. It is ${String(r)} now.`:e.includes("\u2014")?`The ${o} contains a long dash. Use a comma, a colon or a short dash instead.`:n.kind==="single-line"&&/[\r\n]/.test(e)?`The ${o} must be a single line.`:n.noTrailingFullStop===!0&&e.endsWith(".")?`${o.charAt(0).toUpperCase()}${o.slice(1)}s on your site do not end with a full stop. Remove the last full stop.`:null}function Sn(n,e){let t={},o={};for(let r of n.fields){let i=Object.hasOwn(e,r.name)?e[r.name]:void 0,a=typeof i=="string"?i.trim():"",s=me(r,a);Object.defineProperty(s===null?t:o,r.name,{value:s??a,enumerable:!0})}return Object.keys(o).length>0?{ok:!1,errors:o}:{ok:!0,value:t}}function qn(n){if(!Array.isArray(n))return{ok:!1,error:"Enter a list of taglines."};let e=Y.fields[0];if(!e)throw new TypeError("Missing siteHero heading definition");let t={...e,name:"text",noun:{article:"a",word:"tagline"},maxLength:Hn},o=[],r=[],i=new Set;for(let[a,s]of n.entries()){if(!s||typeof s!="object"||Array.isArray(s)){r.push({index:a,error:"Enter a key and text for each tagline."});continue}let c=s,l=Object.hasOwn(c,"key")?c.key:void 0;if(typeof l!="string"||!/^[a-z][a-z0-9_-]{0,31}$/.test(l)){r.push({index:a,error:"Use a lowercase key of 1 to 32 letters, numbers, short dashes or underscores, starting with a letter."});continue}if(i.has(l)){r.push({index:a,error:"Use each tagline key only once."});continue}let u=Sn({...Y,fields:[t]},c);if(!u.ok){r.push({index:a,error:u.errors.text??"Invalid tagline."});continue}let d=u.value.text??"";if((d.match(/\p{L}/gu)?.length??0)>=2&&!/\p{Ll}/u.test(d)){r.push({index:a,error:"Use sentence case for the tagline, rather than all capitals."});continue}i.add(l),o.push({key:l,text:d})}return{ok:!0,value:o,dropped:r}}function Yn(n){let e=qn(n);if(!e.ok)return e;let t=e.dropped[0];return t?{ok:!1,error:t.error}:{ok:!0,value:e.value}}function Dn(n){return Pn.some(e=>n===e)}function Fn(n,e){let t=Sn(Y,e),o=Yn(e.taglines??[]);if(!t.ok||!o.ok||e.layout!==void 0&&!Dn(e.layout))throw new TypeError("Invalid siteHero fallback");let r={heading:t.value.heading??"",intro:t.value.intro??"",layout:e.layout??"columns",taglines:o.value};if(n===null||typeof n!="object"||Array.isArray(n))return{data:r,fallbackFields:["$"]};let i=n,a=Sn(Y,i),s=a.ok?[]:Object.keys(a.errors);for(let p of Y.fields)if(!s.includes(p.name)){let y=a.ok?a.value[p.name]:i[p.name];typeof y=="string"&&(p.name==="heading"||p.name==="intro")&&(r[p.name]=y.trim())}let c=Object.hasOwn(i,"layout")?i.layout:void 0,l=[];Dn(c)?r.layout=c:(r.layout="columns",s.push("layout"),l.push(Un));let u=qn(Object.hasOwn(i,"taglines")?i.taglines:void 0);if(u.ok){r.taglines=u.value;for(let{index:p}of u.dropped)s.push(`taglines[${String(p)}]`);u.dropped.length>0&&l.push(jn)}else s.push("taglines"),l.push(Gn);let d=[...Y.fields.map(p=>p.name),"layout","taglines"].every(p=>s.includes(p));return{data:r,fallbackFields:d?["$"]:s,...l.length>0?{warnings:l}:{}}}function he(){return $({name:"siteHero.v1",query:'*[_id == $id && _type == "siteHero"][0]{heading,intro,layout,taglines}',params:{id:"siteHero"},dependencies:{types:["siteHero"],ids:["siteHero"]},resolve:Fn})}export{mn as CONTENT_PAGES_QUERY,hn as CONTENT_PAGE_BY_SLUG_QUERY,W as HEADING_LIST_LAYOUTS,X as HOME_PAGE_DOCUMENT_QUERY,dn as MALFORMED_CONTENT,b as MalformedContentError,rn as READER_ACTION_HREF,en as READER_GALLERY_PHOTO_LIMIT,nn as READER_GALLERY_PHOTO_MIN,U as READER_HOME_PAGE_ID,z as READER_JUMP_LINK,on as READER_PHOTO_SLUG,ee as READER_SECTION_KINDS,j as READER_SITE_SETTINGS_ID,sn as READER_STORY_LAYOUTS,D as SECTION_LAYOUT_DEFAULTS,T as SECTION_WARNINGS,Pn as SITE_HERO_LAYOUTS,Un as SITE_HERO_LAYOUT_WARNING,Gn as SITE_HERO_TAGLINES_DEFAULTED_WARNING,jn as SITE_HERO_TAGLINE_DROPPED_WARNING,Hn as SITE_HERO_TAGLINE_MAX_LENGTH,N as SPLIT_LAYOUTS,Q as STAGGER_ROW_LAYOUTS,xn as campaignState,ye as contentPageQuery,fe as contentPagesQuery,pe as createSiteContentReader,de as homeContentQuery,V as parseContentPage,fn as parseHomePage,Fn as parseSiteHero,gn as parseSiteSettings,re as portableTextToMarkdown,he as siteHeroQuery,ge as siteSettingsQuery,Yn as validateSiteHeroTaglines};
11
+ `)}function Jn(n,e,t){let o=Array.isArray(n.markDefs)?n.markDefs:[];if(!t.dense(o,`${e}.markDefs`))return{children:[],markDefs:[]};let i=[];o.forEach((s,a)=>{let c=t.object(s,`${e}.markDefs[${String(a)}]`);if(c!==null){if(c._type!=="link"||typeof c._key!="string"||typeof c.href!="string"){t.fail(`${e}.markDefs[${String(a)}]`,"is not a link annotation");return}i.push({key:c._key,href:c.href})}});let r=n.children;if(!Array.isArray(r)||!t.dense(r,`${e}.children`))return t.fail(`${e}.children`,"needs text spans"),{children:[],markDefs:i};let l=[];return r.forEach((s,a)=>{let c=`${e}.children[${String(a)}]`,u=t.object(s,c);if(u===null)return;if(u._type!=="span"||typeof u.text!="string"){t.fail(c,"is not a text span");return}let d=u.marks===void 0?[]:u.marks;if(!Array.isArray(d)||!t.dense(d,`${c}.marks`)||d.some(y=>typeof y!="string"||!["strong","em","code"].includes(y)&&!i.some(g=>g.key===y))){t.fail(`${c}.marks`,"contains an unsupported mark");return}l.push({text:u.text,marks:d})}),{children:l,markDefs:i}}function Se(n,e,t){let o=[];return n.forEach((i,r)=>{let l=`${e}[${String(r)}]`,s=t.object(i,l);if(s===null)return;if(s._type==="portableTable"){o.push(ke(s,l,t));return}if(s._type!=="block"){t.fail(l,`is a ${JSON.stringify(s._type)}; only text is supported in rich text so far`);return}let a=s.style??"normal";if(a!=="normal"&&a!=="h2"&&a!=="h3"&&a!=="blockquote"){t.fail(`${l}.style`,`is ${JSON.stringify(a)}, which the schema does not offer`);return}let c=s.listItem,u=typeof s.level=="number"&&s.level>1?s.level:1;o.push({kind:"block",style:a,listItem:c==="bullet"||c==="number"?c:null,level:u,content:Jn(s,l,t)})}),o}function ke(n,e,t){let o=n.rows;if(!Array.isArray(o)||o.length===0||!t.dense(o,`${e}.rows`))return t.fail(`${e}.rows`,"needs at least one row"),{kind:"table",rows:[]};let i=0,r=[];return o.forEach((l,s)=>{let a=`${e}.rows[${String(s)}]`,c=t.object(l,a);if(c===null)return;let u=c.cells;if(!Array.isArray(u)||u.length===0||!t.dense(u,`${a}.cells`)){t.fail(`${a}.cells`,"needs at least one cell");return}s===0&&(i=u.length),u.length!==i&&t.fail(`${a}.cells`,"has a different number of cells");let d=u.map((y,g)=>{let p=`${a}.cells[${String(g)}]`,f=typeof y=="string"?{children:[{text:y,marks:[]}],markDefs:[]}:(()=>{let m=t.object(y,p);return m===null?{children:[],markDefs:[]}:m._type!=="block"||m.style!==void 0&&m.style!=="normal"||m.listItem!==void 0?(t.fail(p,"is not an inline text block"),{children:[],markDefs:[]}):Jn(m,p,t)})();return f.children.map(m=>m.text).join("").trim()===""&&t.fail(p,"is empty or not text"),f});r.push(d)}),{kind:"table",rows:r}}var be={strong:"**",em:"*",code:"`"};function _e(n,e,t){let o=new Map,i=Array.isArray(n.markDefs)?n.markDefs:[];if(!t.dense(i,`${e}.markDefs`))return"";for(let l of i){let s=l;s._type==="link"&&typeof s._key=="string"&&typeof s.href=="string"&&o.set(s._key,s.href)}let r=Array.isArray(n.children)?n.children:[];return t.dense(r,`${e}.children`)?r.map((l,s)=>{let a=l;if(a._type!=="span"||typeof a.text!="string")return t.fail(`${e}.children[${String(s)}]`,"is not a text span"),"";let c=a.text,u=Array.isArray(a.marks)?a.marks:[];if(!t.dense(u,`${e}.children[${String(s)}].marks`))return"";let d=null;for(let y of u){if(typeof y!="string")continue;let g=be[y];g!==void 0?c=`${g}${c}${g}`:o.has(y)?d=o.get(y)??null:t.fail(`${e}.children[${String(s)}].marks`,`names ${JSON.stringify(y)}, which is neither a style nor a link`)}return d===null?c:`[${c}](${d})`}).join(""):""}function Kn(n,e){if(typeof n!="object"||n===null)return"none";let t=n;if(t.enabled!==!0)return"off";let o=typeof t.startsAt=="string"?Date.parse(t.startsAt):null,i=typeof t.endsAt=="string"?Date.parse(t.endsAt):null;return o!==null&&e.getTime()<o?"not-started":i!==null&&e.getTime()>=i?"ended":"shown"}function Y(n,e,t){return typeof e._key=="string"?`${n}[_key=="${e._key}"]`:`${n}[${String(t)}]`}function kn(n,e){let t=new K,o=t.object(n,"homePage");if(o===null)throw new $(Q,t.problems);let i=typeof o._id=="string"?o._id:Q;o._type!=="homePage"&&t.fail("_type",`is ${JSON.stringify(o._type)}, not homePage`);let r=null,l=o.hero===void 0?t.fail("hero","is missing"):t.object(o.hero,"hero");if(l!==null){let p=t.photos(l.photos,"hero.photos",2),f=o.heroSource??"homePage";f!=="homePage"&&f!=="siteHero"&&t.fail("heroSource","must be homePage or siteHero");let m=l.headline===void 0?null:t.requiredCopy(l.headline,"hero.headline");if(m===null&&l.headline===void 0&&f==="siteHero"){let en=o._siteHero;if(en!==null&&typeof en=="object"&&!Array.isArray(en)){let Tn=O.fields.find(ne=>ne.name==="heading");if(Tn===void 0)throw new TypeError("Missing siteHero heading definition");let An=X({...O,fields:[Tn]},en);An.ok&&(m=An.value.heading??null)}}m===null&&l.headline===void 0&&t.fail("hero.headline",f==="siteHero"?"is missing and siteHero.heading is missing or invalid":"is missing; write a headline or select siteHero with a published heading");let k=t.copy(l.subline,"hero.subline"),w=t.copy(l.lead,"hero.lead"),$n=t.action(l.primaryAction,"hero.primaryAction"),R=t.action(l.secondaryAction,"hero.secondaryAction");m!==null&&(r={heading:m,subline:k,intro:w,image:p[0]??null,inset:p[1]??null,cta:$n,secondaryCta:R})}let s=[],a=[],c="",u=Kn(o.campaign,e.now);if(u==="shown"){let p=t.object(o.campaign,"campaign");if(p!==null){let f=t.requiredCopy(p.title,"campaign.title"),m=t.photos(p.photos,"campaign.photos",3);m.length===0&&t.fail("campaign.photos","is empty; a shown campaign needs at least one photo");let k=un(p.body,"campaign.body",t);cn(k)===""&&t.fail("campaign.body","is empty; a shown campaign needs its text"),p.bodyCopySource==="proposed"&&t.proposed.push({where:"campaign.body",text:cn(k)});let w=t.action(p.action,"campaign.action");w!==null&&a.push({where:"campaign.action.href",href:w.href}),f!==null&&(c=typeof k=="string"?`# ${z(f)}
12
+
13
+ ${k}`:[{kind:"heading",text:z(f)},...k]),s.push({kind:"campaign",action:w,images:m})}}let d=[],y=o.blocks??[];Array.isArray(y)?t.dense(y,"blocks")&&y.forEach((p,f)=>{let m=t.object(p,`blocks[${String(f)}]`);if(m===null)return;let k=Y("blocks",m,f),w=Vn(m,k,t);w!==null&&(a.push(...Zn(w,m,k)),w.kind==="locations"&&w.anchor!==null&&(d.includes(w.anchor)&&t.fail(`${k}.jumpLink`,`repeats "${w.anchor}", already used by another section`),d.push(w.anchor)),s.push(w))}):t.fail("blocks","is not a list");let g=[];r?.cta&&g.push({where:"hero.primaryAction.href",href:r.cta.href}),r?.secondaryCta&&g.push({where:"hero.secondaryAction.href",href:r.secondaryCta.href}),g.push(...a);for(let{where:p,href:f}of g)f.startsWith("#")&&!d.includes(f.slice(1))&&t.fail(p,`jumps to ${f}, which no section on the page is named`);if(t.problems.length>0)throw new $(i,t.problems);return{composition:{intro:null,photo:null,hero:r,blocks:s},body:c,campaign:u,proposedCopy:t.proposed}}function Zn(n,e,t){switch(n.kind){case"feature_stories":{let o=Array.isArray(e.stories)?e.stories:[];return n.items.map((i,r)=>({where:`${Y(`${t}.stories`,o[r]??{},r)}.action.href`,href:i.action.href}))}case"accent_band":return n.action===null?[]:[{where:`${t}.action.href`,href:n.action.href}];case"cta":return[{where:`${t}.action.href`,href:n.link.href}];default:return[]}}function M(n,e,t){let o=n.jumpLink;return o==null||o===""?null:typeof o!="string"||!v.test(o)?t.fail(`${e}.jumpLink`,`is ${JSON.stringify(o)}, not lowercase words joined by hyphens`):o}function Vn(n,e,t){switch(n._type){case"featureStoriesBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),i=t.copy(n.tail,`${e}.tail`),r=n.stories;if(!Array.isArray(r)||r.length===0)return t.fail(`${e}.stories`,"has no stories");if(!t.dense(r,`${e}.stories`))return null;let l=[];return r.forEach((s,a)=>{let c=t.object(s,`${e}.stories[${String(a)}]`);if(c===null)return;let u=Y(`${e}.stories`,c,a),d=t.requiredCopy(c.heading,`${u}.heading`),y=t.requiredCopy(c.body,`${u}.body`),g=t.requiredAction(c.action,`${u}.action`),p=t.photo(c.photo,`${u}.photo`),f=c.layout??"wide";if(!an.includes(f)){t.fail(`${u}.layout`,`is ${JSON.stringify(f)}, not wide, tall, round or free`);return}let m=c.onCard??!1;if(typeof m!="boolean"){t.fail(`${u}.onCard`,"is not on or off");return}d===null||y===null||g===null||l.push({heading:d,body:y,action:g,image:p,shape:f,card:m})}),o===null?null:{kind:"feature_stories",heading:o,tail:i,items:l}}case"surfaceCardBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),i=t.copy(n.body,`${e}.body`),r=t.requiredAction(n.action,`${e}.action`),l=t.photo(n.photo,`${e}.photo`);return o===null||r===null?null:{kind:"cta",heading:z(o),body:i===null?null:z(i),link:{label:z(r.label),href:r.href},...n.photo===void 0?{}:{image:l}}}case"accentBandBlock":{let o=t.requiredCopy(n.heading,`${e}.heading`),i=t.copy(n.tail,`${e}.tail`),r=t.requiredCopy(n.body,`${e}.body`),l=t.action(n.action,`${e}.action`),s=t.photo(n.photo,`${e}.photo`);return o===null||r===null?null:{kind:"accent_band",heading:o,body:r,action:l,image:s,...n.tail===void 0?{}:{tail:i}}}case"locationsBlock":{let o=M(n,e,t),i=t.requiredCopy(n.heading,`${e}.heading`),r=t.copy(n.tail,`${e}.tail`),l=t.photo(n.photo,`${e}.photo`);return i===null?null:{kind:"locations",anchor:o,heading:i,tail:r,image:l}}default:return t.fail(`${e}._type`,`is ${JSON.stringify(n._type)}, not a section type this reader knows`)}}function D(n,e,t,o,i){let r=n.layout,l=t.find(s=>s===r);return l!==void 0?l:(i.push({code:A.layoutDefaulted,where:`${e}.layout`}),o)}function hn(n,e,t,o){if(n==null)return null;let i=t.object(n,e);if(i===null)return null;let r=i.asset,l=typeof r=="object"&&r!==null?r._ref:void 0;if(typeof l!="string"||l==="")return o.push({code:A.imageMissingAsset,where:`${e}.asset`}),null;let s=i.alt;if(typeof s!="string"||s.trim()==="")return o.push({code:A.imageMissingAlt,where:`${e}.alt`}),null;let a=t.optionalString(i.caption,`${e}.caption`),c=null;if(i.hotspot!==void 0&&i.hotspot!==null){let u=t.object(i.hotspot,`${e}.hotspot`),d=u?.x,y=u?.y;typeof d=="number"&&typeof y=="number"&&d>=0&&d<=1&&y>=0&&y<=1?c={x:d,y}:u!==null&&t.fail(`${e}.hotspot`,"is not a point inside the image")}return{asset:l,alt:s,caption:a,hotspot:c}}function we(n){return typeof n=="string"?n.slice(0,64).replace(/[^A-Za-z0-9_.-]/g,"?"):"?"}function Ie(n,e,t,o){let i=(r,l,s,a)=>{if(!Array.isArray(r)||r.length<s||r.length>a||!t.dense(r,l))return t.fail(l,`needs ${String(s)} to ${String(a)} items`),[];let c=[];return r.forEach((u,d)=>{let y=t.object(u,`${l}[${String(d)}]`);if(y===null)return;let g=Y(l,y,d),p=t.requiredCopy(y.title,`${g}.title`),f=t.requiredCopy(y.body,`${g}.body`);p!==null&&f!==null&&c.push({title:p,body:f})}),c};switch(n._type){case"menuBlock":{let r=Rn(n.menu,`${e}.menu`);if(r===null)return o.push({code:A.menuUnavailable,where:`${e}.menu`}),null;let l=D(n,e,Z,tn.layout,o),s=V.find(a=>a===n.decoration);return s===void 0&&o.push({code:A.layoutDefaulted,where:`${e}.decoration`}),{kind:"menu",menu:r,layout:l,decoration:s??tn.decoration}}case"featureStoriesBlock":case"surfaceCardBlock":case"accentBandBlock":case"locationsBlock":{let r=Vn(n,e,t);return r===null||r.kind==="campaign"?null:r}case"textMediaBlock":{let r=M(n,e,t),l=t.requiredCopy(n.heading,`${e}.heading`),s=t.copy(n.tail,`${e}.tail`),a=t.requiredCopy(n.body,`${e}.body`),c=t.action(n.action,`${e}.action`),u=hn(n.photo,`${e}.photo`,t,o),d=D(n,e,B,N.Split,o);return l===null||a===null?null:{kind:"text_media",anchor:r,layout:d,heading:l,tail:s,body:a,action:c,image:u}}case"faqBlock":{let r=M(n,e,t),l=t.copy(n.heading,`${e}.heading`),s=t.copy(n.tail,`${e}.tail`),a=t.copy(n.intro,`${e}.intro`),c=D(n,e,x,N.HeadingList,o),u=n.items;if(!Array.isArray(u)||u.length===0)return t.fail(`${e}.items`,"has no questions");if(!t.dense(u,`${e}.items`))return null;let d=[];return u.forEach((y,g)=>{let p=t.object(y,`${e}.items[${String(g)}]`);if(p===null)return;let f=Y(`${e}.items`,p,g);if(p._type!==void 0&&p._type!=="faqItem"){t.fail(`${f}._type`,`is ${JSON.stringify(p._type)}, not faqItem`);return}let m=t.requiredCopy(p.question,`${f}.question`),k=p.answer,w=typeof k=="object"&&k!==null&&!Array.isArray(k)?k:null,R=Array.isArray(k)||w!==null&&w.content!==void 0?{kind:"rich",body:un(Array.isArray(k)?k:w?.content,Array.isArray(k)?`${f}.answer`:`${f}.answer.content`,t)}:typeof k=="string"?k:t.requiredCopy(k,`${f}.answer`);(R===""||typeof R=="object"&&R!==null&&"kind"in R&&cn(R.body)==="")&&t.fail(`${f}.answer`,"is empty"),m!==null&&R!==null&&d.push({question:m,answer:R})}),{kind:"faq",anchor:r,layout:c,heading:l,tail:s,intro:a,items:d}}case"textItemsBlock":{let r=M(n,e,t),l=D(n,e,q,N.StaggerRow,o),s=i(n.items,`${e}.items`,2,4);return{kind:"text_items",anchor:r,layout:l,items:s}}case"stepsBlock":{let r=M(n,e,t),l=D(n,e,x,N.HeadingList,o),s=t.requiredCopy(n.heading,`${e}.heading`),a=t.requiredCopy(n.intro,`${e}.intro`),c=i(n.items,`${e}.items`,1,100);return s===null||a===null?null:{kind:"steps",anchor:r,layout:l,heading:s,intro:a,items:c}}case"linkListBlock":{let r=M(n,e,t),l=D(n,e,x,N.HeadingList,o),s=t.requiredCopy(n.heading,`${e}.heading`),a=t.copy(n.tail,`${e}.tail`),c=n.links;if(!Array.isArray(c)||c.length===0||!t.dense(c,`${e}.links`))return t.fail(`${e}.links`,"needs at least one page");let u=[];return c.forEach((d,y)=>{let g=t.object(d,`${e}.links[${String(y)}]`);if(g===null)return;let p=t.object(g.page,`${e}.links[${String(y)}].page`);if(p===null)return;let f=t.optionalString(p.title,`${e}.links[${String(y)}].page.title`),m=t.optionalString(p.slug,`${e}.links[${String(y)}].page.slug`);!f||!m||!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(m)?t.fail(`${e}.links[${String(y)}].page`,"has no readable page title or slug"):u.push({title:f,href:`/pages/${m}/`})}),s===null?null:{kind:"link_list",anchor:r,layout:l,heading:s,tail:a,links:u}}case"galleryBlock":{let r=M(n,e,t),l=t.copy(n.heading,`${e}.heading`),s=D(n,e,q,N.StaggerRow,o),a=n.photos??[];if(!Array.isArray(a))return t.fail(`${e}.photos`,"is not a list of photos");if(!t.dense(a,`${e}.photos`))return null;if(a.length<on||a.length>rn)return t.fail(`${e}.photos`,`holds ${String(a.length)} photos; a gallery shows ${String(on)} to ${String(rn)}`);let c=a.flatMap((u,d)=>{let y=hn(u,Y(`${e}.photos`,typeof u=="object"&&u!==null?u:{},d),t,o);return y===null?[]:[y]});return c.length===0?(o.push({code:A.emptySkipped,where:e}),null):{kind:"gallery",anchor:r,layout:s,heading:l,images:c}}case"contactBlock":{let r=M(n,e,t),l=t.requiredCopy(n.heading,`${e}.heading`),s=t.copy(n.body,`${e}.body`),a=p=>{let f=n[p]??!0;return typeof f=="boolean"?f:(t.fail(`${e}.${p}`,"is not on or off"),!1)},c=a("showEmail"),u=a("showPhone"),d=t.action(n.action,`${e}.action`),y=hn(n.photo,`${e}.photo`,t,o),g=D(n,e,B,N.Split,o);return l===null?null:!c&&!u&&s===null&&d===null?(o.push({code:A.emptySkipped,where:e}),null):{kind:"contact",anchor:r,layout:g,heading:l,body:s,showEmail:c,showPhone:u,action:d,image:y}}default:return o.push({code:A.unknownType,where:`${e}._type`,type:we(n._type)}),null}}function $e(n,e,t){switch(n.kind){case"text_media":case"contact":return n.action===null?[]:[{where:`${t}.action.href`,href:n.action.href}];case"menu":case"faq":case"gallery":case"text_items":case"steps":case"link_list":return[];default:return Zn(n,e,t)}}function Te(n,e){let t=[],o=[];if(!Array.isArray(n))return e.fail("sections","is not a list"),{sections:t,warnings:o};if(!e.dense(n,"sections"))return{sections:t,warnings:o};let i=[],r=[];n.forEach((l,s)=>{let a=e.object(l,`sections[${String(s)}]`);if(a===null)return;let c=Y("sections",a,s),u=Ie(a,c,e,o);if(u===null)return;r.push(...$e(u,a,c));let d="anchor"in u?u.anchor:null;d!==null&&(i.includes(d)&&e.fail(`${c}.jumpLink`,`repeats "${d}", already used by another section`),i.push(d)),t.push(u)});for(let{where:l,href:s}of r)s.startsWith("#")&&!i.includes(s.slice(1))&&e.fail(l,`jumps to ${s}, which no section on the page is named`);return{sections:t,warnings:o}}function nn(n){let e=new K,t=e.object(n,"page");if(t===null)throw new $("page",e.problems);let o=typeof t._id=="string"?t._id:"page";t._type!=="page"&&e.fail("_type",`is ${JSON.stringify(t._type)}, not page`);let i=e.optionalString(t.title,"title"),r=e.optionalString(t.titleTail,"titleTail");i===null&&e.fail("title","is missing"),t.titleCopySource==="proposed"&&i!==null&&e.proposed.push({where:"title",text:i});let l=t.slug,s=typeof l?.current=="string"&&l.current!==""?l.current:null;s===null&&e.fail("slug.current","is missing");let a=e.copy(t.lead,"lead"),c=e.photo(t.photo,"photo"),u=un(t.body,"body",e);t.bodyCopySource==="proposed"&&e.proposed.push({where:"body",text:cn(u)});let d=t.sections===void 0||t.sections===null?null:Te(t.sections,e);if(e.problems.length>0||i===null||s===null)throw new $(o,e.problems);return{slug:s,title:i,...t.titleTail===void 0?{}:{titleTail:r??""},composition:{intro:a===null?null:z(a),photo:c,hero:null,blocks:[]},body:u,migrated:t.migrated===!0,proposedCopy:e.proposed,...d===null?{}:d}}function bn(n){let e=new K,t=e.object(n,"siteSettings");if(t===null)throw new $(J,e.problems);let o=e.optionalString(t.title,"title");o===null&&e.fail("title","is missing; a site needs its name");let i=e.optionalString(t.description,"description"),r=t.contact===void 0?{}:e.object(t.contact,"contact")??{},l=e.optionalString(r.email,"contact.email"),s=e.optionalString(r.phone,"contact.phone"),a=[],c=t.social??[];if(Array.isArray(c)?e.dense(c,"social")&&c.forEach((u,d)=>{let y=e.object(u,`social[${String(d)}]`);if(y===null)return;let g=e.optionalString(y.network,`social[${String(d)}].network`),p=e.optionalString(y.url,`social[${String(d)}].url`);if(g===null||p===null||!/^https?:\/\//.test(p)){e.fail(`social[${String(d)}]`,"needs a network and a web address");return}a.push({network:g,url:p})}):e.fail("social","is not a list"),e.problems.length>0||o===null)throw new $(J,e.problems);return{name:o,description:i,contact:{email:l,phone:s},social:a}}var _n="*[_id == $id][0]",Xn='*[_id == $id][0]{..., "_siteHero": *[_id == "siteHero" && _type == "siteHero"][0]{heading}}',vn=`{..., "sections": coalesce(sections[]{..., _type == "menuBlock" => {menu->{${En}}}, _type == "linkListBlock" => {links[]{..., "page": page->{title, "slug": slug.current}}}}, sections)}`,wn=`*[_type == "page" && defined(slug.current)]|order(slug.current asc)${vn}`,In=`*[_type == "page" && slug.current == $slug][0]${vn}`;function Ae(n){return{home:async({now:e})=>{let t=await n.query(Xn,{params:{id:Q}});return t==null?null:kn(t,{now:e})},pages:async()=>{let e=await n.query(wn);if(!Array.isArray(e))throw new $("page",["the page query did not return a list"]);if(!h(e))throw new $("page",["the page query contains missing entries"]);return e.map(t=>nn(t))},pageBySlug:async e=>{let t=await n.query(In,{params:{slug:e}});return t==null?null:nn(t)},siteSettings:async()=>{let e=await n.query(_n,{params:{id:J}});return e==null?null:bn(e)}}}function yn(n,e,t,o){if(!o(e))throw new TypeError("Invalid CMS content fallback");return n==null?{data:e,fallbackFields:["$"]}:{data:t(n),fallbackFields:[]}}function Ee(n){if(!(n instanceof Date)||!Number.isFinite(n.getTime()))throw new TypeError("Invalid CMS campaign date");let e=n.getTime();return H({name:"homePage.v1",query:Xn,params:{id:Q},dependencies:{types:["homePage","siteHero"],ids:[Q,"siteHero"]},resolve:(t,o)=>yn(t,o,i=>kn(i,{now:new Date(e)}),zn)})}function Ce(n){if(typeof n!="string"||n==="")throw new TypeError("Invalid CMS page slug");return H({name:"page.v1",query:In,params:{slug:n},dependencies:{types:["page","menu"]},resolve:(e,t)=>yn(e,t,nn,mn)})}function Re(){return H({name:"pages.v1",query:wn,params:{},dependencies:{types:["page","menu"]},resolve:(n,e)=>yn(n,e,t=>{if(!Array.isArray(t))throw new $("page",["the page query did not return a list"]);if(!h(t))throw new $("page",["the page query contains missing entries"]);return t.map(o=>nn(o))},t=>h(t)&&t.every(o=>o!==null&&mn(o)))})}function Oe(){return H({name:"siteSettings.v1",query:_n,params:{id:J},dependencies:{types:["siteSettings"],ids:[J]},resolve:(n,e)=>yn(n,e,bn,Qn)})}export{wn as CONTENT_PAGES_QUERY,In as CONTENT_PAGE_BY_SLUG_QUERY,x as HEADING_LIST_LAYOUTS,_n as HOME_PAGE_DOCUMENT_QUERY,Sn as MALFORMED_CONTENT,$ as MalformedContentError,ln as READER_ACTION_HREF,rn as READER_GALLERY_PHOTO_LIMIT,on as READER_GALLERY_PHOTO_MIN,Q as READER_HOME_PAGE_ID,v as READER_JUMP_LINK,sn as READER_PHOTO_SLUG,pe as READER_SECTION_KINDS,J as READER_SITE_SETTINGS_ID,an as READER_STORY_LAYOUTS,N as SECTION_LAYOUT_DEFAULTS,A as SECTION_WARNINGS,Ln as SITE_HERO_LAYOUTS,Mn as SITE_HERO_LAYOUT_WARNING,Pn as SITE_HERO_TAGLINES_DEFAULTED_WARNING,Hn as SITE_HERO_TAGLINE_DROPPED_WARNING,Dn as SITE_HERO_TAGLINE_MAX_LENGTH,B as SPLIT_LAYOUTS,q as STAGGER_ROW_LAYOUTS,Kn as campaignState,Ce as contentPageQuery,Re as contentPagesQuery,Ae as createSiteContentReader,Ee as homeContentQuery,nn as parseContentPage,kn as parseHomePage,Bn as parseSiteHero,bn as parseSiteSettings,he as portableTextToMarkdown,de as siteHeroQuery,Oe as siteSettingsQuery,Un as validateSiteHeroTaglines};
11
14
  //# sourceMappingURL=site-content.mjs.map