@aglyn/aglyn 1.0.0-beta.258 → 1.0.0-beta.260

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/aglyn",
3
- "version": "1.0.0-beta.258",
3
+ "version": "1.0.0-beta.260",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -37,16 +37,16 @@
37
37
  "./package.json": "./package.json"
38
38
  },
39
39
  "dependencies": {
40
- "@aglyn/shared-data-enums": "1.0.0-beta.258",
41
- "@aglyn/shared-data-mdi": "1.0.0-beta.258",
42
- "@aglyn/shared-data-types": "1.0.0-beta.258",
43
- "@aglyn/shared-util-email": "1.0.0-beta.258",
44
- "@aglyn/shared-util-first-touch": "1.0.0-beta.258",
45
- "@aglyn/shared-util-http": "1.0.0-beta.258",
46
- "@aglyn/shared-util-logger": "1.0.0-beta.258",
47
- "@aglyn/shared-util-timestamp": "1.0.0-beta.258",
48
- "@aglyn/shared-util-tools": "1.0.0-beta.258",
49
- "@aglyn/shared-util-vendor": "1.0.0-beta.258",
40
+ "@aglyn/shared-data-enums": "1.0.0-beta.260",
41
+ "@aglyn/shared-data-mdi": "1.0.0-beta.260",
42
+ "@aglyn/shared-data-types": "1.0.0-beta.260",
43
+ "@aglyn/shared-util-email": "1.0.0-beta.260",
44
+ "@aglyn/shared-util-first-touch": "1.0.0-beta.260",
45
+ "@aglyn/shared-util-http": "1.0.0-beta.260",
46
+ "@aglyn/shared-util-logger": "1.0.0-beta.260",
47
+ "@aglyn/shared-util-timestamp": "1.0.0-beta.260",
48
+ "@aglyn/shared-util-tools": "1.0.0-beta.260",
49
+ "@aglyn/shared-util-vendor": "1.0.0-beta.260",
50
50
  "@data-driven-forms/react-form-renderer": "^4.2.0",
51
51
  "@msgpack/msgpack": "^3.1.3",
52
52
  "@types/unist": "^3.0.3",
@@ -16,6 +16,7 @@
16
16
  */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
17
  import { nodeInteractionSelector } from "./node-interactions.js";
18
18
  import { SCREEN_ROOT_PATH } from "./screen-route.js";
19
+ import { applyElementMotion } from "./element-motion.js";
19
20
  import { buildStarterNodes as buildNodes, starterSection as container, starterText as text, starterTextField as textField } from "./starter-template-nodes.js";
20
21
  /**
21
22
  * The website every new site is born with (AGL-3497).
@@ -431,7 +432,9 @@ const faq = (id, question, answer, defaultExpanded = false)=>({
431
432
  title: name,
432
433
  description: defaultHomeDescription(siteName)
433
434
  },
434
- nodes: buildNodes([
435
+ // Its sections move as an author would set them up (AGL-3838): the hero
436
+ // climbs in on load, the rest slide in on scroll, the cards one by one.
437
+ nodes: applyElementMotion(buildNodes([
435
438
  // ── Hero ────────────────────────────────────────────────────────────
436
439
  band('dh_heroSection', 'Introduction', 'xl', [
437
440
  grid('dh_heroGrid', 6, [
@@ -629,7 +632,7 @@ const faq = (id, question, answer, defaultExpanded = false)=>({
629
632
  heading('dh_contact', 'Contact', 'Get in touch', 'Questions, quotes or bookings: send a message and we will reply as ' + 'soon as we can.'),
630
633
  contactForm()
631
634
  ])
632
- ])
635
+ ]))
633
636
  };
634
637
  }
635
638
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/default-site.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { HostTheme } from '@aglyn/shared-data-types'\nimport type { NodeInteraction } from './node-interactions'\nimport { nodeInteractionSelector } from './node-interactions'\nimport { SCREEN_ROOT_PATH } from './screen-route'\nimport {\n buildStarterNodes as buildNodes,\n starterSection as container,\n starterText as text,\n starterTextField as textField,\n type StarterNodeSpec as NodeSpec,\n type StarterTemplateScreen,\n} from './starter-template-nodes'\n\n/**\n * The website every new site is born with (AGL-3497).\n *\n * It used to be one heading and \"our new website is on its way\" (AGL-3408):\n * a site that answered `/` instead of 404ing, and showed an owner nothing of\n * what the product does. Now a site starts as a real one — a shared header\n * and footer, a home page with the sections an ordinary business site has,\n * photos, a theme and its SEO — and each section says, to the owner, how to\n * make it theirs.\n *\n * It is published and open to search engines from the first request, as every\n * new site's home page has been since AGL-3408.\n *\n * The photos ship with the apps under `/_static/starter/` (see the CREDITS\n * file there). A published page's `img-src` admits only its own origin and\n * the media CDN, so a stock-photo URL would be blocked, and there is no\n * platform-wide media scope to hold them. Both the tenant and the console\n * serve the same files at the same path, so they draw on the live site and in\n * the Besigner alike.\n *\n * PERSISTED IDENTIFIERS: every node id below is stored on every new site.\n */\n\n/** Where the starter photos are served from, on every tenant and in the console. */\nexport const DEFAULT_SITE_IMAGE_BASE = '/_static/starter'\n\n/**\n * The starter photos, with the sizes the files actually are and the words\n * that describe what each one shows: wherever a starter photo is placed, its\n * alt text is its own, never words written for another picture (AGL-3831).\n */\nexport const DEFAULT_SITE_IMAGES = {\n hero: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/hero-team.jpg`,\n width: 1600,\n height: 1067,\n alt: 'A small team working together around a table in a bright office',\n },\n about: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/about-owner.jpg`,\n width: 1600,\n height: 900,\n alt: 'A smiling business owner standing behind the counter of her coffee shop',\n },\n desk: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-desk.jpg`,\n width: 1600,\n height: 1068,\n alt: 'A tidy desk with a laptop, a lamp and fresh flowers',\n },\n plants: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-plants.jpg`,\n width: 1200,\n height: 900,\n alt: 'Houseplants on a sunny windowsill',\n },\n craft: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-craft.jpg`,\n width: 1600,\n height: 1065,\n alt: 'Hands working on a craft project at a workbench',\n },\n} as const\n\n/** The node a call to action scrolls to, and the one the features link names. */\nexport const DEFAULT_HOME_CONTACT_SECTION_ID = 'dh_contactSection'\nexport const DEFAULT_HOME_FEATURES_SECTION_ID = 'dh_featuresSection'\n\n/** Room left above a scrolled-to section for the sticky header. */\nconst HEADER_OFFSET_PX = 72\n\n/**\n * Icon outlines, from Material Design Icons. Written in rather than looked up:\n * a published page reads an icon's stored path and never loads the catalog\n * (AGL-1212), and the catalog is the whole icon set.\n */\nconst ICONS = {\n 'pencil-outline':\n 'M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z',\n 'palette-outline':\n 'M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2C17.5,2 22,6 22,11A6,6 0 0,1 16,17H14.2C13.9,17 13.7,17.2 13.7,17.5C13.7,17.6 13.8,17.7 13.8,17.8C14.2,18.3 14.4,18.9 14.4,19.5C14.5,20.9 13.4,22 12,22M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C12.3,20 12.5,19.8 12.5,19.5C12.5,19.3 12.4,19.2 12.4,19.1C12,18.6 11.8,18.1 11.8,17.5C11.8,16.1 12.9,15 14.3,15H16A4,4 0 0,0 20,11C20,7.1 16.4,4 12,4M6.5,10C7.3,10 8,10.7 8,11.5C8,12.3 7.3,13 6.5,13C5.7,13 5,12.3 5,11.5C5,10.7 5.7,10 6.5,10M9.5,6C10.3,6 11,6.7 11,7.5C11,8.3 10.3,9 9.5,9C8.7,9 8,8.3 8,7.5C8,6.7 8.7,6 9.5,6M14.5,6C15.3,6 16,6.7 16,7.5C16,8.3 15.3,9 14.5,9C13.7,9 13,8.3 13,7.5C13,6.7 13.7,6 14.5,6M17.5,10C18.3,10 19,10.7 19,11.5C19,12.3 18.3,13 17.5,13C16.7,13 16,12.3 16,11.5C16,10.7 16.7,10 17.5,10Z',\n 'image-multiple-outline':\n 'M21,17H7V3H21M21,1H7A2,2 0 0,0 5,3V17A2,2 0 0,0 7,19H21A2,2 0 0,0 23,17V3A2,2 0 0,0 21,1M3,5H1V21A2,2 0 0,0 3,23H19V21H3M15.96,10.29L13.21,13.83L11.25,11.47L8.5,15H19.5L15.96,10.29Z',\n 'email-fast-outline':\n 'M22 5.5H9C7.9 5.5 7 6.4 7 7.5V16.5C7 17.61 7.9 18.5 9 18.5H22C23.11 18.5 24 17.61 24 16.5V7.5C24 6.4 23.11 5.5 22 5.5M22 16.5H9V9.17L15.5 12.5L22 9.17V16.5M15.5 10.81L9 7.5H22L15.5 10.81M5 16.5C5 16.67 5.03 16.83 5.05 17H1C.448 17 0 16.55 0 16S.448 15 1 15H5V16.5M3 7H5.05C5.03 7.17 5 7.33 5 7.5V9H3C2.45 9 2 8.55 2 8S2.45 7 3 7M1 12C1 11.45 1.45 11 2 11H5V13H2C1.45 13 1 12.55 1 12Z',\n magnify:\n 'M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z',\n 'page-layout-header-footer':\n 'M18 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V4C20 2.9 19.11 2 18 2M18 20H6V16H18V20M18 8H6V4H18V8Z',\n 'check-circle-outline':\n 'M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 20C7.59 20 4 16.41 4 12S7.59 4 12 4 20 7.59 20 12 16.41 20 12 20M16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z',\n 'format-quote-open': 'M10,7L8,11H11V17H5V11L7,7H10M18,7L16,11H19V17H13V11L15,7H18Z',\n} as const\n\ntype IconId = keyof typeof ICONS\n\nconst icon = (id: string, iconId: IconId, color = 'primary.main'): NodeSpec => ({\n id,\n componentId: 'icon',\n props: { iconId, iconPath: ICONS[iconId], size: 32 },\n sx: { color },\n})\n\n/** A click that brings a section of the page into view under the header. */\nconst scrollTo = (targetId: string, name: string): NodeInteraction[] => [\n {\n id: 'scroll-to-section',\n name: `Scroll to ${name}`,\n enabled: true,\n trigger: { event: 'elementClick', everyTime: true },\n steps: [\n {\n type: 'scrollTo',\n selector: nodeInteractionSelector(targetId),\n offsetPx: HEADER_OFFSET_PX,\n },\n ],\n },\n]\n\nconst button = (\n id: string,\n label: string,\n variant: 'contained' | 'outlined',\n target: { id: string; name: string },\n extra?: Record<string, unknown>,\n): NodeSpec => ({\n id,\n componentId: 'muiButton',\n props: { variant, size: 'large', children: label, ...extra },\n interactions: scrollTo(target.id, target.name),\n})\n\nconst CONTACT = { id: DEFAULT_HOME_CONTACT_SECTION_ID, name: 'the contact form' }\nconst FEATURES = { id: DEFAULT_HOME_FEATURES_SECTION_ID, name: 'what is included' }\n\n/**\n * One full-width band: a semantic `section` carrying the band's background,\n * around a Container at a stock width carrying its rhythm (AGL-1298).\n */\nconst band = (\n id: string,\n ariaLabel: string,\n width: 'md' | 'lg' | 'xl',\n children: NodeSpec[],\n sx?: Record<string, unknown>,\n): NodeSpec => ({\n id,\n componentId: 'section',\n props: { element: 'section', ariaLabel },\n ...(sx ? { sx } : {}),\n children: [container(`${id}Inner`, width, 10, children)],\n})\n\n/** A section's heading block: an overline, the heading and a lede. */\nconst heading = (\n prefix: string,\n overline: string,\n title: string,\n lede: string,\n align: 'center' | 'left' = 'center',\n): NodeSpec => ({\n id: `${prefix}Heading`,\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n sx: {\n alignItems: align === 'center' ? 'center' : 'flex-start',\n marginBottom: 6,\n ...(align === 'center' ? { marginLeft: 'auto', marginRight: 'auto', maxWidth: 'md' } : {}),\n },\n children: [\n text(`${prefix}Overline`, 'overline', overline, { align, color: 'primary' }),\n text(`${prefix}Title`, 'h2', title, { align }),\n text(`${prefix}Lede`, 'lede', lede, { align, color: 'text.secondary' }),\n ],\n})\n\nconst grid = (id: string, spacing: number, children: NodeSpec[], sx?: Record<string, unknown>): NodeSpec => ({\n id,\n componentId: 'muiGrid',\n props: { container: true, spacing },\n ...(sx ? { sx } : {}),\n children,\n})\n\n/**\n * A grid cell. `size` is the Grid element's STORED syntax — `'xs:12 md:6'`,\n * per-breakpoint column counts in one string — which its parser turns into\n * MUI's responsive object; an object here would be ignored.\n */\nconst cell = (id: string, size: string, children: NodeSpec[], sx?: Record<string, unknown>): NodeSpec => ({\n id,\n componentId: 'muiGrid',\n props: { size },\n ...(sx ? { sx } : {}),\n children,\n})\n\nconst photo = (\n id: string,\n image: { src: string; width: number; height: number; alt: string },\n height: string,\n loading: 'eager' | 'lazy' = 'lazy',\n): NodeSpec => ({\n id,\n componentId: 'image',\n props: {\n src: image.src,\n alt: image.alt,\n height,\n objectFit: 'cover',\n radius: 16,\n loading,\n intrinsicWidth: image.width,\n intrinsicHeight: image.height,\n },\n})\n\nconst featureCard = (id: string, iconId: IconId, title: string, body: string): NodeSpec =>\n cell(`${id}Cell`, 'xs:12 sm:6 md:4', [\n {\n id,\n componentId: 'muiCard',\n props: { variant: 'outlined' },\n sx: { height: '100%', borderRadius: 3 },\n children: [\n {\n id: `${id}Content`,\n componentId: 'muiCardContent',\n sx: { paddingTop: 4, paddingRight: 4, paddingBottom: 4, paddingLeft: 4 },\n children: [\n {\n id: `${id}Stack`,\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n icon(`${id}Icon`, iconId),\n text(`${id}Title`, 'h5', title, { component: 'h3' }),\n text(`${id}Body`, 'body1', body, { color: 'text.secondary' }),\n ],\n },\n ],\n },\n ],\n },\n ])\n\nconst checkRow = (id: string, label: string): NodeSpec => ({\n id,\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 1.5 },\n sx: { alignItems: 'center' },\n children: [icon(`${id}Icon`, 'check-circle-outline', 'secondary.main'), text(`${id}Text`, 'body1', label)],\n})\n\nconst testimonial = (id: string, quote: string, name: string, detail: string): NodeSpec =>\n cell(`${id}Cell`, 'xs:12 md:4', [\n {\n id,\n componentId: 'muiCard',\n props: { variant: 'outlined' },\n sx: { height: '100%', borderRadius: 3 },\n children: [\n {\n id: `${id}Content`,\n componentId: 'muiCardContent',\n sx: { paddingTop: 4, paddingRight: 4, paddingBottom: 4, paddingLeft: 4 },\n children: [\n {\n id: `${id}Stack`,\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n icon(`${id}Icon`, 'format-quote-open', 'secondary.main'),\n text(`${id}Quote`, 'body1', quote),\n {\n id: `${id}By`,\n componentId: 'muiStack',\n props: { spacing: 0 },\n children: [\n text(`${id}Name`, 'subtitle2', name),\n text(`${id}Detail`, 'body2', detail, { color: 'text.secondary' }),\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ])\n\nconst faq = (id: string, question: string, answer: string, defaultExpanded = false): NodeSpec => ({\n id,\n componentId: 'muiAccordion',\n props: { disableGutters: true, ...(defaultExpanded ? { defaultExpanded: true } : {}) },\n sx: { borderRadius: 2 },\n children: [\n {\n id: `${id}Q`,\n componentId: 'muiAccordionSummary',\n props: { children: question },\n sx: { fontWeight: 700, fontSize: '1rem', paddingTop: 1, paddingBottom: 1 },\n },\n {\n id: `${id}A`,\n componentId: 'muiAccordionDetails',\n children: [text(`${id}AText`, 'body1', answer, { color: 'text.secondary' })],\n },\n ],\n})\n\n/**\n * The contact form. `pluginId: 'forms'` because a node names the bundle that\n * REGISTERS its component, and that is what decides whether the form draws\n * with the page or arrives after hydration (see the forms plugin's\n * `form-survives-the-bundle-move.spec.tsx`).\n */\nconst contactForm = (): NodeSpec => ({\n id: 'dh_form',\n componentId: 'form',\n pluginId: 'forms',\n props: {\n formName: 'Contact',\n submitLabel: 'Send message',\n successMessage: 'Thanks — your message is on its way. We will be in touch soon.',\n },\n // Each field is MUI's separate form elements (Form Control › Form Label +\n // Input), so an owner styles the label and the box on their own. The field\n // ids are the ones the all-in-one Form Field had.\n children: [\n textField('dh_fName', { name: 'name', label: 'Name', required: true }),\n textField('dh_fEmail', { name: 'email', label: 'Email', type: 'email', required: true }),\n textField('dh_fMessage', { name: 'message', label: 'Message', multiline: true, required: true }),\n ],\n})\n\n/** What a search result and a shared link say about the home page. */\nexport function defaultHomeDescription(siteName: string): string {\n const name = siteName.trim() || 'our website'\n return `Welcome to ${name}. See what we do, browse our work and get in touch.`\n}\n\n/**\n * The home page every new site is born with (AGL-3497, after AGL-3408).\n *\n * Its `seo` is written onto the screen, and the site's header and footer come\n * from the layout `buildDefaultSiteLayout` makes, which the provisioning\n * write binds it to.\n *\n * The site's name is written in as text, not bound: a page has no token for\n * it, and the heading is the first thing an owner rewrites anyway.\n */\nexport function buildDefaultHomeScreen(siteName: string): StarterTemplateScreen {\n const name = siteName.trim() || 'Welcome'\n return {\n key: 'home',\n displayName: 'Home',\n slug: SCREEN_ROOT_PATH,\n seo: { title: name, description: defaultHomeDescription(siteName) },\n nodes: buildNodes([\n // ── Hero ────────────────────────────────────────────────────────────\n band(\n 'dh_heroSection',\n 'Introduction',\n 'xl',\n [\n grid('dh_heroGrid', 6, [\n cell('dh_heroTextCell', 'xs:12 md:6', [\n {\n id: 'dh_hero',\n componentId: 'muiStack',\n props: { spacing: 3 },\n children: [\n text('dh_heroOverline', 'overline', 'Welcome to your new website', { color: 'primary' }),\n text('dh_heroTitle', 'h1', name),\n text(\n 'dh_heroSub',\n 'lede',\n 'This page is ready to make your own. Every heading, photo, ' +\n 'button and color on it can be changed in the Besigner, and ' +\n 'nothing you change goes live until you press Publish.',\n { color: 'text.secondary' },\n ),\n {\n id: 'dh_heroActions',\n componentId: 'muiStack',\n props: { direction: 'row' },\n // `gap`, not `spacing`: Stack spacing is a margin on every\n // child after the first, so a button that wraps onto a\n // second line keeps a left margin it no longer needs.\n sx: { flexWrap: 'wrap', gap: 2 },\n children: [\n button('dh_heroCta', 'Get in touch', 'contained', CONTACT),\n button('dh_heroMore', 'See what’s included', 'outlined', FEATURES),\n ],\n },\n ],\n },\n ], { alignSelf: 'center' }),\n cell('dh_heroImageCell', 'xs:12 md:6', [\n photo(\n 'dh_heroImage',\n DEFAULT_SITE_IMAGES.hero,\n '420px',\n 'eager',\n ),\n ]),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── Features ────────────────────────────────────────────────────────\n band(DEFAULT_HOME_FEATURES_SECTION_ID, 'What is included', 'xl', [\n heading(\n 'dh_features',\n 'What’s already here',\n 'Everything a real website needs, ready to edit',\n 'Each block on this page shows one thing you can do. Keep the ones ' +\n 'you need, delete the rest, and add more from the elements panel.',\n ),\n grid('dh_featuresGrid', 3, [\n featureCard(\n 'dh_f1',\n 'pencil-outline',\n 'Edit right on the page',\n 'Click any heading, paragraph or button in the Besigner and type. ' +\n 'Changes stay a draft until you press Publish.',\n ),\n featureCard(\n 'dh_f2',\n 'palette-outline',\n 'Your colors and fonts',\n 'The colors and typefaces here come from your site theme. Change ' +\n 'them once under Setup → Theme and every page follows.',\n ),\n featureCard(\n 'dh_f3',\n 'image-multiple-outline',\n 'Photos you choose',\n 'Upload your own pictures under Media, then pick one for any image ' +\n 'on the page — the photos here are placeholders.',\n ),\n featureCard(\n 'dh_f4',\n 'email-fast-outline',\n 'A contact form that works',\n 'The form at the bottom of this page is live. Every message is ' +\n 'saved under Forms, and you are notified when one arrives.',\n ),\n featureCard(\n 'dh_f5',\n 'magnify',\n 'Ready to be found',\n 'Set the title, description and image that search results and ' +\n 'shared links show under Setup → SEO.',\n ),\n featureCard(\n 'dh_f6',\n 'page-layout-header-footer',\n 'One header and footer',\n 'The header and footer are a shared layout. Edit them once under ' +\n 'Layouts and every page you add uses them.',\n ),\n ]),\n ]),\n\n // ── About ───────────────────────────────────────────────────────────\n band(\n 'dh_aboutSection',\n 'About us',\n 'xl',\n [\n grid('dh_aboutGrid', 6, [\n cell('dh_aboutImageCell', 'xs:12 md:6', [\n photo(\n 'dh_aboutImage',\n DEFAULT_SITE_IMAGES.about,\n '440px',\n ),\n ]),\n cell('dh_aboutTextCell', 'xs:12 md:6', [\n {\n id: 'dh_about',\n componentId: 'muiStack',\n props: { spacing: 2.5 },\n children: [\n text('dh_aboutOverline', 'overline', 'About us', { color: 'primary' }),\n text('dh_aboutTitle', 'h2', 'Tell visitors who you are'),\n text(\n 'dh_aboutBody',\n 'body1',\n 'People want to know who is behind a business before they get ' +\n 'in touch. Replace this with how you started, who you help ' +\n 'and what makes your work different.',\n { color: 'text.secondary' },\n ),\n text(\n 'dh_aboutBody2',\n 'body1',\n 'A few honest sentences and a real photo of you or your team ' +\n 'will do more than a long page.',\n { color: 'text.secondary' },\n ),\n {\n id: 'dh_aboutChecks',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n checkRow('dh_aboutCheck1', 'Say what you do in one sentence'),\n checkRow('dh_aboutCheck2', 'Show the people behind the work'),\n checkRow('dh_aboutCheck3', 'Tell visitors what to do next'),\n ],\n },\n {\n id: 'dh_aboutActions',\n componentId: 'muiStack',\n props: { direction: 'row' },\n children: [button('dh_aboutCta', 'Contact us', 'outlined', CONTACT)],\n },\n ],\n },\n ], { alignSelf: 'center' }),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── Gallery ─────────────────────────────────────────────────────────\n band('dh_gallerySection', 'Gallery', 'xl', [\n heading(\n 'dh_gallery',\n 'Gallery',\n 'Show your work',\n 'Three photos in a grid that reflows on a phone. Replace them with ' +\n 'your products, projects or space, or add more to the grid.',\n ),\n grid('dh_galleryGrid', 3, [\n cell('dh_g1Cell', 'xs:12 sm:4', [\n photo('dh_g1', DEFAULT_SITE_IMAGES.desk, '320px'),\n ]),\n cell('dh_g2Cell', 'xs:12 sm:4', [\n photo('dh_g2', DEFAULT_SITE_IMAGES.plants, '320px'),\n ]),\n cell('dh_g3Cell', 'xs:12 sm:4', [\n photo('dh_g3', DEFAULT_SITE_IMAGES.craft, '320px'),\n ]),\n ]),\n ]),\n\n // ── Testimonials ────────────────────────────────────────────────────\n band(\n 'dh_testimonialsSection',\n 'What people say',\n 'xl',\n [\n heading(\n 'dh_testimonials',\n 'Testimonials',\n 'What people say',\n 'A few words from real customers build trust faster than anything ' +\n 'you can say about yourself. Replace these with quotes of your own.',\n ),\n grid('dh_testimonialsGrid', 3, [\n testimonial(\n 'dh_t1',\n 'Put a short quote from a happy customer here: one or two ' +\n 'sentences about the result you got them.',\n 'Customer name',\n 'Their business',\n ),\n testimonial(\n 'dh_t2',\n 'Pick quotes that answer what a new visitor is unsure about, ' +\n 'like price, timing or quality.',\n 'Customer name',\n 'Their city',\n ),\n testimonial(\n 'dh_t3',\n 'Ask before you publish a quote, and use the person’s real name ' +\n 'and photo if they are happy for you to.',\n 'Customer name',\n 'Their role',\n ),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── FAQ ─────────────────────────────────────────────────────────────\n band('dh_faqSection', 'Frequently asked questions', 'md', [\n heading(\n 'dh_faq',\n 'FAQ',\n 'Frequently asked questions',\n 'Answer the questions people ask you most. These answers are about ' +\n 'building this site, so replace them with your own.',\n ),\n {\n id: 'dh_faqList',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n faq(\n 'dh_q1',\n 'How do I change what this page says?',\n 'Open this page in the Besigner. When you are signed in, the bar ' +\n 'across the top of your live site opens it in one click. Click ' +\n 'any text to edit it, then press Publish.',\n true,\n ),\n faq(\n 'dh_q2',\n 'How do I add another page?',\n 'Open Pages in your site’s menu and create one. It gets this ' +\n 'header and footer automatically, and you can link to it from ' +\n 'the header.',\n ),\n faq(\n 'dh_q3',\n 'Where do messages from the contact form go?',\n 'Every message sent through the form below is saved under Forms, ' +\n 'where you can read it and keep track of who you have answered.',\n ),\n faq(\n 'dh_q4',\n 'Can I use my own domain name?',\n 'Yes. Custom domains are included from the Starter plan. Connect ' +\n 'one from your site’s Admin page, under Custom Domain.',\n ),\n faq(\n 'dh_q5',\n 'Will search engines find my site?',\n 'Yes. This site is published and open to search engines from day ' +\n 'one. Fill in Setup → SEO so results show the title and ' +\n 'description you want.',\n ),\n ],\n },\n ]),\n\n // ── Call to action ──────────────────────────────────────────────────\n band(\n 'dh_ctaSection',\n 'Get started',\n 'md',\n [\n {\n id: 'dh_cta',\n componentId: 'muiStack',\n props: { spacing: 3 },\n sx: { alignItems: 'center' },\n children: [\n text('dh_ctaTitle', 'h2', 'Ready to make it yours?', { align: 'center' }),\n text(\n 'dh_ctaBody',\n 'lede',\n 'Change the words, swap the photos and pick your colors, then ' +\n 'share your link with the world.',\n { align: 'center' },\n ),\n {\n // A paper-colored button on the primary band: `inherit` would\n // take the band's text color as a grey fill, and `primary`\n // would vanish into the band it sits on.\n ...button('dh_ctaButton', 'Get in touch', 'contained', CONTACT),\n sx: {\n bgcolor: 'background.paper',\n color: 'text.primary',\n '&:hover': { bgcolor: 'background.default' },\n },\n },\n ],\n },\n ],\n { bgcolor: 'primary.main', color: 'primary.contrastText' },\n ),\n\n // ── Contact ─────────────────────────────────────────────────────────\n band(DEFAULT_HOME_CONTACT_SECTION_ID, 'Contact', 'md', [\n heading(\n 'dh_contact',\n 'Contact',\n 'Get in touch',\n 'Questions, quotes or bookings: send a message and we will reply as ' +\n 'soon as we can.',\n ),\n contactForm(),\n ]),\n ]),\n }\n}\n\n/** The shared header and footer every page of a new site renders inside. */\nexport interface DefaultSiteLayout {\n displayName: string\n description: string\n nodes: Record<string, any>\n}\n\n/**\n * The header and footer a new site is born with (AGL-3497).\n *\n * The brand reads `{{host.businessName}}`, so it follows the site's name in\n * Setup rather than freezing the one it was created under. The header's\n * Contact button scrolls to the home page's contact section; on another page\n * it has nothing to scroll to and does nothing, which is the step's own rule.\n *\n * `homeScreenId` is the home page the brand and the footer's Home link point\n * at — a link by id, so it survives a slug change.\n */\nexport function buildDefaultSiteLayout(homeScreenId: string): DefaultSiteLayout {\n const brand = '{{host.businessName}}'\n return {\n displayName: 'Site header and footer',\n description: 'The header and footer every page of this site shows.',\n nodes: buildNodes([\n {\n id: 'dl_header',\n componentId: 'muiAppBar',\n props: { position: 'sticky', color: 'inherit', component: 'header', ariaLabel: 'Site header' },\n sx: { bgcolor: 'background.paper', boxShadow: 'none', borderBottom: 1, borderColor: 'divider' },\n children: [\n {\n id: 'dl_headerInner',\n componentId: 'muiContainer',\n props: { maxWidth: 'xl' },\n children: [\n {\n id: 'dl_toolbar',\n componentId: 'muiToolbar',\n props: { disableGutters: true },\n sx: { columnGap: 2 },\n children: [\n {\n id: 'dl_brand',\n componentId: 'muiScreenLink',\n props: { children: brand, screenId: homeScreenId, renderAs: 'link', color: 'inherit' },\n sx: { fontWeight: 800, fontSize: '1.25rem', textDecoration: 'none', flexGrow: 1 },\n },\n {\n id: 'dl_search',\n componentId: 'searchBox',\n props: { placeholder: 'Search' },\n sx: { display: { xs: 'none', md: 'flex' }, width: 220 },\n },\n { id: 'dl_mode', componentId: 'themeModeSwitcher', props: { variant: 'icon' } },\n {\n id: 'dl_contact',\n componentId: 'muiButton',\n props: { variant: 'contained', children: 'Contact us' },\n sx: { whiteSpace: 'nowrap', flexShrink: 0 },\n interactions: scrollTo(CONTACT.id, CONTACT.name),\n },\n ],\n },\n ],\n },\n ],\n },\n { id: 'dl_slot', componentId: 'layoutSlot', props: { component: 'main' } },\n {\n id: 'dl_footer',\n componentId: 'section',\n props: { element: 'footer', ariaLabel: 'Site footer' },\n sx: { bgcolor: 'background.paper', borderTop: 1, borderColor: 'divider' },\n children: [\n container('dl_footerInner', 'xl', 8, [\n grid('dl_footerGrid', 4, [\n cell('dl_footerBrandCell', 'xs:12 md:6', [\n {\n id: 'dl_footerBrand',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n text('dl_footerName', 'h6', brand, { component: 'p' }),\n text(\n 'dl_footerAbout',\n 'body2',\n 'This footer is part of your site’s shared layout. Edit it ' +\n 'once under Layouts and it changes on every page.',\n { color: 'text.secondary' },\n ),\n ],\n },\n ]),\n cell('dl_footerLinksCell', 'xs:6 md:3', [\n {\n id: 'dl_footerLinks',\n componentId: 'muiStack',\n props: { spacing: 1 },\n children: [\n text('dl_footerLinksTitle', 'subtitle2', 'Explore', { component: 'p' }),\n {\n id: 'dl_footerHome',\n componentId: 'muiScreenLink',\n props: { children: 'Home', screenId: homeScreenId, renderAs: 'link', color: 'inherit' },\n },\n {\n id: 'dl_footerSearch',\n componentId: 'muiScreenLink',\n props: { children: 'Search', href: '/search', renderAs: 'link', color: 'inherit' },\n },\n ],\n },\n ]),\n cell('dl_footerFollowCell', 'xs:6 md:3', [\n {\n id: 'dl_footerFollow',\n componentId: 'muiStack',\n props: { spacing: 1 },\n children: [\n text('dl_footerFollowTitle', 'subtitle2', 'Follow along', { component: 'p' }),\n text(\n 'dl_footerFollowBody',\n 'body2',\n 'Add your social profiles to the links element here and ' +\n 'their icons appear.',\n { color: 'text.secondary' },\n ),\n { id: 'dl_footerSocial', componentId: 'socialLinks', props: {} },\n ],\n },\n ]),\n ]),\n {\n ...text('dl_footerCopyright', 'caption', `© ${brand}. All rights reserved.`, {\n color: 'text.secondary',\n component: 'p',\n }),\n sx: { marginTop: 6, paddingTop: 3, borderTop: 1, borderColor: 'divider' },\n },\n ]),\n ],\n },\n ]),\n }\n}\n\n/**\n * The theme a new site starts with (AGL-3497): an indigo and teal palette on\n * a soft neutral ground, one Google family, rounder corners and buttons that\n * do not shout. Written as the site's own `theme`, so the theme library files\n * it as \"Site theme\" and keeps it when the owner switches to another.\n *\n * Dark is authored too, because a visitor's device decides which one they\n * see, and the header's switcher lets them choose.\n */\nexport const DEFAULT_SITE_THEME: HostTheme = {\n colorSchemes: {\n light: {\n primary: { main: '#4338ca', light: '#6366f1', dark: '#3730a3', contrastText: '#ffffff' },\n secondary: { main: '#0f766e', light: '#14b8a6', dark: '#115e59', contrastText: '#ffffff' },\n tertiary: { main: '#b45309', light: '#d97706', dark: '#92400e', contrastText: '#ffffff' },\n surface: { main: '#f1f5f9', contrastText: '#0f172a' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: { primary: '#0f172a', secondary: '#475569', disabled: '#94a3b8' },\n tint: { primary: '#eef2ff', secondary: '#f0fdfa', tertiary: '#fffbeb' },\n divider: '#e2e8f0',\n },\n dark: {\n primary: { main: '#a5b4fc', light: '#c7d2fe', dark: '#818cf8', contrastText: '#1e1b4b' },\n secondary: { main: '#5eead4', light: '#99f6e4', dark: '#2dd4bf', contrastText: '#042f2e' },\n tertiary: { main: '#fcd34d', light: '#fde68a', dark: '#fbbf24', contrastText: '#451a03' },\n surface: { main: '#1e293b', contrastText: '#e2e8f0' },\n background: {\n default: '#0b1120',\n paper: '#111827',\n },\n text: { primary: '#e2e8f0', secondary: '#94a3b8', disabled: '#475569' },\n tint: { primary: '#1e1b4b', secondary: '#042f2e', tertiary: '#451a03' },\n divider: '#1e293b',\n },\n },\n fonts: [{ family: 'Plus Jakarta Sans', weights: [400, 500, 600, 700, 800], source: 'google' }],\n typography: {\n fontFamily: '\"Plus Jakarta Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif',\n variants: {\n h1: { fontSize: '3.25rem', fontWeight: 800, lineHeight: 1.1, letterSpacing: '-0.02em' },\n h2: { fontSize: '2.25rem', fontWeight: 800, lineHeight: 1.15, letterSpacing: '-0.015em' },\n h3: { fontSize: '1.75rem', fontWeight: 700, lineHeight: 1.2 },\n h4: { fontSize: '1.5rem', fontWeight: 700, lineHeight: 1.25 },\n h5: { fontSize: '1.25rem', fontWeight: 700, lineHeight: 1.3 },\n h6: { fontSize: '1.125rem', fontWeight: 700, lineHeight: 1.35 },\n lede: { fontSize: '1.1875rem', fontWeight: 400, lineHeight: 1.6 },\n overline: { fontSize: '0.8125rem', fontWeight: 700, letterSpacing: '0.12em' },\n button: { fontWeight: 700, textTransform: 'none' },\n },\n },\n shape: { borderRadius: 12 },\n}\n\n/** The site-wide SEO a new site starts with: its name, a description and a sharing image. */\nexport function defaultSiteSeo(siteName: string): Record<string, unknown> {\n return {\n title: siteName.trim() || 'Welcome',\n description: defaultHomeDescription(siteName),\n image: DEFAULT_SITE_IMAGES.hero.src,\n imageWidth: DEFAULT_SITE_IMAGES.hero.width,\n imageHeight: DEFAULT_SITE_IMAGES.hero.height,\n imageAlt: 'A small team working together around a table in a bright office',\n }\n}\n"],"names":["nodeInteractionSelector","SCREEN_ROOT_PATH","buildStarterNodes","buildNodes","starterSection","container","starterText","text","starterTextField","textField","DEFAULT_SITE_IMAGE_BASE","DEFAULT_SITE_IMAGES","hero","src","width","height","alt","about","desk","plants","craft","DEFAULT_HOME_CONTACT_SECTION_ID","DEFAULT_HOME_FEATURES_SECTION_ID","HEADER_OFFSET_PX","ICONS","magnify","icon","id","iconId","color","componentId","props","iconPath","size","sx","scrollTo","targetId","name","enabled","trigger","event","everyTime","steps","type","selector","offsetPx","button","label","variant","target","extra","children","interactions","CONTACT","FEATURES","band","ariaLabel","element","heading","prefix","overline","title","lede","align","spacing","alignItems","marginBottom","marginLeft","marginRight","maxWidth","grid","cell","photo","image","loading","objectFit","radius","intrinsicWidth","intrinsicHeight","featureCard","body","borderRadius","paddingTop","paddingRight","paddingBottom","paddingLeft","component","checkRow","direction","testimonial","quote","detail","faq","question","answer","defaultExpanded","disableGutters","fontWeight","fontSize","contactForm","pluginId","formName","submitLabel","successMessage","required","multiline","defaultHomeDescription","siteName","trim","buildDefaultHomeScreen","key","displayName","slug","seo","description","nodes","flexWrap","gap","alignSelf","bgcolor","buildDefaultSiteLayout","homeScreenId","brand","position","boxShadow","borderBottom","borderColor","columnGap","screenId","renderAs","textDecoration","flexGrow","placeholder","display","xs","md","whiteSpace","flexShrink","borderTop","href","marginTop","DEFAULT_SITE_THEME","colorSchemes","light","primary","main","dark","contrastText","secondary","tertiary","surface","background","default","paper","disabled","tint","divider","fonts","family","weights","source","typography","fontFamily","variants","h1","lineHeight","letterSpacing","h2","h3","h4","h5","h6","textTransform","shape","defaultSiteSeo","imageWidth","imageHeight","imageAlt"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/default-site.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { HostTheme } from '@aglyn/shared-data-types'\nimport type { NodeInteraction } from './node-interactions'\nimport { nodeInteractionSelector } from './node-interactions'\nimport { SCREEN_ROOT_PATH } from './screen-route'\nimport { applyElementMotion } from './element-motion'\nimport {\n buildStarterNodes as buildNodes,\n starterSection as container,\n starterText as text,\n starterTextField as textField,\n type StarterNodeSpec as NodeSpec,\n type StarterTemplateScreen,\n} from './starter-template-nodes'\n\n/**\n * The website every new site is born with (AGL-3497).\n *\n * It used to be one heading and \"our new website is on its way\" (AGL-3408):\n * a site that answered `/` instead of 404ing, and showed an owner nothing of\n * what the product does. Now a site starts as a real one — a shared header\n * and footer, a home page with the sections an ordinary business site has,\n * photos, a theme and its SEO — and each section says, to the owner, how to\n * make it theirs.\n *\n * It is published and open to search engines from the first request, as every\n * new site's home page has been since AGL-3408.\n *\n * The photos ship with the apps under `/_static/starter/` (see the CREDITS\n * file there). A published page's `img-src` admits only its own origin and\n * the media CDN, so a stock-photo URL would be blocked, and there is no\n * platform-wide media scope to hold them. Both the tenant and the console\n * serve the same files at the same path, so they draw on the live site and in\n * the Besigner alike.\n *\n * PERSISTED IDENTIFIERS: every node id below is stored on every new site.\n */\n\n/** Where the starter photos are served from, on every tenant and in the console. */\nexport const DEFAULT_SITE_IMAGE_BASE = '/_static/starter'\n\n/**\n * The starter photos, with the sizes the files actually are and the words\n * that describe what each one shows: wherever a starter photo is placed, its\n * alt text is its own, never words written for another picture (AGL-3831).\n */\nexport const DEFAULT_SITE_IMAGES = {\n hero: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/hero-team.jpg`,\n width: 1600,\n height: 1067,\n alt: 'A small team working together around a table in a bright office',\n },\n about: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/about-owner.jpg`,\n width: 1600,\n height: 900,\n alt: 'A smiling business owner standing behind the counter of her coffee shop',\n },\n desk: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-desk.jpg`,\n width: 1600,\n height: 1068,\n alt: 'A tidy desk with a laptop, a lamp and fresh flowers',\n },\n plants: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-plants.jpg`,\n width: 1200,\n height: 900,\n alt: 'Houseplants on a sunny windowsill',\n },\n craft: {\n src: `${DEFAULT_SITE_IMAGE_BASE}/gallery-craft.jpg`,\n width: 1600,\n height: 1065,\n alt: 'Hands working on a craft project at a workbench',\n },\n} as const\n\n/** The node a call to action scrolls to, and the one the features link names. */\nexport const DEFAULT_HOME_CONTACT_SECTION_ID = 'dh_contactSection'\nexport const DEFAULT_HOME_FEATURES_SECTION_ID = 'dh_featuresSection'\n\n/** Room left above a scrolled-to section for the sticky header. */\nconst HEADER_OFFSET_PX = 72\n\n/**\n * Icon outlines, from Material Design Icons. Written in rather than looked up:\n * a published page reads an icon's stored path and never loads the catalog\n * (AGL-1212), and the catalog is the whole icon set.\n */\nconst ICONS = {\n 'pencil-outline':\n 'M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z',\n 'palette-outline':\n 'M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2C17.5,2 22,6 22,11A6,6 0 0,1 16,17H14.2C13.9,17 13.7,17.2 13.7,17.5C13.7,17.6 13.8,17.7 13.8,17.8C14.2,18.3 14.4,18.9 14.4,19.5C14.5,20.9 13.4,22 12,22M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C12.3,20 12.5,19.8 12.5,19.5C12.5,19.3 12.4,19.2 12.4,19.1C12,18.6 11.8,18.1 11.8,17.5C11.8,16.1 12.9,15 14.3,15H16A4,4 0 0,0 20,11C20,7.1 16.4,4 12,4M6.5,10C7.3,10 8,10.7 8,11.5C8,12.3 7.3,13 6.5,13C5.7,13 5,12.3 5,11.5C5,10.7 5.7,10 6.5,10M9.5,6C10.3,6 11,6.7 11,7.5C11,8.3 10.3,9 9.5,9C8.7,9 8,8.3 8,7.5C8,6.7 8.7,6 9.5,6M14.5,6C15.3,6 16,6.7 16,7.5C16,8.3 15.3,9 14.5,9C13.7,9 13,8.3 13,7.5C13,6.7 13.7,6 14.5,6M17.5,10C18.3,10 19,10.7 19,11.5C19,12.3 18.3,13 17.5,13C16.7,13 16,12.3 16,11.5C16,10.7 16.7,10 17.5,10Z',\n 'image-multiple-outline':\n 'M21,17H7V3H21M21,1H7A2,2 0 0,0 5,3V17A2,2 0 0,0 7,19H21A2,2 0 0,0 23,17V3A2,2 0 0,0 21,1M3,5H1V21A2,2 0 0,0 3,23H19V21H3M15.96,10.29L13.21,13.83L11.25,11.47L8.5,15H19.5L15.96,10.29Z',\n 'email-fast-outline':\n 'M22 5.5H9C7.9 5.5 7 6.4 7 7.5V16.5C7 17.61 7.9 18.5 9 18.5H22C23.11 18.5 24 17.61 24 16.5V7.5C24 6.4 23.11 5.5 22 5.5M22 16.5H9V9.17L15.5 12.5L22 9.17V16.5M15.5 10.81L9 7.5H22L15.5 10.81M5 16.5C5 16.67 5.03 16.83 5.05 17H1C.448 17 0 16.55 0 16S.448 15 1 15H5V16.5M3 7H5.05C5.03 7.17 5 7.33 5 7.5V9H3C2.45 9 2 8.55 2 8S2.45 7 3 7M1 12C1 11.45 1.45 11 2 11H5V13H2C1.45 13 1 12.55 1 12Z',\n magnify:\n 'M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z',\n 'page-layout-header-footer':\n 'M18 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V4C20 2.9 19.11 2 18 2M18 20H6V16H18V20M18 8H6V4H18V8Z',\n 'check-circle-outline':\n 'M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 20C7.59 20 4 16.41 4 12S7.59 4 12 4 20 7.59 20 12 16.41 20 12 20M16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z',\n 'format-quote-open': 'M10,7L8,11H11V17H5V11L7,7H10M18,7L16,11H19V17H13V11L15,7H18Z',\n} as const\n\ntype IconId = keyof typeof ICONS\n\nconst icon = (id: string, iconId: IconId, color = 'primary.main'): NodeSpec => ({\n id,\n componentId: 'icon',\n props: { iconId, iconPath: ICONS[iconId], size: 32 },\n sx: { color },\n})\n\n/** A click that brings a section of the page into view under the header. */\nconst scrollTo = (targetId: string, name: string): NodeInteraction[] => [\n {\n id: 'scroll-to-section',\n name: `Scroll to ${name}`,\n enabled: true,\n trigger: { event: 'elementClick', everyTime: true },\n steps: [\n {\n type: 'scrollTo',\n selector: nodeInteractionSelector(targetId),\n offsetPx: HEADER_OFFSET_PX,\n },\n ],\n },\n]\n\nconst button = (\n id: string,\n label: string,\n variant: 'contained' | 'outlined',\n target: { id: string; name: string },\n extra?: Record<string, unknown>,\n): NodeSpec => ({\n id,\n componentId: 'muiButton',\n props: { variant, size: 'large', children: label, ...extra },\n interactions: scrollTo(target.id, target.name),\n})\n\nconst CONTACT = { id: DEFAULT_HOME_CONTACT_SECTION_ID, name: 'the contact form' }\nconst FEATURES = { id: DEFAULT_HOME_FEATURES_SECTION_ID, name: 'what is included' }\n\n/**\n * One full-width band: a semantic `section` carrying the band's background,\n * around a Container at a stock width carrying its rhythm (AGL-1298).\n */\nconst band = (\n id: string,\n ariaLabel: string,\n width: 'md' | 'lg' | 'xl',\n children: NodeSpec[],\n sx?: Record<string, unknown>,\n): NodeSpec => ({\n id,\n componentId: 'section',\n props: { element: 'section', ariaLabel },\n ...(sx ? { sx } : {}),\n children: [container(`${id}Inner`, width, 10, children)],\n})\n\n/** A section's heading block: an overline, the heading and a lede. */\nconst heading = (\n prefix: string,\n overline: string,\n title: string,\n lede: string,\n align: 'center' | 'left' = 'center',\n): NodeSpec => ({\n id: `${prefix}Heading`,\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n sx: {\n alignItems: align === 'center' ? 'center' : 'flex-start',\n marginBottom: 6,\n ...(align === 'center' ? { marginLeft: 'auto', marginRight: 'auto', maxWidth: 'md' } : {}),\n },\n children: [\n text(`${prefix}Overline`, 'overline', overline, { align, color: 'primary' }),\n text(`${prefix}Title`, 'h2', title, { align }),\n text(`${prefix}Lede`, 'lede', lede, { align, color: 'text.secondary' }),\n ],\n})\n\nconst grid = (id: string, spacing: number, children: NodeSpec[], sx?: Record<string, unknown>): NodeSpec => ({\n id,\n componentId: 'muiGrid',\n props: { container: true, spacing },\n ...(sx ? { sx } : {}),\n children,\n})\n\n/**\n * A grid cell. `size` is the Grid element's STORED syntax — `'xs:12 md:6'`,\n * per-breakpoint column counts in one string — which its parser turns into\n * MUI's responsive object; an object here would be ignored.\n */\nconst cell = (id: string, size: string, children: NodeSpec[], sx?: Record<string, unknown>): NodeSpec => ({\n id,\n componentId: 'muiGrid',\n props: { size },\n ...(sx ? { sx } : {}),\n children,\n})\n\nconst photo = (\n id: string,\n image: { src: string; width: number; height: number; alt: string },\n height: string,\n loading: 'eager' | 'lazy' = 'lazy',\n): NodeSpec => ({\n id,\n componentId: 'image',\n props: {\n src: image.src,\n alt: image.alt,\n height,\n objectFit: 'cover',\n radius: 16,\n loading,\n intrinsicWidth: image.width,\n intrinsicHeight: image.height,\n },\n})\n\nconst featureCard = (id: string, iconId: IconId, title: string, body: string): NodeSpec =>\n cell(`${id}Cell`, 'xs:12 sm:6 md:4', [\n {\n id,\n componentId: 'muiCard',\n props: { variant: 'outlined' },\n sx: { height: '100%', borderRadius: 3 },\n children: [\n {\n id: `${id}Content`,\n componentId: 'muiCardContent',\n sx: { paddingTop: 4, paddingRight: 4, paddingBottom: 4, paddingLeft: 4 },\n children: [\n {\n id: `${id}Stack`,\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n icon(`${id}Icon`, iconId),\n text(`${id}Title`, 'h5', title, { component: 'h3' }),\n text(`${id}Body`, 'body1', body, { color: 'text.secondary' }),\n ],\n },\n ],\n },\n ],\n },\n ])\n\nconst checkRow = (id: string, label: string): NodeSpec => ({\n id,\n componentId: 'muiStack',\n props: { direction: 'row', spacing: 1.5 },\n sx: { alignItems: 'center' },\n children: [icon(`${id}Icon`, 'check-circle-outline', 'secondary.main'), text(`${id}Text`, 'body1', label)],\n})\n\nconst testimonial = (id: string, quote: string, name: string, detail: string): NodeSpec =>\n cell(`${id}Cell`, 'xs:12 md:4', [\n {\n id,\n componentId: 'muiCard',\n props: { variant: 'outlined' },\n sx: { height: '100%', borderRadius: 3 },\n children: [\n {\n id: `${id}Content`,\n componentId: 'muiCardContent',\n sx: { paddingTop: 4, paddingRight: 4, paddingBottom: 4, paddingLeft: 4 },\n children: [\n {\n id: `${id}Stack`,\n componentId: 'muiStack',\n props: { spacing: 2 },\n children: [\n icon(`${id}Icon`, 'format-quote-open', 'secondary.main'),\n text(`${id}Quote`, 'body1', quote),\n {\n id: `${id}By`,\n componentId: 'muiStack',\n props: { spacing: 0 },\n children: [\n text(`${id}Name`, 'subtitle2', name),\n text(`${id}Detail`, 'body2', detail, { color: 'text.secondary' }),\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ])\n\nconst faq = (id: string, question: string, answer: string, defaultExpanded = false): NodeSpec => ({\n id,\n componentId: 'muiAccordion',\n props: { disableGutters: true, ...(defaultExpanded ? { defaultExpanded: true } : {}) },\n sx: { borderRadius: 2 },\n children: [\n {\n id: `${id}Q`,\n componentId: 'muiAccordionSummary',\n props: { children: question },\n sx: { fontWeight: 700, fontSize: '1rem', paddingTop: 1, paddingBottom: 1 },\n },\n {\n id: `${id}A`,\n componentId: 'muiAccordionDetails',\n children: [text(`${id}AText`, 'body1', answer, { color: 'text.secondary' })],\n },\n ],\n})\n\n/**\n * The contact form. `pluginId: 'forms'` because a node names the bundle that\n * REGISTERS its component, and that is what decides whether the form draws\n * with the page or arrives after hydration (see the forms plugin's\n * `form-survives-the-bundle-move.spec.tsx`).\n */\nconst contactForm = (): NodeSpec => ({\n id: 'dh_form',\n componentId: 'form',\n pluginId: 'forms',\n props: {\n formName: 'Contact',\n submitLabel: 'Send message',\n successMessage: 'Thanks — your message is on its way. We will be in touch soon.',\n },\n // Each field is MUI's separate form elements (Form Control › Form Label +\n // Input), so an owner styles the label and the box on their own. The field\n // ids are the ones the all-in-one Form Field had.\n children: [\n textField('dh_fName', { name: 'name', label: 'Name', required: true }),\n textField('dh_fEmail', { name: 'email', label: 'Email', type: 'email', required: true }),\n textField('dh_fMessage', { name: 'message', label: 'Message', multiline: true, required: true }),\n ],\n})\n\n/** What a search result and a shared link say about the home page. */\nexport function defaultHomeDescription(siteName: string): string {\n const name = siteName.trim() || 'our website'\n return `Welcome to ${name}. See what we do, browse our work and get in touch.`\n}\n\n/**\n * The home page every new site is born with (AGL-3497, after AGL-3408).\n *\n * Its `seo` is written onto the screen, and the site's header and footer come\n * from the layout `buildDefaultSiteLayout` makes, which the provisioning\n * write binds it to.\n *\n * The site's name is written in as text, not bound: a page has no token for\n * it, and the heading is the first thing an owner rewrites anyway.\n */\nexport function buildDefaultHomeScreen(siteName: string): StarterTemplateScreen {\n const name = siteName.trim() || 'Welcome'\n return {\n key: 'home',\n displayName: 'Home',\n slug: SCREEN_ROOT_PATH,\n seo: { title: name, description: defaultHomeDescription(siteName) },\n // Its sections move as an author would set them up (AGL-3838): the hero\n // climbs in on load, the rest slide in on scroll, the cards one by one.\n nodes: applyElementMotion(buildNodes([\n // ── Hero ────────────────────────────────────────────────────────────\n band(\n 'dh_heroSection',\n 'Introduction',\n 'xl',\n [\n grid('dh_heroGrid', 6, [\n cell('dh_heroTextCell', 'xs:12 md:6', [\n {\n id: 'dh_hero',\n componentId: 'muiStack',\n props: { spacing: 3 },\n children: [\n text('dh_heroOverline', 'overline', 'Welcome to your new website', { color: 'primary' }),\n text('dh_heroTitle', 'h1', name),\n text(\n 'dh_heroSub',\n 'lede',\n 'This page is ready to make your own. Every heading, photo, ' +\n 'button and color on it can be changed in the Besigner, and ' +\n 'nothing you change goes live until you press Publish.',\n { color: 'text.secondary' },\n ),\n {\n id: 'dh_heroActions',\n componentId: 'muiStack',\n props: { direction: 'row' },\n // `gap`, not `spacing`: Stack spacing is a margin on every\n // child after the first, so a button that wraps onto a\n // second line keeps a left margin it no longer needs.\n sx: { flexWrap: 'wrap', gap: 2 },\n children: [\n button('dh_heroCta', 'Get in touch', 'contained', CONTACT),\n button('dh_heroMore', 'See what’s included', 'outlined', FEATURES),\n ],\n },\n ],\n },\n ], { alignSelf: 'center' }),\n cell('dh_heroImageCell', 'xs:12 md:6', [\n photo(\n 'dh_heroImage',\n DEFAULT_SITE_IMAGES.hero,\n '420px',\n 'eager',\n ),\n ]),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── Features ────────────────────────────────────────────────────────\n band(DEFAULT_HOME_FEATURES_SECTION_ID, 'What is included', 'xl', [\n heading(\n 'dh_features',\n 'What’s already here',\n 'Everything a real website needs, ready to edit',\n 'Each block on this page shows one thing you can do. Keep the ones ' +\n 'you need, delete the rest, and add more from the elements panel.',\n ),\n grid('dh_featuresGrid', 3, [\n featureCard(\n 'dh_f1',\n 'pencil-outline',\n 'Edit right on the page',\n 'Click any heading, paragraph or button in the Besigner and type. ' +\n 'Changes stay a draft until you press Publish.',\n ),\n featureCard(\n 'dh_f2',\n 'palette-outline',\n 'Your colors and fonts',\n 'The colors and typefaces here come from your site theme. Change ' +\n 'them once under Setup → Theme and every page follows.',\n ),\n featureCard(\n 'dh_f3',\n 'image-multiple-outline',\n 'Photos you choose',\n 'Upload your own pictures under Media, then pick one for any image ' +\n 'on the page — the photos here are placeholders.',\n ),\n featureCard(\n 'dh_f4',\n 'email-fast-outline',\n 'A contact form that works',\n 'The form at the bottom of this page is live. Every message is ' +\n 'saved under Forms, and you are notified when one arrives.',\n ),\n featureCard(\n 'dh_f5',\n 'magnify',\n 'Ready to be found',\n 'Set the title, description and image that search results and ' +\n 'shared links show under Setup → SEO.',\n ),\n featureCard(\n 'dh_f6',\n 'page-layout-header-footer',\n 'One header and footer',\n 'The header and footer are a shared layout. Edit them once under ' +\n 'Layouts and every page you add uses them.',\n ),\n ]),\n ]),\n\n // ── About ───────────────────────────────────────────────────────────\n band(\n 'dh_aboutSection',\n 'About us',\n 'xl',\n [\n grid('dh_aboutGrid', 6, [\n cell('dh_aboutImageCell', 'xs:12 md:6', [\n photo(\n 'dh_aboutImage',\n DEFAULT_SITE_IMAGES.about,\n '440px',\n ),\n ]),\n cell('dh_aboutTextCell', 'xs:12 md:6', [\n {\n id: 'dh_about',\n componentId: 'muiStack',\n props: { spacing: 2.5 },\n children: [\n text('dh_aboutOverline', 'overline', 'About us', { color: 'primary' }),\n text('dh_aboutTitle', 'h2', 'Tell visitors who you are'),\n text(\n 'dh_aboutBody',\n 'body1',\n 'People want to know who is behind a business before they get ' +\n 'in touch. Replace this with how you started, who you help ' +\n 'and what makes your work different.',\n { color: 'text.secondary' },\n ),\n text(\n 'dh_aboutBody2',\n 'body1',\n 'A few honest sentences and a real photo of you or your team ' +\n 'will do more than a long page.',\n { color: 'text.secondary' },\n ),\n {\n id: 'dh_aboutChecks',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n checkRow('dh_aboutCheck1', 'Say what you do in one sentence'),\n checkRow('dh_aboutCheck2', 'Show the people behind the work'),\n checkRow('dh_aboutCheck3', 'Tell visitors what to do next'),\n ],\n },\n {\n id: 'dh_aboutActions',\n componentId: 'muiStack',\n props: { direction: 'row' },\n children: [button('dh_aboutCta', 'Contact us', 'outlined', CONTACT)],\n },\n ],\n },\n ], { alignSelf: 'center' }),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── Gallery ─────────────────────────────────────────────────────────\n band('dh_gallerySection', 'Gallery', 'xl', [\n heading(\n 'dh_gallery',\n 'Gallery',\n 'Show your work',\n 'Three photos in a grid that reflows on a phone. Replace them with ' +\n 'your products, projects or space, or add more to the grid.',\n ),\n grid('dh_galleryGrid', 3, [\n cell('dh_g1Cell', 'xs:12 sm:4', [\n photo('dh_g1', DEFAULT_SITE_IMAGES.desk, '320px'),\n ]),\n cell('dh_g2Cell', 'xs:12 sm:4', [\n photo('dh_g2', DEFAULT_SITE_IMAGES.plants, '320px'),\n ]),\n cell('dh_g3Cell', 'xs:12 sm:4', [\n photo('dh_g3', DEFAULT_SITE_IMAGES.craft, '320px'),\n ]),\n ]),\n ]),\n\n // ── Testimonials ────────────────────────────────────────────────────\n band(\n 'dh_testimonialsSection',\n 'What people say',\n 'xl',\n [\n heading(\n 'dh_testimonials',\n 'Testimonials',\n 'What people say',\n 'A few words from real customers build trust faster than anything ' +\n 'you can say about yourself. Replace these with quotes of your own.',\n ),\n grid('dh_testimonialsGrid', 3, [\n testimonial(\n 'dh_t1',\n 'Put a short quote from a happy customer here: one or two ' +\n 'sentences about the result you got them.',\n 'Customer name',\n 'Their business',\n ),\n testimonial(\n 'dh_t2',\n 'Pick quotes that answer what a new visitor is unsure about, ' +\n 'like price, timing or quality.',\n 'Customer name',\n 'Their city',\n ),\n testimonial(\n 'dh_t3',\n 'Ask before you publish a quote, and use the person’s real name ' +\n 'and photo if they are happy for you to.',\n 'Customer name',\n 'Their role',\n ),\n ]),\n ],\n { bgcolor: 'background.paper' },\n ),\n\n // ── FAQ ─────────────────────────────────────────────────────────────\n band('dh_faqSection', 'Frequently asked questions', 'md', [\n heading(\n 'dh_faq',\n 'FAQ',\n 'Frequently asked questions',\n 'Answer the questions people ask you most. These answers are about ' +\n 'building this site, so replace them with your own.',\n ),\n {\n id: 'dh_faqList',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n faq(\n 'dh_q1',\n 'How do I change what this page says?',\n 'Open this page in the Besigner. When you are signed in, the bar ' +\n 'across the top of your live site opens it in one click. Click ' +\n 'any text to edit it, then press Publish.',\n true,\n ),\n faq(\n 'dh_q2',\n 'How do I add another page?',\n 'Open Pages in your site’s menu and create one. It gets this ' +\n 'header and footer automatically, and you can link to it from ' +\n 'the header.',\n ),\n faq(\n 'dh_q3',\n 'Where do messages from the contact form go?',\n 'Every message sent through the form below is saved under Forms, ' +\n 'where you can read it and keep track of who you have answered.',\n ),\n faq(\n 'dh_q4',\n 'Can I use my own domain name?',\n 'Yes. Custom domains are included from the Starter plan. Connect ' +\n 'one from your site’s Admin page, under Custom Domain.',\n ),\n faq(\n 'dh_q5',\n 'Will search engines find my site?',\n 'Yes. This site is published and open to search engines from day ' +\n 'one. Fill in Setup → SEO so results show the title and ' +\n 'description you want.',\n ),\n ],\n },\n ]),\n\n // ── Call to action ──────────────────────────────────────────────────\n band(\n 'dh_ctaSection',\n 'Get started',\n 'md',\n [\n {\n id: 'dh_cta',\n componentId: 'muiStack',\n props: { spacing: 3 },\n sx: { alignItems: 'center' },\n children: [\n text('dh_ctaTitle', 'h2', 'Ready to make it yours?', { align: 'center' }),\n text(\n 'dh_ctaBody',\n 'lede',\n 'Change the words, swap the photos and pick your colors, then ' +\n 'share your link with the world.',\n { align: 'center' },\n ),\n {\n // A paper-colored button on the primary band: `inherit` would\n // take the band's text color as a grey fill, and `primary`\n // would vanish into the band it sits on.\n ...button('dh_ctaButton', 'Get in touch', 'contained', CONTACT),\n sx: {\n bgcolor: 'background.paper',\n color: 'text.primary',\n '&:hover': { bgcolor: 'background.default' },\n },\n },\n ],\n },\n ],\n { bgcolor: 'primary.main', color: 'primary.contrastText' },\n ),\n\n // ── Contact ─────────────────────────────────────────────────────────\n band(DEFAULT_HOME_CONTACT_SECTION_ID, 'Contact', 'md', [\n heading(\n 'dh_contact',\n 'Contact',\n 'Get in touch',\n 'Questions, quotes or bookings: send a message and we will reply as ' +\n 'soon as we can.',\n ),\n contactForm(),\n ]),\n ])),\n }\n}\n\n/** The shared header and footer every page of a new site renders inside. */\nexport interface DefaultSiteLayout {\n displayName: string\n description: string\n nodes: Record<string, any>\n}\n\n/**\n * The header and footer a new site is born with (AGL-3497).\n *\n * The brand reads `{{host.businessName}}`, so it follows the site's name in\n * Setup rather than freezing the one it was created under. The header's\n * Contact button scrolls to the home page's contact section; on another page\n * it has nothing to scroll to and does nothing, which is the step's own rule.\n *\n * `homeScreenId` is the home page the brand and the footer's Home link point\n * at — a link by id, so it survives a slug change.\n */\nexport function buildDefaultSiteLayout(homeScreenId: string): DefaultSiteLayout {\n const brand = '{{host.businessName}}'\n return {\n displayName: 'Site header and footer',\n description: 'The header and footer every page of this site shows.',\n nodes: buildNodes([\n {\n id: 'dl_header',\n componentId: 'muiAppBar',\n props: { position: 'sticky', color: 'inherit', component: 'header', ariaLabel: 'Site header' },\n sx: { bgcolor: 'background.paper', boxShadow: 'none', borderBottom: 1, borderColor: 'divider' },\n children: [\n {\n id: 'dl_headerInner',\n componentId: 'muiContainer',\n props: { maxWidth: 'xl' },\n children: [\n {\n id: 'dl_toolbar',\n componentId: 'muiToolbar',\n props: { disableGutters: true },\n sx: { columnGap: 2 },\n children: [\n {\n id: 'dl_brand',\n componentId: 'muiScreenLink',\n props: { children: brand, screenId: homeScreenId, renderAs: 'link', color: 'inherit' },\n sx: { fontWeight: 800, fontSize: '1.25rem', textDecoration: 'none', flexGrow: 1 },\n },\n {\n id: 'dl_search',\n componentId: 'searchBox',\n props: { placeholder: 'Search' },\n sx: { display: { xs: 'none', md: 'flex' }, width: 220 },\n },\n { id: 'dl_mode', componentId: 'themeModeSwitcher', props: { variant: 'icon' } },\n {\n id: 'dl_contact',\n componentId: 'muiButton',\n props: { variant: 'contained', children: 'Contact us' },\n sx: { whiteSpace: 'nowrap', flexShrink: 0 },\n interactions: scrollTo(CONTACT.id, CONTACT.name),\n },\n ],\n },\n ],\n },\n ],\n },\n { id: 'dl_slot', componentId: 'layoutSlot', props: { component: 'main' } },\n {\n id: 'dl_footer',\n componentId: 'section',\n props: { element: 'footer', ariaLabel: 'Site footer' },\n sx: { bgcolor: 'background.paper', borderTop: 1, borderColor: 'divider' },\n children: [\n container('dl_footerInner', 'xl', 8, [\n grid('dl_footerGrid', 4, [\n cell('dl_footerBrandCell', 'xs:12 md:6', [\n {\n id: 'dl_footerBrand',\n componentId: 'muiStack',\n props: { spacing: 1.5 },\n children: [\n text('dl_footerName', 'h6', brand, { component: 'p' }),\n text(\n 'dl_footerAbout',\n 'body2',\n 'This footer is part of your site’s shared layout. Edit it ' +\n 'once under Layouts and it changes on every page.',\n { color: 'text.secondary' },\n ),\n ],\n },\n ]),\n cell('dl_footerLinksCell', 'xs:6 md:3', [\n {\n id: 'dl_footerLinks',\n componentId: 'muiStack',\n props: { spacing: 1 },\n children: [\n text('dl_footerLinksTitle', 'subtitle2', 'Explore', { component: 'p' }),\n {\n id: 'dl_footerHome',\n componentId: 'muiScreenLink',\n props: { children: 'Home', screenId: homeScreenId, renderAs: 'link', color: 'inherit' },\n },\n {\n id: 'dl_footerSearch',\n componentId: 'muiScreenLink',\n props: { children: 'Search', href: '/search', renderAs: 'link', color: 'inherit' },\n },\n ],\n },\n ]),\n cell('dl_footerFollowCell', 'xs:6 md:3', [\n {\n id: 'dl_footerFollow',\n componentId: 'muiStack',\n props: { spacing: 1 },\n children: [\n text('dl_footerFollowTitle', 'subtitle2', 'Follow along', { component: 'p' }),\n text(\n 'dl_footerFollowBody',\n 'body2',\n 'Add your social profiles to the links element here and ' +\n 'their icons appear.',\n { color: 'text.secondary' },\n ),\n { id: 'dl_footerSocial', componentId: 'socialLinks', props: {} },\n ],\n },\n ]),\n ]),\n {\n ...text('dl_footerCopyright', 'caption', `© ${brand}. All rights reserved.`, {\n color: 'text.secondary',\n component: 'p',\n }),\n sx: { marginTop: 6, paddingTop: 3, borderTop: 1, borderColor: 'divider' },\n },\n ]),\n ],\n },\n ]),\n }\n}\n\n/**\n * The theme a new site starts with (AGL-3497): an indigo and teal palette on\n * a soft neutral ground, one Google family, rounder corners and buttons that\n * do not shout. Written as the site's own `theme`, so the theme library files\n * it as \"Site theme\" and keeps it when the owner switches to another.\n *\n * Dark is authored too, because a visitor's device decides which one they\n * see, and the header's switcher lets them choose.\n */\nexport const DEFAULT_SITE_THEME: HostTheme = {\n colorSchemes: {\n light: {\n primary: { main: '#4338ca', light: '#6366f1', dark: '#3730a3', contrastText: '#ffffff' },\n secondary: { main: '#0f766e', light: '#14b8a6', dark: '#115e59', contrastText: '#ffffff' },\n tertiary: { main: '#b45309', light: '#d97706', dark: '#92400e', contrastText: '#ffffff' },\n surface: { main: '#f1f5f9', contrastText: '#0f172a' },\n background: {\n default: '#f8fafc',\n paper: '#ffffff',\n },\n text: { primary: '#0f172a', secondary: '#475569', disabled: '#94a3b8' },\n tint: { primary: '#eef2ff', secondary: '#f0fdfa', tertiary: '#fffbeb' },\n divider: '#e2e8f0',\n },\n dark: {\n primary: { main: '#a5b4fc', light: '#c7d2fe', dark: '#818cf8', contrastText: '#1e1b4b' },\n secondary: { main: '#5eead4', light: '#99f6e4', dark: '#2dd4bf', contrastText: '#042f2e' },\n tertiary: { main: '#fcd34d', light: '#fde68a', dark: '#fbbf24', contrastText: '#451a03' },\n surface: { main: '#1e293b', contrastText: '#e2e8f0' },\n background: {\n default: '#0b1120',\n paper: '#111827',\n },\n text: { primary: '#e2e8f0', secondary: '#94a3b8', disabled: '#475569' },\n tint: { primary: '#1e1b4b', secondary: '#042f2e', tertiary: '#451a03' },\n divider: '#1e293b',\n },\n },\n fonts: [{ family: 'Plus Jakarta Sans', weights: [400, 500, 600, 700, 800], source: 'google' }],\n typography: {\n fontFamily: '\"Plus Jakarta Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif',\n variants: {\n h1: { fontSize: '3.25rem', fontWeight: 800, lineHeight: 1.1, letterSpacing: '-0.02em' },\n h2: { fontSize: '2.25rem', fontWeight: 800, lineHeight: 1.15, letterSpacing: '-0.015em' },\n h3: { fontSize: '1.75rem', fontWeight: 700, lineHeight: 1.2 },\n h4: { fontSize: '1.5rem', fontWeight: 700, lineHeight: 1.25 },\n h5: { fontSize: '1.25rem', fontWeight: 700, lineHeight: 1.3 },\n h6: { fontSize: '1.125rem', fontWeight: 700, lineHeight: 1.35 },\n lede: { fontSize: '1.1875rem', fontWeight: 400, lineHeight: 1.6 },\n overline: { fontSize: '0.8125rem', fontWeight: 700, letterSpacing: '0.12em' },\n button: { fontWeight: 700, textTransform: 'none' },\n },\n },\n shape: { borderRadius: 12 },\n}\n\n/** The site-wide SEO a new site starts with: its name, a description and a sharing image. */\nexport function defaultSiteSeo(siteName: string): Record<string, unknown> {\n return {\n title: siteName.trim() || 'Welcome',\n description: defaultHomeDescription(siteName),\n image: DEFAULT_SITE_IMAGES.hero.src,\n imageWidth: DEFAULT_SITE_IMAGES.hero.width,\n imageHeight: DEFAULT_SITE_IMAGES.hero.height,\n imageAlt: 'A small team working together around a table in a bright office',\n }\n}\n"],"names":["nodeInteractionSelector","SCREEN_ROOT_PATH","applyElementMotion","buildStarterNodes","buildNodes","starterSection","container","starterText","text","starterTextField","textField","DEFAULT_SITE_IMAGE_BASE","DEFAULT_SITE_IMAGES","hero","src","width","height","alt","about","desk","plants","craft","DEFAULT_HOME_CONTACT_SECTION_ID","DEFAULT_HOME_FEATURES_SECTION_ID","HEADER_OFFSET_PX","ICONS","magnify","icon","id","iconId","color","componentId","props","iconPath","size","sx","scrollTo","targetId","name","enabled","trigger","event","everyTime","steps","type","selector","offsetPx","button","label","variant","target","extra","children","interactions","CONTACT","FEATURES","band","ariaLabel","element","heading","prefix","overline","title","lede","align","spacing","alignItems","marginBottom","marginLeft","marginRight","maxWidth","grid","cell","photo","image","loading","objectFit","radius","intrinsicWidth","intrinsicHeight","featureCard","body","borderRadius","paddingTop","paddingRight","paddingBottom","paddingLeft","component","checkRow","direction","testimonial","quote","detail","faq","question","answer","defaultExpanded","disableGutters","fontWeight","fontSize","contactForm","pluginId","formName","submitLabel","successMessage","required","multiline","defaultHomeDescription","siteName","trim","buildDefaultHomeScreen","key","displayName","slug","seo","description","nodes","flexWrap","gap","alignSelf","bgcolor","buildDefaultSiteLayout","homeScreenId","brand","position","boxShadow","borderBottom","borderColor","columnGap","screenId","renderAs","textDecoration","flexGrow","placeholder","display","xs","md","whiteSpace","flexShrink","borderTop","href","marginTop","DEFAULT_SITE_THEME","colorSchemes","light","primary","main","dark","contrastText","secondary","tertiary","surface","background","default","paper","disabled","tint","divider","fonts","family","weights","source","typography","fontFamily","variants","h1","lineHeight","letterSpacing","h2","h3","h4","h5","h6","textTransform","shape","defaultSiteSeo","imageWidth","imageHeight","imageAlt"],"mappings":"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"}
@@ -350,8 +350,8 @@ export declare const PLUGIN_DOCS: {
350
350
  };
351
351
  readonly fulfillmentNetworks: {
352
352
  readonly path: "/commerce-and-bookings/commerce/fulfillment-networks";
353
- readonly title: "Fulfillment networks (ShipBob, ShipMonk and Amazon MCF)";
354
- readonly excerpt: "Send paid orders to ShipBob, ShipMonk or Amazon Multi-Channel Fulfillment, get their shipments and tracking back on the order, and keep stock counts in step.";
353
+ readonly title: "Fulfillment networks (ShipBob, ShipMonk, Flexport and Amazon MCF)";
354
+ readonly excerpt: "Send paid orders to ShipBob, ShipMonk, Flexport or Amazon Multi-Channel Fulfillment, get their shipments and tracking back on the order, and keep stock counts in step.";
355
355
  };
356
356
  readonly funnels: {
357
357
  readonly path: "/marketing-and-automation/analytics/funnels";
@@ -361,7 +361,7 @@ export declare const PLUGIN_DOCS: {
361
361
  readonly helpDesks: {
362
362
  readonly path: "/commerce-and-bookings/commerce/help-desks";
363
363
  readonly title: "Help desks (Gorgias, Re:amaze, Kustomer, Gladly and Richpanel)";
364
- readonly excerpt: "Show your support team each buyer's recent orders beside their tickets in your own Gorgias, Re:amaze, Kustomer, Gladly or Richpanel account, and send contact form messages there as new tickets. Rolling out.";
364
+ readonly excerpt: "Show your support team each buyer's recent orders beside their tickets in your own Gorgias, Re:amaze, Kustomer, Gladly or Richpanel account, and send contact form messages there as new tickets.";
365
365
  };
366
366
  readonly installYourFirstPlugin: {
367
367
  readonly path: "/guides/install-your-first-plugin";
@@ -371,7 +371,7 @@ export declare const PLUGIN_DOCS: {
371
371
  readonly inventorySync: {
372
372
  readonly path: "/commerce-and-bookings/commerce/inventory-and-erp-sync";
373
373
  readonly title: "Inventory and ERP sync (Cin7 Core, inFlow, Brightpearl, Ordoro)";
374
- readonly excerpt: "Keep stock counts, products and paid orders in step with your own Cin7 Core, inFlow Inventory, Brightpearl or Ordoro account. Rolling out.";
374
+ readonly excerpt: "Keep stock counts, products and paid orders in step with your own Cin7 Core, inFlow Inventory, Brightpearl or Ordoro account.";
375
375
  };
376
376
  readonly inviteTeammates: {
377
377
  readonly path: "/workspace-and-billing/teams-and-roles/invite-teammates";
@@ -391,7 +391,7 @@ export declare const PLUGIN_DOCS: {
391
391
  readonly loyaltyConnectors: {
392
392
  readonly path: "/commerce-and-bookings/commerce/connect-smile-io-or-yotpo";
393
393
  readonly title: "Connect Smile.io or Yotpo Loyalty";
394
- readonly excerpt: "Keep your members' points in your own Smile.io or Yotpo Loyalty account, earned and spent on every Aglyn order, online and at the register. Rolling out.";
394
+ readonly excerpt: "Keep your members' points in your own Smile.io or Yotpo Loyalty account, earned and spent on every Aglyn order, online and at the register.";
395
395
  };
396
396
  readonly manifestAndEnvs: {
397
397
  readonly path: "/developers/plugins/reference/manifest-and-envs";
@@ -466,7 +466,7 @@ export declare const PLUGIN_DOCS: {
466
466
  readonly printOnDemand: {
467
467
  readonly path: "/commerce-and-bookings/commerce/print-on-demand";
468
468
  readonly title: "Print on demand (Printful and Printify)";
469
- readonly excerpt: "Connect your own Printful or Printify account, import its products into your store, and paid orders are sent to it to make and ship, with tracking written back to each order. Rolling out.";
469
+ readonly excerpt: "Connect your own Printful or Printify account, import its products into your store, and paid orders are sent to it to make and ship, with tracking written back to each order.";
470
470
  };
471
471
  readonly publishAPlugin: {
472
472
  readonly path: "/developers/plugins/publish-a-plugin";
@@ -347,8 +347,8 @@ export const PLUGIN_DOCS = {
347
347
  },
348
348
  fulfillmentNetworks: {
349
349
  path: '/commerce-and-bookings/commerce/fulfillment-networks',
350
- title: 'Fulfillment networks (ShipBob, ShipMonk and Amazon MCF)',
351
- excerpt: 'Send paid orders to ShipBob, ShipMonk or Amazon Multi-Channel Fulfillment, get their shipments and tracking back on the order, and keep stock counts in step.'
350
+ title: 'Fulfillment networks (ShipBob, ShipMonk, Flexport and Amazon MCF)',
351
+ excerpt: 'Send paid orders to ShipBob, ShipMonk, Flexport or Amazon Multi-Channel Fulfillment, get their shipments and tracking back on the order, and keep stock counts in step.'
352
352
  },
353
353
  funnels: {
354
354
  path: '/marketing-and-automation/analytics/funnels',
@@ -358,7 +358,7 @@ export const PLUGIN_DOCS = {
358
358
  helpDesks: {
359
359
  path: '/commerce-and-bookings/commerce/help-desks',
360
360
  title: 'Help desks (Gorgias, Re:amaze, Kustomer, Gladly and Richpanel)',
361
- excerpt: 'Show your support team each buyer\'s recent orders beside their tickets in your own Gorgias, Re:amaze, Kustomer, Gladly or Richpanel account, and send contact form messages there as new tickets. Rolling out.'
361
+ excerpt: 'Show your support team each buyer\'s recent orders beside their tickets in your own Gorgias, Re:amaze, Kustomer, Gladly or Richpanel account, and send contact form messages there as new tickets.'
362
362
  },
363
363
  installYourFirstPlugin: {
364
364
  path: '/guides/install-your-first-plugin',
@@ -368,7 +368,7 @@ export const PLUGIN_DOCS = {
368
368
  inventorySync: {
369
369
  path: '/commerce-and-bookings/commerce/inventory-and-erp-sync',
370
370
  title: 'Inventory and ERP sync (Cin7 Core, inFlow, Brightpearl, Ordoro)',
371
- excerpt: 'Keep stock counts, products and paid orders in step with your own Cin7 Core, inFlow Inventory, Brightpearl or Ordoro account. Rolling out.'
371
+ excerpt: 'Keep stock counts, products and paid orders in step with your own Cin7 Core, inFlow Inventory, Brightpearl or Ordoro account.'
372
372
  },
373
373
  inviteTeammates: {
374
374
  path: '/workspace-and-billing/teams-and-roles/invite-teammates',
@@ -388,7 +388,7 @@ export const PLUGIN_DOCS = {
388
388
  loyaltyConnectors: {
389
389
  path: '/commerce-and-bookings/commerce/connect-smile-io-or-yotpo',
390
390
  title: 'Connect Smile.io or Yotpo Loyalty',
391
- excerpt: 'Keep your members\' points in your own Smile.io or Yotpo Loyalty account, earned and spent on every Aglyn order, online and at the register. Rolling out.'
391
+ excerpt: 'Keep your members\' points in your own Smile.io or Yotpo Loyalty account, earned and spent on every Aglyn order, online and at the register.'
392
392
  },
393
393
  manifestAndEnvs: {
394
394
  path: '/developers/plugins/reference/manifest-and-envs',
@@ -463,7 +463,7 @@ export const PLUGIN_DOCS = {
463
463
  printOnDemand: {
464
464
  path: '/commerce-and-bookings/commerce/print-on-demand',
465
465
  title: 'Print on demand (Printful and Printify)',
466
- excerpt: 'Connect your own Printful or Printify account, import its products into your store, and paid orders are sent to it to make and ship, with tracking written back to each order. Rolling out.'
466
+ excerpt: 'Connect your own Printful or Printify account, import its products into your store, and paid orders are sent to it to make and ship, with tracking written back to each order.'
467
467
  },
468
468
  publishAPlugin: {
469
469
  path: '/developers/plugins/publish-a-plugin',