@aglyn/plugins-ai 1.0.0-beta.291 → 1.0.0-beta.293

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 (149) hide show
  1. package/package.json +17 -17
  2. package/src/lib/components/ai-site-import-job.component.js +5 -4
  3. package/src/lib/components/ai-site-import-job.component.js.map +1 -1
  4. package/src/lib/components/ai-site-import-start.component.js +3 -3
  5. package/src/lib/components/ai-site-import-start.component.js.map +1 -1
  6. package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
  7. package/src/lib/components/ai-site-start-card.component.js +129 -29
  8. package/src/lib/components/ai-site-start-card.component.js.map +1 -1
  9. package/src/lib/components/ai-site-start-steps.component.d.ts +15 -3
  10. package/src/lib/components/ai-site-start-steps.component.js +42 -25
  11. package/src/lib/components/ai-site-start-steps.component.js.map +1 -1
  12. package/src/lib/components/ai-site-style-previews.d.ts +17 -0
  13. package/src/lib/components/ai-site-style-previews.js +26 -95
  14. package/src/lib/components/ai-site-style-previews.js.map +1 -1
  15. package/src/lib/declarations.server.js +22 -0
  16. package/src/lib/declarations.server.js.map +1 -1
  17. package/src/lib/jobs/ai-job-import-step.d.ts +21 -2
  18. package/src/lib/jobs/ai-job-import-step.js +179 -49
  19. package/src/lib/jobs/ai-job-import-step.js.map +1 -1
  20. package/src/lib/jobs/ai-job-layout-language.d.ts +27 -3
  21. package/src/lib/jobs/ai-job-layout-language.js +156 -113
  22. package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
  23. package/src/lib/jobs/ai-job-layout-step.js +56 -17
  24. package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
  25. package/src/lib/jobs/ai-job-page-language.d.ts +25 -15
  26. package/src/lib/jobs/ai-job-page-language.js +120 -66
  27. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  28. package/src/lib/jobs/ai-job-page-step.js +27 -7
  29. package/src/lib/jobs/ai-job-page-step.js.map +1 -1
  30. package/src/lib/jobs/ai-job-site-datasets.d.ts +12 -4
  31. package/src/lib/jobs/ai-job-site-datasets.js +36 -16
  32. package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
  33. package/src/lib/jobs/ai-jobs.js +6 -2
  34. package/src/lib/jobs/ai-jobs.js.map +1 -1
  35. package/src/lib/jobs/ai-layout-stock-photos.d.ts +50 -1
  36. package/src/lib/jobs/ai-layout-stock-photos.js +586 -35
  37. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  38. package/src/lib/jobs/ai-site-import-compile.d.ts +147 -0
  39. package/src/lib/jobs/ai-site-import-compile.js +1143 -0
  40. package/src/lib/jobs/ai-site-import-compile.js.map +1 -0
  41. package/src/lib/jobs/ai-site-import-document.d.ts +9 -36
  42. package/src/lib/jobs/ai-site-import-document.js +23 -489
  43. package/src/lib/jobs/ai-site-import-document.js.map +1 -1
  44. package/src/lib/jobs/ai-site-import-look.d.ts +54 -7
  45. package/src/lib/jobs/ai-site-import-look.js +163 -52
  46. package/src/lib/jobs/ai-site-import-look.js.map +1 -1
  47. package/src/lib/jobs/ai-site-import-publish.d.ts +7 -1
  48. package/src/lib/jobs/ai-site-import-publish.js +19 -5
  49. package/src/lib/jobs/ai-site-import-publish.js.map +1 -1
  50. package/src/lib/jobs/ai-site-late-photos.js +4 -2
  51. package/src/lib/jobs/ai-site-late-photos.js.map +1 -1
  52. package/src/lib/jobs/ai-site-publish.d.ts +10 -1
  53. package/src/lib/jobs/ai-site-publish.js +8 -3
  54. package/src/lib/jobs/ai-site-publish.js.map +1 -1
  55. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.d.ts +23 -0
  56. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js +677 -0
  57. package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js.map +1 -0
  58. package/src/lib/layout-language/ai-layout-compiler.d.ts +26 -0
  59. package/src/lib/layout-language/ai-layout-compiler.js +677 -33
  60. package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
  61. package/src/lib/layout-language/ai-layout-frame-hollows.js +5 -1
  62. package/src/lib/layout-language/ai-layout-frame-hollows.js.map +1 -1
  63. package/src/lib/layout-language/ai-layout-frame-source.d.ts +196 -0
  64. package/src/lib/layout-language/ai-layout-frame-source.js +726 -0
  65. package/src/lib/layout-language/ai-layout-frame-source.js.map +1 -0
  66. package/src/lib/layout-language/ai-layout-frame.d.ts +22 -0
  67. package/src/lib/layout-language/ai-layout-frame.js +121 -29
  68. package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
  69. package/src/lib/layout-language/ai-layout-language.d.ts +103 -37
  70. package/src/lib/layout-language/ai-layout-language.js +85 -120
  71. package/src/lib/layout-language/ai-layout-language.js.map +1 -1
  72. package/src/lib/model/ai-credit-estimate.d.ts +11 -7
  73. package/src/lib/model/ai-credit-estimate.js +11 -7
  74. package/src/lib/model/ai-credit-estimate.js.map +1 -1
  75. package/src/lib/model/ai-site-import.d.ts +307 -13
  76. package/src/lib/model/ai-site-import.js +227 -19
  77. package/src/lib/model/ai-site-import.js.map +1 -1
  78. package/src/lib/model/ai-site-look.d.ts +65 -1
  79. package/src/lib/model/ai-site-look.js +141 -23
  80. package/src/lib/model/ai-site-look.js.map +1 -1
  81. package/src/lib/model/ai-site-photos.d.ts +2 -0
  82. package/src/lib/model/ai-site-photos.js.map +1 -1
  83. package/src/lib/model/ai-site-start-steps.d.ts +4 -3
  84. package/src/lib/model/ai-site-start-steps.js +11 -3
  85. package/src/lib/model/ai-site-start-steps.js.map +1 -1
  86. package/src/lib/model/ai-site-start.d.ts +23 -2
  87. package/src/lib/model/ai-site-start.js +25 -3
  88. package/src/lib/model/ai-site-start.js.map +1 -1
  89. package/src/lib/providers/routing.d.ts +11 -0
  90. package/src/lib/providers/routing.js +23 -0
  91. package/src/lib/providers/routing.js.map +1 -1
  92. package/src/lib/runtime/ai-doctrine-validators.d.ts +4 -2
  93. package/src/lib/runtime/ai-doctrine-validators.js +7 -2
  94. package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
  95. package/src/lib/runtime/ai-icon-library.d.ts +4 -0
  96. package/src/lib/runtime/ai-icon-library.js +4 -0
  97. package/src/lib/runtime/ai-icon-library.js.map +1 -1
  98. package/src/lib/runtime/ai-node-tree.js +5 -1
  99. package/src/lib/runtime/ai-node-tree.js.map +1 -1
  100. package/src/lib/runtime/ai-palette.d.ts +2 -0
  101. package/src/lib/runtime/ai-palette.generated.js +19 -3
  102. package/src/lib/runtime/ai-palette.generated.js.map +1 -1
  103. package/src/lib/runtime/ai-palette.js +2 -1
  104. package/src/lib/runtime/ai-palette.js.map +1 -1
  105. package/src/lib/site-import/fixtures/site-layout-recordings.d.ts +50 -0
  106. package/src/lib/site-import/fixtures/site-layout-recordings.js +86 -0
  107. package/src/lib/site-import/fixtures/site-layout-recordings.js.map +1 -0
  108. package/src/lib/site-import/site-import-crawl.d.ts +18 -1
  109. package/src/lib/site-import/site-import-crawl.js +70 -10
  110. package/src/lib/site-import/site-import-crawl.js.map +1 -1
  111. package/src/lib/site-import/site-import-css.d.ts +110 -0
  112. package/src/lib/site-import/site-import-css.js +826 -0
  113. package/src/lib/site-import/site-import-css.js.map +1 -0
  114. package/src/lib/site-import/site-import-html.d.ts +116 -1
  115. package/src/lib/site-import/site-import-html.js +538 -46
  116. package/src/lib/site-import/site-import-html.js.map +1 -1
  117. package/src/lib/site-import/site-import-layout.d.ts +79 -0
  118. package/src/lib/site-import/site-import-layout.js +1608 -0
  119. package/src/lib/site-import/site-import-layout.js.map +1 -0
  120. package/src/lib/site-import/site-import-nav.d.ts +40 -0
  121. package/src/lib/site-import/site-import-nav.js +437 -0
  122. package/src/lib/site-import/site-import-nav.js.map +1 -0
  123. package/src/lib/site-import/site-import-page.d.ts +8 -1
  124. package/src/lib/site-import/site-import-page.js +24 -2
  125. package/src/lib/site-import/site-import-page.js.map +1 -1
  126. package/src/lib/assets/site-styles/beauty.webp +0 -0
  127. package/src/lib/assets/site-styles/blog.webp +0 -0
  128. package/src/lib/assets/site-styles/business.webp +0 -0
  129. package/src/lib/assets/site-styles/coming-soon.webp +0 -0
  130. package/src/lib/assets/site-styles/education.webp +0 -0
  131. package/src/lib/assets/site-styles/events.webp +0 -0
  132. package/src/lib/assets/site-styles/fitness.webp +0 -0
  133. package/src/lib/assets/site-styles/landing.webp +0 -0
  134. package/src/lib/assets/site-styles/music.webp +0 -0
  135. package/src/lib/assets/site-styles/nonprofit.webp +0 -0
  136. package/src/lib/assets/site-styles/personal.webp +0 -0
  137. package/src/lib/assets/site-styles/photography.webp +0 -0
  138. package/src/lib/assets/site-styles/portfolio.webp +0 -0
  139. package/src/lib/assets/site-styles/professional.webp +0 -0
  140. package/src/lib/assets/site-styles/realestate.webp +0 -0
  141. package/src/lib/assets/site-styles/restaurant.webp +0 -0
  142. package/src/lib/assets/site-styles/store.webp +0 -0
  143. package/src/lib/assets/site-styles/studio.webp +0 -0
  144. package/src/lib/assets/site-styles/trades.webp +0 -0
  145. package/src/lib/assets/site-styles/wellness.webp +0 -0
  146. package/src/lib/assets/site-styles/yoga.webp +0 -0
  147. package/src/lib/site-import/site-import-review.d.ts +0 -40
  148. package/src/lib/site-import/site-import-review.js +0 -149
  149. package/src/lib/site-import/site-import-review.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/site-import/site-import-layout.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 */\n\n/*==========================================\n * THE SOURCE'S LAYOUT, READ BY CODE (AGL-4106).\n *\n * An imported page used to be its lines and nothing else: every section\n * cut at an `h2`, every card a run of paragraphs, every icon gone, so the\n * page came out one column of text. This reads how the source lays the page\n * out, with no model, into a tree whose leaves are the page's own lines by\n * index (`SiteImportLayout`); the compile draws it with the site's own cards,\n * columns, pictures, icons and bands.\n *\n * - **Sections.** The source's own: the `<section>`s (or `<article>`s, or\n * labeled regions) its `<main>` is made of, else the containers of their\n * own that each hold a heading, else the stretches its `h1` and `h2` open.\n * The eyebrow that opens a section stays in it. Each gets its name (its\n * `aria-label`, else its heading) and its band, from its background: white\n * is `plain`, a light grey or tint `soft`, a strong color `brand`, a dark\n * color, a gradient or a photo `dark`.\n * - **Rows.** A container that lays its children side by side (a grid with\n * columns, a flex row, a grid framework's row and cells, a table row) is a\n * row; its columns' widths come from the grid template, the cells' sizes\n * or equal shares, in twelfths.\n * - **Groups.** Three or more siblings built alike (the same elements in the\n * same order) are a group, and what they hold says its kind: icon or\n * picture with a title and words are `cards`, a leading number `steps`, a\n * short figure over a label `stats`, questions with answers `faq`, quotes\n * `quotes`, pictures alone `logos`, a price with a period `pricing`.\n * Rows of cells built alike are a `table`; a `tablist` is `tabs`.\n * - **Pictures, icons, buttons.** Every picture where it sits (one inside a\n * button or a link too); every inline icon, once, by index; every link or\n * button the source draws as a button, filled (`primary`), outlined\n * (`secondary`) or plain (`quiet`).\n * - **The look.** The fonts (Google Fonts' named), the page's background and\n * text, the buttons' fill and corners, the links' color, the header's\n * background: what the look pass draws the site's theme from.\n *\n * Class names are hints a framework leaves (`MuiGrid-grid-md-4`, `col-md-6`),\n * never the rule: the reader reads what an element draws, through the page's\n * own stylesheets (`site-import-css.ts`). Nothing a page wrote runs.\n *=========================================*/\n\nimport {\n AI_SITE_IMPORT_MAX_SECTIONS,\n siteImportFilterNodes,\n siteImportLayoutLines,\n type SiteImportBand,\n type SiteImportButtonStyle,\n type SiteImportGroupKind,\n type SiteImportHeroPicture,\n type SiteImportLayout,\n type SiteImportLayoutGroup,\n type SiteImportLayoutItem,\n type SiteImportLayoutNode,\n type SiteImportLayoutSection,\n type SiteImportLayoutTable,\n type SiteImportLayoutTabs,\n type SiteImportLineRef,\n type SiteImportLookFacts,\n} from '../model/ai-site-import'\nimport {\n siteImportBackgroundOf,\n siteImportColorOf,\n siteImportCssOf,\n siteImportFontFamilies,\n siteImportFontSizePx,\n siteImportGridColumns,\n siteImportHasBorder,\n siteImportHasShadow,\n siteImportHex,\n siteImportLuminance,\n siteImportRadiusPx,\n siteImportSaturation,\n siteImportStylesOf,\n siteImportTwelfths,\n type SiteImportComputedStyle,\n type SiteImportStyles,\n} from './site-import-css'\nimport { extractSiteImportPage, type SiteImportBlock, type SiteImportElement, type SiteImportExtract, type SiteImportStructure } from './site-import-html'\nimport { siteImportLabel } from './site-import-page'\n\n/** A page as the layout reader takes it: its blocks and how it is built. */\nexport type SiteImportLayoutSource = Pick<SiteImportExtract, 'blocks'> & { structure: SiteImportStructure }\n\n/** One thing in the page's order: a line (by its main-region index) or an icon. */\ninterface Leaf {\n order: number\n kind: 'line' | 'icon' | 'form'\n /** The line's index among the main-region blocks; the icon's or the form's index. */\n ref: number\n element: number\n}\n\n/** A part of a container: one of its children with content, or a leaf directly in it. */\ntype Part = { element: number; first: number } | { leaf: Leaf; first: number }\n\nconst isElementPart = (part: Part): part is { element: number; first: number } => 'element' in part\n\n/** Whether a block is a line of its own: a link inside a sentence is in its sentence already. */\nfunction isLine(block: SiteImportBlock): boolean {\n if (block.kind === 'image') return !!block.url\n if (block.kind === 'link') return !block.inline && !!block.text.trim()\n return !!block.text.trim()\n}\n\nconst BUTTON_CLASS = /(?:^|[\\s_-])(?:btn|button)(?:$|[\\s_-])|Button-root|wp-block-button__link|sqs-block-button-element|elementor-button|w-button/i\nconst TEXT_BUTTON_CLASS = /MuiButton-text\\b|btn-link\\b|is-style-text/i\nconst OUTLINED_CLASS = /MuiButton-outlined\\b|btn-outline|is-style-outline|--outline|button--secondary|btn-secondary/i\nconst FILLED_CLASS = /MuiButton-contained\\b|btn-primary|button--primary|--solid|is-style-fill/i\nconst LANDMARK_TAGS = new Set(['section', 'article', 'aside'])\nconst SECTION_CLASS = /(?:^|[\\s_-])(?:section|page-section|wp-block-group|elementor-section|e-con|shopify-section|block-section)(?:$|[\\s_-])/i\nconst MUI_GRID_SIZE = /\\bMuiGrid-grid-(xs|sm|md|lg|xl)-(\\d+)\\b/g\nconst BOOTSTRAP_COL = /\\bcol-(?:(sm|md|lg|xl)-)?(\\d{1,2})\\b/g\nconst BREAKPOINT_RANK: Record<string, number> = { xs: 0, sm: 1, md: 2, lg: 3, xl: 4 }\nconst PRICE = /(?:[$€£¥₹]\\s?\\d|\\d+(?:[.,]\\d+)?\\s?(?:USD|EUR|GBP|CAD|AUD)\\b)/\nconst PERIOD = /\\/\\s?(?:mo|month|yr|year|user|seat|site)\\b|\\bper (?:month|year|user|seat)\\b|\\bmonthly\\b|\\bannual(?:ly)?\\b|\\bbilled\\b|\\ba month\\b|\\ba year\\b/i\nconst STEP_NUMBER = /^(?:step\\s*)?(?:0?\\d{1,2}|[ivx]{1,4})[.):]?$/i\nconst FIGURE = /^[^\\s]{0,3}[\\d][\\d.,:/x×+%kmb$€£-]*\\s?[^\\s]{0,12}$|^\\d+-[a-z]+$/i\n\n/**\n * The page's layout from its structure and its linked stylesheets' text,\n * over its main-region lines. `null` for a page with no structure or no main\n * content.\n */\nexport function siteImportLayout(page: SiteImportLayoutSource, stylesheets: readonly string[] = []): SiteImportLayout | null {\n const { structure, blocks } = page\n if (!structure) return null\n const css = siteImportCssOf([...structure.styles, ...stylesheets])\n const styles = siteImportStylesOf(structure, css)\n const reader = new LayoutReader(structure, blocks, styles)\n const sections = reader.sections()\n if (!sections.length) return null\n return {\n v: 1,\n sections,\n icons: structure.icons.map((icon) => ({ ...icon })),\n look: siteImportLookFacts(structure, styles, css.fontFaces),\n }\n}\n\nclass LayoutReader {\n private readonly elements: readonly SiteImportElement[]\n /** Block index → its index among the main-region blocks; -1 for every other block. */\n private readonly mainIndex: number[]\n /** Each element's leaves, its subtree's, in order (memoized). */\n private readonly leafMemo = new Map<number, Leaf[]>()\n /** Each element's own leaves. */\n private readonly own: Leaf[][]\n /** Tab panels a tab strip has read already. */\n private readonly usedPanels = new Set<number>()\n private bodySize = 16\n\n constructor(\n private readonly structure: SiteImportStructure,\n private readonly blocks: readonly SiteImportBlock[],\n private readonly styles: SiteImportStyles,\n ) {\n this.elements = structure.elements\n this.mainIndex = []\n let main = 0\n for (const block of blocks) this.mainIndex.push(block.region === 'main' ? main++ : -1)\n this.own = this.elements.map(() => [])\n structure.blockElement.forEach((element, index) => {\n const block = blocks[index]\n const ref = this.mainIndex[index] ?? -1\n if (!block || ref < 0 || !isLine(block)) return\n this.own[element]?.push({ order: index, kind: 'line', ref, element })\n })\n for (const element of this.elements) {\n if (element.region !== 'main' || element.nav) continue\n if (element.icon !== undefined) this.own[element.id]?.push({ order: element.order ?? 0, kind: 'icon', ref: element.icon, element: element.id })\n if (element.form !== undefined) this.own[element.id]?.push({ order: element.order ?? 0, kind: 'form', ref: element.form, element: element.id })\n }\n const body = structure.body >= 0 ? structure.body : -2\n this.bodySize = siteImportFontSizePx(styles.of(body)) ?? 16\n }\n\n /*---------------- leaves and parts ----------------*/\n\n leaves(element: number): Leaf[] {\n const held = this.leafMemo.get(element)\n if (held) return held\n const node = this.elements[element]\n if (!node) return []\n const list = [...(this.own[element] ?? [])]\n for (const child of node.children) list.push(...this.leaves(child))\n list.sort((a, b) => a.order - b.order)\n this.leafMemo.set(element, list)\n return list\n }\n\n private inRange(leaf: Leaf, range: readonly [number, number]): boolean {\n return leaf.order >= range[0] && leaf.order < range[1]\n }\n\n private parts(element: number, range: readonly [number, number]): Part[] {\n const node = this.elements[element]\n if (!node) return []\n const parts: Part[] = []\n for (const leaf of this.own[element] ?? []) if (this.inRange(leaf, range)) parts.push({ leaf, first: leaf.order })\n for (const child of node.children) {\n const first = this.leaves(child).find((leaf) => this.inRange(leaf, range))\n if (first) parts.push({ element: child, first: first.order })\n }\n return parts.sort((a, b) => a.first - b.first)\n }\n\n /** Down through wrappers that hold one part, to the element whose parts are the content. */\n private unwrap(element: number, range: readonly [number, number]): number {\n let at = element\n for (let guard = 0; guard < 64; guard += 1) {\n const parts = this.parts(at, range)\n if (parts.length !== 1 || !isElementPart(parts[0] as Part)) return at\n at = (parts[0] as { element: number }).element\n }\n return at\n }\n\n private style(element: number): SiteImportComputedStyle {\n return this.styles.of(element)\n }\n\n private block(leaf: Leaf): SiteImportBlock | undefined {\n return this.blocks[leaf.order]\n }\n\n /*---------------- sections ----------------*/\n\n sections(): SiteImportLayoutSection[] {\n const root = this.structure.main >= 0 ? this.structure.main : this.structure.body\n const all: readonly [number, number] = [-1, Number.POSITIVE_INFINITY]\n const rootLeaves = root >= 0 ? this.leaves(root) : this.elements.filter((element) => element.parent < 0).flatMap((element) => this.leaves(element.id))\n if (!rootLeaves.length) return []\n const container = root >= 0 ? this.unwrap(root, all) : -1\n const parts = container >= 0 ? this.parts(container, all) : []\n const elementParts = parts.filter(isElementPart)\n const landmarks = elementParts.filter((part) => this.isLandmark(part.element))\n let cuts: Cut[] = []\n if (elementParts.length >= 2 && landmarks.length >= Math.max(2, Math.ceil(elementParts.length / 2))) {\n // A container of its own among the landmarks (a post's article column) is a section too; a stray line joins the next.\n cuts = this.cutsAt(parts, (part) => this.isLandmark(part.element) || this.holdsHeading(part.element) || this.lineCount(part.element) >= 3, 'landmark')\n } else if (elementParts.length >= 2 && this.containersHoldSections(elementParts)) {\n cuts = this.cutsAt(parts, (part) => this.holdsHeading(part.element), 'container')\n }\n if (cuts.length < 2) cuts = this.headingCuts(rootLeaves)\n const sections: SiteImportLayoutSection[] = []\n for (const cut of cuts.slice(0, AI_SITE_IMPORT_MAX_SECTIONS * 2)) {\n const section = this.section(cut, container, sections.length)\n if (section) sections.push(section)\n }\n this.markHero(sections)\n return this.capSections(sections)\n }\n\n /** At most `AI_SITE_IMPORT_MAX_SECTIONS`: the last holds whatever follows. */\n private capSections(sections: SiteImportLayoutSection[]): SiteImportLayoutSection[] {\n if (sections.length <= AI_SITE_IMPORT_MAX_SECTIONS) return sections\n const kept = sections.slice(0, AI_SITE_IMPORT_MAX_SECTIONS)\n const last = kept[kept.length - 1] as SiteImportLayoutSection\n for (const extra of sections.slice(AI_SITE_IMPORT_MAX_SECTIONS)) {\n last.nodes.push(...extra.nodes)\n last.lines.push(...extra.lines)\n }\n return kept\n }\n\n private isLandmark(element: number): boolean {\n const node = this.elements[element]\n if (!node) return false\n if (LANDMARK_TAGS.has(node.tag)) return true\n if (node.attrs.role === 'region' || (node.attrs.label && /^(?:div|section)$/.test(node.tag))) return true\n return SECTION_CLASS.test(node.attrs.class ?? '')\n }\n\n private lineCount(element: number): number {\n return this.leaves(element).filter((leaf) => leaf.kind === 'line').length\n }\n\n private holdsHeading(element: number): boolean {\n return this.leaves(element).some((leaf) => {\n const block = this.block(leaf)\n return block?.kind === 'heading' && block.level <= 3\n })\n }\n\n /** Containers of their own, most of them holding a heading: a page builder's sections without the tag. */\n private containersHoldSections(parts: Array<{ element: number }>): boolean {\n const containers = parts.filter((part) => !/^(?:h[1-6]|p|ul|ol|li|a|img|span|strong|em|button|blockquote|figure|picture)$/.test(this.elements[part.element]?.tag ?? ''))\n if (containers.length < parts.length * 0.8) return false\n return containers.filter((part) => this.holdsHeading(part.element)).length >= Math.max(2, Math.ceil(containers.length * 0.6))\n }\n\n /** Sections at the parts `starts` picks; loose parts between them join the next one, or the last. */\n private cutsAt(parts: Part[], starts: (part: { element: number }) => boolean, from: SiteImportLayoutSection['from']): Cut[] {\n const cuts: Cut[] = []\n let pendingFrom: number | null = null\n for (const part of parts) {\n if (isElementPart(part) && starts(part)) {\n const leaves = this.leaves(part.element)\n const lo = Math.min(pendingFrom ?? Number.POSITIVE_INFINITY, (leaves[0] as Leaf).order)\n cuts.push({ element: pendingFrom === null ? part.element : null, anchor: part.element, range: [lo, (leaves[leaves.length - 1] as Leaf).order + 0.75], from })\n pendingFrom = null\n } else {\n pendingFrom = pendingFrom ?? part.first\n }\n }\n if (pendingFrom !== null) {\n const last = cuts[cuts.length - 1]\n if (last) {\n last.range[1] = Number.POSITIVE_INFINITY\n last.element = null\n } else cuts.push({ element: null, anchor: null, range: [pendingFrom, Number.POSITIVE_INFINITY], from })\n }\n // Ranges meet, so nothing between two sections is lost.\n for (let index = 1; index < cuts.length; index += 1) (cuts[index - 1] as Cut).range[1] = (cuts[index] as Cut).range[0]\n if (cuts[0]) {\n // Loose lines before the first section open it.\n if (cuts[0].range[0] > (parts[0]?.first ?? 0)) cuts[0].element = null\n cuts[0].range[0] = -1\n }\n if (cuts.length) (cuts[cuts.length - 1] as Cut).range[1] = Number.POSITIVE_INFINITY\n return cuts\n }\n\n /** Sections at the page's `h1` and `h2`, each opened by the eyebrow just above its heading. */\n private headingCuts(leaves: Leaf[]): Cut[] {\n const starts: number[] = []\n leaves.forEach((leaf, index) => {\n const block = this.block(leaf)\n if (block?.kind !== 'heading' || block.level > 2) return\n let at = index\n const before = leaves[index - 1]\n const previous = before ? this.block(before) : undefined\n if (before && previous?.kind === 'paragraph' && this.looksLikeEyebrow(before, previous.text)) at = index - 1\n const order = (leaves[at] as Leaf).order\n if (!starts.length || order > (starts[starts.length - 1] as number)) starts.push(order)\n })\n if (!starts.length || starts[0] !== (leaves[0] as Leaf).order) starts.unshift(-1)\n return starts.map((start, index) => ({\n element: null,\n anchor: null,\n range: [index === 0 ? -1 : start, starts[index + 1] ?? Number.POSITIVE_INFINITY] as [number, number],\n from: 'heading' as const,\n }))\n }\n\n private section(cut: Cut, container: number, index: number): SiteImportLayoutSection | null {\n const { element, range, from } = cut\n const scope = element ?? container\n const nodes = scope >= 0 ? this.read(scope, range) : this.readLeaves(range)\n const lines = this.linesOf(nodes)\n if (!lines.length && !nodes.some((node) => node.kind === 'icon' || node.kind === 'form')) return null\n const name = this.nameOf(cut.anchor, lines, index)\n const band = cut.anchor !== null ? this.bandOf(cut.anchor, false) : this.bandOf(container, true)\n return {\n name,\n from,\n band: band.band,\n background: band.background,\n ...(band.backdrop ? { backdrop: band.backdrop } : {}),\n align: this.alignOf(scope, lines),\n nodes,\n lines,\n }\n }\n\n /** Lines with no container to read them through: one after another. */\n private readLeaves(range: [number, number]): SiteImportLayoutNode[] {\n const leaves = this.elements.filter((element) => element.parent < 0).flatMap((element) => this.leaves(element.id))\n return leaves.filter((leaf) => this.inRange(leaf, range)).map((leaf) => this.leafNode(leaf))\n }\n\n private nameOf(element: number | null, lines: SiteImportLineRef[], index: number): string {\n const label = element !== null ? this.elements[element]?.attrs.label : undefined\n if (label) return siteImportLabel(label)\n const mainBlocks = this.mainBlocks()\n const heading =\n lines.map((ref) => mainBlocks[ref]).find((block) => block?.kind === 'heading' && block.level <= 2) ??\n lines.map((ref) => mainBlocks[ref]).find((block) => block?.kind === 'heading')\n const text = heading && heading.kind === 'heading' ? siteImportLabel(heading.text) : ''\n if (text) return text\n const first = lines.map((ref) => mainBlocks[ref]).find((block) => block && block.kind !== 'image')\n const line = first && first.kind !== 'image' && first.text.length <= 60 ? siteImportLabel(first.text) : ''\n return line || `Section ${index + 1}`\n }\n\n private mainBlocksMemo: SiteImportBlock[] | null = null\n private mainBlocks(): SiteImportBlock[] {\n this.mainBlocksMemo ??= this.blocks.filter((block) => block.region === 'main')\n return this.mainBlocksMemo\n }\n\n /*---------------- bands ----------------*/\n\n private bandOf(element: number, inherited: boolean): { band: SiteImportBand; background: string | null; backdrop?: SiteImportLayoutSection['backdrop'] } {\n // The section's own background, else the one wrapper inside it that covers it.\n const chain: number[] = []\n if (!inherited) {\n let at = element\n for (let depth = 0; depth < 4 && at >= 0; depth += 1) {\n chain.push(at)\n const children = (this.elements[at]?.children ?? []).filter((child) => this.leaves(child).length)\n if (children.length !== 1) break\n at = children[0] as number\n }\n }\n for (const at of chain) {\n const found = this.backgroundBand(at)\n if (found) return found\n }\n // None of its own: the page's, under it.\n for (let at = inherited ? element : (this.elements[element]?.parent ?? -1); at >= 0; at = this.elements[at]?.parent ?? -1) {\n const found = this.backgroundBand(at)\n if (found) return found\n }\n return this.backgroundBand(-2) ?? { band: 'plain', background: null }\n }\n\n private backgroundBand(element: number): { band: SiteImportBand; background: string | null; backdrop?: SiteImportLayoutSection['backdrop'] } | null {\n const style = this.style(element)\n const background = siteImportBackgroundOf(style)\n const hex = background.color && background.color.a >= 0.5 ? siteImportHex(background.color) : null\n if (background.image && !/\\.svg(?:$|\\?)/i.test(background.image)) {\n return { band: 'dark', background: hex, backdrop: { kind: 'picture', url: background.image } }\n }\n if (background.gradient) {\n const stops = background.gradient.filter((stop) => stop.a > 0.1)\n const light = stops.length ? stops.reduce((sum, stop) => sum + siteImportLuminance(stop), 0) / stops.length : 1\n return { band: light < 0.55 ? 'dark' : 'soft', background: hex, backdrop: { kind: 'gradient' } }\n }\n if (background.color && background.color.a >= 0.5) return { band: siteImportBandOfColor(background.color), background: hex }\n const theme = this.elements[element]?.attrs.theme\n if (theme) {\n if (/^(?:dark|black)/.test(theme)) return { band: 'dark', background: null }\n if (/^bright/.test(theme)) return { band: 'brand', background: null }\n if (/^light/.test(theme)) return { band: 'soft', background: null }\n if (/^white/.test(theme)) return { band: 'plain', background: null }\n }\n return null\n }\n\n private alignOf(scope: number, lines: SiteImportLineRef[]): 'start' | 'center' {\n const mainBlocks = this.mainBlocks()\n const heading = lines.find((ref) => mainBlocks[ref]?.kind === 'heading')\n if (heading === undefined || scope < 0) return 'start'\n const leaf = this.leaves(scope).find((entry) => entry.kind === 'line' && entry.ref === heading)\n if (!leaf) return 'start'\n return this.style(leaf.element).get('text-align') === 'center' ? 'center' : 'start'\n }\n\n /*---------------- reading a container ----------------*/\n\n private read(element: number, range: readonly [number, number]): SiteImportLayoutNode[] {\n const node = this.elements[element]\n if (!node) return []\n if (node.tag === 'table') {\n const table = this.table(element, range)\n if (table) return [table]\n }\n const parts = this.parts(element, range)\n if (!parts.length) return []\n if (parts.length === 1) {\n const only = parts[0] as Part\n return isElementPart(only) ? this.read(only.element, range) : [this.leafNode(only.leaf)]\n }\n const strips = this.tabStrips().get(element)\n if (strips) return this.readTabs(element, strips, range)\n const table = this.gridTable(element, parts, range)\n if (table) return [table]\n const runs = this.groupRuns(element, parts, range)\n const elementParts = parts.filter(isElementPart)\n // Items built alike are a group, a heading over them included; only a container of unlike parts is a row of columns.\n if (!runs.length && elementParts.length >= 2 && this.isRow(element) && this.rowWorthy(parts, range)) {\n return [this.row(element, parts, range)]\n }\n const out: SiteImportLayoutNode[] = []\n for (let index = 0; index < parts.length; ) {\n const run = runs.find((entry) => entry.start === index)\n if (run) {\n out.push(this.group(element, parts.slice(run.start, run.end) as Array<{ element: number; first: number }>, range))\n index = run.end\n continue\n }\n const part = parts[index] as Part\n if (isElementPart(part)) out.push(...this.read(part.element, range))\n else out.push(this.leafNode(part.leaf))\n index += 1\n }\n return out\n }\n\n private leafNode(leaf: Leaf): SiteImportLayoutNode {\n if (leaf.kind === 'icon') return { kind: 'icon', icon: leaf.ref }\n if (leaf.kind === 'form') return { kind: 'form', form: leaf.ref }\n const block = this.block(leaf)\n if (block?.kind === 'image') {\n const wrap = this.wrapperOf(leaf.element, ['a', 'button'], 4)\n const href = wrap !== null && this.elements[wrap]?.tag === 'a' ? this.anchorHref(wrap) : null\n return { kind: 'picture', line: leaf.ref, ...(href ? { href } : {}), ...(wrap !== null && this.elements[wrap]?.tag === 'button' ? { button: true as const } : {}) }\n }\n const button = this.buttonStyle(leaf)\n const role = button ? undefined : this.roleOf(leaf)\n return { kind: 'line', line: leaf.ref, ...(role ? { role } : {}), ...(button ? { button } : {}) }\n }\n\n /** The nearest element of these tags at or above `element`, within `depth` levels. */\n private wrapperOf(element: number, tags: readonly string[], depth: number): number | null {\n let at = element\n for (let level = 0; level <= depth && at >= 0; level += 1) {\n const node = this.elements[at]\n if (!node) return null\n if (tags.includes(node.tag)) return at\n at = node.parent\n }\n return null\n }\n\n private anchorHref(element: number): string | null {\n const anchor = this.structure.anchors.find((entry) => entry.element === element)\n return anchor?.href ?? null\n }\n\n /** How the source draws a line as a button, when it does. */\n private buttonStyle(leaf: Leaf): SiteImportButtonStyle | undefined {\n const block = this.block(leaf)\n if (!block || (block.kind !== 'link' && block.kind !== 'paragraph')) return undefined\n const host = this.wrapperOf(leaf.element, block.kind === 'link' ? ['a'] : ['button'], 3)\n if (host === null) return undefined\n const node = this.elements[host] as SiteImportElement\n if (node.attrs.role === 'tab') return undefined\n return siteImportButtonStyleOf(node, this.style(host), this.backgroundUnder(host)) ?? undefined\n }\n\n /** The background an element is drawn on: its nearest ancestor's. */\n private backgroundUnder(element: number): string | null {\n for (let at = this.elements[element]?.parent ?? -1; at >= 0; at = this.elements[at]?.parent ?? -1) {\n const color = siteImportBackgroundOf(this.style(at)).color\n if (color && color.a >= 0.5) return siteImportHex(color)\n }\n const page = siteImportBackgroundOf(this.style(-2)).color\n return page ? siteImportHex(page) : '#ffffff'\n }\n\n /** An eyebrow, a lede or a note, where the source's styling says so. */\n private roleOf(leaf: Leaf): 'eyebrow' | 'lede' | 'note' | undefined {\n const block = this.block(leaf)\n if (block?.kind !== 'paragraph') return undefined\n const style = this.style(leaf.element)\n if (this.looksLikeEyebrow(leaf, block.text)) return 'eyebrow'\n const size = siteImportFontSizePx(style)\n if (size !== null && size >= this.bodySize * 1.12 && block.text.length > 40) return 'lede'\n if (size !== null && size <= this.bodySize * 0.875 && block.text.length <= 160) return 'note'\n return undefined\n }\n\n private looksLikeEyebrow(leaf: Leaf, text: string): boolean {\n const words = text.match(/[\\p{L}\\p{N}]+/gu) ?? []\n if (text.length > 60 || words.length > 10) return false\n const style = this.style(leaf.element)\n const letters = text.replace(/[^\\p{L}]/gu, '')\n const caps = letters.length >= 3 && letters === letters.toUpperCase() && letters !== letters.toLowerCase()\n return caps || style.get('text-transform') === 'uppercase'\n }\n\n /*---------------- rows ----------------*/\n\n private isRow(element: number): boolean {\n const node = this.elements[element]\n if (!node) return false\n if (node.tag === 'tr') return true\n const classes = node.attrs.class ?? ''\n if (/\\bMuiGrid-container\\b|(?:^|\\s)row(?:\\s|$)|\\bcolumns\\b|wp-block-columns|elementor-row|e-con-inner|sqs-row/.test(classes)) return true\n const style = this.style(element)\n const display = style.get('display') ?? ''\n if (/\\bgrid\\b/.test(display)) {\n const columns = siteImportGridColumns(style.get('grid-template-columns'))\n return !!columns && columns.length >= 2\n }\n if (/\\bflex\\b/.test(display)) return !/column/.test(style.get('flex-direction') ?? 'row')\n return false\n }\n\n /** A row is columns of content, not a line of buttons or links. */\n private rowWorthy(parts: Part[], range: readonly [number, number]): boolean {\n const substantial = parts.filter((part) => {\n if (!isElementPart(part)) return false\n return this.leaves(part.element).some((leaf) => {\n if (!this.inRange(leaf, range) || leaf.kind !== 'line') return false\n const block = this.block(leaf)\n return block?.kind === 'image' || block?.kind === 'heading' || ((block?.kind === 'paragraph' || block?.kind === 'list-item' || block?.kind === 'quote') && !this.buttonStyle(leaf))\n })\n })\n return substantial.length >= 2\n }\n\n private row(element: number, parts: Part[], range: readonly [number, number]): SiteImportLayoutNode {\n const cells: SiteImportLayoutNode[][] = parts.map((part) => (isElementPart(part) ? this.read(part.element, range) : [this.leafNode(part.leaf)]))\n const weights = this.weightsOf(element, parts)\n // Cells that are each one group of one kind are one group in columns.\n const groups = cells.map((cell) => (cell.length === 1 && cell[0]?.kind === 'group' ? (cell[0] as SiteImportLayoutGroup) : null))\n if (cells.length >= 2 && groups.every((group) => group && group.group === groups[0]?.group && group.columns === 1)) {\n const first = groups[0] as SiteImportLayoutGroup\n return { kind: 'group', group: first.group, columns: cells.length, boxed: groups.every((group) => group?.boxed), items: groups.flatMap((group) => group?.items ?? []) }\n }\n return { kind: 'row', cols: siteImportTwelfths(weights), cells: cells.map((nodes) => ({ nodes })) }\n }\n\n /** The columns' relative widths: the grid template, the cells' own sizes, else equal shares. */\n private weightsOf(element: number, parts: Part[]): number[] {\n const count = parts.length\n const template = siteImportGridColumns(this.style(element).get('grid-template-columns'))\n if (template && template.length >= count) return template.slice(0, count)\n const sized = parts.map((part) => (isElementPart(part) ? this.cellSize(part.element) : null))\n if (sized.every((size) => size !== null)) return sized as number[]\n return parts.map(() => 1)\n }\n\n /** A cell's size: a framework's column class, its width share or its flex grow. */\n private cellSize(element: number): number | null {\n const classes = this.elements[element]?.attrs.class ?? ''\n let best: { rank: number; size: number } | null = null\n for (const match of classes.matchAll(MUI_GRID_SIZE)) {\n const rank = BREAKPOINT_RANK[match[1] as string] ?? 0\n if (rank <= 3 && (!best || rank >= best.rank)) best = { rank, size: Number(match[2]) }\n }\n for (const match of classes.matchAll(BOOTSTRAP_COL)) {\n const rank = match[1] ? (BREAKPOINT_RANK[match[1]] ?? 0) : 0\n if (rank <= 3 && (!best || rank >= best.rank)) best = { rank, size: Number(match[2]) }\n }\n if (best) return best.size\n const style = this.style(element)\n for (const property of ['flex-basis', 'width', 'max-width']) {\n const percent = /^(-?[\\d.]+)%$/.exec(style.get(property)?.trim() ?? '')\n if (percent) return Number(percent[1])\n }\n const grow = /^(\\d+(?:\\.\\d+)?)(?:\\s|$)/.exec(style.get('flex')?.trim() ?? style.get('flex-grow')?.trim() ?? '')\n if (grow && Number(grow[1]) > 0) return Number(grow[1])\n return null\n }\n\n /*---------------- groups ----------------*/\n\n private signature(element: number, range: readonly [number, number]): string {\n const at = this.unwrap(element, range)\n return this.parts(at, range)\n .map((part) => (isElementPart(part) ? (this.elements[part.element]?.tag ?? '') : part.leaf.kind !== 'line' ? part.leaf.kind : (this.block(part.leaf)?.kind ?? '')))\n .join(',')\n }\n\n /** The kinds of an item's leaves in order, repeats folded: a looser likeness. */\n private kinds(element: number, range: readonly [number, number]): string {\n const out: string[] = []\n for (const leaf of this.leaves(element)) {\n if (!this.inRange(leaf, range)) continue\n const kind = leaf.kind !== 'line' ? leaf.kind : (this.block(leaf)?.kind ?? '')\n if (out[out.length - 1] !== kind) out.push(kind)\n }\n return out.join(',')\n }\n\n /** Runs of three or more siblings built alike (two, when a row draws them as boxes). */\n private groupRuns(element: number, parts: Part[], range: readonly [number, number]): GroupRun[] {\n // A strip of short words side by side (a row of site kinds, a post's tags) is one group.\n if (parts.length >= 4 && this.isRow(element) && parts.every((part) => isElementPart(part) && this.isChip(part.element, range))) return [{ start: 0, end: parts.length }]\n const keys = parts.map((part) => (isElementPart(part) && this.couldBeItem(part.element, range) ? `${this.elements[part.element]?.tag}|${this.signature(part.element, range)}` : null))\n const loose = parts.map((part) => (isElementPart(part) ? this.kinds(part.element, range) : null))\n const runs: GroupRun[] = []\n const row = this.isRow(element)\n for (let index = 0; index < parts.length; ) {\n const key = keys[index]\n const kind = loose[index]\n if (key === null || key === undefined) {\n index += 1\n continue\n }\n let end = index + 1\n while (end < parts.length && keys[end] !== null && (keys[end] === key || (loose[end] === kind && !!kind && kind.includes(',')))) end += 1\n const count = end - index\n const boxed = count === 2 && row && parts.slice(index, end).every((part) => isElementPart(part) && this.boxed(part.element))\n // One element alone (a single list item) is not a group; a heading leaf is never an item.\n const items = parts.slice(index, end) as Array<{ element: number }>\n const headings = items.every((part) => /^h[1-6]$/.test(this.elements[part.element]?.tag ?? ''))\n if ((count >= 3 || boxed) && !headings) {\n runs.push({ start: index, end })\n index = end\n } else index += 1\n }\n return runs\n }\n\n /**\n * Whether an element can be one item of a group: a list item, a disclosure,\n * a figure, a picture, or a container of more than one thing. A run of\n * plain paragraphs is prose, never a group.\n */\n private couldBeItem(element: number, range: readonly [number, number]): boolean {\n const node = this.elements[element]\n if (!node) return false\n if (/^(?:li|dt|dd|details|figure|article)$/.test(node.tag)) return true\n const leaves = this.leaves(element).filter((leaf) => this.inRange(leaf, range))\n if (leaves.length && leaves.every((leaf) => leaf.kind === 'line' && this.block(leaf)?.kind === 'image')) return true\n return this.parts(this.unwrap(element, range), range).length >= 2\n }\n\n /** One short line and nothing else: a chip, a tag, a strip's entry. */\n private isChip(element: number, range: readonly [number, number]): boolean {\n const leaves = this.leaves(element).filter((leaf) => this.inRange(leaf, range))\n const lines = leaves.filter((leaf) => leaf.kind === 'line')\n if (lines.length !== 1) return false\n const block = this.block(lines[0] as Leaf)\n return !!block && block.kind !== 'image' && block.kind !== 'heading' && block.text.length <= 40\n }\n\n private boxed(element: number): boolean {\n let at = element\n for (let depth = 0; depth < 3 && at >= 0; depth += 1) {\n const style = this.style(at)\n if (siteImportHasBorder(style) || siteImportHasShadow(style)) return true\n const fill = siteImportBackgroundOf(style).color\n if (fill && fill.a >= 0.5 && siteImportHex(fill) !== this.backgroundUnder(at)) return true\n const children = (this.elements[at]?.children ?? []).filter((child) => this.leaves(child).length)\n if (children.length !== 1) break\n at = children[0] as number\n }\n return false\n }\n\n private group(container: number, parts: Array<{ element: number; first: number }>, range: readonly [number, number]): SiteImportLayoutGroup {\n const items = parts.map((part) => this.item(part.element, range))\n const chips = parts.length >= 4 && this.isRow(container) && parts.every((part) => this.isChip(part.element, range))\n const kind = chips ? 'logos' : this.groupKind(parts.map((part) => part.element), items, range)\n const columns = this.columnsOf(container, parts)\n const boxed = parts.length > 0 && parts.filter((part) => this.boxed(part.element)).length >= Math.ceil(parts.length / 2)\n // A step's number and a stat's figure lead their item.\n if (kind === 'steps' || kind === 'stats') {\n for (const item of items) {\n const lead = item.title ?? item.text?.[0]\n const text = lead !== undefined ? this.lineText(lead) : ''\n if (lead !== undefined && (kind === 'steps' ? STEP_NUMBER.test(text.trim()) : FIGURE.test(text.trim()) || text.length <= 14)) {\n item.figure = lead\n if (item.title === lead) {\n delete item.title\n const next = item.text?.find((ref) => this.lineText(ref).length <= 80)\n if (next !== undefined && (item.text?.length ?? 0) > 1) {\n item.title = next\n dropLine(item, 'text', next)\n }\n } else dropLine(item, 'text', lead)\n if (item.text && !item.text.length) delete item.text\n }\n }\n }\n if (kind === 'faq') {\n for (const item of items) {\n const question = item.lines[0]\n if (question === undefined || item.title === question) continue\n // The question names it; whatever named it before is its words.\n if (item.title !== undefined) item.text = [item.title, ...(item.text ?? [])].sort((a, b) => item.lines.indexOf(a) - item.lines.indexOf(b))\n item.title = question\n dropLine(item, 'text', question)\n dropLine(item, 'link', question)\n if (item.text && !item.text.length) delete item.text\n if (item.link && !item.link.length) delete item.link\n }\n }\n if (kind === 'pricing') {\n for (const item of items) {\n const price = item.lines.find((ref) => PRICE.test(this.lineText(ref)) && this.lineText(ref).length <= 24)\n if (price === undefined || item.title === price) continue\n item.figure = price\n dropLine(item, 'text', price)\n dropLine(item, 'list', price)\n if (item.text && !item.text.length) delete item.text\n if (item.list && !item.list.length) delete item.list\n }\n }\n return { kind: 'group', group: kind, columns, boxed, items }\n }\n\n private lineText(ref: SiteImportLineRef): string {\n const block = this.mainBlocks()[ref]\n if (!block) return ''\n return block.kind === 'image' ? block.alt : block.text\n }\n\n /** One item's lines, each in exactly one of its parts. */\n private item(element: number, range: readonly [number, number]): SiteImportLayoutItem {\n const leaves = this.leaves(element).filter((leaf) => this.inRange(leaf, range))\n const item: SiteImportLayoutItem = { lines: [] }\n const lines = leaves.filter((leaf) => leaf.kind === 'line')\n item.lines = lines.map((leaf) => leaf.ref)\n const firstLine = lines[0]\n const leadIcon = leaves.find((leaf) => leaf.kind === 'icon' && (!firstLine || leaf.order < firstLine.order + 1))\n if (leadIcon) item.icon = leadIcon.ref\n // Bullet points: list items, and lines that sit in a repeated run inside the item (a plan's features).\n const listed = new Set<number>()\n const own = this.elements[element]?.tag === 'li'\n if (!own) for (const leaf of lines) if (this.block(leaf)?.kind === 'list-item') listed.add(leaf.ref)\n const inner = this.unwrap(element, range)\n for (const members of this.listRuns(inner, range, 4)) {\n for (const member of members) for (const leaf of this.leaves(member)) if (leaf.kind === 'line' && this.inRange(leaf, range)) listed.add(leaf.ref)\n const marks = members.map((member) => this.leaves(member).find((leaf) => leaf.kind === 'icon')?.ref)\n if (marks.length && marks.every((mark) => mark !== undefined && mark === marks[0])) item.listIcon = marks[0] as number\n }\n if (item.icon !== undefined && item.icon === item.listIcon && !lines.length) delete item.icon\n const rest = lines.filter((leaf) => !listed.has(leaf.ref))\n const image = rest.find((leaf) => this.block(leaf)?.kind === 'image')\n if (image) item.image = image.ref\n const words = rest.filter((leaf) => leaf !== image)\n // Its own call to action: the links and buttons that close it.\n const trailing: Leaf[] = []\n for (let index = words.length - 1; index >= 0; index -= 1) {\n const leaf = words[index] as Leaf\n const block = this.block(leaf)\n if (block?.kind === 'link' || this.buttonStyle(leaf)) trailing.unshift(leaf)\n else break\n }\n const body = words.slice(0, words.length - trailing.length)\n let title: Leaf | undefined = body.find((leaf) => this.block(leaf)?.kind === 'heading')\n if (!title) {\n const first = body[0]\n const block = first ? this.block(first) : undefined\n if (first && block?.kind === 'link' && body.length >= 2) title = first\n else if (first && block && block.kind !== 'image' && block.text.length <= 80 && block.text.split(/\\s+/).length <= 12 && body.length >= 2) title = first\n }\n if (!title && trailing.length === words.length && trailing.length >= 1 && words.length >= 2) {\n // Only links: the first names the item.\n title = trailing.shift()\n }\n if (title) item.title = title.ref\n const text = body.filter((leaf) => leaf !== title).map((leaf) => leaf.ref)\n if (text.length) item.text = text\n if (listed.size) item.list = lines.filter((leaf) => listed.has(leaf.ref)).map((leaf) => leaf.ref)\n if (trailing.length) item.link = trailing.map((leaf) => leaf.ref)\n const titleBlock = title ? this.block(title) : undefined\n if (titleBlock?.kind === 'link') item.to = titleBlock.href\n else if (trailing.length === 1) {\n const only = this.block(trailing[0] as Leaf)\n if (only?.kind === 'link') item.to = only.href\n } else {\n const wrap = this.wrapperOf(element, ['a'], 0)\n const href = wrap !== null ? this.anchorHref(wrap) : null\n if (href) item.to = href\n }\n return item\n }\n\n /**\n * Runs of three or more one-line entries built alike anywhere inside an\n * item (a plan's features, each a check mark and a line), each run its\n * entries' elements. The item itself is never one of them.\n */\n private listRuns(element: number, range: readonly [number, number], depth: number, root = true): number[][] {\n const out: number[][] = []\n const parts = this.parts(element, range)\n const taken = new Set<number>()\n for (const run of this.groupRuns(element, parts, range)) {\n const members = (parts.slice(run.start, run.end) as Array<{ element: number }>).map((part) => part.element)\n const oneLine = members.every((member) => this.leaves(member).filter((leaf) => leaf.kind === 'line' && this.inRange(leaf, range)).length === 1)\n if (!oneLine || (root && members.length === parts.length)) continue\n out.push(members)\n members.forEach((member) => taken.add(member))\n }\n if (depth <= 0) return out\n for (const part of parts) if (isElementPart(part) && !taken.has(part.element)) out.push(...this.listRuns(part.element, range, depth - 1, false))\n return out\n }\n\n private groupKind(elements: number[], items: SiteImportLayoutItem[], range: readonly [number, number]): SiteImportGroupKind {\n const count = items.length\n const share = (test: (item: SiteImportLayoutItem, index: number) => boolean) => items.filter(test).length / Math.max(1, count)\n const first = (item: SiteImportLayoutItem) => this.lineText(item.lines[0] ?? -1).trim()\n const blockKinds = (item: SiteImportLayoutItem) => item.lines.map((ref) => this.mainBlocks()[ref]?.kind)\n if (elements.some((element) => this.elements[element]?.tag === 'details')) return 'faq'\n if (share((item) => item.lines.length === 0 || blockKinds(item).every((kind) => kind === 'image')) === 1 && items.some((item) => item.lines.length) && count >= 4) return 'logos'\n if (share((item) => blockKinds(item).includes('quote') || /^[“\"«]/.test(first(item))) >= 0.6) return 'quotes'\n if (share((item) => item.lines.some((ref) => PRICE.test(this.lineText(ref)) && this.lineText(ref).length <= 24) && (item.lines.some((ref) => PERIOD.test(this.lineText(ref))) || !!item.link)) >= 0.6 && count >= 2) {\n return 'pricing'\n }\n if (share((item) => /\\?\\s*$/.test(first(item)) && item.lines.length >= 2) >= 0.6) return 'faq'\n if (share((item) => STEP_NUMBER.test(first(item)) && item.lines.length >= 2) >= 0.6) return 'steps'\n if (share((item) => item.lines.length >= 2 && item.lines.length <= 3 && first(item).length <= 14 && FIGURE.test(first(item))) >= 0.6) return 'stats'\n const visual = share((item) => item.icon !== undefined || item.image !== undefined)\n const titled = share((item) => item.title !== undefined && (item.text?.length ?? 0) > 0)\n const boxed = elements.filter((element) => this.boxed(element)).length >= Math.ceil(elements.length / 2)\n if ((visual >= 0.6 && titled >= 0.6) || (boxed && share((item) => item.lines.length >= 2) >= 0.6)) return 'cards'\n if (share((item) => item.lines.length === 1) >= 0.8) return 'list'\n if (titled >= 0.6) return 'cards'\n void range\n return 'text'\n }\n\n /** How many columns a group's items sit in on a wide screen. */\n private columnsOf(container: number, parts: Array<{ element: number }>): number {\n const count = parts.length\n const style = this.style(container)\n const display = style.get('display') ?? ''\n if (/\\bgrid\\b/.test(display)) {\n const template = siteImportGridColumns(style.get('grid-template-columns'))\n if (template) return Math.max(1, Math.min(count, template.length))\n return 1\n }\n const sizes = parts.map((part) => this.cellSize(part.element))\n const classes = this.elements[container]?.attrs.class ?? ''\n if (/\\bMuiGrid-container\\b|(?:^|\\s)row(?:\\s|$)/.test(classes) && sizes[0]) {\n return Math.max(1, Math.min(count, Math.round(12 / (sizes[0] as number))))\n }\n if (/\\bflex\\b/.test(display) && !/column/.test(style.get('flex-direction') ?? 'row')) {\n const width = sizes[0]\n if (width && width <= 100 && /^(-?[\\d.]+)%$/.test(this.style(parts[0]?.element ?? -1).get('width') ?? '')) return Math.max(1, Math.round(100 / width))\n return Math.min(count, 4)\n }\n return 1\n }\n\n /*---------------- tables and tabs ----------------*/\n\n private table(element: number, range: readonly [number, number]): SiteImportLayoutTable | null {\n const rows: number[] = []\n const visit = (at: number) => {\n for (const child of this.elements[at]?.children ?? []) {\n const tag = this.elements[child]?.tag\n if (tag === 'tr') rows.push(child)\n else if (tag === 'thead' || tag === 'tbody' || tag === 'tfoot') visit(child)\n }\n }\n visit(element)\n if (!rows.length) return null\n const out: SiteImportLineRef[][][] = rows.map((row) =>\n (this.elements[row]?.children ?? [])\n .filter((cell) => /^t[dh]$/.test(this.elements[cell]?.tag ?? ''))\n .map((cell) => this.refsIn(cell, range)),\n )\n const header =\n (this.elements[rows[0] as number]?.parent !== undefined && this.elements[this.elements[rows[0] as number]?.parent as number]?.tag === 'thead') ||\n (this.elements[rows[0] as number]?.children ?? []).every((cell) => this.elements[cell]?.tag === 'th')\n // A caption, or lines outside the rows, are not lost.\n return { kind: 'table', header, rows: tableRows(out.filter((row) => row.some((cell) => cell.length))) }\n }\n\n private refsIn(element: number, range: readonly [number, number]): SiteImportLineRef[] {\n return this.leaves(element).filter((leaf) => leaf.kind === 'line' && this.inRange(leaf, range)).map((leaf) => leaf.ref)\n }\n\n /** Rows of short cells built alike, laid out as rows: a table drawn with a grid. */\n private gridTable(element: number, parts: Part[], range: readonly [number, number]): SiteImportLayoutTable | null {\n const rows = parts.filter(isElementPart).map((part) => part.element)\n if (rows.length < 3 || rows.length !== parts.length) return null\n const widths = rows.map((row) => (this.elements[row]?.children ?? []).length)\n const common = mode(widths)\n if (common < 2 || widths.filter((width) => width === common).length < rows.length * 0.8) return null\n if (common === 2 && rows.length < 4) return null\n if (!rows.every((row) => this.isRow(row))) return null\n const cells = rows.map((row) => (this.elements[row]?.children ?? []).map((cell) => this.refsIn(cell, range)))\n // Cells are short and flat: a value, not a card. Two-cell rows are a label and its value.\n const longest = common === 2 ? 60 : 120\n const flat = cells.every((row) => row.every((cell) => cell.length <= 2 && cell.every((ref) => this.lineText(ref).length <= longest && this.mainBlocks()[ref]?.kind !== 'image')))\n if (!flat) return null\n // A label and its value: both cells hold words (an icon beside a line is a list, not a table).\n if (common === 2 && cells.filter((row) => row.length === 2 && row.every((cell) => cell.length > 0)).length < rows.length * 0.8) return null\n // A comparison's first row names the columns over an empty corner.\n const first = cells[0] ?? []\n const header = common >= 3 && !(first[0]?.length) && first.slice(1).every((cell) => cell.length > 0)\n return { kind: 'table', header, rows: tableRows(cells) }\n }\n\n /** Tab strips, each read at the lowest element holding it and its panels. */\n private tabStrips(): Map<number, TabStrip[]> {\n if (this.tabsMemo) return this.tabsMemo\n const at = new Map<number, TabStrip[]>()\n const panels = this.elements.filter((node) => node.attrs.role === 'tabpanel' && node.region === 'main').map((node) => node.id)\n const taken = new Set<number>()\n for (const strip of this.elements) {\n if (strip.attrs.role !== 'tablist' || strip.region !== 'main') continue\n const tabs = this.findAll(strip.id, (node) => node.attrs.role === 'tab')\n if (tabs.length < 2) continue\n const found = tabs.map((tab) => {\n const attrs = this.elements[tab]?.attrs ?? {}\n const own = (id: string | undefined) => (id ? id.replace(/^tab-?/, '') : '')\n const panel = panels.find((candidate) => {\n if (taken.has(candidate)) return false\n const panelAttrs = this.elements[candidate]?.attrs ?? {}\n return (\n (!!attrs.controls && panelAttrs.id === attrs.controls) ||\n (!!attrs.id && panelAttrs.labelledby === attrs.id) ||\n (!!attrs.id && !!panelAttrs.id && own(attrs.id) === panelAttrs.id.replace(/^tabpanel-?/, ''))\n )\n })\n if (panel !== undefined) taken.add(panel)\n return panel ?? null\n })\n // Panels the tabs do not name: the ones after the strip, in order.\n const loose = panels.filter((panel) => !taken.has(panel) && panel > strip.id)\n const resolved = found.map((panel) => {\n if (panel !== null) return panel\n const next = loose.shift()\n if (next !== undefined) taken.add(next)\n return next ?? null\n })\n const members = [strip.id, ...resolved.filter((panel): panel is number => panel !== null)]\n const home = this.commonAncestor(members)\n if (home === null) continue\n const list = at.get(home) ?? []\n list.push({ strip: strip.id, tabs, panels: resolved })\n at.set(home, list)\n }\n this.tabsMemo = at\n return at\n }\n\n private tabsMemo: Map<number, TabStrip[]> | null = null\n\n private commonAncestor(elements: number[]): number | null {\n const chains = elements.map((element) => {\n const chain: number[] = []\n for (let at = element; at >= 0; at = this.elements[at]?.parent ?? -1) chain.unshift(at)\n return chain\n })\n let common: number | null = null\n for (let depth = 0; ; depth += 1) {\n const step = chains[0]?.[depth]\n if (step === undefined || !chains.every((chain) => chain[depth] === step)) break\n common = step\n }\n // A strip with no panels is read where it sits: its parent holds it.\n if (common !== null && elements.length === 1) common = this.elements[common]?.parent ?? null\n return common !== null && common >= 0 ? common : null\n }\n\n private readTabs(element: number, strips: TabStrip[], range: readonly [number, number]): SiteImportLayoutNode[] {\n const inside = new Set<number>()\n for (const strip of strips) for (const member of [strip.strip, ...strip.panels]) if (member !== null) for (const leaf of this.leaves(member)) inside.add(leaf.order)\n const outside = (nodes: SiteImportLayoutNode[]) =>\n siteImportFilterNodes(nodes, (ref) => {\n const leaf = this.leaves(element).find((entry) => entry.kind === 'line' && entry.ref === ref)\n return !leaf || !inside.has(leaf.order)\n })\n const out: SiteImportLayoutNode[] = []\n const drawn = new Set<TabStrip>()\n for (const part of this.parts(element, range)) {\n if (!isElementPart(part)) {\n if (!inside.has(part.leaf.order)) out.push(this.leafNode(part.leaf))\n continue\n }\n const strip = strips.find((entry) => this.contains(part.element, entry.strip))\n const panel = strips.some((entry) => entry.panels.some((member) => member !== null && this.contains(part.element, member)))\n if (strip || panel) {\n if (part.element !== strip?.strip && !strips.some((entry) => entry.panels.includes(part.element))) out.push(...outside(this.read(part.element, range)))\n if (strip && !drawn.has(strip)) {\n drawn.add(strip)\n out.push(this.tabsNode(strip, range))\n }\n continue\n }\n out.push(...this.read(part.element, range))\n }\n return out\n }\n\n private tabsNode(strip: TabStrip, range: readonly [number, number]): SiteImportLayoutTabs {\n return {\n kind: 'tabs',\n tabs: strip.tabs.map((tab, index) => {\n const node = this.elements[tab] as SiteImportElement\n const panel = strip.panels[index] ?? null\n const selected = /\\b(?:Mui-selected|active|is-active|selected)\\b/.test(node.attrs.class ?? '')\n return {\n label: this.refsIn(tab, range)[0] ?? null,\n ...(selected ? { selected: true as const } : {}),\n panel: panel !== null ? this.read(panel, range) : [],\n }\n }),\n }\n }\n\n private findRole(element: number, role: string, depth: number): number | null {\n const node = this.elements[element]\n if (!node) return null\n if (node.attrs.role === role) return element\n if (depth <= 0) return null\n for (const child of node.children) {\n const found = this.findRole(child, role, depth - 1)\n if (found !== null) return found\n }\n return null\n }\n\n private findAll(element: number, test: (node: SiteImportElement) => boolean): number[] {\n const out: number[] = []\n const visit = (at: number) => {\n const node = this.elements[at]\n if (!node) return\n if (test(node)) {\n out.push(at)\n return\n }\n for (const child of node.children) visit(child)\n }\n for (const child of this.elements[element]?.children ?? []) visit(child)\n return out\n }\n\n private contains(ancestor: number, element: number): boolean {\n for (let at = element; at >= 0; at = this.elements[at]?.parent ?? -1) if (at === ancestor) return true\n return false\n }\n\n /*---------------- the hero ----------------*/\n\n private markHero(sections: SiteImportLayoutSection[]): void {\n const mainBlocks = this.mainBlocks()\n const hero = sections.find((section) => section.lines.some((ref) => mainBlocks[ref]?.kind === 'heading' && (mainBlocks[ref] as { level: number }).level === 1))\n if (!hero) return\n let picture: SiteImportHeroPicture | null = null\n if (hero.backdrop?.kind === 'picture') picture = 'behind'\n else {\n const h1 = hero.lines.find((ref) => mainBlocks[ref]?.kind === 'heading' && (mainBlocks[ref] as { level: number }).level === 1) as number\n const image = hero.lines.find((ref) => mainBlocks[ref]?.kind === 'image')\n if (image !== undefined) {\n const beside = (nodes: SiteImportLayoutNode[]): boolean =>\n nodes.some((node) => {\n if (node.kind !== 'row') return false\n const cellOf = (ref: number) => node.cells.findIndex((cell) => this.linesOf(cell.nodes).includes(ref))\n const a = cellOf(h1)\n const b = cellOf(image)\n if (a >= 0 && b >= 0 && a !== b) return true\n return node.cells.some((cell) => beside(cell.nodes))\n })\n if (beside(hero.nodes)) picture = 'beside'\n else if (this.pictureBehind(image)) picture = 'behind'\n else picture = hero.lines.indexOf(image) > hero.lines.indexOf(h1) ? 'below' : 'above'\n }\n }\n hero.hero = { picture }\n }\n\n /** A picture laid over its section's whole area, behind the words. */\n private pictureBehind(ref: number): boolean {\n const element = this.elements.find((node) => node.blocks.some((index) => this.mainIndex[index] === ref))\n for (let at = element?.id ?? -1, depth = 0; at >= 0 && depth < 3; at = this.elements[at]?.parent ?? -1, depth += 1) {\n const position = this.style(at).get('position')\n if (position === 'absolute' || position === 'fixed') return true\n }\n return false\n }\n\n linesOf(nodes: readonly SiteImportLayoutNode[]): SiteImportLineRef[] {\n return siteImportLayoutLines(nodes)\n }\n}\n\n/** Takes a line out of one of an item's lists; a list left empty goes, never left undefined (Firestore holds no undefined). */\nfunction dropLine(item: SiteImportLayoutItem, key: 'text' | 'list' | 'link', ref: SiteImportLineRef): void {\n const list = item[key]?.filter((entry) => entry !== ref)\n if (list?.length) item[key] = list\n else delete item[key]\n}\n\n/** Rows of cells of lines, as objects: a Firestore document holds no array inside an array. */\nfunction tableRows(rows: SiteImportLineRef[][][]): SiteImportLayoutTable['rows'] {\n return rows.map((row) => ({ cells: row.map((lines) => ({ lines })) }))\n}\n\ninterface TabStrip {\n strip: number\n tabs: number[]\n /** Each tab's panel, `null` for one the source did not draw. */\n panels: Array<number | null>\n}\n\ninterface GroupRun {\n start: number\n end: number\n}\n\n/** A section's stretch of the page: the element it is (`null` when it is read through its container), the element its name and band come from, and its leaves' range. */\ninterface Cut {\n element: number | null\n anchor: number | null\n range: [number, number]\n from: SiteImportLayoutSection['from']\n}\n\nfunction mode(values: readonly number[]): number {\n const counts = new Map<number, number>()\n for (const value of values) counts.set(value, (counts.get(value) ?? 0) + 1)\n return [...counts.entries()].sort((a, b) => b[1] - a[1] || b[0] - a[0])[0]?.[0] ?? 0\n}\n\n/** A solid background's band: near white is the page, light or tinted is soft, a strong color is the brand's, dark is dark. */\nexport function siteImportBandOfColor(color: { r: number; g: number; b: number; a: number }): SiteImportBand {\n const light = siteImportLuminance(color)\n const saturation = siteImportSaturation(color)\n if (saturation > 0.45 && light >= 0.06 && light < 0.75) return 'brand'\n if (light < 0.3) return 'dark'\n if (light >= 0.95) return 'plain'\n return 'soft'\n}\n\n/**\n * How the source draws an `<a>` or `<button>` as a button, or `null` when it\n * draws it as a link: a framework's button class, a role, or a fill or a\n * border with room around the words.\n */\nexport function siteImportButtonStyleOf(element: SiteImportElement, style: SiteImportComputedStyle, under: string | null): SiteImportButtonStyle | null {\n const classes = element.attrs.class ?? ''\n const fill = siteImportBackgroundOf(style)\n const filled = (!!fill.color && fill.color.a >= 0.5 && siteImportHex(fill.color) !== under) || !!fill.gradient\n const bordered = siteImportHasBorder(style)\n const padded = ['padding', 'padding-left', 'padding-top'].some((property) => {\n const value = style.get(property)\n return !!value && /[1-9]/.test(value)\n })\n const classed = BUTTON_CLASS.test(classes) || element.attrs.role === 'button'\n if (!classed && !((filled || bordered) && padded)) return null\n if (TEXT_BUTTON_CLASS.test(classes)) return 'quiet'\n if (filled || FILLED_CLASS.test(classes)) return 'primary'\n if (bordered || OUTLINED_CLASS.test(classes)) return 'secondary'\n return 'quiet'\n}\n\n/*------------------------------------------\n * The look\n *-----------------------------------------*/\n\n/** Families a Google Fonts stylesheet address loads: `family=Roboto+Flex:wght@400` is \"Roboto Flex\". */\nexport function siteImportGoogleFamilies(urls: readonly string[]): string[] {\n const families: string[] = []\n for (const raw of urls) {\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n continue\n }\n if (url.hostname !== 'fonts.googleapis.com') continue\n for (const value of url.searchParams.getAll('family')) {\n for (const entry of value.split('|')) {\n const name = entry.split(':')[0]?.replace(/\\+/g, ' ').trim()\n if (name && !families.includes(name)) families.push(name)\n }\n }\n }\n return families\n}\n\n/** The look facts of a page read with its structure, through its linked stylesheets' text. */\nexport function siteImportLookOf(page: Pick<SiteImportLayoutSource, 'structure'>, stylesheets: readonly string[] = []): SiteImportLookFacts | null {\n if (!page.structure) return null\n const css = siteImportCssOf([...page.structure.styles, ...stylesheets])\n return siteImportLookFacts(page.structure, siteImportStylesOf(page.structure, css), css.fontFaces)\n}\n\n/**\n * The look facts of a page's markup and the stylesheets it links (AGL-4106),\n * for the look pass, which reads the home page and its stylesheets itself.\n */\nexport function siteImportLookOfHtml(html: string, pageUrl: string, stylesheets: readonly string[] = []): SiteImportLookFacts | null {\n let origin = ''\n try {\n origin = new URL(pageUrl).origin\n } catch {\n return null\n }\n const extract = extractSiteImportPage(html, pageUrl, (url) => url.origin === origin, { structure: true })\n return extract.structure ? siteImportLookOf({ structure: extract.structure }, stylesheets) : null\n}\n\n/**\n * What the source's look is made of (AGL-4106): its fonts, its page's\n * background and text, its filled buttons' fill, text and corners, its links'\n * color and its header's background.\n */\nexport function siteImportLookFacts(structure: SiteImportStructure, styles: SiteImportStyles, fontFaces: readonly string[] = []): SiteImportLookFacts {\n const { elements } = structure\n const body = structure.body >= 0 ? structure.body : -2\n const bodyStyle = styles.of(body)\n const hexOf = (value: string | undefined) => {\n const color = siteImportColorOf(value)\n return color && color.a >= 0.5 ? siteImportHex(color) : null\n }\n const imports = structure.styles.flatMap((css) => [...css.matchAll(/@import\\s+(?:url\\()?\\s*[\"']?(https:\\/\\/fonts\\.googleapis\\.com\\/[^\"')\\s;]+)/gi)].map((match) => match[1] as string))\n const google = siteImportGoogleFamilies([...structure.stylesheets, ...imports])\n const bodyFamily = siteImportFontFamilies(bodyStyle.get('font-family'))[0] ?? siteImportFontFamilies(styles.of(-2).get('font-family'))[0] ?? null\n const heading = elements.find((element) => /^h[12]$/.test(element.tag) && element.region === 'main') ?? elements.find((element) => /^h[1-3]$/.test(element.tag))\n const headingFamily = heading ? (siteImportFontFamilies(styles.of(heading.id).get('font-family'))[0] ?? bodyFamily) : bodyFamily\n const known = (family: string | null) => (family && (google.includes(family) || fontFaces.includes(family) || !/^(?:arial|helvetica|helvetica neue|segoe ui|roboto fallback|times new roman|georgia|verdana)$/i.test(family)) ? family : null)\n const background = siteImportBackgroundOf(bodyStyle).color ?? siteImportBackgroundOf(styles.of(-2)).color\n // Buttons, the page's own and its header's: the most used fill.\n const fills = new Map<string, { count: number; text: string | null; radius: number[] }>()\n const linkColors = new Map<string, number>()\n for (const element of elements) {\n if (element.tag !== 'a' && element.tag !== 'button') continue\n if (element.region === 'footer') continue\n const style = styles.of(element.id)\n let under: string | null = null\n for (let at = element.parent; at >= 0; at = elements[at]?.parent ?? -1) {\n const color = siteImportBackgroundOf(styles.of(at)).color\n if (color && color.a >= 0.5) {\n under = siteImportHex(color)\n break\n }\n }\n const kind = siteImportButtonStyleOf(element, style, under ?? (background ? siteImportHex(background) : '#ffffff'))\n if (kind === 'primary') {\n const fill = siteImportBackgroundOf(style).color\n if (!fill) continue\n const hex = siteImportHex(fill)\n const entry = fills.get(hex) ?? { count: 0, text: hexOf(style.get('color')), radius: [] }\n entry.count += 1\n const radius = siteImportRadiusPx(style)\n if (radius !== null) entry.radius.push(radius)\n fills.set(hex, entry)\n } else if (!kind && element.tag === 'a' && element.region === 'main') {\n const color = hexOf(style.get('color'))\n if (color) linkColors.set(color, (linkColors.get(color) ?? 0) + 1)\n }\n }\n const topFill = [...fills.entries()].sort((a, b) => b[1].count - a[1].count)[0]\n const radii = topFill?.[1].radius ?? []\n const text = hexOf(bodyStyle.get('color'))\n // The links' color: the most used one that is not the body text's.\n const link = [...linkColors.entries()].filter(([hex]) => hex !== text).sort((a, b) => b[1] - a[1])[0]?.[0] ?? null\n const header = elements.find((element) => element.tag === 'header' && element.region === 'header') ?? elements.find((element) => element.attrs.role === 'banner')\n let headerFill: string | null = null\n for (let at = header?.id ?? -1, depth = 0; at >= 0 && depth < 3; depth += 1) {\n const color = siteImportBackgroundOf(styles.of(at)).color\n if (color && color.a >= 0.5) {\n headerFill = siteImportHex(color)\n break\n }\n const children: number[] = elements[at]?.children ?? []\n at = children.length === 1 ? (children[0] as number) : -1\n }\n return {\n fonts: { body: known(bodyFamily), headings: known(headingFamily), google },\n background: background ? siteImportHex(background) : null,\n text,\n buttonFill: topFill?.[0] ?? null,\n buttonText: topFill?.[1].text ?? null,\n buttonRadius: radii.length ? (radii.sort((a, b) => a - b)[Math.floor(radii.length / 2)] as number) : null,\n link,\n header: headerFill,\n }\n}\n\n/** What a layout holds, counted (AGL-4106): the reader's side of a fidelity score. */\nexport interface SiteImportLayoutCounts {\n sections: number\n bands: SiteImportBand[]\n /** Rows of two or more columns. */\n rows: number\n /** Groups by kind, and the items in them. */\n groups: Partial<Record<SiteImportGroupKind, number>>\n items: Partial<Record<SiteImportGroupKind, number>>\n tables: number\n tabs: number\n pictures: number\n /** Icons drawn: a group item's lead icon, each bullet's mark, and icons standing alone. */\n icons: number\n /** Lines the source draws as buttons. */\n buttons: number\n forms: number\n /** Lines placed, each once. */\n lines: number\n}\n\n/** Counts a layout's sections, bands, rows, groups, pictures, icons and buttons. */\nexport function siteImportLayoutCounts(layout: SiteImportLayout, blocks: readonly SiteImportBlock[] = []): SiteImportLayoutCounts {\n const counts: SiteImportLayoutCounts = {\n sections: layout.sections.length,\n bands: layout.sections.map((section) => section.band),\n rows: 0,\n groups: {},\n items: {},\n tables: 0,\n tabs: 0,\n pictures: 0,\n icons: 0,\n buttons: 0,\n forms: 0,\n lines: 0,\n }\n const main = blocks.filter((block) => block.region === 'main')\n const isPicture = (ref: number) => main[ref]?.kind === 'image'\n const visit = (nodes: readonly SiteImportLayoutNode[]) => {\n for (const node of nodes) {\n switch (node.kind) {\n case 'line':\n if (node.button) counts.buttons += 1\n break\n case 'picture':\n counts.pictures += 1\n break\n case 'icon':\n counts.icons += 1\n break\n case 'form':\n counts.forms += 1\n break\n case 'row':\n if (node.cells.length >= 2) counts.rows += 1\n for (const cell of node.cells) visit(cell.nodes)\n break\n case 'group':\n counts.groups[node.group] = (counts.groups[node.group] ?? 0) + 1\n counts.items[node.group] = (counts.items[node.group] ?? 0) + node.items.length\n for (const item of node.items) {\n if (item.icon !== undefined) counts.icons += 1\n if (item.listIcon !== undefined) counts.icons += item.list?.length ?? 0\n if (item.image !== undefined || (main.length && item.lines.some(isPicture))) counts.pictures += 1\n }\n break\n case 'table':\n counts.tables += 1\n break\n case 'tabs':\n counts.tabs += 1\n for (const tab of node.tabs) visit(tab.panel)\n break\n default:\n break\n }\n }\n }\n for (const section of layout.sections) {\n visit(section.nodes)\n counts.lines += section.lines.length\n }\n return counts\n}\n"],"names":["AI_SITE_IMPORT_MAX_SECTIONS","siteImportFilterNodes","siteImportLayoutLines","siteImportBackgroundOf","siteImportColorOf","siteImportCssOf","siteImportFontFamilies","siteImportFontSizePx","siteImportGridColumns","siteImportHasBorder","siteImportHasShadow","siteImportHex","siteImportLuminance","siteImportRadiusPx","siteImportSaturation","siteImportStylesOf","siteImportTwelfths","extractSiteImportPage","siteImportLabel","isElementPart","part","isLine","block","kind","url","inline","text","trim","BUTTON_CLASS","TEXT_BUTTON_CLASS","OUTLINED_CLASS","FILLED_CLASS","LANDMARK_TAGS","Set","SECTION_CLASS","MUI_GRID_SIZE","BOOTSTRAP_COL","BREAKPOINT_RANK","xs","sm","md","lg","xl","PRICE","PERIOD","STEP_NUMBER","FIGURE","siteImportLayout","page","stylesheets","structure","blocks","css","styles","reader","LayoutReader","sections","length","v","icons","map","icon","look","siteImportLookFacts","fontFaces","leaves","element","held","leafMemo","get","node","elements","list","own","child","children","push","sort","a","b","order","set","inRange","leaf","range","parts","first","find","unwrap","at","guard","style","of","root","main","body","all","Number","POSITIVE_INFINITY","rootLeaves","filter","parent","flatMap","id","container","elementParts","landmarks","isLandmark","cuts","Math","max","ceil","cutsAt","holdsHeading","lineCount","containersHoldSections","headingCuts","cut","slice","section","markHero","capSections","kept","last","extra","nodes","lines","has","tag","attrs","role","label","test","class","some","level","containers","starts","from","pendingFrom","lo","min","anchor","index","forEach","before","previous","undefined","looksLikeEyebrow","unshift","start","scope","read","readLeaves","linesOf","name","nameOf","band","bandOf","background","backdrop","align","alignOf","leafNode","mainBlocks","heading","ref","line","mainBlocksMemo","region","inherited","chain","depth","found","backgroundBand","hex","color","image","gradient","stops","stop","light","reduce","sum","siteImportBandOfColor","theme","entry","table","only","strips","tabStrips","readTabs","gridTable","runs","groupRuns","isRow","rowWorthy","row","out","run","group","end","form","wrap","wrapperOf","href","anchorHref","button","buttonStyle","roleOf","tags","includes","anchors","siteImportButtonStyleOf","host","backgroundUnder","size","bodySize","words","match","letters","replace","caps","toUpperCase","toLowerCase","classes","display","columns","substantial","cells","weights","weightsOf","groups","cell","every","boxed","items","cols","count","template","sized","cellSize","best","matchAll","rank","property","percent","exec","grow","signature","join","kinds","isChip","keys","couldBeItem","loose","key","headings","fill","item","chips","groupKind","columnsOf","lead","title","lineText","figure","next","dropLine","question","indexOf","link","price","alt","firstLine","leadIcon","listed","add","inner","members","listRuns","member","marks","mark","listIcon","rest","trailing","split","shift","titleBlock","to","taken","oneLine","share","blockKinds","visual","titled","sizes","round","width","rows","visit","refsIn","header","tableRows","widths","common","mode","longest","flat","tabsMemo","Map","panels","strip","tabs","findAll","tab","panel","candidate","panelAttrs","controls","labelledby","resolved","home","commonAncestor","chains","step","inside","outside","drawn","contains","tabsNode","selected","findRole","ancestor","hero","picture","h1","beside","cellOf","findIndex","pictureBehind","mainIndex","position","usedPanels","blockElement","nav","values","counts","value","entries","saturation","under","filled","bordered","padded","classed","siteImportGoogleFamilies","urls","families","raw","URL","hostname","searchParams","getAll","siteImportLookOf","siteImportLookOfHtml","html","pageUrl","origin","extract","bodyStyle","hexOf","imports","google","bodyFamily","headingFamily","known","family","fills","linkColors","radius","topFill","radii","headerFill","fonts","buttonFill","buttonText","buttonRadius","floor","siteImportLayoutCounts","layout","bands","tables","pictures","buttons","forms","isPicture"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { type SiteImportFooter, type SiteImportNavTree } from '../model/ai-site-import';
18
+ import type { SiteImportExtract, SiteImportStructure } from './site-import-html';
19
+ /** A page as the menu reader takes it: its structure, its blocks and its structured data. */
20
+ export type SiteImportFrameSource = Pick<SiteImportExtract, 'blocks' | 'organization'> & {
21
+ structure: SiteImportStructure;
22
+ };
23
+ /** The most top-level items, entries per menu and footer links kept. */
24
+ export declare const SITE_IMPORT_NAV_LIMITS: {
25
+ readonly items: 12;
26
+ readonly entries: 40;
27
+ readonly footerLinks: 160;
28
+ };
29
+ /** The network a profile address is on, or `null` for an address that is no profile. */
30
+ export declare function siteImportSocialNetwork(href: string): string | null;
31
+ /**
32
+ * The source's header menu (AGL-4106), as its home page builds it; `null`
33
+ * for a page with no header menu the reader can find.
34
+ */
35
+ export declare function siteImportNavTree(page: SiteImportFrameSource, stylesheets?: readonly string[]): SiteImportNavTree | null;
36
+ /**
37
+ * The source's footer (AGL-4106), as its home page builds it; `null` for a
38
+ * page with no footer.
39
+ */
40
+ export declare function siteImportFooterColumns(page: SiteImportFrameSource, stylesheets?: readonly string[]): SiteImportFooter | null;