@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.
- package/package.json +17 -17
- package/src/lib/components/ai-site-import-job.component.js +5 -4
- package/src/lib/components/ai-site-import-job.component.js.map +1 -1
- package/src/lib/components/ai-site-import-start.component.js +3 -3
- package/src/lib/components/ai-site-import-start.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
- package/src/lib/components/ai-site-start-card.component.js +129 -29
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-site-start-steps.component.d.ts +15 -3
- package/src/lib/components/ai-site-start-steps.component.js +42 -25
- package/src/lib/components/ai-site-start-steps.component.js.map +1 -1
- package/src/lib/components/ai-site-style-previews.d.ts +17 -0
- package/src/lib/components/ai-site-style-previews.js +26 -95
- package/src/lib/components/ai-site-style-previews.js.map +1 -1
- package/src/lib/declarations.server.js +22 -0
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/jobs/ai-job-import-step.d.ts +21 -2
- package/src/lib/jobs/ai-job-import-step.js +179 -49
- package/src/lib/jobs/ai-job-import-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +27 -3
- package/src/lib/jobs/ai-job-layout-language.js +156 -113
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +56 -17
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +25 -15
- package/src/lib/jobs/ai-job-page-language.js +120 -66
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +27 -7
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +12 -4
- package/src/lib/jobs/ai-job-site-datasets.js +36 -16
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-jobs.js +6 -2
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +50 -1
- package/src/lib/jobs/ai-layout-stock-photos.js +586 -35
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-import-compile.d.ts +147 -0
- package/src/lib/jobs/ai-site-import-compile.js +1143 -0
- package/src/lib/jobs/ai-site-import-compile.js.map +1 -0
- package/src/lib/jobs/ai-site-import-document.d.ts +9 -36
- package/src/lib/jobs/ai-site-import-document.js +23 -489
- package/src/lib/jobs/ai-site-import-document.js.map +1 -1
- package/src/lib/jobs/ai-site-import-look.d.ts +54 -7
- package/src/lib/jobs/ai-site-import-look.js +163 -52
- package/src/lib/jobs/ai-site-import-look.js.map +1 -1
- package/src/lib/jobs/ai-site-import-publish.d.ts +7 -1
- package/src/lib/jobs/ai-site-import-publish.js +19 -5
- package/src/lib/jobs/ai-site-import-publish.js.map +1 -1
- package/src/lib/jobs/ai-site-late-photos.js +4 -2
- package/src/lib/jobs/ai-site-late-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-publish.d.ts +10 -1
- package/src/lib/jobs/ai-site-publish.js +8 -3
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.d.ts +23 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js +677 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl4092-1029-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.d.ts +26 -0
- package/src/lib/layout-language/ai-layout-compiler.js +677 -33
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame-hollows.js +5 -1
- package/src/lib/layout-language/ai-layout-frame-hollows.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame-source.d.ts +196 -0
- package/src/lib/layout-language/ai-layout-frame-source.js +726 -0
- package/src/lib/layout-language/ai-layout-frame-source.js.map +1 -0
- package/src/lib/layout-language/ai-layout-frame.d.ts +22 -0
- package/src/lib/layout-language/ai-layout-frame.js +121 -29
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +103 -37
- package/src/lib/layout-language/ai-layout-language.js +85 -120
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/model/ai-credit-estimate.d.ts +11 -7
- package/src/lib/model/ai-credit-estimate.js +11 -7
- package/src/lib/model/ai-credit-estimate.js.map +1 -1
- package/src/lib/model/ai-site-import.d.ts +307 -13
- package/src/lib/model/ai-site-import.js +227 -19
- package/src/lib/model/ai-site-import.js.map +1 -1
- package/src/lib/model/ai-site-look.d.ts +65 -1
- package/src/lib/model/ai-site-look.js +141 -23
- package/src/lib/model/ai-site-look.js.map +1 -1
- package/src/lib/model/ai-site-photos.d.ts +2 -0
- package/src/lib/model/ai-site-photos.js.map +1 -1
- package/src/lib/model/ai-site-start-steps.d.ts +4 -3
- package/src/lib/model/ai-site-start-steps.js +11 -3
- package/src/lib/model/ai-site-start-steps.js.map +1 -1
- package/src/lib/model/ai-site-start.d.ts +23 -2
- package/src/lib/model/ai-site-start.js +25 -3
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/providers/routing.d.ts +11 -0
- package/src/lib/providers/routing.js +23 -0
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +4 -2
- package/src/lib/runtime/ai-doctrine-validators.js +7 -2
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-icon-library.d.ts +4 -0
- package/src/lib/runtime/ai-icon-library.js +4 -0
- package/src/lib/runtime/ai-icon-library.js.map +1 -1
- package/src/lib/runtime/ai-node-tree.js +5 -1
- package/src/lib/runtime/ai-node-tree.js.map +1 -1
- package/src/lib/runtime/ai-palette.d.ts +2 -0
- package/src/lib/runtime/ai-palette.generated.js +19 -3
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/ai-palette.js +2 -1
- package/src/lib/runtime/ai-palette.js.map +1 -1
- package/src/lib/site-import/fixtures/site-layout-recordings.d.ts +50 -0
- package/src/lib/site-import/fixtures/site-layout-recordings.js +86 -0
- package/src/lib/site-import/fixtures/site-layout-recordings.js.map +1 -0
- package/src/lib/site-import/site-import-crawl.d.ts +18 -1
- package/src/lib/site-import/site-import-crawl.js +70 -10
- package/src/lib/site-import/site-import-crawl.js.map +1 -1
- package/src/lib/site-import/site-import-css.d.ts +110 -0
- package/src/lib/site-import/site-import-css.js +826 -0
- package/src/lib/site-import/site-import-css.js.map +1 -0
- package/src/lib/site-import/site-import-html.d.ts +116 -1
- package/src/lib/site-import/site-import-html.js +538 -46
- package/src/lib/site-import/site-import-html.js.map +1 -1
- package/src/lib/site-import/site-import-layout.d.ts +79 -0
- package/src/lib/site-import/site-import-layout.js +1608 -0
- package/src/lib/site-import/site-import-layout.js.map +1 -0
- package/src/lib/site-import/site-import-nav.d.ts +40 -0
- package/src/lib/site-import/site-import-nav.js +437 -0
- package/src/lib/site-import/site-import-nav.js.map +1 -0
- package/src/lib/site-import/site-import-page.d.ts +8 -1
- package/src/lib/site-import/site-import-page.js +24 -2
- package/src/lib/site-import/site-import-page.js.map +1 -1
- package/src/lib/assets/site-styles/beauty.webp +0 -0
- package/src/lib/assets/site-styles/blog.webp +0 -0
- package/src/lib/assets/site-styles/business.webp +0 -0
- package/src/lib/assets/site-styles/coming-soon.webp +0 -0
- package/src/lib/assets/site-styles/education.webp +0 -0
- package/src/lib/assets/site-styles/events.webp +0 -0
- package/src/lib/assets/site-styles/fitness.webp +0 -0
- package/src/lib/assets/site-styles/landing.webp +0 -0
- package/src/lib/assets/site-styles/music.webp +0 -0
- package/src/lib/assets/site-styles/nonprofit.webp +0 -0
- package/src/lib/assets/site-styles/personal.webp +0 -0
- package/src/lib/assets/site-styles/photography.webp +0 -0
- package/src/lib/assets/site-styles/portfolio.webp +0 -0
- package/src/lib/assets/site-styles/professional.webp +0 -0
- package/src/lib/assets/site-styles/realestate.webp +0 -0
- package/src/lib/assets/site-styles/restaurant.webp +0 -0
- package/src/lib/assets/site-styles/store.webp +0 -0
- package/src/lib/assets/site-styles/studio.webp +0 -0
- package/src/lib/assets/site-styles/trades.webp +0 -0
- package/src/lib/assets/site-styles/wellness.webp +0 -0
- package/src/lib/assets/site-styles/yoga.webp +0 -0
- package/src/lib/site-import/site-import-review.d.ts +0 -40
- package/src/lib/site-import/site-import-review.js +0 -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-css.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 * HOW A PAGE IS STYLED, AS A WIDE SCREEN SHOWS IT (AGL-4106).\n *\n * Bring my site reads a page's layout, not only its lines, and most of a\n * layout lives in the stylesheet: which band is grey and which is dark, which\n * container lays its children out in three columns, which link is drawn as a\n * filled button. This is a small cascade, enough for that and no more:\n *\n * - **The sheets.** The page's own `<style>` sheets and the ones it links,\n * read in order. `@media` rules apply as a 1280-pixel screen in light mode\n * sees them, so a grid's desktop columns win over its phone ones;\n * `@layer`, `@supports` and `@container` are read through; keyframes, font\n * faces (their families noted) and page rules are skipped.\n * - **Selectors.** Tags, classes (escaped ones too, as utility frameworks\n * write them), ids and attributes, joined by any combinator. A rule that\n * only applies on hover, focus or to a generated part (`::before`) is a\n * state the page is not in and is not read.\n * - **The cascade.** Specificity, then order, `!important` over both, and the\n * element's own `style` over every rule; color, font and alignment inherit,\n * and so do custom properties, which `var()` reads.\n *\n * Only the properties the layout reader asks about are kept. Nothing here\n * runs anything a page wrote: values are text compared to text.\n *=========================================*/\n\nimport type { SiteImportElement, SiteImportStructure } from './site-import-html'\n\n/** The width a page is read at: a laptop's, where a desktop layout shows. */\nexport const SITE_IMPORT_CSS_VIEWPORT = { width: 1280, height: 800 } as const\n\n/** The properties the layout reader reads; every other declaration is dropped as the sheet is parsed. */\nconst KEPT_PROPERTIES = new Set([\n 'background',\n 'background-color',\n 'background-image',\n 'color',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'border-top',\n 'border-right',\n 'border-bottom',\n 'border-left',\n 'border-top-width',\n 'border-bottom-width',\n 'border-left-width',\n 'border-right-width',\n 'border-top-style',\n 'border-bottom-style',\n 'border-top-color',\n 'border-bottom-color',\n 'border-radius',\n 'box-shadow',\n 'display',\n 'grid-template-columns',\n 'grid-column',\n 'flex',\n 'flex-direction',\n 'flex-wrap',\n 'flex-grow',\n 'flex-basis',\n 'width',\n 'max-width',\n 'font-family',\n 'font-size',\n 'font-weight',\n 'text-transform',\n 'letter-spacing',\n 'text-align',\n 'position',\n 'visibility',\n 'padding',\n 'padding-top',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'object-fit',\n 'justify-content',\n 'align-items',\n])\n\n/** What an element takes from its parent when it says nothing itself. */\nconst INHERITED = new Set(['color', 'font-family', 'font-size', 'font-weight', 'text-transform', 'letter-spacing', 'text-align', 'visibility'])\n\ninterface Compound {\n tag: string | null\n id: string | null\n classes: string[]\n attrs: Array<{ name: string; op: string | null; value: string }>\n /** `:root`: only the document's root element. */\n root: boolean\n}\n\ninterface ComplexSelector {\n /** Rightmost last. */\n compounds: Compound[]\n /** `combinators[i]` joins `compounds[i]` and `compounds[i + 1]`: a space, a child, an adjacent or a sibling combinator. */\n combinators: string[]\n specificity: number\n}\n\ninterface CssRule {\n selector: ComplexSelector\n order: number\n decls: Array<[property: string, value: string, important: boolean]>\n}\n\n/** The page's sheets, parsed for one width. */\nexport interface SiteImportCss {\n rules: CssRule[]\n /** Rules by their rightmost compound's id (`#x`), first class (`.x`), tag, or `*`. */\n index: Map<string, CssRule[]>\n /** Families its `@font-face` rules name, in order. */\n fontFaces: string[]\n}\n\n/*------------------------------------------\n * Parsing\n *-----------------------------------------*/\n\nfunction unescapeIdent(text: string): string {\n return text.replace(/\\\\([0-9a-fA-F]{1,6}\\s?|.)/g, (_, escaped: string) => {\n if (/^[0-9a-fA-F]{1,6}\\s?$/.test(escaped)) {\n const code = parseInt(escaped.trim(), 16)\n return code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : ''\n }\n return escaped\n })\n}\n\nconst IDENT = String.raw`(?:\\\\[0-9a-fA-F]{1,6}\\s?|\\\\.|[\\w-]|[^\\x00-\\x7f])+`\nconst SIMPLE = new RegExp(\n String.raw`^(?:(\\*|${IDENT})|#(${IDENT})|\\.(${IDENT})|\\[\\s*([\\w-]+)\\s*(?:([~|^$*]?=)\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\]\\s]+))\\s*(?:[is]\\s*)?)?\\]|(::?)(${IDENT})(\\((?:[^()]|\\([^()]*\\))*\\))?)`,\n)\n\n/** The pseudo-classes a page at rest matches as if they were not there. */\nconst AT_REST = new Set(['link', 'any-link'])\n\n/** One compound selector, or `null` when it depends on a state or a generated part. */\nfunction parseCompound(text: string): Compound | null {\n const compound: Compound = { tag: null, id: null, classes: [], attrs: [], root: false }\n let rest = text\n while (rest) {\n const match = SIMPLE.exec(rest)\n if (!match || !match[0]) return null\n rest = rest.slice(match[0].length)\n if (match[1]) compound.tag = match[1] === '*' ? null : unescapeIdent(match[1]).toLowerCase()\n else if (match[2]) compound.id = unescapeIdent(match[2])\n else if (match[3]) compound.classes.push(unescapeIdent(match[3]))\n else if (match[4]) compound.attrs.push({ name: match[4].toLowerCase(), op: match[5] ?? null, value: match[6] ?? match[7] ?? match[8] ?? '' })\n else if (match[9]) {\n const name = unescapeIdent(match[10] ?? '').toLowerCase()\n if (match[9] === '::') return null\n if (name === 'root') compound.root = true\n else if (!AT_REST.has(name)) return null\n }\n }\n return compound\n}\n\n/** A complex selector, or `null` when any part of it cannot be read at rest. */\nfunction parseSelector(text: string): ComplexSelector | null {\n const compounds: Compound[] = []\n const combinators: string[] = []\n const parts = text.trim().replace(/\\s*([>+~])\\s*/g, ' $1 ').split(/\\s+/)\n let pending: string | null = null\n for (const part of parts) {\n if (!part) continue\n if (part === '>' || part === '+' || part === '~') {\n pending = part\n continue\n }\n const compound = parseCompound(part)\n if (!compound) return null\n if (compounds.length) combinators.push(pending ?? ' ')\n pending = null\n compounds.push(compound)\n }\n if (!compounds.length || pending) return null\n let ids = 0\n let classes = 0\n let tags = 0\n for (const compound of compounds) {\n if (compound.id) ids += 1\n classes += compound.classes.length + compound.attrs.length + (compound.root ? 1 : 0)\n if (compound.tag) tags += 1\n }\n return { compounds, combinators, specificity: ids * 1_000_000 + classes * 1_000 + tags }\n}\n\n/** Splits at top-level commas: none inside brackets or parentheses. */\nfunction splitList(text: string): string[] {\n const out: string[] = []\n let depth = 0\n let start = 0\n for (let at = 0; at < text.length; at += 1) {\n const char = text[at]\n if (char === '(' || char === '[') depth += 1\n else if (char === ')' || char === ']') depth = Math.max(0, depth - 1)\n else if (char === ',' && depth === 0) {\n out.push(text.slice(start, at))\n start = at + 1\n }\n }\n out.push(text.slice(start))\n return out.map((part) => part.trim()).filter(Boolean)\n}\n\n/** A length in px at the read width; `em`/`rem` at 16. */\nfunction lengthPx(value: string): number | null {\n const match = /^(-?\\d*\\.?\\d+)\\s*(px|em|rem)?$/i.exec(value.trim())\n if (!match) return null\n const amount = Number(match[1])\n return match[2] && match[2].toLowerCase() !== 'px' ? amount * 16 : amount\n}\n\n/** Whether one media query holds for a light-mode screen of the read width. */\nfunction mediaQueryHolds(query: string): boolean {\n let text = query.trim().toLowerCase()\n let negate = false\n if (text.startsWith('not ')) {\n negate = true\n text = text.slice(4)\n }\n text = text.replace(/^only\\s+/, '')\n let holds = true\n for (const part of text.split(/\\s+and\\s+/)) {\n const term = part.trim()\n if (!term) continue\n if (!term.startsWith('(')) {\n if (!/^(?:all|screen)$/.test(term)) holds = false\n continue\n }\n const inner = term.replace(/^\\(|\\)$/g, '').trim()\n const feature = /^([\\w-]+)\\s*:\\s*(.+)$/.exec(inner)\n const { width, height } = SITE_IMPORT_CSS_VIEWPORT\n if (feature) {\n const [, name, value] = feature\n const px = lengthPx(value)\n if (name === 'min-width') holds &&= px !== null && width >= px\n else if (name === 'max-width') holds &&= px !== null && width <= px\n else if (name === 'min-height') holds &&= px !== null && height >= px\n else if (name === 'max-height') holds &&= px !== null && height <= px\n else if (name === 'prefers-color-scheme') holds &&= value.trim() === 'light'\n else if (name === 'prefers-reduced-motion') holds &&= value.trim() === 'no-preference'\n else if (name === 'orientation') holds &&= value.trim() === 'landscape'\n else if (name === 'hover' || name === 'any-hover') holds &&= value.trim() === 'hover'\n else if (name === 'pointer' || name === 'any-pointer') holds &&= value.trim() === 'fine'\n else if (name === 'prefers-contrast' || name === 'forced-colors') holds &&= /^(?:no-preference|none)$/.test(value.trim())\n continue\n }\n // Range syntax: (width >= 900px), (600px <= width < 1200px).\n const range = /^(?:(-?[\\d.]+\\w*)\\s*(<=|<|>=|>)\\s*)?(width|height)\\s*(?:(<=|<|>=|>)\\s*(-?[\\d.]+\\w*))?$/.exec(inner)\n if (range) {\n const size = range[3] === 'width' ? width : height\n const test = (a: number, op: string, b: number) => (op === '<' ? a < b : op === '<=' ? a <= b : op === '>' ? a > b : a >= b)\n if (range[1] && range[2]) {\n const px = lengthPx(range[1])\n holds &&= px !== null && test(px, range[2], size)\n }\n if (range[4] && range[5]) {\n const px = lengthPx(range[5])\n holds &&= px !== null && test(size, range[4], px)\n }\n }\n }\n return negate ? !holds : holds\n}\n\nfunction mediaHolds(prelude: string): boolean {\n const list = splitList(prelude.replace(/^@media\\s*/i, ''))\n return !list.length || list.some(mediaQueryHolds)\n}\n\nfunction declarationsOf(body: string): CssRule['decls'] {\n const decls: CssRule['decls'] = []\n // Values may hold semicolons only inside strings or url(), which the kept properties never need.\n for (const part of body.split(';')) {\n const colon = part.indexOf(':')\n if (colon <= 0) continue\n const written = part.slice(0, colon).trim()\n // A custom property's name is case-sensitive, as `var()` reads it.\n const property = written.startsWith('--') ? written : written.toLowerCase()\n if (!property.startsWith('--') && !KEPT_PROPERTIES.has(property)) continue\n let value = part.slice(colon + 1).trim()\n const important = /!\\s*important\\s*$/i.test(value)\n if (important) value = value.replace(/!\\s*important\\s*$/i, '').trim()\n if (value) decls.push([property, value.slice(0, 2_000), important])\n }\n return decls\n}\n\n/** The index key of a selector: its rightmost compound's id, first class, tag, else `*`. */\nfunction keyOf(selector: ComplexSelector): string {\n const last = selector.compounds[selector.compounds.length - 1] as Compound\n if (last.id) return `#${last.id}`\n if (last.classes.length) return `.${last.classes[0]}`\n if (last.root) return ':root'\n if (last.tag) return last.tag\n return '*'\n}\n\n/**\n * The page's sheets parsed for a wide screen. Malformed CSS is read as far as\n * it makes sense, as a browser would; nothing throws.\n */\nexport function siteImportCssOf(sheets: readonly string[]): SiteImportCss {\n const css: SiteImportCss = { rules: [], index: new Map(), fontFaces: [] }\n let order = 0\n const addRule = (prelude: string, body: string) => {\n const decls = declarationsOf(body)\n if (!decls.length) return\n for (const text of splitList(prelude)) {\n const selector = parseSelector(text)\n if (!selector) continue\n const rule: CssRule = { selector, order: order++, decls }\n css.rules.push(rule)\n const key = keyOf(selector)\n const list = css.index.get(key)\n if (list) list.push(rule)\n else css.index.set(key, [rule])\n }\n }\n for (const sheet of sheets) {\n const text = String(sheet ?? '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n /** For each open group: whether its rules apply. */\n const groups: boolean[] = []\n let at = 0\n let start = 0\n while (at < text.length) {\n const char = text[at]\n if (char === '\"' || char === \"'\") {\n const end = text.indexOf(char, at + 1)\n at = end < 0 ? text.length : end + 1\n continue\n }\n if (char === ';') {\n // A statement at-rule (@import, @charset) or stray text.\n start = at + 1\n at += 1\n continue\n }\n if (char === '}') {\n groups.pop()\n start = at + 1\n at += 1\n continue\n }\n if (char !== '{') {\n at += 1\n continue\n }\n const prelude = text.slice(start, at).trim()\n const applies = groups.every(Boolean)\n if (/^@(?:media)\\b/i.test(prelude)) {\n groups.push(applies && mediaHolds(prelude))\n start = at = at + 1\n continue\n }\n if (/^@(?:supports|layer|container|document|scope|starting-style)\\b/i.test(prelude)) {\n groups.push(applies && !/^@starting-style/i.test(prelude))\n start = at = at + 1\n continue\n }\n // A block to read whole: a style rule, a font face, or an at-rule to skip.\n let depth = 1\n let end = at + 1\n while (end < text.length && depth > 0) {\n if (text[end] === '{') depth += 1\n else if (text[end] === '}') depth -= 1\n end += 1\n }\n const body = text.slice(at + 1, Math.max(at + 1, end - 1))\n if (/^@font-face\\b/i.test(prelude)) {\n const family = /font-family\\s*:\\s*([\"']?)([^;\"']+)\\1/i.exec(body)?.[2]?.trim()\n if (family && !css.fontFaces.includes(family)) css.fontFaces.push(family)\n } else if (!prelude.startsWith('@') && applies && prelude) {\n // A rule nested inside a rule (`&:hover`) is a state: only the outer declarations are read.\n addRule(prelude, body.replace(/[^;{}]*\\{[^{}]*\\}/g, ''))\n }\n start = at = end\n }\n }\n return css\n}\n\n/*------------------------------------------\n * Matching and the cascade\n *-----------------------------------------*/\n\nfunction classesOf(element: SiteImportElement): string[] {\n return (element.attrs.class ?? '').split(/\\s+/).filter(Boolean)\n}\n\nfunction attributeOf(element: SiteImportElement, name: string): string | undefined {\n switch (name) {\n case 'class':\n return element.attrs.class\n case 'id':\n return element.attrs.id\n case 'role':\n return element.attrs.role\n case 'aria-label':\n return element.attrs.label\n case 'href':\n return element.attrs.href\n case 'type':\n return element.attrs.type\n case 'style':\n return element.attrs.style\n case 'hidden':\n case 'aria-hidden':\n return element.attrs.hidden ? 'true' : undefined\n case 'data-section-theme':\n case 'data-theme':\n return element.attrs.theme\n default:\n return undefined\n }\n}\n\nfunction compoundMatches(compound: Compound, element: SiteImportElement, rootId: number): boolean {\n if (compound.root && element.id !== rootId) return false\n if (compound.tag && compound.tag !== element.tag) return false\n if (compound.id && compound.id !== element.attrs.id) return false\n if (compound.classes.length) {\n const own = classesOf(element)\n if (!compound.classes.every((name) => own.includes(name))) return false\n }\n for (const attr of compound.attrs) {\n const value = attributeOf(element, attr.name)\n if (value === undefined) return false\n if (!attr.op) continue\n const wanted = attr.value\n const ok =\n attr.op === '='\n ? value === wanted\n : attr.op === '~='\n ? value.split(/\\s+/).includes(wanted)\n : attr.op === '^='\n ? value.startsWith(wanted)\n : attr.op === '$='\n ? value.endsWith(wanted)\n : attr.op === '*='\n ? value.includes(wanted)\n : value === wanted || value.startsWith(`${wanted}-`)\n if (!ok) return false\n }\n return true\n}\n\n/** Whether a selector matches an element, its combinators walked from the right. */\nfunction selectorMatches(\n selector: ComplexSelector,\n element: SiteImportElement,\n elements: readonly SiteImportElement[],\n root: SiteImportElement | null,\n): boolean {\n const rootId = root?.id ?? -2\n /** The element above `at`: its parent, or the document's root above the body. */\n const above = (at: SiteImportElement) => (at.parent >= 0 ? elements[at.parent] : at === root ? undefined : (root ?? undefined))\n const walk = (index: number, at: SiteImportElement): boolean => {\n if (!compoundMatches(selector.compounds[index] as Compound, at, rootId)) return false\n if (index === 0) return true\n const combinator = selector.combinators[index - 1]\n if (combinator === '>') {\n const parent = above(at)\n return !!parent && walk(index - 1, parent)\n }\n if (combinator === '+' || combinator === '~') {\n const siblings = elements[at.parent]?.children ?? []\n const position = siblings.indexOf(at.id)\n for (let before = position - 1; before >= 0; before -= 1) {\n const sibling = elements[siblings[before] as number]\n if (!sibling) continue\n if (walk(index - 1, sibling)) return true\n if (combinator === '+') return false\n }\n return false\n }\n for (let parent = above(at); parent; parent = above(parent)) {\n if (walk(index - 1, parent)) return true\n }\n return false\n }\n return walk(selector.compounds.length - 1, element)\n}\n\n/** One element's resolved style: the kept properties, `var()` read, lowercased. */\nexport type SiteImportComputedStyle = ReadonlyMap<string, string>\n\n/** Reads elements' styles over a page's structure, each once. */\nexport interface SiteImportStyles {\n of(element: number): SiteImportComputedStyle\n /** The root's (`<html>`) element id, which `:root` matches; -1 for none. */\n readonly root: number\n}\n\nconst EMPTY_STYLE: SiteImportComputedStyle = new Map()\n\n/** Replaces each `var(--x, fallback)` with what the custom properties hold, to a few levels. */\nfunction withVariables(value: string, custom: ReadonlyMap<string, string>): string {\n let out = value\n for (let pass = 0; pass < 4 && out.includes('var('); pass += 1) {\n out = out.replace(/var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*((?:[^()]|\\([^()]*\\))*))?\\)/g, (_, name: string, fallback?: string) => custom.get(name) ?? fallback?.trim() ?? '')\n }\n return out\n}\n\n/** The kept declarations an inline `style` attribute writes. */\nfunction inlineDeclarations(style: string | undefined): CssRule['decls'] {\n return style ? declarationsOf(style) : []\n}\n\n/**\n * Elements' styles over a page's structure and its sheets. Styles are\n * resolved on demand, parent first, each element once.\n */\nexport function siteImportStylesOf(structure: Pick<SiteImportStructure, 'elements' | 'root'>, css: SiteImportCss): SiteImportStyles {\n const { elements } = structure\n const resolved = new Map<number, { style: Map<string, string>; custom: Map<string, string> }>()\n // The page's root is above the body: `:root` and `html` rules are its.\n const rootStyle = (() => {\n const style = new Map<string, string>()\n const custom = new Map<string, string>()\n const fake: SiteImportElement = { id: -2, tag: 'html', parent: -1, children: [], region: 'main', nav: false, attrs: structure.root ?? {}, blocks: [] }\n const candidates = [...(css.index.get(':root') ?? []), ...(css.index.get('html') ?? []), ...(css.index.get('*') ?? [])]\n for (const name of classesOf(fake)) candidates.push(...(css.index.get(`.${name}`) ?? []))\n if (fake.attrs.id) candidates.push(...(css.index.get(`#${fake.attrs.id}`) ?? []))\n apply(candidates.filter((rule) => selectorMatches(rule.selector, fake, [], fake)), inlineDeclarations(fake.attrs.style), style, custom)\n return { style, custom, element: fake }\n })()\n\n function apply(rules: CssRule[], inline: CssRule['decls'], style: Map<string, string>, custom: Map<string, string>) {\n const unique = [...new Set(rules)].sort((a, b) => a.selector.specificity - b.selector.specificity || a.order - b.order)\n const important: Array<[string, string]> = []\n const put = (property: string, value: string) => {\n if (property.startsWith('--')) custom.set(property, value)\n else style.set(property, value)\n }\n for (const rule of unique) {\n for (const [property, value, flag] of rule.decls) {\n if (flag) important.push([property, value])\n else put(property, value)\n }\n }\n for (const [property, value, flag] of inline) {\n if (flag) important.push([property, value])\n else put(property, value)\n }\n for (const [property, value] of important) put(property, value)\n }\n\n function resolve(id: number): { style: Map<string, string>; custom: Map<string, string> } {\n const held = resolved.get(id)\n if (held) return held\n const element = elements[id]\n if (!element) return rootStyle\n const parent = element.parent >= 0 ? resolve(element.parent) : rootStyle\n const candidates: CssRule[] = [...(css.index.get(element.tag) ?? []), ...(css.index.get('*') ?? [])]\n for (const name of classesOf(element)) candidates.push(...(css.index.get(`.${name}`) ?? []))\n if (element.attrs.id) candidates.push(...(css.index.get(`#${element.attrs.id}`) ?? []))\n const matched = candidates.filter((rule) => selectorMatches(rule.selector, element, elements, rootStyle.element))\n const own = new Map<string, string>()\n const custom = new Map(parent.custom)\n apply(matched, inlineDeclarations(element.attrs.style), own, custom)\n const style = new Map<string, string>()\n for (const property of INHERITED) {\n const value = parent.style.get(property)\n if (value !== undefined) style.set(property, value)\n }\n for (const [property, value] of own) {\n const lowered = value.trim().toLowerCase()\n if (lowered === 'inherit') {\n const inherited = parent.style.get(property)\n if (inherited !== undefined) style.set(property, inherited)\n continue\n }\n if (lowered === 'initial' || lowered === 'unset' || lowered === 'revert') {\n if (!INHERITED.has(property) || lowered === 'initial') style.delete(property)\n continue\n }\n style.set(property, property === 'font-family' ? withVariables(value, custom) : withVariables(value, custom).toLowerCase())\n }\n const entry = { style, custom }\n resolved.set(id, entry)\n return entry\n }\n\n // The root's own inherited values reach the body through `rootStyle`.\n for (const [property, value] of rootStyle.style) {\n rootStyle.style.set(property, property === 'font-family' ? withVariables(value, rootStyle.custom) : withVariables(value, rootStyle.custom).toLowerCase())\n }\n return {\n root: -2,\n of(element: number): SiteImportComputedStyle {\n if (element === -2) return rootStyle.style\n return elements[element] ? resolve(element).style : EMPTY_STYLE\n },\n }\n}\n\n/*------------------------------------------\n * Values\n *-----------------------------------------*/\n\nexport interface SiteImportRgba {\n r: number\n g: number\n b: number\n a: number\n}\n\nconst NAMED_COLORS: Record<string, string> = {\n white: '#ffffff',\n black: '#000000',\n red: '#ff0000',\n green: '#008000',\n blue: '#0000ff',\n gray: '#808080',\n grey: '#808080',\n silver: '#c0c0c0',\n whitesmoke: '#f5f5f5',\n ghostwhite: '#f8f8ff',\n snow: '#fffafa',\n ivory: '#fffff0',\n beige: '#f5f5dc',\n linen: '#faf0e6',\n navy: '#000080',\n teal: '#008080',\n orange: '#ffa500',\n gold: '#ffd700',\n purple: '#800080',\n crimson: '#dc143c',\n tomato: '#ff6347',\n coral: '#ff7f50',\n aliceblue: '#f0f8ff',\n lightgray: '#d3d3d3',\n lightgrey: '#d3d3d3',\n gainsboro: '#dcdcdc',\n darkslategray: '#2f4f4f',\n dimgray: '#696969',\n}\n\n/** The first color a value names, or `null`; `transparent` is a color of no strength. */\nexport function siteImportColorOf(value: string | undefined): SiteImportRgba | null {\n if (!value) return null\n const text = value.toLowerCase()\n const hex = /#([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})\\b/.exec(text)\n const rgb = /rgba?\\(\\s*(-?[\\d.]+%?)\\s*[,\\s]\\s*(-?[\\d.]+%?)\\s*[,\\s]\\s*(-?[\\d.]+%?)\\s*(?:[,/]\\s*(-?[\\d.]+%?)\\s*)?\\)/.exec(text)\n const hsl = /hsla?\\(\\s*(-?[\\d.]+)(?:deg)?\\s*[,\\s]\\s*([\\d.]+)%\\s*[,\\s]\\s*([\\d.]+)%\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)/.exec(text)\n const named = /\\b(transparent|[a-z]+)\\b/.exec(text.replace(/[a-z-]+\\(/g, ' ('))\n const first = [hex, rgb, hsl].filter((match): match is RegExpExecArray => !!match).sort((a, b) => a.index - b.index)[0]\n const alphaOf = (raw: string | undefined) => (raw === undefined ? 1 : raw.endsWith('%') ? Number(raw.slice(0, -1)) / 100 : Number(raw))\n if (first === hex && hex) {\n const digits = hex[1]\n const full = digits.length <= 4 ? digits.split('').map((d) => d + d).join('') : digits\n return {\n r: parseInt(full.slice(0, 2), 16),\n g: parseInt(full.slice(2, 4), 16),\n b: parseInt(full.slice(4, 6), 16),\n a: full.length === 8 ? parseInt(full.slice(6, 8), 16) / 255 : 1,\n }\n }\n if (first === rgb && rgb) {\n const channel = (raw: string) => Math.max(0, Math.min(255, raw.endsWith('%') ? (Number(raw.slice(0, -1)) / 100) * 255 : Number(raw)))\n return { r: channel(rgb[1]), g: channel(rgb[2]), b: channel(rgb[3]), a: alphaOf(rgb[4]) }\n }\n if (first === hsl && hsl) {\n const h = (((Number(hsl[1]) % 360) + 360) % 360) / 360\n const s = Number(hsl[2]) / 100\n const l = Number(hsl[3]) / 100\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n const tone = (t: number) => {\n const x = t < 0 ? t + 1 : t > 1 ? t - 1 : t\n if (x < 1 / 6) return p + (q - p) * 6 * x\n if (x < 1 / 2) return q\n if (x < 2 / 3) return p + (q - p) * (2 / 3 - x) * 6\n return p\n }\n return { r: tone(h + 1 / 3) * 255, g: tone(h) * 255, b: tone(h - 1 / 3) * 255, a: alphaOf(hsl[4]) }\n }\n if (named) {\n if (named[1] === 'transparent') return { r: 0, g: 0, b: 0, a: 0 }\n const known = NAMED_COLORS[named[1]]\n if (known) return siteImportColorOf(known)\n }\n return null\n}\n\n/** `#rrggbb` of a color, its strength ignored. */\nexport function siteImportHex(color: SiteImportRgba): string {\n return `#${[color.r, color.g, color.b].map((channel) => Math.round(channel).toString(16).padStart(2, '0')).join('')}`\n}\n\n/** Relative luminance, 0 (black) to 1 (white). */\nexport function siteImportLuminance(color: SiteImportRgba): number {\n const linear = (channel: number) => {\n const c = channel / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n }\n return 0.2126 * linear(color.r) + 0.7152 * linear(color.g) + 0.0722 * linear(color.b)\n}\n\n/** How colorful a color is, 0 (grey) to 1. */\nexport function siteImportSaturation(color: SiteImportRgba): number {\n const max = Math.max(color.r, color.g, color.b) / 255\n const min = Math.min(color.r, color.g, color.b) / 255\n if (max === min) return 0\n const l = (max + min) / 2\n return (max - min) / (1 - Math.abs(2 * l - 1))\n}\n\n/** What an element draws behind itself: a color, a gradient and its colors, or a picture. */\nexport interface SiteImportBackground {\n color: SiteImportRgba | null\n gradient: SiteImportRgba[] | null\n /** A picture's address, as written. */\n image: string | null\n}\n\n/** An element's own background, from the shorthand or its parts. */\nexport function siteImportBackgroundOf(style: SiteImportComputedStyle): SiteImportBackground {\n const shorthand = style.get('background') ?? ''\n const imageValue = style.get('background-image') ?? (/(?:url|gradient)\\(/.test(shorthand) ? shorthand : '')\n const colorValue = style.get('background-color') ?? (shorthand && !/(?:url|gradient)\\(/.test(shorthand) ? shorthand : shorthand.replace(/[a-z-]*gradient\\((?:[^()]|\\([^()]*\\))*\\)|url\\([^)]*\\)/g, ' '))\n const color = siteImportColorOf(colorValue)\n let gradient: SiteImportRgba[] | null = null\n let image: string | null = null\n const gradientMatch = /gradient\\(((?:[^()]|\\([^()]*\\))*)\\)/.exec(imageValue)\n if (gradientMatch) {\n const stops: SiteImportRgba[] = []\n for (const match of gradientMatch[1].matchAll(/#[0-9a-f]{3,8}\\b|rgba?\\([^)]*\\)|hsla?\\([^)]*\\)|\\b(?:white|black|transparent)\\b/gi)) {\n const stop = siteImportColorOf(match[0])\n if (stop) stops.push(stop)\n }\n if (stops.length) gradient = stops\n }\n const url = /url\\(\\s*([\"']?)([^\"')]+)\\1\\s*\\)/.exec(imageValue)\n if (url) image = url[2].trim()\n return { color: color && color.a > 0.02 ? color : null, gradient, image }\n}\n\n/** Whether an element draws a border on any side. */\nexport function siteImportHasBorder(style: SiteImportComputedStyle): boolean {\n const sides = ['border', 'border-top', 'border-bottom', 'border-left', 'border-right']\n for (const side of sides) {\n const value = style.get(side)\n if (!value) continue\n if (/\\bnone\\b|\\bhidden\\b/.test(value) || /^0(?:px)?$/.test(value.trim())) continue\n const color = siteImportColorOf(value) ?? siteImportColorOf(style.get('border-color'))\n if (color && color.a < 0.05) continue\n if (/\\d/.test(value) || /\\b(?:solid|dashed|dotted|double)\\b/.test(value)) {\n const width = /(-?[\\d.]+)px/.exec(value)\n if (!width || Number(width[1]) > 0) return true\n }\n }\n const width = style.get('border-width')\n const kind = style.get('border-style')\n if (kind && /\\b(?:solid|dashed|dotted|double)\\b/.test(kind) && (!width || !/^0(?:px)?$/.test(width.trim()))) return true\n return false\n}\n\n/** Whether an element draws a shadow. */\nexport function siteImportHasShadow(style: SiteImportComputedStyle): boolean {\n const value = style.get('box-shadow')\n return !!value && !/^(?:none|0|initial|unset)$/.test(value.trim()) && !/^0(?:px)?\\s+0(?:px)?\\s+0(?:px)?(?:\\s+0(?:px)?)?\\s+(?:transparent|rgba\\([^)]*,\\s*0\\))/.test(value.trim())\n}\n\n/** An element's corner radius in px, or `null`. */\nexport function siteImportRadiusPx(style: SiteImportComputedStyle): number | null {\n const value = style.get('border-radius')\n if (!value) return null\n const first = value.trim().split(/[\\s/]+/)[0] ?? ''\n if (first.endsWith('%')) return Number(first.slice(0, -1)) >= 50 ? 999 : Number(first.slice(0, -1))\n return lengthPx(first)\n}\n\n/** A font size in px, or `null`. */\nexport function siteImportFontSizePx(style: SiteImportComputedStyle): number | null {\n const value = style.get('font-size')\n if (!value) return null\n const clamp = /clamp\\(([^,]+),([^,]+),([^)]+)\\)/.exec(value)\n // A fluid size at the read width: its maximum, as a wide screen shows it.\n const text = clamp ? clamp[3] : value\n return lengthPx(text.trim())\n}\n\n/** The relative widths a grid template draws its columns at, or `null` for none. */\nexport function siteImportGridColumns(template: string | undefined): number[] | null {\n if (!template || /^(?:none|subgrid|masonry)$/.test(template.trim())) return null\n let text = template.trim()\n // repeat(3, 1fr) / repeat(auto-fill, minmax(240px, 1fr)): the count, or three of them.\n text = text.replace(/repeat\\(\\s*([\\w-]+)\\s*,\\s*((?:[^()]|\\([^()]*\\))*)\\)/g, (_, count: string, track: string) => {\n const times = /^\\d+$/.test(count) ? Math.min(12, Number(count)) : 3\n return Array.from({ length: times }, () => track.trim()).join(' ')\n })\n const tracks: string[] = []\n let depth = 0\n let token = ''\n for (const char of text) {\n if (char === '(') depth += 1\n if (char === ')') depth -= 1\n if (/\\s/.test(char) && depth === 0) {\n if (token) tracks.push(token)\n token = ''\n } else token += char\n }\n if (token) tracks.push(token)\n const weights = tracks\n .filter((track) => !/^\\[.*\\]$/.test(track))\n .map((track) => {\n const fr = /(-?[\\d.]+)fr\\)?$/.exec(track)\n if (fr) return Number(fr[1]) || 1\n const px = /(-?[\\d.]+)px/.exec(track)\n if (px) return Number(px[1]) / 100\n const percent = /(-?[\\d.]+)%/.exec(track)\n if (percent) return Number(percent[1]) / 10\n return 1\n })\n return weights.length ? weights : null\n}\n\n/** Weights scaled to twelfths, each at least 1: `[420, 788]` is `[4, 8]`. */\nexport function siteImportTwelfths(weights: readonly number[]): number[] {\n const total = weights.reduce((sum, weight) => sum + Math.max(0, weight), 0)\n if (!total) return weights.map(() => 1)\n const scaled = weights.map((weight) => Math.max(1, Math.round((Math.max(0, weight) / total) * 12)))\n // Two equal tracks stay equal, three stay thirds.\n const unique = new Set(weights.map((weight) => Math.round(weight * 1000)))\n if (unique.size === 1) return weights.map(() => 1)\n return scaled\n}\n\n/** The families a `font-family` value names, quotes dropped, generic ones left out. */\nexport function siteImportFontFamilies(value: string | undefined): string[] {\n if (!value) return []\n return splitList(value)\n .map((family) => family.replace(/^[\"']|[\"']$/g, '').trim())\n .filter((family) => family && !/^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-[\\w-]+|-apple-system|blinkmacsystemfont|inherit|initial|emoji|math|var\\(.*)$/i.test(family))\n}\n"],"names":["SITE_IMPORT_CSS_VIEWPORT","width","height","KEPT_PROPERTIES","Set","INHERITED","unescapeIdent","text","replace","_","escaped","test","code","parseInt","trim","String","fromCodePoint","IDENT","raw","SIMPLE","RegExp","AT_REST","parseCompound","compound","tag","id","classes","attrs","root","rest","match","exec","slice","length","toLowerCase","push","name","op","value","has","parseSelector","compounds","combinators","parts","split","pending","part","ids","tags","specificity","splitList","out","depth","start","at","char","Math","max","map","filter","Boolean","lengthPx","amount","Number","mediaQueryHolds","query","negate","startsWith","holds","term","inner","feature","px","range","size","a","b","mediaHolds","prelude","list","some","declarationsOf","body","decls","colon","indexOf","written","property","important","keyOf","selector","last","siteImportCssOf","sheets","css","rules","index","Map","fontFaces","order","addRule","rule","key","get","set","sheet","groups","end","pop","applies","every","family","includes","classesOf","element","class","attributeOf","role","label","href","type","style","hidden","undefined","theme","compoundMatches","rootId","own","attr","wanted","ok","endsWith","selectorMatches","elements","above","parent","walk","combinator","siblings","children","position","before","sibling","EMPTY_STYLE","withVariables","custom","pass","fallback","inlineDeclarations","siteImportStylesOf","structure","resolved","rootStyle","fake","region","nav","blocks","candidates","apply","inline","unique","sort","put","flag","resolve","held","matched","lowered","inherited","delete","entry","of","NAMED_COLORS","white","black","red","green","blue","gray","grey","silver","whitesmoke","ghostwhite","snow","ivory","beige","linen","navy","teal","orange","gold","purple","crimson","tomato","coral","aliceblue","lightgray","lightgrey","gainsboro","darkslategray","dimgray","siteImportColorOf","hex","rgb","hsl","named","first","alphaOf","digits","full","d","join","r","g","channel","min","h","s","l","q","p","tone","t","x","known","siteImportHex","color","round","toString","padStart","siteImportLuminance","linear","c","siteImportSaturation","abs","siteImportBackgroundOf","shorthand","imageValue","colorValue","gradient","image","gradientMatch","stops","matchAll","stop","url","siteImportHasBorder","sides","side","kind","siteImportHasShadow","siteImportRadiusPx","siteImportFontSizePx","clamp","siteImportGridColumns","template","count","track","times","Array","from","tracks","token","weights","fr","percent","siteImportTwelfths","total","reduce","sum","weight","scaled","siteImportFontFamilies"],"mappings":"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"}
|
|
@@ -126,6 +126,115 @@ export interface SiteImportExtract {
|
|
|
126
126
|
};
|
|
127
127
|
/** True when the page has a password field; nothing else is extracted. */
|
|
128
128
|
loginForm: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* How the page is built (AGL-4106), when asked for: every element the
|
|
131
|
+
* blocks sit in, so the layout reader sees the source's sections, rows,
|
|
132
|
+
* cards and menus, not only its lines. Never stored: the crawl reads it
|
|
133
|
+
* into a layout and drops it.
|
|
134
|
+
*/
|
|
135
|
+
structure?: SiteImportStructure;
|
|
136
|
+
}
|
|
137
|
+
/** The attributes of an element the layout reader reads; everything else is dropped. */
|
|
138
|
+
export interface SiteImportElementAttrs {
|
|
139
|
+
class?: string;
|
|
140
|
+
id?: string;
|
|
141
|
+
style?: string;
|
|
142
|
+
role?: string;
|
|
143
|
+
/** `aria-label`. */
|
|
144
|
+
label?: string;
|
|
145
|
+
/** An anchor's address as written. */
|
|
146
|
+
href?: string;
|
|
147
|
+
/** `hidden`, or `aria-hidden="true"`. */
|
|
148
|
+
hidden?: true;
|
|
149
|
+
/** `data-section-theme` or `data-theme`: a site builder's name for a band's look. */
|
|
150
|
+
theme?: string;
|
|
151
|
+
type?: string;
|
|
152
|
+
/** `aria-controls` / `aria-labelledby`: what a tab shows, and what names a panel. */
|
|
153
|
+
controls?: string;
|
|
154
|
+
labelledby?: string;
|
|
155
|
+
}
|
|
156
|
+
/** One element of the page, in a flat table: its parent and children by index. */
|
|
157
|
+
export interface SiteImportElement {
|
|
158
|
+
id: number;
|
|
159
|
+
tag: string;
|
|
160
|
+
/** -1 for an element at the top of the body. */
|
|
161
|
+
parent: number;
|
|
162
|
+
children: number[];
|
|
163
|
+
region: SiteImportRegion;
|
|
164
|
+
/** Inside a `<nav>`, or a header with no `<nav>`. */
|
|
165
|
+
nav: boolean;
|
|
166
|
+
attrs: SiteImportElementAttrs;
|
|
167
|
+
/** The blocks whose words sit directly in this element, by index into `blocks`. */
|
|
168
|
+
blocks: number[];
|
|
169
|
+
/** The icon this element is, by index into `structure.icons` (an inline `<svg>`). */
|
|
170
|
+
icon?: number;
|
|
171
|
+
/** The form that sat here, by index into the page's kept forms. */
|
|
172
|
+
form?: number;
|
|
173
|
+
/**
|
|
174
|
+
* Its place in the page's order of content: a block's index, or the index
|
|
175
|
+
* of the block that follows an icon, less a half. Set on elements that
|
|
176
|
+
* hold a block or an icon directly.
|
|
177
|
+
*/
|
|
178
|
+
order?: number;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* An inline `<svg>` the page draws as an icon (AGL-4106): one path the
|
|
182
|
+
* Besigner's icon element draws as it is, or the shapes of a small drawing,
|
|
183
|
+
* cleaned to geometry, for a picture of it. Never its text.
|
|
184
|
+
*/
|
|
185
|
+
export interface SiteImportSvgIcon {
|
|
186
|
+
viewBox: string;
|
|
187
|
+
/** The one `<path d>`, at most 4 KB. */
|
|
188
|
+
path?: string;
|
|
189
|
+
/** A drawing of several shapes, at most 16 KB, its geometry and fills only. */
|
|
190
|
+
svg?: string;
|
|
191
|
+
}
|
|
192
|
+
/** A link on the page, menus included, as the structure keeps it for the menus' reader. */
|
|
193
|
+
export interface SiteImportAnchor {
|
|
194
|
+
/** The `<a>` element. */
|
|
195
|
+
element: number;
|
|
196
|
+
/** Where it goes: an absolute http(s) address, a `mailto:` or a `tel:`; `null` for none. */
|
|
197
|
+
href: string | null;
|
|
198
|
+
/** Its first line: a menu entry's name. */
|
|
199
|
+
label: string;
|
|
200
|
+
/** Its other lines: a mega-menu entry's description. */
|
|
201
|
+
text: string;
|
|
202
|
+
region: SiteImportRegion;
|
|
203
|
+
nav: boolean;
|
|
204
|
+
/** The first icon inside it. */
|
|
205
|
+
icon?: number;
|
|
206
|
+
/** The first picture inside it. */
|
|
207
|
+
image?: string;
|
|
208
|
+
}
|
|
209
|
+
export interface SiteImportStructure {
|
|
210
|
+
elements: SiteImportElement[];
|
|
211
|
+
/** The element each block's words sit in, by block index. */
|
|
212
|
+
blockElement: number[];
|
|
213
|
+
icons: SiteImportSvgIcon[];
|
|
214
|
+
anchors: SiteImportAnchor[];
|
|
215
|
+
/**
|
|
216
|
+
* Words a menu or a header holds outside its links, where they sit: a mega
|
|
217
|
+
* menu's column heading ("By team"), the button that opens a menu. A menu's
|
|
218
|
+
* words are never blocks, so these are how the menu reader sees them.
|
|
219
|
+
*/
|
|
220
|
+
texts: Array<{
|
|
221
|
+
element: number;
|
|
222
|
+
text: string;
|
|
223
|
+
}>;
|
|
224
|
+
/** The page's own `<style>` sheets, in order. */
|
|
225
|
+
styles: string[];
|
|
226
|
+
/** The stylesheets it links (absolute https), in order, Google Fonts' included. */
|
|
227
|
+
stylesheets: string[];
|
|
228
|
+
/** The `<main>` element, or -1 when the page has none. */
|
|
229
|
+
main: number;
|
|
230
|
+
/** The `<body>`'s element, or -1. */
|
|
231
|
+
body: number;
|
|
232
|
+
/** The `<html>` element's attributes. */
|
|
233
|
+
root: SiteImportElementAttrs;
|
|
234
|
+
}
|
|
235
|
+
export interface SiteImportExtractOptions {
|
|
236
|
+
/** Keep how the page is built (`structure`), for the layout reader (AGL-4106). */
|
|
237
|
+
structure?: boolean;
|
|
129
238
|
}
|
|
130
239
|
/** Ceilings that keep one odd page from becoming the whole inventory. */
|
|
131
240
|
export declare const SITE_IMPORT_PAGE_LIMITS: {
|
|
@@ -140,6 +249,12 @@ export declare const SITE_IMPORT_PAGE_LIMITS: {
|
|
|
140
249
|
readonly forms: 10;
|
|
141
250
|
readonly fieldsPerForm: 30;
|
|
142
251
|
readonly icons: 12;
|
|
252
|
+
/** The structure's ceilings (AGL-4106): elements, inline icons, links and the page's own style sheets. */
|
|
253
|
+
readonly elements: 20000;
|
|
254
|
+
readonly svgIcons: 200;
|
|
255
|
+
readonly anchors: 800;
|
|
256
|
+
readonly styleChars: 1500000;
|
|
257
|
+
readonly stylesheets: 4;
|
|
143
258
|
};
|
|
144
259
|
/** Character references to characters; an unknown name stays as written. */
|
|
145
260
|
export declare function decodeHtmlEntities(text: string): string;
|
|
@@ -161,4 +276,4 @@ export declare function resolveSiteLink(raw: string | undefined, base: string):
|
|
|
161
276
|
* `isSameSite(url)` says whether an address is on the site being imported;
|
|
162
277
|
* only those become `links`, and images are marked by it.
|
|
163
278
|
*/
|
|
164
|
-
export declare function extractSiteImportPage(html: string, pageUrl: string, isSameSite: (url: URL) => boolean): SiteImportExtract;
|
|
279
|
+
export declare function extractSiteImportPage(html: string, pageUrl: string, isSameSite: (url: URL) => boolean, options?: SiteImportExtractOptions): SiteImportExtract;
|