@bridge-ds/core 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/node/git-local.ts","../../src/node/git-history.ts","../../src/node/audit.ts","../../src/node/spec-css.ts","../../src/node/spec-motion.ts","../../src/node/component-specs.ts","../../src/node/suggestion-apply-node.ts","../../src/node/fs-source.ts","../../src/node/measure-script.ts","../../src/node/tokens-script.ts","../../src/node/measure.ts"],"sourcesContent":["// Local git through plumbing commands (Node only). A proposal becomes a commit on a new branch without\n// touching the working tree, the index or the checked-out branch, and nothing is ever pushed.\nimport { execFile } from 'node:child_process';\nimport { mkdtemp, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { type BranchRules, assertSafeBranch } from '../governance';\n\nexport function git(root: string, args: string[], opts: { input?: string; env?: Record<string, string> } = {}): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = execFile('git', args, { cwd: root, env: { ...process.env, ...opts.env }, maxBuffer: 32 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err) reject(new Error(`git ${args.join(' ')}: ${stderr || err.message}`.trim()));\n else resolve(stdout);\n });\n if (opts.input !== undefined) child.stdin!.end(opts.input);\n });\n}\n\nexport async function isGitRepo(root: string): Promise<boolean> {\n try {\n return (await git(root, ['rev-parse', '--is-inside-work-tree'])).trim() === 'true';\n } catch {\n return false;\n }\n}\n\nexport async function currentBranch(root: string): Promise<string> {\n return (await git(root, ['rev-parse', '--abbrev-ref', 'HEAD'])).trim();\n}\n\nexport async function branchExists(root: string, branch: string): Promise<boolean> {\n try {\n await git(root, ['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`]);\n return true;\n } catch {\n return false;\n }\n}\n\n/** File text at a ref, or null when it does not exist there. */\nexport async function showFile(root: string, ref: string, path: string): Promise<string | null> {\n try {\n return await git(root, ['show', `${ref}:${path}`]);\n } catch {\n return null;\n }\n}\n\nexport async function listFilesAt(root: string, ref: string): Promise<string[]> {\n return (await git(root, ['ls-tree', '-r', '--name-only', ref])).split('\\n').filter(Boolean);\n}\n\n/** \"owner/name\" of the origin remote when it is on github.com. */\nexport async function originRepo(root: string): Promise<string | undefined> {\n try {\n const url = (await git(root, ['remote', 'get-url', 'origin'])).trim();\n return /github\\.com[:/]([\\w.-]+\\/[\\w.-]+?)(\\.git)?$/.exec(url)?.[1];\n } catch {\n return undefined;\n }\n}\n\nexport interface LocalCommitInput extends BranchRules {\n /** Ref the commit builds on (\"HEAD\", a branch or a sha). */\n base: string;\n branch: string;\n message: string;\n files: { path: string; content: string | null }[];\n}\n\n/**\n * Commits `files` on top of `base` into the new branch `branch` using a throwaway index. Refuses protected\n * branches (and, with branchPrefix, branches without it) and existing branches: nothing is ever overwritten.\n */\nexport async function commitToNewLocalBranch(root: string, args: LocalCommitInput): Promise<{ sha: string; diff: string }> {\n try {\n assertSafeBranch(args.branch, args);\n } catch (err) {\n throw new Error(`Refusing to write branch \"${args.branch}\": ${(err as Error).message}`);\n }\n if (await branchExists(root, args.branch)) throw new Error(`Branch \"${args.branch}\" already exists. Pick another title or delete it first.`);\n const { sha, parent } = await commitTree(root, args);\n // Empty old value: create only, fail if the ref appeared meanwhile.\n await git(root, ['update-ref', `refs/heads/${args.branch}`, sha, '']);\n const diff = await git(root, ['diff', parent, sha]);\n return { sha, diff };\n}\n\n/**\n * A commit with `files` on top of `base`, built in a throwaway index and pointed to by no branch: nothing in the working\n * tree, the index or the refs changes. commitToNewLocalBranch names it; a patch (git format-patch) can be read from it.\n */\nexport async function commitTree(root: string, args: { base: string; message: string; files: { path: string; content: string | null }[] }): Promise<{ sha: string; parent: string }> {\n const parent = (await git(root, ['rev-parse', '--verify', `${args.base}^{commit}`])).trim();\n const dir = await mkdtemp(join(tmpdir(), 'bridge-index-'));\n const env = { GIT_INDEX_FILE: join(dir, 'index') };\n try {\n await git(root, ['read-tree', parent], { env });\n for (const f of args.files) {\n if (f.content === null) {\n await git(root, ['update-index', '--force-remove', f.path], { env });\n continue;\n }\n const blob = (await git(root, ['hash-object', '-w', '--stdin'], { input: f.content })).trim();\n await git(root, ['update-index', '--add', '--cacheinfo', `100644,${blob},${f.path}`], { env });\n }\n const tree = (await git(root, ['write-tree'], { env })).trim();\n const ident = await identityEnv(root);\n const sha = (await git(root, ['commit-tree', tree, '-p', parent, '-F', '-'], { input: args.message, env: ident })).trim();\n return { sha, parent };\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nasync function identityEnv(root: string): Promise<Record<string, string>> {\n const get = async (k: string) => (await git(root, ['config', k]).catch(() => '')).trim();\n const name = (await get('user.name')) || 'Bridge';\n const email = (await get('user.email')) || 'bridge@users.noreply.github.com';\n return { GIT_AUTHOR_NAME: name, GIT_AUTHOR_EMAIL: email, GIT_COMMITTER_NAME: name, GIT_COMMITTER_EMAIL: email };\n}\n","// History from a local git repository (Node only): first-parent commits of a ref that touched the tokens\n// root, so a merged branch is one entry (the merge commit against the base it merged into). PR numbers come\n// from merge and squash subjects. Blobs are read once per sha.\nimport { type BridgeConfig } from '../config';\nimport { type HistoryBackend, type HistoryCommit, type HistoryReport, buildReport, collectHistory, mergeReleases, packageDirCandidates, parseChangelog, prNumberFromSubject, releasesFromTags } from '../history';\nimport { selectTokenFiles } from '../layered';\nimport { git, showFile } from './git-local';\n\nconst US = '\\u001f';\nconst RS = '\\u001e';\n\nexport function localGitHistoryBackend(root: string, config: BridgeConfig): HistoryBackend {\n const trees = new Map<string, Promise<{ path: string; sha: string }[]>>();\n const blobs = new Map<string, Promise<string>>();\n const tokenRoot = config.tokens.root.replace(/\\/$/, '');\n const prefix = tokenRoot === '.' || !tokenRoot ? '' : `${tokenRoot}/`;\n const lsTree = (sha: string, path: string) => {\n const k = `${sha}:${path}`;\n let t = trees.get(k);\n if (!t) {\n t = git(root, ['ls-tree', '-r', sha, '--', path || '.']).then((out) =>\n out\n .split('\\n')\n .filter(Boolean)\n .map((l) => {\n const [meta, p] = l.split('\\t');\n return { path: p!, sha: meta!.split(' ')[2]! };\n }),\n );\n trees.set(k, t);\n }\n return t;\n };\n const blob = (sha: string) => {\n let b = blobs.get(sha);\n if (!b) {\n b = git(root, ['cat-file', 'blob', sha]);\n blobs.set(sha, b);\n }\n return b;\n };\n return {\n async listCommits({ ref, paths, limit }) {\n const fmt = ['%H', '%P', '%cI', '%an', '%s', '%b'].join(US) + RS;\n const out = await git(root, ['log', '--first-parent', `-n${limit}`, `--format=${fmt}`, ref, '--', ...(paths.length ? paths : ['.'])]);\n return out\n .split(RS)\n .map((r) => r.replace(/^\\n/, ''))\n .filter((r) => r.trim())\n .map((r): HistoryCommit => {\n const [sha, parents, date, author, subject, body] = r.split(US);\n const n = prNumberFromSubject(subject ?? '');\n return { sha: sha!, parents: (parents ?? '').split(' ').filter(Boolean), date: date!, author: author!, subject: subject ?? '', body: (body ?? '').trim(), ...(n ? { pr: { number: n, title: '' } } : {}) };\n })\n .map((c) => (c.pr && !c.pr.title ? { ...c, pr: undefined } : c))\n .map((c) => {\n const { pr, ...rest } = c;\n return pr ? c : rest;\n });\n },\n async tokenFiles(sha) {\n const entries = await lsTree(sha, tokenRoot === '.' ? '' : tokenRoot);\n const picked = new Set(selectTokenFiles(config, entries.map((e) => e.path)));\n const wanted = entries.filter((e) => picked.has(prefix ? e.path.slice(prefix.length) : e.path));\n return new Map(await Promise.all(wanted.map(async (e) => [prefix ? e.path.slice(prefix.length) : e.path, await blob(e.sha)] as const)));\n },\n async changesetPaths(sha) {\n const dir = config.changesets?.dir.replace(/\\/$/, '');\n return dir ? (await lsTree(sha, dir)).map((e) => e.path) : [];\n },\n async readFile(sha, path) {\n return showFile(root, sha, path);\n },\n };\n}\n\n/** Tags with their commit and date: `v1.2.0`, `@scope/pkg@1.2.0`. */\nexport async function localTags(root: string): Promise<{ name: string; sha: string; date: string }[]> {\n const out = await git(root, ['for-each-ref', 'refs/tags', '--format=%(refname:short)%09%(*objectname)%09%(objectname)%09%(creatordate:iso-strict)']).catch(() => '');\n return out\n .split('\\n')\n .filter(Boolean)\n .map((l) => {\n const [name, peeled, obj, date] = l.split('\\t');\n return { name: name!, sha: peeled || obj!, date: date! };\n });\n}\n\n/** The whole history report for a local repo at `ref` (default HEAD). */\nexport async function loadLocalHistory(root: string, config: BridgeConfig, opts: { ref?: string; limit?: number } = {}): Promise<HistoryReport> {\n const ref = opts.ref ?? 'HEAD';\n const limit = opts.limit ?? 40;\n const backend = localGitHistoryBackend(root, config);\n let listed = 0;\n const counted: HistoryBackend = {\n ...backend,\n listCommits: async (o) => {\n const r = await backend.listCommits(o);\n listed = r.length;\n return r;\n },\n };\n // A shallow clone (CI, Vercel) has a cut history: read what is there.\n const entries = await collectHistory(config, counted, { ref, limit });\n let changelog: ReturnType<typeof parseChangelog> = [];\n let currentVersion: string | undefined;\n for (const dir of packageDirCandidates(config)) {\n const p = (f: string) => (dir ? `${dir}/${f}` : f);\n const [cl, pkg] = await Promise.all([showFile(root, ref, p('CHANGELOG.md')), showFile(root, ref, p('package.json'))]);\n if (cl === null && pkg === null) continue;\n if (cl) changelog = parseChangelog(cl);\n if (pkg) {\n try {\n const json = JSON.parse(pkg) as { name?: string; version?: string };\n if (!config.changesets || json.name === config.changesets.package) currentVersion = json.version;\n } catch {\n /* not JSON */\n }\n }\n break;\n }\n const releases = mergeReleases(changelog, releasesFromTags(await localTags(root), config.changesets?.package));\n return buildReport({ source: 'git', label: `${root}@${ref}`, ref, entries, releases, ...(currentVersion ? { currentVersion } : {}), truncated: listed >= limit });\n}\n","// Node side of `bridge audit`: load the design system from its repo and read a product folder from disk.\nimport { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\nimport { loadConfig, type BridgeConfig } from '../config';\nimport { globToRegExp, LayeredTokenSet, selectTokenFiles } from '../layered';\nimport { AUDIT_IGNORE_DIRS, buildAuditReport, compareWithBaseline, isAuditable, planCssFixes, type CssFixEdit, type CssFixKept } from '../audit/report';\nimport { DesignSystemIndex } from '../audit/ds-index';\nimport { parseAllowlist } from '../audit/ignore';\nimport type { AllowlistEntry, AuditReport } from '../audit/types';\n\nexport interface LoadedDesignSystem {\n root: string;\n config: BridgeConfig;\n set: LayeredTokenSet;\n index: DesignSystemIndex;\n}\n\nconst toPosix = (p: string) => p.split(sep).join('/');\n\nfunction walk(dir: string, root: string, out: string[], skipDirs: string[]): void {\n let entries: string[];\n try {\n entries = readdirSync(dir);\n } catch {\n return;\n }\n for (const name of entries) {\n const abs = join(dir, name);\n let st;\n try {\n st = statSync(abs);\n } catch {\n continue;\n }\n if (st.isDirectory()) {\n if (!skipDirs.includes(name)) walk(abs, root, out, skipDirs);\n } else out.push(toPosix(relative(root, abs)));\n }\n}\n\n/** Nearest folder at or above `from` with a bridge.config.json. */\nexport function findDesignSystemRoot(from: string): string | undefined {\n let dir = resolve(from);\n for (;;) {\n if (existsSync(join(dir, 'bridge.config.json'))) return dir;\n const up = dirname(dir);\n if (up === dir) return undefined;\n dir = up;\n }\n}\n\nconst cache = new Map<string, LoadedDesignSystem>();\n\n/** Design system at `root` (a repo with bridge.config.json): tokens in every mode, components, packages. Cached per root. */\nexport function loadDesignSystem(root: string, opts: { fresh?: boolean } = {}): LoadedDesignSystem {\n const abs = resolve(root);\n const hit = cache.get(abs);\n if (hit && !opts.fresh) return hit;\n const cfgPath = join(abs, 'bridge.config.json');\n if (!existsSync(cfgPath)) throw new Error(`No bridge.config.json in ${abs}: pass the design system repo (--ds <dir>) or run bridge init there.`);\n const config = loadConfig(readFileSync(cfgPath, 'utf8'));\n const tokensRoot = config.tokens.root.replace(/\\/$/, '');\n const listed: string[] = [];\n walk(join(abs, tokensRoot === '.' ? '' : tokensRoot), abs, listed, ['node_modules', '.git', 'dist']);\n const files = new Map<string, string>();\n for (const f of selectTokenFiles(config, listed)) files.set(f, readFileSync(join(abs, tokensRoot === '.' ? '' : tokensRoot, f), 'utf8'));\n const set = new LayeredTokenSet(config, files);\n const components: string[] = [];\n let packages = config.audit?.packages;\n if (config.components) {\n const dir = join(abs, config.components.dir);\n if (existsSync(dir)) for (const name of readdirSync(dir)) if (/^[A-Z][A-Za-z0-9]*$/.test(name) && statSync(join(dir, name)).isDirectory()) components.push(name);\n if (!packages) {\n packages = ['@bridge-ds/react'];\n for (let d = dir; d.startsWith(abs) && d !== abs; d = dirname(d)) {\n const pj = join(d, 'package.json');\n if (existsSync(pj)) {\n const name = (JSON.parse(readFileSync(pj, 'utf8')) as { name?: string }).name;\n if (name && !packages.includes(name)) packages.unshift(name);\n break;\n }\n }\n }\n }\n const index = new DesignSystemIndex(set, {\n packages: packages ?? ['@bridge-ds/react'],\n components: components.sort(),\n ...(config.audit?.foreignLibraries ? { foreignLibraries: config.audit.foreignLibraries } : {}),\n ...(config.audit?.nativeElements ? { nativeElements: config.audit.nativeElements } : {}),\n });\n const loaded = { root: abs, config, set, index };\n cache.set(abs, loaded);\n return loaded;\n}\n\n/** Auditable files under `target` (a folder or a single file), repo-relative to it. */\nexport function collectAuditFiles(target: string, exclude: string[] = []): { root: string; files: { path: string; text: string }[]; skipped: number } {\n const abs = resolve(target);\n if (statSync(abs).isFile()) return { root: dirname(abs), files: [{ path: toPosix(relative(dirname(abs), abs)), text: readFileSync(abs, 'utf8') }], skipped: 0 };\n const all: string[] = [];\n walk(abs, abs, all, AUDIT_IGNORE_DIRS);\n const ex = exclude.map(globToRegExp);\n const files: { path: string; text: string }[] = [];\n let skipped = 0;\n for (const p of all.sort()) {\n if (!isAuditable(p) || ex.some((r) => r.test(p))) continue;\n const full = join(abs, p);\n if (statSync(full).size > 512 * 1024) {\n skipped++;\n continue;\n }\n files.push({ path: p, text: readFileSync(full, 'utf8') });\n }\n return { root: abs, files, skipped };\n}\n\nexport interface RunAuditOptions {\n /** Design system repo root (with bridge.config.json). Default: nearest one above the current directory. */\n ds?: string;\n label?: string;\n baseline?: AuditReport;\n version?: string;\n /** Path recorded in the report (default: target relative to cwd). */\n displayPath?: string;\n exclude?: string[];\n /** Known violations left out of the counts, each with a reason (see loadAllowlist). */\n allowlist?: AllowlistEntry[];\n}\n\n/** Read an allowlist file: `{ \"entries\": [{ \"file\", \"line\", \"what\"?, \"reason\" }] }`, paths relative to the audited folder. */\nexport function loadAllowlist(path: string): AllowlistEntry[] {\n return parseAllowlist(JSON.parse(readFileSync(path, 'utf8')));\n}\n\n/** Audit a product folder against a design system. */\nexport function runAudit(target: string, opts: RunAuditOptions = {}): AuditReport {\n const dsRoot = opts.ds ?? findDesignSystemRoot(process.cwd());\n if (!dsRoot) throw new Error('No design system found: run from a repo with bridge.config.json or pass --ds <dir>.');\n const ds = loadDesignSystem(dsRoot);\n const { files, skipped } = collectAuditFiles(target, [...(ds.config.audit?.exclude ?? []), ...(opts.exclude ?? [])]);\n const report = buildAuditReport(\n { files, skipped, target: opts.displayPath ?? (toPosix(relative(process.cwd(), resolve(target))) || '.'), ...(opts.label ? { label: opts.label } : {}), ...(opts.version ? { version: opts.version } : {}), ...(opts.allowlist ? { allowlist: opts.allowlist } : {}) },\n ds.index,\n );\n return opts.baseline ? compareWithBaseline(report, opts.baseline) : report;\n}\n\n/**\n * Plan (and optionally write) the safe CSS autofix for every CSS/SCSS/Less file under `target`, with the audit's own\n * rules: the files bridge.config.json excludes from the audit (audit.exclude) are left alone, and so are the values an\n * ignore comment or the allowlist keeps (returned in `kept`).\n */\nexport function fixCss(\n target: string,\n ds: DesignSystemIndex,\n write: boolean,\n opts: { exclude?: string[] | undefined; allowlist?: AllowlistEntry[] | undefined } = {},\n): { file: string; edits: CssFixEdit[]; kept: CssFixKept[] }[] {\n const { root, files } = collectAuditFiles(target, opts.exclude ?? []);\n const out: { file: string; edits: CssFixEdit[]; kept: CssFixKept[] }[] = [];\n for (const f of files) {\n const lang = f.path.endsWith('.scss') || f.path.endsWith('.sass') ? 'scss' : f.path.endsWith('.less') ? 'less' : f.path.endsWith('.css') ? 'css' : null;\n if (!lang) continue;\n const allowlist = (opts.allowlist ?? []).filter((e) => toPosix(e.file) === f.path);\n const plan = planCssFixes(f.text, lang, ds, { allowlist });\n if (!plan.edits.length && !plan.kept.length) continue;\n if (write && plan.edits.length) writeFileSync(join(root, f.path), plan.output);\n out.push({ file: f.path, edits: plan.edits, kept: plan.kept });\n }\n return out;\n}\n","// A small CSS cascade for component specs: parses CSS modules into rules, matches selectors against a simplified\n// element tree in a given interaction state (default, hover, pressed, disabled) and computes each element's values with\n// inheritance. Enough for token-only component CSS (classes, attributes, :hover, :not(), :has(), combinators, @media);\n// it is not a browser. Pure: no DOM, no Node API.\n\nexport interface CssDecl {\n prop: string;\n value: string;\n}\n\nexport interface CssRule {\n /** CSS module the rule comes from (class names are scoped to it). */\n module: string;\n selector: Complex;\n /** Selector as written, for reports. */\n text: string;\n decls: CssDecl[];\n specificity: [number, number, number];\n order: number;\n}\n\ntype Simple =\n | { t: 'class'; name: string }\n | { t: 'tag'; name: string }\n | { t: 'any' }\n | { t: 'attr'; name: string; value?: string | undefined }\n | { t: 'pseudo'; name: string; args?: Complex[] | undefined }\n | { t: 'element'; name: string };\n\ntype Combinator = ' ' | '>' | '+' | '~';\n\nexport interface Complex {\n /** Left to right. The first part's combinator only matters in :has() (relative selectors). */\n parts: { combinator: Combinator | null; compound: Simple[] }[];\n}\n\n/** An element of a component's rendered tree, as the cascade sees it. */\nexport interface CssElement {\n tag: string;\n /** Module-scoped class names: \"<module>|<class>\". */\n classes: Set<string>;\n parent?: CssElement | undefined;\n children: CssElement[];\n /** Optional parts (hidden by default) do not exist for :has(), sibling and child-position selectors. */\n present: boolean;\n isRoot: boolean;\n /** A text field: matches input, :disabled, [data-disabled] in the disabled state, ::placeholder. */\n inputLike: boolean;\n /**\n * A Base UI part (`<BaseCheckbox.Root>`, `<BaseSwitch.Thumb>`): carries the data attributes Base UI sets from the\n * component's state (data-checked, data-unchecked, data-indeterminate, data-disabled).\n */\n baseUi?: boolean | undefined;\n /** Base UI parts: their checked state, the drawn one (\"state\") or their own (a checked option in a group). */\n checked?: 'state' | 'true' | 'false' | 'mixed' | undefined;\n /** data-* and aria-* attributes the JSX sets for the props drawn (`data-invalid={invalid || undefined}`), as strings. */\n attrs?: Map<string, string> | undefined;\n}\n\nexport interface CssState {\n hover: boolean;\n active: boolean;\n disabled: boolean;\n /** Checked state Base UI parts and native checkboxes carry: undefined when the component has none. */\n checked?: 'true' | 'false' | 'mixed' | undefined;\n}\n\nexport const DEFAULT_STATE: CssState = { hover: false, active: false, disabled: false };\n\n// ---------------------------------------------------------------------------------------------\n// Parsing\n\n/** Splits on `sep` at depth 0 (outside parentheses, brackets and quotes). */\nexport function splitTop(text: string, sep: string | RegExp): string[] {\n const out: string[] = [];\n let depth = 0;\n let quote = '';\n let buf = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n buf += ch;\n if (ch === quote) quote = '';\n continue;\n }\n if (ch === '\"' || ch === \"'\") quote = ch;\n else if (ch === '(' || ch === '[') depth++;\n else if (ch === ')' || ch === ']') depth--;\n if (depth === 0 && (typeof sep === 'string' ? ch === sep : sep.test(ch))) {\n out.push(buf);\n buf = '';\n continue;\n }\n buf += ch;\n }\n out.push(buf);\n return out.map((s) => s.trim()).filter(Boolean);\n}\n\n/** Parses one complex selector (\"a > .b:hover .c\"). Throws on syntax it does not know. */\nexport function parseSelector(text: string): Complex {\n let i = 0;\n const s = text.trim();\n const parts: Complex['parts'] = [];\n let combinator: Combinator | null = null;\n const ident = () => {\n const m = /^-?[A-Za-z_][\\w-]*/.exec(s.slice(i));\n if (!m) throw new Error(`Unexpected \"${s.slice(i, i + 12)}\" in selector \"${text}\"`);\n i += m[0].length;\n return m[0];\n };\n const parenArgs = () => {\n // s[i] === '('\n let depth = 0;\n const start = i + 1;\n for (; i < s.length; i++) {\n if (s[i] === '(') depth++;\n else if (s[i] === ')' && --depth === 0) break;\n }\n const inner = s.slice(start, i);\n i++; // ')'\n return inner;\n };\n while (i < s.length) {\n const compound: Simple[] = [];\n for (;;) {\n const ch = s[i];\n if (ch === '.') {\n i++;\n compound.push({ t: 'class', name: ident() });\n } else if (ch === '#') {\n i++;\n compound.push({ t: 'attr', name: 'id', value: ident() });\n } else if (ch === '*') {\n i++;\n compound.push({ t: 'any' });\n } else if (ch === '[') {\n const end = s.indexOf(']', i);\n const inner = s.slice(i + 1, end);\n i = end + 1;\n const m = /^\\s*([\\w-]+)\\s*(?:[~|^$*]?=\\s*[\"']?([^\"'\\]]*)[\"']?)?\\s*$/.exec(inner);\n compound.push({ t: 'attr', name: m?.[1] ?? inner, value: m?.[2] });\n } else if (ch === ':' && s[i + 1] === ':') {\n i += 2;\n compound.push({ t: 'element', name: ident() });\n } else if (ch === ':') {\n i++;\n const name = ident();\n if (s[i] === '(') {\n const inner = parenArgs();\n const args = ['not', 'is', 'where', 'has', 'matches'].includes(name) ? splitTop(inner, ',').map(parseRelative) : undefined;\n compound.push({ t: 'pseudo', name, args });\n } else compound.push({ t: 'pseudo', name });\n } else if (ch && /[A-Za-z]/.test(ch)) {\n compound.push({ t: 'tag', name: ident().toLowerCase() });\n } else break;\n }\n if (!compound.length) throw new Error(`Empty compound in selector \"${text}\"`);\n parts.push({ combinator, compound });\n // Combinator\n const rest = /^\\s*([>+~])?\\s*/.exec(s.slice(i))!;\n if (i + rest[0].length >= s.length) break;\n combinator = (rest[1] as Combinator | undefined) ?? ' ';\n if (!rest[0].length) throw new Error(`Unexpected \"${s.slice(i, i + 12)}\" in selector \"${text}\"`);\n i += rest[0].length;\n }\n return { parts };\n}\n\n/** A selector inside :has() may start with a combinator (\"> .icon\"). */\nfunction parseRelative(text: string): Complex {\n const m = /^\\s*([>+~])\\s*/.exec(text);\n const c = parseSelector(m ? text.slice(m[0].length) : text);\n c.parts[0]!.combinator = (m?.[1] as Combinator | undefined) ?? ' ';\n return c;\n}\n\nfunction specificityOf(c: Complex): [number, number, number] {\n const sp: [number, number, number] = [0, 0, 0];\n const add = (x: [number, number, number]) => {\n sp[0] += x[0];\n sp[1] += x[1];\n sp[2] += x[2];\n };\n for (const p of c.parts)\n for (const s of p.compound) {\n if (s.t === 'class') sp[1]++;\n else if (s.t === 'attr') s.name === 'id' ? sp[0]++ : sp[1]++;\n else if (s.t === 'tag' || s.t === 'element') sp[2]++;\n else if (s.t === 'pseudo') {\n if (s.name === 'where') continue;\n if (s.args) {\n const best = s.args.map(specificityOf).sort(cmpSpec).pop();\n if (best) add(best);\n } else sp[1]++;\n }\n }\n return sp;\n}\n\nconst cmpSpec = (a: [number, number, number], b: [number, number, number]) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\n/**\n * The viewport width a component in Figma is drawn for: the one Storybook renders the code images at\n * (@bridge-ds/visual references, 1200 x 800). Width media queries are read against it.\n */\nexport const SPEC_VIEWPORT_WIDTH = 1200;\n\n/**\n * Media queries a component in Figma is drawn under: a mouse (hover: hover), a screen, and a viewport\n * SPEC_VIEWPORT_WIDTH wide (`min-width` and `max-width` in px, alone or joined with `and`). Nothing else.\n */\nexport function mediaApplies(query: string): boolean {\n const q = query.replace(/\\s+/g, ' ').trim().toLowerCase();\n if (q.startsWith('@supports')) return true;\n const cond = q.replace(/^@media /, '');\n return cond.split(' and ').every((c) => {\n if (/^\\((any-)?hover: ?hover\\)$/.test(c) || c === 'screen' || c === 'all') return true;\n const w = /^\\((min|max)-width: ?([\\d.]+)px\\)$/.exec(c);\n if (!w) return false;\n return w[1] === 'min' ? SPEC_VIEWPORT_WIDTH >= Number(w[2]) : SPEC_VIEWPORT_WIDTH <= Number(w[2]);\n });\n}\n\n/** Rules of one CSS module, in source order. `@media` blocks are kept only when they apply in Figma. */\nexport function parseCssModule(module: string, text: string, startOrder = 0): { rules: CssRule[]; errors: string[] } {\n const rules: CssRule[] = [];\n const errors: string[] = [];\n let order = startOrder;\n const clean = text.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const walk = (src: string) => {\n let i = 0;\n let buf = '';\n while (i < src.length) {\n const ch = src[i]!;\n if (ch !== '{') {\n if (ch === ';' && buf.trim().startsWith('@')) buf = ''; // @import, @charset\n else buf += ch;\n i++;\n continue;\n }\n const head = buf.trim();\n buf = '';\n let depth = 1;\n const start = ++i;\n while (i < src.length && depth > 0) {\n if (src[i] === '{') depth++;\n else if (src[i] === '}') depth--;\n i++;\n }\n const inner = src.slice(start, i - 1);\n if (head.startsWith('@')) {\n if (/^@(media|supports)/.test(head) && mediaApplies(head)) walk(inner);\n continue;\n }\n const decls = splitTop(inner, ';')\n .map((d) => {\n const c = d.indexOf(':');\n return c < 0 ? undefined : { prop: d.slice(0, c).trim().toLowerCase(), value: d.slice(c + 1).trim().replace(/\\s*!important$/, '') };\n })\n .filter((d): d is CssDecl => !!d && !!d.prop);\n for (const sel of splitTop(head, ',')) {\n try {\n const selector = parseSelector(sel);\n rules.push({ module, selector, text: sel.replace(/\\s+/g, ' '), decls, specificity: specificityOf(selector), order: order++ });\n } catch (err) {\n errors.push(`${module}: ${(err as Error).message}`);\n }\n }\n }\n };\n walk(clean);\n return { rules, errors };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Matching\n\nconst TAG_ALIASES: Record<string, string[]> = {\n input: ['input', 'baseinput'],\n textarea: ['textarea'],\n button: ['button', 'basebutton'],\n svg: ['svg'],\n};\n\nfunction tagMatches(el: CssElement, name: string): boolean {\n const tag = el.tag.toLowerCase();\n return (TAG_ALIASES[name] ?? [name]).includes(tag) || (name === 'input' && el.inputLike);\n}\n\nconst presentChildren = (el: CssElement) => el.children.filter((c) => c.present);\n\nfunction siblingsBefore(el: CssElement): CssElement[] {\n if (!el.parent) return [];\n const sibs = presentChildren(el.parent);\n const idx = sibs.indexOf(el);\n return idx < 0 ? [] : sibs.slice(0, idx);\n}\n\n/** Base UI's checked attributes for a state: data-checked, data-unchecked or data-indeterminate, and aria-checked. */\nfunction checkedAttr(name: string, checked: CssState['checked']): string | undefined {\n if (checked === undefined) return undefined;\n if (name === 'aria-checked') return checked;\n if (name === 'data-checked' || name === 'data-selected' || name === 'data-active') return checked === 'true' ? '' : undefined;\n if (name === 'data-unchecked') return checked === 'false' ? '' : undefined;\n if (name === 'data-indeterminate') return checked === 'mixed' ? '' : undefined;\n return undefined;\n}\n\nfunction attrMatches(el: CssElement, s: Extract<Simple, { t: 'attr' }>, state: CssState): boolean {\n switch (s.name) {\n case 'data-disabled':\n case 'disabled':\n return state.disabled && (el.isRoot || el.inputLike || !!el.baseUi);\n default: {\n // Base UI parts carry the checked state; any element carries the data-* and aria-* attributes its JSX sets.\n const own = el.checked === 'state' || (el.inputLike && el.checked === undefined) ? state.checked : el.checked;\n const fromState = el.baseUi || el.inputLike ? checkedAttr(s.name, own) : undefined;\n const v = fromState ?? el.attrs?.get(s.name);\n // data-loading, data-pressed, data-popup-open...: not set by the drawn props, so not part of the drawn states.\n if (v === undefined) return false;\n return s.value === undefined || s.value === v;\n }\n }\n}\n\nfunction pseudoMatches(el: CssElement, s: Extract<Simple, { t: 'pseudo' }>, state: CssState, module: string): boolean {\n switch (s.name) {\n case 'hover':\n return state.hover;\n case 'active':\n return state.active;\n case 'disabled':\n return state.disabled && (el.isRoot || el.inputLike);\n case 'enabled':\n return !state.disabled;\n case 'placeholder-shown':\n return el.inputLike;\n case 'checked':\n return (el.inputLike || !!el.baseUi) && (el.checked === 'state' || el.checked === undefined ? state.checked : el.checked) === 'true';\n case 'indeterminate':\n return (el.inputLike || !!el.baseUi) && (el.checked === 'state' || el.checked === undefined ? state.checked : el.checked) === 'mixed';\n case 'not':\n return !(s.args ?? []).some((a) => matchComplex(a, el, state, module));\n case 'is':\n case 'where':\n case 'matches':\n return (s.args ?? []).some((a) => matchComplex(a, el, state, module));\n case 'has':\n return (s.args ?? []).some((a) => hasMatch(a, el, state, module));\n case 'first-child':\n return !!el.parent && presentChildren(el.parent)[0] === el;\n case 'last-child': {\n const sibs = el.parent ? presentChildren(el.parent) : [];\n return sibs[sibs.length - 1] === el;\n }\n case 'only-child':\n return !!el.parent && presentChildren(el.parent).length === 1;\n default:\n // focus, focus-visible, focus-within, checked, invalid...: not drawn.\n return false;\n }\n}\n\nfunction compoundMatches(compound: Simple[], el: CssElement, state: CssState, module: string, pseudoElement?: string): boolean {\n let sawElement = false;\n for (const s of compound) {\n switch (s.t) {\n case 'class':\n if (!el.classes.has(`${module}|${s.name}`)) return false;\n break;\n case 'tag':\n if (!tagMatches(el, s.name)) return false;\n break;\n case 'any':\n break;\n case 'attr':\n if (!attrMatches(el, s, state)) return false;\n break;\n case 'pseudo':\n if (!pseudoMatches(el, s, state, module)) return false;\n break;\n case 'element':\n sawElement = true;\n if (s.name !== pseudoElement) return false;\n break;\n }\n }\n return pseudoElement ? sawElement : !sawElement;\n}\n\nfunction matchAt(c: Complex, i: number, el: CssElement, state: CssState, module: string, anchor?: CssElement, pseudoElement?: string): boolean {\n const part = c.parts[i]!;\n if (!compoundMatches(part.compound, el, state, module, i === c.parts.length - 1 ? pseudoElement : undefined)) return false;\n if (i === 0) {\n if (!anchor) return true;\n switch (part.combinator ?? ' ') {\n case '>':\n return el.parent === anchor;\n case ' ': {\n for (let p = el.parent; p; p = p.parent) if (p === anchor) return true;\n return false;\n }\n case '+':\n return siblingsBefore(el).slice(-1)[0] === anchor;\n case '~':\n return siblingsBefore(el).includes(anchor);\n }\n }\n switch (part.combinator) {\n case '>':\n return !!el.parent && matchAt(c, i - 1, el.parent, state, module, anchor);\n case ' ': {\n for (let p = el.parent; p; p = p.parent) if (matchAt(c, i - 1, p, state, module, anchor)) return true;\n return false;\n }\n case '+': {\n const prev = siblingsBefore(el).slice(-1)[0];\n return !!prev && matchAt(c, i - 1, prev, state, module, anchor);\n }\n case '~':\n return siblingsBefore(el).some((p) => matchAt(c, i - 1, p, state, module, anchor));\n default:\n return false;\n }\n}\n\nexport function matchComplex(c: Complex, el: CssElement, state: CssState, module: string, pseudoElement?: string): boolean {\n return matchAt(c, c.parts.length - 1, el, state, module, undefined, pseudoElement);\n}\n\nfunction descendants(el: CssElement): CssElement[] {\n const out: CssElement[] = [];\n const walk = (e: CssElement) => {\n for (const c of presentChildren(e)) {\n out.push(c);\n walk(c);\n }\n };\n walk(el);\n return out;\n}\n\nfunction hasMatch(c: Complex, anchor: CssElement, state: CssState, module: string): boolean {\n const first = c.parts[0]!.combinator;\n const pool = first === '+' || first === '~' ? (anchor.parent ? presentChildren(anchor.parent) : []) : descendants(anchor);\n return pool.some((el) => matchAt(c, c.parts.length - 1, el, state, module, anchor));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cascade\n\nconst SIDES = ['top', 'right', 'bottom', 'left'] as const;\nconst BORDER_STYLES = new Set(['none', 'hidden', 'solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset']);\n\nfunction boxValues(parts: string[]): [string, string, string, string] | undefined {\n const [a, b = a, c = a, d = b] = parts;\n return a === undefined ? undefined : [a, b!, c!, d!];\n}\n\n/** Expands the shorthands component CSS uses into longhands, so later longhands override them as in a browser. */\nexport function expandDecl(d: CssDecl): CssDecl[] {\n const parts = splitTop(d.value, /\\s/);\n const sides = (prefix: string, suffix: string, vals: string[] | undefined) =>\n vals ? SIDES.map((s, i) => ({ prop: `${prefix}${s}${suffix}`, value: vals[i]! })) : [d];\n switch (d.prop) {\n case 'padding':\n return sides('padding-', '', boxValues(parts));\n case 'padding-inline': {\n const [s, e = s] = parts;\n return [\n { prop: 'padding-left', value: s! },\n { prop: 'padding-right', value: e! },\n ];\n }\n case 'padding-block': {\n const [s, e = s] = parts;\n return [\n { prop: 'padding-top', value: s! },\n { prop: 'padding-bottom', value: e! },\n ];\n }\n case 'padding-inline-start':\n return [{ prop: 'padding-left', value: d.value }];\n case 'padding-inline-end':\n return [{ prop: 'padding-right', value: d.value }];\n case 'padding-block-start':\n return [{ prop: 'padding-top', value: d.value }];\n case 'padding-block-end':\n return [{ prop: 'padding-bottom', value: d.value }];\n case 'border-width':\n return sides('border-', '-width', boxValues(parts));\n case 'border-color':\n return sides('border-', '-color', boxValues(parts));\n case 'border':\n case 'border-top':\n case 'border-right':\n case 'border-bottom':\n case 'border-left': {\n const { width, color } = splitBorder(parts);\n const which = d.prop === 'border' ? SIDES : [d.prop.slice(7) as (typeof SIDES)[number]];\n return which.flatMap((s) => [\n { prop: `border-${s}-width`, value: width },\n { prop: `border-${s}-color`, value: color },\n ]);\n }\n case 'border-inline-start':\n case 'border-inline-end':\n case 'border-block-start':\n case 'border-block-end': {\n // Logical sides, left to right and top to bottom (the components are drawn in a left-to-right file).\n const side = { 'border-inline-start': 'left', 'border-inline-end': 'right', 'border-block-start': 'top', 'border-block-end': 'bottom' }[d.prop]!;\n return expandDecl({ ...d, prop: `border-${side}` });\n }\n case 'inset-block-start':\n return [{ prop: 'top', value: d.value }];\n case 'inset-block-end':\n return [{ prop: 'bottom', value: d.value }];\n case 'inset-inline-start':\n return [{ prop: 'left', value: d.value }];\n case 'inset-inline-end':\n return [{ prop: 'right', value: d.value }];\n case 'inset': {\n const v = boxValues(parts);\n return v ? SIDES.map((side, i) => ({ prop: side, value: v[i]! })) : [d];\n }\n case 'inset-block': {\n const [a, b = a] = parts;\n return [\n { prop: 'top', value: a! },\n { prop: 'bottom', value: b! },\n ];\n }\n case 'inset-inline': {\n const [a, b = a] = parts;\n return [\n { prop: 'left', value: a! },\n { prop: 'right', value: b! },\n ];\n }\n case 'place-items': {\n const [align, justify = align] = parts;\n return [\n { prop: 'align-items', value: align! },\n { prop: 'justify-items', value: justify! },\n ];\n }\n case 'text-decoration': {\n const line = parts.filter((x) => /^(none|underline|overline|line-through)$/.test(x));\n return line.length ? [{ prop: 'text-decoration-line', value: line.join(' ') }] : [d];\n }\n case 'gap': {\n const [row, col = row] = parts;\n return [\n { prop: 'row-gap', value: row! },\n { prop: 'column-gap', value: col! },\n ];\n }\n case 'flex-flow': {\n const out: CssDecl[] = [];\n for (const x of parts) {\n if (/^(row|column)(-reverse)?$/.test(x)) out.push({ prop: 'flex-direction', value: x });\n else if (/wrap/.test(x)) out.push({ prop: 'flex-wrap', value: x });\n }\n return out.length ? out : [d];\n }\n case 'font':\n return d.value === 'inherit' ? ['font-family', 'font-size', 'font-weight', 'line-height'].map((prop) => ({ prop, value: 'inherit' })) : [d];\n default:\n return [d];\n }\n}\n\nfunction splitBorder(parts: string[]): { width: string; color: string } {\n const styleAt = parts.findIndex((p) => BORDER_STYLES.has(p));\n if (styleAt >= 0) {\n const width = parts.slice(0, styleAt).join(' ') || parts.slice(styleAt + 1).find((p) => /width|^\\d/.test(p)) || 'medium';\n const color = parts.slice(styleAt + 1).filter((p) => p !== width).join(' ') || 'currentcolor';\n return { width, color };\n }\n if (parts.length === 1 && (parts[0] === '0' || parts[0] === 'none')) return { width: '0', color: 'currentcolor' };\n const width = parts.find((p) => /width|^\\d/.test(p)) ?? 'medium';\n return { width, color: parts.filter((p) => p !== width).join(' ') || 'currentcolor' };\n}\n\n/** Properties a child inherits from its parent (custom properties always inherit). */\n// text-decoration is not inherited in CSS, but it is drawn through the text of the element's inline children: for\n// the drawn text it behaves as inherited.\nexport const INHERITED = new Set(['color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'cursor', 'white-space', 'visibility', 'text-decoration-line', 'text-decoration-color']);\n\nexport interface Declared {\n prop: string;\n value: string;\n rule: CssRule;\n}\n\n/** Winning declarations for an element (own rules only), keyed by longhand property. */\nexport function declaredFor(rules: CssRule[], el: CssElement, state: CssState, pseudoElement?: string): Map<string, Declared> {\n const matched = rules.filter((r) => matchComplex(r.selector, el, state, r.module, pseudoElement));\n matched.sort((a, b) => cmpSpec(a.specificity, b.specificity) || a.order - b.order);\n const out = new Map<string, Declared>();\n for (const r of matched) for (const d of r.decls) for (const x of expandDecl(d)) out.set(x.prop, { prop: x.prop, value: x.value, rule: r });\n return out;\n}\n\n/** Computed values: inherited ones from the parent, then the element's own declarations (\"inherit\" takes the parent's). */\nexport function computeValues(own: Map<string, Declared>, parent: Map<string, string> | undefined): Map<string, string> {\n const out = new Map<string, string>();\n if (parent) for (const [k, v] of parent) if (k.startsWith('--') || INHERITED.has(k)) out.set(k, v);\n for (const [k, d] of own) {\n // `color: currentcolor` is the parent's color (CSS Color 4), like inherit.\n if (d.value === 'inherit' || (k === 'color' && d.value.trim().toLowerCase() === 'currentcolor')) {\n const pv = parent?.get(k);\n if (pv !== undefined) out.set(k, pv);\n else out.delete(k);\n } else if (k.startsWith('--') && d.value === 'initial') {\n // A custom property reset on purpose (`--_col-width: initial`): a var() of it leaves the property unset.\n out.set(k, 'initial');\n } else if (d.value === 'initial' || d.value === 'unset') out.delete(k);\n else out.set(k, d.value);\n }\n return out;\n}\n","// Motion for component specs: reads the CSS `transition` of the parts that change between two variants (hover, press,\n// checked) and resolves it from the motion tokens to what a Figma prototype plays (Smart animate, a duration in ms and\n// an easing). Also lists the motion Figma cannot play: looping keyframe animations, keyboard focus, popups opening.\n// Pure: no DOM, no Node API.\n\nimport type { SpecEasing, SpecMotionNote, SpecTransition } from '../component-spec';\nimport { type CssRule, splitTop } from './spec-css';\n\n/** A CSS custom property's token, with its value resolved in the default modes (durations and easings). */\nexport interface MotionToken {\n path: string;\n type: string;\n value?: unknown;\n}\n\n/** One entry of a `transition` list: the property, and its duration, easing and delay as written. */\nexport interface TransitionEntry {\n property: string;\n duration: string;\n easing: string;\n delay: string;\n}\n\n/** CSS easing keywords, as cubic beziers (CSS Easing Functions Level 1). */\nconst KEYWORDS: Record<string, [number, number, number, number]> = {\n ease: [0.25, 0.1, 0.25, 1],\n 'ease-in': [0.42, 0, 1, 1],\n 'ease-out': [0, 0, 0.58, 1],\n 'ease-in-out': [0.42, 0, 0.58, 1],\n};\n\n/** Properties that never show in a drawing: not compared between variants. */\nconst SILENT = /^(cursor|pointer-events|user-select|-webkit-.*|transition.*|animation.*|will-change|outline.*|content|touch-action)$/;\n\n/** `var(--x)` replaced by the value of a non-token custom property the element has, recursively. */\nexport function substituteVars(raw: string, computed: Map<string, string>, tokens: Map<string, MotionToken>, depth = 0): string {\n if (depth > 12) return raw;\n return raw.replace(/var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]*(?:\\([^()]*\\)[^()]*)*))?\\)/g, (m, name: string, fallback?: string) => {\n if (tokens.has(name)) return m;\n const v = computed.get(name);\n if (v !== undefined && v !== 'initial') return substituteVars(v, computed, tokens, depth + 1);\n return fallback !== undefined ? substituteVars(fallback.trim(), computed, tokens, depth + 1) : m;\n });\n}\n\nconst isTime = (t: string, tokens: Map<string, MotionToken>) => /^-?[\\d.]+m?s$/i.test(t) || tokens.get(varName(t) ?? '')?.type === 'duration';\nconst varName = (t: string) => /^var\\(\\s*(--[\\w-]+)/.exec(t)?.[1];\n\n/**\n * The transitions an element declares: the `transition` shorthand and the longhands (transition-property, -duration,\n * -timing-function, -delay; shorter lists repeat, as in CSS). Local custom properties are substituted first.\n */\nexport function parseTransitions(computed: Map<string, string>, tokens: Map<string, MotionToken>): TransitionEntry[] {\n const sub = (k: string) => {\n const v = computed.get(k);\n return v === undefined ? undefined : substituteVars(v, computed, tokens);\n };\n const out: TransitionEntry[] = [];\n const short = sub('transition');\n if (short && short !== 'none') {\n for (const item of splitTop(short, ',')) {\n const words = splitTop(item.trim(), /\\s/).filter(Boolean);\n const e: TransitionEntry = { property: 'all', duration: '0s', easing: 'ease', delay: '0s' };\n let times = 0;\n for (const w of words) {\n if (isTime(w, tokens)) {\n if (times++ === 0) e.duration = w;\n else e.delay = w;\n } else if (KEYWORDS[w] || w === 'linear' || /^(cubic-bezier|steps|linear)\\(/.test(w) || /^step-(start|end)$/.test(w) || tokens.get(varName(w) ?? '')?.type === 'cubicBezier') e.easing = w;\n else e.property = w;\n }\n out.push(e);\n }\n }\n const props = sub('transition-property');\n if (props === undefined) return out;\n const list = (k: string, def: string) => {\n const v = sub(k);\n return v === undefined ? [def] : splitTop(v, ',').map((x) => x.trim());\n };\n const durations = list('transition-duration', '0s');\n const easings = list('transition-timing-function', 'ease');\n const delays = list('transition-delay', '0s');\n return splitTop(props, ',')\n .map((p) => p.trim())\n .filter((p) => p && p !== 'none')\n .map((property, i) => ({ property, duration: durations[i % durations.length]!, easing: easings[i % easings.length]!, delay: delays[i % delays.length]! }));\n}\n\n/** A duration as milliseconds, with its token: \"var(--motion-duration-fast)\" -> 150 (motion.duration.fast). */\nexport function resolveDuration(raw: string, tokens: Map<string, MotionToken>): { ms: number; token?: string } | undefined {\n const v = raw.trim();\n const lit = /^(-?[\\d.]+)(m?s)$/i.exec(v);\n if (lit) return { ms: Number(lit[1]) * (lit[2]!.toLowerCase() === 's' ? 1000 : 1) };\n const t = tokens.get(varName(v) ?? '');\n if (!t || t.type !== 'duration') return undefined;\n const value = t.value as { value?: number; unit?: string } | string | undefined;\n if (typeof value === 'string') {\n const r = resolveDuration(value, new Map());\n return r ? { ms: r.ms, token: t.path } : undefined;\n }\n if (value && typeof value.value === 'number') return { ms: value.value * (value.unit === 's' ? 1000 : 1), token: t.path };\n return undefined;\n}\n\n/**\n * An easing Figma can play, with its token: a cubic bezier (token or `cubic-bezier()`, or a CSS keyword) is played\n * exactly as Figma's custom bezier; linear as linear. steps() has no Figma easing: linear, recorded as approximated.\n */\nexport function resolveEasing(raw: string, tokens: Map<string, MotionToken>): { easing: SpecEasing; token?: string; approximated?: string } | undefined {\n const v = raw.trim().toLowerCase();\n const curve = (b: number[]): SpecEasing =>\n b[0] === 0 && b[1] === 0 && b[2] === 1 && b[3] === 1 ? { type: 'LINEAR' } : { type: 'CUSTOM_CUBIC_BEZIER', bezier: [b[0]!, b[1]!, b[2]!, b[3]!] };\n if (v === 'linear') return { easing: { type: 'LINEAR' } };\n if (KEYWORDS[v]) return { easing: curve(KEYWORDS[v]!) };\n const cb = /^cubic-bezier\\(([^)]*)\\)$/.exec(v);\n if (cb) {\n const n = cb[1]!.split(',').map((x) => Number(x.trim()));\n return n.length === 4 && n.every((x) => Number.isFinite(x)) ? { easing: curve(n) } : undefined;\n }\n if (/^(steps\\(|step-(start|end)$)/.test(v)) return { easing: { type: 'LINEAR' }, approximated: `${raw.trim()} moves in steps, Figma has no stepped easing: linear` };\n if (/^linear\\(/.test(v)) return { easing: { type: 'LINEAR' }, approximated: 'a linear() curve has no Figma easing: linear' };\n const t = tokens.get(varName(raw.trim()) ?? '');\n if (!t || t.type !== 'cubicBezier') return undefined;\n const value = t.value;\n if (Array.isArray(value) && value.length === 4 && value.every((x) => typeof x === 'number')) return { easing: curve(value as number[]), token: t.path };\n if (typeof value === 'string') {\n const r = resolveEasing(value, new Map());\n return r ? { ...r, token: t.path } : undefined;\n }\n return undefined;\n}\n\n/** The property a longhand belongs to, without its side: border-top-color -> border-color, padding-left -> padding. */\nexport const shorthandOf = (prop: string) =>\n prop\n .replace(/-(top|bottom)-(left|right)(?=-|$)/, '')\n .replace(/-(top|right|bottom|left)(?=-|$)/, '')\n .replace(/-(block|inline)(-(start|end))?(?=-|$)/, '');\n\n/** The transition entry that animates `prop`: same name, `all`, or a shorthand of it (border-color for border-top-color). */\nexport function entryFor(prop: string, entries: TransitionEntry[]): TransitionEntry | undefined {\n const general = shorthandOf(prop);\n // The last entry naming a property wins, as in CSS.\n for (let i = entries.length - 1; i >= 0; i--) {\n const p = entries[i]!.property;\n if (p === 'all' || p === prop || p === general || prop.startsWith(`${p}-`) || general.startsWith(`${p}-`)) return entries[i];\n }\n return undefined;\n}\n\n/** CSS properties whose value differs between two computed styles of a part (custom properties substituted). */\nexport function changedProperties(from: Map<string, string> | undefined, to: Map<string, string> | undefined, tokens: Map<string, MotionToken>): string[] {\n const a = from ?? new Map<string, string>();\n const b = to ?? new Map<string, string>();\n const out: string[] = [];\n for (const k of new Set([...a.keys(), ...b.keys()])) {\n if (k.startsWith('--') || SILENT.test(k)) continue;\n const x = a.get(k);\n const y = b.get(k);\n if ((x === undefined ? undefined : substituteVars(x, a, tokens)) !== (y === undefined ? undefined : substituteVars(y, b, tokens))) out.push(k);\n }\n return out.sort();\n}\n\nconst fmtMs = (ms: number) => `${Math.round(ms)} ms`;\n\n/**\n * The transition Figma plays when a component goes from one variant to another: for every part, the CSS properties that\n * change, animated by the destination state's `transition` (as in CSS). One duration and easing per reaction in\n * Figma: the longest animated change, recorded as approximated when parts animate at other speeds or with a delay.\n * Null when nothing that changes is animated in code (an instant change).\n */\nexport function transitionBetween(\n from: Map<string, Map<string, string>>,\n to: Map<string, Map<string, string>>,\n tokens: Map<string, MotionToken>,\n): SpecTransition | null {\n const animated: { prop: string; ms: number; durationToken?: string; easing: SpecEasing; easingToken?: string; approximated?: string; delay: number }[] = [];\n for (const id of new Set([...from.keys(), ...to.keys()])) {\n const changed = changedProperties(from.get(id), to.get(id), tokens);\n if (!changed.length) continue;\n const entries = parseTransitions(to.get(id) ?? new Map(), tokens);\n for (const prop of changed) {\n const e = entryFor(prop, entries);\n if (!e) continue;\n const d = resolveDuration(e.duration, tokens);\n const ease = resolveEasing(e.easing, tokens);\n if (!d || d.ms <= 0 || !ease) continue;\n const delay = resolveDuration(e.delay, tokens)?.ms ?? 0;\n animated.push({ prop, ms: d.ms, ...(d.token ? { durationToken: d.token } : {}), easing: ease.easing, ...(ease.token ? { easingToken: ease.token } : {}), ...(ease.approximated ? { approximated: ease.approximated } : {}), delay });\n }\n }\n if (!animated.length) return null;\n const main = animated.reduce((m, x) => (x.ms > m.ms ? x : m), animated[0]!);\n const notes: string[] = [];\n const speeds = new Set(animated.map((x) => `${x.ms}|${JSON.stringify(x.easing)}`));\n if (speeds.size > 1) {\n const others = [...new Set(animated.filter((x) => x.ms !== main.ms).map((x) => fmtMs(x.ms)))];\n notes.push(others.length ? `parts move at ${[fmtMs(main.ms), ...others].join(' and ')} in code, Figma plays one speed: ${fmtMs(main.ms)}` : 'parts use different easings in code, Figma plays one');\n }\n if (animated.some((x) => x.delay > 0)) notes.push('a transition delay in code is not played');\n for (const x of animated) if (x.approximated && !notes.includes(x.approximated)) notes.push(x.approximated);\n return {\n duration: main.ms,\n ...(main.durationToken ? { durationToken: main.durationToken } : {}),\n easing: main.easing,\n ...(main.easingToken ? { easingToken: main.easingToken } : {}),\n properties: [...new Set(animated.map((x) => shorthandOf(x.prop)))].sort(),\n ...(notes.length ? { approximated: notes.join('; ') } : {}),\n };\n}\n\n/** Class names (\"<module>|<class>\") of the last compound of a selector: the element a rule styles. */\nfunction targetClasses(rule: CssRule): string[] {\n const last = rule.selector.parts[rule.selector.parts.length - 1];\n return (last?.compound ?? []).filter((s): s is { t: 'class'; name: string } => s.t === 'class').map((s) => `${rule.module}|${s.name}`);\n}\n\nconst OPEN_ATTR = /\\[data-(starting-style|ending-style|open|closed|popup-open|panel-open|expanded)\\]/;\n\n/**\n * Motion a Figma prototype cannot play, for the parts a set draws (`classes`: their \"<module>|<class>\" names):\n * keyframe animations (a spinner, a shimmer), the keyboard focus ring, and opening or closing (a popup's enter motion,\n * an accordion panel). `view` is the set's view: a popup drawn open, or a trigger without its popup.\n */\nexport function motionNotes(\n rules: CssRule[],\n classes: Set<string>,\n tokens: Map<string, MotionToken>,\n view?: 'popup' | 'without-popup',\n elements: string[][] = [...classes].map((c) => [c]),\n): SpecMotionNote[] {\n const out: SpecMotionNote[] = [];\n const add = (n: SpecMotionNote) => {\n if (!out.some((x) => x.what === n.what)) out.push(n);\n };\n const styled = (r: CssRule) => targetClasses(r).some((c) => classes.has(c));\n const opened = new Set<string>();\n for (const r of rules) {\n if (!styled(r)) continue;\n const values = new Map(r.decls.map((d) => [d.prop, d.value]));\n const anim = values.get('animation') ?? values.get('animation-name');\n if (anim && !/^none\\b/.test(anim.trim())) {\n const words = splitTop(anim.trim(), /\\s/).filter(Boolean);\n const name = values.get('animation-name') ?? words.find((w) => !isTime(w, tokens) && !resolveEasing(w, tokens) && !/^(infinite|\\d+|alternate|reverse|normal|forwards|backwards|both|running|paused)$/.test(w));\n const dur = words.map((w) => resolveDuration(w, tokens)).find(Boolean) ?? (values.get('animation-duration') ? resolveDuration(values.get('animation-duration')!, tokens) : undefined);\n const loops = /\\binfinite\\b/.test(anim) || values.get('animation-iteration-count') === 'infinite';\n add({\n what: `${loops ? 'Looping animation' : 'Keyframe animation'} ${name ?? ''}${dur ? `, ${fmtMs(dur.ms)}` : ''}`.replace(/\\s+,/, ',').trim(),\n reason: loops ? 'a Figma component cannot loop an animation on its own' : 'keyframes have no Figma equivalent between variants',\n ...(dur?.token ? { durationToken: dur.token } : {}),\n });\n }\n if (/:focus(-visible|-within)?\\b/.test(r.text)) add({ what: 'Keyboard focus', reason: 'the focus ring shows when a keyboard moves to the component; Figma prototypes have no focus state' });\n if (OPEN_ATTR.test(r.text)) {\n for (const c of targetClasses(r)) if (classes.has(c)) opened.add(c);\n add({\n what: view === 'popup' ? 'Opening and closing the popup' : 'Opening and closing',\n reason: view === 'popup' ? 'the popup is its own set; a Figma component cannot open another one from its trigger' : 'the open state is not drawn as a variant',\n });\n }\n }\n const note = out.find((n) => n.what.startsWith('Opening and closing'));\n if (note) {\n const { enter, exit } = openingTransitions(rules, elements.filter((el) => el.some((c) => opened.has(c))), tokens);\n if (enter) note.enter = enter;\n if (exit) note.exit = exit;\n }\n return out;\n}\n\nconst ENDING_ATTR = /\\[data-(ending-style|closed)\\]/;\nconst STATE_PSEUDO = /:(hover|active|focus|focus-visible|focus-within|disabled|checked)\\b/;\n\n/**\n * The code's transitions when a part opens and when it closes, for the elements with open-state rules (`elements`, each\n * the \"<module>|<class>\" names one element carries): the\n * destination state's `transition` animates, as in CSS. Opening ends in the base rules plus the open rules\n * ([data-open], [data-panel-open]...); closing ends in the base rules plus [data-ending-style] / [data-closed]. The\n * properties are the ones those rules change. One transition per direction: the longest, as for interactions.\n */\nexport function openingTransitions(rules: CssRule[], elements: string[][], tokens: Map<string, MotionToken>): { enter: SpecTransition | null; exit: SpecTransition | null } {\n type Found = { ms: number; durationToken?: string; easing: SpecEasing; easingToken?: string; props: Set<string> };\n const best: { enter?: Found; exit?: Found } = {};\n for (const el of elements) {\n const mine = rules.filter((r) => targetClasses(r).some((c) => el.includes(c))).sort((a, b) => a.order - b.order);\n // Base: the element at rest, without any state (open, swiping, hover...).\n const base = mine.filter((r) => !/\\[data-/.test(r.text) && !STATE_PSEUDO.test(r.text));\n const states = mine.filter((r) => OPEN_ATTR.test(r.text));\n const opens = states.filter((r) => !/\\[data-(starting-style|ending-style|closed)\\]/.test(r.text));\n const endings = states.filter((r) => ENDING_ATTR.test(r.text));\n const changed = new Set(states.flatMap((r) => r.decls.map((d) => d.prop)).filter((p) => !p.startsWith('--') && !SILENT.test(p)));\n if (!changed.size) continue;\n const settle = (list: CssRule[]) => {\n const computed = new Map<string, string>();\n for (const r of [...list].sort((a, b) => a.order - b.order)) for (const d of r.decls) computed.set(d.prop, d.value);\n return computed;\n };\n const find = (computed: Map<string, string>): Found | undefined => {\n const entries = parseTransitions(computed, tokens);\n let main: Found | undefined;\n const props = new Set<string>();\n for (const prop of changed) {\n const e = entryFor(prop, entries);\n if (!e) continue;\n const d = resolveDuration(e.duration, tokens);\n const ease = resolveEasing(e.easing, tokens);\n if (!d || d.ms <= 0 || !ease) continue;\n props.add(shorthandOf(prop));\n if (!main || d.ms > main.ms) main = { ms: d.ms, ...(d.token ? { durationToken: d.token } : {}), easing: ease.easing, ...(ease.token ? { easingToken: ease.token } : {}), props };\n }\n return main;\n };\n for (const [dir, found] of [['enter', find(settle([...base, ...opens]))], ['exit', find(settle([...base, ...endings]))]] as const) {\n if (!found) continue;\n const cur = best[dir];\n if (!cur || found.ms > cur.ms) best[dir] = { ...found, props: new Set([...(cur?.props ?? []), ...found.props]) };\n else for (const p of found.props) cur.props.add(p);\n }\n }\n const out = (f: Found | undefined): SpecTransition | null =>\n f ? { duration: f.ms, ...(f.durationToken ? { durationToken: f.durationToken } : {}), easing: f.easing, ...(f.easingToken ? { easingToken: f.easingToken } : {}), properties: [...f.props].sort() } : null;\n return { enter: out(best.enter), exit: out(best.exit) };\n}\n","// Component spec generator: reads a component's TSX (props, defaults, rendered tree) and its CSS modules, and derives a\n// ComponentSpec (see ../component-spec.ts) a design tool can rebuild: variant axes from string-literal union props,\n// a State axis from the interaction states the CSS styles, TEXT and BOOLEAN properties, parts (frames, text, icons),\n// and per variant the token path behind every fill, stroke, radius, padding, gap, size and text property.\n//\n// Derived from code, never hand-maintained: `npm run specs` writes packages/react/component-specs.json, and a test\n// fails when the committed file is out of date. Uses the TypeScript parser (Node only, like the audit).\n\nimport { readFileSync, readdirSync, statSync } from 'node:fs';\nimport { join, posix, relative } from 'node:path';\nimport ts from 'typescript';\nimport {\n COLOR_FIELDS,\n COMPONENT_SPECS_VERSION,\n type ComponentSpec,\n type ComponentSpecsFile,\n type SpecAxis,\n type SpecCoverage,\n type SpecExample,\n type SpecField,\n type SpecLayout,\n type SpecPart,\n type SpecIcon,\n type SpecIconStyle,\n type SpecInteraction,\n type SpecTrigger,\n type SpecProperty,\n type SpecSlot,\n type SpecUnmapped,\n type SpecValue,\n type SpecVariant,\n type SpecVector,\n hashSpec,\n iconComponentName,\n specHash,\n validateComponentSpec,\n tokenCssVar,\n variantKeyOf,\n} from '../component-spec';\nimport { CONFIG_FILE, loadConfig } from '../config';\nimport { resolve } from '../resolver';\nimport { buildTokenSet, defaultContext, layoutOptions } from '../token-set';\nimport { type CssElement, type CssRule, type CssState, DEFAULT_STATE, computeValues, declaredFor, parseCssModule, splitTop } from './spec-css';\nimport { motionNotes, transitionBetween } from './spec-motion';\n\nexport interface TokenInfo {\n path: string;\n type: string;\n /** Durations and easings: the value in the default modes (`{ value: 150, unit: 'ms' }`, `[0.2, 0, 0, 1]`), for motion. */\n value?: unknown;\n}\n\nexport interface SpecGeneratorOptions {\n /** Repo-relative components directory (\"packages/react/src/components\"). */\n componentsDir: string;\n /** Reads a repo-relative file; undefined when it does not exist. */\n read: (path: string) => string | undefined;\n /** CSS custom property -> token. */\n tokens: Map<string, TokenInfo>;\n styleSuffix?: string | undefined;\n /** Repo-relative ESM build of lucide-react (\"node_modules/lucide-react/dist/esm\"), for the icons section. */\n lucideDir?: string | undefined;\n /** Every component folder, to find components a file exports besides its own (Radio in RadioGroup.tsx). */\n components?: string[] | undefined;\n /** Repo-relative global stylesheet apps load before the components (inherited text styles, tag rules). */\n baseCss?: string | undefined;\n /** Repo-relative folder of specs drafted with Claude; default `component-spec-overrides` next to the specs file. */\n overridesDir?: string | undefined;\n}\n\n/** States drawn as the State axis when the CSS styles them, with the selector state they stand for. */\nconst STATES: { name: string; state: CssState }[] = [\n { name: 'Default', state: DEFAULT_STATE },\n { name: 'Hover', state: { hover: true, active: false, disabled: false } },\n { name: 'Pressed', state: { hover: true, active: true, disabled: false } },\n { name: 'Disabled', state: { hover: false, active: false, disabled: true } },\n];\n\n/** Most variants a set may get; a component past it is reported instead of generated. */\nconst MAX_VARIANTS = 240;\n\n/** CSS properties that matter visually but have no mapping in this version. Others (cursor, transition...) are silent. */\nconst REPORTED: Record<string, string> = {\n 'box-shadow': 'shadows are code-only tokens (no Figma variable)',\n outline: 'focus rings are not drawn',\n transform: 'transforms are not drawn',\n filter: 'filters are not drawn',\n 'margin-left': 'margins have no auto layout equivalent',\n 'margin-right': 'margins have no auto layout equivalent',\n margin: 'margins have no auto layout equivalent',\n 'margin-inline-start': 'margins have no auto layout equivalent',\n};\n\n// ---------------------------------------------------------------------------------------------\n// TSX reading\n\ntype PropKind = 'union' | 'boolean' | 'icon' | 'node' | 'string' | 'function' | 'other';\n\ninterface PropInfo {\n name: string;\n kind: PropKind;\n values?: string[] | undefined;\n optional: boolean;\n}\n\ninterface ComponentSource {\n name: string;\n /** Component folder the file lives in (\"RadioGroup\" for Radio). */\n folder: string;\n file: string;\n sf: ts.SourceFile;\n /** Import identifier -> repo-relative CSS module path. */\n styles: Map<string, string>;\n props: Map<string, PropInfo>;\n /** Native element the props extend (button, input, span...), from `extends ButtonHTMLAttributes<...>`. */\n native: string | undefined;\n fn: ts.FunctionLikeDeclaration | undefined;\n /** Other exported forwardRef components in the file (CardHeader, CardBody...). */\n subcomponents: { name: string; fn: ts.FunctionLikeDeclaration }[];\n /** Every exported component of the file, by name (Radio in RadioGroup.tsx). */\n exported: Map<string, ts.FunctionLikeDeclaration>;\n /** Identifiers imported from @base-ui/react: their elements carry Base UI's state attributes. */\n baseUi: Set<string>;\n /** Plain helper functions of the file (`initials(name)`), callable with literal arguments. */\n helpers: Map<string, ts.FunctionDeclaration>;\n /** Local name -> lucide-react export, for icons the component draws itself (a checkbox's check mark). */\n lucide: Map<string, string>;\n /** Top-level consts of the file (`const TONE_ICON = { ... }`). */\n consts: Map<string, ts.Expression>;\n /** Base UI modules the file imports (\"checkbox\", \"switch\", \"progress\"). */\n baseUiModules: Set<string>;\n /** Top-level consts holding a function (`const defaultTitle = (n) => ...`): callable values. */\n fnConsts: Map<string, ts.ArrowFunction | ts.FunctionExpression>;\n /**\n * Functions imported from the package's own plain modules (`swatchColor` from ../../utils/color): modules with no\n * imports and no JSX, run as they are, called with data.\n */\n imported: Map<string, (...args: unknown[]) => unknown>;\n}\n\nconst NATIVE_ATTRS: Record<string, string> = {\n ButtonHTMLAttributes: 'button',\n InputHTMLAttributes: 'input',\n TextareaHTMLAttributes: 'textarea',\n AnchorHTMLAttributes: 'a',\n HTMLAttributes: 'element',\n};\n\nfunction unquote(s: string): string {\n return s.replace(/^['\"`]|['\"`]$/g, '');\n}\n\nclass Reader {\n private cache = new Map<string, ComponentSource | null>();\n private aliasCache = new Map<string, Map<string, string>>();\n private elements = new Map<string, Map<string, string>>();\n constructor(private opts: SpecGeneratorOptions) {}\n\n /**\n * The element a Base UI part renders (\"Increment\" -> \"button\"), as Base UI's own docs say it\n * (node_modules/@base-ui/react/docs/react/components/<module>.md: \"### Increment ... Renders a `<button>` element\").\n */\n baseUiElement(modules: Iterable<string>, part: string): string | undefined {\n for (const m of modules) {\n let parts = this.elements.get(m);\n if (!parts) {\n parts = new Map();\n const text = this.opts.read(`node_modules/@base-ui/react/docs/react/components/${m}.md`) ?? '';\n // \"### Increment\", a line or two about it, then \"Renders a `<button>` element.\" (before the next heading).\n for (const hit of text.matchAll(/^### ([\\w.]+)\\n(?:(?!#)[^\\n]*\\n){0,6}?Renders an? `<([a-z0-9-]+)>` element/gm)) parts.set(hit[1]!, hit[2]!);\n this.elements.set(m, parts);\n }\n const el = parts.get(part);\n if (el) return el;\n }\n return undefined;\n }\n\n private dirOf(name: string) {\n return `${this.opts.componentsDir}/${name}`;\n }\n\n /** Export name -> component folder, for components a file exports besides its own (Radio in RadioGroup). */\n private exportIndex: Map<string, string> | undefined;\n\n /** The folder a component comes from: its own, or the folder whose file exports it. */\n folderOf(name: string): string | undefined {\n if (this.opts.read(`${this.dirOf(name)}/${name}.tsx`) !== undefined) return name;\n if (!this.exportIndex) {\n this.exportIndex = new Map();\n for (const folder of this.opts.components ?? []) {\n const text = this.opts.read(`${this.dirOf(folder)}/${folder}.tsx`) ?? '';\n for (const m of text.matchAll(/forwardRef[^(]*\\(\\s*function\\s+([A-Z]\\w*)|export function ([A-Z]\\w*)/g)) {\n const n = (m[1] ?? m[2])!;\n if (n !== folder && !this.exportIndex.has(n)) this.exportIndex.set(n, folder);\n }\n }\n }\n return this.exportIndex.get(name);\n }\n\n exists(name: string): boolean {\n return this.folderOf(name) !== undefined;\n }\n\n /** `export type X = ...` of a component file and of the component files it imports from. */\n private aliases(file: string, sf: ts.SourceFile, depth = 0): Map<string, string> {\n if (this.aliasCache.has(file)) return this.aliasCache.get(file)!;\n const out = new Map<string, string>();\n this.aliasCache.set(file, out);\n for (const st of sf.statements) {\n if (ts.isTypeAliasDeclaration(st)) out.set(st.name.text, st.type.getText(sf));\n if (ts.isImportDeclaration(st) && depth < 2) {\n const spec = unquote(st.moduleSpecifier.getText(sf));\n const m = /^\\.\\.\\/(\\w+)$/.exec(spec);\n if (!m) continue;\n const other = `${this.dirOf(m[1]!)}/${m[1]}.tsx`;\n const text = this.opts.read(other);\n if (!text) continue;\n const osf = ts.createSourceFile(other, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n for (const [k, v] of this.aliases(other, osf, depth + 1)) if (!out.has(k)) out.set(k, v);\n }\n }\n return out;\n }\n\n load(name: string): ComponentSource | null {\n if (this.cache.has(name)) return this.cache.get(name)!;\n const folder = this.folderOf(name);\n const file = `${this.dirOf(folder ?? name)}/${folder ?? name}.tsx`;\n const text = folder ? this.opts.read(file) : undefined;\n if (text === undefined) {\n this.cache.set(name, null);\n return null;\n }\n const sf = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n const styles = new Map<string, string>();\n const baseUi = new Set<string>();\n const helpers = new Map<string, ts.FunctionDeclaration>();\n const lucide = new Map<string, string>();\n const consts = new Map<string, ts.Expression>();\n const baseUiModules = new Set<string>();\n const fnConsts = new Map<string, ts.ArrowFunction | ts.FunctionExpression>();\n const imported = new Map<string, (...args: unknown[]) => unknown>();\n for (const st of sf.statements) {\n if (ts.isVariableStatement(st))\n for (const d of st.declarationList.declarations) {\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n const init = skipCasts(d.initializer);\n if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) fnConsts.set(d.name.text, init);\n else if (!/forwardRef|^\\(/.test(d.initializer.getText(sf).slice(0, 12))) consts.set(d.name.text, d.initializer);\n }\n if (ts.isFunctionDeclaration(st) && st.name && /^[a-z]/.test(st.name.text) && st.body) helpers.set(st.name.text, st);\n if (!ts.isImportDeclaration(st) || !st.importClause) continue;\n const spec = unquote(st.moduleSpecifier.getText(sf));\n // A plain module of the package (utils): its functions run as they are.\n if (spec.startsWith('.') && !/\\.css$/.test(spec) && !/^\\.\\.\\/\\w+$/.test(spec)) {\n const b = st.importClause.namedBindings;\n const mod = b && ts.isNamedImports(b) ? this.plainModule(posix.normalize(posix.join(this.dirOf(folder!), spec))) : undefined;\n if (mod && b && ts.isNamedImports(b))\n for (const e of b.elements) {\n const f = mod[(e.propertyName ?? e.name).text];\n if (typeof f === 'function') imported.set(e.name.text, f as (...args: unknown[]) => unknown);\n }\n }\n if (spec === 'lucide-react') {\n const b = st.importClause.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) lucide.set(e.name.text, (e.propertyName ?? e.name).text);\n continue;\n }\n if (spec.startsWith('@base-ui/react')) {\n baseUiModules.add(spec.replace(/^@base-ui\\/react\\/?/, ''));\n const b = st.importClause.namedBindings;\n if (st.importClause.name) baseUi.add(st.importClause.name.text);\n if (b && ts.isNamedImports(b)) for (const e of b.elements) baseUi.add(e.name.text);\n continue;\n }\n if (!st.importClause.name || !spec.endsWith(this.opts.styleSuffix ?? '.module.css')) continue;\n styles.set(st.importClause.name.text, posix.normalize(posix.join(this.dirOf(folder!), spec)));\n }\n const aliases = this.aliases(file, sf);\n const props = new Map<string, PropInfo>();\n let native: string | undefined;\n const iface = sf.statements.find((s): s is ts.InterfaceDeclaration => ts.isInterfaceDeclaration(s) && s.name.text === `${name}Props`);\n if (iface) {\n for (const h of iface.heritageClauses ?? []) {\n const txt = h.getText(sf);\n for (const [k, v] of Object.entries(NATIVE_ATTRS)) if (txt.includes(k)) native ??= v;\n }\n for (const m of iface.members) {\n if (!ts.isPropertySignature(m) || !m.type) continue;\n const pname = m.name.getText(sf);\n props.set(pname, { name: pname, optional: !!m.questionToken, ...classifyType(m.type.getText(sf), aliases) });\n }\n }\n const fns = componentFunctions(sf);\n const fn = fns.get(name);\n const subcomponents = [...fns].filter(([n]) => n !== name && n.startsWith(name)).map(([n, f]) => ({ name: n, fn: f }));\n const src: ComponentSource = { name, folder: folder!, file, sf, styles, props, native, fn, subcomponents, exported: fns, baseUi, helpers, lucide, consts, baseUiModules, fnConsts, imported };\n this.cache.set(name, src);\n return src;\n }\n\n private modules = new Map<string, Record<string, unknown> | undefined>();\n\n /**\n * Exports of a plain module of the package (`utils/color.ts`): no imports, no JSX, so it runs on its own. Undefined\n * for anything else (a module that imports React or another file).\n */\n plainModule(path: string): Record<string, unknown> | undefined {\n if (this.modules.has(path)) return this.modules.get(path);\n let out: Record<string, unknown> | undefined;\n const text = this.opts.read(`${path}.ts`) ?? this.opts.read(`${path}/index.ts`);\n if (text !== undefined) {\n const sf = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n // A .ts file has no JSX; it must not import anything (React, other files) to run on its own.\n const plain = !sf.statements.some((s) => ts.isImportDeclaration(s) || (ts.isExportDeclaration(s) && !!s.moduleSpecifier));\n if (plain) {\n try {\n const js = ts.transpileModule(text, { compilerOptions: { target: ts.ScriptTarget.ES2020, module: ts.ModuleKind.CommonJS } }).outputText;\n const exports: Record<string, unknown> = {};\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n new Function('exports', 'module', js)(exports, { exports });\n out = exports;\n } catch {\n out = undefined;\n }\n }\n }\n this.modules.set(path, out);\n return out;\n }\n}\n\n/** The expression under casts and parentheses (`(x as T)`, `x satisfies T`). */\nfunction skipCasts(e: ts.Expression): ts.Expression {\n while (ts.isParenthesizedExpression(e) || ts.isAsExpression(e) || ts.isSatisfiesExpression(e) || ts.isNonNullExpression(e)) e = e.expression;\n return e;\n}\n\nfunction classifyType(text: string, aliases: Map<string, string>, depth = 0): { kind: PropKind; values?: string[] } {\n const t = text.trim();\n if (aliases.has(t) && depth < 4) return classifyType(aliases.get(t)!, aliases, depth + 1);\n const parts = t.split('|').map((p) => p.trim());\n if (parts.length > 1 && parts.every((p) => /^'[^']*'$/.test(p))) return { kind: 'union', values: parts.map(unquote) };\n if (t === 'boolean') return { kind: 'boolean' };\n if (t === 'LucideIcon') return { kind: 'icon' };\n if (/^(ReactNode|ReactElement|React\\.ReactNode)$/.test(t)) return { kind: 'node' };\n if (t === 'string') return { kind: 'string' };\n if (t.includes('=>')) return { kind: 'function' };\n return { kind: 'other' };\n}\n\n/** Exported components of a file: `forwardRef(function Name(...))` or `function Name(...)`. */\nfunction componentFunctions(sf: ts.SourceFile): Map<string, ts.FunctionLikeDeclaration> {\n const out = new Map<string, ts.FunctionLikeDeclaration>();\n const visit = (n: ts.Node) => {\n if (ts.isFunctionExpression(n) && n.name && /^[A-Z]/.test(n.name.text) && ts.isCallExpression(n.parent) && /forwardRef/.test(n.parent.expression.getText(sf))) {\n if (!out.has(n.name.text)) out.set(n.name.text, n);\n } else if (ts.isFunctionDeclaration(n) && n.name && /^[A-Z]/.test(n.name.text) && n.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {\n if (!out.has(n.name.text)) out.set(n.name.text, n);\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n return out;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Evaluating a component for a set of props\n\nconst CHILDREN = Symbol('children');\nconst OPAQUE = Symbol('opaque');\n\ninterface ClassRef {\n cls: string;\n}\ninterface StylesRef {\n module: string;\n}\ninterface JsxRef {\n jsx: ts.Node;\n scope: Scope;\n}\n\n/** Content of a node prop the main component draws as text (\"label\"): a TEXT property with a default. */\ninterface TextRef {\n textProp: string;\n text: string;\n}\n\n/** A function as a value (a default prop `errorSummaryTitle = defaultTitle`, an arrow passed as a prop): callable. */\ninterface FnRef {\n fnRef: ts.ArrowFunction | ts.FunctionExpression | ts.FunctionDeclaration;\n scope: Scope;\n}\n\ntype Value = undefined | null | boolean | number | string | symbol | ClassRef | StylesRef | JsxRef | TextRef | LucideRef | FnRef | Value[] | { [k: string]: Value };\n\nconst isFnRef = (v: Value): v is FnRef => !!v && typeof v === 'object' && 'fnRef' in (v as object);\n\nconst isClass = (v: Value): v is ClassRef => !!v && typeof v === 'object' && 'cls' in (v as object);\nconst isTextRef = (v: Value): v is TextRef => !!v && typeof v === 'object' && 'textProp' in (v as object);\n/** A lucide-react icon the code names (`Info`, `TONE_ICON[tone]`). */\ninterface LucideRef {\n lucide: string;\n}\nconst isLucide = (v: Value): v is LucideRef & Value => !!v && typeof v === 'object' && 'lucide' in (v as object);\nconst isStyles = (v: Value): v is StylesRef => !!v && typeof v === 'object' && 'module' in (v as object);\nconst isJsx = (v: Value): v is JsxRef => !!v && typeof v === 'object' && 'jsx' in (v as object);\n\ninterface Scope {\n src: ComponentSource;\n vars: Map<string, Value>;\n /** Local consts, evaluated on first use. */\n locals: Map<string, ts.Expression>;\n /** Identifiers bound to optional icon props (or a boolean shown as a part): JSX conditions on them become BOOLEAN properties. */\n toggles: Map<string, string>;\n /** Optional node or string props behind a toggle: the value they take while their part is drawn. */\n toggleValues?: Map<string, Value> | undefined;\n /** Local consts by name (kept after evaluation), to see which toggle a derived condition depends on. */\n inits?: Map<string, ts.Expression> | undefined;\n /** Content from the docs preview for `{children}` (a group's options), when the component is drawn with it. */\n preview?: DocChild[] | undefined;\n /** A nested component's checked state, from its props (`defaultChecked`, `indeterminate`). */\n checked?: 'true' | 'false' | 'mixed' | undefined;\n /** Optional props shown by default because the example gives them. */\n toggleOn?: Set<string> | undefined;\n /** React context values provided above (`<TabsContext.Provider value={...}>`), by context name. */\n contexts?: Map<string, Value> | undefined;\n /** Component being specified (true) or a nested DS component (false). */\n main: boolean;\n}\n\nfunction lookup(scope: Scope, name: string): Value {\n if (scope.vars.has(name)) return scope.vars.get(name);\n const local = scope.locals.get(name);\n if (local) {\n scope.locals.delete(name);\n const v = evaluate(local, scope);\n scope.vars.set(name, v);\n return v;\n }\n const style = scope.src.styles.get(name);\n if (style) return { module: style };\n const icon = scope.src.lucide.get(name);\n if (icon) return { lucide: icon };\n const top = scope.src.consts.get(name);\n if (top) return evaluate(top, { ...scope, vars: new Map(), locals: new Map() });\n const fnConst = scope.src.fnConsts.get(name);\n if (fnConst) return { fnRef: fnConst, scope: { ...scope, vars: new Map(), locals: new Map(), toggles: new Map() } };\n return undefined;\n}\n\nfunction classList(v: Value, out: string[] = []): string[] {\n if (isClass(v)) out.push(v.cls);\n else if (Array.isArray(v)) for (const x of v) classList(x, out);\n return out;\n}\n\nfunction evaluate(e: ts.Expression, scope: Scope): Value {\n const sf = scope.src.sf;\n if (ts.isParenthesizedExpression(e) || ts.isAsExpression(e) || ts.isNonNullExpression(e) || ts.isSatisfiesExpression(e)) return evaluate(e.expression, scope);\n if (ts.isStringLiteral(e) || ts.isNoSubstitutionTemplateLiteral(e)) return e.text;\n if (ts.isNumericLiteral(e)) return Number(e.text);\n if (e.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (e.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (e.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isIdentifier(e)) return lookup(scope, e.text);\n if (ts.isTemplateExpression(e)) {\n let s = e.head.text;\n for (const span of e.templateSpans) s += String(evaluate(span.expression, scope) ?? '') + span.literal.text;\n return s;\n }\n if (ts.isPropertyAccessExpression(e)) {\n const obj = evaluate(e.expression, scope);\n if (isStyles(obj)) return { cls: `${obj.module}|${e.name.text}` };\n if ((Array.isArray(obj) || typeof obj === 'string') && e.name.text === 'length') return obj.length;\n if (obj === OPAQUE) return OPAQUE;\n if (obj && typeof obj === 'object' && !Array.isArray(obj) && !isClass(obj) && !isJsx(obj)) return (obj as Record<string, Value>)[e.name.text];\n return undefined;\n }\n if (ts.isElementAccessExpression(e)) {\n const obj = evaluate(e.expression, scope);\n const key = evaluate(e.argumentExpression, scope);\n if (isStyles(obj) && typeof key === 'string') return { cls: `${obj.module}|${key}` };\n if (Array.isArray(obj) && typeof key === 'number') return obj[key];\n if (obj && typeof obj === 'object' && !Array.isArray(obj) && (typeof key === 'string' || typeof key === 'number') && !isClass(obj) && !isJsx(obj)) return (obj as Record<string, Value>)[key];\n return undefined;\n }\n if (ts.isPrefixUnaryExpression(e) && e.operator === ts.SyntaxKind.ExclamationToken) return !truthy(evaluate(e.operand, scope));\n if (ts.isPrefixUnaryExpression(e) && e.operator === ts.SyntaxKind.MinusToken) {\n const v = evaluate(e.operand, scope);\n return typeof v === 'number' ? -v : OPAQUE;\n }\n if (ts.isTypeOfExpression(e)) {\n const v = evaluate(e.expression, scope);\n if (v === OPAQUE || isJsx(v)) return OPAQUE;\n return v === null ? 'object' : Array.isArray(v) ? 'object' : typeof v === 'symbol' ? OPAQUE : typeof v;\n }\n if (ts.isConditionalExpression(e)) return truthy(evaluate(e.condition, scope)) ? evaluate(e.whenTrue, scope) : evaluate(e.whenFalse, scope);\n if (ts.isBinaryExpression(e)) {\n const op = e.operatorToken.kind;\n if (op === ts.SyntaxKind.AmpersandAmpersandToken) {\n const l = evaluate(e.left, scope);\n return truthy(l) ? evaluate(e.right, scope) : l;\n }\n if (op === ts.SyntaxKind.BarBarToken) {\n const l = evaluate(e.left, scope);\n return truthy(l) ? l : evaluate(e.right, scope);\n }\n if (op === ts.SyntaxKind.QuestionQuestionToken) {\n const l = evaluate(e.left, scope);\n return l === undefined || l === null ? evaluate(e.right, scope) : l;\n }\n const l = evaluate(e.left, scope);\n const r = evaluate(e.right, scope);\n switch (op) {\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return l === r;\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return l !== r;\n case ts.SyntaxKind.EqualsEqualsToken:\n return l == r; // eslint-disable-line eqeqeq\n case ts.SyntaxKind.ExclamationEqualsToken:\n return l != r; // eslint-disable-line eqeqeq\n default:\n return arithmetic(op, l, r);\n }\n }\n if (ts.isCallExpression(e)) {\n const callee = e.expression.getText(sf);\n if (callee === 'cx' || callee === 'clsx' || callee === 'classNames') return e.arguments.map((a) => evaluate(a, scope)).filter(truthy);\n // Base UI's mergeProps: the props objects merged, later ones winning (unknown spreads add nothing drawn).\n if (callee === 'mergeProps') {\n const out: Record<string, Value> = {};\n for (const a of e.arguments) {\n const v = evaluate(a, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v)) Object.assign(out, v);\n }\n return out;\n }\n // Math on known numbers.\n const math = /^Math\\.(max|min|floor|ceil|round|abs)$/.exec(callee);\n if (math) {\n const args = e.arguments.map((a) => evaluate(a, scope));\n return args.every((a) => typeof a === 'number') ? (Math[math[1] as 'max'] as (...n: number[]) => number)(...(args as number[])) : OPAQUE;\n }\n // Object.entries / keys / values of a known object (or of nothing: an empty list).\n const objFn = /^Object\\.(entries|keys|values)$/.exec(callee);\n if (objFn && e.arguments[0]) {\n const o = evaluate(e.arguments[0], scope);\n if (o === undefined || o === null) return [];\n if (o && typeof o === 'object' && !Array.isArray(o) && !isJsx(o) && !isClass(o)) {\n const rec = o as Record<string, Value>;\n return objFn[1] === 'keys' ? Object.keys(rec) : objFn[1] === 'values' ? Object.values(rec) : Object.entries(rec).map(([k, v]) => [k, v]);\n }\n return OPAQUE;\n }\n // createElement(tag, props, ...children): an element like JSX.\n if ((callee === 'createElement' || callee === 'React.createElement') && e.arguments[0]) {\n const tag = evaluate(e.arguments[0], scope);\n const props = e.arguments[1] ? evaluate(e.arguments[1], scope) : undefined;\n if (typeof tag !== 'string') return OPAQUE;\n return { element: tag, props: (props && typeof props === 'object' && !Array.isArray(props) ? props : {}) as Record<string, Value>, kids: e.arguments.slice(2).map((a) => evaluate(a, scope)) } as unknown as Value;\n }\n // React context: createContext(default) is its default; useContext reads the nearest provider's value, else it.\n if ((callee === 'createContext' || callee === 'React.createContext') && e.arguments[0]) return evaluate(e.arguments[0], scope);\n if ((callee === 'useContext' || callee === 'React.useContext') && e.arguments[0]) {\n const key = e.arguments[0].getText(sf);\n return scope.contexts?.has(key) ? scope.contexts.get(key) : evaluate(e.arguments[0], scope);\n }\n // Base UI's useRender({ defaultTagName, props }): the element it renders by default.\n if (callee === 'useRender' && e.arguments[0]) {\n const o = evaluate(e.arguments[0], scope) as Record<string, Value> | undefined;\n const props = (o?.props && typeof o.props === 'object' && !Array.isArray(o.props) ? o.props : {}) as Record<string, Value>;\n return { element: typeof o?.defaultTagName === 'string' ? o.defaultTagName : 'div', props, kids: [] } as unknown as Value;\n }\n // useMemo(() => value, deps): the value.\n if ((callee === 'useMemo' || callee === 'React.useMemo') && e.arguments[0]) return callArrow(e.arguments[0], [], scope);\n // Array.isArray(x) and Array.from({ length: n }, fn) on known values.\n if (callee === 'Array.isArray' && e.arguments[0]) {\n const v = evaluate(e.arguments[0], scope);\n return v === OPAQUE || isFnRef(v) ? OPAQUE : Array.isArray(v);\n }\n if (callee === 'Array.from' && e.arguments[0]) {\n const v = evaluate(e.arguments[0], scope);\n const length = v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, Value>).length : undefined;\n const list: Value[] | undefined = Array.isArray(v) ? v : typeof length === 'number' && length >= 0 && length < 1000 ? Array.from({ length }, () => undefined) : undefined;\n if (!list) return OPAQUE;\n const fn = e.arguments[1];\n if (!fn) return list;\n const results = list.map((x, i) => callArrow(fn, [x, i], scope));\n return results.some((r) => r === OPAQUE) ? OPAQUE : results;\n }\n if (ts.isPropertyAccessExpression(e.expression) && /^(map|flatMap|filter|some|every|find)$/.test(e.expression.name.text)) {\n const list = evaluate(e.expression.expression, scope);\n if (Array.isArray(list)) return listMethod(list, e.expression.name.text, e.arguments, scope);\n }\n // String and list methods on known values (`text.split('.')`, `formatted.join(' to ')`).\n if (ts.isPropertyAccessExpression(e.expression)) {\n const obj = evaluate(e.expression.expression, scope);\n const r = valueMethod(obj, e.expression.name.text, e.arguments.map((a) => evaluate(a, scope)));\n if (r !== undefined) return r;\n }\n // A local arrow function (`const renderItem = (o) => <Item ... />`), called with values.\n if (ts.isIdentifier(e.expression)) {\n const fnExpr = scope.inits?.get(e.expression.text) ?? scope.locals.get(e.expression.text);\n if (fnExpr && (ts.isArrowFunction(fnExpr) || ts.isFunctionExpression(fnExpr)))\n return callArrow(\n fnExpr,\n e.arguments.map((a) => evaluate(a, scope)),\n scope,\n );\n }\n const helper = ts.isIdentifier(e.expression) ? scope.src.helpers.get(e.expression.text) : undefined;\n if (helper) {\n const args = e.arguments.map((a) => evaluate(a, scope));\n // A helper that returns elements (`breakAfterDots(text)`): read like the component, not run.\n if (containsJsx(helper)) return callArrow(helper, args, { ...scope, vars: new Map(), locals: new Map(), toggles: new Map(), inits: new Map() });\n return callHelper(helper, args, scope.src);\n }\n const imported = ts.isIdentifier(e.expression) ? scope.src.imported.get(e.expression.text) : undefined;\n if (imported) return callData(imported, e.arguments.map((a) => evaluate(a, scope)));\n // A function held by a value (a default prop, a top-level const): called with values.\n if (ts.isIdentifier(e.expression)) {\n const v = evaluate(e.expression, scope);\n if (isFnRef(v)) return callArrow(v.fnRef, e.arguments.map((a) => evaluate(a, scope)), v.scope);\n }\n return OPAQUE;\n }\n if (ts.isArrowFunction(e) || ts.isFunctionExpression(e)) return { fnRef: e, scope };\n if (ts.isJsxElement(e) || ts.isJsxSelfClosingElement(e) || ts.isJsxFragment(e)) return { jsx: e, scope };\n if (ts.isObjectLiteralExpression(e)) {\n const out: Record<string, Value> = {};\n for (const p of e.properties) {\n if (ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) {\n // `{ ['--_min-rows' as string]: rows }`: the key evaluated, kept when it is a string or a number.\n const key = evaluate(p.name.expression, scope);\n if (typeof key !== 'string' && typeof key !== 'number') return OPAQUE;\n out[String(key)] = evaluate(p.initializer, scope);\n } else if (ts.isPropertyAssignment(p)) out[unquote(p.name.getText(sf))] = evaluate(p.initializer, scope);\n else if (ts.isShorthandPropertyAssignment(p)) out[p.name.text] = lookup(scope, p.name.text);\n else if (ts.isSpreadAssignment(p)) {\n const v = evaluate(p.expression, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v)) Object.assign(out, v);\n } else return OPAQUE;\n }\n return out;\n }\n if (ts.isArrayLiteralExpression(e)) return e.elements.map((x) => evaluate(x, scope));\n return OPAQUE;\n}\n\n/** The custom properties of an inline style object (`{ '--_pct': 64 }`), as CSS text; undefined when there are none. */\nfunction styleVarsOf(style: Value): Map<string, string> | undefined {\n if (!style || typeof style !== 'object' || Array.isArray(style) || isJsx(style)) return undefined;\n const vars = new Map<string, string>();\n for (const [k, v] of Object.entries(style as Record<string, Value>)) if (k.startsWith('--') && (typeof v === 'number' || typeof v === 'string')) vars.set(k, String(v));\n return vars.size ? vars : undefined;\n}\n\n/**\n * A plain helper of the component file (`initials(name)`) called with literal arguments: transpiled and run, so the\n * drawn text is what code renders. Only strings, numbers and booleans go in and come out; anything else is opaque.\n */\n/** Data only: strings, numbers, booleans, and lists or objects of them (a select's options). */\nconst isData = (v: Value): boolean =>\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null || v === undefined ||\n (Array.isArray(v) && v.every(isData)) ||\n (!!v && typeof v === 'object' && !isJsx(v) && !isClass(v) && !isStyles(v) && !isTextRef(v) && !isFnRef(v) && Object.values(v as Record<string, Value>).every(isData));\n\n/** A function run on data (texts are passed as their text): its result when it is data, else opaque. */\nfunction callData(fn: (...args: unknown[]) => unknown, args: Value[]): Value {\n const data = args.map((a) => (isTextRef(a) ? a.text : a));\n if (!data.every(isData)) return OPAQUE;\n try {\n const out: unknown = fn(...structuredClone(data));\n const v = jsonValue(JSON.parse(JSON.stringify(out ?? null)));\n return isData(v) ? v : OPAQUE;\n } catch {\n return OPAQUE;\n }\n}\n\nfunction callHelper(fn: ts.FunctionDeclaration, args: Value[], src: ComponentSource): Value {\n try {\n const js = ts.transpileModule(fn.getText(src.sf).replace(/^export\\s+(default\\s+)?/, ''), { compilerOptions: { target: ts.ScriptTarget.ES2020, module: ts.ModuleKind.None } }).outputText;\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const run = new Function(`${js}; return ${fn.name!.text}.apply(null, arguments);`) as (...a: unknown[]) => unknown;\n return callData(run, args);\n } catch {\n return OPAQUE;\n }\n}\n\n/** Whether a function's body writes JSX (it returns elements, not data). */\nfunction containsJsx(fn: ts.Node): boolean {\n let found = false;\n const visit = (n: ts.Node) => {\n if (found) return;\n if (ts.isJsxElement(n) || ts.isJsxSelfClosingElement(n) || ts.isJsxFragment(n)) found = true;\n else ts.forEachChild(n, visit);\n };\n visit(fn);\n return found;\n}\n\n/** String and list methods on known values: split, join, trim, slice, includes, startsWith, endsWith, case changes. */\nfunction valueMethod(obj: Value, method: string, args: Value[]): Value | undefined {\n const str = (i: number) => (typeof args[i] === 'string' ? (args[i] as string) : undefined);\n const int = (i: number) => (typeof args[i] === 'number' ? (args[i] as number) : args[i] === undefined ? undefined : NaN);\n if (typeof obj === 'string') {\n switch (method) {\n case 'split':\n return str(0) !== undefined ? obj.split(str(0)!) : undefined;\n case 'trim':\n return obj.trim();\n case 'toLowerCase':\n return obj.toLowerCase();\n case 'toUpperCase':\n return obj.toUpperCase();\n case 'startsWith':\n return str(0) !== undefined ? obj.startsWith(str(0)!) : undefined;\n case 'endsWith':\n return str(0) !== undefined ? obj.endsWith(str(0)!) : undefined;\n case 'includes':\n return str(0) !== undefined ? obj.includes(str(0)!) : undefined;\n case 'slice':\n return Number.isNaN(int(0)) || Number.isNaN(int(1)) ? undefined : obj.slice(int(0), int(1));\n default:\n return undefined;\n }\n }\n if (Array.isArray(obj)) {\n switch (method) {\n case 'join':\n return obj.every((x) => typeof x === 'string' || typeof x === 'number') ? obj.join(str(0) ?? ',') : undefined;\n case 'slice':\n return Number.isNaN(int(0)) || Number.isNaN(int(1)) ? undefined : obj.slice(int(0), int(1));\n case 'includes':\n return obj.includes(args[0]);\n default:\n return undefined;\n }\n }\n return undefined;\n}\n\n/** An arrow or function expression called with values (`(o) => ({ value: o.value })`), when its body is readable. */\nfunction callArrow(fn: ts.Expression | ts.FunctionDeclaration, args: Value[], scope: Scope): Value {\n if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn) && !ts.isFunctionDeclaration(fn)) return OPAQUE;\n if (!fn.body) return OPAQUE;\n const vars = new Map(scope.vars);\n fn.parameters.forEach((p, i) => {\n const v = args[i];\n if (ts.isIdentifier(p.name)) vars.set(p.name.text, v);\n else if (ts.isObjectBindingPattern(p.name) && v && typeof v === 'object')\n for (const el of p.name.elements) if (ts.isIdentifier(el.name)) vars.set(el.name.text, (v as Record<string, Value>)[(el.propertyName ?? el.name).getText(scope.src.sf)]);\n const pattern: ts.BindingName = p.name;\n if (ts.isArrayBindingPattern(pattern) && Array.isArray(v))\n pattern.elements.forEach((el, j) => {\n if (ts.isBindingElement(el) && ts.isIdentifier(el.name)) vars.set(el.name.text, v[j]);\n });\n });\n const inner: Scope = { ...scope, vars, locals: new Map(scope.locals) };\n if (!ts.isBlock(fn.body)) return evaluate(fn.body, inner);\n const run = (stmts: readonly ts.Statement[]): { value: Value } | undefined => {\n for (const st of stmts) {\n if (ts.isVariableStatement(st)) for (const d of st.declarationList.declarations) if (ts.isIdentifier(d.name) && d.initializer) inner.locals.set(d.name.text, d.initializer);\n if (ts.isIfStatement(st)) {\n const c = evaluate(st.expression, inner);\n if (c === OPAQUE) return { value: OPAQUE };\n const branch = truthy(c) ? st.thenStatement : st.elseStatement;\n const r = branch ? run(ts.isBlock(branch) ? branch.statements : [branch]) : undefined;\n if (r) return r;\n }\n // A loop that fills a list cannot be followed: the result is not known.\n if (ts.isForOfStatement(st) || ts.isForStatement(st) || ts.isWhileStatement(st)) return { value: OPAQUE };\n if (ts.isReturnStatement(st)) return { value: st.expression ? evaluate(st.expression, inner) : undefined };\n }\n return undefined;\n };\n return run(fn.body.statements)?.value;\n}\n\n/** List methods on known lists, with a readable callback: map, filter, some, every, find. */\nfunction listMethod(list: Value[], method: string, args: readonly ts.Expression[], scope: Scope): Value {\n let fn = args[0];\n // A callback named by a local (`items.map(renderItem)`).\n if (fn && ts.isIdentifier(fn)) fn = scope.inits?.get(fn.text) ?? scope.locals.get(fn.text) ?? fn;\n if (!fn) return OPAQUE;\n const results = list.map((x, i) => callArrow(fn, [x, i], scope));\n if (results.some((r) => r === OPAQUE)) return OPAQUE;\n switch (method) {\n case 'map':\n return results;\n case 'flatMap':\n return results.flatMap((r) => (Array.isArray(r) ? r : [r]));\n case 'filter':\n return list.filter((_, i) => truthy(results[i]));\n case 'some':\n return results.some(truthy);\n case 'every':\n return results.every(truthy);\n case 'find':\n return list.find((_, i) => truthy(results[i]));\n default:\n return OPAQUE;\n }\n}\n\n/** Arithmetic and comparisons on known numbers (and string concatenation); a missing value compares false. */\nfunction arithmetic(op: ts.SyntaxKind, l: Value, r: Value): Value {\n if (l === OPAQUE || r === OPAQUE) return OPAQUE;\n const K = ts.SyntaxKind;\n const compare = op === K.LessThanToken || op === K.GreaterThanToken || op === K.LessThanEqualsToken || op === K.GreaterThanEqualsToken;\n if (compare && (l === undefined || l === null || r === undefined || r === null)) return false;\n if (op === K.PlusToken && (typeof l === 'string' || typeof r === 'string') && (typeof l === 'string' || typeof l === 'number') && (typeof r === 'string' || typeof r === 'number')) return `${l}${r}`;\n if (typeof l !== 'number' || typeof r !== 'number') return OPAQUE;\n switch (op) {\n case K.PlusToken:\n return l + r;\n case K.MinusToken:\n return l - r;\n case K.AsteriskToken:\n return l * r;\n case K.SlashToken:\n return l / r;\n case K.LessThanToken:\n return l < r;\n case K.GreaterThanToken:\n return l > r;\n case K.LessThanEqualsToken:\n return l <= r;\n case K.GreaterThanEqualsToken:\n return l >= r;\n default:\n return OPAQUE;\n }\n}\n\nfunction truthy(v: Value): boolean {\n if (v === OPAQUE) return true;\n if (Array.isArray(v)) return true;\n return !!v;\n}\n\n/** Binds the destructured props of a component function, with their defaults. */\nfunction bindProps(fn: ts.FunctionLikeDeclaration, scope: Scope, given: Record<string, Value>): Map<string, string> {\n const names = new Map<string, string>(); // local name -> prop name\n const param = fn.parameters[0];\n if (!param || !ts.isObjectBindingPattern(param.name)) return names;\n const taken = new Set<string>();\n for (const el of param.name.elements) {\n if (el.dotDotDotToken || !ts.isIdentifier(el.name)) continue;\n const prop = el.propertyName ? el.propertyName.getText(scope.src.sf) : el.name.text;\n names.set(el.name.text, prop);\n taken.add(prop);\n let v = given[prop];\n if (v === undefined && el.initializer) v = evaluate(el.initializer, scope);\n scope.vars.set(el.name.text, v);\n }\n // `...rest`: the props given that are not named (children passed through a spread, data attributes).\n const rest = param.name.elements.find((el) => el.dotDotDotToken && ts.isIdentifier(el.name));\n // Children an example gives a nested component (a table header's rows) go through the spread too.\n const keepChildren = !scope.main && !!scope.preview?.some((c) => typeof c !== 'string');\n if (rest && ts.isIdentifier(rest.name)) scope.vars.set(rest.name.text, Object.fromEntries(Object.entries(given).filter(([k, v]) => !taken.has(k) && v !== undefined && (v !== CHILDREN || keepChildren))) as Value);\n return names;\n}\n\n/** The JSX a component function returns for the current props: follows `if (cond) return x;` and local consts. */\nfunction renderedJsx(fn: ts.FunctionLikeDeclaration, scope: Scope): JsxRef | undefined {\n const body = fn.body;\n if (!body) return undefined;\n if (!ts.isBlock(body)) {\n const v = evaluate(body, scope);\n return isJsx(v) ? v : undefined;\n }\n const run = (stmts: readonly ts.Statement[]): JsxRef | undefined | null => {\n for (const st of stmts) {\n if (ts.isVariableStatement(st)) {\n for (const d of st.declarationList.declarations) {\n // const [value, setValue] = useState(initial): the value starts as the initial one.\n if (ts.isArrayBindingPattern(d.name) && d.initializer && ts.isCallExpression(d.initializer) && /^(React\\.)?useState$/.test(d.initializer.expression.getText(scope.src.sf))) {\n const first = d.name.elements[0];\n const init = d.initializer.arguments[0];\n if (first && ts.isBindingElement(first) && ts.isIdentifier(first.name) && init) {\n scope.locals.set(first.name.text, init);\n scope.inits?.set(first.name.text, init);\n }\n continue;\n }\n // const { variant, size } = useContext(Ctx): each name from the object.\n if (ts.isObjectBindingPattern(d.name) && d.initializer) {\n const obj = evaluate(d.initializer, scope);\n for (const el of d.name.elements) {\n if (!ts.isIdentifier(el.name) || el.dotDotDotToken) continue;\n const key = (el.propertyName ?? el.name).getText(scope.src.sf);\n let v = obj && typeof obj === 'object' && !Array.isArray(obj) ? (obj as Record<string, Value>)[key] : undefined;\n if (v === undefined && el.initializer) v = evaluate(el.initializer, scope);\n scope.vars.set(el.name.text, v);\n }\n continue;\n }\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n scope.locals.set(d.name.text, d.initializer);\n scope.inits?.set(d.name.text, d.initializer);\n }\n } else if (ts.isIfStatement(st)) {\n const branch = truthy(evaluate(st.expression, scope)) ? st.thenStatement : st.elseStatement;\n if (!branch) continue;\n const r = run(ts.isBlock(branch) ? branch.statements : [branch]);\n if (r !== null) return r;\n } else if (ts.isReturnStatement(st)) {\n if (!st.expression) return undefined;\n const v = evaluate(st.expression, scope);\n return isJsx(v) ? v : undefined;\n }\n }\n return null;\n };\n return run(body.statements) ?? undefined;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Element tree\n\ninterface Node {\n key: string;\n tag: string;\n classes: string[];\n children: Node[];\n kind: 'frame' | 'text' | 'icon';\n /** Text parts: TEXT property name and default; placeholder text of a text field. */\n text?: { property: string; default: string; prop?: string | undefined } | undefined;\n /** Text written in code (a group's option label, a literal \"*\"): drawn as is, no TEXT property. */\n chars?: string | undefined;\n /** The text as React renders it, spaces at its ends kept (`Page ` before `{page}`): joins inline runs exactly. */\n raw?: string | undefined;\n /** Whitespace only: joins inline runs, dropped otherwise. */\n space?: boolean | undefined;\n /** A compound root drawn with the parts its file exports (CardHeader...), not with an example's children. */\n fromExports?: boolean | undefined;\n placeholder?: boolean | undefined;\n inputLike?: boolean | undefined;\n /**\n * The element sizes its border box by default (a `<button>` or a `<select>`, browsers' own stylesheet): its height\n * and width already count its padding and border.\n */\n borderBox?: boolean | undefined;\n /** BOOLEAN property that shows this optional part. */\n visible?: { property: string; prop: string; /** Shown by default: the example gives it. */ on?: boolean } | undefined;\n /** Spreads `...rest` with no children of its own: children come through props. */\n takesChildren?: boolean | undefined;\n /** Name for the layer, when it is not the class. */\n name?: string | undefined;\n /** A Base UI part: carries Base UI's state attributes. */\n baseUi?: boolean | undefined;\n /** data-* and aria-* attributes the JSX sets, as strings. */\n attrs?: Map<string, string> | undefined;\n /** Base UI parts: the checked state they carry, from the drawn state (\"state\", the main component) or their props. */\n checked?: 'state' | 'true' | 'false' | 'mixed' | undefined;\n /** Icon parts whose icon is written in code (`<Icon icon={Check} />`): the lucide-react name. */\n icon?: string | undefined;\n /** An image (`<img>`, a Base UI `*.Image`): drawn as the media slot. */\n media?: boolean | undefined;\n /** Checked because its `value` is the group's selected option; its Base UI parts (the radio dot) follow it. */\n selectedBy?: boolean | undefined;\n /** Only drawn while checked (a Base UI indicator that is not kept mounted). */\n whenChecked?: boolean | undefined;\n /** Inline SVG: the `<svg>` element's literal attributes; its shapes are in `shapes`, not parts. */\n svgAttrs?: Record<string, string> | undefined;\n shapes?: Node[] | undefined;\n /** Inline style custom properties (`style={{ '--_pct': 64 }}`). */\n styleVars?: Map<string, string> | undefined;\n /** A Base UI value indicator (a progress fill): its share of the track, from the root's value, min and max. */\n fraction?: number | undefined;\n /** A Base UI thumb (a slider's): its center sits at this share of its track. */\n at?: number | undefined;\n /** A Base UI panel whose value is not the selected one: hidden. */\n inactive?: boolean | undefined;\n /** An inline background color (a swatch): content, not a token. */\n inlineFill?: string | undefined;\n /** A Base UI indicator Base UI sizes to the selected item (a tab underline): drawn inside that item, filling it. */\n follows?: boolean | undefined;\n /** A decoration drawn by `::before` or `::after` of its parent. */\n pseudo?: 'before' | 'after' | undefined;\n}\n\nconst INPUT_TAGS = new Set(['input', 'textarea', 'BaseInput']);\n/** SVG shapes drawn inside an inline `<svg>`. */\nconst SVG_SHAPES = /^(circle|path|rect|line|polyline|polygon|ellipse)$/;\n\n/** Text fields: native inputs and Base UI input parts (`<BaseNumberField.Input>`). */\nconst isInputTag = (tag: string) => INPUT_TAGS.has(tag) || /\\.Input$/.test(tag);\n\n/** \"iconStart\" -> \"Icon start\". */\nexport const sentenceCase = (prop: string) => {\n const words = prop.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\ninterface RenderContext {\n reader: Reader;\n depth: number;\n /** Elements the main component rendered for `{children}`. */\n component: string;\n /** What the render met and cannot draw faithfully (content computed while the page runs), in plain language. */\n blockers?: string[] | undefined;\n /** The option a group selects (`defaultValue` of a radio group): Base UI parts with that `value` are checked. */\n /** The selected value (a tab), or the open ones (an accordion's defaultValue list). */\n selected?: string | string[] | undefined;\n /** The `items` of the nearest Base UI root (a combobox's options), for render functions of its lists. */\n items?: Value[] | undefined;\n /** React context values provided above, by context name. */\n contexts?: Map<string, Value> | undefined;\n /** The value share of the nearest Base UI root with a numeric value (a progress at 64 of 100: 0.64). */\n fraction?: number | undefined;\n /** The nearest Base UI root with a numeric value: its value and module (\"slider\", \"progress\"). */\n numeric?: { value: number; module: string } | undefined;\n /** Arguments Base UI passes to the render function of a value display (the formatted value). */\n valueArgs?: Value[] | undefined;\n /** `orientation` of the nearest Base UI root: its parts carry it as data-orientation. */\n orientation?: string | undefined;\n /** Errors of the nearest Base UI form, by field name: the Field of that name shows its error. */\n formErrors?: Record<string, Value> | undefined;\n /** Optional text props the example gives the main component: their parts show that text, on by default. */\n examples?: Record<string, Value> | undefined;\n}\n\n/** A data-* or aria-* attribute value as the DOM gets it, or undefined when React leaves it out. */\nfunction attrString(v: Value): string | undefined {\n if (v === undefined || v === null || v === OPAQUE || typeof v === 'symbol') return undefined;\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') return String(v);\n return undefined;\n}\n\nfunction renderJsx(ref: JsxRef, ctx: RenderContext, visible?: Node['visible']): Node[] {\n const { jsx, scope } = ref;\n const sf = scope.src.sf;\n if (ts.isParenthesizedExpression(jsx)) return renderJsx({ jsx: jsx.expression, scope }, ctx, visible);\n if (ts.isJsxFragment(jsx)) return renderChildren(jsx.children, scope, ctx);\n if (!ts.isJsxElement(jsx) && !ts.isJsxSelfClosingElement(jsx)) return [];\n const open = ts.isJsxElement(jsx) ? jsx.openingElement : jsx;\n const tag = open.tagName.getText(sf);\n // A line break opportunity (`<wbr />` in a token path): nothing drawn.\n if (tag === 'wbr') return [];\n // <Fragment key={...}> and context providers draw their children only, like <>...</>; a provider's value reaches\n // the components below it (useContext).\n if (/\\.Provider$/.test(tag) && ts.isJsxElement(jsx)) {\n const valueAttr = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'value');\n const value = valueAttr?.initializer && ts.isJsxExpression(valueAttr.initializer) && valueAttr.initializer.expression ? evaluate(valueAttr.initializer.expression, scope) : undefined;\n const contexts = new Map(ctx.contexts ?? []);\n contexts.set(tag.replace(/\\.Provider$/, ''), value);\n const inner = { ...scope, contexts };\n return renderChildren(jsx.children, inner, { ...ctx, contexts });\n }\n if (/^(React\\.)?Fragment$|\\.Provider$/.test(tag)) return ts.isJsxElement(jsx) ? renderChildren(jsx.children, scope, ctx) : [];\n const attrs: Record<string, Value> = {};\n let spreads = false;\n let spreadChildren: Value;\n for (const a of open.attributes.properties) {\n if (ts.isJsxSpreadAttribute(a)) {\n spreads = true;\n // A spread of known props (`{...rest}`): their data and aria attributes, class names and the values a Base UI\n // root reads (value, min, max, orientation, form errors) apply; their children are drawn.\n const v = evaluate(a.expression, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v) && !isElementValue(v) && !isFnRef(v)) {\n for (const [k, x] of Object.entries(v as Record<string, Value>)) {\n if (k === 'children') spreadChildren = x;\n else if (/^(data|aria)-/.test(k) || SPREAD_PROPS.has(k)) attrs[k] = x;\n }\n }\n continue;\n }\n const name = a.name.getText(sf);\n if (!a.initializer) attrs[name] = true;\n else if (ts.isStringLiteral(a.initializer)) attrs[name] = a.initializer.text;\n else if (ts.isJsxExpression(a.initializer) && a.initializer.expression) attrs[name] = evaluate(a.initializer.expression, scope);\n }\n const children = ts.isJsxElement(jsx) ? jsx.children : undefined;\n\n // A Base UI part with a `render` element (`<BaseDialog.Close render={<IconButton ... />} />`): Base UI renders that\n // element, with the part's class names added. `render={children}`: what the consumer passes (a trigger).\n // Base UI parts that only exist in some situations: the empty message of a list that has items, the clear button\n // of a field with no value, the arrow of a popup (placed by Base UI next to its trigger, not drawn).\n // An error message without `match` is shown by Base UI only once the field is invalid (a failed check while the page\n // runs): not drawn.\n if (scope.src.baseUi.has(tag.split('.')[0]!) && ((/\\.Empty$/.test(tag) && ctx.items?.length) || (/\\.Clear$/.test(tag) && ctx.selected === undefined) || /\\.Arrow$/.test(tag) || (/\\.Error$/.test(tag) && attrs.match === undefined))) return [];\n\n // With children of its own (`<Header render={<h3 />}>...`), the part keeps them: drawn as the part.\n if (scope.src.baseUi.has(tag.split('.')[0]!) && attrs.render !== undefined && !children?.some((c) => !ts.isJsxText(c) || c.text.trim())) {\n const r = attrs.render;\n const extra = classList(attrs.className);\n if (isJsx(r)) {\n const nodes = renderJsx(r, ctx, visible);\n if (nodes[0]) {\n nodes[0].classes = [...nodes[0].classes, ...extra];\n // The part's inline custom properties go with it (`style={{ '--_min-rows': rows }}` on an Input that renders a\n // textarea): they feed the element's CSS.\n const vars = styleVarsOf(attrs.style);\n if (vars) nodes[0].styleVars = new Map([...(nodes[0].styleVars ?? []), ...vars]);\n }\n return nodes;\n }\n const init = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'render')?.initializer;\n if (r === CHILDREN && init && ts.isJsxExpression(init) && init.expression) return renderExpression(init.expression, scope, ctx, visible);\n }\n\n // A design system component (Icon, Spinner...): rendered through its own TSX and CSS module.\n if (/^[A-Z]/.test(tag) && tag !== ctx.component && ctx.depth < 4 && ctx.reader.exists(tag)) {\n const nested = renderComponent(ctx.reader, tag, withFormError(tag, children?.length ? { ...attrs, children: childrenValue(children, scope) } : attrs, ctx), { ...ctx, depth: ctx.depth + 1 });\n if (nested) {\n if (tag === ICON_COMPONENT) {\n nested.kind = 'icon';\n const iconAttr = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'icon');\n const expr = iconAttr?.initializer && ts.isJsxExpression(iconAttr.initializer) ? iconAttr.initializer.expression : undefined;\n const lucideName = expr && ts.isIdentifier(expr) ? scope.src.lucide.get(expr.text) : undefined;\n if (lucideName) nested.icon = lucideName;\n else if (isLucide(attrs.icon)) nested.icon = attrs.icon.lucide;\n // An icon named by an example (`<MenuItem icon={Pencil}>` in the component sandbox): that icon.\n else if (typeof attrs.icon === 'string' && /^[A-Z]\\w*$/.test(attrs.icon)) nested.icon = attrs.icon;\n }\n if (visible) nested.visible = visible;\n return [nested];\n }\n }\n const dataAttrs = new Map<string, string>();\n for (const [k, v] of Object.entries(attrs)) {\n if (!/^(data|aria)-/.test(k)) continue;\n const str = attrString(v);\n if (str !== undefined) dataAttrs.set(k, str);\n }\n const isBaseUi = scope.src.baseUi.has(tag.split('.')[0]!);\n // Base UI parts carry their root's orientation (`data-orientation`).\n const orientation = isBaseUi && typeof attrs.orientation === 'string' ? attrs.orientation : ctx.orientation;\n if (isBaseUi && orientation && !dataAttrs.has('data-orientation')) dataAttrs.set('data-orientation', orientation);\n const node: Node = {\n key: '',\n tag,\n classes: classList(attrs.className),\n children: [],\n kind: 'frame',\n ...(visible ? { visible } : {}),\n ...(scope.src.baseUi.has(tag.split('.')[0]!)\n ? ctx.selected !== undefined && typeof attrs.value === 'string'\n ? { baseUi: true, checked: (Array.isArray(ctx.selected) ? ctx.selected.includes(attrs.value) : attrs.value === ctx.selected) ? 'true' : 'false', selectedBy: true }\n : { baseUi: true, checked: scope.main ? 'state' : (scope.checked ?? 'false') }\n : {}),\n ...(dataAttrs.size ? { attrs: dataAttrs } : {}),\n ...(/(^img$|\\.Image$)/.test(tag) ? { media: true } : {}),\n // Base UI indicators are only mounted while their item is checked, unless keepMounted.\n ...(/\\.(Item)?Indicator$/.test(tag) && scope.src.baseUi.has(tag.split('.')[0]!) && attrs.keepMounted !== true && ctx.fraction === undefined ? { whenChecked: true } : {}),\n };\n // A `<button>` or a `<select>` (itself, or the Base UI part that renders one) counts its border box (UA stylesheet).\n const element = isBaseUi ? ctx.reader.baseUiElement(scope.src.baseUiModules, tag.split('.').slice(1).join('.')) : tag;\n if (element === 'button' || element === 'select') node.borderBox = true;\n // A panel of a selection (a tab's panel) is hidden by Base UI unless its value is the selected one.\n if (isBaseUi && /\\.Panel$/.test(tag) && node.selectedBy && node.checked === 'false') node.inactive = true;\n // A thumb of a numeric root (a slider): Base UI places its center at the value.\n if (isBaseUi && /\\.Thumb$/.test(tag) && ctx.fraction !== undefined) node.at = ctx.fraction;\n // An inline background color (a swatch of the token's own color): content, not a token.\n const bg = attrs.style && typeof attrs.style === 'object' && !Array.isArray(attrs.style) ? (attrs.style as Record<string, Value>).backgroundColor : undefined;\n if (typeof bg === 'string') node.inlineFill = bg;\n // Inline style custom properties: they feed the CSS (`style={{ '--_pct': pct }}`).\n const vars = styleVarsOf(attrs.style);\n if (vars) node.styleVars = vars;\n // Inline SVG: drawn as one vector layer, its shapes styled by the CSS (stroke, width, opacity, dashes).\n if (tag === 'svg') {\n const lit: Record<string, string> = {};\n for (const [k, v] of Object.entries(attrs)) if ((typeof v === 'string' || typeof v === 'number') && k !== 'className') lit[k] = String(v);\n node.svgAttrs = lit;\n node.shapes = children ? renderChildren(children, scope, ctx).filter((c) => SVG_SHAPES.test(c.tag)) : [];\n return [node];\n }\n if (SVG_SHAPES.test(tag)) {\n const lit: Record<string, string> = {};\n for (const [k, v] of Object.entries(attrs)) if ((typeof v === 'string' || typeof v === 'number') && k !== 'className') lit[k] = String(v);\n node.svgAttrs = lit;\n return [node];\n }\n if (isInputTag(tag)) {\n // A text field: its box (a textarea's border and padding) and the placeholder text inside. The box is merged away\n // when it draws nothing of its own (an input inside a styled wrapper).\n node.inputLike = true;\n // A field the example fills (`defaultValue=\"acme/design-tokens\"`): its value, in the field's text color.\n const typed = typeof attrs.value === 'string' && attrs.value ? attrs.value : typeof attrs.defaultValue === 'string' && attrs.defaultValue ? attrs.defaultValue : undefined;\n if (typed !== undefined && !scope.main) {\n node.children = [textNode(typed)];\n return [node];\n }\n const value = typeof attrs.placeholder === 'string' ? attrs.placeholder : 'Placeholder';\n node.children = [{ key: '', tag: '#placeholder', classes: [], children: [], kind: 'text', placeholder: true, text: { property: 'Placeholder', default: value } }];\n return [node];\n }\n // A Base UI root with a numeric value (a progress, a meter): its indicator fills that share of the track.\n if (node.baseUi && /\\.Indicator$/.test(tag) && ctx.fraction !== undefined) node.fraction = ctx.fraction;\n let childCtx: RenderContext = Array.isArray(attrs.items) && node.baseUi ? { ...ctx, items: attrs.items } : ctx;\n if (isBaseUi && orientation) childCtx = { ...childCtx, orientation };\n // A Base UI form with errors: each Field of that name shows its error.\n if (isBaseUi && attrs.errors && typeof attrs.errors === 'object' && !Array.isArray(attrs.errors) && !isFnRef(attrs.errors)) childCtx = { ...childCtx, formErrors: attrs.errors as Record<string, Value> };\n const numeric = typeof attrs.value === 'number' ? attrs.value : attrs.value === undefined && typeof attrs.defaultValue === 'number' ? attrs.defaultValue : undefined;\n if (node.baseUi && /\\.Root$/.test(tag) && numeric !== undefined) {\n const min = typeof attrs.min === 'number' ? attrs.min : 0;\n const max = typeof attrs.max === 'number' ? attrs.max : 100;\n const local = tag.split('.')[0]!.toLowerCase();\n const module = [...scope.src.baseUiModules].find((m) => m && local.includes(m.split('/')[0]!)) ?? '';\n childCtx = { ...childCtx, fraction: Math.min(1, Math.max(0, (numeric - min) / (max - min || 1))), numeric: { value: numeric, module } };\n }\n // A Base UI value display under a numeric root: Base UI formats the value (a slider's number, a progress's percentage)\n // and passes it to a render function child.\n const formatted = ctx.fraction !== undefined && ctx.numeric ? (ctx.numeric.module === 'slider' ? new Intl.NumberFormat('en-US').format(ctx.numeric.value) : `${Math.round(ctx.fraction * 100)}%`) : undefined;\n if (node.baseUi && /\\.Value$/.test(tag) && formatted !== undefined && ctx.numeric) childCtx = { ...childCtx, valueArgs: ctx.numeric.module === 'slider' ? [[formatted], [ctx.numeric.value]] : [formatted, ctx.numeric.value] };\n if (children) node.children = renderChildren(children, scope, childCtx);\n else if (spreadChildren === CHILDREN && scope.preview?.some((c) => typeof c !== 'string')) node.children = renderPreview(scope.preview, childCtx);\n else if (spreadChildren !== undefined && spreadChildren !== CHILDREN) node.children = renderValues([spreadChildren], ctx);\n else if (spreads) node.takesChildren = true;\n // A Base UI value display (`<BaseSelect.Value placeholder=... />`): Base UI writes the text; drawn as its placeholder.\n if (!node.children.length && node.baseUi && /\\.Value$/.test(tag)) {\n // A value display under a numeric root (a progress at 64): Base UI writes the formatted value.\n const placeholder = formatted ?? (ctx.fraction !== undefined ? `${Math.round(ctx.fraction * 100)}%` : typeof attrs.placeholder === 'string' ? attrs.placeholder : 'Value');\n node.children = [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Value', default: placeholder } }];\n }\n return [node];\n}\n\n/** Props a spread passes on to the element it lands on, besides data and aria attributes. */\nconst SPREAD_PROPS = new Set(['className', 'value', 'defaultValue', 'min', 'max', 'orientation', 'errors']);\n\n/** A Base UI form's error for a nested component of the same `name` (a Field): passed as its `error`. */\nfunction withFormError(tag: string, props: Record<string, Value>, ctx: RenderContext): Record<string, Value> {\n const name = props.name;\n if (!ctx.formErrors || typeof name !== 'string' || props.error !== undefined || !ctx.reader.load(tag)?.props.has('error')) return props;\n const message = ctx.formErrors[name];\n const text = Array.isArray(message) ? message[0] : message;\n return typeof text === 'string' ? { ...props, error: text } : props;\n}\n\n/** JSX children passed to a nested design system component (`<Field><Input /></Field>`), as its `children` prop. */\ninterface ChildrenRef {\n children: ts.NodeArray<ts.JsxChild>;\n scope: Scope;\n}\nconst isChildrenRef = (v: Value): v is ChildrenRef & Value => !!v && typeof v === 'object' && 'children' in (v as object) && 'scope' in (v as object);\n\nfunction childrenValue(children: ts.NodeArray<ts.JsxChild>, scope: Scope): Value {\n const texts = children.filter((c) => !ts.isJsxText(c) || c.text.trim());\n // Plain text children (\"Save\") are a string, like React gives them.\n if (texts.every((c) => ts.isJsxText(c))) return texts.map((c) => (c as ts.JsxText).text.trim()).join(' ');\n return { children, scope } as unknown as Value;\n}\n\nfunction renderChildren(children: ts.NodeArray<ts.JsxChild>, scope: Scope, ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const c of children) {\n if (ts.isJsxText(c)) {\n const raw = jsxText(c.text);\n if (raw.trim()) out.push(textNode(raw.replace(/\\s+/g, ' ').trim(), raw));\n else if (raw) out.push(spaceNode(raw));\n continue;\n }\n if (ts.isJsxExpression(c)) {\n if (c.expression) out.push(...renderExpression(c.expression, scope, ctx));\n continue;\n }\n out.push(...renderJsx({ jsx: c, scope }, ctx));\n }\n return out;\n}\n\n/** Whitespace between inline runs (`{' '}`, a space between words): joins runs, never a layer of its own. */\nconst spaceNode = (raw: string): Node => ({ key: '', tag: '#text', classes: [], children: [], kind: 'text', chars: '', raw, space: true });\n\nconst textNode = (chars: string, raw?: string): Node => ({ key: '', tag: '#text', classes: [], children: [], kind: 'text', chars, ...(raw !== undefined && raw !== chars ? { raw } : {}) });\n\n/**\n * JSX text as React renders it (Babel's rule): lines trimmed where they meet a line break, empty lines dropped, the\n * others joined with one space; spaces inside a line, and at the ends of a single line, are kept.\n */\nexport function jsxText(text: string): string {\n const lines = text.split(/\\r\\n|\\n|\\r/);\n let out = '';\n lines.forEach((line, i) => {\n let l = line.replace(/\\t/g, ' ');\n if (i !== 0) l = l.replace(/^ +/, '');\n if (i !== lines.length - 1) l = l.replace(/ +$/, '');\n if (!l) return;\n if (out && i !== 0) out += ' ';\n out += l;\n });\n return out;\n}\n\n/** Identifiers an expression reads, following local consts (`const invalid = error != null`). */\nfunction identifiersIn(e: ts.Node, scope: Scope, seen = new Set<string>()): Set<string> {\n const visit = (n: ts.Node) => {\n if (ts.isIdentifier(n) && !seen.has(n.text)) {\n seen.add(n.text);\n const init = scope.inits?.get(n.text);\n if (init) identifiersIn(init, scope, seen);\n }\n if (ts.isPropertyAccessExpression(n)) return visit(n.expression);\n ts.forEachChild(n, visit);\n };\n visit(e);\n return seen;\n}\n\n/** The scope a toggled part renders in: the toggle's prop holds its drawn value, derived locals are evaluated again. */\nfunction toggledScope(scope: Scope, local: string): Scope {\n const vars = new Map(scope.vars);\n for (const k of scope.inits?.keys() ?? []) vars.delete(k);\n vars.set(local, scope.toggleValues?.get(local) ?? true);\n return { ...scope, vars, locals: new Map(scope.inits ?? []) };\n}\n\n/**\n * A JSX condition on an optional prop (`iconStart && ...`, `description && ...`, `invalid && ...` where invalid comes\n * from `error`): the part it shows becomes optional, behind a BOOLEAN property. Returns the property and the scope the\n * part renders in, or undefined when the condition does not depend on a toggle (or is false even with it on).\n */\nfunction toggleFor(cond: ts.Expression, scope: Scope): { visible: NonNullable<Node['visible']>; scope: Scope } | undefined {\n if (!scope.toggles.size) return undefined;\n const ids = identifiersIn(cond, scope);\n const local = [...scope.toggles.keys()].find((k) => ids.has(k));\n if (!local) return undefined;\n const prop = scope.toggles.get(local)!;\n const inner = toggledScope(scope, local);\n if (!truthy(evaluate(cond, inner))) return undefined;\n // Shown whether the prop is set or not (`size === 'lg'` in the other branch): not behind the toggle.\n const off = { ...scope, vars: new Map(scope.vars), locals: new Map(scope.inits ?? []) };\n for (const k of scope.inits?.keys() ?? []) off.vars.delete(k);\n if (truthy(evaluate(cond, off))) return undefined;\n const kind = scope.src.props.get(prop)?.kind;\n const property = kind === 'icon' ? sentenceCase(prop) : `Show ${sentenceCase(prop).toLowerCase()}`;\n return { visible: { property, prop, ...(scope.toggleOn?.has(prop) ? { on: true } : {}) }, scope: inner };\n}\n\n/** A toggle on a string prop (an avatar's `src`) is named after the part it shows (\"Show image\"), not the prop. */\nfunction nameToggle(visible: NonNullable<Node['visible']>, nodes: Node[], scope: Scope): Node[] {\n const cls = nodes[0]?.classes[0]?.split('|')[1];\n if (scope.src.props.get(visible.prop)?.kind === 'string' && cls) visible.property = `Show ${sentenceCase(cls).toLowerCase()}`;\n return nodes;\n}\n\nfunction renderExpression(e: ts.Expression, scope: Scope, ctx: RenderContext, visible?: Node['visible']): Node[] {\n if (ts.isParenthesizedExpression(e)) return renderExpression(e.expression, scope, ctx, visible);\n if (ts.isBinaryExpression(e) && e.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken) {\n const t = visible ? undefined : toggleFor(e.left, scope);\n if (t) return nameToggle(t.visible, renderExpression(e.right, t.scope, ctx, t.visible), scope);\n return truthy(evaluate(e.left, scope)) ? renderExpression(e.right, scope, ctx, visible) : [];\n }\n if (ts.isConditionalExpression(e)) {\n // `cond ? a : b` draws b while the optional prop is off: no toggle (Figma cannot show b when a BOOLEAN is off).\n const t = visible || truthy(evaluate(e.whenFalse, scope)) ? undefined : toggleFor(e.condition, scope);\n if (t) return nameToggle(t.visible, renderExpression(e.whenTrue, t.scope, ctx, t.visible), scope);\n return renderExpression(truthy(evaluate(e.condition, scope)) ? e.whenTrue : e.whenFalse, scope, ctx, visible);\n }\n if (ts.isJsxElement(e) || ts.isJsxSelfClosingElement(e) || ts.isJsxFragment(e)) return renderJsx({ jsx: e, scope }, ctx, visible);\n const v = evaluate(e, scope);\n if (v === CHILDREN) {\n if (scope.preview?.some((c) => typeof c !== 'string')) return renderPreview(scope.preview, ctx);\n return [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Label', default: ctx.component, prop: 'children' } }];\n }\n if (isTextRef(v)) {\n const property = v.textProp === 'children' ? 'Label' : sentenceCase(v.textProp);\n return [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property, default: v.text, prop: v.textProp }, ...(visible ? { visible } : {}) }];\n }\n if (isChildrenRef(v)) return renderChildren(v.children, v.scope, ctx);\n if (typeof v === 'string' && v.trim()) return [{ ...textNode(v.trim(), v), ...(visible ? { visible } : {}) }];\n if (typeof v === 'string' && v) return [spaceNode(v)];\n if (typeof v === 'number') return [textNode(String(v))];\n if (isJsx(v)) return renderJsx(v, ctx, visible);\n if (Array.isArray(v) || isElementValue(v)) return renderValues([v], ctx);\n if (v === OPAQUE || isFnRef(v)) {\n const mapped = renderMap(e, scope, ctx);\n if (mapped) return mapped;\n // A render function child of a Base UI list (`<Combobox.List>{renderItem}</Combobox.List>`): called for each item of\n // the root's `items`.\n const fn = functionOf(e, scope);\n if (fn && ctx.items) return renderValues(ctx.items.map((item) => callArrow(fn, [item], scope)), ctx);\n // A render function child of a Base UI value display (`<Slider.Value>{(formatted) => ...}</Slider.Value>`): called\n // with the value Base UI formats.\n if (fn && ctx.valueArgs) {\n const out = callArrow(fn, ctx.valueArgs, scope);\n if (out !== OPAQUE) return renderValues([out], ctx);\n }\n ctx.blockers?.push('shows content computed while the page runs');\n }\n return [];\n}\n\n/** The function an expression names: an arrow, a local holding one, or the branch of a condition that is one. */\nfunction functionOf(e: ts.Expression, scope: Scope): ts.ArrowFunction | ts.FunctionExpression | undefined {\n if (ts.isParenthesizedExpression(e)) return functionOf(e.expression, scope);\n if (ts.isArrowFunction(e) || ts.isFunctionExpression(e)) return e;\n if (ts.isIdentifier(e)) {\n const init = scope.inits?.get(e.text) ?? scope.locals.get(e.text);\n return init ? functionOf(init, scope) : undefined;\n }\n if (ts.isConditionalExpression(e)) {\n const c = evaluate(e.condition, scope);\n return c === OPAQUE ? undefined : functionOf(truthy(c) ? e.whenTrue : e.whenFalse, scope);\n }\n return undefined;\n}\n\n/** A list of rendered values (a `.map()` of elements, texts): each drawn in order. */\n/** An element made by `createElement` or `useRender`, with its props and children values. */\ninterface ElementValue {\n element: string;\n props: Record<string, Value>;\n kids: Value[];\n}\nconst isElementValue = (v: Value): v is ElementValue & Value => !!v && typeof v === 'object' && 'element' in (v as object) && 'kids' in (v as object);\n\nfunction elementNode(el: ElementValue, ctx: RenderContext): Node {\n const node: Node = { key: '', tag: el.element, classes: classList(el.props.className), children: [], kind: 'frame' };\n const kids = el.kids.length ? el.kids : el.props.children !== undefined ? [el.props.children] : [];\n for (const k of kids) {\n if (k === CHILDREN) node.children.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Label', default: ctx.component, prop: 'children' } });\n else if (isTextRef(k)) node.children.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: k.textProp === 'children' ? 'Label' : sentenceCase(k.textProp), default: k.text, prop: k.textProp } });\n else node.children.push(...renderValues([k], ctx));\n }\n return node;\n}\n\nfunction renderValues(list: Value[], ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const v of list) {\n if (isElementValue(v)) out.push(elementNode(v, ctx));\n else if (isChildrenRef(v)) out.push(...renderChildren(v.children, v.scope, ctx));\n else if (isTextRef(v)) out.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: v.textProp === 'children' ? 'Label' : sentenceCase(v.textProp), default: v.text, prop: v.textProp } });\n else if (isJsx(v)) out.push(...renderJsx(v, ctx));\n else if (Array.isArray(v)) out.push(...renderValues(v, ctx));\n else if ((typeof v === 'string' && v.trim()) || typeof v === 'number') out.push(textNode(String(v).trim(), String(v)));\n else if (typeof v === 'string' && v) out.push(spaceNode(v));\n else if (v === OPAQUE) ctx.blockers?.push('shows content computed while the page runs');\n }\n return out;\n}\n\n/**\n * `items.map((item) => <X>{item.label}</X>)` over a list the docs preview gives (a segmented control's items): one\n * element per item, rendered with the item bound. Undefined when the list is not known.\n */\nfunction renderMap(e: ts.Expression, scope: Scope, ctx: RenderContext): Node[] | undefined {\n if (!ts.isCallExpression(e) || !ts.isPropertyAccessExpression(e.expression) || e.expression.name.text !== 'map') return undefined;\n const list = evaluate(e.expression.expression, scope);\n const fn = e.arguments[0];\n if (!Array.isArray(list) || !fn || !(ts.isArrowFunction(fn) || ts.isFunctionExpression(fn))) return undefined;\n const param = fn.parameters[0];\n const out: Node[] = [];\n list.forEach((item, i) => {\n const vars = new Map(scope.vars);\n if (param && ts.isIdentifier(param.name)) vars.set(param.name.text, item);\n else if (param && ts.isObjectBindingPattern(param.name) && item && typeof item === 'object')\n for (const el of param.name.elements) if (ts.isIdentifier(el.name)) vars.set(el.name.text, (item as Record<string, Value>)[(el.propertyName ?? el.name).getText(scope.src.sf)]);\n const index = fn.parameters[1];\n if (index && ts.isIdentifier(index.name)) vars.set(index.name.text, i);\n const inner: Scope = { ...scope, vars, locals: new Map(scope.locals), inits: new Map(scope.inits ?? []) };\n const body = fn.body;\n if (ts.isBlock(body)) {\n for (const st of body.statements) {\n if (ts.isVariableStatement(st))\n for (const d of st.declarationList.declarations) {\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n inner.locals.set(d.name.text, d.initializer);\n inner.inits!.set(d.name.text, d.initializer);\n }\n if (ts.isReturnStatement(st) && st.expression) {\n out.push(...renderExpression(st.expression, inner, ctx));\n break;\n }\n }\n } else out.push(...renderExpression(body, inner, ctx));\n });\n return out;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Docs preview content\n\n/** An element of a docs.json preview ({ c, p, children }) or a text. */\ntype DocChild = string | { c: string; p?: Record<string, unknown>; children?: DocChild[] };\n\n/** The first element of a docs preview drawing `name`, depth first. */\nfunction previewElement(v: unknown, name: string): Exclude<DocChild, string> | undefined {\n if (Array.isArray(v)) {\n for (const x of v) {\n const hit = previewElement(x, name);\n if (hit) return hit;\n }\n return undefined;\n }\n if (!v || typeof v !== 'object') return undefined;\n const n = v as Exclude<DocChild, string>;\n if (n.c === name) return n;\n return previewElement(n.children, name);\n}\n\n/**\n * The first element `<name>` of a stories file that has content, as a docs preview element: literal props, icons by\n * name, text and element children. Expressions it cannot read are left out.\n */\nfunction storyElement(sf: ts.SourceFile | undefined, name: string): Exclude<DocChild, string> | undefined {\n if (!sf) return undefined;\n const lucide = new Set<string>();\n for (const st of sf.statements) {\n if (!ts.isImportDeclaration(st) || unquote(st.moduleSpecifier.getText(sf)) !== 'lucide-react') continue;\n const b = st.importClause?.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) lucide.add(e.name.text);\n }\n const convert = (n: ts.JsxElement | ts.JsxSelfClosingElement): Exclude<DocChild, string> => {\n const open = ts.isJsxElement(n) ? n.openingElement : n;\n const p: Record<string, unknown> = {};\n for (const a of open.attributes.properties) {\n if (!ts.isJsxAttribute(a)) continue;\n const key = a.name.getText(sf);\n const init = a.initializer;\n if (!init) p[key] = true;\n else if (ts.isStringLiteral(init)) p[key] = init.text;\n else if (ts.isJsxExpression(init) && init.expression) {\n const e = init.expression;\n if (ts.isStringLiteral(e) || ts.isNoSubstitutionTemplateLiteral(e)) p[key] = e.text;\n else if (ts.isNumericLiteral(e)) p[key] = Number(e.text);\n else if (e.kind === ts.SyntaxKind.TrueKeyword || e.kind === ts.SyntaxKind.FalseKeyword) p[key] = e.kind === ts.SyntaxKind.TrueKeyword;\n else if (ts.isIdentifier(e) && lucide.has(e.text)) p[key] = e.text;\n }\n }\n const children: DocChild[] = [];\n if (ts.isJsxElement(n))\n for (const c of n.children) {\n if (ts.isJsxText(c)) {\n const t = c.text.replace(/\\s+/g, ' ').trim();\n if (t) children.push(t);\n } else if (ts.isJsxElement(c) || ts.isJsxSelfClosingElement(c)) children.push(convert(c));\n else if (ts.isJsxExpression(c) && c.expression && (ts.isStringLiteral(c.expression) || ts.isNoSubstitutionTemplateLiteral(c.expression))) children.push(c.expression.text);\n }\n return { c: open.tagName.getText(sf), ...(Object.keys(p).length ? { p } : {}), ...(children.length ? { children } : {}) };\n };\n let found: Exclude<DocChild, string> | undefined;\n const visit = (n: ts.Node) => {\n if (found) return;\n if ((ts.isJsxElement(n) || ts.isJsxSelfClosingElement(n)) && (ts.isJsxElement(n) ? n.openingElement : n).tagName.getText(sf) === name) {\n const el = convert(n);\n if (el.children?.some((c) => typeof c !== 'string')) found = el;\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n return found;\n}\n\n/** Literal props of a preview element (strings, numbers, booleans): what code gets. */\nfunction previewProps(el: Exclude<DocChild, string>): Record<string, Value> {\n const out: Record<string, Value> = {};\n for (const [k, v] of Object.entries(el.p ?? {})) if (v !== null && v !== undefined) out[k] = jsonValue(v);\n return out;\n}\n\n/** A JSON value of a docs preview (strings, numbers, lists and objects of them) as an evaluator value. */\nfunction jsonValue(v: unknown): Value {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null) return v;\n if (Array.isArray(v)) return v.map(jsonValue);\n if (v && typeof v === 'object') return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, jsonValue(x)]));\n return undefined;\n}\n\n/** Preview children drawn for `{children}`: design system elements through their own TSX, texts as text. */\nfunction renderPreview(children: DocChild[], ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const c of children) {\n if (typeof c === 'string') {\n if (c.trim()) out.push(textNode(c.trim()));\n continue;\n }\n if (!ctx.reader.exists(c.c) || ctx.depth >= 4) continue;\n const kids = c.children ?? [];\n let props: Record<string, Value> = previewProps(c);\n if (kids.length && kids.every((k) => typeof k === 'string')) props.children = (kids as string[]).join(' ');\n else if (kids.length) props.children = CHILDREN;\n props = withFormError(c.c, props, ctx);\n const n = renderComponent(ctx.reader, c.c, props, { ...ctx, depth: ctx.depth + 1 }, undefined, kids.some((k) => typeof k !== 'string') ? kids : undefined);\n if (n) out.push(n);\n else ctx.blockers?.push(`cannot draw its ${c.c} parts yet`);\n }\n return out;\n}\n\n/**\n * `return useRender({ defaultTagName: 'a', props: mergeProps({ className, children }, rest) })` (Base UI's render\n * hook, Link): the element it renders by default, with its class names and children.\n */\nfunction useRenderElement(fn: ts.FunctionLikeDeclaration, scope: Scope, ctx: RenderContext): Node[] | undefined {\n if (!fn.body || !ts.isBlock(fn.body)) return undefined;\n const ret = fn.body.statements.find(ts.isReturnStatement)?.expression;\n if (!ret || !ts.isCallExpression(ret) || ret.expression.getText(scope.src.sf) !== 'useRender' || !ret.arguments[0]) return undefined;\n const opts = evaluate(ret.arguments[0], scope) as Record<string, Value> | undefined;\n const tag = typeof opts?.defaultTagName === 'string' ? opts.defaultTagName : 'div';\n const props = (opts?.props && typeof opts.props === 'object' ? opts.props : {}) as Record<string, Value>;\n return [elementNode({ element: tag, props, kids: [] }, ctx)];\n}\n\n/** Renders a component for the given props into a node tree (its root node). */\nfunction renderComponent(reader: Reader, name: string, props: Record<string, Value>, ctx: RenderContext, fnOverride?: ts.FunctionLikeDeclaration, preview?: DocChild[]): Node | undefined {\n const src = reader.load(name);\n const fn = fnOverride ?? src?.fn;\n if (!src || !fn) return undefined;\n const scope: Scope = { src, vars: new Map(), locals: new Map(), toggles: new Map(), main: ctx.depth === 0, inits: new Map(), ...(preview ? { preview } : {}), ...(ctx.contexts ? { contexts: ctx.contexts } : {}) };\n const given = { ...props };\n if (!scope.main) {\n const on = (k: string) => props[k] === true;\n scope.checked = on('indeterminate') ? 'mixed' : on('checked') || on('defaultChecked') ? 'true' : 'false';\n }\n if (scope.main) {\n // Content props the component writes (\"label\", \"description\"): TEXT properties, defaulting to their name.\n for (const p of src.props.values()) {\n if (given[p.name] !== undefined || p.name === 'children') continue;\n if (p.kind === 'node' && !p.optional) given[p.name] = { textProp: p.name, text: sentenceCase(p.name) };\n if (p.kind === 'string' && !p.optional) given[p.name] = sentenceCase(p.name);\n }\n }\n const names = bindProps(fn, scope, given);\n if (scope.main) {\n // Optional icon props are BOOLEAN properties (\"Icon start\"): their JSX condition shows a part. So are optional\n // content props (\"Show description\") and optional strings a part depends on (an avatar photo's `src`).\n scope.toggleValues = new Map();\n for (const [local, prop] of names) {\n const info = src.props.get(prop);\n if (!info?.optional || given[prop] !== undefined) continue;\n if (info.kind === 'icon') scope.toggles.set(local, prop);\n else if (info.kind === 'node' && prop !== 'children') {\n scope.toggles.set(local, prop);\n scope.toggleValues.set(local, { textProp: prop, text: sentenceCase(prop) });\n } else if (info.kind === 'string') {\n scope.toggles.set(local, prop);\n // Text the example gives (a token name): drawn with it, shown by default, like the example.\n const example = ctx.examples?.[prop];\n scope.toggleValues.set(local, typeof example === 'string' ? example : sentenceCase(prop));\n if (typeof example === 'string') (scope.toggleOn ??= new Set()).add(prop);\n }\n }\n }\n const jsx = renderedJsx(fn, scope);\n const nodes = jsx ? renderJsx(jsx, ctx) : useRenderElement(fn, scope, ctx);\n if (!nodes) return undefined;\n return nodes.length === 1 ? nodes[0] : nodes.length ? { key: '', tag: 'div', classes: [], children: nodes, kind: 'frame' } : undefined;\n}\n\n/** A wrapper whose only child is the text becomes the text part itself (Button's `<span class=\"label\">`). */\nfunction collapseText(n: Node, root = true, boxed: (n: Node) => boolean = () => false, unseen: (n: Node) => boolean = () => false): Node {\n n.children = n.children.map((c) => collapseText(c, false, boxed, unseen));\n // Screen reader text inside a run (a status word before a detail): never drawn, so not part of the drawn sentence.\n const seen = n.children.filter((c) => !unseen(c));\n if (seen.length < n.children.length && seen.length && /^(span|p|label|small|strong|em|code)$/.test(n.tag)) n.children = seen;\n // Inline text runs (\"Page <span>6</span> of <span>12</span>\"): one text layer with the whole sentence, styled like\n // its first run (Figma would need mixed styles for the rest). Only texts written in code, never a TEXT property.\n const run = (c: Node): string | undefined =>\n c.kind === 'text' && c.chars !== undefined && !c.visible ? (c.raw ?? c.chars) : c.tag === 'span' && c.kind === 'frame' && !c.visible && c.children.length === 1 ? run(c.children[0]!) : undefined;\n if (n.kind === 'frame' && n.children.filter((c) => !c.space).length > 1 && /^(span|p|label|small|strong|em|code)$/.test(n.tag) && n.children.every((c) => run(c) !== undefined)) {\n // Joined as React renders them: the spaces the texts have (`Page ` before `{page}`, a space between words), none\n // between two texts of one expression (`color` `.` `action`); elements with nothing between them keep one space.\n let chars = '';\n n.children.forEach((c, i) => {\n const text = run(c)!;\n const prev = n.children[i - 1];\n if (prev) {\n const before = run(prev)!;\n chars += /\\s$/.test(before) || /^\\s/.test(text) || (prev.tag === '#text' && c.tag === '#text') ? '' : ' ';\n }\n chars += text;\n });\n n.children = [{ ...textNode(chars.replace(/\\s+/g, ' ').trim()) }];\n }\n n.children = n.children.filter((c) => !c.space);\n // Only inline wrappers (span): a block (Card header) keeps its frame for its padding.\n // Not when the span paints a box (a pill, a count badge): the box stays a frame around its text.\n if (!root && n.tag === 'span' && !n.name && n.kind === 'frame' && n.children.length === 1 && n.children[0]!.kind === 'text' && !n.children[0]!.classes.length && !n.children[0]!.inputLike && !boxed(n)) {\n const t = n.children[0]!;\n return { ...t, tag: n.tag, classes: n.classes, ...(n.visible ? { visible: n.visible } : {}) };\n }\n return n;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Spec\n\ninterface Built {\n /** What the render could not draw faithfully. */\n blockers: string[];\n root: Node;\n /** Part id -> node, in tree order. */\n parts: Map<string, Node>;\n parents: Map<string, string | undefined>;\n}\n\n/**\n * The values an element with `classes` inherits where `root` draws it: computed down the path from `root` to its\n * parent, from `page`. Undefined when no element of the tree has those classes.\n */\nfunction inheritedInside(root: Node, classes: string[], rules: CssRule[], page: Map<string, string> | undefined): Map<string, string> | undefined {\n const path: Node[] = [];\n const find = (n: Node): boolean => {\n if (n !== root && classes.every((c) => n.classes.includes(c))) return true;\n path.push(n);\n for (const c of n.children) if (find(c)) return true;\n path.pop();\n return false;\n };\n if (!find(root)) return undefined;\n let ctx = page;\n for (const n of path) {\n if (n.kind !== 'frame') continue;\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n ctx = computeValues(declaredFor(rules, el, DEFAULT_STATE), ctx);\n }\n return ctx;\n}\n\n/** Renders the main component for one set of axis values, with stable part ids. */\n/**\n * Which part of a component with a popup a set draws: the component without its popup (a select's trigger), or the\n * popup alone drawn open (`*.Popup` under the `*.Portal`), the way a Figma UI kit draws menus and dialogs.\n */\nexport type SpecView = 'without-popup' | 'popup';\n\n/** The tree without its portals (popups), or the first `*.Popup` under a portal as the root. */\nfunction applyView(root: Node, view: SpecView | undefined): Node | undefined {\n if (!view) return root;\n const isPortal = (n: Node) => /\\.Portal$/.test(n.tag);\n if (view === 'without-popup') {\n const strip = (n: Node): Node => ({ ...n, children: n.children.filter((c) => !isPortal(c)).map(strip) });\n return isPortal(root) ? undefined : strip(root);\n }\n let found: Node | undefined;\n const find = (n: Node, inPortal: boolean) => {\n if (found) return;\n if (inPortal && /\\.Popup$/.test(n.tag)) found = n;\n for (const c of n.children) find(c, inPortal || isPortal(n));\n };\n find(root, false);\n // Submenus and nested popups stay closed: only the popup itself is drawn open.\n const strip = (n: Node): Node => ({ ...n, children: n.children.filter((c) => !isPortal(c)).map(strip) });\n return found ? strip({ ...found, visible: undefined }) : undefined;\n}\n\nfunction build(reader: Reader, src: ComponentSource, props: Record<string, Value>, preview?: DocChild[], view?: SpecView, rules: CssRule[] = [], tokens?: Map<string, TokenInfo>, examples?: Record<string, Value>): Built | undefined {\n const blockers: string[] = [];\n const dv = props.defaultValue;\n const selected = typeof dv === 'string' ? dv : Array.isArray(dv) && dv.every((x) => typeof x === 'string') ? (dv as string[]) : undefined;\n const rendered = renderComponent(reader, src.name, { ...props, children: CHILDREN }, { reader, depth: 0, component: src.name, blockers, ...(selected !== undefined ? { selected } : {}), ...(examples ? { examples } : {}) }, undefined, preview);\n let root = rendered && applyView(rendered, view);\n if (!root) return undefined;\n // An unstyled outer element around one child (a select's Base UI root around its trigger): the child is the set.\n const overlay = (n: Node) => POPUP_PART.test(n.tag) || /\\.Portal$/.test(n.tag);\n while (root.children.length === 1 && !root.classes.length && !root.attrs && root.kind === 'frame' && !overlay(root) && root.children[0]!.kind === 'frame' && !root.children[0]!.visible && !overlay(root.children[0]!))\n root = root.children[0]!;\n // Compound components (Card): children come through props, so draw the parts the file exports (CardHeader...).\n if (root.takesChildren && !root.children.length && src.subcomponents.length) {\n root.fromExports = true;\n for (const sub of src.subcomponents) {\n const label = sub.name.slice(src.name.length);\n const n = renderComponent(reader, src.name, {}, { reader, depth: 1, component: src.name, blockers }, sub.fn);\n if (!n) continue;\n n.name = label;\n if (n.takesChildren && !n.children.length) n.children = [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: label, default: label } }];\n root.children.push(n);\n }\n }\n // Parts inside a selected option (a radio's dot) carry its checked state, as Base UI sets it on them. A panel of an\n // item that is not open (an accordion item outside its defaultValue, or alone) is not mounted: not drawn.\n const follow = (n: Node, inherited: Node['checked'], item?: Node) => {\n if (n.baseUi && n.selectedBy) inherited = n.checked;\n else if (n.baseUi && inherited) n.checked = inherited;\n if (n.baseUi && /\\.Item$/.test(n.tag)) item = n;\n if (n.baseUi && /\\.Panel$/.test(n.tag) && item && item.checked !== 'true' && item.checked !== 'state') n.inactive = true;\n for (const c of n.children) follow(c, inherited, item);\n };\n follow(root, undefined);\n decorate(root, rules, tokens);\n // A span that paints a box in its default look (background, border or padding): kept as a frame.\n const boxed = (n: Node) => {\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n const d = declaredFor(rules, el, DEFAULT_STATE);\n const set = (k: string) => d.has(k) && !/^(0|0px|none|transparent)$/.test(d.get(k)!.value.trim());\n return ['background-color', 'border-top-width', 'padding-left', 'padding-top'].some(set);\n };\n // Visually hidden (the screen reader text pattern): left out of the text runs it sits in.\n const unseen = (n: Node) => {\n if (n.kind !== 'frame' && n.kind !== 'text') return false;\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n return visuallyHidden(new Map([...declaredFor(rules, el, DEFAULT_STATE)].map(([k, d]) => [k, d.value])));\n };\n const tree = collapseText(root, true, boxed, unseen);\n const parts = new Map<string, Node>();\n const parents = new Map<string, string | undefined>();\n const used = new Set<string>();\n const slug = (s: string) => s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n const assign = (n: Node, parent: string | undefined) => {\n let base: string;\n if (!parent) base = 'root';\n else if (n.visible) base = slug(n.visible.prop);\n else if (n.text && n.kind === 'text' && !n.placeholder) base = n.text.prop === 'children' ? 'text' : `${slug(n.text.property)}-text`;\n else if (n.placeholder) base = 'placeholder';\n else if (n.name) base = slug(n.name);\n else base = slug(n.classes[0]?.split('|')[1] ?? (n.chars !== undefined ? 'text' : n.tag)) || 'part';\n let id = base;\n for (let i = 2; used.has(id); i++) id = `${base}-${i}`;\n used.add(id);\n n.key = id;\n parts.set(id, n);\n parents.set(id, parent);\n for (const c of n.children) assign(c, id);\n };\n assign(tree, undefined);\n return { root: tree, parts, parents, blockers };\n}\n\n/** CSS elements of a node tree (no part ids yet), for the cascade before the parts are named. */\nfunction cssElements(root: Node): Map<Node, CssElement> {\n const out = new Map<Node, CssElement>();\n const make = (n: Node, parent: CssElement | undefined): CssElement => {\n const el: CssElement = {\n tag: n.tag,\n classes: new Set(n.classes),\n parent,\n children: [],\n present: (!n.visible || !!n.visible.on) && !n.pseudo,\n isRoot: !parent,\n inputLike: !!n.inputLike,\n ...(n.baseUi ? { baseUi: true, checked: n.checked } : {}),\n ...(n.attrs ? { attrs: n.attrs } : {}),\n };\n out.set(n, el);\n el.children = n.children.map((c) => make(c, el));\n return el;\n };\n make(root, undefined);\n return out;\n}\n\nconst declaredVarCache = new WeakMap<CssRule[], Set<string>>();\n/** Custom properties the stylesheets declare (`--_height`): a var() of any other one that is not a token is set at run time. */\nfunction declaredVars(rules: CssRule[]): Set<string> {\n let s = declaredVarCache.get(rules);\n if (!s) {\n s = new Set(rules.flatMap((r) => r.decls.filter((d) => d.prop.startsWith('--')).map((d) => d.prop)));\n declaredVarCache.set(rules, s);\n }\n return s;\n}\n\n/** `var(--active-tab-left)`: a custom property Base UI sets while the page runs (no rule declares it, not a token). */\nfunction runtimeVar(raw: string | undefined, rules: CssRule[], tokens: Map<string, TokenInfo> | undefined): boolean {\n const m = raw ? /^var\\(\\s*(--[\\w-]+)\\s*\\)$/.exec(raw.trim()) : null;\n return !!m && !declaredVars(rules).has(m[1]!) && !tokens?.has(m[1]!);\n}\n\n/** Paints of a `::before` / `::after` that make it a visible decoration. */\nconst PSEUDO_PAINTS = ['background-color', 'border-top-width', 'border-bottom-width', 'border-left-width', 'border-right-width'];\n\n/**\n * Layers the CSS draws without an element of their own, made into nodes so Figma gets a layer for them:\n * - `::before` / `::after` with empty content that paint (a hairline under a tab list): a \"Decoration\" frame, first\n * when it sits under its siblings (negative z-index or ::before), else last. Styled from its host's pseudo rules.\n * - A Base UI indicator sized at run time to the selected item (`left: var(--active-tab-left)`): moved into that item,\n * first (under its content), to fill it where code reads the item's size.\n */\nfunction decorate(root: Node, rules: CssRule[], tokens: Map<string, TokenInfo> | undefined): void {\n if (!rules.length) return;\n const els = cssElements(root);\n const visit = (n: Node, parent: Node | undefined) => {\n for (const c of [...n.children]) visit(c, n);\n if (n.kind !== 'frame' || n.svgAttrs || n.pseudo) return;\n const el = els.get(n)!;\n if (n.baseUi && n.whenChecked && /\\.Indicator$/.test(n.tag) && parent) {\n const d = declaredFor(rules, el, DEFAULT_STATE);\n if (['left', 'top', 'width', 'height'].some((k) => runtimeVar(d.get(k)?.value, rules, tokens))) {\n const item = parent.children.find((s) => s !== n && s.baseUi && s.selectedBy && s.checked === 'true');\n if (item) {\n parent.children.splice(parent.children.indexOf(n), 1);\n item.children.unshift(n);\n n.follows = true;\n delete n.whenChecked;\n }\n }\n }\n for (const pseudo of ['before', 'after'] as const) {\n const d = declaredFor(rules, el, DEFAULT_STATE, pseudo);\n if (!/^(\"\"|'')$/.test(d.get('content')?.value.trim() ?? '')) continue;\n if (!PSEUDO_PAINTS.some((k) => d.has(k) && !/^(0|none|transparent)$/.test(d.get(k)!.value.trim()))) continue;\n const deco: Node = { key: '', tag: `::${pseudo}`, classes: [], children: [], kind: 'frame', pseudo, name: 'Decoration' };\n if (pseudo === 'before' || /^-/.test(d.get('z-index')?.value.trim() ?? '')) n.children.unshift(deco);\n else n.children.push(deco);\n }\n };\n visit(root, undefined);\n}\n\nfunction toCssTree(b: Built): Map<string, CssElement> {\n const els = new Map<string, CssElement>();\n const make = (n: Node, parent: CssElement | undefined): CssElement => {\n const el: CssElement = {\n tag: n.tag,\n classes: new Set(n.classes),\n parent,\n children: [],\n present: (!n.visible || !!n.visible.on) && !n.pseudo,\n isRoot: !parent,\n inputLike: !!n.inputLike,\n ...(n.baseUi ? { baseUi: true, checked: n.checked } : {}),\n ...(n.attrs ? { attrs: n.attrs } : {}),\n };\n els.set(n.key, el);\n el.children = n.children.map((c) => make(c, el));\n for (const [i, shape] of (n.shapes ?? []).entries()) {\n const sel: CssElement = { tag: shape.tag, classes: new Set(shape.classes), parent: el, children: [], present: true, isRoot: false, inputLike: false };\n els.set(`${n.key}#shape-${i}`, sel);\n el.children.push(sel);\n }\n return el;\n };\n make(b.root, undefined);\n return els;\n}\n\ninterface Resolved {\n value?: SpecValue;\n unmapped?: string;\n}\n\nconst isZero = (v: string) => /^0(px|rem|em|%)?$/.test(v);\n\n/** A CSS value as a token path, a literal 0, or null (no paint). */\nfunction resolveValue(raw: string | undefined, values: Map<string, string>, tokens: Map<string, TokenInfo>, depth = 0, parent?: Map<string, string>, forColor = false): Resolved | undefined {\n if (raw === undefined) return undefined;\n const v = raw.trim();\n const low = v.toLowerCase();\n if (depth > 12) return { unmapped: 'custom properties form a cycle' };\n if (low === 'transparent' || low === 'none') return { value: null };\n if (isZero(v)) return { value: 0 };\n // currentcolor is the element's color; inside `color` itself it is the parent's (CSS Color 4).\n if (low === 'currentcolor') return forColor ? resolveValue(parent?.get('color'), parent ?? new Map(), tokens, depth + 1) : resolveValue(values.get('color'), values, tokens, depth + 1, parent, true);\n if (low === 'normal' || low === 'auto' || low === 'inherit' || low === 'initial' || low === 'unset' || low === 'medium') return undefined;\n const m = /^var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([\\s\\S]+))?\\)$/.exec(v);\n if (m) {\n const name = m[1]!;\n const token = tokens.get(name);\n if (token) return { value: token.path };\n if (values.has(name)) return resolveValue(values.get(name), values, tokens, depth + 1, parent, forColor);\n if (m[2] !== undefined) return resolveValue(m[2], values, tokens, depth + 1, parent, forColor);\n return { unmapped: `${name} is not a token` };\n }\n if (/^calc\\(/i.test(v)) return calcValue(v, values, tokens, depth, parent);\n // min(a, b) for a size that shrinks on small screens (`min(var(--size-140), 100%)`): the token it is designed at.\n const mm = /^min\\(([\\s\\S]+)\\)$/i.exec(v);\n if (mm) {\n for (const arg of splitTop(mm[1]!, ',')) {\n const r = resolveValue(arg, values, tokens, depth + 1, parent, forColor);\n if (r && r.unmapped === undefined && typeof r.value === 'string') return r;\n }\n return { unmapped: 'min() of no token' };\n }\n if (v === '100%') return { unmapped: 'fills its container: Figma draws it at a fixed width' };\n if (/%$/.test(v)) return { unmapped: 'relative size: the Figma part hugs its content' };\n return { unmapped: 'literal value, not a token' };\n}\n\n/**\n * A calc() of tokens (\"calc(var(--space-2) + var(--space-0-5))\") as an expression of token paths: \"calc(space.2 + space.0-5)\".\n * A calc() of a single token is that token (bound in Figma). Literals other than plain numbers and px are not mapped.\n */\nfunction calcValue(v: string, values: Map<string, string>, tokens: Map<string, TokenInfo>, depth: number, parent?: Map<string, string>): Resolved {\n let inner = v.slice(v.indexOf('(') + 1, v.lastIndexOf(')'));\n let failed: string | undefined;\n // 1lh is the element's line height: its font size times its line-height factor, both tokens (a textarea of 3 rows).\n if (/\\d*\\.?\\d+lh\\b/.test(inner)) {\n const fs = resolveValue(values.get('font-size'), values, tokens, depth + 1, parent);\n const lh = resolveValue(values.get('line-height'), values, tokens, depth + 1, parent);\n if (typeof fs?.value === 'string' && typeof lh?.value === 'string' && !fs.value.startsWith('calc(') && !lh.value.startsWith('calc(')) {\n inner = inner.replace(/(\\d*\\.?\\d+)lh\\b/g, (_m, n: string) => (Number(n) === 1 ? `(${fs.value} * ${lh.value})` : `${n} * (${fs.value} * ${lh.value})`));\n }\n }\n const substituted = inner.replace(/var\\(\\s*--[\\w-]+\\s*(?:,[^()]*)?\\)/g, (m) => {\n // A custom property holding a plain number (`--_min-rows: 3`, set inline from a prop): that number.\n let raw: string | undefined = m;\n for (let hops = 0; hops < 12 && raw; hops++) {\n const name = /^var\\(\\s*(--[\\w-]+)/.exec(raw.trim())?.[1];\n if (!name || tokens.has(name)) break;\n raw = values.get(name);\n }\n if (raw !== undefined && /^-?\\d*\\.?\\d+$/.test(raw.trim())) return raw.trim();\n const r = resolveValue(m, values, tokens, depth + 1, parent);\n if (!r || r.unmapped !== undefined || r.value === null || r.value === undefined) {\n failed ??= r?.unmapped ?? `${m} has no value`;\n return '0';\n }\n if (typeof r.value === 'number') return String(r.value);\n return r.value.startsWith('calc(') ? `(${r.value.slice(5, -1)})` : r.value;\n });\n if (failed) return { unmapped: `calc(): ${failed}` };\n const types = typesOf(tokens);\n const parts = substituted.match(/[()*/]|[^\\s()*/]+/g) ?? [];\n for (const t of parts) {\n if (/^[()*/+-]$/.test(t) || /^-?\\d+(\\.\\d+)?(px)?$/.test(t) || types.has(t)) continue;\n return { unmapped: `calc() with ${t}: only tokens, numbers and px are mapped` };\n }\n const paths = parts.filter((t) => types.has(t));\n if (!paths.length) return { unmapped: 'calc() of literals, not a token' };\n if (parts.length === 1) return { value: paths[0]! };\n return { value: `calc(${parts.join(' ').replace(/\\( /g, '(').replace(/ \\)/g, ')')})` };\n}\n\nconst FRAME_FIELDS: [string, SpecField][] = [\n ['background-color', 'fill'],\n ['border-radius', 'cornerRadius'],\n ['padding-top', 'paddingTop'],\n ['padding-right', 'paddingRight'],\n ['padding-bottom', 'paddingBottom'],\n ['padding-left', 'paddingLeft'],\n ['gap', 'itemSpacing'],\n ['width', 'width'],\n ['height', 'height'],\n ['min-width', 'minWidth'],\n ['min-height', 'minHeight'],\n];\n\nconst TEXT_FIELDS: [string, SpecField][] = [\n ['color', 'textFill'],\n ['font-family', 'fontFamily'],\n ['font-size', 'fontSize'],\n ['font-weight', 'fontWeight'],\n ['line-height', 'lineHeight'],\n ['letter-spacing', 'letterSpacing'],\n];\n\n/** Fields CSS may give as a unitless number. */\nconst NUMBER_FIELDS: ReadonlySet<SpecField> = new Set(['strokeWeight', 'opacity']);\n\nconst SIDE_FIELDS: Record<string, SpecField> = { top: 'strokeTopWeight', right: 'strokeRightWeight', bottom: 'strokeBottomWeight', left: 'strokeLeftWeight' };\n\nconst typeCache = new WeakMap<Map<string, TokenInfo>, Map<string, TokenInfo>>();\n/** Token path -> token, for type checks. */\nfunction typesOf(tokens: Map<string, TokenInfo>): Map<string, TokenInfo> {\n let m = typeCache.get(tokens);\n if (!m) {\n m = new Map([...tokens.values()].map((t) => [t.path, t]));\n typeCache.set(tokens, m);\n }\n return m;\n}\n\nfunction expectedTypes(field: SpecField): string[] {\n if (field === 'textDecoration') return ['keyword'];\n if (COLOR_FIELDS.has(field)) return ['color'];\n if (field === 'fontFamily') return ['fontFamily'];\n if (field === 'fontWeight') return ['fontWeight', 'number'];\n if (field === 'opacity') return ['number'];\n return ['dimension', 'number'];\n}\n\ninterface PartValues {\n values: Partial<Record<SpecField, SpecValue>>;\n unmapped: { property: string; value: string; reason: string }[];\n}\n\nfunction partValues(node: Node, computed: Map<string, string>, own: Map<string, string>, tokens: Map<string, TokenInfo>, parent: Map<string, string> | undefined): PartValues {\n const out: PartValues = { values: {}, unmapped: [] };\n const set = (field: SpecField, prop: string, raw: string | undefined, skipZero = false) => {\n // Unitless numbers where CSS takes them (`stroke-width: 3`, `opacity: 0.5`): set as is, nothing to bind.\n if (raw !== undefined && NUMBER_FIELDS.has(field) && /^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(raw.trim())) {\n out.values[field] = Number(raw.trim());\n return;\n }\n // em: a multiple of the font size (the parent's, for font-size itself), from the font size token.\n const em = raw !== undefined ? /^(\\d*\\.?\\d+)em$/.exec(raw.trim()) : null;\n if (em) {\n const base = prop === 'font-size' ? parent?.get('font-size') : computed.get('font-size');\n const b = resolveValue(base, prop === 'font-size' ? (parent ?? new Map()) : computed, tokens, 0, parent);\n if (b && typeof b.value === 'string' && !b.value.startsWith('calc(')) {\n const n = Number(em[1]);\n out.values[field] = n === 1 ? b.value : `calc(${b.value} * ${n})`;\n return;\n }\n }\n const r = resolveValue(raw, computed, tokens, 0, parent, prop === 'color');\n if (!r) return;\n if (r.unmapped) {\n out.unmapped.push({ property: prop, value: raw!, reason: r.unmapped });\n return;\n }\n if (r.value === 0 && skipZero) return;\n if (r.value === null && !COLOR_FIELDS.has(field)) return;\n if (typeof r.value === 'string') {\n const t = typesOf(tokens).get(r.value);\n if (t && !expectedTypes(field).includes(t.type)) {\n out.unmapped.push({ property: prop, value: raw!, reason: `${r.value} is a ${t.type} token, ${field} needs ${expectedTypes(field).join(' or ')}` });\n return;\n }\n }\n out.values[field] = r.value as SpecValue;\n };\n // Opacity 0 hides the part and 1 is the default: only values in between are drawn.\n const opacity = own.get('opacity');\n const setOpacity = () => {\n if (opacity !== undefined && !/^(0|1|1\\.0+)$/.test(opacity.trim())) set('opacity', 'opacity', opacity);\n };\n if (node.kind === 'text') {\n for (const [prop, field] of TEXT_FIELDS) set(field, prop, computed.get(prop));\n // Underline (a link): a keyword, drawn unless its color is transparent (a standalone link at rest).\n const line = computed.get('text-decoration-line') ?? '';\n const lineColor = (computed.get('text-decoration-color') ?? '').trim().toLowerCase();\n const keyword = /underline/.test(line) ? 'UNDERLINE' : /line-through/.test(line) ? 'STRIKETHROUGH' : undefined;\n if (keyword && lineColor !== 'transparent') out.values.textDecoration = keyword;\n setOpacity();\n return out;\n }\n if (node.kind === 'icon') {\n set('width', 'width', computed.get('width'));\n set('height', 'height', computed.get('height'));\n set('stroke', 'color', computed.get('color'));\n set('strokeWeight', 'stroke-width', computed.get('stroke-width'));\n setOpacity();\n return out;\n }\n setOpacity();\n // Gap: the one along the auto layout direction; a wrapping row also spaces its lines (row-gap).\n const layout = layoutOf(computed);\n const gap = computed.get(layout.direction === 'HORIZONTAL' ? 'column-gap' : 'row-gap');\n for (const [prop, field] of FRAME_FIELDS) set(field, prop, field === 'itemSpacing' ? gap : computed.get(prop), field === 'minWidth' || field === 'minHeight');\n if (layout.wrap) set('counterAxisSpacing', 'row-gap', computed.get('row-gap'));\n // Borders: one stroke for four equal sides, or per-side weights (a top rule).\n const widths = (['top', 'right', 'bottom', 'left'] as const).map((s) => computed.get(`border-${s}-width`));\n const colors = (['top', 'right', 'bottom', 'left'] as const).map((s) => computed.get(`border-${s}-color`));\n const present = widths.map((w) => w !== undefined && !isZero(w));\n if (present.every(Boolean) && new Set(widths).size === 1 && new Set(colors).size === 1) {\n set('strokeWeight', 'border-width', widths[0]);\n set('stroke', 'border-color', colors[0]);\n } else if (present.some(Boolean)) {\n const colorAt = present.indexOf(true);\n set('stroke', 'border-color', colors[colorAt]);\n (['top', 'right', 'bottom', 'left'] as const).forEach((s, i) => (present[i] ? set(SIDE_FIELDS[s]!, `border-${s}-width`, widths[i]) : (out.values[SIDE_FIELDS[s]!] = 0)));\n }\n for (const [prop, reason] of Object.entries(REPORTED)) {\n const v = own.get(prop);\n if (v !== undefined && /var\\(/.test(v)) out.unmapped.push({ property: prop, value: v, reason });\n }\n contentBoxMinimums(out.values, computed, node.borderBox);\n return out;\n}\n\n/**\n * CSS min-height, min-width, height and width count the content box (box-sizing: content-box, the default): the padding\n * and the border come on top. Figma's include them. A checkbox row with `min-height: size.6` and `padding-block: space.0-5` is\n * 28px in code; drawn as minHeight size.6 it was 25. The minimum becomes the sum, as a calc() of the same tokens.\n */\nfunction contentBoxMinimums(values: PartValues['values'], computed: Map<string, string>, borderBoxByDefault = false): void {\n if ((computed.get('box-sizing') ?? (borderBoxByDefault ? 'border-box' : 'content-box')).trim() === 'border-box') return;\n const term = (v: SpecValue | undefined): string | undefined => {\n if (v === undefined || v === null || v === 0) return undefined;\n if (typeof v === 'number') return String(v);\n if (typeof v !== 'string') return undefined;\n return v.startsWith('calc(') ? `(${v.slice(5, -1)})` : v;\n };\n const sum = (base: SpecValue, extra: (SpecValue | undefined)[]): SpecValue => {\n const add = extra.map(term).filter((t): t is string => !!t);\n const head = term(base);\n if (!add.length || !head) return base;\n return `calc(${[head, ...add].join(' + ')})`;\n };\n const border = (side: 'Top' | 'Right' | 'Bottom' | 'Left') => values[`stroke${side}Weight` as SpecField] ?? values.strokeWeight;\n if (values.minHeight !== undefined) values.minHeight = sum(values.minHeight, [values.paddingTop, values.paddingBottom, border('Top'), border('Bottom')]);\n if (values.minWidth !== undefined) values.minWidth = sum(values.minWidth, [values.paddingLeft, values.paddingRight, border('Left'), border('Right')]);\n // height and width count the content box the same way: a table cell of height control.height.md with a 1px bottom\n // border is 45px in code (Table was 142px in Figma for 144).\n if (values.height !== undefined) values.height = sum(values.height, [values.paddingTop, values.paddingBottom, border('Top'), border('Bottom')]);\n if (values.width !== undefined) values.width = sum(values.width, [values.paddingLeft, values.paddingRight, border('Left'), border('Right')]);\n}\n\n/** A grid with no tracks of its own (`display: grid; place-items: center`): one cell, drawn as a centering auto layout. */\nconst singleCellGrid = (c: Map<string, string>) =>\n /grid/.test(c.get('display') ?? '') && ['grid-template-columns', 'grid-template-rows', 'grid-template-areas', 'grid-template', 'grid-auto-flow', 'grid-auto-columns'].every((k) => !c.get(k) || c.get(k) === 'none');\n\n/** The browser's display of table elements, when the CSS does not set one. */\nconst TABLE_DISPLAY: Record<string, string> = { table: 'table', thead: 'table-row-group', tbody: 'table-row-group', tfoot: 'table-row-group', tr: 'table-row', td: 'table-cell', th: 'table-cell', caption: 'table-caption' };\n\n/** Cross-axis alignment of grid items (align-items). */\nconst gridCounter = (v: string | undefined): SpecLayout['counter'] => (/center/.test(v ?? '') ? 'CENTER' : /end/.test(v ?? '') ? 'MAX' : /start/.test(v ?? '') ? 'MIN' : 'STRETCH');\n\nfunction layoutOf(computed: Map<string, string>): SpecLayout {\n const shown = computed.get('display');\n // A table row: its cells side by side, as tall as the row. A cell: its content placed by vertical-align and text-align.\n if (shown === 'table-row') return { direction: 'HORIZONTAL', primary: 'MIN', counter: 'STRETCH' };\n if (shown === 'table-cell') {\n const va = computed.get('vertical-align') ?? 'middle';\n const ta = computed.get('text-align') ?? 'start';\n return { direction: 'VERTICAL', primary: /middle/.test(va) ? 'CENTER' : /bottom/.test(va) ? 'MAX' : 'MIN', counter: /center/.test(ta) ? 'CENTER' : /(end|right)/.test(ta) ? 'MAX' : 'MIN' };\n }\n if (singleCellGrid(computed)) {\n const align = computed.get('align-items') ?? 'stretch';\n const justify = computed.get('justify-items') ?? 'stretch';\n const at = (v: string) => (/center/.test(v) ? 'CENTER' : /end/.test(v) ? 'MAX' : 'MIN');\n return { direction: 'VERTICAL', primary: at(align), counter: /stretch|normal/.test(justify) ? 'STRETCH' : at(justify) };\n }\n const dir = computed.get('flex-direction') ?? 'row';\n const display = computed.get('display') ?? 'block';\n const flex = /flex/.test(display);\n const justify = computed.get('justify-content') ?? 'normal';\n const align = computed.get('align-items') ?? 'normal';\n const primary = /center/.test(justify) ? 'CENTER' : /space-between/.test(justify) ? 'SPACE_BETWEEN' : /end/.test(justify) ? 'MAX' : 'MIN';\n const counter = /center/.test(align) ? 'CENTER' : /end/.test(align) ? 'MAX' : /stretch|normal/.test(align) && flex ? 'STRETCH' : 'MIN';\n return {\n direction: flex && !/column/.test(dir) ? 'HORIZONTAL' : 'VERTICAL',\n primary,\n counter: flex ? counter : 'STRETCH',\n ...(flex && /reverse/.test(dir) ? { reverse: true } : {}),\n ...(flex && !/column/.test(dir) && /^wrap/.test(computed.get('flex-wrap') ?? '') ? { wrap: true } : {}),\n };\n}\n\n/** `flex: 1` or `flex-grow` of 1 or more: the part takes the free space along its parent's auto layout direction. */\nfunction grows(c: Map<string, string> | undefined): boolean {\n const flex = c?.get('flex')?.trim();\n const grow = c?.get('flex-grow') ?? (flex && /^\\d/.test(flex) ? flex.split(/\\s+/)[0] : flex === 'auto' ? '1' : undefined);\n return grow !== undefined && Number(grow) >= 1;\n}\n\n/**\n * A block of text beside a fixed item in a row (`min-width: 0`, an alert's body next to its icon): in code it shrinks\n * so its text wraps at the row's width. Figma wraps text only in a layer of known width: Fill container.\n */\nfunction shrinksToFit(n: Node, c: Map<string, string> | undefined, parent: SpecLayout | undefined): boolean {\n return n.kind === 'frame' && parent?.direction === 'HORIZONTAL' && !parent.wrap && /^0(px)?$/.test(c?.get('min-width')?.trim() ?? '') && c?.get('flex-shrink')?.trim() !== '0' && !/^(none|0 0)/.test(c?.get('flex')?.trim() ?? '');\n}\n\n/** `overflow: hidden | clip`: the frame clips its content (a card's footer fill inside its rounded corners). */\nconst clips = (c: Map<string, string> | undefined) => /^(hidden|clip)\\b/.test(c?.get('overflow') ?? c?.get('overflow-x') ?? '');\n\n/** A block-level root (display block, flex, grid) or `width: 100%`: in code it fills its container's width. */\nconst INLINE_TAGS = new Set(['a', 'span', 'label', 'kbd', 'code', 'em', 'strong', 'b', 'i', 'small', 'abbr', 'button', 'input', 'textarea', 'select', 'img']);\n\nfunction fillsContainer(c: Map<string, string> | undefined, tag = 'div'): boolean {\n if (!c) return false;\n if (c.get('width') === '100%') return true;\n const display = c.get('display') ?? (INLINE_TAGS.has(tag) ? 'inline' : 'block');\n return /^(block|flex|grid|flow-root)$/.test(display);\n}\n\n/**\n * Why a component cannot be drawn faithfully: thrown by the generator, recorded in the coverage list as the reason\n * (\"opens a popup\", \"uses CSS grid\"). The message is plain language for designers.\n */\nexport class UnsupportedComponentError extends Error {\n constructor(\n public component: string,\n public reason: string,\n ) {\n super(`${component}: ${reason}`);\n }\n}\n\ninterface Evaluated {\n built: Built;\n values: SpecVariant['values'];\n unmapped: SpecUnmapped[];\n layouts: Map<string, SpecLayout>;\n /** Fingerprint of the classes rendered, to tell whether a prop changes anything. */\n classes: string;\n /** Part id -> computed CSS values. */\n computed: Map<string, Map<string, string>>;\n /** Parts not shown in this variant: display none, opacity 0, scale(0), visually hidden. */\n hidden: Set<string>;\n /** Parts drawn over their parent (absolute, filling it). */\n cover: Set<string>;\n /** Absolute parts pinned to their parent's edges, with the offsets. */\n pins: Map<string, NonNullable<SpecPart['pin']>>;\n /** Inline SVG parts: their markup and the stroke token of each shape. */\n vectors: Map<string, SpecVector>;\n /** Parts as wide or as tall as their parent (`width: 100%`). */\n stretch: Map<string, { width?: boolean; height?: boolean }>;\n /** What the generator cannot draw faithfully, in plain language. */\n blockers: string[];\n}\n\n/**\n * An inline `<svg>` as one vector layer: the markup with each shape's CSS written as attributes (stroke width,\n * opacity, dashes, line caps; `pathLength` dashes converted to lengths, a rotation of the svg baked in), and the\n * stroke color token of each shape, bound in Figma. Fills other than none, and values that are not tokens or numbers,\n * cannot be drawn faithfully.\n */\nfunction svgVector(node: Node, id: string, els: Map<string, CssElement>, rules: CssRule[], state: CssState, computed: Map<string, string>, tokens: Map<string, TokenInfo>): SpecVector | { blocker: string } {\n const esc = (v: string) => v.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n const num = (raw: string | undefined, values: Map<string, string>): number | undefined => {\n if (raw === undefined) return undefined;\n const t = raw.trim();\n if (/^-?\\d*\\.?\\d+$/.test(t)) return Number(t);\n // calc() of numbers and custom properties holding numbers (`calc(100 - var(--_pct))`).\n const sub = t.replace(/var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]+))?\\)/g, (_m, name: string, fb: string | undefined) => values.get(name) ?? fb ?? 'NaN');\n if (/^calc\\(/.test(sub) && /^[\\d\\s.+\\-*/()calc]+$/.test(sub)) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const n = Number(new Function(`return (${sub.replace(/calc/g, '')});`)());\n return Number.isFinite(n) ? n : undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n };\n const strokes: SpecValue[] = [];\n const shapes: string[] = [];\n for (const [i, shape] of (node.shapes ?? []).entries()) {\n const el = els.get(`${id}#shape-${i}`)!;\n const own = new Map([...declaredFor(rules, el, state)].map(([k, d]) => [k, d.value]));\n const c = computeValues(declaredFor(rules, el, state), computed);\n const attrs = { ...shape.svgAttrs };\n const fill = own.get('fill') ?? attrs.fill;\n if (fill && !/^(none|transparent)$/.test(fill)) return { blocker: 'draws SVG shapes with fills' };\n const strokeRaw = own.get('stroke') ?? attrs.stroke ?? node.svgAttrs?.stroke ?? 'currentcolor';\n const color = resolveValue(strokeRaw, c, tokens, 0, computed, false);\n if (!color || color.unmapped !== undefined || color.value === undefined) return { blocker: 'draws SVG shapes in colors that are not tokens' };\n strokes.push(color.value);\n const out: Record<string, string> = { ...attrs, fill: 'none', stroke: '#000000' };\n const width = num(own.get('stroke-width') ?? attrs['stroke-width'] ?? attrs.strokeWidth, c);\n if (width !== undefined) out['stroke-width'] = String(width);\n const opacity = num(own.get('opacity'), c);\n if (opacity !== undefined && opacity !== 1) out.opacity = String(opacity);\n const cap = own.get('stroke-linecap');\n if (cap) out['stroke-linecap'] = cap;\n const join = own.get('stroke-linejoin');\n if (join) out['stroke-linejoin'] = join;\n // Dashes against pathLength (a progress ring, a spinner arc): lengths on the real circumference.\n const pathLength = num(attrs.pathLength, c);\n const r = num(attrs.r, c);\n const scale = pathLength && r !== undefined ? (2 * Math.PI * r) / pathLength : 1;\n const dash = own.get('stroke-dasharray');\n if (dash) {\n const parts = splitTop(dash, /\\s|,/).map((x) => num(x, c));\n if (parts.some((x) => x === undefined)) return { blocker: 'draws SVG shapes with dashes it cannot read' };\n out['stroke-dasharray'] = parts.map((x) => +(x! * scale).toFixed(3)).join(' ');\n }\n const offset = own.get('stroke-dashoffset');\n if (offset) {\n const o = num(offset, c);\n if (o === undefined) return { blocker: 'draws SVG shapes with dashes it cannot read' };\n out['stroke-dashoffset'] = String(+(o * scale).toFixed(3));\n }\n delete out.pathLength;\n delete out.strokeWidth;\n delete out.key;\n shapes.push(`<${shape.tag} ${Object.entries(out).map(([k, v]) => `${k}=\"${esc(v)}\"`).join(' ')}/>`);\n }\n if (!shapes.length) return { blocker: 'draws SVG it cannot read' };\n const viewBox = node.svgAttrs?.viewBox ?? '0 0 24 24';\n const [, , w, h] = viewBox.split(/\\s+/).map(Number);\n // A rotation of the svg (a ring that starts at the top): baked into the drawing around its center.\n const rot = /^rotate\\((-?\\d+(?:\\.\\d+)?)deg\\)$/.exec(computed.get('transform')?.trim() ?? '');\n const body = rot ? `<g transform=\"rotate(${rot[1]} ${(w ?? 24) / 2} ${(h ?? 24) / 2})\">${shapes.join('')}</g>` : shapes.join('');\n return { svg: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w ?? 24}\" height=\"${h ?? 24}\" viewBox=\"${viewBox}\" fill=\"none\">${body}</svg>`, strokes };\n}\n\n/** Base UI parts that only exist while a popup or overlay is open. */\nconst POPUP_PART = /\\.(Portal|Popup|Positioner|Backdrop|Viewport)$/;\n\n/** `translateX(<value>)` of a transform, or undefined. */\nfunction translateX(transform: string | undefined): string | undefined {\n const m = /^translateX\\(([\\s\\S]+)\\)$/.exec(transform?.trim() ?? '');\n return m?.[1]?.trim();\n}\n\n/** An element hidden the way the visually hidden pattern does it: clipped to nothing, still read by screen readers. */\nconst visuallyHidden = (own: Map<string, string>) => /inset\\(50%\\)/.test(own.get('clip-path') ?? '') || /rect\\(0/.test(own.get('clip') ?? '');\n\nfunction evaluateVariant(\n reader: Reader,\n src: ComponentSource,\n rules: CssRule[],\n props: Record<string, Value>,\n state: CssState,\n tokens: Map<string, TokenInfo>,\n preview?: DocChild[],\n page?: Map<string, string>,\n view?: SpecView,\n examples?: Record<string, Value>,\n): Evaluated | undefined {\n const built = build(reader, src, props, preview, view, rules, tokens, examples);\n if (!built) return undefined;\n const els = toCssTree(built);\n /** Grids drawn as rows (every child spans all columns): their tracks and column gap, for subgrid rows. */\n const gridRows = new Map<string, { tracks: string[]; gap: string | undefined }>();\n /** Items in a flexible track of a subgrid row (`minmax(0, 1fr)`): they take the free space. */\n const gridGrow = new Set<string>();\n const computedById = new Map<string, Map<string, string>>();\n const ownById = new Map<string, Map<string, string>>();\n const values: SpecVariant['values'] = {};\n const unmapped: SpecUnmapped[] = [];\n const layouts = new Map<string, SpecLayout>();\n const hidden = new Set<string>();\n const cover = new Set<string>();\n const pins = new Map<string, NonNullable<SpecPart['pin']>>();\n const vectors = new Map<string, SpecVector>();\n const stretch = new Map<string, { width?: boolean; height?: boolean }>();\n const blockers: string[] = [...built.blockers];\n for (const [id, node] of built.parts) {\n const el = els.get(id)!;\n const parentId = built.parents.get(id);\n // A decoration takes its host's ::before or ::after rules.\n const own = node.pseudo && el.parent ? declaredFor(rules, el.parent, state, node.pseudo) : declaredFor(rules, el, state);\n // An indicator that follows the selected item: offsets Base UI sets at run time are 0, sizes fill the item.\n if (node.follows) {\n for (const [k, far] of [['left', ''], ['top', ''], ['width', 'right'], ['height', 'bottom']] as const) {\n const d = own.get(k);\n if (!d || !runtimeVar(d.value, rules, tokens)) continue;\n if (far) {\n own.delete(k);\n own.set(far, { ...d, prop: far, value: '0' });\n } else own.set(k, { ...d, value: '0' });\n }\n }\n let computed = computeValues(own, parentId ? computedById.get(parentId) : page);\n for (const [k, v] of node.styleVars ?? []) computed.set(k, v);\n // Table elements lay out as the browser's own stylesheet says (a row of cells).\n if (!computed.has('display') && TABLE_DISPLAY[node.tag]) computed.set('display', TABLE_DISPLAY[node.tag]!);\n // A table cell with no width of its own takes an equal share of its row; an item in a flexible grid track grows.\n if ((computed.get('display') === 'table-cell' && resolveValue(computed.get('width'), computed, tokens) === undefined) || gridGrow.has(id)) computed.set('flex-grow', '1');\n const ownValues = new Map([...own].map(([k, d]) => [k, d.value]));\n if (node.placeholder && el.parent) {\n // The placeholder text: the field's values (inherited), then its ::placeholder rules.\n const ph = declaredFor(rules, el.parent, state, 'placeholder');\n computed = computeValues(ph, computed);\n }\n computedById.set(id, computed);\n ownById.set(id, ownValues);\n if (POPUP_PART.test(node.tag) && parentId !== undefined) blockers.push('opens a popup');\n\n const parentHidden = parentId !== undefined && hidden.has(parentId);\n const transform = ownValues.get('transform');\n if (\n parentHidden ||\n computed.get('display') === 'none' ||\n computed.get('visibility') === 'hidden' ||\n /^0(\\.0+)?$/.test(ownValues.get('opacity')?.trim() ?? '') ||\n /scale\\(0\\)/.test(transform ?? '') ||\n visuallyHidden(ownValues) ||\n node.inactive ||\n (node.whenChecked && !/^(true|mixed)$/.test((node.checked === 'state' ? state.checked : node.checked) ?? ''))\n )\n hidden.add(id);\n const pv = partValues(node, computed, ownValues, tokens, parentId ? computedById.get(parentId) : page);\n values[id] = pv.values;\n if (node.svgAttrs && node.tag === 'svg') {\n const vec = svgVector(node, id, els, rules, state, computed, tokens);\n if ('blocker' in vec) blockers.push(vec.blocker);\n else vectors.set(id, vec);\n }\n // A single-line field centers its text vertically, as browsers draw it; a textarea starts at the top.\n if (node.kind === 'frame') layouts.set(id, node.inputLike && node.tag !== 'textarea' ? { direction: 'HORIZONTAL', primary: 'MIN', counter: 'CENTER' } : layoutOf(computed));\n // CSS grid drawn as auto layout: a grid whose children each span every column stacks them (rows); a row that\n // shares its parent's columns (`subgrid`) lines its items up in a row, edge tracks of 0 becoming the gap at its ends.\n let gridDrawn = false;\n if (node.kind === 'frame' && /grid/.test(computed.get('display') ?? '') && !singleCellGrid(computed)) {\n const kids = [...built.parts].filter(([cid]) => built.parents.get(cid) === id);\n const tracks = computed.get('grid-template-columns')?.trim();\n const parentGrid = parentId ? gridRows.get(parentId) : undefined;\n if (tracks === 'subgrid' && parentGrid) {\n gridDrawn = true;\n layouts.set(id, { direction: 'HORIZONTAL', primary: 'MIN', counter: gridCounter(computed.get('align-items')) });\n const gap = parentGrid.gap === undefined ? undefined : resolveValue(parentGrid.gap, computedById.get(parentId!) ?? new Map(), tokens);\n const g = gap && gap.unmapped === undefined && gap.value !== null ? gap.value : undefined;\n if (g !== undefined) {\n pv.values.itemSpacing = g;\n if (/^0(px)?$/.test(parentGrid.tracks[0] ?? '')) pv.values.paddingLeft = g;\n if (/^0(px)?$/.test(parentGrid.tracks[parentGrid.tracks.length - 1] ?? '')) pv.values.paddingRight = g;\n }\n for (const [cid] of kids) {\n const start = Number(/^\\s*(\\d+)/.exec(declaredFor(rules, els.get(cid)!, state).get('grid-column-start')?.value ?? declaredFor(rules, els.get(cid)!, state).get('grid-column')?.value ?? '')?.[1]);\n if (start && /fr\\)?$/.test(parentGrid.tracks[start - 1] ?? '')) gridGrow.add(cid);\n }\n unmapped.push({ part: id, property: 'grid-template-columns', value: 'subgrid', reason: 'columns line up across rows in code; in Figma each row sizes its own' });\n } else if (tracks && tracks !== 'none' && tracks !== 'subgrid' && kids.length && kids.every(([cid]) => /^1\\s*\\/\\s*-1$/.test(declaredFor(rules, els.get(cid)!, state).get('grid-column')?.value.trim() ?? ''))) {\n gridDrawn = true;\n gridRows.set(id, { tracks: splitTop(tracks, /\\s/).filter(Boolean), gap: computed.get('column-gap') });\n layouts.set(id, { direction: 'VERTICAL', primary: 'MIN', counter: 'STRETCH' });\n }\n }\n // A hidden part keeps its values (shown again, it looks right), but what it cannot draw does not matter here.\n if (hidden.has(id)) continue;\n // Decorations drawn by ::before or ::after that are not a layer (text content, or no paint we can draw).\n for (const pseudo of ['before', 'after'] as const) {\n if (node.children.some((c) => c.pseudo === pseudo)) continue;\n const d = declaredFor(rules, el, state, pseudo);\n const paints = [...PSEUDO_PAINTS, 'box-shadow'].some((k) => d.has(k) && !/^(0|none|transparent)$/.test(d.get(k)!.value));\n if (d.has('content') && paints) blockers.push('draws with ::before or ::after');\n }\n // A visible frame with nothing in it and nothing to paint: content the code puts there was not read.\n if (node.kind === 'frame' && !node.children.length && !node.inputLike && !node.media && !node.svgAttrs && Object.values(pv.values).every((x) => x === 0 || x === null || x === undefined))\n blockers.push('has parts whose content the generator cannot read yet');\n if (/grid/.test(computed.get('display') ?? '') && !singleCellGrid(computed) && !gridDrawn) blockers.push('uses CSS grid');\n // A value indicator with no height of its own (a slider's range): as tall as its track, like Base UI draws it.\n if (node.fraction !== undefined && ownValues.get('height') === undefined) stretch.set(id, { ...stretch.get(id), height: true });\n // A swatch of the token's own color: not a token, so not bound; set per instance.\n if (node.inlineFill) unmapped.push({ part: id, property: 'background-color', value: node.inlineFill, reason: \"the token's own color, from the content: not bound, set it on each instance\" });\n // Over its parent: absolute and filling it, or as wide and tall as a parent of fixed size (an avatar photo).\n const position = ownValues.get('position');\n const full = ownValues.get('width') === '100%' && ownValues.get('height') === '100%';\n const pVals = parentId ? values[parentId] : undefined;\n const inset = ['top', 'right', 'bottom', 'left'].every((k) => /^0(px)?$/.test(ownValues.get(k) ?? ''));\n if (parentId && ((position === 'absolute' && (inset || full)) || (position !== 'absolute' && full && pVals?.width !== undefined && pVals?.height !== undefined))) {\n cover.add(id);\n delete pv.values.width;\n delete pv.values.height;\n pv.unmapped = pv.unmapped.filter((u) => u.property !== 'width' && u.property !== 'height');\n } else if (parentId && position !== 'absolute' && (ownValues.get('width') === '100%' || ownValues.get('height') === '100%')) {\n // As wide or as tall as its parent (a progress bar's fill): Fill container on that axis.\n stretch.set(id, { ...(ownValues.get('width') === '100%' ? { width: true } : {}), ...(ownValues.get('height') === '100%' ? { height: true } : {}) });\n pv.unmapped = pv.unmapped.filter((u) => !((u.property === 'width' || u.property === 'height') && u.value === '100%'));\n for (const k of ['width', 'height'] as const) if (ownValues.get(k) === '100%') delete pv.values[k];\n } else if (parentId && position === 'absolute') {\n // Pinned to its parent's edges by tokens (a dialog's close button at the top right): an absolute layer in Figma.\n const pin: NonNullable<SpecPart['pin']> = {};\n let ok = true;\n for (const side of ['top', 'right', 'bottom', 'left'] as const) {\n const raw = ownValues.get(side);\n if (raw === undefined || raw === 'auto') continue;\n const r = resolveValue(raw, computed, tokens);\n if (!r || r.unmapped !== undefined || r.value === null || r.value === undefined) ok = false;\n else pin[side] = r.value;\n }\n if (ok && Object.keys(pin).length) pins.set(id, pin);\n else blockers.push('places layers over each other');\n } else if (parentId && position === 'fixed') blockers.push('places layers over each other');\n for (const u of pv.unmapped) unmapped.push({ part: id, ...u });\n // Transforms: scale(0) hides (above); none and scale(1) draw nothing; translateX moves a part inside its row.\n if (transform && !/^(none|scale\\(1\\))$/.test(transform.trim()) && !translateX(transform) && /^(translate|rotate|scale)/.test(transform.trim()) && !/^0(\\.0+)?$/.test(ownValues.get('opacity') ?? '1')) {\n unmapped.push({ part: id, property: 'transform', value: transform, reason: 'transforms are not drawn' });\n }\n }\n // translateX of the only child of a fixed-width row (a switch thumb): the offset becomes the row's padding, at the\n // start, or at the end when it is \"row width - own width - inset\". Anything else cannot be drawn faithfully.\n for (const [id] of built.parts) {\n const tx = translateX(ownById.get(id)?.get('transform'));\n if (!tx || hidden.has(id)) continue;\n const parentId = built.parents.get(id);\n const siblings = [...built.parts].filter(([cid, n]) => built.parents.get(cid) === parentId && !hidden.has(cid) && !n.visible);\n const parentLayout = parentId ? layouts.get(parentId) : undefined;\n const r = resolveValue(tx, computedById.get(id)!, tokens);\n // translateX(0), or a gesture offset that is 0 at rest (`var(--swipe-x, 0)`): nothing moves.\n if (r?.value === 0) continue;\n const pv = parentId ? values[parentId] : undefined;\n const own = values[id] ?? {};\n if (!parentId || !pv || siblings.length !== 1 || parentLayout?.direction !== 'HORIZONTAL' || !r || r.unmapped !== undefined || r.value === null || r.value === undefined) {\n blockers.push('moves a part with a transform');\n continue;\n }\n const v = r.value;\n const end = typeof v === 'string' && v.startsWith('calc(') ? new RegExp(`^calc\\\\(${escapeRe(String(pv.width))} - ${escapeRe(String(own.width))} - (\\\\S+)\\\\)$`).exec(v) : null;\n if (end) {\n pv.paddingRight = end[1]!;\n layouts.set(parentId, { ...parentLayout, primary: 'MAX' });\n } else if (typeof v === 'number' || (typeof v === 'string' && !v.startsWith('calc('))) {\n pv.paddingLeft = v;\n layouts.set(parentId, { ...parentLayout, primary: 'MIN' });\n } else blockers.push('moves a part with a transform');\n }\n const classes = [...built.parts].map(([id, n]) => `${id}:${n.classes.join(',')}:${n.visible?.prop ?? ''}`).join(';');\n return { built, values, unmapped, layouts, classes, computed: computedById, hidden, cover, pins, vectors, stretch, blockers };\n}\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction product(axes: { name: string; values: string[] }[]): Record<string, string>[] {\n let out: Record<string, string>[] = [{}];\n for (const a of axes) out = out.flatMap((p) => a.values.map((v) => ({ ...p, [a.name]: v })));\n return out;\n}\n\n\n/** What a variant draws, to compare two variants. */\nconst drawn = (e: Evaluated) => JSON.stringify([e.values, [...e.hidden].sort(), [...e.layouts], [...e.vectors]]);\n\nconst BOX_FIELDS: SpecField[] = ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'itemSpacing'];\nconst PAINT_FIELDS: SpecField[] = ['fill', 'stroke', 'strokeWeight', 'strokeTopWeight', 'strokeRightWeight', 'strokeBottomWeight', 'strokeLeftWeight', 'cornerRadius', 'width', 'height', 'minWidth', 'minHeight'];\nconst empty = (v: SpecValue | undefined) => v === undefined || v === 0 || v === null;\n\n/**\n * A root whose only child is a plain frame that only adds padding and gap (Tag's `<span class=\"label\">`): the wrapper\n * is merged into the root, so Figma gets one auto layout frame with the icon and the text, like Badge. Only when the CSS\n * allows it: the root has no padding or gap of its own, and the wrapper has no paint, border, radius or size, in every\n * variant.\n */\nfunction flattenWrapper(parts: SpecPart[], variants: SpecVariant[], unmapped: SpecUnmapped[]): void {\n const root = parts.find((p) => !p.parent);\n const children = parts.filter((p) => p.parent === root?.id);\n const w = children[0];\n if (!root || root.kind !== 'frame' || children.length !== 1 || !w || w.kind !== 'frame' || w.visible || w.clip || w.cover) return;\n for (const v of variants) {\n const r = v.values[root.id] ?? {};\n const x = v.values[w.id] ?? {};\n if (BOX_FIELDS.some((f) => !empty(r[f])) || PAINT_FIELDS.some((f) => !empty(x[f])) || x.opacity !== undefined) return;\n if (v.hidden?.includes(w.id) || v.layout?.[w.id] || v.layout?.[root.id]) return;\n }\n for (const v of variants) {\n const r = (v.values[root.id] ??= {});\n const x = v.values[w.id] ?? {};\n for (const f of BOX_FIELDS) if (x[f] !== undefined) r[f] = x[f];\n delete v.values[w.id];\n }\n if (w.layout) root.layout = w.layout;\n if (w.source) root.source = root.source ? `${root.source}, ${w.source}` : w.source;\n for (const p of parts) if (p.parent === w.id) p.parent = root.id;\n for (const u of unmapped) if (u.part === w.id) u.part = root.id;\n parts.splice(parts.indexOf(w), 1);\n}\n\n/**\n * A text field's box that draws nothing of its own in any variant (an input inside a styled wrapper, like Input): the\n * placeholder text takes its place, so Figma gets the text directly in the wrapper.\n */\nfunction mergeFieldBoxes(parts: SpecPart[], variants: SpecVariant[], unmapped: SpecUnmapped[], fields: Set<string>): void {\n for (const box of parts.filter((p) => fields.has(p.id))) {\n const kids = parts.filter((p) => p.parent === box.id);\n const text = kids[0];\n if (kids.length !== 1 || text?.kind !== 'text' || !box.parent || box.visible || box.cover) continue;\n const drawsNothing = variants.every((v) => {\n const x = v.values[box.id] ?? {};\n return BOX_FIELDS.every((f) => empty(x[f])) && PAINT_FIELDS.every((f) => empty(x[f])) && x.opacity === undefined && !v.hidden?.includes(box.id) && !v.layout?.[box.id];\n });\n if (!drawsNothing) continue;\n text.parent = box.parent;\n if (box.source) text.source = box.source;\n for (const v of variants) delete v.values[box.id];\n for (const u of unmapped) if (u.part === box.id) u.part = text.id;\n parts.splice(parts.indexOf(box), 1);\n }\n}\n\n/** Reasons, most telling first: what a designer would recognize as the reason the component is not drawn. */\nconst REASON_ORDER = ['opens a popup', 'draws SVG shapes', 'uses CSS grid', 'draws with ::before or ::after', 'moves a part with a transform', 'places layers over each other', 'shows content computed while the page runs'];\n\n/** The one reason recorded for a component the generator cannot draw. */\nfunction mainReason(reasons: string[]): string {\n const rank = (r: string) => {\n const i = REASON_ORDER.indexOf(r);\n return i < 0 ? REASON_ORDER.length : i;\n };\n return [...new Set(reasons)].sort((a, b) => rank(a) - rank(b))[0]!;\n}\n\n/** The checked state an axis value stands for. */\nconst CHECKED: Record<string, CssState['checked']> = { false: 'false', true: 'true', mixed: 'mixed' };\n\n/** The spec of one component, or an error message when it cannot be derived. */\nexport function generateComponentSpec(name: string, opts: SpecGeneratorOptions, view?: SpecView, setName = name, fixed: Record<string, string> = {}): ComponentSpec {\n const reader = new Reader(opts);\n const src = reader.load(name);\n if (!src) throw new Error(`${name}: ${opts.componentsDir}/${name}/${name}.tsx was not found.`);\n if (!src.fn) throw new UnsupportedComponentError(name, 'is shown from a hook or a provider, not placed as a component');\n\n // Every CSS module the rendered tree may use: the component's own, the ones it imports, and those of nested components.\n const modules = new Map<string, string>();\n const addModules = (s: ComponentSource | null) => {\n if (!s) return;\n for (const path of s.styles.values()) {\n if (modules.has(path)) continue;\n const text = opts.read(path);\n if (text !== undefined) modules.set(path, text);\n }\n };\n addModules(src);\n const nestedNames = new Set<string>();\n const findNested = (s: ComponentSource, depth: number) => {\n const visit = (n: ts.Node) => {\n if ((ts.isJsxOpeningElement(n) || ts.isJsxSelfClosingElement(n)) && /^[A-Z]/.test(n.tagName.getText(s.sf))) {\n const tag = n.tagName.getText(s.sf);\n if (tag !== name && !nestedNames.has(tag) && reader.exists(tag)) {\n nestedNames.add(tag);\n const other = reader.load(tag);\n addModules(other);\n if (other && depth < 3) findNested(other, depth + 1);\n }\n }\n ts.forEachChild(n, visit);\n };\n visit(s.sf);\n };\n findNested(src, 0);\n // Docs preview: content for `{children}` (a group's options) and the components it draws.\n const docs = readDocs(src.folder, opts);\n // The docs preview, else the first example of the component sandbox that gives it content (a menu's items).\n const fromDocs = previewElement(docs?.preview, name);\n const previewEl = fromDocs ?? storyElement(readStories(src.folder, opts), name);\n const previewKids = previewEl?.children?.some((c) => typeof c !== 'string') ? previewEl.children : undefined;\n for (const c of docElements(previewKids)) {\n if (typeof c.c !== 'string' || nestedNames.has(c.c) || !reader.exists(c.c)) continue;\n nestedNames.add(c.c);\n const other = reader.load(c.c);\n addModules(other);\n if (other) findNested(other, 1);\n }\n // Base styles of the nested components first, then the component's own (they override, as with CSS module order).\n const ownDir = `${opts.componentsDir}/${src.folder}/`;\n const ordered = [...modules].sort(([a], [b]) => Number(a.startsWith(ownDir)) - Number(b.startsWith(ownDir)));\n const rules: CssRule[] = [];\n const cssErrors: string[] = [];\n // The page's base stylesheet first (tag rules like `:where(kbd)`), and what the page root gives every component to\n // inherit (`:where(html)`: text color, font family, size and line height).\n let page: Map<string, string> | undefined;\n const baseText = opts.baseCss ? opts.read(opts.baseCss) : undefined;\n if (baseText !== undefined) {\n const r = parseCssModule(opts.baseCss!, baseText, 0);\n rules.push(...r.rules);\n const html: CssElement = { tag: 'html', classes: new Set(), children: [], present: true, isRoot: false, inputLike: false };\n page = computeValues(declaredFor(r.rules, html, DEFAULT_STATE), undefined);\n }\n for (const [path, text] of ordered) {\n const r = parseCssModule(path, text, rules.length);\n rules.push(...r.rules);\n cssErrors.push(...r.errors);\n }\n // Required text props the docs preview fills (an avatar's name, for its initials).\n const baseProps: Record<string, Value> = {};\n // Lists the preview gives (a segmented control's items), and the option it selects (`defaultValue`).\n for (const p of src.props.values()) {\n const v = previewEl?.p?.[p.name];\n if (v === undefined || v === null) continue;\n if (p.kind === 'string' && typeof v === 'string' && (!p.optional || p.name === 'defaultValue')) baseProps[p.name] = v;\n if (p.kind === 'other' && (typeof v === 'object' || typeof v === 'number' || (typeof v === 'string' && p.name === 'defaultValue'))) baseProps[p.name] = jsonValue(v);\n }\n\n // Axes: string-literal union props that change the rendered classes.\n // Optional texts the example gives (a token name next to its value): drawn with that text, shown by default.\n const examples: Record<string, Value> = {};\n for (const p of src.props.values()) {\n const v = previewEl?.p?.[p.name];\n if (p.kind === 'string' && p.optional && typeof v === 'string' && baseProps[p.name] === undefined) examples[p.name] = v;\n }\n // A part drawn alone that code only renders inside its folder's popup (a menu item): it inherits what the popup gives\n // its content (font, line height, color), as in the page. Read by drawing the folder's popup with its example\n // content and finding the element with this part's classes in it.\n if (view === 'without-popup' && name !== src.folder) {\n const own = build(reader, src, { ...baseProps, ...fixed }, previewKids, view, rules, opts.tokens)?.root.classes ?? [];\n const folderSrc = reader.load(src.folder);\n const folderPreview = previewElement(docs?.preview, src.folder) ?? storyElement(readStories(src.folder, opts), src.folder);\n const folderKids = folderPreview?.children?.some((c) => typeof c !== 'string') ? folderPreview.children : undefined;\n const popup = own.length && folderSrc && folderKids ? build(reader, folderSrc, {}, folderKids, 'popup', rules, opts.tokens) : undefined;\n // A part the example does not show (a menu group) is content of the popup all the same: what the popup gives.\n if (popup) page = inheritedInside(popup.root, own, rules, page) ?? inheritedInside({ ...popup.root, children: [{ ...popup.root, classes: own, children: [] }] }, own, rules, page) ?? page;\n }\n const evalAt = (props: Record<string, Value>, state: CssState) =>\n evaluateVariant(reader, src, rules, { ...baseProps, ...props, ...fixed }, state, opts.tokens, previewKids, page, view, Object.keys(examples).length ? examples : undefined);\n const base = evalAt({}, DEFAULT_STATE);\n if (!base) throw new UnsupportedComponentError(name, 'renders in a way the generator cannot read yet');\n const unmappedProps: SpecUnmapped[] = [];\n const axes: SpecAxis[] = [];\n const defaults = new Map<string, Value>();\n {\n const scope: Scope = { src, vars: new Map(), locals: new Map(), toggles: new Map(), main: true };\n bindProps(src.fn, scope, {});\n for (const [prop] of src.props) defaults.set(prop, scope.vars.get(prop));\n }\n for (const p of src.props.values()) {\n if (p.kind !== 'union' || !p.values || fixed[p.name] !== undefined) continue;\n const changes = p.values.some((v) => evalAt({ [p.name]: v }, DEFAULT_STATE)?.classes !== base.classes);\n if (!changes) {\n unmappedProps.push({ part: 'root', property: `prop ${p.name}`, value: p.values.join(' | '), reason: 'does not change the styles' });\n continue;\n }\n const def = defaults.get(p.name);\n axes.push({ name: sentenceCase(p.name), prop: p.name, values: [...p.values], default: typeof def === 'string' && p.values.includes(def) ? def : p.values[0]! });\n }\n\n // Checked: Base UI parts of the component itself (a checkbox box, a switch thumb) styled by data-checked. Not for a\n // popup drawn open: its options show the preview's selection.\n const checkable = ['checked', 'defaultChecked', 'indeterminate'].some((p) => src.props.has(p)) || [...src.baseUiModules].some((m) => /^(checkbox|switch|radio|toggle|menu)/.test(m));\n if (view !== 'popup' && checkable) {\n const on = evalAt({}, { ...DEFAULT_STATE, checked: 'true' });\n const off = evalAt({}, { ...DEFAULT_STATE, checked: 'false' });\n if (on && off && drawn(on) !== drawn(off)) {\n const mixed = src.props.has('indeterminate') ? evalAt({}, { ...DEFAULT_STATE, checked: 'mixed' }) : undefined;\n axes.push({ name: 'Checked', values: mixed && drawn(mixed) !== drawn(on) ? ['false', 'true', 'mixed'] : ['false', 'true'], default: 'false' });\n }\n }\n\n const combos = product(axes);\n const propsFor = (combo: Record<string, string>) => Object.fromEntries(axes.filter((a) => a.prop).map((a) => [a.prop!, combo[a.name]!]));\n const stateFor = (combo: Record<string, string>, s: CssState): CssState => (combo.Checked ? { ...s, checked: CHECKED[combo.Checked] } : s);\n const canDisable = src.native === 'button' || src.native === 'input' || src.native === 'textarea' || src.props.has('disabled');\n // A popup drawn open is not hovered or pressed as a whole: its own states are not drawn.\n const states = view === 'popup' ? STATES.slice(0, 1) : STATES.filter((s) => s.name !== 'Disabled' || canDisable);\n const byState = new Map<string, Map<string, Evaluated>>();\n for (const s of states) {\n const m = new Map<string, Evaluated>();\n for (const combo of combos) {\n const ev = evalAt(propsFor(combo), stateFor(combo, s.state));\n if (ev) m.set(JSON.stringify(combo), ev);\n }\n byState.set(s.name, m);\n }\n // A state is drawn when it looks different from Default (and Pressed from Hover) in at least one variant.\n const differs = (s: string, from: string) =>\n combos.some((c) => {\n const a = byState.get(s)!.get(JSON.stringify(c));\n const b = byState.get(from)?.get(JSON.stringify(c));\n return a && b && drawn(a) !== drawn(b);\n });\n const stateNames = states\n .map((s) => s.name)\n .filter((s) => s === 'Default' || (differs(s, 'Default') && (s !== 'Pressed' || differs(s, 'Hover'))));\n if (stateNames.length > 1) axes.push({ name: 'State', values: stateNames, default: 'Default' });\n\n const blockers = new Set<string>();\n const evaluated: { props: Record<string, string>; ev: Evaluated }[] = [];\n for (const combo of combos) {\n for (const s of stateNames.length > 1 ? stateNames : ['Default']) {\n const ev = byState.get(s)!.get(JSON.stringify(combo));\n if (!ev) continue;\n evaluated.push({ props: stateNames.length > 1 ? { ...combo, State: s } : { ...combo }, ev });\n for (const b of ev.blockers) blockers.add(b);\n }\n }\n // Every variant must have the parts of the default one: a set's variants share their layers.\n // Variants share their layers: a part some variants do not render (a value shown only at the large size) is a layer\n // of the set, hidden in those variants. The parts must keep one parent and one order across variants.\n const order: string[] = [...base.built.parts.keys()];\n const owner = new Map<string, Evaluated>(order.map((id) => [id, base]));\n for (const { ev } of evaluated) {\n let prev: string | undefined;\n for (const id of ev.built.parts.keys()) {\n const known = owner.get(id);\n if (known && known.built.parents.get(id) !== ev.built.parents.get(id)) blockers.add('changes its layers between variants');\n if (!known) {\n order.splice(prev === undefined ? 0 : order.indexOf(prev) + 1, 0, id);\n owner.set(id, ev);\n }\n prev = id;\n }\n }\n for (const { ev } of evaluated) for (const id of order) if (!ev.built.parts.has(id)) ev.hidden.add(id);\n if (blockers.size) throw new UnsupportedComponentError(name, mainReason([...blockers]));\n\n // Axes that change nothing Figma draws (a Spacing prop that only sets margins): left out, reported.\n for (const axis of [...axes]) {\n if (!axis.prop) continue;\n const key = (p: Record<string, string>) => JSON.stringify(Object.entries(p).filter(([k]) => k !== axis.name));\n const groups = new Map<string, string[]>();\n for (const e of evaluated) groups.set(key(e.props), [...(groups.get(key(e.props)) ?? []), drawn(e.ev)]);\n if ([...groups.values()].some((g) => new Set(g).size > 1)) continue;\n axes.splice(axes.indexOf(axis), 1);\n unmappedProps.push({ part: 'root', property: `prop ${axis.prop}`, value: axis.values.join(' | '), reason: 'changes nothing the set draws (margins, or content it does not show), not drawn' });\n for (let i = evaluated.length - 1; i >= 0; i--) {\n const e = evaluated[i]!;\n if (e.props[axis.name] !== axis.default) {\n evaluated.splice(i, 1);\n continue;\n }\n delete e.props[axis.name];\n }\n }\n\n // Prototype interactions between the variants (hover, press, click to check) with the code's motion, and the motion\n // a Figma prototype cannot play (keyframes, keyboard focus, opening).\n const interactions = deriveInteractions(axes, evaluated, opts.tokens, /radio/i.test(setName));\n const drawnClasses = new Set<string>();\n const drawnElements = new Map<string, string[]>();\n for (const { ev } of evaluated)\n for (const n of ev.built.parts.values()) {\n for (const c of n.classes) drawnClasses.add(c);\n if (n.classes.length) drawnElements.set([...n.classes].sort().join(' '), [...n.classes]);\n }\n const motion = motionNotes(rules, drawnClasses, opts.tokens, view, [...drawnElements.values()]);\n\n const variants: SpecVariant[] = [];\n const unmapped: SpecUnmapped[] = [];\n // Parts no variant shows (a visually hidden legend, a glyph for a state the set does not draw): left out.\n const neverShown = new Set(order.filter((id) => evaluated.every((e) => e.ev.hidden.has(id))));\n for (const e of evaluated) {\n const ev = e.ev;\n const values = Object.fromEntries(Object.entries(ev.values).filter(([id]) => !neverShown.has(id)));\n const parentOf = (id: string) => owner.get(id)?.built.parents.get(id) ?? '';\n const hidden = order.filter((id) => ev.hidden.has(id) && !neverShown.has(id) && !neverShown.has(parentOf(id)));\n const layout: Record<string, SpecLayout> = {};\n for (const [id, l] of ev.layouts) if (JSON.stringify(l) !== JSON.stringify(owner.get(id)?.layouts.get(id))) layout[id] = l;\n // Icons the code picks per variant (an alert's tone icon): the icon instance each variant shows.\n const icons: Record<string, string> = {};\n for (const [id, n] of ev.built.parts) if (n.kind === 'icon' && n.icon && !neverShown.has(id)) icons[id] = iconComponentName(n.icon);\n const vectors = Object.fromEntries([...ev.vectors].filter(([id]) => !neverShown.has(id)));\n // Absolute layers placed differently in this variant (an indicator under a vertical tab, or filling a contained one).\n const pinOf = (x: Evaluated, id: string) => (x.cover.has(id) ? { top: 0, right: 0, bottom: 0, left: 0 } : x.pins.get(id));\n const pins: NonNullable<SpecVariant['pins']> = {};\n for (const id of order) {\n const own = pinOf(ev, id);\n const base = owner.get(id) && pinOf(owner.get(id)!, id);\n if (own && base && JSON.stringify(own) !== JSON.stringify(base) && !neverShown.has(id)) pins[id] = own;\n }\n variants.push({\n props: e.props,\n values,\n ...(Object.keys(icons).length ? { slots: icons } : {}),\n ...(hidden.length ? { hidden } : {}),\n ...(Object.keys(layout).length ? { layout } : {}),\n ...(Object.keys(vectors).length ? { vectors } : {}),\n ...(Object.keys(pins).length ? { pins } : {}),\n });\n unmapped.push(...ev.unmapped.filter((u) => !neverShown.has(u.part)));\n }\n if (variants.length > MAX_VARIANTS) throw new UnsupportedComponentError(name, `has ${variants.length} variants, more than ${MAX_VARIANTS}`);\n\n // Parts, layout and properties come from the default variant.\n const parts: SpecPart[] = [];\n const properties: SpecProperty[] = [];\n const dropped = new Set<string>();\n for (const id of order) {\n const at = owner.get(id)!;\n const n = at.built.parts.get(id)!;\n const parent = at.built.parents.get(id);\n if (neverShown.has(id) || (parent && dropped.has(parent))) {\n dropped.add(id);\n continue;\n }\n const cls = n.classes[0]?.split('|')[1];\n const part: SpecPart = {\n id,\n name: !parent ? setName : n.kind === 'text' ? (n.text?.property ?? (cls ? sentenceCase(cls) : 'Text')) : n.visible ? n.visible.property.replace(/^Show /, '').replace(/^./, (c) => c.toUpperCase()) : (n.name ?? (n.kind === 'icon' ? 'Icon' : (cls ?? n.tag))),\n kind: n.svgAttrs && n.tag === 'svg' ? 'vector' : n.kind,\n ...(parent ? { parent } : {}),\n ...(n.classes.length ? { source: n.classes.map((c) => c.split('|').map((x, i) => (i === 0 ? posix.basename(x) : `.${x}`)).join(' ')).join(', ') } : {}),\n ...(n.kind === 'frame' ? { layout: at.layouts.get(id) ?? layoutOf(at.computed.get(id) ?? new Map()) } : {}),\n ...(n.kind === 'frame' && clips(at.computed.get(id)) ? { clip: true } : {}),\n ...(!parent && fillsContainer(at.computed.get(id), n.tag) ? { fill: true } : {}),\n ...(n.text ? { text: n.text.property } : {}),\n ...(n.chars !== undefined ? { characters: n.chars } : {}),\n ...(n.visible ? { visible: n.visible.property } : {}),\n ...(at.cover.has(id) ? { cover: true } : {}),\n ...(at.pins.has(id) ? { pin: at.pins.get(id) } : {}),\n ...(at.stretch.has(id) ? { stretch: at.stretch.get(id) } : {}),\n ...(n.fraction !== undefined ? { fraction: n.fraction } : {}),\n ...(n.at !== undefined ? { at: n.at } : {}),\n ...(parent && (grows(at.computed.get(id)) || shrinksToFit(n, at.computed.get(id), at.layouts.get(parent))) ? { grow: true } : {}),\n ...(n.kind === 'icon' && n.icon ? { icon: iconComponentName(n.icon) } : {}),\n };\n parts.push(part);\n if (n.text && !properties.some((p) => p.name === n.text!.property)) properties.push({ name: n.text.property, type: 'TEXT', default: n.text.default, ...(n.text.prop ? { prop: n.text.prop } : {}) });\n }\n for (const id of order) {\n const n = owner.get(id)!.built.parts.get(id)!;\n if (!dropped.has(id) && n.visible && !properties.some((p) => p.name === n.visible!.property)) properties.push({ name: n.visible.property, type: 'BOOLEAN', default: !!n.visible.on, prop: n.visible.prop });\n }\n\n // Props the spec does not draw (loading, slots...), so readers know what is missing.\n const used = new Set([...axes.map((a) => a.prop), ...properties.map((p) => p.prop), 'disabled', 'className', 'children', 'render']);\n if (axes.some((a) => a.name === 'Checked')) for (const p of ['checked', 'defaultChecked', 'indeterminate']) used.add(p);\n for (const p of src.props.values()) {\n if (used.has(p.name) || p.kind === 'function' || p.kind === 'string' || p.kind === 'other' || p.kind === 'union') continue;\n unmappedProps.push({ part: 'root', property: `prop ${p.name}`, value: p.kind, reason: p.kind === 'node' ? 'slot content is not drawn' : p.kind === 'icon' ? 'icon prop with no icon part' : 'not drawn in this version' });\n }\n for (const e of cssErrors) unmappedProps.push({ part: 'root', property: 'css', value: e, reason: 'selector not understood' });\n\n mergeFieldBoxes(parts, variants, unmapped, new Set([...base.built.parts].filter(([, n]) => n.inputLike).map(([id]) => id)));\n flattenWrapper(parts, variants, unmapped);\n const compoundParts = new Set([...base.built.parts].filter(([, n]) => n.name).map(([id]) => id));\n const swapped = addSwaps(name, src, parts, properties, axes, variants, opts, compoundParts);\n // Images: the media slot, swappable for a real picture.\n for (const part of parts) {\n if (!base.built.parts.get(part.id)?.media || part.swap) continue;\n part.swap = { property: part.name, default: MEDIA_SLOT.name, options: [MEDIA_SLOT.name] };\n for (const v of variants) (v.slots ??= {})[part.id] = MEDIA_SLOT.name;\n }\n for (let i = unmappedProps.length - 1; i >= 0; i--) if (swapped.has(unmappedProps[i]!.property.replace(/^prop /, ''))) unmappedProps.splice(i, 1);\n\n const seen = new Set<string>();\n const dedup = [...unmappedProps, ...unmapped].filter((u) => {\n const k = `${u.part}|${u.property}|${u.reason}`;\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n // Every variant lists all of its fields (even when equal across variants): the plugin binds per variant.\n const source = [src.file, ...[...modules.keys()].sort()];\n // The code example the content comes from, for the fidelity check: the props the set used and the example's children.\n // Example texts count only where they are drawn (behind a BOOLEAN shown by default), not where code ignores them.\n const shownExamples = Object.fromEntries(Object.entries(examples).filter(([k]) => properties.some((p) => p.type === 'BOOLEAN' && p.prop === k && p.default === true)));\n const exampleProps = Object.fromEntries(Object.entries({ ...baseProps, ...shownExamples }).filter(([, v]) => isData(v)));\n const example: SpecExample | undefined =\n (previewKids && !base.built.root.fromExports) || Object.keys(exampleProps).length\n ? { c: src.name, ...(Object.keys(exampleProps).length ? { p: exampleProps } : {}), ...(previewKids && !base.built.root.fromExports ? { children: previewKids as SpecExample['children'] } : {}) }\n : undefined;\n const component = {\n ...(src.folder !== setName ? { component: src.folder } : {}),\n ...(Object.keys(fixed).length ? { fixed: { ...fixed } } : {}),\n ...(view ? { view } : {}),\n ...(example ? { example } : {}),\n };\n const motionFields = { ...(interactions.length ? { interactions } : {}), ...(motion.length ? { motion } : {}) };\n const spec: Omit<ComponentSpec, 'hash'> = { name: setName, ...component, source, axes, properties, parts, variants, unmapped: dedup, ...motionFields };\n return { name: setName, ...component, hash: hashSpec(spec), source, axes, properties, parts, variants, unmapped: dedup, ...motionFields };\n}\n\n/**\n * Interactions between the variants of a set, from its State and Checked axes: hover (While hovering, Default to Hover),\n * press (While pressing, Hover or Default to Pressed) and click (On click, Checked toggles; a radio only checks). With a\n * Checked axis, hover uses Mouse enter and Mouse leave, so a click is not undone when the pointer leaves. Only between\n * variants that look different; the transition is the code's for that change, grouped when variants differ.\n */\nfunction deriveInteractions(axes: SpecAxis[], evaluated: { props: Record<string, string>; ev: Evaluated }[], tokens: Map<string, TokenInfo>, radio: boolean): SpecInteraction[] {\n const byKey = new Map(evaluated.map((e) => [variantKeyOf(e.props), e]));\n const state = axes.find((a) => a.name === 'State');\n const checked = axes.find((a) => a.name === 'Checked');\n const rules: { trigger: SpecTrigger; axis: string; from: string; to: string; only?: (p: Record<string, string>) => boolean }[] = [];\n if (state) {\n const has = (v: string) => state.values.includes(v);\n if (has('Hover')) {\n if (checked) rules.push({ trigger: 'MOUSE_ENTER', axis: 'State', from: 'Default', to: 'Hover' }, { trigger: 'MOUSE_LEAVE', axis: 'State', from: 'Hover', to: 'Default' });\n else rules.push({ trigger: 'ON_HOVER', axis: 'State', from: 'Default', to: 'Hover' });\n }\n if (has('Pressed')) rules.push({ trigger: 'ON_PRESS', axis: 'State', from: has('Hover') ? 'Hover' : 'Default', to: 'Pressed' });\n }\n if (checked) {\n const pairs: [string, string][] = [['false', 'true']];\n if (!radio) pairs.push(['true', 'false']);\n if (checked.values.includes('mixed')) pairs.push(['mixed', 'true']);\n // Clicked where the pointer is: at rest or hovered, never while disabled.\n const only = (p: Record<string, string>) => p.State === undefined || p.State === 'Default' || p.State === 'Hover';\n for (const [from, to] of pairs) rules.push({ trigger: 'ON_CLICK', axis: 'Checked', from, to, only });\n }\n const out: SpecInteraction[] = [];\n for (const r of rules) {\n const groups = new Map<string, { transition: SpecInteraction['transition']; keys: string[] }>();\n let candidates = 0;\n for (const e of evaluated) {\n if (e.props[r.axis] !== r.from) continue;\n candidates++;\n if (r.only && !r.only(e.props)) continue;\n const target = byKey.get(variantKeyOf({ ...e.props, [r.axis]: r.to }));\n if (!target || drawn(target.ev) === drawn(e.ev)) continue;\n const transition = transitionBetween(e.ev.computed, target.ev.computed, tokens);\n const k = JSON.stringify(transition);\n const g = groups.get(k) ?? { transition, keys: [] };\n g.keys.push(variantKeyOf(e.props));\n groups.set(k, g);\n }\n const total = [...groups.values()].reduce((n, g) => n + g.keys.length, 0);\n for (const g of groups.values()) out.push({ trigger: r.trigger, axis: r.axis, from: r.from, to: r.to, ...(groups.size > 1 || total < candidates ? { variants: g.keys } : {}), transition: g.transition });\n }\n return out;\n}\n\n/** Whether a spec draws anything: a fill, a border, an icon or a text of its own. Layout helpers draw nothing. */\nexport function specDrawsSomething(spec: ComponentSpec): boolean {\n const kinds = new Map(spec.parts.map((p) => [p.id, p]));\n for (const v of spec.variants)\n for (const [id, vals] of Object.entries(v.values)) {\n const part = kinds.get(id);\n if (part?.kind === 'icon' || part?.kind === 'vector') return true;\n if (part?.kind === 'text' && part.text !== 'Label') return true;\n // The children text of a link (its own color or an underline), not the page text a layout helper passes through.\n if (part?.kind === 'text' && (vals.textDecoration !== undefined || (typeof vals.textFill === 'string' && vals.textFill !== 'color.text.default'))) return true;\n if ((vals.fill !== undefined && vals.fill !== null) || (vals.stroke !== undefined && vals.stroke !== null)) return true;\n }\n return false;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Swappable parts: icons and content slots\n\n/** The design system component that draws an icon (`<Icon icon={...} />`): its parts are icon instances. */\nconst ICON_COMPONENT = 'Icon';\n\n/** Icons every pulled file gets besides the ones the components use, so designers can swap without importing. */\nexport const COMMON_ICONS = ['Plus', 'Minus', 'Pencil', 'Trash2', 'Copy', 'Search', 'X', 'Check', 'ChevronDown', 'ChevronRight', 'Info', 'AlertTriangle', 'Star', 'Settings', 'ExternalLink', 'Download', 'Upload', 'Ellipsis'];\n\n/** Default icon of a slot when neither the docs preview nor the AllStates story shows one. */\nconst FALLBACK_ICON: Record<string, string> = { Badge: 'Info' };\nconst DEFAULT_FALLBACK_ICON = 'Plus';\n\n/** The icon components themselves: Icon.tsx draws `sm` by default; Lucide's grid is 24, the `lg` size. */\nexport const ICON_STYLE: SpecIconStyle = { size: 'icon.size.lg', color: 'color.text.default', stroke: 'icon.stroke' };\n\n/** Media slot: a neutral plate with a centered image icon, 16:9, as wide as a card (size.80). */\nexport const MEDIA_SLOT: SpecSlot = {\n name: 'Slot/Media',\n kind: 'media',\n values: { fill: 'color.bg.muted', width: 'size.80' },\n aspect: [16, 9],\n icon: 'Image',\n iconValues: { width: 'icon.size.lg', height: 'icon.size.lg', stroke: 'color.text.muted', strokeWeight: 'icon.stroke' },\n};\n\ninterface DocNode {\n c?: string;\n p?: Record<string, unknown>;\n children?: unknown[];\n}\n\n/** Every `{ c, p }` element of a docs.json value, in document order. */\nfunction docElements(v: unknown, out: DocNode[] = []): DocNode[] {\n if (Array.isArray(v)) for (const x of v) docElements(x, out);\n else if (v && typeof v === 'object') {\n const n = v as DocNode;\n if (typeof n.c === 'string') out.push(n);\n for (const x of Object.values(v)) docElements(x, out);\n }\n return out;\n}\n\nfunction readDocs(name: string, opts: SpecGeneratorOptions): Record<string, unknown> | undefined {\n const text = opts.read(`${opts.componentsDir}/${name}/${name}.docs.json`);\n if (!text) return undefined;\n try {\n return JSON.parse(text) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction readStories(name: string, opts: SpecGeneratorOptions): ts.SourceFile | undefined {\n const file = `${opts.componentsDir}/${name}/${name}.stories.tsx`;\n const text = opts.read(file);\n return text === undefined ? undefined : ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n}\n\n/** Names imported from lucide-react by a stories file. */\nfunction storyIcons(sf: ts.SourceFile | undefined): string[] {\n const out: string[] = [];\n for (const st of sf?.statements ?? []) {\n if (!ts.isImportDeclaration(st) || unquote(st.moduleSpecifier.getText(sf)) !== 'lucide-react') continue;\n const b = st.importClause?.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) if (!e.isTypeOnly) out.push((e.propertyName ?? e.name).text);\n }\n return out;\n}\n\n/** First icon the AllStates story passes to `<Name prop={Icon}>` (the false branch of a condition: the general case). */\nfunction allStatesIcon(sf: ts.SourceFile | undefined, name: string, prop: string): string | undefined {\n if (!sf) return undefined;\n let decl: ts.Node | undefined;\n for (const st of sf.statements)\n if (ts.isVariableStatement(st)) for (const d of st.declarationList.declarations) if (ts.isIdentifier(d.name) && d.name.text === 'AllStates') decl = d;\n let found: string | undefined;\n const pick = (e: ts.Expression): string | undefined => {\n if (ts.isParenthesizedExpression(e)) return pick(e.expression);\n if (ts.isIdentifier(e)) return e.text;\n if (ts.isConditionalExpression(e)) return pick(e.whenFalse);\n return undefined;\n };\n const visit = (n: ts.Node) => {\n if (found) return;\n if ((ts.isJsxOpeningElement(n) || ts.isJsxSelfClosingElement(n)) && n.tagName.getText(sf) === name) {\n for (const a of n.attributes.properties) {\n if (!ts.isJsxAttribute(a) || a.name.getText(sf) !== prop || !a.initializer || !ts.isJsxExpression(a.initializer) || !a.initializer.expression) continue;\n found = pick(a.initializer.expression);\n if (found) return;\n }\n }\n ts.forEachChild(n, visit);\n };\n if (decl) visit(decl);\n return found;\n}\n\n/** Default icon of an icon prop: the docs preview, then the AllStates story, then a fallback. */\nfunction defaultIcon(name: string, prop: string, opts: SpecGeneratorOptions, folder = name): string {\n const docs = readDocs(folder, opts);\n for (const el of docElements(docs?.preview)) {\n const v = el.c === name ? el.p?.[prop] : undefined;\n if (typeof v === 'string' && /^[A-Z]\\w*$/.test(v)) return v;\n }\n return allStatesIcon(readStories(folder, opts), name, prop) ?? FALLBACK_ICON[name] ?? DEFAULT_FALLBACK_ICON;\n}\n\n/** Icon names a component's docs (icon props of any element) and stories (lucide-react imports) reference. */\nfunction referencedIcons(name: string, opts: SpecGeneratorOptions): string[] {\n const out: string[] = [];\n for (const el of docElements(readDocs(name, opts)))\n for (const [k, v] of Object.entries(el.p ?? {})) if (/^icon/i.test(k) && typeof v === 'string' && /^[A-Z]\\w*$/.test(v)) out.push(v);\n out.push(...storyIcons(readStories(name, opts)));\n return out;\n}\n\nconst zeroInline = (v: Partial<Record<SpecField, SpecValue>> | undefined) => !!v && v.paddingLeft === 0 && v.paddingRight === 0;\n\n/**\n * Marks the swappable parts of a spec and returns the code props they stand for:\n * - Icon parts swap between every icon (\"Icon\", \"Icon start\"), default from the docs or stories. Optional icons keep\n * their BOOLEAN visibility property.\n * - A compound part's content (a text in a non-root frame) that code draws full-bleed in some variant (no inline\n * padding: Card padding none, for media) becomes a content slot: \"Slot/<Component> <part> text\" or \"Slot/Media\",\n * Media by default where it is full-bleed. Its TEXT property moves to the text slot component.\n */\nfunction addSwaps(name: string, src: ComponentSource, parts: SpecPart[], properties: SpecProperty[], axes: SpecAxis[], variants: SpecVariant[], opts: SpecGeneratorOptions, compound: Set<string>): Set<string> {\n const props = new Set<string>();\n const iconProps = [...src.props.values()].filter((p) => p.kind === 'icon');\n const defaultKey = variantKeyOf(Object.fromEntries(axes.map((a) => [a.name, a.default])));\n const defaultVariant = variants.find((v) => variantKeyOf(v.props) === defaultKey) ?? variants[0];\n const setSlot = (part: string, value: (v: SpecVariant) => string) => {\n for (const v of variants) (v.slots ??= {})[part] = value(v);\n };\n for (const part of parts) {\n if (part.kind === 'icon') {\n const visibleProp = part.visible ? properties.find((p) => p.type === 'BOOLEAN' && p.name === part.visible)?.prop : undefined;\n const prop = visibleProp ?? iconProps.find((p) => !p.optional && !properties.some((x) => x.prop === p.name))?.name;\n if (!prop) continue;\n const icon = iconComponentName(defaultIcon(name, prop, opts, src.folder));\n part.swap = { property: sentenceCase(prop), default: icon, prop };\n setSlot(part.id, () => icon);\n props.add(prop);\n continue;\n }\n const parent = parts.find((p) => p.id === part.parent);\n if (part.kind !== 'text' || !part.text || !parent?.parent || parent.kind !== 'frame' || !compound.has(parent.id)) continue;\n if (!variants.some((v) => zeroInline(v.values[parent.id]))) continue;\n const textSlot = `Slot/${name} ${part.text.toLowerCase()} text`;\n const media = MEDIA_SLOT.name;\n part.swap = { property: part.text, default: zeroInline(defaultVariant?.values[parent.id]) ? media : textSlot, options: [textSlot, media] };\n setSlot(part.id, (v) => (zeroInline(v.values[parent.id]) ? media : textSlot));\n const i = properties.findIndex((p) => p.type === 'TEXT' && p.name === part.text);\n if (i >= 0) properties.splice(i, 1);\n delete part.text;\n }\n return props;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Lucide icons\n\n/** lucide-react export name -> icon id, from the ESM index (\"export { default as Trash2, ... } from './icons/trash.mjs'\"). */\nfunction lucideIndex(dir: string, opts: SpecGeneratorOptions): Map<string, string> {\n const text = opts.read(`${dir}/lucide-react.mjs`) ?? opts.read(`${dir}/lucide-react.js`);\n if (text === undefined) throw new Error(`lucide-react was not found at ${dir}: run npm install.`);\n const out = new Map<string, string>();\n for (const m of text.matchAll(/export\\s*\\{([^}]*)\\}\\s*from\\s*'\\.\\/icons\\/([\\w-]+)\\.m?js'/g)) {\n for (const part of m[1]!.split(',')) {\n const n = /default as (\\w+)/.exec(part.trim());\n if (n) out.set(n[1]!, m[2]!);\n }\n }\n return out;\n}\n\nconst attrText = (v: string | number) => String(v).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n\n/** The icon's SVG from its lucide-react module (`__iconData.node` or `__iconNode`), with Lucide's default attributes. */\nfunction lucideSvg(dir: string, id: string, opts: SpecGeneratorOptions): string {\n const file = `${dir}/icons/${id}.mjs`;\n const text = opts.read(file) ?? opts.read(`${dir}/icons/${id}.js`);\n if (text === undefined) throw new Error(`lucide-react has no icon file ${file}.`);\n const sf = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);\n let nodeArray: ts.ArrayLiteralExpression | undefined;\n const visit = (n: ts.Node) => {\n if (nodeArray) return;\n if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name) && n.initializer) {\n if (n.name.text === '__iconNode' && ts.isArrayLiteralExpression(n.initializer)) nodeArray = n.initializer;\n if (n.name.text === '__iconData' && ts.isObjectLiteralExpression(n.initializer)) {\n const prop = n.initializer.properties.find((p): p is ts.PropertyAssignment => ts.isPropertyAssignment(p) && p.name.getText(sf) === 'node');\n if (prop && ts.isArrayLiteralExpression(prop.initializer)) nodeArray = prop.initializer;\n }\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n if (!nodeArray) throw new Error(`${file}: no icon node found.`);\n const children = nodeArray.elements.map((el) => {\n if (!ts.isArrayLiteralExpression(el)) throw new Error(`${file}: unexpected icon node.`);\n const [tag, attrs] = el.elements;\n const name = tag && ts.isStringLiteral(tag) ? tag.text : '';\n const pairs: string[] = [];\n if (attrs && ts.isObjectLiteralExpression(attrs)) {\n for (const p of attrs.properties) {\n if (!ts.isPropertyAssignment(p)) continue;\n const key = unquote(p.name.getText(sf));\n if (key === 'key') continue;\n const v = p.initializer;\n const value = ts.isStringLiteral(v) || ts.isNoSubstitutionTemplateLiteral(v) ? v.text : ts.isNumericLiteral(v) ? Number(v.text) : undefined;\n if (value !== undefined) pairs.push(`${key}=\"${attrText(value)}\"`);\n }\n }\n return `<${name}${pairs.length ? ` ${pairs.join(' ')}` : ''}/>`;\n });\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${children.join('')}</svg>`;\n}\n\n/**\n * The icons section: every icon a slot defaults to, every icon the components' docs and stories reference, the media\n * slot's icon, then the common set. One entry per Lucide icon (aliases folded into the first name seen), sorted by name.\n */\nexport function generateIcons(components: ComponentSpec[], opts: SpecGeneratorOptions, slots: SpecSlot[] = []): SpecIcon[] {\n const dir = opts.lucideDir ?? 'node_modules/lucide-react/dist/esm';\n const index = lucideIndex(dir, opts);\n const names: string[] = [];\n for (const c of components) {\n for (const p of c.parts) {\n if (p.swap && !p.swap.options) names.push(p.swap.default.replace(/^Icon\\//, ''));\n if (p.icon) names.push(p.icon.replace(/^Icon\\//, ''));\n }\n for (const v of c.variants) for (const x of Object.values(v.slots ?? {})) if (x.startsWith('Icon/')) names.push(x.slice(5));\n names.push(...referencedIcons(c.component ?? c.name, opts));\n }\n for (const s of slots) if (s.icon) names.push(s.icon);\n names.push(...COMMON_ICONS);\n const byId = new Map<string, SpecIcon>();\n for (const n of names) {\n const id = index.get(n);\n if (!id) throw new Error(`Icon ${n} is not exported by lucide-react.`);\n const hit = byId.get(id);\n if (!hit) byId.set(id, { name: n, lucide: id, svg: lucideSvg(dir, id, opts) });\n else if (hit.name !== n && !hit.aliases?.includes(n)) (hit.aliases ??= []).push(n);\n }\n return [...byId.values()].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0)).map((i) => (i.aliases ? { ...i, aliases: [...i.aliases].sort() } : i));\n}\n\n/** Content components the specs' slots swap to: each component's text slot (its default variant's text fields), then Media. */\nexport function generateSlots(components: ComponentSpec[]): SpecSlot[] {\n const out: SpecSlot[] = [];\n let media = false;\n for (const c of components) {\n const defaultKey = variantKeyOf(Object.fromEntries(c.axes.map((a) => [a.name, a.default])));\n const v = c.variants.find((x) => variantKeyOf(x.props) === defaultKey) ?? c.variants[0];\n for (const p of c.parts) {\n if (!p.swap?.options) continue;\n for (const o of p.swap.options) {\n if (o === MEDIA_SLOT.name) media = true;\n else if (!out.some((s) => s.name === o)) out.push({ name: o, kind: 'text', values: { ...(v?.values[p.id] ?? {}) }, text: { property: 'Text', default: p.name } });\n }\n }\n }\n if (media) out.push(MEDIA_SLOT);\n return out;\n}\n\nfunction specsFile(components: ComponentSpec[], opts: SpecGeneratorOptions, coverage?: SpecCoverage[]): ComponentSpecsFile {\n const slots = generateSlots(components);\n return {\n version: COMPONENT_SPECS_VERSION,\n generated: 'Generated by `npm run specs` from the component TSX and CSS modules. Do not edit: the test suite fails when it is out of date.',\n components,\n icons: generateIcons(components, opts, slots),\n iconStyle: ICON_STYLE,\n slots,\n ...(coverage ? { coverage } : {}),\n };\n}\n\n/** Specs of the named components (sets), in that order. Throws when one cannot be generated. */\nexport function generateComponentSpecs(names: string[], opts: SpecGeneratorOptions): ComponentSpecsFile {\n return specsFile(\n names.map((n) => generateComponentSpec(n, opts)),\n opts,\n );\n}\n\n/** One set per value of the union prop whose values change a component's layers, when each value draws faithfully. */\nfunction splitByLayers(folder: string, opts: SpecGeneratorOptions): ComponentSpec[] {\n const src = new Reader(opts).load(folder);\n for (const p of src?.props.values() ?? []) {\n if (p.kind !== 'union' || !p.values) continue;\n const out: ComponentSpec[] = [];\n for (const v of p.values) {\n try {\n const spec = generateComponentSpec(folder, opts, undefined, `${folder}/${sentenceCase(v)}`, { [p.name]: v });\n if (specDrawsSomething(spec)) out.push(spec);\n } catch {\n out.length = 0;\n break;\n }\n }\n if (out.length === p.values.length) return out;\n }\n return [];\n}\n\n/** CSS that paints something (a color, a background, a border, a shadow): a component without any is a layout helper. */\nconst PAINTS = /(^|[;{\\s])(color|background(-color)?|border(-(top|right|bottom|left))?(-color)?|box-shadow|fill|stroke)\\s*:(?!\\s*(0[;\\s}]|none|transparent))/m;\n\n/**\n * Every component folder, generated when the generator can draw it faithfully, else recorded with the reason it\n * cannot (unsupported) or as a layout helper with no visual of its own. Support is decided here, from what the generator\n * can read: no list to maintain. A folder's other exports (Radio in RadioGroup) get their own set when they draw\n * something; exports drawn inside the main set (CardHeader) do not.\n */\nexport function generateAllComponentSpecs(folders: string[], opts: SpecGeneratorOptions): ComponentSpecsFile {\n const withList = { ...opts, components: opts.components ?? folders };\n const reader = new Reader(withList);\n const components: ComponentSpec[] = [];\n const coverage: SpecCoverage[] = [];\n const cssOf = (folder: string) => [...(reader.load(folder)?.styles.values() ?? [])].map((path) => (opts.read(path) ?? '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')).join('\\n');\n const paints = (folder: string) => PAINTS.test(cssOf(folder));\n for (const folder of [...folders].sort()) {\n const reasons: string[] = [];\n const attempt = (name: string, view?: SpecView, setName?: string): ComponentSpec | undefined => {\n try {\n const spec = generateComponentSpec(name, withList, view, setName);\n return specDrawsSomething(spec) ? spec : undefined;\n } catch (err) {\n reasons.push(err instanceof UnsupportedComponentError ? err.reason : 'renders in a way the generator cannot read yet');\n return undefined;\n }\n };\n const exports = [folder, ...[...(reader.load(folder)?.exported.keys() ?? [])].filter((n) => n !== folder)];\n const sets: ComponentSpec[] = [];\n let main = attempt(folder);\n // Variants with different layers (a linear and a circular progress): one set per value of the prop that changes\n // them (\"Progress/Linear\", \"Progress/Circular\").\n if (!main && reasons.includes('changes its layers between variants')) {\n const split = splitByLayers(folder, withList);\n if (split.length) {\n sets.push(...split);\n main = split[0];\n reasons.length = 0;\n }\n }\n if (main && !sets.length) {\n sets.push(main);\n const compound = new Set(main.parts.map((p) => p.name));\n const drawnIn = new Set(main.parts.map((p) => p.source).filter(Boolean));\n for (const other of exports.slice(1)) {\n if (other.startsWith(folder) && compound.has(other.slice(folder.length))) continue;\n const spec = attempt(other);\n if (!spec) continue;\n // Not drawn alone when it is not faithful alone or adds nothing: a part that reads private custom properties\n // its parent sets (a tab's height from its list), or one the main set already draws with nothing to set\n // (a tab list).\n const readsParent = spec.unmapped.some((u) => /^--_[\\w-]+ is not a token$/.test(u.reason));\n const duplicate = drawnIn.has(spec.parts[0]?.source) && !spec.properties.length && spec.axes.every((a) => a.name === 'State');\n if (readsParent || duplicate) continue;\n sets.push(spec);\n }\n }\n // Popups (a select's list, a dialog, a tooltip): drawn open, as their own set, next to what opens them, the way a\n // Figma UI kit draws them. Base UI behaviour is not drawn, only the look.\n const hasPopup = /\\.(Portal|Popup)\\b/.test(opts.read(`${opts.componentsDir}/${folder}/${folder}.tsx`) ?? '');\n if (!main && hasPopup) {\n reasons.length = 0;\n for (const name of exports) {\n // What opens the popup counts when the component styles it (a select's trigger), not when it is the consumer's\n // own element (a tooltip's trigger).\n const closedSpec = attempt(name, 'without-popup');\n const closed = closedSpec?.parts.some((p) => p.source?.includes(`${folder}.module.css`)) ? closedSpec : undefined;\n if (closed && !sets.some((x) => x.name === closed.name)) sets.push(closed);\n const suffix = name === folder ? '' : name.startsWith(folder) ? name.slice(folder.length) : name;\n const popupName = `${folder}/${sets.some((x) => x.name === `${folder}/Popup`) ? suffix || 'Popup' : 'Popup'}`;\n // Drawn open by the export that renders the portal itself (DialogContent), not by those that only wrap it.\n const fnNode = reader.load(name)?.fn;\n const ownsPortal = !!fnNode && /\\.Portal\\b/.test(fnNode.getText());\n const open = ownsPortal ? attempt(name, 'popup', popupName) : undefined;\n if (open && !sets.some((x) => x.name === open.name)) sets.push(open);\n }\n }\n // The icon component: every icon is drawn as its own component on the Icons page.\n if (!sets.length && folder === ICON_COMPONENT) {\n coverage.push({ name: folder, status: 'generated', reason: 'drawn as icon components on the Icons page' });\n continue;\n }\n if (!sets.length) {\n const fileText = opts.read(`${opts.componentsDir}/${folder}/${folder}.tsx`) ?? '';\n // A component made of Base UI popup parts (a dialog, a menu, a toast) opens a popup, whatever it draws first.\n const reason = /\\.(Portal|Popup|Positioner)\\b/.test(fileText) && !reasons.length ? 'opens a popup' : reasons.length ? mainReason(reasons) : undefined;\n // What the generator cannot read but Claude drafted from the code (component-spec-overrides/<Name>.json).\n const drafted = draftedSpec(folder, withList);\n if (drafted) {\n components.push(drafted);\n coverage.push({ name: folder, status: 'drafted', reason: drafted.drafted!.reason, ...(drafted.name !== folder ? { sets: [drafted.name] } : {}) });\n continue;\n }\n if (!paints(folder)) coverage.push({ name: folder, status: 'layout', reason: /inset\\(50%\\)/.test(cssOf(folder)) ? 'screen reader text only, nothing to draw' : 'layout only, use auto layout' });\n else coverage.push({ name: folder, status: 'unsupported', reason: reason ?? 'draws nothing the generator can read yet' });\n continue;\n }\n components.push(...sets);\n coverage.push({ name: folder, status: 'generated', ...(sets.length > 1 || sets[0]!.name !== folder ? { sets: sets.map((x) => x.name) } : {}) });\n }\n return specsFile(components, withList, coverage);\n}\n\n// ---------------------------------------------------------------------------------------------\n// Drafted with Claude\n\n/** Where drafted specs live: next to component-specs.json (packages/react/component-spec-overrides). */\nexport const overridesDirOf = (componentsDir: string) => posix.join(posix.dirname(posix.dirname(componentsDir)), 'component-spec-overrides');\n\n/** FNV-1a of the code a drafted spec was read from, to tell when the code changed since. */\nexport function draftedCodeHash(files: string[], read: (path: string) => string | undefined): string {\n return specHash(files.map((f) => `${f}\\n${read(f) ?? ''}`).join('\\n'));\n}\n\n/**\n * A spec Claude drafted for a component the generator cannot read: `component-spec-overrides/<Folder>.json`, a\n * ComponentSpec marked `\"source\": \"drafted\"` with the files it was read from (`files`), the generator's reason and the\n * code's hash when drafted (`codeHash`). Validated like a generated spec, against the repo's tokens: an invalid one\n * fails `npm run specs`. Never counted as generated: its coverage is `drafted`, and it is `stale` once the code changed.\n */\nexport function draftedSpec(folder: string, opts: SpecGeneratorOptions): ComponentSpec | undefined {\n const path = `${opts.overridesDir ?? overridesDirOf(opts.componentsDir)}/${folder}.json`;\n const text = opts.read(path);\n if (text === undefined) return undefined;\n let raw: Record<string, unknown>;\n try {\n raw = JSON.parse(text) as Record<string, unknown>;\n } catch {\n throw new Error(`${path} is not valid JSON.`);\n }\n if (raw.source !== 'drafted') throw new Error(`${path}: a drafted spec says \"source\": \"drafted\".`);\n const files = Array.isArray(raw.files) ? (raw.files as unknown[]).filter((f): f is string => typeof f === 'string') : [];\n if (!files.length) throw new Error(`${path}: list the code it was drafted from in \"files\".`);\n const reason = typeof raw.reason === 'string' && raw.reason ? raw.reason : 'the generator cannot read it yet';\n const { $comment: _c, source: _s, files: _f, reason: _r, codeHash, hash: _h, drafted: _d, ...fields } = raw;\n const stale = typeof codeHash === 'string' && codeHash !== draftedCodeHash(files, opts.read);\n const body = { ...(fields as unknown as Omit<ComponentSpec, 'hash' | 'source' | 'drafted'>), drafted: { reason, ...(stale ? { stale: true } : {}) } };\n const problems = validateComponentSpec({ ...body, source: files }, new Map([...typesOf(opts.tokens)].map(([k, v]) => [k, v.type])));\n if (problems.length) throw new Error(`${path} does not match the component spec format:\\n- ${problems.join('\\n- ')}`);\n const { name, axes, properties, parts, variants, unmapped, ...rest } = body;\n const spec: Omit<ComponentSpec, 'hash'> = { name, ...rest, source: files, axes, properties, parts, variants, unmapped };\n return { name, ...rest, hash: hashSpec(spec), source: files, axes, properties, parts, variants, unmapped };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Repo helpers (Node)\n\n/** CSS custom property -> token, for every token of the repo (all tiers), with the repo's cssVar convention. */\nexport function tokenCssIndex(files: Record<string, string>, opts: { prefix?: string; separator?: string; layout?: Parameters<typeof buildTokenSet>[1] } = {}): Map<string, TokenInfo> {\n const set = buildTokenSet(files, opts.layout ?? {});\n const out = new Map<string, TokenInfo>();\n const ctx = defaultContext(set);\n for (const t of set.tokens.values()) {\n const v = tokenCssVar(t.path, opts.prefix, opts.separator);\n if (out.has(v)) continue;\n // Motion tokens carry their value: interactions play the code's duration and easing.\n const value = t.type === 'duration' || t.type === 'cubicBezier' ? resolve(set.byPath, t.path, ctx).value : undefined;\n out.set(v, { path: t.path, type: t.type, ...(value !== undefined ? { value } : {}) });\n }\n return out;\n}\n\n/** Generator options for the repo at `root` from bridge.config.json (tokens root, components dir, cssVar), and its component folders. */\nexport function repoSpecOptions(root: string): { opts: SpecGeneratorOptions; folders: string[] } {\n const configText = readFileSync(join(root, CONFIG_FILE), 'utf8');\n const config = loadConfig(configText);\n const tokensRoot = join(root, config.tokens.root);\n const files: Record<string, string> = {};\n const walk = (dir: string) => {\n for (const n of readdirSync(dir)) {\n const full = join(dir, n);\n if (statSync(full).isDirectory()) walk(full);\n else if (n.endsWith('.tokens.json')) files[relative(tokensRoot, full).split('\\\\').join('/')] = readFileSync(full, 'utf8');\n }\n };\n walk(tokensRoot);\n const tokens = tokenCssIndex(files, { prefix: config.cssVar.prefix, separator: config.cssVar.separator, layout: layoutOptions(config) });\n const read = (p: string) => {\n try {\n return readFileSync(join(root, p), 'utf8');\n } catch {\n return undefined;\n }\n };\n const componentsDir = config.components?.dir ?? 'packages/react/src/components';\n const dir = join(root, componentsDir);\n const folders = readdirSync(dir)\n .filter((n) => /^[A-Z]/.test(n) && statSync(join(dir, n)).isDirectory() && read(`${componentsDir}/${n}/${n}.tsx`) !== undefined)\n .sort();\n // The global base stylesheet next to the components (packages/react/src/styles/base.css), when the repo has one.\n const baseCss = posix.join(posix.dirname(componentsDir), 'styles/base.css');\n return { opts: { componentsDir, read, tokens, styleSuffix: config.components?.styleSuffix, components: folders, ...(read(baseCss) !== undefined ? { baseCss } : {}) }, folders };\n}\n\n/**\n * Specs for the repo at `root`. With `names`, those sets only (throws when one cannot be generated). Without, every\n * component folder: the sets the generator can draw, and the coverage of all of them (what `npm run specs` writes).\n */\nexport function generateRepoComponentSpecs(root: string, names?: string[]): ComponentSpecsFile {\n const { opts, folders } = repoSpecOptions(root);\n return names ? generateComponentSpecs(names, opts) : generateAllComponentSpecs(folders, opts);\n}\n\n/** The JSON text written to disk: stable, two-space indent, trailing newline. */\nexport const serializeComponentSpecs = (f: ComponentSpecsFile) => `${JSON.stringify(f, null, 2)}\\n`;\n","// Applying a suggestion on a local git checkout (Node only): the workspace adapter the planner reads through\n// (suggestion-apply.ts), the 3-way merge with `git merge-file`, and the three ways to hand the result over:\n// - branch (default): one commit on a new local branch through plumbing (commitToNewLocalBranch), the working tree,\n// the index and the checked-out branch untouched, nothing pushed;\n// - write: the files written into the working tree, refused when those files have uncommitted changes;\n// - patch: a `git format-patch` text built from a commit no branch points to.\n// A dry run plans and diffs, and writes nothing. Pushing, opening the pull request and posting the applied comment are\n// the caller's (CLI, MCP), with the developer's own access.\n\nimport { execFile } from 'node:child_process';\nimport { lstat, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { baseBranchOf, CONFIG_FILE, loadConfig, protectedBranchesOf, type BridgeConfig } from '../config';\nimport { slugify } from '../pr-composer';\nimport { planSuggestionApply, suggestionAppliedComment, type PlanSuggestionApplyInput, type SuggestionApplyOutcome, type SuggestionApplyPlan, type SuggestionWorkspace } from '../suggestion-apply';\nimport { gitBlobSha } from '../suggestions';\nimport { branchExists, commitToNewLocalBranch, commitTree, git, listFilesAt } from './git-local';\n\n/** Runs git and returns the exit code with the output instead of throwing on a non-zero code. */\nfunction gitCode(root: string, args: string[]): Promise<{ code: number; stdout: string; stderr: string }> {\n return new Promise((resolve) => {\n execFile('git', args, { cwd: root, maxBuffer: 32 * 1024 * 1024 }, (err, stdout, stderr) => {\n const code = err ? (typeof (err as { code?: unknown }).code === 'number' ? ((err as { code: number }).code) : -1) : 0;\n resolve({ code, stdout, stderr });\n });\n });\n}\n\n/** `git ls-tree <ref> -- <path>`: mode, type and object of one entry, or null. */\nasync function treeEntry(root: string, ref: string, path: string): Promise<{ mode: string; type: string; sha: string } | null> {\n const r = await gitCode(root, ['ls-tree', ref, '--', path]);\n const m = /^(\\d+) (\\w+) ([0-9a-f]+)\\t/.exec(r.stdout);\n return r.code === 0 && m ? { mode: m[1]!, type: m[2]!, sha: m[3]! } : null;\n}\n\n/** Each folder on the way to a path, then the path itself: \"a\", \"a/b\", \"a/b/c.json\". */\nconst prefixes = (path: string) => path.split('/').map((_, i, segs) => segs.slice(0, i + 1).join('/'));\n\n/** 3-way merge of three texts with `git merge-file -p`: the merged text, with conflict markers when not clean. */\nexport async function mergeText(root: string, input: { ours: string; base: string; theirs: string }): Promise<{ clean: boolean; text: string; conflicts: number }> {\n const dir = await mkdtemp(join(tmpdir(), 'bridge-merge-'));\n try {\n const [o, b, t] = ['current', 'base', 'suggested'].map((n) => join(dir, n));\n await Promise.all([writeFile(o!, input.ours), writeFile(b!, input.base), writeFile(t!, input.theirs)]);\n const r = await gitCode(root, ['merge-file', '-p', '-L', 'current', '-L', 'base', '-L', 'suggested', o!, b!, t!]);\n if (r.code < 0 || r.code > 127) throw new Error(`git merge-file failed: ${r.stderr.trim() || `exit ${r.code}`}`);\n return { clean: r.code === 0, text: r.stdout, conflicts: r.code };\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\n/** A unified diff of one file between two texts (null: absent), with a/ and b/ paths like `git diff`. */\nexport async function fileDiff(path: string, before: string | null, after: string | null): Promise<string> {\n if (before === after) return '';\n const dir = await mkdtemp(join(tmpdir(), 'bridge-diff-'));\n try {\n const side = async (name: 'a' | 'b', text: string | null) => {\n if (text === null) return '/dev/null';\n const p = join(dir, name, path);\n await mkdir(dirname(p), { recursive: true });\n await writeFile(p, text);\n return `${name}/${path}`;\n };\n const a = await side('a', before);\n const b = await side('b', after);\n const r = await new Promise<{ stdout: string }>((resolve) => execFile('git', ['diff', '--no-index', '--no-color', '--src-prefix=', '--dst-prefix=', '--', a, b], { cwd: dir, maxBuffer: 32 * 1024 * 1024 }, (_e, stdout) => resolve({ stdout })));\n return r.stdout;\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nexport interface GitWorkspaceOptions {\n /** Read this commit or branch. Absent: the working tree. */\n ref?: string | undefined;\n /** When the base commit is not in the clone, how to read a file there (for example GitHubClient.readFile). */\n readBase?: ((path: string, sha: string) => Promise<string | null>) | undefined;\n}\n\n/**\n * The workspace a suggestion plans against on a git checkout: the working tree (to write files there) or a ref (to\n * commit on top of it). The base commit is fetched from origin when the clone lacks it.\n */\nexport function gitWorkspace(root: string, opts: GitWorkspaceOptions = {}): SuggestionWorkspace {\n const { ref } = opts;\n let fetched = false;\n return {\n async read(path) {\n if (ref) {\n const e = await treeEntry(root, ref, path);\n if (!e || e.type !== 'blob' || e.mode === '120000') return null;\n return { text: await git(root, ['cat-file', 'blob', e.sha]), sha: e.sha };\n }\n try {\n const st = await lstat(join(root, path));\n if (!st.isFile()) return null;\n const text = await readFile(join(root, path), 'utf8');\n return { text, sha: gitBlobSha(text) };\n } catch {\n return null;\n }\n },\n async readAt(at, path) {\n if ((await gitCode(root, ['cat-file', '-e', `${at}^{commit}`])).code !== 0 && !fetched) {\n fetched = true;\n await gitCode(root, ['fetch', '--no-tags', '--quiet', 'origin', at]);\n }\n const e = await treeEntry(root, at, path);\n if (e?.type === 'blob') return git(root, ['cat-file', 'blob', e.sha]);\n return opts.readBase ? opts.readBase(path, at) : null;\n },\n async list() {\n if (ref) return listFilesAt(root, ref);\n const out = await git(root, ['ls-files', '-z', '--cached', '--others', '--exclude-standard']);\n const all = [...new Set(out.split('\\0').filter(Boolean))];\n const present = await Promise.all(all.map((p) => lstat(join(root, p)).then((s) => s.isFile(), () => false)));\n return all.filter((_, i) => present[i]);\n },\n async isSymlink(path) {\n for (const p of prefixes(path)) {\n if (ref) {\n const e = await treeEntry(root, ref, p);\n if (!e) return false;\n if (e.mode === '120000') return true;\n } else {\n try {\n if ((await lstat(join(root, p))).isSymbolicLink()) return true;\n } catch {\n return false;\n }\n }\n }\n return false;\n },\n merge: (input) => mergeText(root, input),\n };\n}\n\nexport type LocalApplyMode = 'branch' | 'write' | 'patch';\n\nexport interface ApplySuggestionLocallyInput extends Omit<PlanSuggestionApplyInput, 'workspace' | 'config'> {\n /** Repository root (a git checkout). */\n root: string;\n /** The issue number, for the branch name and the commit message. */\n number: number;\n /** Default: bridge.config.json read where the plan reads (the base ref, or the working tree for \"write\"). */\n config?: BridgeConfig | undefined;\n /** Default \"branch\". */\n mode?: LocalApplyMode | undefined;\n /** Plan and diff only: nothing is written. */\n dryRun?: boolean | undefined;\n /** The ref the branch or patch builds on. Default \"HEAD\". Ignored by \"write\" (the working tree). */\n base?: string | undefined;\n /** Branch name. Default `<branchPrefix>suggestion-<n>-<slug>`, then -2, -3 when taken. */\n branch?: string | undefined;\n /** GitHub login of the developer, for the applied comment. */\n by?: string | undefined;\n readBase?: GitWorkspaceOptions['readBase'];\n /** Clock for the applied comment (tests). */\n now?: (() => string) | undefined;\n}\n\nexport type LocalApplyStatus = 'dry-run' | 'branch-created' | 'branch-exists' | 'written' | 'patch' | Exclude<SuggestionApplyOutcome, 'ready'>;\n\nexport interface LocalSuggestionApply {\n status: LocalApplyStatus;\n exitCode: 0 | 1 | 3;\n message: string;\n plan: SuggestionApplyPlan;\n branch?: string | undefined;\n commit?: string | undefined;\n /** `git format-patch` text (mode \"patch\"). */\n patch?: string | undefined;\n /** Unified diff of what is (or, in a dry run, would be) written. */\n diff?: string | undefined;\n /** Files written into the working tree (mode \"write\"). */\n written?: string[] | undefined;\n /** The applied record to post on the issue once a branch or files exist (posting is the caller's). */\n appliedComment?: string | undefined;\n}\n\nconst COMMIT_TYPE: Record<string, string> = { 'token-change': 'feat(tokens)', docs: 'docs', 'component-spec': 'feat', brand: 'feat(tokens)', revert: 'revert', config: 'chore(config)' };\n\nfunction commitMessage(plan: SuggestionApplyPlan, n: number): string {\n const p = plan.payload;\n const type = `${COMMIT_TYPE[p.kind] ?? 'chore'}${p.tier.bump === 'major' ? '!' : ''}`;\n return [`${type}: ${p.title.trim()}`, '', p.summary.trim(), '', `Applies Bridge suggestion #${n} (version ${plan.payloadSha.slice(0, 7)}).`].filter((l, i, a) => !(l === '' && a[i - 1] === '')).join('\\n');\n}\n\nasync function readConfigAt(ws: SuggestionWorkspace): Promise<BridgeConfig> {\n const text = (await ws.read(CONFIG_FILE))?.text;\n if (!text) throw new Error(`No ${CONFIG_FILE} here: run \\`bridge init\\` first, or apply from the repository root.`);\n return loadConfig(text);\n}\n\n/**\n * Plans a suggestion against the local checkout and hands the result over as a branch (default), files in the\n * working tree, or a patch. Refused, blocked, conflicting or already applied plans write nothing.\n */\nexport async function applySuggestionLocally(input: ApplySuggestionLocallyInput): Promise<LocalSuggestionApply> {\n const mode = input.mode ?? 'branch';\n const base = input.base ?? 'HEAD';\n const { root } = input;\n const wsOpts = { readBase: input.readBase };\n const ws = gitWorkspace(root, mode === 'write' ? wsOpts : { ...wsOpts, ref: base });\n const config = input.config ?? (await readConfigAt(ws));\n const planFor = (workspace: SuggestionWorkspace) => planSuggestionApply({ ...input, config, workspace });\n const plan = await planFor(ws);\n const at = (input.now ?? (() => new Date().toISOString()))();\n const result = (status: LocalApplyStatus, rest: Partial<LocalSuggestionApply> = {}): LocalSuggestionApply => ({ status, exitCode: plan.exitCode, message: plan.message, plan, ...rest });\n if (plan.outcome !== 'ready') return result(plan.outcome);\n\n const readNow = async (path: string) => (await ws.read(path))?.text ?? null;\n const diffOf = async () => (await Promise.all(plan.writes.map(async (w) => fileDiff(w.path, await readNow(w.path), w.content)))).join('');\n\n if (input.dryRun) return result('dry-run', { message: `Dry run: ${plan.message.replace(/^Ready: /, '')} Nothing written.`, diff: await diffOf() });\n\n if (mode === 'patch') {\n const { sha } = await commitTree(root, { base, message: commitMessage(plan, input.number), files: plan.writes });\n const patch = await git(root, ['format-patch', '-1', '--stdout', sha]);\n return result('patch', { message: 'Patch ready: apply it with `git am`.', patch, commit: sha });\n }\n\n if (mode === 'write') {\n const paths = plan.writes.map((w) => w.path);\n const dirty = (await git(root, ['status', '--porcelain', '-z', '--', ...paths])).split('\\0').filter((l) => l.length > 3).map((l) => l.slice(3));\n if (dirty.length) {\n return result('refused', {\n exitCode: 1,\n message: `Not written: these files have uncommitted changes: ${dirty.join(', ')}. Commit or stash them, or apply on a branch instead.`,\n });\n }\n const diff = await diffOf();\n for (const w of plan.writes) {\n const full = join(root, w.path);\n if (w.content === null) await rm(full, { force: true });\n else {\n await mkdir(dirname(full), { recursive: true });\n await writeFile(full, w.content);\n }\n }\n return result('written', {\n message: `Written: ${paths.length} file(s) in the working tree. Review them, commit, and say \"Closes #${input.number}\" in the pull request.`,\n written: paths,\n diff,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, at }),\n });\n }\n\n // Branch: reuse a branch of the same name when its tip already has the change, else -2, -3.\n const prefix = config.governance.branchPrefix;\n const wanted = input.branch ?? `${prefix}suggestion-${input.number}-${slugify(plan.payload.title, 40)}`;\n let branch = wanted;\n for (let i = 2; await branchExists(root, branch); i++) {\n const there = await planFor(gitWorkspace(root, { ...wsOpts, ref: branch }));\n if (there.outcome === 'already-applied') {\n const commit = (await git(root, ['rev-parse', `refs/heads/${branch}`])).trim();\n return result('branch-exists', {\n exitCode: 0,\n message: `Already on ${branch}: that branch has every change of this suggestion. Push it and open a pull request that says \"Closes #${input.number}\".`,\n branch,\n commit,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, branch, commit, at }),\n });\n }\n branch = `${wanted}-${i}`;\n }\n const protectedBranches = [...new Set([...protectedBranchesOf(config), baseBranchOf(config)])];\n const res = await commitToNewLocalBranch(root, { base, branch, message: commitMessage(plan, input.number), files: plan.writes, protectedBranches, branchPrefix: prefix });\n return result('branch-created', {\n message: `Applied on ${branch}, your working tree is untouched. Push it and open a pull request that says \"Closes #${input.number}\".`,\n branch,\n commit: res.sha,\n diff: res.diff,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, branch, commit: res.sha, at }),\n });\n}\n","// fsSource: a RepoSource over a local checkout (build time, CLI, tests). Lists files with node:fs, skipping\n// .git and node_modules, and pins the ref to the checkout's HEAD when git answers (\"working-tree\" otherwise).\n\nimport { execFileSync } from 'node:child_process';\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { normalizeRepoPath, type RepoSource, type RepoSourceRef } from '../repo-source';\n\nconst SKIP = new Set(['.git', 'node_modules']);\n\nfunction gitOut(root: string, args: string[]): string {\n try {\n return execFileSync('git', args, { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n } catch {\n return '';\n }\n}\n\n/** owner, repo and sha of a checkout: the github.com origin remote and HEAD, when git knows them. */\nexport function localRepoRef(root: string): RepoSourceRef {\n const origin = /github\\.com[:/]([\\w.-]+)\\/([\\w.-]+?)(\\.git)?$/.exec(gitOut(root, ['remote', 'get-url', 'origin']));\n return { owner: origin?.[1] ?? '', repo: origin?.[2] ?? '', sha: gitOut(root, ['rev-parse', 'HEAD']) || 'working-tree' };\n}\n\n/** A RepoSource over the files of `root` as they are on disk (uncommitted changes included). */\nexport function fsSource(root: string, ref: Partial<RepoSourceRef> = {}): RepoSource {\n let resolved: RepoSourceRef | undefined;\n const walk = (rel: string, out: string[]) => {\n for (const entry of readdirSync(join(root, rel), { withFileTypes: true })) {\n if (SKIP.has(entry.name)) continue;\n const path = rel ? `${rel}/${entry.name}` : entry.name;\n if (entry.isDirectory()) walk(path, out);\n else if (entry.isFile()) out.push(path);\n else if (entry.isSymbolicLink() && statSync(join(root, path), { throwIfNoEntry: false })?.isFile()) out.push(path);\n }\n };\n return {\n get ref() {\n resolved ??= { ...localRepoRef(root), ...Object.fromEntries(Object.entries(ref).filter(([, v]) => v !== undefined)) };\n return resolved;\n },\n async list(prefix = '') {\n const rel = normalizeRepoPath(prefix);\n const abs = join(root, rel);\n if (!existsSync(abs)) return [];\n if (!statSync(abs).isDirectory()) return [rel];\n const out: string[] = [];\n walk(rel, out);\n return out.sort();\n },\n async text(path) {\n const abs = join(root, normalizeRepoPath(path));\n try {\n return statSync(abs).isFile() ? readFileSync(abs, 'utf8') : null;\n } catch {\n return null;\n }\n },\n };\n}\n","// The in-page half of the Storybook measure: plain JavaScript, kept as a string so no bundler or test transform\n// rewrites it before it reaches the browser. It runs in a story's iframe once the story has rendered and returns a\n// MeasuredNode tree (see measure.ts) of what the browser actually drew: boxes, layout, paint, text, and the CSS custom\n// properties each value was declared with.\n//\n// How a token is found for a value: every style rule of the page (CSS modules, Sass output, CSS-in-JS rules inserted\n// with insertRule, Tailwind layers) is read once; for an element and a property the winning declaration (inline style,\n// then !important, specificity and order) is taken, and the custom properties it uses are followed through their own\n// declarations (`--button-bg: var(--color-action-primary-bg)`) to the end of the chain. A value no declaration ties to a\n// variable is matched by value against the variables defined on the root (`matched`), which is weaker evidence.\n\nexport const MEASURE_SCRIPT = String.raw`(function (arg) {\n arg = arg || {};\n var MAX_NODES = arg.maxNodes || 400;\n var MAX_DEPTH = arg.maxDepth || 14;\n var rootSel = arg.root || '#storybook-root, #root';\n var PROPS = ['display', 'position', 'visibility', 'opacity', 'overflow', 'box-sizing',\n 'flex-direction', 'flex-wrap', 'justify-content', 'align-items', 'align-self', 'flex-grow', 'row-gap', 'column-gap',\n 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\n 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\n 'width', 'height', 'min-width', 'min-height',\n 'background-color', 'background-image',\n 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width',\n 'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style',\n 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color',\n 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius',\n 'box-shadow', 'outline-style', 'outline-width', 'outline-color',\n 'color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'text-decoration-line', 'text-transform', 'text-align', 'white-space',\n 'fill', 'stroke', 'stroke-width', 'transform', 'grid-auto-flow', 'grid-template-columns', 'grid-template-rows', 'left', 'top', 'right', 'bottom'];\n // Properties a token is looked for (paint, spacing, shape, type).\n var TOKENED = ['row-gap', 'column-gap', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'width', 'height', 'min-width', 'min-height',\n 'background-color', 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width',\n 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color',\n 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius',\n 'box-shadow', 'opacity', 'color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'fill', 'stroke', 'stroke-width'];\n // Longhand -> shorthands that may set it, with the position of the longhand in a 1 to 4 value box shorthand.\n var SIDES = { top: 0, right: 1, bottom: 2, left: 3 };\n var CORNERS = { 'top-left': 0, 'top-right': 1, 'bottom-right': 2, 'bottom-left': 3 };\n var LOGICAL = { top: 'block-start', bottom: 'block-end', left: 'inline-start', right: 'inline-end' };\n var LOGICAL_CORNER = { 'top-left': 'start-start', 'top-right': 'start-end', 'bottom-right': 'end-end', 'bottom-left': 'end-start' };\n function shorthandsOf(p) {\n var m;\n // Logical longhands too (padding-block-start: a horizontal writing mode, left to right).\n if ((m = /^padding-(top|right|bottom|left)$/.exec(p))) return [['padding-' + LOGICAL[m[1]], -1], ['padding', SIDES[m[1]]], ['padding-block', m[1] === 'top' ? 0 : m[1] === 'bottom' ? 1 : -1], ['padding-inline', m[1] === 'left' ? 0 : m[1] === 'right' ? 1 : -1]].filter(function (x) { return !/block$|inline$/.test(x[0]) || x[1] >= 0; });\n if ((m = /^margin-(top|right|bottom|left)$/.exec(p))) return [['margin-' + LOGICAL[m[1]], -1], ['margin', SIDES[m[1]]]];\n if ((m = /^border-(top-left|top-right|bottom-right|bottom-left)-radius$/.exec(p))) return [['border-' + LOGICAL_CORNER[m[1]] + '-radius', -1], ['border-radius', CORNERS[m[1]]]];\n if ((m = /^border-(top|right|bottom|left)-(width|color|style)$/.exec(p))) return [['border-' + LOGICAL[m[1]] + '-' + m[2], -1], ['border-' + LOGICAL[m[1]], -1], ['border-' + m[2], SIDES[m[1]]], ['border-' + m[1], -1], ['border', -1], ['border-' + (m[1] === 'top' || m[1] === 'bottom' ? 'block' : 'inline'), -1]];\n if (p === 'row-gap') return [['gap', 0]];\n if (p === 'column-gap') return [['gap', 1]];\n if (p === 'background-color') return [['background', -1]];\n if (/^font-/.test(p) || p === 'line-height') return [['font', -1]];\n return [];\n }\n\n // ---- style rules, read once ----\n var rules = [];\n var order = 0;\n function walk(list, layered) {\n for (var i = 0; i < list.length; i++) {\n var r = list[i];\n try {\n if (r.selectorText !== undefined && r.style) {\n rules.push({ sel: r.selectorText, style: r.style, order: order++, layered: layered });\n if (r.cssRules && r.cssRules.length) walk(r.cssRules, layered); // CSS nesting\n } else if (r.media !== undefined && r.cssRules) {\n if (window.matchMedia(r.media.mediaText || 'all').matches) walk(r.cssRules, layered);\n } else if (r.conditionText !== undefined && r.cssRules) {\n walk(r.cssRules, layered);\n } else if (r.cssRules && r.name !== undefined) {\n walk(r.cssRules, true); // @layer block: unlayered rules win over it\n } else if (r.cssRules) {\n walk(r.cssRules, layered);\n }\n } catch (e) {}\n }\n }\n var sheetsRead = 0, sheetsBlocked = 0;\n for (var s = 0; s < document.styleSheets.length; s++) {\n try { walk(document.styleSheets[s].cssRules, false); sheetsRead++; } catch (e) { sheetsBlocked++; }\n }\n try { for (var a = 0; a < (document.adoptedStyleSheets || []).length; a++) walk(document.adoptedStyleSheets[a].cssRules, false); } catch (e) {}\n\n function splitTop(text, sepRe) {\n var out = [], depth = 0, cur = '', q = null;\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (q) { cur += c; if (c === q) q = null; continue; }\n if (c === '\"' || c === \"'\") { q = c; cur += c; continue; }\n if (c === '(' || c === '[') depth++;\n if (c === ')' || c === ']') depth--;\n if (depth === 0 && sepRe.test(c)) { if (cur.trim()) out.push(cur.trim()); cur = ''; continue; }\n cur += c;\n }\n if (cur.trim()) out.push(cur.trim());\n return out;\n }\n function specificity(sel) {\n var s = sel.replace(/:where\\([^)]*\\)/g, '').replace(/::?(before|after|placeholder|selection|marker|backdrop)\\b/g, '');\n var ids = (s.match(/#[\\w-]+/g) || []).length;\n var cls = (s.match(/\\.[\\w-]+|\\[[^\\]]*\\]|:(?!not\\b|is\\b|has\\b)[\\w-]+(\\([^)]*\\))?/g) || []).length;\n var types = (s.replace(/\\[[^\\]]*\\]|\\([^)]*\\)/g, '').match(/(^|[\\s>+~(])[a-zA-Z][\\w-]*/g) || []).length;\n return ids * 10000 + cls * 100 + types;\n }\n var PSEUDO_END = /::?(before|after)\\s*$/;\n // pseudo: the rules for el::before / el::after (the selector minus its pseudo-element); none: the element's own.\n function matchSpec(el, selText, pseudo) {\n var best = -1;\n var parts = splitTop(selText, /,/);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n var pm = PSEUDO_END.exec(part);\n if (pseudo) {\n if (!pm || pm[1] !== pseudo) continue;\n part = part.slice(0, pm.index).trim() || '*';\n } else if (pm || /::/.test(part)) continue;\n try { if (el.matches(part)) best = Math.max(best, specificity(part) + (pseudo ? 1 : 0)); } catch (e) {}\n }\n return best;\n }\n var matchCache = { '': new Map(), before: new Map(), after: new Map() };\n function matching(el, pseudo) {\n var cache = matchCache[pseudo || ''];\n var m = cache.get(el);\n if (m) return m;\n m = [];\n for (var i = 0; i < rules.length; i++) {\n var sp = matchSpec(el, rules[i].sel, pseudo);\n if (sp >= 0) m.push({ r: rules[i], sp: sp });\n }\n cache.set(el, m);\n return m;\n }\n // The winning declared value of a property (longhand or the shorthand that sets it) on an element or its pseudo.\n function declared(el, prop, pseudo) {\n var best = null;\n function consider(value, important, layered, sp, ord, shorthand, pos) {\n if (!value) return;\n var rank = [important ? (layered ? 3 : 2) : (layered ? 0 : 1), sp, ord];\n if (!best || cmp(rank, best.rank) > 0) best = { value: value, rank: rank, shorthand: shorthand, pos: pos };\n }\n function cmp(x, y) { for (var i = 0; i < x.length; i++) if (x[i] !== y[i]) return x[i] - y[i]; return 0; }\n var short = prop.indexOf('--') === 0 ? [] : shorthandsOf(prop);\n var m = matching(el, pseudo);\n for (var i = 0; i < m.length; i++) {\n var st = m[i].r.style;\n var v = st.getPropertyValue(prop);\n if (v) consider(v, st.getPropertyPriority(prop) === 'important', m[i].r.layered, m[i].sp, m[i].r.order, null, -1);\n else for (var k = 0; k < short.length; k++) {\n var sv = st.getPropertyValue(short[k][0]);\n if (sv) consider(sv, st.getPropertyPriority(short[k][0]) === 'important', m[i].r.layered, m[i].sp, m[i].r.order, short[k][0], short[k][1]);\n }\n }\n var inl = !pseudo && el.style && el.style.getPropertyValue(prop);\n if (inl) consider(inl, el.style.getPropertyPriority(prop) === 'important', false, 1e9, 1e9, null, -1);\n else if (el.style && !pseudo) for (var j = 0; j < short.length; j++) {\n var iv = el.style.getPropertyValue(short[j][0]);\n if (iv) consider(iv, false, false, 1e9, 1e9, short[j][0], short[j][1]);\n }\n return best;\n }\n function varsIn(value) {\n var out = [], re = /var\\(\\s*(--[\\w-]+)/g, m;\n while ((m = re.exec(value))) out.push(m[1]);\n return out;\n }\n // The piece of a box shorthand that sets one side (\"padding: var(--a) var(--b)\" -> right is var(--b)).\n function boxPiece(value, pos) {\n if (pos < 0) return value;\n var parts = splitTop(value.replace(/\\s*\\/.*$/, ''), /\\s/);\n if (parts.length === 1) return parts[0];\n if (parts.length === 2) return parts[pos % 2];\n if (parts.length === 3) return parts[pos === 3 ? 1 : pos];\n return parts[pos] || value;\n }\n // Custom property chain: --button-bg -> --color-action-primary-bg -> --color-orange-500.\n function chainOf(el, name) {\n var chain = [name], seen = {};\n seen[name] = 1;\n var cur = name;\n for (var d = 0; d < 8; d++) {\n var found = null;\n for (var e = el; e && e.nodeType === 1; e = e.parentElement) {\n var dv = declared(e, cur);\n if (dv) { found = dv.value; break; }\n }\n if (!found) break;\n var next = varsIn(found);\n if (next.length !== 1 || seen[next[0]] || found.trim().indexOf('var(') !== 0) break;\n seen[next[0]] = 1;\n chain.push(next[0]);\n cur = next[0];\n }\n return chain;\n }\n\n // ---- value normalisation through a probe element ----\n var probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:0;height:0';\n document.body.appendChild(probe);\n var colorCache = {};\n function normColor(v) {\n if (v in colorCache) return colorCache[v];\n probe.style.color = '';\n probe.style.color = v;\n var out = probe.style.color ? getComputedStyle(probe).color : null;\n colorCache[v] = out;\n return out;\n }\n function normLength(v) {\n probe.style.width = '';\n probe.style.width = v;\n if (!probe.style.width) return null;\n var w = getComputedStyle(probe).width;\n probe.style.width = '0';\n return w;\n }\n var isColorProp = function (p) { return /color$/.test(p) || p === 'fill' || p === 'stroke'; };\n\n // Variables in scope at the component (for value matching): defined on :root, or on a provider element around the\n // story (Fluent's FluentProvider, a theme wrapper). Custom properties inherit, so the component root's computed style\n // holds both.\n var rootVars = null;\n var scopeEl = null;\n function rootTokens() {\n if (rootVars) return rootVars;\n rootVars = { colors: {}, lengths: {}, count: 0, scoped: 0 };\n var cs = getComputedStyle(scopeEl || document.documentElement);\n var top = scopeEl ? getComputedStyle(document.documentElement) : cs;\n var names = {};\n for (var i = 0; i < rules.length; i++) {\n var st = rules[i].style;\n for (var k = 0; k < st.length; k++) if (st[k].indexOf('--') === 0) names[st[k]] = 1;\n }\n for (var i2 = 0; i2 < cs.length; i2++) if (cs[i2].indexOf('--') === 0) names[cs[i2]] = 1;\n for (var i3 = 0; scopeEl && i3 < top.length; i3++) if (top[i3].indexOf('--') === 0) names[top[i3]] = 1;\n for (var n in names) {\n var v = cs.getPropertyValue(n).trim();\n if (!v) continue;\n rootVars.count++;\n if (scopeEl && !top.getPropertyValue(n).trim()) rootVars.scoped++;\n if (/^(#|rgb|hsl|oklch|oklab|lab|lch|color\\()/i.test(v)) {\n var c = normColor(v);\n if (c) (rootVars.colors[c] = rootVars.colors[c] || []).push(n);\n } else if (/^-?[\\d.]+(px|rem|em)$/.test(v)) {\n var l = normLength(v);\n if (l) (rootVars.lengths[l] = rootVars.lengths[l] || []).push(n);\n }\n }\n return rootVars;\n }\n\n function tokenFor(el, prop, computed, pseudo) {\n var d = declared(el, prop, pseudo);\n // A pseudo-element inherits from its element, an element from its parent.\n var parentOf = pseudo ? el : el.parentElement;\n if (d) {\n var piece = d.shorthand && /^(padding|margin|border-radius|border-width|border-color|border-style|gap)$/.test(d.shorthand) ? boxPiece(d.value, d.pos) : d.value;\n var vars = varsIn(piece);\n if (vars.length) {\n var pick = vars[0];\n if (vars.length > 1) {\n var cs = getComputedStyle(el, pseudo ? '::' + pseudo : null);\n for (var i = 0; i < vars.length; i++) {\n var rv = cs.getPropertyValue(vars[i]).trim();\n var same = isColorProp(prop) ? normColor(rv) === computed : normLength(rv) === computed;\n if (same) { pick = vars[i]; break; }\n }\n }\n var chain = chainOf(el, pick);\n // A color function around channels alone (\"hsl(var(--primary))\") gives the variable's color: tied to it too.\n var channels = isColorProp(prop) && vars.length === 1 ? /^(rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\(\\s*var\\(\\s*--[\\w-]+\\s*\\)\\s*\\)$/i.exec(piece.trim()) : null;\n var direct = (piece.trim().indexOf('var(') === 0 && vars.length === 1) || !!channels;\n // A declaration that does not give the computed value lost the cascade somewhere this script does not model:\n // the value is not tied to it (it may still match a variable by value below).\n if (direct && !/^(line-height|font-weight|opacity|font-family)$/.test(prop)) {\n var own = getComputedStyle(el, pseudo ? '::' + pseudo : null).getPropertyValue(pick).trim();\n var got = isColorProp(prop) ? normColor(channels ? channels[1] + '(' + own + ')' : own) : /px$/.test(computed) ? normLength(own) : null;\n if (own && got && got !== computed) d = null;\n }\n if (d) return { via: 'declared', chain: chain, exact: direct, declared: piece.trim() };\n }\n if (d && /^(inherit|currentcolor)$/i.test(d.value.trim()) && parentOf && prop !== 'background-color') {\n var cp = prop === 'fill' || prop === 'stroke' || /border-.*-color/.test(prop) ? 'color' : prop;\n // currentcolor on another property reads this element's (or pseudo's) own color; inherit, and color:\n // currentcolor, read the parent's (a pseudo-element's parent is its element).\n var up = /currentcolor/i.test(d.value) && cp !== prop\n ? tokenFor(el, cp, getComputedStyle(el, pseudo ? '::' + pseudo : null).getPropertyValue(cp), pseudo)\n : parentOf ? tokenFor(parentOf, cp, getComputedStyle(parentOf).getPropertyValue(cp)) : null;\n if (up) return up;\n }\n } else if (/^(color|font-family|font-size|font-weight|line-height|letter-spacing)$/.test(prop) && parentOf) {\n // Inherited: the token comes from the nearest ancestor that declares it.\n return tokenFor(parentOf, prop, computed);\n }\n var rt = rootTokens();\n var hit = isColorProp(prop) ? rt.colors[computed] : rt.lengths[computed];\n if (hit && hit.length) return { via: 'matched', chain: hit.slice(0, 3), exact: false };\n return null;\n }\n\n // ---- the rendered tree ----\n var count = 0;\n function own(el, cs) {\n var bg = cs.backgroundColor;\n var hasBg = bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent';\n var hasBorder = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['border' + s + 'Width']) > 0 && cs['border' + s + 'Style'] !== 'none'; });\n var pad = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['padding' + s]) > 0; });\n var paints = function (v) { return !!v && v !== 'none'; };\n return hasBg || hasBorder || pad || paints(cs.boxShadow) || paints(cs.backgroundImage);\n }\n function directText(el) {\n var t = '';\n for (var c = el.firstChild; c; c = c.nextSibling) if (c.nodeType === 3) t += c.nodeValue;\n return t.replace(/\\s+/g, ' ').trim();\n }\n function visible(el, cs) {\n if (cs.display === 'none' || cs.visibility === 'hidden' || cs.visibility === 'collapse') return false;\n // Closed or hidden content is not a layer: transparent, hidden, inert, clipped away, or a hidden popover.\n if (parseFloat(cs.opacity) === 0 || el.hidden || el.hasAttribute('inert')) return false;\n if (/inset\\((50|100)%/.test(cs.clipPath || '')) return false;\n if (el.getAttribute('aria-hidden') === 'true' && (/^(tooltip|dialog|menu|listbox)$/.test(el.getAttribute('role') || '') || /popover|tooltip/i.test(String(el.className && el.className.baseVal !== undefined ? el.className.baseVal : el.className)))) return false;\n var r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0 && !el.children.length) return false;\n // Visually hidden text for screen readers (1 px, clipped): not drawn, not a layer.\n if ((cs.position === 'absolute' || cs.position === 'fixed') && r.width <= 1 && r.height <= 1 && (/hidden|clip/.test(cs.overflow) || cs.clip !== 'auto' && cs.clip !== '' || cs.clipPath !== 'none')) return false;\n return true;\n }\n function round(n) { return Math.round(n * 100) / 100; }\n // An inline SVG as markup Figma can draw: every shape's computed fill and stroke written on it, currentColor\n // resolved, the rendered size set.\n function svgMarkup(el, r) {\n if (el.outerHTML.length > 12000) return null;\n var strokes = [];\n var clone = el.cloneNode(true);\n var src = [el].concat(Array.prototype.slice.call(el.querySelectorAll('*')));\n var dst = [clone].concat(Array.prototype.slice.call(clone.querySelectorAll('*')));\n var color = getComputedStyle(el).color;\n for (var i = 0; i < src.length && i < dst.length; i++) {\n var cs = getComputedStyle(src[i]);\n if (/^(path|circle|rect|ellipse|line|polyline|polygon|use|text)$/.test(src[i].tagName.toLowerCase()) || i === 0) {\n var f = cs.fill, k = cs.stroke;\n if (f) dst[i].setAttribute('fill', /url\\(/.test(f) ? (src[i].getAttribute('fill') || 'none') : f);\n if (k && k !== 'none') {\n dst[i].setAttribute('stroke', k);\n if (cs.strokeWidth) dst[i].setAttribute('stroke-width', parseFloat(cs.strokeWidth));\n if (i > 0) strokes.push(k);\n }\n else if (i > 0 && k === 'none' && src[i].getAttribute('stroke')) dst[i].setAttribute('stroke', 'none');\n }\n dst[i].removeAttribute('class');\n dst[i].removeAttribute('style');\n }\n clone.setAttribute('width', round(r.width));\n clone.setAttribute('height', round(r.height));\n if (!clone.getAttribute('xmlns')) clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n return { svg: clone.outerHTML.replace(/currentColor/gi, color), strokes: strokes };\n }\n // ::before / ::after drawn as a box (a switch knob, a checkbox's box, a radio's circle): a frame part with its box,\n // paint, border, radius and position. Text-only or empty pseudo-elements are not parts.\n function pseudoNode(el, which, hostRect) {\n var cs = getComputedStyle(el, '::' + which);\n var content = cs.content;\n if (!content || content === 'none' || content === 'normal' || cs.display === 'none' || cs.visibility === 'hidden') return null;\n var w = parseFloat(cs.width), h = parseFloat(cs.height);\n if (!(w > 0) || !(h > 0) || !/px$/.test(cs.width) || !/px$/.test(cs.height)) return null;\n var bg = cs.backgroundColor;\n var paints = (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') || (cs.backgroundImage && cs.backgroundImage !== 'none') || (cs.boxShadow && cs.boxShadow !== 'none');\n var bordered = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['border' + s + 'Width']) > 0 && cs['border' + s + 'Style'] !== 'none'; });\n if (!paints && !bordered) return null;\n // Border box: CSS width/height are content-box unless box-sizing says otherwise.\n if (cs.boxSizing !== 'border-box') {\n w += (parseFloat(cs.paddingLeft) || 0) + (parseFloat(cs.paddingRight) || 0) + (parseFloat(cs.borderLeftWidth) || 0) + (parseFloat(cs.borderRightWidth) || 0);\n h += (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0) + (parseFloat(cs.borderTopWidth) || 0) + (parseFloat(cs.borderBottomWidth) || 0);\n }\n var hcs = getComputedStyle(el);\n var padX = hostRect.left + (parseFloat(hcs.borderLeftWidth) || 0), padY = hostRect.top + (parseFloat(hcs.borderTopWidth) || 0);\n var padW = hostRect.width - (parseFloat(hcs.borderLeftWidth) || 0) - (parseFloat(hcs.borderRightWidth) || 0);\n var padH = hostRect.height - (parseFloat(hcs.borderTopWidth) || 0) - (parseFloat(hcs.borderBottomWidth) || 0);\n var x, y;\n if (cs.position === 'absolute' || cs.position === 'fixed') {\n x = /px$/.test(cs.left) ? padX + parseFloat(cs.left) : /px$/.test(cs.right) ? padX + padW - parseFloat(cs.right) - w : padX;\n y = /px$/.test(cs.top) ? padY + parseFloat(cs.top) : /px$/.test(cs.bottom) ? padY + padH - parseFloat(cs.bottom) - h : padY;\n } else {\n // In flow: before at the start of the content box, after at its end.\n var cx = padX + (parseFloat(hcs.paddingLeft) || 0), cy = padY + (parseFloat(hcs.paddingTop) || 0);\n x = which === 'before' ? cx : padX + padW - (parseFloat(hcs.paddingRight) || 0) - w;\n y = cy;\n }\n var m = /matrix\\(([^)]+)\\)/.exec(cs.transform || '');\n if (m) { var mv = m[1].split(',').map(parseFloat); x += mv[4] || 0; y += mv[5] || 0; }\n var style = {};\n for (var i = 0; i < PROPS.length; i++) style[PROPS[i]] = cs.getPropertyValue(PROPS[i]);\n style.width = round(w) + 'px';\n style.height = round(h) + 'px';\n var tokens = {};\n for (var j = 0; j < TOKENED.length; j++) {\n var p = TOKENED[j], v = style[p];\n if (!v || v === 'none' || v === 'normal' || v === 'auto' || v === 'rgba(0, 0, 0, 0)') continue;\n if (/width$/.test(p) && /^border-/.test(p) && v === '0px') continue;\n if (/^border-.*-color$/.test(p) && parseFloat(style[p.replace('color', 'width')]) === 0) continue;\n var t = tokenFor(el, p, v, which);\n if (t) tokens[p] = t;\n }\n count++;\n return { tag: '::' + which, kind: 'frame', pseudo: which, sized: { width: true, height: true }, classes: [], box: { x: round(x - originX), y: round(y - originY), width: round(w), height: round(h) }, style: style, tokens: tokens, children: [] };\n }\n var originX = 0, originY = 0;\n function node(el, depth) {\n count++;\n var cs = getComputedStyle(el);\n var r = el.getBoundingClientRect();\n var tag = el.tagName.toLowerCase();\n var style = {};\n for (var i = 0; i < PROPS.length; i++) style[PROPS[i]] = cs.getPropertyValue(PROPS[i]);\n var tokens = {};\n for (var j = 0; j < TOKENED.length; j++) {\n var p = TOKENED[j], v = style[p];\n if (!v || v === 'none' || v === 'normal' || v === 'auto' || v === 'rgba(0, 0, 0, 0)') continue;\n if (/width$/.test(p) && /^border-/.test(p) && v === '0px') continue;\n if (/^border-.*-color$/.test(p) && parseFloat(style[p.replace('color', 'width')]) === 0) continue;\n var t = tokenFor(el, p, v);\n if (t) tokens[p] = t;\n }\n // A width or height the CSS sets (not auto, a percentage or content-sized): the pull keeps it fixed.\n var sized = {};\n ['width', 'height'].forEach(function (k) {\n var dv = declared(el, k);\n var v = dv ? dv.value.trim() : (el.style && el.style.getPropertyValue(k)) || '';\n if (v && !/^(auto|inherit|initial|unset|revert|fit-content|max-content|min-content|stretch|-webkit-fill-available)/.test(v) && !/%/.test(v)) sized[k] = true;\n });\n var n = { tag: tag, classes: Array.prototype.slice.call(el.classList || []).slice(0, 8), box: { x: round(r.left - originX), y: round(r.top - originY), width: round(r.width), height: round(r.height) }, style: style, tokens: tokens, children: [] };\n var role = el.getAttribute('role');\n if (role) n.role = role;\n if (sized.width || sized.height) n.sized = sized;\n var dataState = {};\n for (var ai = 0; ai < el.attributes.length; ai++) {\n var an = el.attributes[ai].name;\n if (/^(data-(state|variant|size|disabled|checked|selected|tone|appearance)|aria-(checked|pressed|disabled|selected|invalid))$/.test(an)) dataState[an] = el.attributes[ai].value;\n }\n if (Object.keys(dataState).length) n.attrs = dataState;\n if (tag === 'svg') {\n n.kind = r.width <= 48 && r.height <= 48 ? 'icon' : 'vector';\n var mk = svgMarkup(el, r);\n if (mk) { n.svg = mk.svg; n.svgStrokes = mk.strokes; }\n return n;\n }\n if (tag === 'img') { n.kind = 'frame'; n.media = true; return n; }\n if (tag === 'input' || tag === 'textarea' || tag === 'select') {\n n.kind = 'frame';\n n.input = { type: el.type || tag, value: el.value || '', placeholder: el.getAttribute('placeholder') || '', checked: !!el.checked };\n }\n var hasEl = false;\n var before = pseudoNode(el, 'before', r), after = pseudoNode(el, 'after', r);\n if (before) { n.children.push(before); hasEl = true; }\n for (var c = el.firstChild; c; c = c.nextSibling) {\n if (count >= MAX_NODES) { n.truncated = true; break; }\n if (c.nodeType === 3) {\n var tx = c.nodeValue.replace(/\\s+/g, ' ').trim();\n if (!tx) continue;\n var range = document.createRange();\n range.selectNodeContents(c);\n var tr = range.getBoundingClientRect();\n n.children.push({ tag: '#text', kind: 'text', text: tx, box: { x: round(tr.left - originX), y: round(tr.top - originY), width: round(tr.width), height: round(tr.height) }, style: {}, tokens: {}, children: [] });\n } else if (c.nodeType === 1) {\n var ccs = getComputedStyle(c);\n if (!visible(c, ccs)) continue;\n if (depth + 1 > MAX_DEPTH) { hasEl = true; n.truncated = true; continue; }\n var cn = node(c, depth + 1);\n // A box with no area and nothing drawn inside (a closed popover's shell) is not a layer.\n if (cn.kind === 'frame' && !cn.children.length && !(cn.box.width * cn.box.height) && !cn.input && !cn.media) continue;\n hasEl = true;\n n.children.push(cn);\n }\n }\n if (after) { n.children.push(after); hasEl = true; }\n // An element holding only text is the text layer itself.\n if (!hasEl && n.children.length === 1 && n.children[0].kind === 'text' && !own(el, cs)) {\n n.kind = 'text';\n n.text = n.children[0].text;\n n.children = [];\n } else if (!n.kind) n.kind = 'frame';\n return n;\n }\n\n var host = document.querySelector(rootSel);\n if (!host) return { error: 'no element matches ' + rootSel + ' in the page' };\n // Popups portaled to the body (a menu, a dialog, a toast region): visible elements outside the story root.\n var portals = [];\n for (var b = document.body.firstElementChild; b; b = b.nextElementSibling) {\n if (b === probe || b.contains(host) || /^(SCRIPT|STYLE|LINK|TEMPLATE)$/.test(b.tagName)) continue;\n if (/sb-(wrapper|errordisplay|nopreview|preparing)|sb-show-main/.test(b.className || '')) continue;\n var bcs = getComputedStyle(b);\n if (!visible(b, bcs)) continue;\n // A portal container can be zero-size around its positioned popup: it counts when anything in it has a box.\n var br = b.getBoundingClientRect();\n if (br.width > 0 && br.height > 0) { portals.push(b); continue; }\n var inner = b.querySelectorAll('*');\n for (var q = 0; q < inner.length && q < 200; q++) { var ir = inner[q].getBoundingClientRect(); if (ir.width > 0 && ir.height > 0) { portals.push(b); break; } }\n }\n var storyRoot = host;\n // target 'portal': the component is the open popup (the newest portal), not the trigger in the story root.\n if (arg.target === 'portal') {\n if (!portals.length) { probe.remove(); return { error: 'no popup is open outside the story root' }; }\n host = portals[portals.length - 1];\n portals = portals.slice(0, -1);\n // A modal portal holds a backdrop beside the popup: the popup is the element with a popup role, when there is one.\n var roled = host.querySelector('[role=\"dialog\"], [role=\"alertdialog\"], [role=\"menu\"], [role=\"listbox\"], [role=\"tooltip\"], [role=\"tree\"], [role=\"grid\"]');\n if (roled && visible(roled, getComputedStyle(roled))) host = roled;\n }\n // Decorators and plain wrappers: go down while an element has one child and draws nothing itself.\n var el = host, wrappers = 0;\n // A decorator canvas the size of the viewport (a theme frame with a background and padding) is a wrapper too.\n // So is a full-width band around one narrower child (a theme provider painting the page background).\n function canvas(e) {\n var r = e.getBoundingClientRect();\n if (r.width >= window.innerWidth * 0.9 && r.height >= window.innerHeight * 0.9) return true;\n if (r.width < window.innerWidth * 0.9) return false;\n var c = e.children[0].getBoundingClientRect();\n if (c.width < r.width * 0.9) return true;\n // A full-width background with no border, radius or shadow: a theme surface, not a component.\n var cs = getComputedStyle(e);\n var noBorder = ['Top', 'Right', 'Bottom', 'Left'].every(function (x) { return !(parseFloat(cs['border' + x + 'Width']) > 0) || cs['border' + x + 'Style'] === 'none'; });\n return noBorder && !(parseFloat(cs.borderTopLeftRadius) > 0) && (!cs.boxShadow || cs.boxShadow === 'none');\n }\n while (arg.unwrap !== false && el.children.length === 1 && !directText(el) && (!own(el, getComputedStyle(el)) || canvas(el)) && el.children[0].tagName.toLowerCase() !== 'svg') {\n var only = el.children[0];\n var ocs = getComputedStyle(only);\n if (!visible(only, ocs)) break;\n el = only;\n wrappers++;\n }\n // within: a part that only renders inside its parent or a popup (a menu item, an accordion item, a toast) is measured\n // alone: the first visible match in the component, then in the popups.\n if (arg.within) {\n var pool = [el].concat(portals), hit = null;\n for (var wi = 0; wi < pool.length && !hit; wi++) {\n var cands = [];\n try { if (pool[wi].matches(arg.within)) cands.push(pool[wi]); cands = cands.concat(Array.prototype.slice.call(pool[wi].querySelectorAll(arg.within))); } catch (e) { probe.remove(); return { error: 'not a CSS selector: ' + arg.within }; }\n for (var ci = 0; ci < cands.length && !hit; ci++) if (visible(cands[ci], getComputedStyle(cands[ci])) && cands[ci].getBoundingClientRect().width > 0) hit = cands[ci];\n }\n if (!hit) { probe.remove(); return { error: 'no element matches ' + arg.within + ' in the story or its popups' }; }\n portals = portals.filter(function (p) { return !p.contains(hit); });\n el = hit;\n }\n // mark: tag the component element (for a forced :hover / :focus-visible from the browser driver) and stop.\n if (arg.mark) {\n var prev = document.querySelectorAll('[data-bridge-measure-root]');\n for (var mi = 0; mi < prev.length; mi++) prev[mi].removeAttribute('data-bridge-measure-root');\n el.setAttribute('data-bridge-measure-root', '');\n probe.remove();\n return { marked: true };\n }\n scopeEl = el;\n var hr = el.getBoundingClientRect();\n // Fill or hug: a block-level root that spans its container's content box (or is declared width: 100%) fills it.\n var rootFill = false;\n (function () {\n var pe = el.parentElement;\n var ecs = getComputedStyle(el);\n var inner = window.innerWidth;\n if (pe) {\n var pcs = getComputedStyle(pe);\n inner = pe.getBoundingClientRect().width - (parseFloat(pcs.paddingLeft) || 0) - (parseFloat(pcs.paddingRight) || 0) - (parseFloat(pcs.borderLeftWidth) || 0) - (parseFloat(pcs.borderRightWidth) || 0);\n }\n var dw = declared(el, 'width');\n var full = (dw && /^100%$/.test(dw.value.trim())) || (el.style && el.style.width === '100%');\n var blockish = /^(block|flex|grid|table|list-item|flow-root)$/.test(ecs.display);\n rootFill = !!full || (inner > 0 && Math.abs(hr.width - inner) <= 1 && (blockish || hr.width >= window.innerWidth * 0.5));\n })();\n originX = hr.left; originY = hr.top;\n var tree = arg.unwrap !== false && el === storyRoot && !storyRoot.children.length && !directText(storyRoot) ? null : node(el, 0);\n var portalTrees = [];\n for (var pi = 0; pi < portals.length && pi < 3; pi++) portalTrees.push(node(portals[pi], 0));\n probe.remove();\n var rt = rootVars || { count: 0 };\n return {\n root: tree,\n portals: portalTrees,\n wrappers: wrappers,\n nodes: count,\n rules: rules.length,\n sheets: { read: sheetsRead, blocked: sheetsBlocked },\n rootFill: rootFill,\n rootVariables: rt.count,\n scopedVariables: rt.scoped || 0,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n error: document.body.classList.contains('sb-show-errordisplay') ? (document.querySelector('#error-message') || {}).textContent || 'the story threw' : undefined\n };\n})`;\n","// The in-page half of the token harvest: plain JavaScript, kept as a string like MEASURE_SCRIPT. It lists every CSS\n// custom property the page's stylesheets declare (CSSOM: :root, provider and theme selectors, media, layers, nesting,\n// adopted sheets), takes for each the declaration that applies at the story (the nearest element that declares it,\n// then specificity and order), and resolves its value there: colors as rgb(), lengths in px. Channels (\"212 100% 47%\")\n// that every use wraps in one color function (hsl(var(--primary))) are that color.\n\nexport const TOKENS_SCRIPT = String.raw`(function (arg) {\n arg = arg || {};\n var rootSel = arg.root || '#storybook-root, #root';\n var host = document.querySelector(rootSel) || document.body;\n var at = host.firstElementChild || host;\n var decls = {};\n var order = 0;\n // Every var() use: the color function around it (rgb, hsl...), or a bare use; and the properties that alias it.\n var COLOR_FN = /^(rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)$/i;\n var useFn = {}, useBare = {}, aliasUses = {};\n function enclosing(s, pos) {\n for (var i = pos - 1, depth = 0; i >= 0; i--) {\n if (s[i] === ')') depth++;\n else if (s[i] === '(') {\n if (depth) { depth--; continue; }\n var j = i;\n while (j > 0 && /[\\w-]/.test(s[j - 1])) j--;\n var fn = s.slice(j, i).toLowerCase();\n // A fallback (var(--a, var(--b))): the function around the outer var.\n if (fn !== 'var') return fn;\n }\n }\n return '';\n }\n function scanDecl(d) {\n var c = d.indexOf(':');\n if (c < 0) return;\n var prop = d.slice(0, c).trim(), val = d.slice(c + 1).replace(/!important\\s*$/, '').trim();\n var alias = /^var\\(\\s*(--[\\w-]+)\\s*\\)$/.exec(val);\n if (alias && prop.indexOf('--') === 0) { (aliasUses[alias[1]] = aliasUses[alias[1]] || []).push(prop); return; }\n var re = /var\\(\\s*(--[\\w-]+)/g, m;\n while ((m = re.exec(val))) {\n var fn = enclosing(val, m.index);\n if (COLOR_FN.test(fn)) (useFn[m[1]] = useFn[m[1]] || {})[fn === 'rgba' || fn === 'hsla' ? fn.slice(0, 3) : fn] = 1;\n else useBare[m[1]] = 1;\n }\n }\n function scanUses(text) {\n for (var i = 0, depth = 0, start = 0; i <= text.length; i++) {\n var ch = text[i];\n if (ch === '(') depth++;\n else if (ch === ')') depth--;\n else if (i === text.length || (ch === ';' && depth <= 0)) { scanDecl(text.slice(start, i)); start = i + 1; depth = 0; }\n }\n }\n // The one color function every use of a property wraps it in, through the properties that alias it: '' unused, null\n // when a use is bare or two functions disagree.\n function channelFn(name, seen) {\n if (seen[name]) return '';\n seen[name] = 1;\n if (useBare[name]) return null;\n var fns = {};\n for (var f in useFn[name] || {}) fns[f] = 1;\n var al = aliasUses[name] || [];\n for (var i = 0; i < al.length; i++) {\n var g = channelFn(al[i], seen);\n if (g === null) return null;\n if (g) fns[g] = 1;\n }\n var k = Object.keys(fns);\n return k.length === 1 ? k[0] : k.length ? null : '';\n }\n function add(sel, style) {\n try { scanUses(style.cssText || ''); } catch (e) {}\n for (var k = 0; k < style.length; k++) {\n var n = style[k];\n if (n.indexOf('--') !== 0 || n.indexOf('--_') === 0 || n.indexOf('--sb-') === 0) continue;\n (decls[n] = decls[n] || []).push({ sel: sel, raw: style.getPropertyValue(n).trim(), order: order++ });\n }\n }\n function walk(list) {\n for (var i = 0; i < list.length; i++) {\n var r = list[i];\n try {\n if (r.selectorText !== undefined && r.style) {\n add(r.selectorText, r.style);\n if (r.cssRules && r.cssRules.length) walk(r.cssRules);\n } else if (r.media !== undefined && r.cssRules) {\n if (window.matchMedia(r.media.mediaText || 'all').matches) walk(r.cssRules);\n } else if (r.cssRules) walk(r.cssRules);\n } catch (e) {}\n }\n }\n var blocked = 0;\n for (var s = 0; s < document.styleSheets.length; s++) {\n try { walk(document.styleSheets[s].cssRules); } catch (e) { blocked++; }\n }\n try { for (var a = 0; a < (document.adoptedStyleSheets || []).length; a++) walk(document.adoptedStyleSheets[a].cssRules); } catch (e) {}\n // Inline styles on the story's ancestors (a provider that sets variables in style=\"\").\n for (var up = at; up && up.nodeType === 1; up = up.parentElement) if (up.style && up.style.length) add('[style]', up.style);\n // Inline styles in the story use variables too.\n var inline = host.querySelectorAll('[style]');\n for (var q = 0; q < inline.length; q++) try { scanUses(inline[q].style.cssText || ''); } catch (e) {}\n\n function specificity(sel) {\n var x = sel.replace(/:where\\([^)]*\\)/g, '');\n var ids = (x.match(/#[\\w-]+/g) || []).length;\n var cls = (x.match(/\\.[\\w-]+|\\[[^\\]]*\\]|:(?!not\\b|is\\b|has\\b|root\\b)[\\w-]+(\\([^)]*\\))?/g) || []).length + (x.match(/:root/g) || []).length;\n var types = (x.replace(/\\[[^\\]]*\\]|\\([^)]*\\)/g, '').match(/(^|[\\s>+~(])[a-zA-Z][\\w-]*/g) || []).length;\n return ids * 10000 + cls * 100 + types;\n }\n function matchSpec(el, selText) {\n var best = -1, parts = selText.split(/,(?![^(]*\\))/);\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i].trim();\n if (!p || /::/.test(p)) continue;\n try { if (el.matches(p)) best = Math.max(best, specificity(p)); } catch (e) {}\n }\n return best;\n }\n // The declaration that applies at the story: the nearest element up from it with a matching rule, then specificity\n // and order; inline style wins at its element.\n function winning(name) {\n var list = decls[name];\n for (var el = at; el && el.nodeType === 1; el = el.parentElement) {\n var best = null, bestRank = null;\n if (el.style && el.style.getPropertyValue(name)) return { sel: '[style]', raw: el.style.getPropertyValue(name).trim() };\n for (var i = 0; i < list.length; i++) {\n if (list[i].sel === '[style]') continue;\n var sp = matchSpec(el, list[i].sel);\n if (sp < 0) continue;\n if (!best || sp > bestRank[0] || (sp === bestRank[0] && list[i].order > bestRank[1])) { best = list[i]; bestRank = [sp, list[i].order]; }\n }\n if (best) return best;\n }\n return null;\n }\n\n var probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:0;height:0';\n (at.parentElement || document.body).appendChild(probe);\n function norm(v) {\n if (!v) return { type: 'string', value: '' };\n probe.style.color = '';\n probe.style.color = v;\n if (probe.style.color) return { type: 'color', value: getComputedStyle(probe).color };\n if (/^-?[\\d.]+$/.test(v)) return { type: 'number', value: Number(v) };\n probe.style.width = '';\n probe.style.width = v;\n if (probe.style.width && !/auto|%/.test(v)) {\n var w = getComputedStyle(probe).width;\n if (/px$/.test(w)) return { type: 'length', value: Math.round(parseFloat(w) * 100) / 100 };\n }\n return { type: 'string', value: v };\n }\n var cs = getComputedStyle(at), rootCs = getComputedStyle(document.documentElement);\n var out = [];\n var ROOTISH = /^(:root|html|:host|body|\\*)(\\s*,\\s*(:root|html|:host|body|\\*))*$/;\n for (var name in decls) {\n var w = winning(name);\n var resolved = cs.getPropertyValue(name).trim() || rootCs.getPropertyValue(name).trim();\n var r = norm(resolved);\n var fn = r.type === 'string' && resolved ? channelFn(name, {}) : '';\n if (fn) {\n probe.style.color = '';\n probe.style.color = fn + '(' + resolved + ')';\n if (probe.style.color) r = { type: 'color', value: getComputedStyle(probe).color };\n }\n var scopes = [];\n for (var j = 0; j < decls[name].length && scopes.length < 6; j++) {\n var sel = decls[name][j].sel;\n if (!ROOTISH.test(sel.trim()) && scopes.indexOf(sel) < 0) scopes.push(sel.length > 120 ? sel.slice(0, 120) : sel);\n }\n out.push({ name: name, raw: w ? w.raw : decls[name][0].raw, applies: !!w, type: r.type, value: r.value, scopes: scopes });\n }\n probe.remove();\n return { properties: out, blocked: blocked };\n})`;\n\n/** The Storybook globals that switch a theme, a brand or a density, with their toolbar values and defaults. */\nexport const GLOBALS_SCRIPT = String.raw`(function () {\n var p = window.__STORYBOOK_PREVIEW__;\n if (!p) return null;\n var store = p.storyStoreValue || {};\n var ann = store.projectAnnotations || p.projectAnnotations || {};\n var types = ann.globalTypes || (store.globals && store.globals.globalTypes) || {};\n var current = (store.userGlobals && store.userGlobals.get && store.userGlobals.get()) || (store.globals && store.globals.get && store.globals.get()) || ann.initialGlobals || ann.globals || {};\n var out = [];\n for (var k in types) {\n var t = types[k] || {};\n var items = (t.toolbar && t.toolbar.items) || t.options || [];\n var values = [];\n for (var i = 0; i < items.length; i++) {\n var it = items[i];\n var v = typeof it === 'string' ? it : it && (it.value !== undefined ? it.value : it.title);\n if (typeof v === 'string' && v && values.indexOf(v) < 0) values.push(v);\n }\n if (values.length < 2 || values.length > 12) continue;\n var def = current[k] !== undefined ? String(current[k]) : (t.defaultValue !== undefined ? String(t.defaultValue) : values[0]);\n out.push({ global: k, values: values, default: def });\n }\n return out;\n})()`;\n","// Storybook measure: what a story really draws, read from the browser instead of guessed from the CSS source.\n//\n// The static generator (component-specs.ts) reads our TSX and CSS modules and predicts the layer tree; it only works on\n// libraries written the way ours is. A measure opens a story's iframe in a headless browser and records the rendered\n// tree: element boxes, auto layout (flex direction, gap, padding, alignment), paint, radii, borders, typography, text,\n// and which CSS custom properties (tokens) each value resolves through. Any React library with a Storybook can be\n// measured, whatever its styling (CSS modules, Sass, Tailwind, CSS-in-JS).\n//\n// The browser is injected (MeasurePage): core has no browser dependency. The CLI drives an installed Chrome through\n// playwright-core (bridge specs --measure). measuredToSpec turns a measure into the shape the Figma pull reads from\n// component-specs.json (parts + per-part field values with token paths), plus the raw values and token evidence a\n// spec does not carry.\n\nimport type { SpecField, SpecLayout, SpecValue } from '../component-spec';\nimport { parseBoxShadow, withSrgbColors } from '../css-color';\nimport { sharedTokenPrefix, tokenVariablePath, type MeasuredBox, type MeasuredMode, type MeasuredNode, type MeasuredPart, type MeasuredProps, type MeasuredSpec, type MeasuredState, type MeasuredToken, type MeasuredTokenProperty, type MeasuredTokens } from '../measured-spec';\nimport { storybookIframeUrl, type StorybookIframeOptions, type StorybookIndex } from '../storybook';\nimport { MEASURE_SCRIPT } from './measure-script';\nimport { GLOBALS_SCRIPT, TOKENS_SCRIPT } from './tokens-script';\n\nexport { MEASURE_SCRIPT, TOKENS_SCRIPT, GLOBALS_SCRIPT };\n// The measured shapes and the comparison are browser safe (the Figma plugin reads them): re-exported for Node callers.\nexport * from '../measured-spec';\n\n/** The script's answer for one page. */\nexport interface MeasureResult {\n root: MeasuredNode | null;\n /** Visible elements outside the story root (popups portaled to the body), up to 3. */\n portals: MeasuredNode[];\n /** Plain wrapper elements skipped above the root (decorators). */\n wrappers: number;\n nodes: number;\n /** Style rules read, and stylesheets that could not be read (cross-origin). */\n rules: number;\n sheets: { read: number; blocked: number };\n /** Custom properties in scope at the component (root and provider elements), the pool `matched` tokens come from. */\n rootVariables: number;\n /** Of those, the ones a provider element around the story defines, not the page root (Fluent's FluentProvider). */\n scopedVariables?: number | undefined;\n viewport: { width: number; height: number };\n /** The root is block-level and spans its container (or is width: 100%): it fills in Figma, it does not hug. */\n rootFill?: boolean | undefined;\n /** A filling root was laid out at this width (px) for the measure and its screenshot, not the canvas width. */\n fillWidth?: number | undefined;\n /** With `open`: how the popup came to show (`already`: the story renders it open), or `none`. */\n opened?: 'already' | 'click' | 'hover' | 'focus' | 'none' | undefined;\n error?: string | undefined;\n}\n\nexport interface MeasuredStory extends MeasureResult {\n /** With `shot`: the PNG written and the root's size in CSS pixels. */\n shot?: { file: string; width: number; height: number } | undefined;\n /** The props the story rendered with, read from Storybook's story context (args over component defaults). */\n props?: MeasuredProps | undefined;\n /** The pseudo state forced on the component, when asked and the browser could force it. */\n state?: MeasuredState | undefined;\n id: string;\n url: string;\n /** Milliseconds from navigation to measured. */\n ms: number;\n}\n\n/** The browser a measure runs in: a page that can open a URL and evaluate an expression (playwright's Page fits). */\nexport interface MeasurePage {\n goto(url: string, options?: { waitUntil?: 'load' | 'domcontentloaded' | 'networkidle'; timeout?: number }): Promise<unknown>;\n evaluate<T>(expression: string): Promise<T>;\n /**\n * Forces pseudo classes on every element matching `selector` (Chrome DevTools CSS.forcePseudoState), or clears\n * them with []. Optional: without it, `state` is not measured.\n */\n forcePseudo?(selector: string, states: string[]): Promise<boolean>;\n /** PNG of the first element matching `selector`, written to `file`; its size in CSS pixels. Optional (shots). */\n screenshot?(selector: string, file: string): Promise<{ width: number; height: number } | null>;\n}\n\n/**\n * Tags the element a measure with these options reads (`data-bridge-measure-root`): the component after wrappers, the\n * popup, or the `within` part. For a screenshot of exactly what was measured.\n */\nexport async function markMeasuredRoot(page: MeasurePage, o: Pick<MeasureOptions, 'root' | 'unwrap' | 'within' | 'target' | 'open'> = {}): Promise<boolean> {\n const arg = { root: o.root ?? '#storybook-root, #root', unwrap: o.unwrap, within: o.within, target: o.target ?? (o.open && !o.within ? 'portal' : undefined), mark: true };\n const r = await page.evaluate<{ marked?: boolean } | null>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`).catch(() => null);\n return !!r?.marked;\n}\n\nexport interface MeasureOptions {\n iframe?: StorybookIframeOptions | undefined;\n /** Root selector inside the iframe (`#storybook-root, #root`: Storybook 7+ then 6). */\n root?: string | undefined;\n maxNodes?: number | undefined;\n maxDepth?: number | undefined;\n /** Longest wait for the story to render, ms (default 15000). */\n timeout?: number | undefined;\n /**\n * Measure the open popup (a menu, a dialog, a select's list, a tooltip) instead of its trigger: when none shows yet,\n * the first closed trigger in the story is clicked, then hovered and focused, and the popup portaled to the body is\n * the measured root. Stories that render open (`defaultOpen` / `open` args) are measured as they are.\n */\n open?: boolean | undefined;\n /**\n * A part measured alone inside what rendered (the component, then its popups): `[role=menuitem]`, `[role=tab]`, a\n * class. For parts that only render inside a parent or a portal (a menu item, an accordion item, a toast).\n */\n within?: string | undefined;\n /** Story args to render with (`{ size: 'lg', disabled: true }`), passed in the iframe URL. */\n args?: Record<string, string | number | boolean> | undefined;\n /** A pseudo state forced on the component before it is measured (needs `MeasurePage.forcePseudo`). */\n state?: MeasuredState | undefined;\n /** Read the story's props from Storybook (default true in measureStory). */\n props?: boolean | undefined;\n /** Width a filling root is laid out at when it spans the canvas (default 400 px; 0 keeps the canvas width). */\n fillWidth?: number | undefined;\n /** Write a PNG of the measured root to this file (needs `MeasurePage.screenshot`), forced state included. */\n shot?: string | undefined;\n /** `portal`: the newest popup outside the story root is the component (set by `open`). */\n target?: 'root' | 'portal' | undefined;\n /**\n * Go down from the root through plain wrappers and viewport-size decorator canvases to the component (default true).\n * false: the root element is the component.\n */\n unwrap?: boolean | undefined;\n}\n\n/**\n * Waits until the story has rendered: Storybook's root has content (or its error screen shows), fonts are loaded and\n * the markup stops changing for a few frames. Resolves with `rendered`, `error` or `timeout`.\n */\nexport const WAIT_SCRIPT = (rootSel: string, timeout: number, self = false) => `(async () => {\n const t0 = performance.now();\n const frame = () => new Promise((r) => requestAnimationFrame(() => r(null)));\n const host = () => document.querySelector(${JSON.stringify(rootSel)});\n let state = 'timeout';\n while (performance.now() - t0 < ${timeout}) {\n if (document.body && document.body.classList.contains('sb-show-errordisplay')) { state = 'error'; break; }\n const h = host();\n if (h && (${self} || h.children.length || (h.textContent || '').trim())) { state = 'rendered'; break; }\n await new Promise((r) => setTimeout(r, 50));\n }\n try { await Promise.race([document.fonts.ready, new Promise((r) => setTimeout(r, 3000))]); } catch (e) {}\n // Settle briefly: the markup stops changing for a few frames, or 1.5 s passes (a spinner never stops).\n let last = '', same = 0;\n const settle0 = performance.now();\n while (state === 'rendered' && same < 3 && performance.now() - settle0 < 1500) {\n await frame();\n await new Promise((r) => setTimeout(r, 60));\n const s = document.body.innerHTML.length + ':' + document.querySelectorAll('*').length;\n same = s === last ? same + 1 : 0;\n last = s;\n }\n // Animations: finished ones jump to their end, endless ones (a loading spinner) are paused where they are.\n try { (document.getAnimations ? document.getAnimations() : []).forEach((a) => { try { a.finish(); } catch (e) { a.pause(); } }); } catch (e) {}\n return state;\n})()`;\n\n/**\n * Opens the story's popup when none shows: clicks the first closed trigger (pointer and mouse events in order), then\n * hovers and focuses it (tooltips), and waits for the portal to settle. Resolves with how it opened, or `none`.\n */\nexport const OPEN_SCRIPT = (rootSel: string) => `(async () => {\n const root = document.querySelector(${JSON.stringify(rootSel)});\n if (!root) return 'none';\n const shown = () => Array.prototype.filter.call(document.body.children, (b) => {\n if (b.contains(root) || /^(SCRIPT|STYLE|LINK|TEMPLATE)$/.test(b.tagName) || /sb-/.test(String(b.className || ''))) return false;\n const cs = getComputedStyle(b), r = b.getBoundingClientRect();\n if (cs.display === 'none' || cs.visibility === 'hidden') return false;\n return r.width > 0 && r.height > 0 || Array.prototype.some.call(b.querySelectorAll('*'), (c) => { const x = c.getBoundingClientRect(); return x.width > 0 && x.height > 0; });\n }).length;\n const settle = async () => {\n for (let i = 0; i < 20; i++) {\n await new Promise((r) => setTimeout(r, 50));\n const running = (document.getAnimations ? document.getAnimations() : []).filter((a) => a.playState === 'running');\n if (!running.length) break;\n await Promise.race([Promise.all(running.map((a) => a.finished.catch(() => null))), new Promise((r) => setTimeout(r, 1500))]);\n }\n };\n if (shown()) { await settle(); return 'already'; }\n const trigger = root.querySelector('[aria-haspopup]:not([aria-expanded=\"true\"]), [aria-expanded=\"false\"]') || root.querySelector('button, [role=\"button\"], [role=\"combobox\"], a[href], [tabindex=\"0\"]');\n if (!trigger) return 'none';\n const wait = async (ms) => { const t0 = performance.now(); while (performance.now() - t0 < ms) { if (shown()) { await settle(); return true; } await new Promise((r) => setTimeout(r, 50)); } return false; };\n const r = trigger.getBoundingClientRect();\n const at = { bubbles: true, cancelable: true, composed: true, clientX: r.left + r.width / 2, clientY: r.top + r.height / 2, button: 0, pointerId: 1, pointerType: 'mouse', isPrimary: true };\n const fire = (type, Ctor) => trigger.dispatchEvent(new Ctor(type, type === 'pointerdown' || type === 'mousedown' ? { ...at, buttons: 1 } : at));\n fire('pointerdown', PointerEvent); fire('mousedown', MouseEvent); fire('pointerup', PointerEvent); fire('mouseup', MouseEvent); fire('click', MouseEvent);\n if (await wait(800)) return 'click';\n fire('pointerover', PointerEvent); fire('pointerenter', PointerEvent); fire('mouseover', MouseEvent); fire('mouseenter', MouseEvent); fire('pointermove', PointerEvent); fire('mousemove', MouseEvent);\n if (await wait(1200)) return 'hover';\n try { trigger.focus(); } catch (e) {}\n if (await wait(800)) return 'focus';\n return 'none';\n})()`;\n\n/**\n * Reads the rendered story's props from Storybook's preview (7, 8, 9): its args (with URL overrides) over the component\n * defaults docgen found, and the argTypes (enum options, booleans, texts). Plain values only; null when the preview\n * exposes nothing.\n */\nexport const PROPS_SCRIPT = (id?: string) => `(async () => {\n const p = window.__STORYBOOK_PREVIEW__;\n if (!p) return null;\n const want = ${JSON.stringify(id ?? null)};\n let story = p.currentRender && p.currentRender.story;\n if (want && (!story || story.id !== want)) { try { story = await p.storyStoreValue.loadStory({ storyId: want }); } catch (e) { story = story || null; } }\n if (!story) return null;\n const plain = (v) => ['string', 'number', 'boolean'].includes(typeof v);\n const clean = (o) => { const out = {}; for (const k in o || {}) if (plain(o[k])) out[k] = o[k]; return out; };\n let live;\n try { live = p.storyStoreValue && p.storyStoreValue.args && p.storyStoreValue.args.get(story.id); } catch (e) {}\n const args = clean(live || story.initialArgs);\n const lit = (v) => {\n if (v === undefined || v === null) return undefined;\n if (typeof v !== 'string') return plain(v) ? v : undefined;\n const t = v.trim();\n if (t === 'true' || t === 'false') return t === 'true';\n if (/^-?\\\\d+(\\\\.\\\\d+)?$/.test(t)) return Number(t);\n const q = /^(['\"\\`])(.*)\\\\1$/.exec(t);\n return q ? q[2] : undefined;\n };\n const argTypes = {}, defaults = {};\n for (const name in story.argTypes || {}) {\n const a = story.argTypes[name] || {};\n if (a.table && a.table.disable) continue;\n const t = a.type || {};\n const tn = typeof t === 'string' ? t : t.name;\n let options = Array.isArray(a.options) ? a.options : tn === 'enum' && Array.isArray(t.value) ? t.value : undefined;\n if (!options && tn === 'union' && Array.isArray(t.value) && t.value.every((x) => x && x.name === 'literal')) options = t.value.map((x) => x.value);\n if (options) options = options.filter(plain).map((x) => String(x).replace(/^(['\"])(.*)\\\\1$/, '$2'));\n const control = a.control && typeof a.control === 'object' ? a.control.type : typeof a.control === 'string' ? a.control : undefined;\n const kind = options && options.length ? 'enum' : tn === 'boolean' || control === 'boolean' ? 'boolean' : tn === 'string' || control === 'text' ? 'text' : tn === 'number' || control === 'number' || control === 'range' ? 'number' : 'other';\n const d = lit(a.defaultValue !== undefined ? a.defaultValue : a.table && a.table.defaultValue && a.table.defaultValue.summary);\n argTypes[name] = { kind };\n if (options && options.length) argTypes[name].options = options;\n if (d !== undefined) { argTypes[name].default = d; defaults[name] = d; }\n if (control) argTypes[name].control = control;\n }\n const c = story.component;\n const component = c && (c.displayName || c.name) || undefined;\n return { props: Object.assign({}, defaults, args), args, argTypes, component };\n})()`;\n\n/**\n * Token values as the open story resolves them (on the component, so provider-scoped variables count): token path ->\n * computed value, colors as `rgb()` and lengths in px, for value-level comparison (compareSpecToMeasured's `resolve`).\n */\nexport async function resolveTokenValues(page: MeasurePage, vars: Record<string, string>): Promise<Record<string, string>> {\n const expr = `(() => {\n const vars = ${JSON.stringify(vars)};\n const el = document.querySelector('[data-bridge-measure-root]') || document.querySelector('#storybook-root > *, #root > *') || document.documentElement;\n const cs = getComputedStyle(el);\n const probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none';\n (el.parentElement || document.body).appendChild(probe);\n const out = {};\n for (const path in vars) {\n const raw = cs.getPropertyValue(vars[path]).trim();\n if (!raw) continue;\n probe.style.color = ''; probe.style.width = '';\n probe.style.color = raw;\n if (probe.style.color) { out[path] = getComputedStyle(probe).color; continue; }\n probe.style.width = raw;\n out[path] = probe.style.width ? getComputedStyle(probe).width : raw;\n }\n probe.remove();\n return out;\n })()`;\n return (await page.evaluate<Record<string, string>>(expr)) ?? {};\n}\n\n/**\n * Where a forced state goes: the component and every element in it, as Figma's state variant shows it (a group's\n * Hover shows each option's hover, a field's Hover its control's hover), not only the outer element.\n */\nconst STATE_TARGETS = '[data-bridge-measure-root], [data-bridge-measure-root] *';\n\n/** The pseudo classes a real interaction sets: a press is also a hover, focus-visible is also focus. */\nconst PSEUDO_CLASSES: Record<MeasuredState, string[]> = { hover: ['hover'], 'focus-visible': ['focus-visible', 'focus'], active: ['active', 'hover'] };\n\n// ---------------------------------------------------------------------------------------------\n// Token harvest\n\n/** Storybook globals that are modes in Figma: a theme or color scheme, a brand, a density. */\nconst MODE_GLOBAL = /theme|scheme|mode|brand|density|appearance/i;\nconst ALIAS = /^var\\(\\s*(--[\\w-]+)\\s*(?:,[^)]*)?\\)$/;\n\ninterface RawTokenProperty {\n name: string;\n raw: string;\n applies: boolean;\n type: MeasuredTokenProperty['type'];\n value: string | number;\n scopes: string[];\n}\n\nexport interface HarvestOptions {\n iframe?: StorybookIframeOptions | undefined;\n /** Read every mode the Storybook's globals expose (default true). */\n modes?: boolean | undefined;\n timeout?: number | undefined;\n}\n\n/**\n * Every CSS custom property a Storybook's stylesheets define, read in one story: its declared value where the story\n * sits (providers included), resolved there, in two tiers (a literal is a primitive, `var(--x)` is semantic), and again\n * under each theme, brand or density global the Storybook exposes (one Figma mode per value).\n */\nexport async function harvestTokens(page: MeasurePage, storybook: string, story: string, o: HarvestOptions = {}): Promise<MeasuredTokens> {\n const timeout = o.timeout ?? 15000;\n const read = async (globals: Record<string, string>) => {\n const iframe = { ...(o.iframe ?? {}), globals: { ...(o.iframe?.globals ?? {}), ...globals } };\n await page.goto(storybookIframeUrl(storybook, story, iframe), { waitUntil: 'domcontentloaded', timeout: timeout + 15000 });\n await page.evaluate<string>(WAIT_SCRIPT('#storybook-root, #root', timeout));\n const r = await page.evaluate<{ properties: RawTokenProperty[] } | null>(`(${TOKENS_SCRIPT})({})`);\n return withSrgbColors(r?.properties ?? []);\n };\n const base = await read({});\n // A theme on a page attribute: set it where it lives (the root when nowhere), let styles apply, read again.\n let moved = false;\n const readWithAttribute = async (attr: string, value: string) => {\n // Back to the default globals first if a global mode moved the page.\n if (moved) {\n await read({});\n moved = false;\n }\n await page.evaluate(`(async () => { const els = document.querySelectorAll('[${attr}]'); (els.length ? Array.from(els) : [document.documentElement]).forEach((e) => e.setAttribute('${attr}', ${JSON.stringify(value)})); await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r))); })()`);\n const r = await page.evaluate<{ properties: RawTokenProperty[] } | null>(`(${TOKENS_SCRIPT})({})`);\n return withSrgbColors(r?.properties ?? []);\n };\n const found = o.modes === false ? [] : ((await page.evaluate<MeasuredMode[] | null>(GLOBALS_SCRIPT).catch(() => null)) ?? []);\n // Views that are not a theme (Primer's \"all\" shows every scheme side by side).\n const modes: MeasuredMode[] = found\n .filter((m) => MODE_GLOBAL.test(m.global))\n .map((m) => ({ ...m, values: [m.default, ...m.values.filter((v) => v !== m.default)].filter((v) => !/^(all|side-?by-?side|stacked|both|none)$/i.test(v)) }))\n .filter((m) => m.values.length >= 2);\n // No theme global: a theme the stylesheets hang on a page attribute ([data-carbon-theme=\"g100\"]), read by setting it.\n if (o.modes !== false && !modes.some((m) => /theme|scheme|mode/i.test(m.global))) {\n const attrs = new Map<string, Map<string, number>>();\n for (const p of base)\n for (const sel of p.scopes)\n for (const part of sel.split(','))\n for (const m of part.trim().matchAll(/^(?::root|html|body)?\\[([\\w-]+)=[\"']?([\\w-]+)[\"']?\\]$/g)) {\n const vals = attrs.get(m[1]!) ?? new Map<string, number>();\n vals.set(m[2]!, (vals.get(m[2]!) ?? 0) + 1);\n attrs.set(m[1]!, vals);\n }\n for (const [attr, vals] of attrs) {\n const values = [...vals.entries()].filter(([, n]) => n >= 10).map(([v]) => v);\n if (values.length < 2 || values.length > 12 || !MODE_GLOBAL.test(attr)) continue;\n const current = await page.evaluate<string | null>(`(() => { const e = document.querySelector('[${attr}]'); return e && e.getAttribute('${attr}'); })()`).catch(() => null);\n // The value the page shows now is the default mode (Carbon's white lives in :root, not under its attribute).\n const def = current ?? values[0]!;\n modes.push({ global: attr, attribute: true, values: [def, ...values.filter((v) => v !== def)], default: def });\n }\n }\n const prefix = sharedTokenPrefix(base.map((p) => p.name));\n const props: MeasuredTokenProperty[] = base.map((p) => {\n const alias = ALIAS.exec(p.raw)?.[1];\n const kind: MeasuredTokenProperty['kind'] = alias ? 'alias' : /var\\(/.test(p.raw) ? 'expression' : 'literal';\n return {\n name: p.name,\n path: tokenVariablePath(p.name, prefix),\n tier: alias ? 'semantic' : 'primitive',\n kind,\n type: p.type,\n raw: p.raw,\n ...(alias ? { aliasOf: alias } : {}),\n value: p.value,\n ...(p.scopes.length ? { scopes: p.scopes } : {}),\n };\n });\n const byName = new Map(props.map((p) => [p.name, p]));\n for (const m of modes) {\n for (const value of m.values) {\n const key = `${m.global}:${value}`;\n const rows = value === m.default ? base : m.attribute ? await readWithAttribute(m.global, value) : ((moved = true), await read({ [m.global]: value }));\n for (const r of rows) {\n const p = byName.get(r.name);\n if (!p) continue;\n (p.values ??= {})[key] = r.value;\n const alias = ALIAS.exec(r.raw)?.[1];\n if (p.tier === 'semantic' && alias && alias !== p.aliasOf) (p.aliasOfByMode ??= {})[key] = alias;\n }\n }\n }\n // Per property, keep a mode's values only where they change it (`value` holds for the others): Primer has thousands.\n for (const p of props) {\n for (const m of modes) {\n const keys = m.values.map((v) => `${m.global}:${v}`);\n if (new Set(keys.map((k) => JSON.stringify(p.values?.[k]))).size <= 1) for (const k of keys) delete p.values?.[k];\n }\n if (p.values && !Object.keys(p.values).length) delete p.values;\n }\n // A mode that changes nothing is not a mode of these variables.\n const live = modes.filter((m) => props.some((p) => p.values && `${m.global}:${m.default}` in p.values));\n if (live.length !== modes.length) {\n const dead = new Set(modes.filter((m) => !live.includes(m)).map((m) => m.global));\n for (const p of props) {\n for (const k of Object.keys(p.values ?? {})) if (dead.has(k.split(':')[0]!)) delete p.values![k];\n for (const k of Object.keys(p.aliasOfByMode ?? {})) if (dead.has(k.split(':')[0]!)) delete p.aliasOfByMode![k];\n if (p.values && !Object.keys(p.values).length) delete p.values;\n if (p.aliasOfByMode && !Object.keys(p.aliasOfByMode).length) delete p.aliasOfByMode;\n }\n }\n // Compiled themes write each semantic token as a literal per theme. When a primitive (the same in every mode) holds\n // the value in every mode, the property is a semantic alias of it: Primitives + Semantic, as Figma needs.\n const keyOf = (p: MeasuredTokenProperty, v: string | number) => `${p.type}:${v}`;\n const primitiveFor = new Map<string, string>();\n for (const p of [...props].sort((a, b) => a.name.length - b.name.length || a.name.localeCompare(b.name)))\n if (p.kind === 'literal' && !p.values && (p.type === 'color' || p.type === 'length') && !primitiveFor.has(keyOf(p, p.value))) primitiveFor.set(keyOf(p, p.value), p.name);\n let inferred = 0;\n for (const p of props) {\n if (p.kind !== 'literal' || !p.values) continue;\n const def = primitiveFor.get(keyOf(p, p.value));\n const byMode = Object.entries(p.values).map(([k, v]) => [k, primitiveFor.get(keyOf(p, v))] as const);\n if (!def || def === p.name || byMode.some(([, n]) => !n)) continue;\n p.tier = 'semantic';\n p.kind = 'alias';\n p.aliasOf = def;\n p.inferred = true;\n const changes = byMode.filter(([, n]) => n !== def);\n if (changes.length) p.aliasOfByMode = Object.fromEntries(byMode) as Record<string, string>;\n inferred++;\n }\n return {\n story,\n ...(prefix ? { prefix } : {}),\n modes: live,\n properties: props,\n counts: {\n properties: props.length,\n primitives: props.filter((p) => p.tier === 'primitive').length,\n semantic: props.filter((p) => p.tier === 'semantic').length,\n used: 0,\n scoped: props.filter((p) => p.scopes?.length).length,\n inferred,\n },\n };\n}\n\n/**\n * Makes sure the story renders with these args. Storybook drops URL args it cannot validate against a story's initial\n * args (Carbon's Button story declares none), so when the store does not hold them after the first render they are\n * sent the way the Controls panel sends them (`updateStoryArgs`), and the re-render is awaited. Resolves `url` (the URL\n * args held), `channel`, or `failed`.\n */\nexport const APPLY_ARGS_SCRIPT = (id: string, args: Record<string, string | number | boolean>, timeout: number) => `(async () => {\n const want = ${JSON.stringify(args)};\n const t0 = performance.now();\n let p = window.__STORYBOOK_PREVIEW__;\n while ((!p || !p.currentRender || !p.storyStoreValue) && performance.now() - t0 < ${timeout}) { await new Promise((r) => setTimeout(r, 50)); p = window.__STORYBOOK_PREVIEW__; }\n if (!p || !p.storyStoreValue) return 'failed';\n const id = ${JSON.stringify(id)};\n const held = () => { let a = {}; try { a = p.storyStoreValue.args.get(id) || {}; } catch (e) {} return Object.keys(want).every((k) => a[k] === want[k]); };\n // Let the first render finish (an update sent during it is lost), then check again.\n const root = () => document.querySelector('#storybook-root, #root');\n while (performance.now() - t0 < ${timeout} && !(root() && (root().children.length || (root().textContent || '').trim()))) await new Promise((r) => setTimeout(r, 50));\n await new Promise((r) => setTimeout(r, 100));\n if (held()) return 'url';\n const ch = window.__STORYBOOK_ADDONS_CHANNEL__;\n if (!ch) return 'failed';\n const done = await new Promise((resolve) => {\n const t = setTimeout(() => finish(false), 5000);\n const ok = () => finish(true);\n const bad = () => finish(false);\n function finish(v) { clearTimeout(t); ch.off('storyRendered', ok); ch.off('storyErrored', bad); ch.off('storyThrewException', bad); resolve(v); }\n ch.on('storyRendered', ok); ch.on('storyErrored', bad); ch.on('storyThrewException', bad);\n ch.emit('updateStoryArgs', { storyId: id, updatedArgs: want });\n });\n return done && held() ? 'channel' : 'failed';\n})()`;\n\n/** Opens one story in its iframe and measures what it rendered. */\nexport async function measureStory(page: MeasurePage, storybook: string, id: string, o: MeasureOptions = {}): Promise<MeasuredStory> {\n const iframe = { ...(o.iframe ?? {}) };\n if (o.args && Object.keys(o.args).length) iframe.args = { ...(iframe.args ?? {}), ...Object.fromEntries(Object.entries(o.args).map(([k, v]) => [k, typeof v === 'boolean' ? `!${v}` : String(v)])) };\n const url = storybookIframeUrl(storybook, id, iframe);\n const t0 = Date.now();\n // DOM ready, then the story's own wait (rendered, fonts, a short settle): an animated story never reaches network idle.\n await page.goto(url, { waitUntil: 'domcontentloaded', timeout: (o.timeout ?? 15000) + 15000 });\n if (o.args && Object.keys(o.args).length) await page.evaluate<string>(APPLY_ARGS_SCRIPT(id, o.args, o.timeout ?? 15000)).catch(() => 'failed');\n const m = await measureRendered(page, o);\n let props: MeasuredProps | null = null;\n if (o.props !== false && m.root) props = await page.evaluate<MeasuredProps | null>(PROPS_SCRIPT(id)).catch(() => null);\n return { id, url, ...m, ...(props && typeof props === 'object' ? { props } : {}), ms: Date.now() - t0 };\n}\n\n/** Measures what the page shows now (a story already open, or re-rendered with new args): waits for it, then reads it. */\nexport async function measureRendered(page: MeasurePage, o: MeasureOptions = {}): Promise<MeasureResult & { ms: number; state?: MeasuredState | undefined; shot?: { file: string; width: number; height: number } | undefined }> {\n const t0 = Date.now();\n const root = o.root ?? '#storybook-root, #root';\n const timeout = o.timeout ?? 15000;\n const rendered = await page.evaluate<string>(WAIT_SCRIPT(root, timeout, o.unwrap === false));\n let opened: MeasureResult['opened'];\n if (o.open && rendered === 'rendered') opened = await page.evaluate<NonNullable<MeasureResult['opened']>>(OPEN_SCRIPT(root));\n const target = o.target ?? (o.open && !o.within ? 'portal' : undefined);\n const arg = { root, maxNodes: o.maxNodes, maxDepth: o.maxDepth, unwrap: o.unwrap, target, within: o.within };\n let state: MeasuredState | undefined;\n if (o.state && page.forcePseudo && rendered === 'rendered') {\n // Tag the component element, then force the state on it the way DevTools does (no pointer, no layout shift).\n const marked = await page.evaluate<{ marked?: boolean }>(`(${MEASURE_SCRIPT})(${JSON.stringify({ ...arg, mark: true })})`);\n if (marked?.marked && (await page.forcePseudo(STATE_TARGETS, PSEUDO_CLASSES[o.state]).catch(() => false))) {\n state = o.state;\n await page.evaluate('new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(() => setTimeout(r, 120))))');\n }\n }\n const r = await page.evaluate<MeasureResult | { error: string }>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`);\n let base: MeasureResult = 'root' in r ? r : { root: null, portals: [], wrappers: 0, nodes: 0, rules: 0, sheets: { read: 0, blocked: 0 }, rootVariables: 0, viewport: { width: 0, height: 0 }, error: r.error };\n // A root that fills its container spans the whole canvas in a story: lay it out at a component's width instead, so\n // the measured width, the plan and the screenshot agree (a text field at 400 px, not 1,116).\n const fillWidth = o.fillWidth ?? 400;\n if (fillWidth && base.root && base.rootFill && base.root.box.width > fillWidth + 1 && (state || (await markMeasuredRoot(page, { ...o, root })))) {\n await page.evaluate(`(async () => { const e = document.querySelector('[data-bridge-measure-root]'); if (e) { e.style.width = '${fillWidth}px'; e.style.maxWidth = 'none'; e.style.minWidth = '0'; } await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r))); })()`);\n const again = await page.evaluate<MeasureResult | { error: string }>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`);\n if ('root' in again && again.root) base = { ...again, rootFill: true, fillWidth };\n }\n if (opened) base.opened = opened;\n if (opened === 'none' && !base.root) base.error = 'the popup did not open: no trigger in the story opened it';\n if (rendered === 'timeout' && !base.error && !base.root) base.error = `the story did not render within ${timeout} ms`;\n if (rendered === 'error' && !base.error) base.error = 'the story threw';\n let shot: { file: string; width: number; height: number } | undefined;\n if (o.shot && page.screenshot && base.root) {\n // The element the measure read, in the state it was read in (the forced state is still on).\n if (state || (await markMeasuredRoot(page, { ...o, root }))) {\n const size = await page.screenshot('[data-bridge-measure-root]', o.shot).catch(() => null);\n if (size) shot = { file: o.shot, ...size };\n }\n }\n if (state) await page.forcePseudo?.(STATE_TARGETS, []).catch(() => false);\n // Colors as sRGB: a page keeps oklch(), lab() and color() in computed values; Figma and the token files read rgb().\n return { ...withSrgbColors(base), ...(state ? { state } : {}), ...(shot ? { shot } : {}), ms: Date.now() - t0 };\n}\n\nexport interface StoryPick {\n id: string;\n title: string;\n name: string;\n}\n\nexport interface PickStoriesOptions {\n /** Components by name or title, case-insensitive (\"Button\", \"Forms/Input\"). */\n only?: string[] | undefined;\n /** Exact story ids; replaces `only` and `perComponent`. */\n ids?: string[] | undefined;\n /** Stories per component, in index order (default 3). */\n perComponent?: number | undefined;\n}\n\n/** The stories a measure opens: given ids, else the first stories of each (selected) component. */\nexport function pickStoriesToMeasure(index: StorybookIndex, o: PickStoriesOptions = {}): StoryPick[] {\n if (o.ids?.length) {\n const byId = new Map(index.entries.map((e) => [e.id, e]));\n return o.ids.map((id) => {\n const e = byId.get(id);\n return { id, title: e?.title ?? '', name: e?.name ?? id };\n });\n }\n const want = (o.only ?? []).map((x) => x.trim().toLowerCase()).filter(Boolean);\n const per = o.perComponent ?? 3;\n return index.components\n .filter((c) => c.stories.length && (!want.length || want.includes(c.name.toLowerCase()) || want.includes(c.title.toLowerCase())))\n .flatMap((c) => c.stories.slice(0, per).map((e) => ({ id: e.id, title: c.title, name: e.name })));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Stories that show many instances at once (\"Sizes\", \"Variants\", a gallery of tags)\n\nconst SEMANTIC_CONTAINER = /^(fieldset|ul|ol|nav|form|menu|dl|select|header|footer|button|a|label|input|textarea)$/;\n\n/**\n * A frame that only lays children out: no paint, border, shadow, radius, role or semantic tag (a Stack, a flex row, a\n * story's layout table).\n */\nfunction plainLayout(n: MeasuredNode, anyRole = false): boolean {\n if (n.kind !== 'frame' || n.input || n.media || (!anyRole && (n.role || SEMANTIC_CONTAINER.test(n.tag)))) return false;\n const st = n.style;\n const painted = !transparent(st['background-color']) || (st['background-image'] && st['background-image'] !== 'none') || (st['box-shadow'] && st['box-shadow'] !== 'none');\n const bordered = (['top', 'right', 'bottom', 'left'] as const).some((x) => st[`border-${x}-style`] !== 'none' && (px(st[`border-${x}-width`]) ?? 0) > 0);\n return !painted && !bordered && !((px(st['border-top-left-radius']) ?? 0) > 0);\n}\n\n/** Two nodes are instances of one component: same tag and role, and a class in common (or both unclassed). */\nfunction sameComponent(a: MeasuredNode, b: MeasuredNode): boolean {\n if (a.tag !== b.tag || a.kind !== b.kind || a.role !== b.role) return false;\n const ca = new Set((a.classes ?? []).map(localClassName));\n const cb = (b.classes ?? []).map(localClassName);\n if (!ca.size && !cb.length) return true;\n return cb.some((c) => ca.has(c));\n}\n\n/** Re-bases a subtree's boxes on its own top-left corner. */\nfunction rebase(n: MeasuredNode, dx = n.box.x, dy = n.box.y): MeasuredNode {\n return { ...n, box: { ...n.box, x: Math.round((n.box.x - dx) * 100) / 100, y: Math.round((n.box.y - dy) * 100) / 100 }, children: n.children.map((c) => rebase(c, dx, dy)) };\n}\n\n/**\n * The instances of a story that renders a component several times (a \"Sizes\" story, a row of tags, a matrix table of\n * colors by sizes): under layout-only frames, captions aside, the components found, when most are the same component.\n * Returns [] for a story that renders one component: a radio group's radios are its own parts (the group has a role,\n * so it is the component, not a layout).\n */\nexport function splitInstances(root: MeasuredNode | null): MeasuredNode[] {\n if (!root || !plainLayout(root)) return [];\n const found: MeasuredNode[] = [];\n const collect = (n: MeasuredNode, depth: number) => {\n for (const c of n.children) {\n // Captions (\"sm\", \"Solid\") beside the instances; a sentence is content (an empty state's description), not a caption.\n if (c.kind === 'text' && (c.text ?? '').length <= 24) continue;\n if (c.kind === 'text') {\n found.push(c);\n continue;\n }\n // Inside the story, a group that draws nothing (a tag group with role=\"group\") is still just layout.\n if (plainLayout(c, true) && depth < 8 && c.children.length) collect(c, depth + 1);\n else if (!plainLayout(c, true)) found.push(c);\n }\n };\n collect(root, 0);\n if (found.length < 2) return [];\n let best: MeasuredNode[] = [];\n for (const k of found) {\n if (best.includes(k)) continue;\n const run = found.filter((c) => sameComponent(k, c));\n if (run.length > best.length) best = run;\n }\n // Most of what the story shows must be the same component (a strict majority): two buttons in an empty state are its actions.\n if (best.length < 2 || best.length * 2 <= found.length) return [];\n return best.map((n) => ({ ...rebase(n), at: { x: n.box.x - root.box.x, y: n.box.y - root.box.y } }));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Measure -> spec shape\n\nexport interface MeasuredToSpecOptions {\n /** CSS custom property -> token path. Default: the name without `--`, dashes as dots (`--space-2` -> `space.2`); private names (`--_bg`) are not tokens. */\n tokenOf?: ((cssVar: string) => string | undefined) | undefined;\n}\n\n/**\n * CSS module local name from a built class: Vite (`_label_aukrr_131`, `_label_1x2y3`), webpack and Next\n * (`Button_label__a1b2c`, `Button-module__label__a1b2c`), a prefixed scheme (`prc-Button-Label-pTQ3x`). Other classes come\n * back as they are.\n */\nexport function localClassName(cls: string): string {\n // A BEM element (`cds--toggle__switch`, `block_element`) is a class, not a hash: a hash has a digit or a capital.\n const hashed = (h: string | undefined) => !!h && /[0-9A-Z]/.test(h);\n const m =\n /^_([A-Za-z][\\w-]*?)_[A-Za-z0-9]{5,8}_\\d+$/.exec(cls) ??\n [/^[A-Za-z][\\w-]*?(?:-module)?_{1,2}([A-Za-z][\\w-]*?)__([\\w-]{5,8})$/.exec(cls)].find((x) => x && hashed(x[2])) ??\n /^(?:[a-z]+-)?[A-Z][A-Za-z0-9]*-([A-Za-z]\\w*)-[A-Za-z0-9_]{5}$/.exec(cls) ??\n [/^_?([A-Za-z][\\w-]*?)_([A-Za-z0-9-]{5,8})$/.exec(cls)].find((x) => x && hashed(x[2]));\n return m ? m[1]! : cls;\n}\n\n/** Tailwind-style utility keywords that are a class on their own (`flex`, `relative`, `truncate`). */\nconst UTILITY_KEYWORDS = new Set(\n 'flex inline-flex grid inline-grid block inline-block inline hidden contents table relative absolute fixed sticky static truncate uppercase lowercase capitalize normal-case italic not-italic underline overline line-through no-underline grow shrink border rounded shadow outline ring transition transform visible invisible collapse isolate container antialiased subpixel-antialiased group peer sr-only not-sr-only resize filter blur'.split(' '),\n);\n/** Utility shapes: a property prefix and a value (`px-4`, `text-sm`, `rounded-lg`, `gap-x-1`, `w-full`). */\nconst UTILITY_SHAPE =\n /^(?:p|px|py|pt|pr|pb|pl|ps|pe|m|mx|my|mt|mr|mb|ml|ms|me|w|h|min-w|min-h|max-w|max-h|size|gap|gap-x|gap-y|space-x|space-y|text|bg|from|via|to|border|border-[trblxyse]|rounded|rounded-[trblse]{1,2}|font|leading|tracking|z|top|right|bottom|left|start|end|inset|inset-x|inset-y|opacity|shadow|ring|ring-offset|outline|outline-offset|items|justify|justify-items|justify-self|content|self|place-items|place-content|place-self|flex|basis|grow|shrink|order|col|col-span|col-start|col-end|row|row-span|row-start|row-end|grid-cols|grid-rows|grid-flow|auto-cols|auto-rows|overflow|overflow-x|overflow-y|cursor|select|pointer-events|transition|duration|ease|delay|animate|scale|scale-x|scale-y|rotate|translate-x|translate-y|skew-x|skew-y|origin|fill|stroke|object|aspect|line-clamp|whitespace|break|decoration|underline-offset|list|align|appearance|backdrop|brightness|contrast|drop-shadow|grayscale|invert|saturate|sepia|hue-rotate|tabular|caret|accent|scroll|snap|touch|will-change|columns|divide|divide-x|divide-y|indent|box|float|clear|mix-blend|bg-blend)-[\\w.-]+$/;\n\n/**\n * A class that says how an element looks, not what it is: a utility (`flex`, `px-4`, `hover:bg-blue`, `w-[12px]`,\n * `-mt-1`) or a class a CSS-in-JS library generated from the styles (`css-1g7m1fs`, `sc-bdVaJa`). It changes with the\n * look from one variant to the next, so it never names or pairs a part: tag and position do. A BEM or semantic\n * class (`cds--btn__label`, `chakra-alert__title`, a CSS module's `label`) still does.\n */\nexport function isUtilityClass(cls: string): boolean {\n if (/[:[\\]/!]/.test(cls) || /^-[a-z]/.test(cls) || /\\.\\d/.test(cls)) return true;\n if (/^css-[a-z0-9]{5,8}$/.test(cls) || (/^(?:emotion|sc|jsx|svelte|astro)-[A-Za-z0-9_-]{4,}$/.test(cls) && /\\d|[A-Z]/.test(cls))) return true;\n return UTILITY_KEYWORDS.has(cls) || UTILITY_SHAPE.test(cls);\n}\n\nconst defaultTokenOf = (v: string) => (/^--_/.test(v) ? undefined : v.replace(/^--/, '').split('-').filter(Boolean).join('.'));\nconst px = (v: string | undefined): number | undefined => {\n if (!v) return undefined;\n const m = /^(-?[\\d.]+)px$/.exec(v.trim());\n return m ? Math.round(Number(m[1]) * 100) / 100 : undefined;\n};\nconst transparent = (v: string | undefined) => !v || v === 'transparent' || /^rgba\\([^)]*,\\s*0\\)$/.test(v);\n\n/** Auto layout of a measured element, as the pull reads it. */\n/** How in-flow children are laid out by their boxes: each below the previous, all on one row, or neither. */\nfunction arrangement(children: MeasuredBox[]): 'stacked' | 'row' | undefined {\n const kids = children.filter((c) => c.width > 0 || c.height > 0);\n if (kids.length < 2) return undefined;\n const stacked = kids.every((c, i) => i === 0 || c.y >= kids[i - 1]!.y + kids[i - 1]!.height - 1);\n const row = kids.every((c, i) => i === 0 || c.x >= kids[i - 1]!.x + kids[i - 1]!.width - 1);\n return stacked && !row ? 'stacked' : row && !stacked ? 'row' : undefined;\n}\n\n/** align-items as the counter axis alignment. */\nfunction alignOf(style: Record<string, string>): SpecLayout['counter'] {\n const a = style['align-items'] ?? 'normal';\n return /center/.test(a) ? 'CENTER' : /end/.test(a) ? 'MAX' : /^(flex-)?start|baseline/.test(a) ? 'MIN' : 'STRETCH';\n}\n\nexport function measuredLayout(style: Record<string, string>, children: MeasuredBox[] = []): SpecLayout | undefined {\n const d = style.display ?? '';\n const arranged = arrangement(children);\n // An inline element holding blocks (a <label> around a text and a switch) lays them out by their boxes.\n if (!/flex|grid|block|inline-block|list-item/.test(d)) return arranged ? { direction: arranged === 'stacked' ? 'VERTICAL' : 'HORIZONTAL', primary: 'MIN', counter: 'MIN' } : undefined;\n const flex = /flex/.test(d);\n const grid = /grid/.test(d);\n const dir = style['flex-direction'] ?? 'row';\n let direction: SpecLayout['direction'] = flex && dir.startsWith('row') ? 'HORIZONTAL' : 'VERTICAL';\n if (grid) {\n // A grid has no direction: its flow, its tracks, else where its children sit.\n const tracks = (v: string | undefined) => (v && v !== 'none' ? v.trim().split(/\\s+(?![^(]*\\))/).length : 0);\n const cols = tracks(style['grid-template-columns']);\n const rows = tracks(style['grid-template-rows']);\n const sideBySide = children.length >= 2 && children.every((c) => Math.abs(c.y + c.height / 2 - (children[0]!.y + children[0]!.height / 2)) <= Math.max(2, children[0]!.height / 2)) && new Set(children.map((c) => Math.round(c.x))).size === children.length;\n direction = /column/.test(style['grid-auto-flow'] ?? '') || (cols >= 2 && rows <= 1) || (cols < 2 && rows < 2 && sideBySide) ? 'HORIZONTAL' : 'VERTICAL';\n if (cols >= 2 && rows >= 2) direction = sideBySide ? 'HORIZONTAL' : 'VERTICAL';\n // Tracks across and down, filled row by row (a radio group of radio and label columns): a row that wraps at its width.\n if (cols >= 2 && rows >= 2 && !sideBySide && !/column/.test(style['grid-auto-flow'] ?? '')) return { direction: 'HORIZONTAL', primary: 'MIN', counter: alignOf(style), wrap: true };\n }\n const j = style['justify-content'] ?? 'normal';\n const primary: SpecLayout['primary'] = !flex && !grid ? 'MIN' : /space-between/.test(j) ? 'SPACE_BETWEEN' : /center/.test(j) ? 'CENTER' : /end|right/.test(j) ? 'MAX' : 'MIN';\n const counter = alignOf(style);\n // The boxes are the referee: a row that wrapped into a column at its width, or blocks that sit side by side.\n // (A wrapping row stays a row: Figma wraps it the same way at the same width.)\n if (arranged === 'stacked' && direction === 'HORIZONTAL' && !(flex && style['flex-wrap'] === 'wrap')) direction = 'VERTICAL';\n else if (arranged === 'row' && direction === 'VERTICAL' && !flex) direction = 'HORIZONTAL';\n const out: SpecLayout = { direction, primary, counter };\n if (flex && /reverse/.test(dir)) out.reverse = true;\n if (flex && direction === 'HORIZONTAL' && style['flex-wrap'] === 'wrap') out.wrap = true;\n return out;\n}\n\nconst FIELD_MAP: [SpecField, string][] = [\n ['fill', 'background-color'],\n ['cornerRadius', 'border-top-left-radius'],\n ['paddingTop', 'padding-top'],\n ['paddingRight', 'padding-right'],\n ['paddingBottom', 'padding-bottom'],\n ['paddingLeft', 'padding-left'],\n ['minWidth', 'min-width'],\n ['minHeight', 'min-height'],\n ['opacity', 'opacity'],\n];\nconst TEXT_MAP: [SpecField, string][] = [\n ['textFill', 'color'],\n ['fontFamily', 'font-family'],\n ['fontSize', 'font-size'],\n ['fontWeight', 'font-weight'],\n ['lineHeight', 'line-height'],\n ['letterSpacing', 'letter-spacing'],\n];\n\n/**\n * Turns a measured story into the spec shape: one part per drawn element (wrappers that draw nothing are kept as\n * frames, text runs become text parts), values bound to the declared token when there is one.\n */\nexport function measuredToSpec(m: Pick<MeasuredStory, 'id' | 'root'> & { rootFill?: boolean | undefined }, o: MeasuredToSpecOptions = {}): MeasuredSpec {\n const tokenOf = o.tokenOf ?? defaultTokenOf;\n const out: MeasuredSpec = { story: m.id, parts: [], values: {}, raw: {}, tokens: {}, boxes: {}, coverage: { fields: 0, declared: 0, matched: 0, literal: 0 } };\n if (!m.root) return out;\n const used = new Set<string>();\n const idFor = (n: MeasuredNode, isRoot: boolean, inherited?: string) => {\n // The root's id is reserved: a nested element with a .root class (a radio's dot, a card's inner root) gets root-2,\n // never a second \"root\" that would make the part tree loop.\n if (isRoot) {\n used.add('root');\n return 'root';\n }\n const cls = (n.classes ?? []).map(localClassName).find((c) => /^[A-Za-z]/.test(c) && c.length < 40 && !isUtilityClass(c));\n // Without a class that names it: its tag, numbered in order (the same structure gives the same ids in every variant).\n let base = cls ?? (n.pseudo ? `${inherited ?? 'root'}-${n.pseudo}` : n.kind === 'text' ? (inherited ? `${inherited}-text` : 'text') : n.kind === 'icon' ? 'icon' : n.tag);\n base = base.replace(/[^A-Za-z0-9-]+/g, '-').toLowerCase() || 'part';\n let id = base;\n for (let i = 2; used.has(id); i++) id = `${base}-${i}`;\n used.add(id);\n return id;\n };\n const visit = (n: MeasuredNode, parent: string | undefined, parentStyle: Record<string, string> | undefined, parentBox?: MeasuredBox): string => {\n const id = idFor(n, !parent, parent);\n const style = n.kind === 'text' && n.tag === '#text' ? (parentStyle ?? {}) : n.style;\n const tokens = n.kind === 'text' && n.tag === '#text' ? {} : n.tokens;\n const part: MeasuredPart = { id, name: id === 'root' ? 'Root' : id.replace(/-/g, ' ').replace(/^./, (c) => c.toUpperCase()), kind: n.kind };\n if (parent) part.parent = parent;\n const named = (n.classes ?? []).map(localClassName).filter((c) => !isUtilityClass(c));\n if (named.length) part.source = named.join(' ');\n if (n.kind === 'frame') {\n const l = measuredLayout(n.style, n.children.filter((c) => c.style.position !== 'absolute' && c.style.position !== 'fixed').map((c) => c.box));\n if (l) part.layout = l;\n if (/^(hidden|clip)/.test(n.style.overflow ?? '')) part.clip = true;\n if ((n.style.position === 'absolute' || n.style.position === 'fixed') && parent) {\n // Out of the auto layout: inset 0 covers the parent, else pinned at its offset from the parent's corner (px).\n const zero = (v: string | undefined) => v !== undefined && /^0(px)?$/.test(v.trim());\n if (['top', 'right', 'bottom', 'left'].every((k) => zero(n.style[k]))) part.cover = true;\n else {\n const pb = parentBox ?? { x: 0, y: 0 };\n part.pin = { top: Math.round((n.box.y - pb.y) * 100) / 100, left: Math.round((n.box.x - pb.x) * 100) / 100 };\n }\n }\n if (Number(n.style['flex-grow']) > 0) part.grow = true;\n }\n if (n.kind === 'text') part.characters = n.text ?? '';\n if (!parent && m.rootFill) part.fill = true;\n const margins = Object.fromEntries((['top', 'right', 'bottom', 'left'] as const).map((k) => [k, px(n.style[`margin-${k}`]) ?? 0]).filter(([, v]) => Math.abs(v as number) > 0.5));\n if (Object.keys(margins).length) part.margins = margins;\n out.parts.push(part);\n partById.set(id, part);\n out.boxes[id] = n.box;\n const values: Partial<Record<SpecField, SpecValue>> = {};\n const raw: Partial<Record<SpecField, string | number>> = {};\n const ev: Partial<Record<SpecField, MeasuredToken>> = {};\n const put = (field: SpecField, prop: string, literal: string | number | null | undefined) => {\n if (literal === undefined) return;\n out.coverage.fields++;\n if (literal !== null) raw[field] = literal;\n const t = tokens[prop];\n if (t) ev[field] = t;\n // Bound only when the declaration is the variable itself; a calc() or a shorthand mixing it keeps the number.\n if (t?.via === 'declared' && t.exact) {\n out.coverage.declared++;\n // The first link that is a token: private variables (`--_bg`) hand over to what they alias.\n const path = t.chain.map(tokenOf).find((x): x is string => !!x);\n if (path) return void (values[field] = path);\n } else if (t?.via === 'declared') out.coverage.declared++;\n else if (t?.via === 'matched') out.coverage.matched++;\n else out.coverage.literal++;\n if (literal === null) values[field] = null;\n else if (typeof literal === 'number') values[field] = literal;\n };\n if (n.kind === 'frame') {\n for (const [field, prop] of FIELD_MAP) {\n const v = n.style[prop];\n if (field === 'fill') put(field, prop, transparent(v) ? (n.style['background-image'] && n.style['background-image'] !== 'none' ? n.style['background-image'] : undefined) : v);\n else if (field === 'opacity') put(field, prop, v && Number(v) < 1 ? Number(v) : undefined);\n else if (field === 'minWidth' || field === 'minHeight') {\n // Figma minimums include padding and border; CSS ones do only under border-box.\n const sides = field === 'minWidth' ? (['left', 'right'] as const) : (['top', 'bottom'] as const);\n const extra = n.style['box-sizing'] === 'content-box' ? sides.reduce((a, x) => a + (px(n.style[`padding-${x}`]) ?? 0) + (n.style[`border-${x}-style`] === 'none' ? 0 : (px(n.style[`border-${x}-width`]) ?? 0)), 0) : 0;\n const min = px(v);\n if (!min) continue;\n if (extra) {\n out.coverage.fields++;\n out.coverage.literal++;\n raw[field] = min + extra;\n values[field] = min + extra;\n } else put(field, prop, min);\n }\n else if (field === 'cornerRadius' && v && /%$/.test(v.trim())) {\n // 50% is half the smaller side (a round knob or dot): px from the box.\n const half = Math.min(n.box.width, n.box.height) / 2;\n const r = Math.min(half, Math.round((Math.min(n.box.width, n.box.height) * Number.parseFloat(v)) / 100 * 100) / 100);\n if (r >= half - 0.5) part.fullRadius = true;\n if (r > 0) {\n out.coverage.fields++;\n out.coverage.literal++;\n raw[field] = r;\n values[field] = part.fullRadius ? 999 : r;\n }\n } else {\n // A radius of half the shorter side or more (9999px pills) is a full radius: half the side in Figma.\n const half = Math.min(n.box.width, n.box.height) / 2;\n if (field === 'cornerRadius' && (px(v) ?? 0) >= half - 0.5 && half > 0) part.fullRadius = true;\n put(field, prop, px(v) || undefined); // zero paddings and radii are Figma's default: not a field\n // A pill is 999 px in Figma, unless the radius is bound to a token.\n if (part.fullRadius && field === 'cornerRadius' && typeof values.cornerRadius === 'number') values.cornerRadius = 999;\n }\n }\n const widths = (['top', 'right', 'bottom', 'left'] as const).map((s) => (n.style[`border-${s}-style`] === 'none' ? 0 : (px(n.style[`border-${s}-width`]) ?? 0)));\n if (widths.some((w) => w > 0)) {\n const side = widths.findIndex((w) => w > 0);\n const s = (['top', 'right', 'bottom', 'left'] as const)[side]!;\n const color = n.style[`border-${s}-color`];\n put('stroke', `border-${s}-color`, transparent(color) ? null : color);\n if (widths.every((w) => w === widths[0])) put('strokeWeight', 'border-top-width', widths[0]);\n else (['top', 'right', 'bottom', 'left'] as const).forEach((x, i) => put(({ top: 'strokeTopWeight', right: 'strokeRightWeight', bottom: 'strokeBottomWeight', left: 'strokeLeftWeight' } as const)[x], `border-${x}-width`, widths[i]));\n }\n // A shadow (an elevation, a focus ring drawn as one): the computed list, drawn as Figma effects.\n if (parseBoxShadow(n.style['box-shadow']).length) put('shadow', 'box-shadow', n.style['box-shadow']);\n const l = part.layout;\n if (l && /flex|grid/.test(n.style.display ?? '')) {\n const gap = l.direction === 'HORIZONTAL' ? n.style['column-gap'] : n.style['row-gap'];\n put('itemSpacing', l.direction === 'HORIZONTAL' ? 'column-gap' : 'row-gap', px(gap) || undefined);\n if (l.wrap) put('counterAxisSpacing', 'row-gap', px(n.style['row-gap']) || undefined);\n }\n put('width', 'width', n.box.width);\n put('height', 'height', n.box.height);\n }\n if (n.kind === 'text') {\n for (const [field, prop] of TEXT_MAP) {\n const v = style[prop];\n if (!v || v === 'normal') continue;\n put(field, prop, field === 'textFill' || field === 'fontFamily' ? v : field === 'fontWeight' ? Number(v) : px(v));\n }\n const deco = style['text-decoration-line'];\n if (deco && /underline|line-through/.test(deco)) raw.textDecoration = /underline/.test(deco) ? 'UNDERLINE' : 'STRIKETHROUGH';\n }\n if ((n.kind === 'icon' || n.kind === 'vector') && n.svg) (out.vectors ??= {})[id] = { svg: n.svg, strokes: n.svgStrokes ?? [] };\n if (n.kind === 'icon' || n.kind === 'vector') {\n put('width', 'width', n.box.width);\n put('height', 'height', n.box.height);\n // Outline icons (Lucide, Carbon) paint with stroke, solid ones (Primer octicons) with fill; currentColor reads as color.\n const stroked = !!n.style.stroke && n.style.stroke !== 'none';\n const prop = stroked ? 'stroke' : 'fill';\n const paint = n.style[prop];\n if (paint && paint !== 'none') put(stroked ? 'stroke' : 'fill', n.tokens[prop] ? prop : 'color', /currentcolor/i.test(paint) ? n.style.color : paint);\n if (stroked) put('strokeWeight', 'stroke-width', px(n.style['stroke-width']) ?? (Number(n.style['stroke-width']) || undefined));\n }\n if (Object.keys(values).length) out.values[id] = values;\n if (Object.keys(raw).length) out.raw[id] = raw;\n if (Object.keys(ev).length) out.tokens[id] = ev;\n if (n.sized && (n.sized.width || n.sized.height)) (out.sized ??= {})[id] = { ...(n.sized.width ? { width: n.box.width } : {}), ...(n.sized.height ? { height: n.box.height } : {}) };\n const kids = n.children.map((c) => [c, visit(c, id, n.style, n.box)] as const);\n // A grid that wraps does so at its measured width, each item at its track's: Figma wraps fixed widths only.\n if (part.layout?.wrap && /grid/.test(n.style.display ?? '')) {\n for (const [c, cid] of [[n, id] as const, ...kids]) if (c === n || !/absolute|fixed/.test(c.style.position ?? '')) (out.sized ??= {})[cid] = { ...out.sized?.[cid], width: c.box.width };\n }\n if (part.layout) spacing(id, n, part.layout, kids);\n if (n.kind === 'frame') positioned(id, part, n, kids);\n // Moved or scaled by a transform (a progress indicator slid left, a check scaled in): the layer sits where it is\n // drawn, at the size it is drawn, out of the flow (its box is the drawn one).\n const t = /matrix\\(([^)]+)\\)/.exec(n.style.transform ?? '')?.[1]?.split(',').map(Number);\n if (parent && parentBox && t && t.length === 6 && Math.abs(t[1]!) < 1e-6 && Math.abs(t[2]!) < 1e-6 && (Math.abs(t[4]!) >= 0.5 || Math.abs(t[5]!) >= 0.5 || Math.abs(t[0]! - 1) > 0.01 || Math.abs(t[3]! - 1) > 0.01) && !part.cover) {\n part.pin = { top: Math.round((n.box.y - parentBox.y) * 100) / 100, left: Math.round((n.box.x - parentBox.x) * 100) / 100 };\n if (Math.abs(t[0]! - 1) > 0.01 || Math.abs(t[3]! - 1) > 0.01) (out.sized ??= {})[id] = { width: n.box.width, height: n.box.height };\n }\n return id;\n };\n const partById = new Map<string, MeasuredPart>();\n const byId = (id: string) => partById.get(id) ?? out.parts.find((p) => p.id === id);\n /**\n * Out of flow children. A lone decoration (a switch knob, a radio dot) is rebuilt in auto layout: the parent aligns\n * it start, center or end on each axis and its padding carries the offset, when that reproduces the measured\n * position within 1 px. Anything else out of flow that overlaps its siblings or leaves its parent is an overlay.\n */\n const positioned = (id: string, parentPart: MeasuredPart, n: MeasuredNode, kids: (readonly [MeasuredNode, string])[]) => {\n const abs = kids.filter(([c]) => c.style.position === 'absolute' || c.style.position === 'fixed');\n if (!abs.length) return;\n const flow = kids.filter(([c]) => !(c.style.position === 'absolute' || c.style.position === 'fixed') && (c.box.width > 0 || c.box.height > 0));\n const st = n.style;\n const b = (k: string) => (st[`border-${k}-style`] === 'none' ? 0 : (px(st[`border-${k}-width`]) ?? 0));\n const inner = { x: n.box.x + b('left'), y: n.box.y + b('top'), r: n.box.x + n.box.width - b('right'), bottom: n.box.y + n.box.height - b('bottom') };\n const r2 = (x: number) => Math.round(x * 100) / 100;\n if (abs.length === 1 && !flow.length) {\n const [c, cid] = abs[0]!;\n const p = byId(cid);\n if (p && !p.cover) {\n const left = r2(c.box.x - inner.x), right = r2(inner.r - (c.box.x + c.box.width));\n const top = r2(c.box.y - inner.y), bottom = r2(inner.bottom - (c.box.y + c.box.height));\n const ax = (a: number, z: number) => (Math.abs(a - z) <= 1 ? 'center' : a <= z ? 'start' : 'end') as 'start' | 'center' | 'end';\n const x = ax(left, right), y = ax(top, bottom);\n if (left >= -0.5 && right >= -0.5 && top >= -0.5 && bottom >= -0.5) {\n delete p.pin;\n const map = { start: 'MIN', center: 'CENTER', end: 'MAX' } as const;\n parentPart.layout = { direction: 'HORIZONTAL', primary: map[x], counter: map[y], align: { [cid]: { primary: map[x], counter: map[y] } } };\n const vals = (out.values[id] ??= {});\n const raws = (out.raw[id] ??= {});\n const set = (k: 'paddingLeft' | 'paddingRight' | 'paddingTop' | 'paddingBottom', v: number) => {\n if (v > 0.5) {\n vals[k] = v;\n raws[k] = v;\n } else {\n delete vals[k];\n delete raws[k];\n }\n };\n set('paddingLeft', x === 'start' ? left : 0);\n set('paddingRight', x === 'end' ? right : 0);\n set('paddingTop', y === 'start' ? top : 0);\n set('paddingBottom', y === 'end' ? bottom : 0);\n return;\n }\n }\n }\n const overlaps = (a: MeasuredBox, z: MeasuredBox) => a.x < z.x + z.width - 0.5 && z.x < a.x + a.width - 0.5 && a.y < z.y + z.height - 0.5 && z.y < a.y + a.height - 0.5;\n for (const [c, cid] of abs) {\n const p = byId(cid);\n if (!p || p.cover) continue;\n const outside = c.box.x < inner.x - 0.5 || c.box.y < inner.y - 0.5 || c.box.x + c.box.width > inner.r + 0.5 || c.box.y + c.box.height > inner.bottom + 0.5;\n if (outside || flow.some(([f]) => overlaps(c.box, f.box))) p.overlay = true;\n }\n };\n /**\n * Margins become auto layout: the space the boxes show before the first child and after the last becomes padding,\n * the space between children becomes the gap when it is the same everywhere, else the smallest gap plus a spacer\n * per child (a label 8 px above its field, a helper 4 px below it).\n */\n const spacing = (id: string, n: MeasuredNode, layout: SpecLayout, kids: (readonly [MeasuredNode, string])[]) => {\n if (layout.primary !== 'MIN' || layout.wrap || layout.reverse) return;\n const flow = kids.filter(([c]) => c.style.position !== 'absolute' && c.style.position !== 'fixed' && (c.box.width > 0 || c.box.height > 0));\n if (!flow.length) return;\n const v = layout.direction === 'VERTICAL';\n const st = n.style;\n const side = v ? (['top', 'bottom'] as const) : (['left', 'right'] as const);\n const num = (x: string | undefined) => px(x) ?? 0;\n const startEdge = (v ? n.box.y : n.box.x) + (st[`border-${side[0]}-style`] === 'none' ? 0 : num(st[`border-${side[0]}-width`])) + num(st[`padding-${side[0]}`]);\n const endEdge = (v ? n.box.y + n.box.height : n.box.x + n.box.width) - (st[`border-${side[1]}-style`] === 'none' ? 0 : num(st[`border-${side[1]}-width`])) - num(st[`padding-${side[1]}`]);\n const lo = (b: MeasuredBox) => (v ? b.y : b.x);\n const hi = (b: MeasuredBox) => (v ? b.y + b.height : b.x + b.width);\n const gaps = flow.slice(1).map(([c], i) => Math.round((lo(c.box) - hi(flow[i]![0].box)) * 100) / 100);\n if (gaps.some((g) => g < -0.5)) return; // overlapping (inline runs, negative margins): leave the declared layout\n const vals = (out.values[id] ??= {});\n const raws = (out.raw[id] ??= {});\n const padKey = (k: 'top' | 'bottom' | 'left' | 'right') => (({ top: 'paddingTop', bottom: 'paddingBottom', left: 'paddingLeft', right: 'paddingRight' }) as const)[k];\n const first = flow[0]![0];\n const last = flow[flow.length - 1]![0];\n // Only space a margin makes (text centred in a taller line is not padding): a child's own margin, at most what the boxes show.\n const before = Math.min(num(first.style[`margin-${side[0]}`]), Math.round((lo(first.box) - startEdge) * 100) / 100);\n // After the last child: only its own margin (free space in a fixed or stretched box is not padding).\n const after = Math.min(num(last.style[`margin-${side[1]}`]), Math.round((endEdge - hi(last.box)) * 100) / 100);\n for (const [k, extra] of [[side[0], before], [side[1], after]] as const) {\n if (!(extra > 0.5)) continue;\n const total = Math.round((num(st[`padding-${k}`]) + extra) * 100) / 100;\n vals[padKey(k)] = total;\n raws[padKey(k)] = total;\n }\n if (!gaps.length) return;\n const marginBetween = flow.slice(1).some(([c], i) => num(flow[i]![0].style[`margin-${side[1]}`]) > 0.5 || num(c.style[`margin-${side[0]}`]) > 0.5);\n if (!marginBetween) return;\n const declaredGap = num(v ? st['row-gap'] : st['column-gap']);\n const min = Math.min(...gaps);\n const uniform = gaps.every((g) => Math.abs(g - gaps[0]!) <= 0.5);\n if (uniform && Math.abs(gaps[0]! - declaredGap) <= 0.5) return;\n vals.itemSpacing = uniform ? gaps[0]! : min;\n raws.itemSpacing = vals.itemSpacing as number;\n if (!uniform)\n flow.slice(1).forEach(([c, cid], i) => {\n const extra = Math.round((gaps[i]! - min) * 100) / 100;\n if (!(extra > 0.5)) return;\n (out.spacers ??= {})[cid] = extra;\n // The margin's owner gets a wrapper with that padding: the previous child's end margin, else this child's start.\n const [prev, pid] = flow[i]!;\n const onPrev = num(prev.style[`margin-${side[1]}`]) > 0.5 && !(num(c.style[`margin-${side[0]}`]) > num(prev.style[`margin-${side[1]}`]));\n const owner = byId(onPrev ? pid : cid);\n if (owner) owner.wrap = { padding: { ...(owner.wrap?.padding ?? {}), [onPrev ? side[1] : side[0]]: extra } };\n });\n };\n visit(m.root, undefined, undefined);\n for (const k of Object.keys(out.values)) if (!Object.keys(out.values[k]!).length) delete out.values[k];\n for (const k of Object.keys(out.raw)) if (!Object.keys(out.raw[k]!).length) delete out.raw[k];\n return out;\n}\n"],"names":["resolve","sep","walk","width","l","vars","strip","align","justify","join","base","dir","t"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACL9B,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/node/git-local.ts","../../src/node/git-history.ts","../../src/node/audit.ts","../../src/node/spec-css.ts","../../src/node/spec-motion.ts","../../src/node/component-specs.ts","../../src/node/suggestion-apply-node.ts","../../src/node/fs-source.ts","../../src/node/measure-script.ts","../../src/node/tokens-script.ts","../../src/node/measure.ts"],"sourcesContent":["// Local git through plumbing commands (Node only). A proposal becomes a commit on a new branch without\n// touching the working tree, the index or the checked-out branch, and nothing is ever pushed.\nimport { execFile } from 'node:child_process';\nimport { mkdtemp, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { type BranchRules, assertSafeBranch } from '../governance';\n\nexport function git(root: string, args: string[], opts: { input?: string; env?: Record<string, string> } = {}): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = execFile('git', args, { cwd: root, env: { ...process.env, ...opts.env }, maxBuffer: 32 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err) reject(new Error(`git ${args.join(' ')}: ${stderr || err.message}`.trim()));\n else resolve(stdout);\n });\n if (opts.input !== undefined) child.stdin!.end(opts.input);\n });\n}\n\nexport async function isGitRepo(root: string): Promise<boolean> {\n try {\n return (await git(root, ['rev-parse', '--is-inside-work-tree'])).trim() === 'true';\n } catch {\n return false;\n }\n}\n\nexport async function currentBranch(root: string): Promise<string> {\n return (await git(root, ['rev-parse', '--abbrev-ref', 'HEAD'])).trim();\n}\n\nexport async function branchExists(root: string, branch: string): Promise<boolean> {\n try {\n await git(root, ['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`]);\n return true;\n } catch {\n return false;\n }\n}\n\n/** File text at a ref, or null when it does not exist there. */\nexport async function showFile(root: string, ref: string, path: string): Promise<string | null> {\n try {\n return await git(root, ['show', `${ref}:${path}`]);\n } catch {\n return null;\n }\n}\n\nexport async function listFilesAt(root: string, ref: string): Promise<string[]> {\n return (await git(root, ['ls-tree', '-r', '--name-only', ref])).split('\\n').filter(Boolean);\n}\n\n/** \"owner/name\" of the origin remote when it is on github.com. */\nexport async function originRepo(root: string): Promise<string | undefined> {\n try {\n const url = (await git(root, ['remote', 'get-url', 'origin'])).trim();\n return /github\\.com[:/]([\\w.-]+\\/[\\w.-]+?)(\\.git)?$/.exec(url)?.[1];\n } catch {\n return undefined;\n }\n}\n\nexport interface LocalCommitInput extends BranchRules {\n /** Ref the commit builds on (\"HEAD\", a branch or a sha). */\n base: string;\n branch: string;\n message: string;\n files: { path: string; content: string | null }[];\n}\n\n/**\n * Commits `files` on top of `base` into the new branch `branch` using a throwaway index. Refuses protected\n * branches (and, with branchPrefix, branches without it) and existing branches: nothing is ever overwritten.\n */\nexport async function commitToNewLocalBranch(root: string, args: LocalCommitInput): Promise<{ sha: string; diff: string }> {\n try {\n assertSafeBranch(args.branch, args);\n } catch (err) {\n throw new Error(`Refusing to write branch \"${args.branch}\": ${(err as Error).message}`);\n }\n if (await branchExists(root, args.branch)) throw new Error(`Branch \"${args.branch}\" already exists. Pick another title or delete it first.`);\n const { sha, parent } = await commitTree(root, args);\n // Empty old value: create only, fail if the ref appeared meanwhile.\n await git(root, ['update-ref', `refs/heads/${args.branch}`, sha, '']);\n const diff = await git(root, ['diff', parent, sha]);\n return { sha, diff };\n}\n\n/**\n * A commit with `files` on top of `base`, built in a throwaway index and pointed to by no branch: nothing in the working\n * tree, the index or the refs changes. commitToNewLocalBranch names it; a patch (git format-patch) can be read from it.\n */\nexport async function commitTree(root: string, args: { base: string; message: string; files: { path: string; content: string | null }[] }): Promise<{ sha: string; parent: string }> {\n const parent = (await git(root, ['rev-parse', '--verify', `${args.base}^{commit}`])).trim();\n const dir = await mkdtemp(join(tmpdir(), 'bridge-index-'));\n const env = { GIT_INDEX_FILE: join(dir, 'index') };\n try {\n await git(root, ['read-tree', parent], { env });\n for (const f of args.files) {\n if (f.content === null) {\n await git(root, ['update-index', '--force-remove', f.path], { env });\n continue;\n }\n const blob = (await git(root, ['hash-object', '-w', '--stdin'], { input: f.content })).trim();\n await git(root, ['update-index', '--add', '--cacheinfo', `100644,${blob},${f.path}`], { env });\n }\n const tree = (await git(root, ['write-tree'], { env })).trim();\n const ident = await identityEnv(root);\n const sha = (await git(root, ['commit-tree', tree, '-p', parent, '-F', '-'], { input: args.message, env: ident })).trim();\n return { sha, parent };\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nasync function identityEnv(root: string): Promise<Record<string, string>> {\n const get = async (k: string) => (await git(root, ['config', k]).catch(() => '')).trim();\n const name = (await get('user.name')) || 'Bridge';\n const email = (await get('user.email')) || 'bridge@users.noreply.github.com';\n return { GIT_AUTHOR_NAME: name, GIT_AUTHOR_EMAIL: email, GIT_COMMITTER_NAME: name, GIT_COMMITTER_EMAIL: email };\n}\n","// History from a local git repository (Node only): first-parent commits of a ref that touched the tokens\n// root, so a merged branch is one entry (the merge commit against the base it merged into). PR numbers come\n// from merge and squash subjects. Blobs are read once per sha.\nimport { type BridgeConfig } from '../config';\nimport { type HistoryBackend, type HistoryCommit, type HistoryReport, buildReport, collectHistory, mergeReleases, packageDirCandidates, parseChangelog, prNumberFromSubject, releasesFromTags } from '../history';\nimport { selectTokenFiles } from '../layered';\nimport { git, showFile } from './git-local';\n\nconst US = '\\u001f';\nconst RS = '\\u001e';\n\nexport function localGitHistoryBackend(root: string, config: BridgeConfig): HistoryBackend {\n const trees = new Map<string, Promise<{ path: string; sha: string }[]>>();\n const blobs = new Map<string, Promise<string>>();\n const tokenRoot = config.tokens.root.replace(/\\/$/, '');\n const prefix = tokenRoot === '.' || !tokenRoot ? '' : `${tokenRoot}/`;\n const lsTree = (sha: string, path: string) => {\n const k = `${sha}:${path}`;\n let t = trees.get(k);\n if (!t) {\n t = git(root, ['ls-tree', '-r', sha, '--', path || '.']).then((out) =>\n out\n .split('\\n')\n .filter(Boolean)\n .map((l) => {\n const [meta, p] = l.split('\\t');\n return { path: p!, sha: meta!.split(' ')[2]! };\n }),\n );\n trees.set(k, t);\n }\n return t;\n };\n const blob = (sha: string) => {\n let b = blobs.get(sha);\n if (!b) {\n b = git(root, ['cat-file', 'blob', sha]);\n blobs.set(sha, b);\n }\n return b;\n };\n return {\n async listCommits({ ref, paths, limit }) {\n const fmt = ['%H', '%P', '%cI', '%an', '%s', '%b'].join(US) + RS;\n const out = await git(root, ['log', '--first-parent', `-n${limit}`, `--format=${fmt}`, ref, '--', ...(paths.length ? paths : ['.'])]);\n return out\n .split(RS)\n .map((r) => r.replace(/^\\n/, ''))\n .filter((r) => r.trim())\n .map((r): HistoryCommit => {\n const [sha, parents, date, author, subject, body] = r.split(US);\n const n = prNumberFromSubject(subject ?? '');\n return { sha: sha!, parents: (parents ?? '').split(' ').filter(Boolean), date: date!, author: author!, subject: subject ?? '', body: (body ?? '').trim(), ...(n ? { pr: { number: n, title: '' } } : {}) };\n })\n .map((c) => (c.pr && !c.pr.title ? { ...c, pr: undefined } : c))\n .map((c) => {\n const { pr, ...rest } = c;\n return pr ? c : rest;\n });\n },\n async tokenFiles(sha) {\n const entries = await lsTree(sha, tokenRoot === '.' ? '' : tokenRoot);\n const picked = new Set(selectTokenFiles(config, entries.map((e) => e.path)));\n const wanted = entries.filter((e) => picked.has(prefix ? e.path.slice(prefix.length) : e.path));\n return new Map(await Promise.all(wanted.map(async (e) => [prefix ? e.path.slice(prefix.length) : e.path, await blob(e.sha)] as const)));\n },\n async changesetPaths(sha) {\n const dir = config.changesets?.dir.replace(/\\/$/, '');\n return dir ? (await lsTree(sha, dir)).map((e) => e.path) : [];\n },\n async readFile(sha, path) {\n return showFile(root, sha, path);\n },\n };\n}\n\n/** Tags with their commit and date: `v1.2.0`, `@scope/pkg@1.2.0`. */\nexport async function localTags(root: string): Promise<{ name: string; sha: string; date: string }[]> {\n const out = await git(root, ['for-each-ref', 'refs/tags', '--format=%(refname:short)%09%(*objectname)%09%(objectname)%09%(creatordate:iso-strict)']).catch(() => '');\n return out\n .split('\\n')\n .filter(Boolean)\n .map((l) => {\n const [name, peeled, obj, date] = l.split('\\t');\n return { name: name!, sha: peeled || obj!, date: date! };\n });\n}\n\n/** The whole history report for a local repo at `ref` (default HEAD). */\nexport async function loadLocalHistory(root: string, config: BridgeConfig, opts: { ref?: string; limit?: number } = {}): Promise<HistoryReport> {\n const ref = opts.ref ?? 'HEAD';\n const limit = opts.limit ?? 40;\n const backend = localGitHistoryBackend(root, config);\n let listed = 0;\n const counted: HistoryBackend = {\n ...backend,\n listCommits: async (o) => {\n const r = await backend.listCommits(o);\n listed = r.length;\n return r;\n },\n };\n // A shallow clone (CI, Vercel) has a cut history: read what is there.\n const entries = await collectHistory(config, counted, { ref, limit });\n let changelog: ReturnType<typeof parseChangelog> = [];\n let currentVersion: string | undefined;\n for (const dir of packageDirCandidates(config)) {\n const p = (f: string) => (dir ? `${dir}/${f}` : f);\n const [cl, pkg] = await Promise.all([showFile(root, ref, p('CHANGELOG.md')), showFile(root, ref, p('package.json'))]);\n if (cl === null && pkg === null) continue;\n if (cl) changelog = parseChangelog(cl);\n if (pkg) {\n try {\n const json = JSON.parse(pkg) as { name?: string; version?: string };\n if (!config.changesets || json.name === config.changesets.package) currentVersion = json.version;\n } catch {\n /* not JSON */\n }\n }\n break;\n }\n const releases = mergeReleases(changelog, releasesFromTags(await localTags(root), config.changesets?.package));\n return buildReport({ source: 'git', label: `${root}@${ref}`, ref, entries, releases, ...(currentVersion ? { currentVersion } : {}), truncated: listed >= limit });\n}\n","// Node side of `bridge audit`: load the design system from its repo and read a product folder from disk.\nimport { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\nimport { loadConfig, type BridgeConfig } from '../config';\nimport { globToRegExp, LayeredTokenSet, selectTokenFiles } from '../layered';\nimport { AUDIT_IGNORE_DIRS, buildAuditReport, compareWithBaseline, isAuditable, planCssFixes, type CssFixEdit, type CssFixKept } from '../audit/report';\nimport { DesignSystemIndex } from '../audit/ds-index';\nimport { parseAllowlist } from '../audit/ignore';\nimport type { AllowlistEntry, AuditReport } from '../audit/types';\n\nexport interface LoadedDesignSystem {\n root: string;\n config: BridgeConfig;\n set: LayeredTokenSet;\n index: DesignSystemIndex;\n}\n\nconst toPosix = (p: string) => p.split(sep).join('/');\n\nfunction walk(dir: string, root: string, out: string[], skipDirs: string[]): void {\n let entries: string[];\n try {\n entries = readdirSync(dir);\n } catch {\n return;\n }\n for (const name of entries) {\n const abs = join(dir, name);\n let st;\n try {\n st = statSync(abs);\n } catch {\n continue;\n }\n if (st.isDirectory()) {\n if (!skipDirs.includes(name)) walk(abs, root, out, skipDirs);\n } else out.push(toPosix(relative(root, abs)));\n }\n}\n\n/** Nearest folder at or above `from` with a bridge.config.json. */\nexport function findDesignSystemRoot(from: string): string | undefined {\n let dir = resolve(from);\n for (;;) {\n if (existsSync(join(dir, 'bridge.config.json'))) return dir;\n const up = dirname(dir);\n if (up === dir) return undefined;\n dir = up;\n }\n}\n\nconst cache = new Map<string, LoadedDesignSystem>();\n\n/** Design system at `root` (a repo with bridge.config.json): tokens in every mode, components, packages. Cached per root. */\nexport function loadDesignSystem(root: string, opts: { fresh?: boolean } = {}): LoadedDesignSystem {\n const abs = resolve(root);\n const hit = cache.get(abs);\n if (hit && !opts.fresh) return hit;\n const cfgPath = join(abs, 'bridge.config.json');\n if (!existsSync(cfgPath)) throw new Error(`No bridge.config.json in ${abs}: pass the design system repo (--ds <dir>) or run bridge init there.`);\n const config = loadConfig(readFileSync(cfgPath, 'utf8'));\n const tokensRoot = config.tokens.root.replace(/\\/$/, '');\n const listed: string[] = [];\n walk(join(abs, tokensRoot === '.' ? '' : tokensRoot), abs, listed, ['node_modules', '.git', 'dist']);\n const files = new Map<string, string>();\n for (const f of selectTokenFiles(config, listed)) files.set(f, readFileSync(join(abs, tokensRoot === '.' ? '' : tokensRoot, f), 'utf8'));\n const set = new LayeredTokenSet(config, files);\n const components: string[] = [];\n let packages = config.audit?.packages;\n if (config.components) {\n const dir = join(abs, config.components.dir);\n if (existsSync(dir)) for (const name of readdirSync(dir)) if (/^[A-Z][A-Za-z0-9]*$/.test(name) && statSync(join(dir, name)).isDirectory()) components.push(name);\n if (!packages) {\n packages = ['@bridge-ds/react'];\n for (let d = dir; d.startsWith(abs) && d !== abs; d = dirname(d)) {\n const pj = join(d, 'package.json');\n if (existsSync(pj)) {\n const name = (JSON.parse(readFileSync(pj, 'utf8')) as { name?: string }).name;\n if (name && !packages.includes(name)) packages.unshift(name);\n break;\n }\n }\n }\n }\n const index = new DesignSystemIndex(set, {\n packages: packages ?? ['@bridge-ds/react'],\n components: components.sort(),\n ...(config.audit?.foreignLibraries ? { foreignLibraries: config.audit.foreignLibraries } : {}),\n ...(config.audit?.nativeElements ? { nativeElements: config.audit.nativeElements } : {}),\n });\n const loaded = { root: abs, config, set, index };\n cache.set(abs, loaded);\n return loaded;\n}\n\n/** Auditable files under `target` (a folder or a single file), repo-relative to it. */\nexport function collectAuditFiles(target: string, exclude: string[] = []): { root: string; files: { path: string; text: string }[]; skipped: number } {\n const abs = resolve(target);\n if (statSync(abs).isFile()) return { root: dirname(abs), files: [{ path: toPosix(relative(dirname(abs), abs)), text: readFileSync(abs, 'utf8') }], skipped: 0 };\n const all: string[] = [];\n walk(abs, abs, all, AUDIT_IGNORE_DIRS);\n const ex = exclude.map(globToRegExp);\n const files: { path: string; text: string }[] = [];\n let skipped = 0;\n for (const p of all.sort()) {\n if (!isAuditable(p) || ex.some((r) => r.test(p))) continue;\n const full = join(abs, p);\n if (statSync(full).size > 512 * 1024) {\n skipped++;\n continue;\n }\n files.push({ path: p, text: readFileSync(full, 'utf8') });\n }\n return { root: abs, files, skipped };\n}\n\nexport interface RunAuditOptions {\n /** Design system repo root (with bridge.config.json). Default: nearest one above the current directory. */\n ds?: string;\n label?: string;\n baseline?: AuditReport;\n version?: string;\n /** Path recorded in the report (default: target relative to cwd). */\n displayPath?: string;\n exclude?: string[];\n /** Known violations left out of the counts, each with a reason (see loadAllowlist). */\n allowlist?: AllowlistEntry[];\n}\n\n/** Read an allowlist file: `{ \"entries\": [{ \"file\", \"line\", \"what\"?, \"reason\" }] }`, paths relative to the audited folder. */\nexport function loadAllowlist(path: string): AllowlistEntry[] {\n return parseAllowlist(JSON.parse(readFileSync(path, 'utf8')));\n}\n\n/** Audit a product folder against a design system. */\nexport function runAudit(target: string, opts: RunAuditOptions = {}): AuditReport {\n const dsRoot = opts.ds ?? findDesignSystemRoot(process.cwd());\n if (!dsRoot) throw new Error('No design system found: run from a repo with bridge.config.json or pass --ds <dir>.');\n const ds = loadDesignSystem(dsRoot);\n const { files, skipped } = collectAuditFiles(target, [...(ds.config.audit?.exclude ?? []), ...(opts.exclude ?? [])]);\n const report = buildAuditReport(\n { files, skipped, target: opts.displayPath ?? (toPosix(relative(process.cwd(), resolve(target))) || '.'), ...(opts.label ? { label: opts.label } : {}), ...(opts.version ? { version: opts.version } : {}), ...(opts.allowlist ? { allowlist: opts.allowlist } : {}) },\n ds.index,\n );\n return opts.baseline ? compareWithBaseline(report, opts.baseline) : report;\n}\n\n/**\n * Plan (and optionally write) the safe CSS autofix for every CSS/SCSS/Less file under `target`, with the audit's own\n * rules: the files bridge.config.json excludes from the audit (audit.exclude) are left alone, and so are the values an\n * ignore comment or the allowlist keeps (returned in `kept`).\n */\nexport function fixCss(\n target: string,\n ds: DesignSystemIndex,\n write: boolean,\n opts: { exclude?: string[] | undefined; allowlist?: AllowlistEntry[] | undefined } = {},\n): { file: string; edits: CssFixEdit[]; kept: CssFixKept[] }[] {\n const { root, files } = collectAuditFiles(target, opts.exclude ?? []);\n const out: { file: string; edits: CssFixEdit[]; kept: CssFixKept[] }[] = [];\n for (const f of files) {\n const lang = f.path.endsWith('.scss') || f.path.endsWith('.sass') ? 'scss' : f.path.endsWith('.less') ? 'less' : f.path.endsWith('.css') ? 'css' : null;\n if (!lang) continue;\n const allowlist = (opts.allowlist ?? []).filter((e) => toPosix(e.file) === f.path);\n const plan = planCssFixes(f.text, lang, ds, { allowlist });\n if (!plan.edits.length && !plan.kept.length) continue;\n if (write && plan.edits.length) writeFileSync(join(root, f.path), plan.output);\n out.push({ file: f.path, edits: plan.edits, kept: plan.kept });\n }\n return out;\n}\n","// A small CSS cascade for component specs: parses CSS modules into rules, matches selectors against a simplified\n// element tree in a given interaction state (default, hover, pressed, disabled) and computes each element's values with\n// inheritance. Enough for token-only component CSS (classes, attributes, :hover, :not(), :has(), combinators, @media);\n// it is not a browser. Pure: no DOM, no Node API.\n\nexport interface CssDecl {\n prop: string;\n value: string;\n}\n\nexport interface CssRule {\n /** CSS module the rule comes from (class names are scoped to it). */\n module: string;\n selector: Complex;\n /** Selector as written, for reports. */\n text: string;\n decls: CssDecl[];\n specificity: [number, number, number];\n order: number;\n}\n\ntype Simple =\n | { t: 'class'; name: string }\n | { t: 'tag'; name: string }\n | { t: 'any' }\n | { t: 'attr'; name: string; value?: string | undefined }\n | { t: 'pseudo'; name: string; args?: Complex[] | undefined }\n | { t: 'element'; name: string };\n\ntype Combinator = ' ' | '>' | '+' | '~';\n\nexport interface Complex {\n /** Left to right. The first part's combinator only matters in :has() (relative selectors). */\n parts: { combinator: Combinator | null; compound: Simple[] }[];\n}\n\n/** An element of a component's rendered tree, as the cascade sees it. */\nexport interface CssElement {\n tag: string;\n /** Module-scoped class names: \"<module>|<class>\". */\n classes: Set<string>;\n parent?: CssElement | undefined;\n children: CssElement[];\n /** Optional parts (hidden by default) do not exist for :has(), sibling and child-position selectors. */\n present: boolean;\n isRoot: boolean;\n /** A text field: matches input, :disabled, [data-disabled] in the disabled state, ::placeholder. */\n inputLike: boolean;\n /**\n * A Base UI part (`<BaseCheckbox.Root>`, `<BaseSwitch.Thumb>`): carries the data attributes Base UI sets from the\n * component's state (data-checked, data-unchecked, data-indeterminate, data-disabled).\n */\n baseUi?: boolean | undefined;\n /** Base UI parts: their checked state, the drawn one (\"state\") or their own (a checked option in a group). */\n checked?: 'state' | 'true' | 'false' | 'mixed' | undefined;\n /** data-* and aria-* attributes the JSX sets for the props drawn (`data-invalid={invalid || undefined}`), as strings. */\n attrs?: Map<string, string> | undefined;\n}\n\nexport interface CssState {\n hover: boolean;\n active: boolean;\n disabled: boolean;\n /** Checked state Base UI parts and native checkboxes carry: undefined when the component has none. */\n checked?: 'true' | 'false' | 'mixed' | undefined;\n}\n\nexport const DEFAULT_STATE: CssState = { hover: false, active: false, disabled: false };\n\n// ---------------------------------------------------------------------------------------------\n// Parsing\n\n/** Splits on `sep` at depth 0 (outside parentheses, brackets and quotes). */\nexport function splitTop(text: string, sep: string | RegExp): string[] {\n const out: string[] = [];\n let depth = 0;\n let quote = '';\n let buf = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n buf += ch;\n if (ch === quote) quote = '';\n continue;\n }\n if (ch === '\"' || ch === \"'\") quote = ch;\n else if (ch === '(' || ch === '[') depth++;\n else if (ch === ')' || ch === ']') depth--;\n if (depth === 0 && (typeof sep === 'string' ? ch === sep : sep.test(ch))) {\n out.push(buf);\n buf = '';\n continue;\n }\n buf += ch;\n }\n out.push(buf);\n return out.map((s) => s.trim()).filter(Boolean);\n}\n\n/** Parses one complex selector (\"a > .b:hover .c\"). Throws on syntax it does not know. */\nexport function parseSelector(text: string): Complex {\n let i = 0;\n const s = text.trim();\n const parts: Complex['parts'] = [];\n let combinator: Combinator | null = null;\n const ident = () => {\n const m = /^-?[A-Za-z_][\\w-]*/.exec(s.slice(i));\n if (!m) throw new Error(`Unexpected \"${s.slice(i, i + 12)}\" in selector \"${text}\"`);\n i += m[0].length;\n return m[0];\n };\n const parenArgs = () => {\n // s[i] === '('\n let depth = 0;\n const start = i + 1;\n for (; i < s.length; i++) {\n if (s[i] === '(') depth++;\n else if (s[i] === ')' && --depth === 0) break;\n }\n const inner = s.slice(start, i);\n i++; // ')'\n return inner;\n };\n while (i < s.length) {\n const compound: Simple[] = [];\n for (;;) {\n const ch = s[i];\n if (ch === '.') {\n i++;\n compound.push({ t: 'class', name: ident() });\n } else if (ch === '#') {\n i++;\n compound.push({ t: 'attr', name: 'id', value: ident() });\n } else if (ch === '*') {\n i++;\n compound.push({ t: 'any' });\n } else if (ch === '[') {\n const end = s.indexOf(']', i);\n const inner = s.slice(i + 1, end);\n i = end + 1;\n const m = /^\\s*([\\w-]+)\\s*(?:[~|^$*]?=\\s*[\"']?([^\"'\\]]*)[\"']?)?\\s*$/.exec(inner);\n compound.push({ t: 'attr', name: m?.[1] ?? inner, value: m?.[2] });\n } else if (ch === ':' && s[i + 1] === ':') {\n i += 2;\n compound.push({ t: 'element', name: ident() });\n } else if (ch === ':') {\n i++;\n const name = ident();\n if (s[i] === '(') {\n const inner = parenArgs();\n const args = ['not', 'is', 'where', 'has', 'matches'].includes(name) ? splitTop(inner, ',').map(parseRelative) : undefined;\n compound.push({ t: 'pseudo', name, args });\n } else compound.push({ t: 'pseudo', name });\n } else if (ch && /[A-Za-z]/.test(ch)) {\n compound.push({ t: 'tag', name: ident().toLowerCase() });\n } else break;\n }\n if (!compound.length) throw new Error(`Empty compound in selector \"${text}\"`);\n parts.push({ combinator, compound });\n // Combinator\n const rest = /^\\s*([>+~])?\\s*/.exec(s.slice(i))!;\n if (i + rest[0].length >= s.length) break;\n combinator = (rest[1] as Combinator | undefined) ?? ' ';\n if (!rest[0].length) throw new Error(`Unexpected \"${s.slice(i, i + 12)}\" in selector \"${text}\"`);\n i += rest[0].length;\n }\n return { parts };\n}\n\n/** A selector inside :has() may start with a combinator (\"> .icon\"). */\nfunction parseRelative(text: string): Complex {\n const m = /^\\s*([>+~])\\s*/.exec(text);\n const c = parseSelector(m ? text.slice(m[0].length) : text);\n c.parts[0]!.combinator = (m?.[1] as Combinator | undefined) ?? ' ';\n return c;\n}\n\nfunction specificityOf(c: Complex): [number, number, number] {\n const sp: [number, number, number] = [0, 0, 0];\n const add = (x: [number, number, number]) => {\n sp[0] += x[0];\n sp[1] += x[1];\n sp[2] += x[2];\n };\n for (const p of c.parts)\n for (const s of p.compound) {\n if (s.t === 'class') sp[1]++;\n else if (s.t === 'attr') s.name === 'id' ? sp[0]++ : sp[1]++;\n else if (s.t === 'tag' || s.t === 'element') sp[2]++;\n else if (s.t === 'pseudo') {\n if (s.name === 'where') continue;\n if (s.args) {\n const best = s.args.map(specificityOf).sort(cmpSpec).pop();\n if (best) add(best);\n } else sp[1]++;\n }\n }\n return sp;\n}\n\nconst cmpSpec = (a: [number, number, number], b: [number, number, number]) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\n/**\n * The viewport width a component in Figma is drawn for: the one Storybook renders the code images at\n * (@bridge-ds/visual references, 1200 x 800). Width media queries are read against it.\n */\nexport const SPEC_VIEWPORT_WIDTH = 1200;\n\n/**\n * Media queries a component in Figma is drawn under: a mouse (hover: hover), a screen, and a viewport\n * SPEC_VIEWPORT_WIDTH wide (`min-width` and `max-width` in px, alone or joined with `and`). Nothing else.\n */\nexport function mediaApplies(query: string): boolean {\n const q = query.replace(/\\s+/g, ' ').trim().toLowerCase();\n if (q.startsWith('@supports')) return true;\n const cond = q.replace(/^@media /, '');\n return cond.split(' and ').every((c) => {\n if (/^\\((any-)?hover: ?hover\\)$/.test(c) || c === 'screen' || c === 'all') return true;\n const w = /^\\((min|max)-width: ?([\\d.]+)px\\)$/.exec(c);\n if (!w) return false;\n return w[1] === 'min' ? SPEC_VIEWPORT_WIDTH >= Number(w[2]) : SPEC_VIEWPORT_WIDTH <= Number(w[2]);\n });\n}\n\n/** Rules of one CSS module, in source order. `@media` blocks are kept only when they apply in Figma. */\nexport function parseCssModule(module: string, text: string, startOrder = 0): { rules: CssRule[]; errors: string[] } {\n const rules: CssRule[] = [];\n const errors: string[] = [];\n let order = startOrder;\n const clean = text.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const walk = (src: string) => {\n let i = 0;\n let buf = '';\n while (i < src.length) {\n const ch = src[i]!;\n if (ch !== '{') {\n if (ch === ';' && buf.trim().startsWith('@')) buf = ''; // @import, @charset\n else buf += ch;\n i++;\n continue;\n }\n const head = buf.trim();\n buf = '';\n let depth = 1;\n const start = ++i;\n while (i < src.length && depth > 0) {\n if (src[i] === '{') depth++;\n else if (src[i] === '}') depth--;\n i++;\n }\n const inner = src.slice(start, i - 1);\n if (head.startsWith('@')) {\n if (/^@(media|supports)/.test(head) && mediaApplies(head)) walk(inner);\n continue;\n }\n const decls = splitTop(inner, ';')\n .map((d) => {\n const c = d.indexOf(':');\n return c < 0 ? undefined : { prop: d.slice(0, c).trim().toLowerCase(), value: d.slice(c + 1).trim().replace(/\\s*!important$/, '') };\n })\n .filter((d): d is CssDecl => !!d && !!d.prop);\n for (const sel of splitTop(head, ',')) {\n try {\n const selector = parseSelector(sel);\n rules.push({ module, selector, text: sel.replace(/\\s+/g, ' '), decls, specificity: specificityOf(selector), order: order++ });\n } catch (err) {\n errors.push(`${module}: ${(err as Error).message}`);\n }\n }\n }\n };\n walk(clean);\n return { rules, errors };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Matching\n\nconst TAG_ALIASES: Record<string, string[]> = {\n input: ['input', 'baseinput'],\n textarea: ['textarea'],\n button: ['button', 'basebutton'],\n svg: ['svg'],\n};\n\nfunction tagMatches(el: CssElement, name: string): boolean {\n const tag = el.tag.toLowerCase();\n return (TAG_ALIASES[name] ?? [name]).includes(tag) || (name === 'input' && el.inputLike);\n}\n\nconst presentChildren = (el: CssElement) => el.children.filter((c) => c.present);\n\nfunction siblingsBefore(el: CssElement): CssElement[] {\n if (!el.parent) return [];\n const sibs = presentChildren(el.parent);\n const idx = sibs.indexOf(el);\n return idx < 0 ? [] : sibs.slice(0, idx);\n}\n\n/** Base UI's checked attributes for a state: data-checked, data-unchecked or data-indeterminate, and aria-checked. */\nfunction checkedAttr(name: string, checked: CssState['checked']): string | undefined {\n if (checked === undefined) return undefined;\n if (name === 'aria-checked') return checked;\n if (name === 'data-checked' || name === 'data-selected' || name === 'data-active') return checked === 'true' ? '' : undefined;\n if (name === 'data-unchecked') return checked === 'false' ? '' : undefined;\n if (name === 'data-indeterminate') return checked === 'mixed' ? '' : undefined;\n return undefined;\n}\n\nfunction attrMatches(el: CssElement, s: Extract<Simple, { t: 'attr' }>, state: CssState): boolean {\n switch (s.name) {\n case 'data-disabled':\n case 'disabled':\n return state.disabled && (el.isRoot || el.inputLike || !!el.baseUi);\n default: {\n // Base UI parts carry the checked state; any element carries the data-* and aria-* attributes its JSX sets.\n const own = el.checked === 'state' || (el.inputLike && el.checked === undefined) ? state.checked : el.checked;\n const fromState = el.baseUi || el.inputLike ? checkedAttr(s.name, own) : undefined;\n const v = fromState ?? el.attrs?.get(s.name);\n // data-loading, data-pressed, data-popup-open...: not set by the drawn props, so not part of the drawn states.\n if (v === undefined) return false;\n return s.value === undefined || s.value === v;\n }\n }\n}\n\nfunction pseudoMatches(el: CssElement, s: Extract<Simple, { t: 'pseudo' }>, state: CssState, module: string): boolean {\n switch (s.name) {\n case 'hover':\n return state.hover;\n case 'active':\n return state.active;\n case 'disabled':\n return state.disabled && (el.isRoot || el.inputLike);\n case 'enabled':\n return !state.disabled;\n case 'placeholder-shown':\n return el.inputLike;\n case 'checked':\n return (el.inputLike || !!el.baseUi) && (el.checked === 'state' || el.checked === undefined ? state.checked : el.checked) === 'true';\n case 'indeterminate':\n return (el.inputLike || !!el.baseUi) && (el.checked === 'state' || el.checked === undefined ? state.checked : el.checked) === 'mixed';\n case 'not':\n return !(s.args ?? []).some((a) => matchComplex(a, el, state, module));\n case 'is':\n case 'where':\n case 'matches':\n return (s.args ?? []).some((a) => matchComplex(a, el, state, module));\n case 'has':\n return (s.args ?? []).some((a) => hasMatch(a, el, state, module));\n case 'first-child':\n return !!el.parent && presentChildren(el.parent)[0] === el;\n case 'last-child': {\n const sibs = el.parent ? presentChildren(el.parent) : [];\n return sibs[sibs.length - 1] === el;\n }\n case 'only-child':\n return !!el.parent && presentChildren(el.parent).length === 1;\n default:\n // focus, focus-visible, focus-within, checked, invalid...: not drawn.\n return false;\n }\n}\n\nfunction compoundMatches(compound: Simple[], el: CssElement, state: CssState, module: string, pseudoElement?: string): boolean {\n let sawElement = false;\n for (const s of compound) {\n switch (s.t) {\n case 'class':\n if (!el.classes.has(`${module}|${s.name}`)) return false;\n break;\n case 'tag':\n if (!tagMatches(el, s.name)) return false;\n break;\n case 'any':\n break;\n case 'attr':\n if (!attrMatches(el, s, state)) return false;\n break;\n case 'pseudo':\n if (!pseudoMatches(el, s, state, module)) return false;\n break;\n case 'element':\n sawElement = true;\n if (s.name !== pseudoElement) return false;\n break;\n }\n }\n return pseudoElement ? sawElement : !sawElement;\n}\n\nfunction matchAt(c: Complex, i: number, el: CssElement, state: CssState, module: string, anchor?: CssElement, pseudoElement?: string): boolean {\n const part = c.parts[i]!;\n if (!compoundMatches(part.compound, el, state, module, i === c.parts.length - 1 ? pseudoElement : undefined)) return false;\n if (i === 0) {\n if (!anchor) return true;\n switch (part.combinator ?? ' ') {\n case '>':\n return el.parent === anchor;\n case ' ': {\n for (let p = el.parent; p; p = p.parent) if (p === anchor) return true;\n return false;\n }\n case '+':\n return siblingsBefore(el).slice(-1)[0] === anchor;\n case '~':\n return siblingsBefore(el).includes(anchor);\n }\n }\n switch (part.combinator) {\n case '>':\n return !!el.parent && matchAt(c, i - 1, el.parent, state, module, anchor);\n case ' ': {\n for (let p = el.parent; p; p = p.parent) if (matchAt(c, i - 1, p, state, module, anchor)) return true;\n return false;\n }\n case '+': {\n const prev = siblingsBefore(el).slice(-1)[0];\n return !!prev && matchAt(c, i - 1, prev, state, module, anchor);\n }\n case '~':\n return siblingsBefore(el).some((p) => matchAt(c, i - 1, p, state, module, anchor));\n default:\n return false;\n }\n}\n\nexport function matchComplex(c: Complex, el: CssElement, state: CssState, module: string, pseudoElement?: string): boolean {\n return matchAt(c, c.parts.length - 1, el, state, module, undefined, pseudoElement);\n}\n\nfunction descendants(el: CssElement): CssElement[] {\n const out: CssElement[] = [];\n const walk = (e: CssElement) => {\n for (const c of presentChildren(e)) {\n out.push(c);\n walk(c);\n }\n };\n walk(el);\n return out;\n}\n\nfunction hasMatch(c: Complex, anchor: CssElement, state: CssState, module: string): boolean {\n const first = c.parts[0]!.combinator;\n const pool = first === '+' || first === '~' ? (anchor.parent ? presentChildren(anchor.parent) : []) : descendants(anchor);\n return pool.some((el) => matchAt(c, c.parts.length - 1, el, state, module, anchor));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cascade\n\nconst SIDES = ['top', 'right', 'bottom', 'left'] as const;\nconst BORDER_STYLES = new Set(['none', 'hidden', 'solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset']);\n\nfunction boxValues(parts: string[]): [string, string, string, string] | undefined {\n const [a, b = a, c = a, d = b] = parts;\n return a === undefined ? undefined : [a, b!, c!, d!];\n}\n\n/** Expands the shorthands component CSS uses into longhands, so later longhands override them as in a browser. */\nexport function expandDecl(d: CssDecl): CssDecl[] {\n const parts = splitTop(d.value, /\\s/);\n const sides = (prefix: string, suffix: string, vals: string[] | undefined) =>\n vals ? SIDES.map((s, i) => ({ prop: `${prefix}${s}${suffix}`, value: vals[i]! })) : [d];\n switch (d.prop) {\n case 'padding':\n return sides('padding-', '', boxValues(parts));\n case 'padding-inline': {\n const [s, e = s] = parts;\n return [\n { prop: 'padding-left', value: s! },\n { prop: 'padding-right', value: e! },\n ];\n }\n case 'padding-block': {\n const [s, e = s] = parts;\n return [\n { prop: 'padding-top', value: s! },\n { prop: 'padding-bottom', value: e! },\n ];\n }\n case 'padding-inline-start':\n return [{ prop: 'padding-left', value: d.value }];\n case 'padding-inline-end':\n return [{ prop: 'padding-right', value: d.value }];\n case 'padding-block-start':\n return [{ prop: 'padding-top', value: d.value }];\n case 'padding-block-end':\n return [{ prop: 'padding-bottom', value: d.value }];\n case 'border-width':\n return sides('border-', '-width', boxValues(parts));\n case 'border-color':\n return sides('border-', '-color', boxValues(parts));\n case 'border':\n case 'border-top':\n case 'border-right':\n case 'border-bottom':\n case 'border-left': {\n const { width, color } = splitBorder(parts);\n const which = d.prop === 'border' ? SIDES : [d.prop.slice(7) as (typeof SIDES)[number]];\n return which.flatMap((s) => [\n { prop: `border-${s}-width`, value: width },\n { prop: `border-${s}-color`, value: color },\n ]);\n }\n case 'border-inline-start':\n case 'border-inline-end':\n case 'border-block-start':\n case 'border-block-end': {\n // Logical sides, left to right and top to bottom (the components are drawn in a left-to-right file).\n const side = { 'border-inline-start': 'left', 'border-inline-end': 'right', 'border-block-start': 'top', 'border-block-end': 'bottom' }[d.prop]!;\n return expandDecl({ ...d, prop: `border-${side}` });\n }\n case 'inset-block-start':\n return [{ prop: 'top', value: d.value }];\n case 'inset-block-end':\n return [{ prop: 'bottom', value: d.value }];\n case 'inset-inline-start':\n return [{ prop: 'left', value: d.value }];\n case 'inset-inline-end':\n return [{ prop: 'right', value: d.value }];\n case 'inset': {\n const v = boxValues(parts);\n return v ? SIDES.map((side, i) => ({ prop: side, value: v[i]! })) : [d];\n }\n case 'inset-block': {\n const [a, b = a] = parts;\n return [\n { prop: 'top', value: a! },\n { prop: 'bottom', value: b! },\n ];\n }\n case 'inset-inline': {\n const [a, b = a] = parts;\n return [\n { prop: 'left', value: a! },\n { prop: 'right', value: b! },\n ];\n }\n case 'place-items': {\n const [align, justify = align] = parts;\n return [\n { prop: 'align-items', value: align! },\n { prop: 'justify-items', value: justify! },\n ];\n }\n case 'text-decoration': {\n const line = parts.filter((x) => /^(none|underline|overline|line-through)$/.test(x));\n return line.length ? [{ prop: 'text-decoration-line', value: line.join(' ') }] : [d];\n }\n case 'gap': {\n const [row, col = row] = parts;\n return [\n { prop: 'row-gap', value: row! },\n { prop: 'column-gap', value: col! },\n ];\n }\n case 'flex-flow': {\n const out: CssDecl[] = [];\n for (const x of parts) {\n if (/^(row|column)(-reverse)?$/.test(x)) out.push({ prop: 'flex-direction', value: x });\n else if (/wrap/.test(x)) out.push({ prop: 'flex-wrap', value: x });\n }\n return out.length ? out : [d];\n }\n case 'font':\n return d.value === 'inherit' ? ['font-family', 'font-size', 'font-weight', 'line-height'].map((prop) => ({ prop, value: 'inherit' })) : [d];\n default:\n return [d];\n }\n}\n\nfunction splitBorder(parts: string[]): { width: string; color: string } {\n const styleAt = parts.findIndex((p) => BORDER_STYLES.has(p));\n if (styleAt >= 0) {\n const width = parts.slice(0, styleAt).join(' ') || parts.slice(styleAt + 1).find((p) => /width|^\\d/.test(p)) || 'medium';\n const color = parts.slice(styleAt + 1).filter((p) => p !== width).join(' ') || 'currentcolor';\n return { width, color };\n }\n if (parts.length === 1 && (parts[0] === '0' || parts[0] === 'none')) return { width: '0', color: 'currentcolor' };\n const width = parts.find((p) => /width|^\\d/.test(p)) ?? 'medium';\n return { width, color: parts.filter((p) => p !== width).join(' ') || 'currentcolor' };\n}\n\n/** Properties a child inherits from its parent (custom properties always inherit). */\n// text-decoration is not inherited in CSS, but it is drawn through the text of the element's inline children: for\n// the drawn text it behaves as inherited.\nexport const INHERITED = new Set(['color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'cursor', 'white-space', 'visibility', 'text-decoration-line', 'text-decoration-color']);\n\nexport interface Declared {\n prop: string;\n value: string;\n rule: CssRule;\n}\n\n/** Winning declarations for an element (own rules only), keyed by longhand property. */\nexport function declaredFor(rules: CssRule[], el: CssElement, state: CssState, pseudoElement?: string): Map<string, Declared> {\n const matched = rules.filter((r) => matchComplex(r.selector, el, state, r.module, pseudoElement));\n matched.sort((a, b) => cmpSpec(a.specificity, b.specificity) || a.order - b.order);\n const out = new Map<string, Declared>();\n for (const r of matched) for (const d of r.decls) for (const x of expandDecl(d)) out.set(x.prop, { prop: x.prop, value: x.value, rule: r });\n return out;\n}\n\n/** Computed values: inherited ones from the parent, then the element's own declarations (\"inherit\" takes the parent's). */\nexport function computeValues(own: Map<string, Declared>, parent: Map<string, string> | undefined): Map<string, string> {\n const out = new Map<string, string>();\n if (parent) for (const [k, v] of parent) if (k.startsWith('--') || INHERITED.has(k)) out.set(k, v);\n for (const [k, d] of own) {\n // `color: currentcolor` is the parent's color (CSS Color 4), like inherit.\n if (d.value === 'inherit' || (k === 'color' && d.value.trim().toLowerCase() === 'currentcolor')) {\n const pv = parent?.get(k);\n if (pv !== undefined) out.set(k, pv);\n else out.delete(k);\n } else if (k.startsWith('--') && d.value === 'initial') {\n // A custom property reset on purpose (`--_col-width: initial`): a var() of it leaves the property unset.\n out.set(k, 'initial');\n } else if (d.value === 'initial' || d.value === 'unset') out.delete(k);\n else out.set(k, d.value);\n }\n return out;\n}\n","// Motion for component specs: reads the CSS `transition` of the parts that change between two variants (hover, press,\n// checked) and resolves it from the motion tokens to what a Figma prototype plays (Smart animate, a duration in ms and\n// an easing). Also lists the motion Figma cannot play: looping keyframe animations, keyboard focus, popups opening.\n// Pure: no DOM, no Node API.\n\nimport type { SpecEasing, SpecMotionNote, SpecTransition } from '../component-spec';\nimport { type CssRule, splitTop } from './spec-css';\n\n/** A CSS custom property's token, with its value resolved in the default modes (durations and easings). */\nexport interface MotionToken {\n path: string;\n type: string;\n value?: unknown;\n}\n\n/** One entry of a `transition` list: the property, and its duration, easing and delay as written. */\nexport interface TransitionEntry {\n property: string;\n duration: string;\n easing: string;\n delay: string;\n}\n\n/** CSS easing keywords, as cubic beziers (CSS Easing Functions Level 1). */\nconst KEYWORDS: Record<string, [number, number, number, number]> = {\n ease: [0.25, 0.1, 0.25, 1],\n 'ease-in': [0.42, 0, 1, 1],\n 'ease-out': [0, 0, 0.58, 1],\n 'ease-in-out': [0.42, 0, 0.58, 1],\n};\n\n/** Properties that never show in a drawing: not compared between variants. */\nconst SILENT = /^(cursor|pointer-events|user-select|-webkit-.*|transition.*|animation.*|will-change|outline.*|content|touch-action)$/;\n\n/** `var(--x)` replaced by the value of a non-token custom property the element has, recursively. */\nexport function substituteVars(raw: string, computed: Map<string, string>, tokens: Map<string, MotionToken>, depth = 0): string {\n if (depth > 12) return raw;\n return raw.replace(/var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]*(?:\\([^()]*\\)[^()]*)*))?\\)/g, (m, name: string, fallback?: string) => {\n if (tokens.has(name)) return m;\n const v = computed.get(name);\n if (v !== undefined && v !== 'initial') return substituteVars(v, computed, tokens, depth + 1);\n return fallback !== undefined ? substituteVars(fallback.trim(), computed, tokens, depth + 1) : m;\n });\n}\n\nconst isTime = (t: string, tokens: Map<string, MotionToken>) => /^-?[\\d.]+m?s$/i.test(t) || tokens.get(varName(t) ?? '')?.type === 'duration';\nconst varName = (t: string) => /^var\\(\\s*(--[\\w-]+)/.exec(t)?.[1];\n\n/**\n * The transitions an element declares: the `transition` shorthand and the longhands (transition-property, -duration,\n * -timing-function, -delay; shorter lists repeat, as in CSS). Local custom properties are substituted first.\n */\nexport function parseTransitions(computed: Map<string, string>, tokens: Map<string, MotionToken>): TransitionEntry[] {\n const sub = (k: string) => {\n const v = computed.get(k);\n return v === undefined ? undefined : substituteVars(v, computed, tokens);\n };\n const out: TransitionEntry[] = [];\n const short = sub('transition');\n if (short && short !== 'none') {\n for (const item of splitTop(short, ',')) {\n const words = splitTop(item.trim(), /\\s/).filter(Boolean);\n const e: TransitionEntry = { property: 'all', duration: '0s', easing: 'ease', delay: '0s' };\n let times = 0;\n for (const w of words) {\n if (isTime(w, tokens)) {\n if (times++ === 0) e.duration = w;\n else e.delay = w;\n } else if (KEYWORDS[w] || w === 'linear' || /^(cubic-bezier|steps|linear)\\(/.test(w) || /^step-(start|end)$/.test(w) || tokens.get(varName(w) ?? '')?.type === 'cubicBezier') e.easing = w;\n else e.property = w;\n }\n out.push(e);\n }\n }\n const props = sub('transition-property');\n if (props === undefined) return out;\n const list = (k: string, def: string) => {\n const v = sub(k);\n return v === undefined ? [def] : splitTop(v, ',').map((x) => x.trim());\n };\n const durations = list('transition-duration', '0s');\n const easings = list('transition-timing-function', 'ease');\n const delays = list('transition-delay', '0s');\n return splitTop(props, ',')\n .map((p) => p.trim())\n .filter((p) => p && p !== 'none')\n .map((property, i) => ({ property, duration: durations[i % durations.length]!, easing: easings[i % easings.length]!, delay: delays[i % delays.length]! }));\n}\n\n/** A duration as milliseconds, with its token: \"var(--motion-duration-fast)\" -> 150 (motion.duration.fast). */\nexport function resolveDuration(raw: string, tokens: Map<string, MotionToken>): { ms: number; token?: string } | undefined {\n const v = raw.trim();\n const lit = /^(-?[\\d.]+)(m?s)$/i.exec(v);\n if (lit) return { ms: Number(lit[1]) * (lit[2]!.toLowerCase() === 's' ? 1000 : 1) };\n const t = tokens.get(varName(v) ?? '');\n if (!t || t.type !== 'duration') return undefined;\n const value = t.value as { value?: number; unit?: string } | string | undefined;\n if (typeof value === 'string') {\n const r = resolveDuration(value, new Map());\n return r ? { ms: r.ms, token: t.path } : undefined;\n }\n if (value && typeof value.value === 'number') return { ms: value.value * (value.unit === 's' ? 1000 : 1), token: t.path };\n return undefined;\n}\n\n/**\n * An easing Figma can play, with its token: a cubic bezier (token or `cubic-bezier()`, or a CSS keyword) is played\n * exactly as Figma's custom bezier; linear as linear. steps() has no Figma easing: linear, recorded as approximated.\n */\nexport function resolveEasing(raw: string, tokens: Map<string, MotionToken>): { easing: SpecEasing; token?: string; approximated?: string } | undefined {\n const v = raw.trim().toLowerCase();\n const curve = (b: number[]): SpecEasing =>\n b[0] === 0 && b[1] === 0 && b[2] === 1 && b[3] === 1 ? { type: 'LINEAR' } : { type: 'CUSTOM_CUBIC_BEZIER', bezier: [b[0]!, b[1]!, b[2]!, b[3]!] };\n if (v === 'linear') return { easing: { type: 'LINEAR' } };\n if (KEYWORDS[v]) return { easing: curve(KEYWORDS[v]!) };\n const cb = /^cubic-bezier\\(([^)]*)\\)$/.exec(v);\n if (cb) {\n const n = cb[1]!.split(',').map((x) => Number(x.trim()));\n return n.length === 4 && n.every((x) => Number.isFinite(x)) ? { easing: curve(n) } : undefined;\n }\n if (/^(steps\\(|step-(start|end)$)/.test(v)) return { easing: { type: 'LINEAR' }, approximated: `${raw.trim()} moves in steps, Figma has no stepped easing: linear` };\n if (/^linear\\(/.test(v)) return { easing: { type: 'LINEAR' }, approximated: 'a linear() curve has no Figma easing: linear' };\n const t = tokens.get(varName(raw.trim()) ?? '');\n if (!t || t.type !== 'cubicBezier') return undefined;\n const value = t.value;\n if (Array.isArray(value) && value.length === 4 && value.every((x) => typeof x === 'number')) return { easing: curve(value as number[]), token: t.path };\n if (typeof value === 'string') {\n const r = resolveEasing(value, new Map());\n return r ? { ...r, token: t.path } : undefined;\n }\n return undefined;\n}\n\n/** The property a longhand belongs to, without its side: border-top-color -> border-color, padding-left -> padding. */\nexport const shorthandOf = (prop: string) =>\n prop\n .replace(/-(top|bottom)-(left|right)(?=-|$)/, '')\n .replace(/-(top|right|bottom|left)(?=-|$)/, '')\n .replace(/-(block|inline)(-(start|end))?(?=-|$)/, '');\n\n/** The transition entry that animates `prop`: same name, `all`, or a shorthand of it (border-color for border-top-color). */\nexport function entryFor(prop: string, entries: TransitionEntry[]): TransitionEntry | undefined {\n const general = shorthandOf(prop);\n // The last entry naming a property wins, as in CSS.\n for (let i = entries.length - 1; i >= 0; i--) {\n const p = entries[i]!.property;\n if (p === 'all' || p === prop || p === general || prop.startsWith(`${p}-`) || general.startsWith(`${p}-`)) return entries[i];\n }\n return undefined;\n}\n\n/** CSS properties whose value differs between two computed styles of a part (custom properties substituted). */\nexport function changedProperties(from: Map<string, string> | undefined, to: Map<string, string> | undefined, tokens: Map<string, MotionToken>): string[] {\n const a = from ?? new Map<string, string>();\n const b = to ?? new Map<string, string>();\n const out: string[] = [];\n for (const k of new Set([...a.keys(), ...b.keys()])) {\n if (k.startsWith('--') || SILENT.test(k)) continue;\n const x = a.get(k);\n const y = b.get(k);\n if ((x === undefined ? undefined : substituteVars(x, a, tokens)) !== (y === undefined ? undefined : substituteVars(y, b, tokens))) out.push(k);\n }\n return out.sort();\n}\n\nconst fmtMs = (ms: number) => `${Math.round(ms)} ms`;\n\n/**\n * The transition Figma plays when a component goes from one variant to another: for every part, the CSS properties that\n * change, animated by the destination state's `transition` (as in CSS). One duration and easing per reaction in\n * Figma: the longest animated change, recorded as approximated when parts animate at other speeds or with a delay.\n * Null when nothing that changes is animated in code (an instant change).\n */\nexport function transitionBetween(\n from: Map<string, Map<string, string>>,\n to: Map<string, Map<string, string>>,\n tokens: Map<string, MotionToken>,\n): SpecTransition | null {\n const animated: { prop: string; ms: number; durationToken?: string; easing: SpecEasing; easingToken?: string; approximated?: string; delay: number }[] = [];\n for (const id of new Set([...from.keys(), ...to.keys()])) {\n const changed = changedProperties(from.get(id), to.get(id), tokens);\n if (!changed.length) continue;\n const entries = parseTransitions(to.get(id) ?? new Map(), tokens);\n for (const prop of changed) {\n const e = entryFor(prop, entries);\n if (!e) continue;\n const d = resolveDuration(e.duration, tokens);\n const ease = resolveEasing(e.easing, tokens);\n if (!d || d.ms <= 0 || !ease) continue;\n const delay = resolveDuration(e.delay, tokens)?.ms ?? 0;\n animated.push({ prop, ms: d.ms, ...(d.token ? { durationToken: d.token } : {}), easing: ease.easing, ...(ease.token ? { easingToken: ease.token } : {}), ...(ease.approximated ? { approximated: ease.approximated } : {}), delay });\n }\n }\n if (!animated.length) return null;\n const main = animated.reduce((m, x) => (x.ms > m.ms ? x : m), animated[0]!);\n const notes: string[] = [];\n const speeds = new Set(animated.map((x) => `${x.ms}|${JSON.stringify(x.easing)}`));\n if (speeds.size > 1) {\n const others = [...new Set(animated.filter((x) => x.ms !== main.ms).map((x) => fmtMs(x.ms)))];\n notes.push(others.length ? `parts move at ${[fmtMs(main.ms), ...others].join(' and ')} in code, Figma plays one speed: ${fmtMs(main.ms)}` : 'parts use different easings in code, Figma plays one');\n }\n if (animated.some((x) => x.delay > 0)) notes.push('a transition delay in code is not played');\n for (const x of animated) if (x.approximated && !notes.includes(x.approximated)) notes.push(x.approximated);\n return {\n duration: main.ms,\n ...(main.durationToken ? { durationToken: main.durationToken } : {}),\n easing: main.easing,\n ...(main.easingToken ? { easingToken: main.easingToken } : {}),\n properties: [...new Set(animated.map((x) => shorthandOf(x.prop)))].sort(),\n ...(notes.length ? { approximated: notes.join('; ') } : {}),\n };\n}\n\n/** Class names (\"<module>|<class>\") of the last compound of a selector: the element a rule styles. */\nfunction targetClasses(rule: CssRule): string[] {\n const last = rule.selector.parts[rule.selector.parts.length - 1];\n return (last?.compound ?? []).filter((s): s is { t: 'class'; name: string } => s.t === 'class').map((s) => `${rule.module}|${s.name}`);\n}\n\nconst OPEN_ATTR = /\\[data-(starting-style|ending-style|open|closed|popup-open|panel-open|expanded)\\]/;\n\n/**\n * Motion a Figma prototype cannot play, for the parts a set draws (`classes`: their \"<module>|<class>\" names):\n * keyframe animations (a spinner, a shimmer), the keyboard focus ring, and opening or closing (a popup's enter motion,\n * an accordion panel). `view` is the set's view: a popup drawn open, or a trigger without its popup.\n */\nexport function motionNotes(\n rules: CssRule[],\n classes: Set<string>,\n tokens: Map<string, MotionToken>,\n view?: 'popup' | 'without-popup',\n elements: string[][] = [...classes].map((c) => [c]),\n): SpecMotionNote[] {\n const out: SpecMotionNote[] = [];\n const add = (n: SpecMotionNote) => {\n if (!out.some((x) => x.what === n.what)) out.push(n);\n };\n const styled = (r: CssRule) => targetClasses(r).some((c) => classes.has(c));\n const opened = new Set<string>();\n for (const r of rules) {\n if (!styled(r)) continue;\n const values = new Map(r.decls.map((d) => [d.prop, d.value]));\n const anim = values.get('animation') ?? values.get('animation-name');\n if (anim && !/^none\\b/.test(anim.trim())) {\n const words = splitTop(anim.trim(), /\\s/).filter(Boolean);\n const name = values.get('animation-name') ?? words.find((w) => !isTime(w, tokens) && !resolveEasing(w, tokens) && !/^(infinite|\\d+|alternate|reverse|normal|forwards|backwards|both|running|paused)$/.test(w));\n const dur = words.map((w) => resolveDuration(w, tokens)).find(Boolean) ?? (values.get('animation-duration') ? resolveDuration(values.get('animation-duration')!, tokens) : undefined);\n const loops = /\\binfinite\\b/.test(anim) || values.get('animation-iteration-count') === 'infinite';\n add({\n what: `${loops ? 'Looping animation' : 'Keyframe animation'} ${name ?? ''}${dur ? `, ${fmtMs(dur.ms)}` : ''}`.replace(/\\s+,/, ',').trim(),\n reason: loops ? 'a Figma component cannot loop an animation on its own' : 'keyframes have no Figma equivalent between variants',\n ...(dur?.token ? { durationToken: dur.token } : {}),\n });\n }\n if (/:focus(-visible|-within)?\\b/.test(r.text)) add({ what: 'Keyboard focus', reason: 'the focus ring shows when a keyboard moves to the component; Figma prototypes have no focus state' });\n if (OPEN_ATTR.test(r.text)) {\n for (const c of targetClasses(r)) if (classes.has(c)) opened.add(c);\n add({\n what: view === 'popup' ? 'Opening and closing the popup' : 'Opening and closing',\n reason: view === 'popup' ? 'the popup is its own set; a Figma component cannot open another one from its trigger' : 'the open state is not drawn as a variant',\n });\n }\n }\n const note = out.find((n) => n.what.startsWith('Opening and closing'));\n if (note) {\n const { enter, exit } = openingTransitions(rules, elements.filter((el) => el.some((c) => opened.has(c))), tokens);\n if (enter) note.enter = enter;\n if (exit) note.exit = exit;\n }\n return out;\n}\n\nconst ENDING_ATTR = /\\[data-(ending-style|closed)\\]/;\nconst STATE_PSEUDO = /:(hover|active|focus|focus-visible|focus-within|disabled|checked)\\b/;\n\n/**\n * The code's transitions when a part opens and when it closes, for the elements with open-state rules (`elements`, each\n * the \"<module>|<class>\" names one element carries): the\n * destination state's `transition` animates, as in CSS. Opening ends in the base rules plus the open rules\n * ([data-open], [data-panel-open]...); closing ends in the base rules plus [data-ending-style] / [data-closed]. The\n * properties are the ones those rules change. One transition per direction: the longest, as for interactions.\n */\nexport function openingTransitions(rules: CssRule[], elements: string[][], tokens: Map<string, MotionToken>): { enter: SpecTransition | null; exit: SpecTransition | null } {\n type Found = { ms: number; durationToken?: string; easing: SpecEasing; easingToken?: string; props: Set<string> };\n const best: { enter?: Found; exit?: Found } = {};\n for (const el of elements) {\n const mine = rules.filter((r) => targetClasses(r).some((c) => el.includes(c))).sort((a, b) => a.order - b.order);\n // Base: the element at rest, without any state (open, swiping, hover...).\n const base = mine.filter((r) => !/\\[data-/.test(r.text) && !STATE_PSEUDO.test(r.text));\n const states = mine.filter((r) => OPEN_ATTR.test(r.text));\n const opens = states.filter((r) => !/\\[data-(starting-style|ending-style|closed)\\]/.test(r.text));\n const endings = states.filter((r) => ENDING_ATTR.test(r.text));\n const changed = new Set(states.flatMap((r) => r.decls.map((d) => d.prop)).filter((p) => !p.startsWith('--') && !SILENT.test(p)));\n if (!changed.size) continue;\n const settle = (list: CssRule[]) => {\n const computed = new Map<string, string>();\n for (const r of [...list].sort((a, b) => a.order - b.order)) for (const d of r.decls) computed.set(d.prop, d.value);\n return computed;\n };\n const find = (computed: Map<string, string>): Found | undefined => {\n const entries = parseTransitions(computed, tokens);\n let main: Found | undefined;\n const props = new Set<string>();\n for (const prop of changed) {\n const e = entryFor(prop, entries);\n if (!e) continue;\n const d = resolveDuration(e.duration, tokens);\n const ease = resolveEasing(e.easing, tokens);\n if (!d || d.ms <= 0 || !ease) continue;\n props.add(shorthandOf(prop));\n if (!main || d.ms > main.ms) main = { ms: d.ms, ...(d.token ? { durationToken: d.token } : {}), easing: ease.easing, ...(ease.token ? { easingToken: ease.token } : {}), props };\n }\n return main;\n };\n for (const [dir, found] of [['enter', find(settle([...base, ...opens]))], ['exit', find(settle([...base, ...endings]))]] as const) {\n if (!found) continue;\n const cur = best[dir];\n if (!cur || found.ms > cur.ms) best[dir] = { ...found, props: new Set([...(cur?.props ?? []), ...found.props]) };\n else for (const p of found.props) cur.props.add(p);\n }\n }\n const out = (f: Found | undefined): SpecTransition | null =>\n f ? { duration: f.ms, ...(f.durationToken ? { durationToken: f.durationToken } : {}), easing: f.easing, ...(f.easingToken ? { easingToken: f.easingToken } : {}), properties: [...f.props].sort() } : null;\n return { enter: out(best.enter), exit: out(best.exit) };\n}\n","// Component spec generator: reads a component's TSX (props, defaults, rendered tree) and its CSS modules, and derives a\n// ComponentSpec (see ../component-spec.ts) a design tool can rebuild: variant axes from string-literal union props,\n// a State axis from the interaction states the CSS styles, TEXT and BOOLEAN properties, parts (frames, text, icons),\n// and per variant the token path behind every fill, stroke, radius, padding, gap, size and text property.\n//\n// Derived from code, never hand-maintained: `npm run specs` writes packages/react/component-specs.json, and a test\n// fails when the committed file is out of date. Uses the TypeScript parser (Node only, like the audit).\n\nimport { readFileSync, readdirSync, statSync } from 'node:fs';\nimport { join, posix, relative } from 'node:path';\nimport ts from 'typescript';\nimport {\n COLOR_FIELDS,\n COMPONENT_SPECS_VERSION,\n type ComponentSpec,\n type ComponentSpecsFile,\n type SpecAxis,\n type SpecCoverage,\n type SpecExample,\n type SpecField,\n type SpecLayout,\n type SpecPart,\n type SpecIcon,\n type SpecIconStyle,\n type SpecInteraction,\n type SpecTrigger,\n type SpecProperty,\n type SpecSlot,\n type SpecUnmapped,\n type SpecValue,\n type SpecVariant,\n type SpecVector,\n hashSpec,\n iconComponentName,\n specHash,\n validateComponentSpec,\n tokenCssVar,\n variantKeyOf,\n} from '../component-spec';\nimport { CONFIG_FILE, loadConfig } from '../config';\nimport { resolve } from '../resolver';\nimport { buildTokenSet, defaultContext, layoutOptions } from '../token-set';\nimport { type CssElement, type CssRule, type CssState, DEFAULT_STATE, computeValues, declaredFor, parseCssModule, splitTop } from './spec-css';\nimport { motionNotes, transitionBetween } from './spec-motion';\n\nexport interface TokenInfo {\n path: string;\n type: string;\n /** Durations and easings: the value in the default modes (`{ value: 150, unit: 'ms' }`, `[0.2, 0, 0, 1]`), for motion. */\n value?: unknown;\n}\n\nexport interface SpecGeneratorOptions {\n /** Repo-relative components directory (\"packages/react/src/components\"). */\n componentsDir: string;\n /** Reads a repo-relative file; undefined when it does not exist. */\n read: (path: string) => string | undefined;\n /** CSS custom property -> token. */\n tokens: Map<string, TokenInfo>;\n styleSuffix?: string | undefined;\n /** Repo-relative ESM build of lucide-react (\"node_modules/lucide-react/dist/esm\"), for the icons section. */\n lucideDir?: string | undefined;\n /** Every component folder, to find components a file exports besides its own (Radio in RadioGroup.tsx). */\n components?: string[] | undefined;\n /** Repo-relative global stylesheet apps load before the components (inherited text styles, tag rules). */\n baseCss?: string | undefined;\n /** Repo-relative folder of specs drafted with Claude; default `component-spec-overrides` next to the specs file. */\n overridesDir?: string | undefined;\n}\n\n/** States drawn as the State axis when the CSS styles them, with the selector state they stand for. */\nconst STATES: { name: string; state: CssState }[] = [\n { name: 'Default', state: DEFAULT_STATE },\n { name: 'Hover', state: { hover: true, active: false, disabled: false } },\n { name: 'Pressed', state: { hover: true, active: true, disabled: false } },\n { name: 'Disabled', state: { hover: false, active: false, disabled: true } },\n];\n\n/** Most variants a set may get; a component past it is reported instead of generated. */\nconst MAX_VARIANTS = 240;\n\n/** CSS properties that matter visually but have no mapping in this version. Others (cursor, transition...) are silent. */\nconst REPORTED: Record<string, string> = {\n 'box-shadow': 'shadows are code-only tokens (no Figma variable)',\n outline: 'focus rings are not drawn',\n transform: 'transforms are not drawn',\n filter: 'filters are not drawn',\n 'margin-left': 'margins have no auto layout equivalent',\n 'margin-right': 'margins have no auto layout equivalent',\n margin: 'margins have no auto layout equivalent',\n 'margin-inline-start': 'margins have no auto layout equivalent',\n};\n\n// ---------------------------------------------------------------------------------------------\n// TSX reading\n\ntype PropKind = 'union' | 'boolean' | 'icon' | 'node' | 'string' | 'function' | 'other';\n\ninterface PropInfo {\n name: string;\n kind: PropKind;\n values?: string[] | undefined;\n optional: boolean;\n}\n\ninterface ComponentSource {\n name: string;\n /** Component folder the file lives in (\"RadioGroup\" for Radio). */\n folder: string;\n file: string;\n sf: ts.SourceFile;\n /** Import identifier -> repo-relative CSS module path. */\n styles: Map<string, string>;\n props: Map<string, PropInfo>;\n /** Native element the props extend (button, input, span...), from `extends ButtonHTMLAttributes<...>`. */\n native: string | undefined;\n fn: ts.FunctionLikeDeclaration | undefined;\n /** Other exported forwardRef components in the file (CardHeader, CardBody...). */\n subcomponents: { name: string; fn: ts.FunctionLikeDeclaration }[];\n /** Every exported component of the file, by name (Radio in RadioGroup.tsx). */\n exported: Map<string, ts.FunctionLikeDeclaration>;\n /** Identifiers imported from @base-ui/react: their elements carry Base UI's state attributes. */\n baseUi: Set<string>;\n /** Plain helper functions of the file (`initials(name)`), callable with literal arguments. */\n helpers: Map<string, ts.FunctionDeclaration>;\n /** Local name -> lucide-react export, for icons the component draws itself (a checkbox's check mark). */\n lucide: Map<string, string>;\n /** Top-level consts of the file (`const TONE_ICON = { ... }`). */\n consts: Map<string, ts.Expression>;\n /** Base UI modules the file imports (\"checkbox\", \"switch\", \"progress\"). */\n baseUiModules: Set<string>;\n /** Top-level consts holding a function (`const defaultTitle = (n) => ...`): callable values. */\n fnConsts: Map<string, ts.ArrowFunction | ts.FunctionExpression>;\n /**\n * Functions imported from the package's own plain modules (`swatchColor` from ../../utils/color): modules with no\n * imports and no JSX, run as they are, called with data.\n */\n imported: Map<string, (...args: unknown[]) => unknown>;\n}\n\nconst NATIVE_ATTRS: Record<string, string> = {\n ButtonHTMLAttributes: 'button',\n InputHTMLAttributes: 'input',\n TextareaHTMLAttributes: 'textarea',\n AnchorHTMLAttributes: 'a',\n HTMLAttributes: 'element',\n};\n\nfunction unquote(s: string): string {\n return s.replace(/^['\"`]|['\"`]$/g, '');\n}\n\nclass Reader {\n private cache = new Map<string, ComponentSource | null>();\n private aliasCache = new Map<string, Map<string, string>>();\n private elements = new Map<string, Map<string, string>>();\n constructor(private opts: SpecGeneratorOptions) {}\n\n /**\n * The element a Base UI part renders (\"Increment\" -> \"button\"), as Base UI's own docs say it\n * (node_modules/@base-ui/react/docs/react/components/<module>.md: \"### Increment ... Renders a `<button>` element\").\n */\n baseUiElement(modules: Iterable<string>, part: string): string | undefined {\n for (const m of modules) {\n let parts = this.elements.get(m);\n if (!parts) {\n parts = new Map();\n const text = this.opts.read(`node_modules/@base-ui/react/docs/react/components/${m}.md`) ?? '';\n // \"### Increment\", a line or two about it, then \"Renders a `<button>` element.\" (before the next heading).\n for (const hit of text.matchAll(/^### ([\\w.]+)\\n(?:(?!#)[^\\n]*\\n){0,6}?Renders an? `<([a-z0-9-]+)>` element/gm)) parts.set(hit[1]!, hit[2]!);\n this.elements.set(m, parts);\n }\n const el = parts.get(part);\n if (el) return el;\n }\n return undefined;\n }\n\n private dirOf(name: string) {\n return `${this.opts.componentsDir}/${name}`;\n }\n\n /** Export name -> component folder, for components a file exports besides its own (Radio in RadioGroup). */\n private exportIndex: Map<string, string> | undefined;\n\n /** The folder a component comes from: its own, or the folder whose file exports it. */\n folderOf(name: string): string | undefined {\n if (this.opts.read(`${this.dirOf(name)}/${name}.tsx`) !== undefined) return name;\n if (!this.exportIndex) {\n this.exportIndex = new Map();\n for (const folder of this.opts.components ?? []) {\n const text = this.opts.read(`${this.dirOf(folder)}/${folder}.tsx`) ?? '';\n for (const m of text.matchAll(/forwardRef[^(]*\\(\\s*function\\s+([A-Z]\\w*)|export function ([A-Z]\\w*)/g)) {\n const n = (m[1] ?? m[2])!;\n if (n !== folder && !this.exportIndex.has(n)) this.exportIndex.set(n, folder);\n }\n }\n }\n return this.exportIndex.get(name);\n }\n\n exists(name: string): boolean {\n return this.folderOf(name) !== undefined;\n }\n\n /** `export type X = ...` of a component file and of the component files it imports from. */\n private aliases(file: string, sf: ts.SourceFile, depth = 0): Map<string, string> {\n if (this.aliasCache.has(file)) return this.aliasCache.get(file)!;\n const out = new Map<string, string>();\n this.aliasCache.set(file, out);\n for (const st of sf.statements) {\n if (ts.isTypeAliasDeclaration(st)) out.set(st.name.text, st.type.getText(sf));\n if (ts.isImportDeclaration(st) && depth < 2) {\n const spec = unquote(st.moduleSpecifier.getText(sf));\n const m = /^\\.\\.\\/(\\w+)$/.exec(spec);\n if (!m) continue;\n const other = `${this.dirOf(m[1]!)}/${m[1]}.tsx`;\n const text = this.opts.read(other);\n if (!text) continue;\n const osf = ts.createSourceFile(other, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n for (const [k, v] of this.aliases(other, osf, depth + 1)) if (!out.has(k)) out.set(k, v);\n }\n }\n return out;\n }\n\n load(name: string): ComponentSource | null {\n if (this.cache.has(name)) return this.cache.get(name)!;\n const folder = this.folderOf(name);\n const file = `${this.dirOf(folder ?? name)}/${folder ?? name}.tsx`;\n const text = folder ? this.opts.read(file) : undefined;\n if (text === undefined) {\n this.cache.set(name, null);\n return null;\n }\n const sf = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n const styles = new Map<string, string>();\n const baseUi = new Set<string>();\n const helpers = new Map<string, ts.FunctionDeclaration>();\n const lucide = new Map<string, string>();\n const consts = new Map<string, ts.Expression>();\n const baseUiModules = new Set<string>();\n const fnConsts = new Map<string, ts.ArrowFunction | ts.FunctionExpression>();\n const imported = new Map<string, (...args: unknown[]) => unknown>();\n for (const st of sf.statements) {\n if (ts.isVariableStatement(st))\n for (const d of st.declarationList.declarations) {\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n const init = skipCasts(d.initializer);\n if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) fnConsts.set(d.name.text, init);\n else if (!/forwardRef|^\\(/.test(d.initializer.getText(sf).slice(0, 12))) consts.set(d.name.text, d.initializer);\n }\n if (ts.isFunctionDeclaration(st) && st.name && /^[a-z]/.test(st.name.text) && st.body) helpers.set(st.name.text, st);\n if (!ts.isImportDeclaration(st) || !st.importClause) continue;\n const spec = unquote(st.moduleSpecifier.getText(sf));\n // A plain module of the package (utils): its functions run as they are.\n if (spec.startsWith('.') && !/\\.css$/.test(spec) && !/^\\.\\.\\/\\w+$/.test(spec)) {\n const b = st.importClause.namedBindings;\n const mod = b && ts.isNamedImports(b) ? this.plainModule(posix.normalize(posix.join(this.dirOf(folder!), spec))) : undefined;\n if (mod && b && ts.isNamedImports(b))\n for (const e of b.elements) {\n const f = mod[(e.propertyName ?? e.name).text];\n if (typeof f === 'function') imported.set(e.name.text, f as (...args: unknown[]) => unknown);\n }\n }\n if (spec === 'lucide-react') {\n const b = st.importClause.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) lucide.set(e.name.text, (e.propertyName ?? e.name).text);\n continue;\n }\n if (spec.startsWith('@base-ui/react')) {\n baseUiModules.add(spec.replace(/^@base-ui\\/react\\/?/, ''));\n const b = st.importClause.namedBindings;\n if (st.importClause.name) baseUi.add(st.importClause.name.text);\n if (b && ts.isNamedImports(b)) for (const e of b.elements) baseUi.add(e.name.text);\n continue;\n }\n if (!st.importClause.name || !spec.endsWith(this.opts.styleSuffix ?? '.module.css')) continue;\n styles.set(st.importClause.name.text, posix.normalize(posix.join(this.dirOf(folder!), spec)));\n }\n const aliases = this.aliases(file, sf);\n const props = new Map<string, PropInfo>();\n let native: string | undefined;\n const iface = sf.statements.find((s): s is ts.InterfaceDeclaration => ts.isInterfaceDeclaration(s) && s.name.text === `${name}Props`);\n if (iface) {\n for (const h of iface.heritageClauses ?? []) {\n const txt = h.getText(sf);\n for (const [k, v] of Object.entries(NATIVE_ATTRS)) if (txt.includes(k)) native ??= v;\n }\n for (const m of iface.members) {\n if (!ts.isPropertySignature(m) || !m.type) continue;\n const pname = m.name.getText(sf);\n props.set(pname, { name: pname, optional: !!m.questionToken, ...classifyType(m.type.getText(sf), aliases) });\n }\n }\n const fns = componentFunctions(sf);\n const fn = fns.get(name);\n const subcomponents = [...fns].filter(([n]) => n !== name && n.startsWith(name)).map(([n, f]) => ({ name: n, fn: f }));\n const src: ComponentSource = { name, folder: folder!, file, sf, styles, props, native, fn, subcomponents, exported: fns, baseUi, helpers, lucide, consts, baseUiModules, fnConsts, imported };\n this.cache.set(name, src);\n return src;\n }\n\n private modules = new Map<string, Record<string, unknown> | undefined>();\n\n /**\n * Exports of a plain module of the package (`utils/color.ts`): no imports, no JSX, so it runs on its own. Undefined\n * for anything else (a module that imports React or another file).\n */\n plainModule(path: string): Record<string, unknown> | undefined {\n if (this.modules.has(path)) return this.modules.get(path);\n let out: Record<string, unknown> | undefined;\n const text = this.opts.read(`${path}.ts`) ?? this.opts.read(`${path}/index.ts`);\n if (text !== undefined) {\n const sf = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n // A .ts file has no JSX; it must not import anything (React, other files) to run on its own.\n const plain = !sf.statements.some((s) => ts.isImportDeclaration(s) || (ts.isExportDeclaration(s) && !!s.moduleSpecifier));\n if (plain) {\n try {\n const js = ts.transpileModule(text, { compilerOptions: { target: ts.ScriptTarget.ES2020, module: ts.ModuleKind.CommonJS } }).outputText;\n const exports: Record<string, unknown> = {};\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n new Function('exports', 'module', js)(exports, { exports });\n out = exports;\n } catch {\n out = undefined;\n }\n }\n }\n this.modules.set(path, out);\n return out;\n }\n}\n\n/** The expression under casts and parentheses (`(x as T)`, `x satisfies T`). */\nfunction skipCasts(e: ts.Expression): ts.Expression {\n while (ts.isParenthesizedExpression(e) || ts.isAsExpression(e) || ts.isSatisfiesExpression(e) || ts.isNonNullExpression(e)) e = e.expression;\n return e;\n}\n\nfunction classifyType(text: string, aliases: Map<string, string>, depth = 0): { kind: PropKind; values?: string[] } {\n const t = text.trim();\n if (aliases.has(t) && depth < 4) return classifyType(aliases.get(t)!, aliases, depth + 1);\n const parts = t.split('|').map((p) => p.trim());\n if (parts.length > 1 && parts.every((p) => /^'[^']*'$/.test(p))) return { kind: 'union', values: parts.map(unquote) };\n if (t === 'boolean') return { kind: 'boolean' };\n if (t === 'LucideIcon') return { kind: 'icon' };\n if (/^(ReactNode|ReactElement|React\\.ReactNode)$/.test(t)) return { kind: 'node' };\n if (t === 'string') return { kind: 'string' };\n if (t.includes('=>')) return { kind: 'function' };\n return { kind: 'other' };\n}\n\n/** Exported components of a file: `forwardRef(function Name(...))` or `function Name(...)`. */\nfunction componentFunctions(sf: ts.SourceFile): Map<string, ts.FunctionLikeDeclaration> {\n const out = new Map<string, ts.FunctionLikeDeclaration>();\n const visit = (n: ts.Node) => {\n if (ts.isFunctionExpression(n) && n.name && /^[A-Z]/.test(n.name.text) && ts.isCallExpression(n.parent) && /forwardRef/.test(n.parent.expression.getText(sf))) {\n if (!out.has(n.name.text)) out.set(n.name.text, n);\n } else if (ts.isFunctionDeclaration(n) && n.name && /^[A-Z]/.test(n.name.text) && n.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)) {\n if (!out.has(n.name.text)) out.set(n.name.text, n);\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n return out;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Evaluating a component for a set of props\n\nconst CHILDREN = Symbol('children');\nconst OPAQUE = Symbol('opaque');\n\ninterface ClassRef {\n cls: string;\n}\ninterface StylesRef {\n module: string;\n}\ninterface JsxRef {\n jsx: ts.Node;\n scope: Scope;\n}\n\n/** Content of a node prop the main component draws as text (\"label\"): a TEXT property with a default. */\ninterface TextRef {\n textProp: string;\n text: string;\n}\n\n/** A function as a value (a default prop `errorSummaryTitle = defaultTitle`, an arrow passed as a prop): callable. */\ninterface FnRef {\n fnRef: ts.ArrowFunction | ts.FunctionExpression | ts.FunctionDeclaration;\n scope: Scope;\n}\n\ntype Value = undefined | null | boolean | number | string | symbol | ClassRef | StylesRef | JsxRef | TextRef | LucideRef | FnRef | Value[] | { [k: string]: Value };\n\nconst isFnRef = (v: Value): v is FnRef => !!v && typeof v === 'object' && 'fnRef' in (v as object);\n\nconst isClass = (v: Value): v is ClassRef => !!v && typeof v === 'object' && 'cls' in (v as object);\nconst isTextRef = (v: Value): v is TextRef => !!v && typeof v === 'object' && 'textProp' in (v as object);\n/** A lucide-react icon the code names (`Info`, `TONE_ICON[tone]`). */\ninterface LucideRef {\n lucide: string;\n}\nconst isLucide = (v: Value): v is LucideRef & Value => !!v && typeof v === 'object' && 'lucide' in (v as object);\nconst isStyles = (v: Value): v is StylesRef => !!v && typeof v === 'object' && 'module' in (v as object);\nconst isJsx = (v: Value): v is JsxRef => !!v && typeof v === 'object' && 'jsx' in (v as object);\n\ninterface Scope {\n src: ComponentSource;\n vars: Map<string, Value>;\n /** Local consts, evaluated on first use. */\n locals: Map<string, ts.Expression>;\n /** Identifiers bound to optional icon props (or a boolean shown as a part): JSX conditions on them become BOOLEAN properties. */\n toggles: Map<string, string>;\n /** Optional node or string props behind a toggle: the value they take while their part is drawn. */\n toggleValues?: Map<string, Value> | undefined;\n /** Local consts by name (kept after evaluation), to see which toggle a derived condition depends on. */\n inits?: Map<string, ts.Expression> | undefined;\n /** Content from the docs preview for `{children}` (a group's options), when the component is drawn with it. */\n preview?: DocChild[] | undefined;\n /** A nested component's checked state, from its props (`defaultChecked`, `indeterminate`). */\n checked?: 'true' | 'false' | 'mixed' | undefined;\n /** Optional props shown by default because the example gives them. */\n toggleOn?: Set<string> | undefined;\n /** React context values provided above (`<TabsContext.Provider value={...}>`), by context name. */\n contexts?: Map<string, Value> | undefined;\n /** Component being specified (true) or a nested DS component (false). */\n main: boolean;\n}\n\nfunction lookup(scope: Scope, name: string): Value {\n if (scope.vars.has(name)) return scope.vars.get(name);\n const local = scope.locals.get(name);\n if (local) {\n scope.locals.delete(name);\n const v = evaluate(local, scope);\n scope.vars.set(name, v);\n return v;\n }\n const style = scope.src.styles.get(name);\n if (style) return { module: style };\n const icon = scope.src.lucide.get(name);\n if (icon) return { lucide: icon };\n const top = scope.src.consts.get(name);\n if (top) return evaluate(top, { ...scope, vars: new Map(), locals: new Map() });\n const fnConst = scope.src.fnConsts.get(name);\n if (fnConst) return { fnRef: fnConst, scope: { ...scope, vars: new Map(), locals: new Map(), toggles: new Map() } };\n return undefined;\n}\n\nfunction classList(v: Value, out: string[] = []): string[] {\n if (isClass(v)) out.push(v.cls);\n else if (Array.isArray(v)) for (const x of v) classList(x, out);\n return out;\n}\n\nfunction evaluate(e: ts.Expression, scope: Scope): Value {\n const sf = scope.src.sf;\n if (ts.isParenthesizedExpression(e) || ts.isAsExpression(e) || ts.isNonNullExpression(e) || ts.isSatisfiesExpression(e)) return evaluate(e.expression, scope);\n if (ts.isStringLiteral(e) || ts.isNoSubstitutionTemplateLiteral(e)) return e.text;\n if (ts.isNumericLiteral(e)) return Number(e.text);\n if (e.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (e.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (e.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isIdentifier(e)) return lookup(scope, e.text);\n if (ts.isTemplateExpression(e)) {\n let s = e.head.text;\n for (const span of e.templateSpans) s += String(evaluate(span.expression, scope) ?? '') + span.literal.text;\n return s;\n }\n if (ts.isPropertyAccessExpression(e)) {\n const obj = evaluate(e.expression, scope);\n if (isStyles(obj)) return { cls: `${obj.module}|${e.name.text}` };\n if ((Array.isArray(obj) || typeof obj === 'string') && e.name.text === 'length') return obj.length;\n if (obj === OPAQUE) return OPAQUE;\n if (obj && typeof obj === 'object' && !Array.isArray(obj) && !isClass(obj) && !isJsx(obj)) return (obj as Record<string, Value>)[e.name.text];\n return undefined;\n }\n if (ts.isElementAccessExpression(e)) {\n const obj = evaluate(e.expression, scope);\n const key = evaluate(e.argumentExpression, scope);\n if (isStyles(obj) && typeof key === 'string') return { cls: `${obj.module}|${key}` };\n if (Array.isArray(obj) && typeof key === 'number') return obj[key];\n if (obj && typeof obj === 'object' && !Array.isArray(obj) && (typeof key === 'string' || typeof key === 'number') && !isClass(obj) && !isJsx(obj)) return (obj as Record<string, Value>)[key];\n return undefined;\n }\n if (ts.isPrefixUnaryExpression(e) && e.operator === ts.SyntaxKind.ExclamationToken) return !truthy(evaluate(e.operand, scope));\n if (ts.isPrefixUnaryExpression(e) && e.operator === ts.SyntaxKind.MinusToken) {\n const v = evaluate(e.operand, scope);\n return typeof v === 'number' ? -v : OPAQUE;\n }\n if (ts.isTypeOfExpression(e)) {\n const v = evaluate(e.expression, scope);\n if (v === OPAQUE || isJsx(v)) return OPAQUE;\n return v === null ? 'object' : Array.isArray(v) ? 'object' : typeof v === 'symbol' ? OPAQUE : typeof v;\n }\n if (ts.isConditionalExpression(e)) return truthy(evaluate(e.condition, scope)) ? evaluate(e.whenTrue, scope) : evaluate(e.whenFalse, scope);\n if (ts.isBinaryExpression(e)) {\n const op = e.operatorToken.kind;\n if (op === ts.SyntaxKind.AmpersandAmpersandToken) {\n const l = evaluate(e.left, scope);\n return truthy(l) ? evaluate(e.right, scope) : l;\n }\n if (op === ts.SyntaxKind.BarBarToken) {\n const l = evaluate(e.left, scope);\n return truthy(l) ? l : evaluate(e.right, scope);\n }\n if (op === ts.SyntaxKind.QuestionQuestionToken) {\n const l = evaluate(e.left, scope);\n return l === undefined || l === null ? evaluate(e.right, scope) : l;\n }\n const l = evaluate(e.left, scope);\n const r = evaluate(e.right, scope);\n switch (op) {\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return l === r;\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return l !== r;\n case ts.SyntaxKind.EqualsEqualsToken:\n return l == r; // eslint-disable-line eqeqeq\n case ts.SyntaxKind.ExclamationEqualsToken:\n return l != r; // eslint-disable-line eqeqeq\n default:\n return arithmetic(op, l, r);\n }\n }\n if (ts.isCallExpression(e)) {\n const callee = e.expression.getText(sf);\n if (callee === 'cx' || callee === 'clsx' || callee === 'classNames') return e.arguments.map((a) => evaluate(a, scope)).filter(truthy);\n // Base UI's mergeProps: the props objects merged, later ones winning (unknown spreads add nothing drawn).\n if (callee === 'mergeProps') {\n const out: Record<string, Value> = {};\n for (const a of e.arguments) {\n const v = evaluate(a, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v)) Object.assign(out, v);\n }\n return out;\n }\n // Math on known numbers.\n const math = /^Math\\.(max|min|floor|ceil|round|abs)$/.exec(callee);\n if (math) {\n const args = e.arguments.map((a) => evaluate(a, scope));\n return args.every((a) => typeof a === 'number') ? (Math[math[1] as 'max'] as (...n: number[]) => number)(...(args as number[])) : OPAQUE;\n }\n // Object.entries / keys / values of a known object (or of nothing: an empty list).\n const objFn = /^Object\\.(entries|keys|values)$/.exec(callee);\n if (objFn && e.arguments[0]) {\n const o = evaluate(e.arguments[0], scope);\n if (o === undefined || o === null) return [];\n if (o && typeof o === 'object' && !Array.isArray(o) && !isJsx(o) && !isClass(o)) {\n const rec = o as Record<string, Value>;\n return objFn[1] === 'keys' ? Object.keys(rec) : objFn[1] === 'values' ? Object.values(rec) : Object.entries(rec).map(([k, v]) => [k, v]);\n }\n return OPAQUE;\n }\n // createElement(tag, props, ...children): an element like JSX.\n if ((callee === 'createElement' || callee === 'React.createElement') && e.arguments[0]) {\n const tag = evaluate(e.arguments[0], scope);\n const props = e.arguments[1] ? evaluate(e.arguments[1], scope) : undefined;\n if (typeof tag !== 'string') return OPAQUE;\n return { element: tag, props: (props && typeof props === 'object' && !Array.isArray(props) ? props : {}) as Record<string, Value>, kids: e.arguments.slice(2).map((a) => evaluate(a, scope)) } as unknown as Value;\n }\n // React context: createContext(default) is its default; useContext reads the nearest provider's value, else it.\n if ((callee === 'createContext' || callee === 'React.createContext') && e.arguments[0]) return evaluate(e.arguments[0], scope);\n if ((callee === 'useContext' || callee === 'React.useContext') && e.arguments[0]) {\n const key = e.arguments[0].getText(sf);\n return scope.contexts?.has(key) ? scope.contexts.get(key) : evaluate(e.arguments[0], scope);\n }\n // Base UI's useRender({ defaultTagName, props }): the element it renders by default.\n if (callee === 'useRender' && e.arguments[0]) {\n const o = evaluate(e.arguments[0], scope) as Record<string, Value> | undefined;\n const props = (o?.props && typeof o.props === 'object' && !Array.isArray(o.props) ? o.props : {}) as Record<string, Value>;\n return { element: typeof o?.defaultTagName === 'string' ? o.defaultTagName : 'div', props, kids: [] } as unknown as Value;\n }\n // useMemo(() => value, deps): the value.\n if ((callee === 'useMemo' || callee === 'React.useMemo') && e.arguments[0]) return callArrow(e.arguments[0], [], scope);\n // Array.isArray(x) and Array.from({ length: n }, fn) on known values.\n if (callee === 'Array.isArray' && e.arguments[0]) {\n const v = evaluate(e.arguments[0], scope);\n return v === OPAQUE || isFnRef(v) ? OPAQUE : Array.isArray(v);\n }\n if (callee === 'Array.from' && e.arguments[0]) {\n const v = evaluate(e.arguments[0], scope);\n const length = v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, Value>).length : undefined;\n const list: Value[] | undefined = Array.isArray(v) ? v : typeof length === 'number' && length >= 0 && length < 1000 ? Array.from({ length }, () => undefined) : undefined;\n if (!list) return OPAQUE;\n const fn = e.arguments[1];\n if (!fn) return list;\n const results = list.map((x, i) => callArrow(fn, [x, i], scope));\n return results.some((r) => r === OPAQUE) ? OPAQUE : results;\n }\n if (ts.isPropertyAccessExpression(e.expression) && /^(map|flatMap|filter|some|every|find)$/.test(e.expression.name.text)) {\n const list = evaluate(e.expression.expression, scope);\n if (Array.isArray(list)) return listMethod(list, e.expression.name.text, e.arguments, scope);\n }\n // String and list methods on known values (`text.split('.')`, `formatted.join(' to ')`).\n if (ts.isPropertyAccessExpression(e.expression)) {\n const obj = evaluate(e.expression.expression, scope);\n const r = valueMethod(obj, e.expression.name.text, e.arguments.map((a) => evaluate(a, scope)));\n if (r !== undefined) return r;\n }\n // A local arrow function (`const renderItem = (o) => <Item ... />`), called with values.\n if (ts.isIdentifier(e.expression)) {\n const fnExpr = scope.inits?.get(e.expression.text) ?? scope.locals.get(e.expression.text);\n if (fnExpr && (ts.isArrowFunction(fnExpr) || ts.isFunctionExpression(fnExpr)))\n return callArrow(\n fnExpr,\n e.arguments.map((a) => evaluate(a, scope)),\n scope,\n );\n }\n const helper = ts.isIdentifier(e.expression) ? scope.src.helpers.get(e.expression.text) : undefined;\n if (helper) {\n const args = e.arguments.map((a) => evaluate(a, scope));\n // A helper that returns elements (`breakAfterDots(text)`): read like the component, not run.\n if (containsJsx(helper)) return callArrow(helper, args, { ...scope, vars: new Map(), locals: new Map(), toggles: new Map(), inits: new Map() });\n return callHelper(helper, args, scope.src);\n }\n const imported = ts.isIdentifier(e.expression) ? scope.src.imported.get(e.expression.text) : undefined;\n if (imported) return callData(imported, e.arguments.map((a) => evaluate(a, scope)));\n // A function held by a value (a default prop, a top-level const): called with values.\n if (ts.isIdentifier(e.expression)) {\n const v = evaluate(e.expression, scope);\n if (isFnRef(v)) return callArrow(v.fnRef, e.arguments.map((a) => evaluate(a, scope)), v.scope);\n }\n return OPAQUE;\n }\n if (ts.isArrowFunction(e) || ts.isFunctionExpression(e)) return { fnRef: e, scope };\n if (ts.isJsxElement(e) || ts.isJsxSelfClosingElement(e) || ts.isJsxFragment(e)) return { jsx: e, scope };\n if (ts.isObjectLiteralExpression(e)) {\n const out: Record<string, Value> = {};\n for (const p of e.properties) {\n if (ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) {\n // `{ ['--_min-rows' as string]: rows }`: the key evaluated, kept when it is a string or a number.\n const key = evaluate(p.name.expression, scope);\n if (typeof key !== 'string' && typeof key !== 'number') return OPAQUE;\n out[String(key)] = evaluate(p.initializer, scope);\n } else if (ts.isPropertyAssignment(p)) out[unquote(p.name.getText(sf))] = evaluate(p.initializer, scope);\n else if (ts.isShorthandPropertyAssignment(p)) out[p.name.text] = lookup(scope, p.name.text);\n else if (ts.isSpreadAssignment(p)) {\n const v = evaluate(p.expression, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v)) Object.assign(out, v);\n } else return OPAQUE;\n }\n return out;\n }\n if (ts.isArrayLiteralExpression(e)) return e.elements.map((x) => evaluate(x, scope));\n return OPAQUE;\n}\n\n/** The custom properties of an inline style object (`{ '--_pct': 64 }`), as CSS text; undefined when there are none. */\nfunction styleVarsOf(style: Value): Map<string, string> | undefined {\n if (!style || typeof style !== 'object' || Array.isArray(style) || isJsx(style)) return undefined;\n const vars = new Map<string, string>();\n for (const [k, v] of Object.entries(style as Record<string, Value>)) if (k.startsWith('--') && (typeof v === 'number' || typeof v === 'string')) vars.set(k, String(v));\n return vars.size ? vars : undefined;\n}\n\n/**\n * A plain helper of the component file (`initials(name)`) called with literal arguments: transpiled and run, so the\n * drawn text is what code renders. Only strings, numbers and booleans go in and come out; anything else is opaque.\n */\n/** Data only: strings, numbers, booleans, and lists or objects of them (a select's options). */\nconst isData = (v: Value): boolean =>\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null || v === undefined ||\n (Array.isArray(v) && v.every(isData)) ||\n (!!v && typeof v === 'object' && !isJsx(v) && !isClass(v) && !isStyles(v) && !isTextRef(v) && !isFnRef(v) && Object.values(v as Record<string, Value>).every(isData));\n\n/** A function run on data (texts are passed as their text): its result when it is data, else opaque. */\nfunction callData(fn: (...args: unknown[]) => unknown, args: Value[]): Value {\n const data = args.map((a) => (isTextRef(a) ? a.text : a));\n if (!data.every(isData)) return OPAQUE;\n try {\n const out: unknown = fn(...structuredClone(data));\n const v = jsonValue(JSON.parse(JSON.stringify(out ?? null)));\n return isData(v) ? v : OPAQUE;\n } catch {\n return OPAQUE;\n }\n}\n\nfunction callHelper(fn: ts.FunctionDeclaration, args: Value[], src: ComponentSource): Value {\n try {\n const js = ts.transpileModule(fn.getText(src.sf).replace(/^export\\s+(default\\s+)?/, ''), { compilerOptions: { target: ts.ScriptTarget.ES2020, module: ts.ModuleKind.None } }).outputText;\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const run = new Function(`${js}; return ${fn.name!.text}.apply(null, arguments);`) as (...a: unknown[]) => unknown;\n return callData(run, args);\n } catch {\n return OPAQUE;\n }\n}\n\n/** Whether a function's body writes JSX (it returns elements, not data). */\nfunction containsJsx(fn: ts.Node): boolean {\n let found = false;\n const visit = (n: ts.Node) => {\n if (found) return;\n if (ts.isJsxElement(n) || ts.isJsxSelfClosingElement(n) || ts.isJsxFragment(n)) found = true;\n else ts.forEachChild(n, visit);\n };\n visit(fn);\n return found;\n}\n\n/** String and list methods on known values: split, join, trim, slice, includes, startsWith, endsWith, case changes. */\nfunction valueMethod(obj: Value, method: string, args: Value[]): Value | undefined {\n const str = (i: number) => (typeof args[i] === 'string' ? (args[i] as string) : undefined);\n const int = (i: number) => (typeof args[i] === 'number' ? (args[i] as number) : args[i] === undefined ? undefined : NaN);\n if (typeof obj === 'string') {\n switch (method) {\n case 'split':\n return str(0) !== undefined ? obj.split(str(0)!) : undefined;\n case 'trim':\n return obj.trim();\n case 'toLowerCase':\n return obj.toLowerCase();\n case 'toUpperCase':\n return obj.toUpperCase();\n case 'startsWith':\n return str(0) !== undefined ? obj.startsWith(str(0)!) : undefined;\n case 'endsWith':\n return str(0) !== undefined ? obj.endsWith(str(0)!) : undefined;\n case 'includes':\n return str(0) !== undefined ? obj.includes(str(0)!) : undefined;\n case 'slice':\n return Number.isNaN(int(0)) || Number.isNaN(int(1)) ? undefined : obj.slice(int(0), int(1));\n default:\n return undefined;\n }\n }\n if (Array.isArray(obj)) {\n switch (method) {\n case 'join':\n return obj.every((x) => typeof x === 'string' || typeof x === 'number') ? obj.join(str(0) ?? ',') : undefined;\n case 'slice':\n return Number.isNaN(int(0)) || Number.isNaN(int(1)) ? undefined : obj.slice(int(0), int(1));\n case 'includes':\n return obj.includes(args[0]);\n default:\n return undefined;\n }\n }\n return undefined;\n}\n\n/** An arrow or function expression called with values (`(o) => ({ value: o.value })`), when its body is readable. */\nfunction callArrow(fn: ts.Expression | ts.FunctionDeclaration, args: Value[], scope: Scope): Value {\n if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn) && !ts.isFunctionDeclaration(fn)) return OPAQUE;\n if (!fn.body) return OPAQUE;\n const vars = new Map(scope.vars);\n fn.parameters.forEach((p, i) => {\n const v = args[i];\n if (ts.isIdentifier(p.name)) vars.set(p.name.text, v);\n else if (ts.isObjectBindingPattern(p.name) && v && typeof v === 'object')\n for (const el of p.name.elements) if (ts.isIdentifier(el.name)) vars.set(el.name.text, (v as Record<string, Value>)[(el.propertyName ?? el.name).getText(scope.src.sf)]);\n const pattern: ts.BindingName = p.name;\n if (ts.isArrayBindingPattern(pattern) && Array.isArray(v))\n pattern.elements.forEach((el, j) => {\n if (ts.isBindingElement(el) && ts.isIdentifier(el.name)) vars.set(el.name.text, v[j]);\n });\n });\n const inner: Scope = { ...scope, vars, locals: new Map(scope.locals) };\n if (!ts.isBlock(fn.body)) return evaluate(fn.body, inner);\n const run = (stmts: readonly ts.Statement[]): { value: Value } | undefined => {\n for (const st of stmts) {\n if (ts.isVariableStatement(st)) for (const d of st.declarationList.declarations) if (ts.isIdentifier(d.name) && d.initializer) inner.locals.set(d.name.text, d.initializer);\n if (ts.isIfStatement(st)) {\n const c = evaluate(st.expression, inner);\n if (c === OPAQUE) return { value: OPAQUE };\n const branch = truthy(c) ? st.thenStatement : st.elseStatement;\n const r = branch ? run(ts.isBlock(branch) ? branch.statements : [branch]) : undefined;\n if (r) return r;\n }\n // A loop that fills a list cannot be followed: the result is not known.\n if (ts.isForOfStatement(st) || ts.isForStatement(st) || ts.isWhileStatement(st)) return { value: OPAQUE };\n if (ts.isReturnStatement(st)) return { value: st.expression ? evaluate(st.expression, inner) : undefined };\n }\n return undefined;\n };\n return run(fn.body.statements)?.value;\n}\n\n/** List methods on known lists, with a readable callback: map, filter, some, every, find. */\nfunction listMethod(list: Value[], method: string, args: readonly ts.Expression[], scope: Scope): Value {\n let fn = args[0];\n // A callback named by a local (`items.map(renderItem)`).\n if (fn && ts.isIdentifier(fn)) fn = scope.inits?.get(fn.text) ?? scope.locals.get(fn.text) ?? fn;\n if (!fn) return OPAQUE;\n const results = list.map((x, i) => callArrow(fn, [x, i], scope));\n if (results.some((r) => r === OPAQUE)) return OPAQUE;\n switch (method) {\n case 'map':\n return results;\n case 'flatMap':\n return results.flatMap((r) => (Array.isArray(r) ? r : [r]));\n case 'filter':\n return list.filter((_, i) => truthy(results[i]));\n case 'some':\n return results.some(truthy);\n case 'every':\n return results.every(truthy);\n case 'find':\n return list.find((_, i) => truthy(results[i]));\n default:\n return OPAQUE;\n }\n}\n\n/** Arithmetic and comparisons on known numbers (and string concatenation); a missing value compares false. */\nfunction arithmetic(op: ts.SyntaxKind, l: Value, r: Value): Value {\n if (l === OPAQUE || r === OPAQUE) return OPAQUE;\n const K = ts.SyntaxKind;\n const compare = op === K.LessThanToken || op === K.GreaterThanToken || op === K.LessThanEqualsToken || op === K.GreaterThanEqualsToken;\n if (compare && (l === undefined || l === null || r === undefined || r === null)) return false;\n if (op === K.PlusToken && (typeof l === 'string' || typeof r === 'string') && (typeof l === 'string' || typeof l === 'number') && (typeof r === 'string' || typeof r === 'number')) return `${l}${r}`;\n if (typeof l !== 'number' || typeof r !== 'number') return OPAQUE;\n switch (op) {\n case K.PlusToken:\n return l + r;\n case K.MinusToken:\n return l - r;\n case K.AsteriskToken:\n return l * r;\n case K.SlashToken:\n return l / r;\n case K.LessThanToken:\n return l < r;\n case K.GreaterThanToken:\n return l > r;\n case K.LessThanEqualsToken:\n return l <= r;\n case K.GreaterThanEqualsToken:\n return l >= r;\n default:\n return OPAQUE;\n }\n}\n\nfunction truthy(v: Value): boolean {\n if (v === OPAQUE) return true;\n if (Array.isArray(v)) return true;\n return !!v;\n}\n\n/** Binds the destructured props of a component function, with their defaults. */\nfunction bindProps(fn: ts.FunctionLikeDeclaration, scope: Scope, given: Record<string, Value>): Map<string, string> {\n const names = new Map<string, string>(); // local name -> prop name\n const param = fn.parameters[0];\n if (!param || !ts.isObjectBindingPattern(param.name)) return names;\n const taken = new Set<string>();\n for (const el of param.name.elements) {\n if (el.dotDotDotToken || !ts.isIdentifier(el.name)) continue;\n const prop = el.propertyName ? el.propertyName.getText(scope.src.sf) : el.name.text;\n names.set(el.name.text, prop);\n taken.add(prop);\n let v = given[prop];\n if (v === undefined && el.initializer) v = evaluate(el.initializer, scope);\n scope.vars.set(el.name.text, v);\n }\n // `...rest`: the props given that are not named (children passed through a spread, data attributes).\n const rest = param.name.elements.find((el) => el.dotDotDotToken && ts.isIdentifier(el.name));\n // Children an example gives a nested component (a table header's rows) go through the spread too.\n const keepChildren = !scope.main && !!scope.preview?.some((c) => typeof c !== 'string');\n if (rest && ts.isIdentifier(rest.name)) scope.vars.set(rest.name.text, Object.fromEntries(Object.entries(given).filter(([k, v]) => !taken.has(k) && v !== undefined && (v !== CHILDREN || keepChildren))) as Value);\n return names;\n}\n\n/** The JSX a component function returns for the current props: follows `if (cond) return x;` and local consts. */\nfunction renderedJsx(fn: ts.FunctionLikeDeclaration, scope: Scope): JsxRef | undefined {\n const body = fn.body;\n if (!body) return undefined;\n if (!ts.isBlock(body)) {\n const v = evaluate(body, scope);\n return isJsx(v) ? v : undefined;\n }\n const run = (stmts: readonly ts.Statement[]): JsxRef | undefined | null => {\n for (const st of stmts) {\n if (ts.isVariableStatement(st)) {\n for (const d of st.declarationList.declarations) {\n // const [value, setValue] = useState(initial): the value starts as the initial one.\n if (ts.isArrayBindingPattern(d.name) && d.initializer && ts.isCallExpression(d.initializer) && /^(React\\.)?useState$/.test(d.initializer.expression.getText(scope.src.sf))) {\n const first = d.name.elements[0];\n const init = d.initializer.arguments[0];\n if (first && ts.isBindingElement(first) && ts.isIdentifier(first.name) && init) {\n scope.locals.set(first.name.text, init);\n scope.inits?.set(first.name.text, init);\n }\n continue;\n }\n // const { variant, size } = useContext(Ctx): each name from the object.\n if (ts.isObjectBindingPattern(d.name) && d.initializer) {\n const obj = evaluate(d.initializer, scope);\n for (const el of d.name.elements) {\n if (!ts.isIdentifier(el.name) || el.dotDotDotToken) continue;\n const key = (el.propertyName ?? el.name).getText(scope.src.sf);\n let v = obj && typeof obj === 'object' && !Array.isArray(obj) ? (obj as Record<string, Value>)[key] : undefined;\n if (v === undefined && el.initializer) v = evaluate(el.initializer, scope);\n scope.vars.set(el.name.text, v);\n }\n continue;\n }\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n scope.locals.set(d.name.text, d.initializer);\n scope.inits?.set(d.name.text, d.initializer);\n }\n } else if (ts.isIfStatement(st)) {\n const branch = truthy(evaluate(st.expression, scope)) ? st.thenStatement : st.elseStatement;\n if (!branch) continue;\n const r = run(ts.isBlock(branch) ? branch.statements : [branch]);\n if (r !== null) return r;\n } else if (ts.isReturnStatement(st)) {\n if (!st.expression) return undefined;\n const v = evaluate(st.expression, scope);\n return isJsx(v) ? v : undefined;\n }\n }\n return null;\n };\n return run(body.statements) ?? undefined;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Element tree\n\ninterface Node {\n key: string;\n tag: string;\n classes: string[];\n children: Node[];\n kind: 'frame' | 'text' | 'icon';\n /** Text parts: TEXT property name and default; placeholder text of a text field. */\n text?: { property: string; default: string; prop?: string | undefined } | undefined;\n /** Text written in code (a group's option label, a literal \"*\"): drawn as is, no TEXT property. */\n chars?: string | undefined;\n /** The text as React renders it, spaces at its ends kept (`Page ` before `{page}`): joins inline runs exactly. */\n raw?: string | undefined;\n /** Whitespace only: joins inline runs, dropped otherwise. */\n space?: boolean | undefined;\n /** A compound root drawn with the parts its file exports (CardHeader...), not with an example's children. */\n fromExports?: boolean | undefined;\n placeholder?: boolean | undefined;\n inputLike?: boolean | undefined;\n /**\n * The element sizes its border box by default (a `<button>` or a `<select>`, browsers' own stylesheet): its height\n * and width already count its padding and border.\n */\n borderBox?: boolean | undefined;\n /** BOOLEAN property that shows this optional part. */\n visible?: { property: string; prop: string; /** Shown by default: the example gives it. */ on?: boolean } | undefined;\n /** Spreads `...rest` with no children of its own: children come through props. */\n takesChildren?: boolean | undefined;\n /** Name for the layer, when it is not the class. */\n name?: string | undefined;\n /** A Base UI part: carries Base UI's state attributes. */\n baseUi?: boolean | undefined;\n /** data-* and aria-* attributes the JSX sets, as strings. */\n attrs?: Map<string, string> | undefined;\n /** Base UI parts: the checked state they carry, from the drawn state (\"state\", the main component) or their props. */\n checked?: 'state' | 'true' | 'false' | 'mixed' | undefined;\n /** Icon parts whose icon is written in code (`<Icon icon={Check} />`): the lucide-react name. */\n icon?: string | undefined;\n /** An image (`<img>`, a Base UI `*.Image`): drawn as the media slot. */\n media?: boolean | undefined;\n /** Checked because its `value` is the group's selected option; its Base UI parts (the radio dot) follow it. */\n selectedBy?: boolean | undefined;\n /** Only drawn while checked (a Base UI indicator that is not kept mounted). */\n whenChecked?: boolean | undefined;\n /** Inline SVG: the `<svg>` element's literal attributes; its shapes are in `shapes`, not parts. */\n svgAttrs?: Record<string, string> | undefined;\n shapes?: Node[] | undefined;\n /** Inline style custom properties (`style={{ '--_pct': 64 }}`). */\n styleVars?: Map<string, string> | undefined;\n /** A Base UI value indicator (a progress fill): its share of the track, from the root's value, min and max. */\n fraction?: number | undefined;\n /** A Base UI thumb (a slider's): its center sits at this share of its track. */\n at?: number | undefined;\n /** A Base UI panel whose value is not the selected one: hidden. */\n inactive?: boolean | undefined;\n /** An inline background color (a swatch): content, not a token. */\n inlineFill?: string | undefined;\n /** A Base UI indicator Base UI sizes to the selected item (a tab underline): drawn inside that item, filling it. */\n follows?: boolean | undefined;\n /** A decoration drawn by `::before` or `::after` of its parent. */\n pseudo?: 'before' | 'after' | undefined;\n}\n\nconst INPUT_TAGS = new Set(['input', 'textarea', 'BaseInput']);\n/** SVG shapes drawn inside an inline `<svg>`. */\nconst SVG_SHAPES = /^(circle|path|rect|line|polyline|polygon|ellipse)$/;\n\n/** Text fields: native inputs and Base UI input parts (`<BaseNumberField.Input>`). */\nconst isInputTag = (tag: string) => INPUT_TAGS.has(tag) || /\\.Input$/.test(tag);\n\n/** \"iconStart\" -> \"Icon start\". */\nexport const sentenceCase = (prop: string) => {\n const words = prop.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\ninterface RenderContext {\n reader: Reader;\n depth: number;\n /** Elements the main component rendered for `{children}`. */\n component: string;\n /** What the render met and cannot draw faithfully (content computed while the page runs), in plain language. */\n blockers?: string[] | undefined;\n /** The option a group selects (`defaultValue` of a radio group): Base UI parts with that `value` are checked. */\n /** The selected value (a tab), or the open ones (an accordion's defaultValue list). */\n selected?: string | string[] | undefined;\n /** The `items` of the nearest Base UI root (a combobox's options), for render functions of its lists. */\n items?: Value[] | undefined;\n /** React context values provided above, by context name. */\n contexts?: Map<string, Value> | undefined;\n /** The value share of the nearest Base UI root with a numeric value (a progress at 64 of 100: 0.64). */\n fraction?: number | undefined;\n /** The nearest Base UI root with a numeric value: its value and module (\"slider\", \"progress\"). */\n numeric?: { value: number; module: string } | undefined;\n /** Arguments Base UI passes to the render function of a value display (the formatted value). */\n valueArgs?: Value[] | undefined;\n /** `orientation` of the nearest Base UI root: its parts carry it as data-orientation. */\n orientation?: string | undefined;\n /** Errors of the nearest Base UI form, by field name: the Field of that name shows its error. */\n formErrors?: Record<string, Value> | undefined;\n /** Optional text props the example gives the main component: their parts show that text, on by default. */\n examples?: Record<string, Value> | undefined;\n}\n\n/** A data-* or aria-* attribute value as the DOM gets it, or undefined when React leaves it out. */\nfunction attrString(v: Value): string | undefined {\n if (v === undefined || v === null || v === OPAQUE || typeof v === 'symbol') return undefined;\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') return String(v);\n return undefined;\n}\n\nfunction renderJsx(ref: JsxRef, ctx: RenderContext, visible?: Node['visible']): Node[] {\n const { jsx, scope } = ref;\n const sf = scope.src.sf;\n if (ts.isParenthesizedExpression(jsx)) return renderJsx({ jsx: jsx.expression, scope }, ctx, visible);\n if (ts.isJsxFragment(jsx)) return renderChildren(jsx.children, scope, ctx);\n if (!ts.isJsxElement(jsx) && !ts.isJsxSelfClosingElement(jsx)) return [];\n const open = ts.isJsxElement(jsx) ? jsx.openingElement : jsx;\n const tag = open.tagName.getText(sf);\n // A line break opportunity (`<wbr />` in a token path): nothing drawn.\n if (tag === 'wbr') return [];\n // <Fragment key={...}> and context providers draw their children only, like <>...</>; a provider's value reaches\n // the components below it (useContext).\n if (/\\.Provider$/.test(tag) && ts.isJsxElement(jsx)) {\n const valueAttr = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'value');\n const value = valueAttr?.initializer && ts.isJsxExpression(valueAttr.initializer) && valueAttr.initializer.expression ? evaluate(valueAttr.initializer.expression, scope) : undefined;\n const contexts = new Map(ctx.contexts ?? []);\n contexts.set(tag.replace(/\\.Provider$/, ''), value);\n const inner = { ...scope, contexts };\n return renderChildren(jsx.children, inner, { ...ctx, contexts });\n }\n if (/^(React\\.)?Fragment$|\\.Provider$/.test(tag)) return ts.isJsxElement(jsx) ? renderChildren(jsx.children, scope, ctx) : [];\n const attrs: Record<string, Value> = {};\n let spreads = false;\n let spreadChildren: Value;\n for (const a of open.attributes.properties) {\n if (ts.isJsxSpreadAttribute(a)) {\n spreads = true;\n // A spread of known props (`{...rest}`): their data and aria attributes, class names and the values a Base UI\n // root reads (value, min, max, orientation, form errors) apply; their children are drawn.\n const v = evaluate(a.expression, scope);\n if (v && typeof v === 'object' && !Array.isArray(v) && !isJsx(v) && !isClass(v) && !isElementValue(v) && !isFnRef(v)) {\n for (const [k, x] of Object.entries(v as Record<string, Value>)) {\n if (k === 'children') spreadChildren = x;\n else if (/^(data|aria)-/.test(k) || SPREAD_PROPS.has(k)) attrs[k] = x;\n }\n }\n continue;\n }\n const name = a.name.getText(sf);\n if (!a.initializer) attrs[name] = true;\n else if (ts.isStringLiteral(a.initializer)) attrs[name] = a.initializer.text;\n else if (ts.isJsxExpression(a.initializer) && a.initializer.expression) attrs[name] = evaluate(a.initializer.expression, scope);\n }\n const children = ts.isJsxElement(jsx) ? jsx.children : undefined;\n\n // A Base UI part with a `render` element (`<BaseDialog.Close render={<IconButton ... />} />`): Base UI renders that\n // element, with the part's class names added. `render={children}`: what the consumer passes (a trigger).\n // Base UI parts that only exist in some situations: the empty message of a list that has items, the clear button\n // of a field with no value, the arrow of a popup (placed by Base UI next to its trigger, not drawn).\n // An error message without `match` is shown by Base UI only once the field is invalid (a failed check while the page\n // runs): not drawn.\n if (scope.src.baseUi.has(tag.split('.')[0]!) && ((/\\.Empty$/.test(tag) && ctx.items?.length) || (/\\.Clear$/.test(tag) && ctx.selected === undefined) || /\\.Arrow$/.test(tag) || (/\\.Error$/.test(tag) && attrs.match === undefined))) return [];\n\n // With children of its own (`<Header render={<h3 />}>...`), the part keeps them: drawn as the part.\n if (scope.src.baseUi.has(tag.split('.')[0]!) && attrs.render !== undefined && !children?.some((c) => !ts.isJsxText(c) || c.text.trim())) {\n const r = attrs.render;\n const extra = classList(attrs.className);\n if (isJsx(r)) {\n const nodes = renderJsx(r, ctx, visible);\n if (nodes[0]) {\n nodes[0].classes = [...nodes[0].classes, ...extra];\n // The part's inline custom properties go with it (`style={{ '--_min-rows': rows }}` on an Input that renders a\n // textarea): they feed the element's CSS.\n const vars = styleVarsOf(attrs.style);\n if (vars) nodes[0].styleVars = new Map([...(nodes[0].styleVars ?? []), ...vars]);\n }\n return nodes;\n }\n const init = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'render')?.initializer;\n if (r === CHILDREN && init && ts.isJsxExpression(init) && init.expression) return renderExpression(init.expression, scope, ctx, visible);\n }\n\n // A design system component (Icon, Spinner...): rendered through its own TSX and CSS module.\n if (/^[A-Z]/.test(tag) && tag !== ctx.component && ctx.depth < 4 && ctx.reader.exists(tag)) {\n const nested = renderComponent(ctx.reader, tag, withFormError(tag, children?.length ? { ...attrs, children: childrenValue(children, scope) } : attrs, ctx), { ...ctx, depth: ctx.depth + 1 });\n if (nested) {\n if (tag === ICON_COMPONENT) {\n nested.kind = 'icon';\n const iconAttr = open.attributes.properties.find((a): a is ts.JsxAttribute => ts.isJsxAttribute(a) && a.name.getText(sf) === 'icon');\n const expr = iconAttr?.initializer && ts.isJsxExpression(iconAttr.initializer) ? iconAttr.initializer.expression : undefined;\n const lucideName = expr && ts.isIdentifier(expr) ? scope.src.lucide.get(expr.text) : undefined;\n if (lucideName) nested.icon = lucideName;\n else if (isLucide(attrs.icon)) nested.icon = attrs.icon.lucide;\n // An icon named by an example (`<MenuItem icon={Pencil}>` in the component sandbox): that icon.\n else if (typeof attrs.icon === 'string' && /^[A-Z]\\w*$/.test(attrs.icon)) nested.icon = attrs.icon;\n }\n if (visible) nested.visible = visible;\n return [nested];\n }\n }\n const dataAttrs = new Map<string, string>();\n for (const [k, v] of Object.entries(attrs)) {\n if (!/^(data|aria)-/.test(k)) continue;\n const str = attrString(v);\n if (str !== undefined) dataAttrs.set(k, str);\n }\n const isBaseUi = scope.src.baseUi.has(tag.split('.')[0]!);\n // Base UI parts carry their root's orientation (`data-orientation`).\n const orientation = isBaseUi && typeof attrs.orientation === 'string' ? attrs.orientation : ctx.orientation;\n if (isBaseUi && orientation && !dataAttrs.has('data-orientation')) dataAttrs.set('data-orientation', orientation);\n const node: Node = {\n key: '',\n tag,\n classes: classList(attrs.className),\n children: [],\n kind: 'frame',\n ...(visible ? { visible } : {}),\n ...(scope.src.baseUi.has(tag.split('.')[0]!)\n ? ctx.selected !== undefined && typeof attrs.value === 'string'\n ? { baseUi: true, checked: (Array.isArray(ctx.selected) ? ctx.selected.includes(attrs.value) : attrs.value === ctx.selected) ? 'true' : 'false', selectedBy: true }\n : { baseUi: true, checked: scope.main ? 'state' : (scope.checked ?? 'false') }\n : {}),\n ...(dataAttrs.size ? { attrs: dataAttrs } : {}),\n ...(/(^img$|\\.Image$)/.test(tag) ? { media: true } : {}),\n // Base UI indicators are only mounted while their item is checked, unless keepMounted.\n ...(/\\.(Item)?Indicator$/.test(tag) && scope.src.baseUi.has(tag.split('.')[0]!) && attrs.keepMounted !== true && ctx.fraction === undefined ? { whenChecked: true } : {}),\n };\n // A `<button>` or a `<select>` (itself, or the Base UI part that renders one) counts its border box (UA stylesheet).\n const element = isBaseUi ? ctx.reader.baseUiElement(scope.src.baseUiModules, tag.split('.').slice(1).join('.')) : tag;\n if (element === 'button' || element === 'select') node.borderBox = true;\n // A panel of a selection (a tab's panel) is hidden by Base UI unless its value is the selected one.\n if (isBaseUi && /\\.Panel$/.test(tag) && node.selectedBy && node.checked === 'false') node.inactive = true;\n // A thumb of a numeric root (a slider): Base UI places its center at the value.\n if (isBaseUi && /\\.Thumb$/.test(tag) && ctx.fraction !== undefined) node.at = ctx.fraction;\n // An inline background color (a swatch of the token's own color): content, not a token.\n const bg = attrs.style && typeof attrs.style === 'object' && !Array.isArray(attrs.style) ? (attrs.style as Record<string, Value>).backgroundColor : undefined;\n if (typeof bg === 'string') node.inlineFill = bg;\n // Inline style custom properties: they feed the CSS (`style={{ '--_pct': pct }}`).\n const vars = styleVarsOf(attrs.style);\n if (vars) node.styleVars = vars;\n // Inline SVG: drawn as one vector layer, its shapes styled by the CSS (stroke, width, opacity, dashes).\n if (tag === 'svg') {\n const lit: Record<string, string> = {};\n for (const [k, v] of Object.entries(attrs)) if ((typeof v === 'string' || typeof v === 'number') && k !== 'className') lit[k] = String(v);\n node.svgAttrs = lit;\n node.shapes = children ? renderChildren(children, scope, ctx).filter((c) => SVG_SHAPES.test(c.tag)) : [];\n return [node];\n }\n if (SVG_SHAPES.test(tag)) {\n const lit: Record<string, string> = {};\n for (const [k, v] of Object.entries(attrs)) if ((typeof v === 'string' || typeof v === 'number') && k !== 'className') lit[k] = String(v);\n node.svgAttrs = lit;\n return [node];\n }\n if (isInputTag(tag)) {\n // A text field: its box (a textarea's border and padding) and the placeholder text inside. The box is merged away\n // when it draws nothing of its own (an input inside a styled wrapper).\n node.inputLike = true;\n // A field the example fills (`defaultValue=\"acme/design-tokens\"`): its value, in the field's text color.\n const typed = typeof attrs.value === 'string' && attrs.value ? attrs.value : typeof attrs.defaultValue === 'string' && attrs.defaultValue ? attrs.defaultValue : undefined;\n if (typed !== undefined && !scope.main) {\n node.children = [textNode(typed)];\n return [node];\n }\n const value = typeof attrs.placeholder === 'string' ? attrs.placeholder : 'Placeholder';\n node.children = [{ key: '', tag: '#placeholder', classes: [], children: [], kind: 'text', placeholder: true, text: { property: 'Placeholder', default: value } }];\n return [node];\n }\n // A Base UI root with a numeric value (a progress, a meter): its indicator fills that share of the track.\n if (node.baseUi && /\\.Indicator$/.test(tag) && ctx.fraction !== undefined) node.fraction = ctx.fraction;\n let childCtx: RenderContext = Array.isArray(attrs.items) && node.baseUi ? { ...ctx, items: attrs.items } : ctx;\n if (isBaseUi && orientation) childCtx = { ...childCtx, orientation };\n // A Base UI form with errors: each Field of that name shows its error.\n if (isBaseUi && attrs.errors && typeof attrs.errors === 'object' && !Array.isArray(attrs.errors) && !isFnRef(attrs.errors)) childCtx = { ...childCtx, formErrors: attrs.errors as Record<string, Value> };\n const numeric = typeof attrs.value === 'number' ? attrs.value : attrs.value === undefined && typeof attrs.defaultValue === 'number' ? attrs.defaultValue : undefined;\n if (node.baseUi && /\\.Root$/.test(tag) && numeric !== undefined) {\n const min = typeof attrs.min === 'number' ? attrs.min : 0;\n const max = typeof attrs.max === 'number' ? attrs.max : 100;\n const local = tag.split('.')[0]!.toLowerCase();\n const module = [...scope.src.baseUiModules].find((m) => m && local.includes(m.split('/')[0]!)) ?? '';\n childCtx = { ...childCtx, fraction: Math.min(1, Math.max(0, (numeric - min) / (max - min || 1))), numeric: { value: numeric, module } };\n }\n // A Base UI value display under a numeric root: Base UI formats the value (a slider's number, a progress's percentage)\n // and passes it to a render function child.\n const formatted = ctx.fraction !== undefined && ctx.numeric ? (ctx.numeric.module === 'slider' ? new Intl.NumberFormat('en-US').format(ctx.numeric.value) : `${Math.round(ctx.fraction * 100)}%`) : undefined;\n if (node.baseUi && /\\.Value$/.test(tag) && formatted !== undefined && ctx.numeric) childCtx = { ...childCtx, valueArgs: ctx.numeric.module === 'slider' ? [[formatted], [ctx.numeric.value]] : [formatted, ctx.numeric.value] };\n if (children) node.children = renderChildren(children, scope, childCtx);\n else if (spreadChildren === CHILDREN && scope.preview?.some((c) => typeof c !== 'string')) node.children = renderPreview(scope.preview, childCtx);\n else if (spreadChildren !== undefined && spreadChildren !== CHILDREN) node.children = renderValues([spreadChildren], ctx);\n else if (spreads) node.takesChildren = true;\n // A Base UI value display (`<BaseSelect.Value placeholder=... />`): Base UI writes the text; drawn as its placeholder.\n if (!node.children.length && node.baseUi && /\\.Value$/.test(tag)) {\n // A value display under a numeric root (a progress at 64): Base UI writes the formatted value.\n const placeholder = formatted ?? (ctx.fraction !== undefined ? `${Math.round(ctx.fraction * 100)}%` : typeof attrs.placeholder === 'string' ? attrs.placeholder : 'Value');\n node.children = [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Value', default: placeholder } }];\n }\n return [node];\n}\n\n/** Props a spread passes on to the element it lands on, besides data and aria attributes. */\nconst SPREAD_PROPS = new Set(['className', 'value', 'defaultValue', 'min', 'max', 'orientation', 'errors']);\n\n/** A Base UI form's error for a nested component of the same `name` (a Field): passed as its `error`. */\nfunction withFormError(tag: string, props: Record<string, Value>, ctx: RenderContext): Record<string, Value> {\n const name = props.name;\n if (!ctx.formErrors || typeof name !== 'string' || props.error !== undefined || !ctx.reader.load(tag)?.props.has('error')) return props;\n const message = ctx.formErrors[name];\n const text = Array.isArray(message) ? message[0] : message;\n return typeof text === 'string' ? { ...props, error: text } : props;\n}\n\n/** JSX children passed to a nested design system component (`<Field><Input /></Field>`), as its `children` prop. */\ninterface ChildrenRef {\n children: ts.NodeArray<ts.JsxChild>;\n scope: Scope;\n}\nconst isChildrenRef = (v: Value): v is ChildrenRef & Value => !!v && typeof v === 'object' && 'children' in (v as object) && 'scope' in (v as object);\n\nfunction childrenValue(children: ts.NodeArray<ts.JsxChild>, scope: Scope): Value {\n const texts = children.filter((c) => !ts.isJsxText(c) || c.text.trim());\n // Plain text children (\"Save\") are a string, like React gives them.\n if (texts.every((c) => ts.isJsxText(c))) return texts.map((c) => (c as ts.JsxText).text.trim()).join(' ');\n return { children, scope } as unknown as Value;\n}\n\nfunction renderChildren(children: ts.NodeArray<ts.JsxChild>, scope: Scope, ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const c of children) {\n if (ts.isJsxText(c)) {\n const raw = jsxText(c.text);\n if (raw.trim()) out.push(textNode(raw.replace(/\\s+/g, ' ').trim(), raw));\n else if (raw) out.push(spaceNode(raw));\n continue;\n }\n if (ts.isJsxExpression(c)) {\n if (c.expression) out.push(...renderExpression(c.expression, scope, ctx));\n continue;\n }\n out.push(...renderJsx({ jsx: c, scope }, ctx));\n }\n return out;\n}\n\n/** Whitespace between inline runs (`{' '}`, a space between words): joins runs, never a layer of its own. */\nconst spaceNode = (raw: string): Node => ({ key: '', tag: '#text', classes: [], children: [], kind: 'text', chars: '', raw, space: true });\n\nconst textNode = (chars: string, raw?: string): Node => ({ key: '', tag: '#text', classes: [], children: [], kind: 'text', chars, ...(raw !== undefined && raw !== chars ? { raw } : {}) });\n\n/**\n * JSX text as React renders it (Babel's rule): lines trimmed where they meet a line break, empty lines dropped, the\n * others joined with one space; spaces inside a line, and at the ends of a single line, are kept.\n */\nexport function jsxText(text: string): string {\n const lines = text.split(/\\r\\n|\\n|\\r/);\n let out = '';\n lines.forEach((line, i) => {\n let l = line.replace(/\\t/g, ' ');\n if (i !== 0) l = l.replace(/^ +/, '');\n if (i !== lines.length - 1) l = l.replace(/ +$/, '');\n if (!l) return;\n if (out && i !== 0) out += ' ';\n out += l;\n });\n return out;\n}\n\n/** Identifiers an expression reads, following local consts (`const invalid = error != null`). */\nfunction identifiersIn(e: ts.Node, scope: Scope, seen = new Set<string>()): Set<string> {\n const visit = (n: ts.Node) => {\n if (ts.isIdentifier(n) && !seen.has(n.text)) {\n seen.add(n.text);\n const init = scope.inits?.get(n.text);\n if (init) identifiersIn(init, scope, seen);\n }\n if (ts.isPropertyAccessExpression(n)) return visit(n.expression);\n ts.forEachChild(n, visit);\n };\n visit(e);\n return seen;\n}\n\n/** The scope a toggled part renders in: the toggle's prop holds its drawn value, derived locals are evaluated again. */\nfunction toggledScope(scope: Scope, local: string): Scope {\n const vars = new Map(scope.vars);\n for (const k of scope.inits?.keys() ?? []) vars.delete(k);\n vars.set(local, scope.toggleValues?.get(local) ?? true);\n return { ...scope, vars, locals: new Map(scope.inits ?? []) };\n}\n\n/**\n * A JSX condition on an optional prop (`iconStart && ...`, `description && ...`, `invalid && ...` where invalid comes\n * from `error`): the part it shows becomes optional, behind a BOOLEAN property. Returns the property and the scope the\n * part renders in, or undefined when the condition does not depend on a toggle (or is false even with it on).\n */\nfunction toggleFor(cond: ts.Expression, scope: Scope): { visible: NonNullable<Node['visible']>; scope: Scope } | undefined {\n if (!scope.toggles.size) return undefined;\n const ids = identifiersIn(cond, scope);\n const local = [...scope.toggles.keys()].find((k) => ids.has(k));\n if (!local) return undefined;\n const prop = scope.toggles.get(local)!;\n const inner = toggledScope(scope, local);\n if (!truthy(evaluate(cond, inner))) return undefined;\n // Shown whether the prop is set or not (`size === 'lg'` in the other branch): not behind the toggle.\n const off = { ...scope, vars: new Map(scope.vars), locals: new Map(scope.inits ?? []) };\n for (const k of scope.inits?.keys() ?? []) off.vars.delete(k);\n if (truthy(evaluate(cond, off))) return undefined;\n const kind = scope.src.props.get(prop)?.kind;\n const property = kind === 'icon' ? sentenceCase(prop) : `Show ${sentenceCase(prop).toLowerCase()}`;\n return { visible: { property, prop, ...(scope.toggleOn?.has(prop) ? { on: true } : {}) }, scope: inner };\n}\n\n/** A toggle on a string prop (an avatar's `src`) is named after the part it shows (\"Show image\"), not the prop. */\nfunction nameToggle(visible: NonNullable<Node['visible']>, nodes: Node[], scope: Scope): Node[] {\n const cls = nodes[0]?.classes[0]?.split('|')[1];\n if (scope.src.props.get(visible.prop)?.kind === 'string' && cls) visible.property = `Show ${sentenceCase(cls).toLowerCase()}`;\n return nodes;\n}\n\nfunction renderExpression(e: ts.Expression, scope: Scope, ctx: RenderContext, visible?: Node['visible']): Node[] {\n if (ts.isParenthesizedExpression(e)) return renderExpression(e.expression, scope, ctx, visible);\n if (ts.isBinaryExpression(e) && e.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken) {\n const t = visible ? undefined : toggleFor(e.left, scope);\n if (t) return nameToggle(t.visible, renderExpression(e.right, t.scope, ctx, t.visible), scope);\n return truthy(evaluate(e.left, scope)) ? renderExpression(e.right, scope, ctx, visible) : [];\n }\n if (ts.isConditionalExpression(e)) {\n // `cond ? a : b` draws b while the optional prop is off: no toggle (Figma cannot show b when a BOOLEAN is off).\n const t = visible || truthy(evaluate(e.whenFalse, scope)) ? undefined : toggleFor(e.condition, scope);\n if (t) return nameToggle(t.visible, renderExpression(e.whenTrue, t.scope, ctx, t.visible), scope);\n return renderExpression(truthy(evaluate(e.condition, scope)) ? e.whenTrue : e.whenFalse, scope, ctx, visible);\n }\n if (ts.isJsxElement(e) || ts.isJsxSelfClosingElement(e) || ts.isJsxFragment(e)) return renderJsx({ jsx: e, scope }, ctx, visible);\n const v = evaluate(e, scope);\n if (v === CHILDREN) {\n if (scope.preview?.some((c) => typeof c !== 'string')) return renderPreview(scope.preview, ctx);\n return [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Label', default: ctx.component, prop: 'children' } }];\n }\n if (isTextRef(v)) {\n const property = v.textProp === 'children' ? 'Label' : sentenceCase(v.textProp);\n return [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property, default: v.text, prop: v.textProp }, ...(visible ? { visible } : {}) }];\n }\n if (isChildrenRef(v)) return renderChildren(v.children, v.scope, ctx);\n if (typeof v === 'string' && v.trim()) return [{ ...textNode(v.trim(), v), ...(visible ? { visible } : {}) }];\n if (typeof v === 'string' && v) return [spaceNode(v)];\n if (typeof v === 'number') return [textNode(String(v))];\n if (isJsx(v)) return renderJsx(v, ctx, visible);\n if (Array.isArray(v) || isElementValue(v)) return renderValues([v], ctx);\n if (v === OPAQUE || isFnRef(v)) {\n const mapped = renderMap(e, scope, ctx);\n if (mapped) return mapped;\n // A render function child of a Base UI list (`<Combobox.List>{renderItem}</Combobox.List>`): called for each item of\n // the root's `items`.\n const fn = functionOf(e, scope);\n if (fn && ctx.items) return renderValues(ctx.items.map((item) => callArrow(fn, [item], scope)), ctx);\n // A render function child of a Base UI value display (`<Slider.Value>{(formatted) => ...}</Slider.Value>`): called\n // with the value Base UI formats.\n if (fn && ctx.valueArgs) {\n const out = callArrow(fn, ctx.valueArgs, scope);\n if (out !== OPAQUE) return renderValues([out], ctx);\n }\n ctx.blockers?.push('shows content computed while the page runs');\n }\n return [];\n}\n\n/** The function an expression names: an arrow, a local holding one, or the branch of a condition that is one. */\nfunction functionOf(e: ts.Expression, scope: Scope): ts.ArrowFunction | ts.FunctionExpression | undefined {\n if (ts.isParenthesizedExpression(e)) return functionOf(e.expression, scope);\n if (ts.isArrowFunction(e) || ts.isFunctionExpression(e)) return e;\n if (ts.isIdentifier(e)) {\n const init = scope.inits?.get(e.text) ?? scope.locals.get(e.text);\n return init ? functionOf(init, scope) : undefined;\n }\n if (ts.isConditionalExpression(e)) {\n const c = evaluate(e.condition, scope);\n return c === OPAQUE ? undefined : functionOf(truthy(c) ? e.whenTrue : e.whenFalse, scope);\n }\n return undefined;\n}\n\n/** A list of rendered values (a `.map()` of elements, texts): each drawn in order. */\n/** An element made by `createElement` or `useRender`, with its props and children values. */\ninterface ElementValue {\n element: string;\n props: Record<string, Value>;\n kids: Value[];\n}\nconst isElementValue = (v: Value): v is ElementValue & Value => !!v && typeof v === 'object' && 'element' in (v as object) && 'kids' in (v as object);\n\nfunction elementNode(el: ElementValue, ctx: RenderContext): Node {\n const node: Node = { key: '', tag: el.element, classes: classList(el.props.className), children: [], kind: 'frame' };\n const kids = el.kids.length ? el.kids : el.props.children !== undefined ? [el.props.children] : [];\n for (const k of kids) {\n if (k === CHILDREN) node.children.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: 'Label', default: ctx.component, prop: 'children' } });\n else if (isTextRef(k)) node.children.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: k.textProp === 'children' ? 'Label' : sentenceCase(k.textProp), default: k.text, prop: k.textProp } });\n else node.children.push(...renderValues([k], ctx));\n }\n return node;\n}\n\nfunction renderValues(list: Value[], ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const v of list) {\n if (isElementValue(v)) out.push(elementNode(v, ctx));\n else if (isChildrenRef(v)) out.push(...renderChildren(v.children, v.scope, ctx));\n else if (isTextRef(v)) out.push({ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: v.textProp === 'children' ? 'Label' : sentenceCase(v.textProp), default: v.text, prop: v.textProp } });\n else if (isJsx(v)) out.push(...renderJsx(v, ctx));\n else if (Array.isArray(v)) out.push(...renderValues(v, ctx));\n else if ((typeof v === 'string' && v.trim()) || typeof v === 'number') out.push(textNode(String(v).trim(), String(v)));\n else if (typeof v === 'string' && v) out.push(spaceNode(v));\n else if (v === OPAQUE) ctx.blockers?.push('shows content computed while the page runs');\n }\n return out;\n}\n\n/**\n * `items.map((item) => <X>{item.label}</X>)` over a list the docs preview gives (a segmented control's items): one\n * element per item, rendered with the item bound. Undefined when the list is not known.\n */\nfunction renderMap(e: ts.Expression, scope: Scope, ctx: RenderContext): Node[] | undefined {\n if (!ts.isCallExpression(e) || !ts.isPropertyAccessExpression(e.expression) || e.expression.name.text !== 'map') return undefined;\n const list = evaluate(e.expression.expression, scope);\n const fn = e.arguments[0];\n if (!Array.isArray(list) || !fn || !(ts.isArrowFunction(fn) || ts.isFunctionExpression(fn))) return undefined;\n const param = fn.parameters[0];\n const out: Node[] = [];\n list.forEach((item, i) => {\n const vars = new Map(scope.vars);\n if (param && ts.isIdentifier(param.name)) vars.set(param.name.text, item);\n else if (param && ts.isObjectBindingPattern(param.name) && item && typeof item === 'object')\n for (const el of param.name.elements) if (ts.isIdentifier(el.name)) vars.set(el.name.text, (item as Record<string, Value>)[(el.propertyName ?? el.name).getText(scope.src.sf)]);\n const index = fn.parameters[1];\n if (index && ts.isIdentifier(index.name)) vars.set(index.name.text, i);\n const inner: Scope = { ...scope, vars, locals: new Map(scope.locals), inits: new Map(scope.inits ?? []) };\n const body = fn.body;\n if (ts.isBlock(body)) {\n for (const st of body.statements) {\n if (ts.isVariableStatement(st))\n for (const d of st.declarationList.declarations) {\n if (!ts.isIdentifier(d.name) || !d.initializer) continue;\n inner.locals.set(d.name.text, d.initializer);\n inner.inits!.set(d.name.text, d.initializer);\n }\n if (ts.isReturnStatement(st) && st.expression) {\n out.push(...renderExpression(st.expression, inner, ctx));\n break;\n }\n }\n } else out.push(...renderExpression(body, inner, ctx));\n });\n return out;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Docs preview content\n\n/** An element of a docs.json preview ({ c, p, children }) or a text. */\ntype DocChild = string | { c: string; p?: Record<string, unknown>; children?: DocChild[] };\n\n/** The first element of a docs preview drawing `name`, depth first. */\nfunction previewElement(v: unknown, name: string): Exclude<DocChild, string> | undefined {\n if (Array.isArray(v)) {\n for (const x of v) {\n const hit = previewElement(x, name);\n if (hit) return hit;\n }\n return undefined;\n }\n if (!v || typeof v !== 'object') return undefined;\n const n = v as Exclude<DocChild, string>;\n if (n.c === name) return n;\n return previewElement(n.children, name);\n}\n\n/**\n * The first element `<name>` of a stories file that has content, as a docs preview element: literal props, icons by\n * name, text and element children. Expressions it cannot read are left out.\n */\nfunction storyElement(sf: ts.SourceFile | undefined, name: string): Exclude<DocChild, string> | undefined {\n if (!sf) return undefined;\n const lucide = new Set<string>();\n for (const st of sf.statements) {\n if (!ts.isImportDeclaration(st) || unquote(st.moduleSpecifier.getText(sf)) !== 'lucide-react') continue;\n const b = st.importClause?.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) lucide.add(e.name.text);\n }\n const convert = (n: ts.JsxElement | ts.JsxSelfClosingElement): Exclude<DocChild, string> => {\n const open = ts.isJsxElement(n) ? n.openingElement : n;\n const p: Record<string, unknown> = {};\n for (const a of open.attributes.properties) {\n if (!ts.isJsxAttribute(a)) continue;\n const key = a.name.getText(sf);\n const init = a.initializer;\n if (!init) p[key] = true;\n else if (ts.isStringLiteral(init)) p[key] = init.text;\n else if (ts.isJsxExpression(init) && init.expression) {\n const e = init.expression;\n if (ts.isStringLiteral(e) || ts.isNoSubstitutionTemplateLiteral(e)) p[key] = e.text;\n else if (ts.isNumericLiteral(e)) p[key] = Number(e.text);\n else if (e.kind === ts.SyntaxKind.TrueKeyword || e.kind === ts.SyntaxKind.FalseKeyword) p[key] = e.kind === ts.SyntaxKind.TrueKeyword;\n else if (ts.isIdentifier(e) && lucide.has(e.text)) p[key] = e.text;\n }\n }\n const children: DocChild[] = [];\n if (ts.isJsxElement(n))\n for (const c of n.children) {\n if (ts.isJsxText(c)) {\n const t = c.text.replace(/\\s+/g, ' ').trim();\n if (t) children.push(t);\n } else if (ts.isJsxElement(c) || ts.isJsxSelfClosingElement(c)) children.push(convert(c));\n else if (ts.isJsxExpression(c) && c.expression && (ts.isStringLiteral(c.expression) || ts.isNoSubstitutionTemplateLiteral(c.expression))) children.push(c.expression.text);\n }\n return { c: open.tagName.getText(sf), ...(Object.keys(p).length ? { p } : {}), ...(children.length ? { children } : {}) };\n };\n let found: Exclude<DocChild, string> | undefined;\n const visit = (n: ts.Node) => {\n if (found) return;\n if ((ts.isJsxElement(n) || ts.isJsxSelfClosingElement(n)) && (ts.isJsxElement(n) ? n.openingElement : n).tagName.getText(sf) === name) {\n const el = convert(n);\n if (el.children?.some((c) => typeof c !== 'string')) found = el;\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n return found;\n}\n\n/** Literal props of a preview element (strings, numbers, booleans): what code gets. */\nfunction previewProps(el: Exclude<DocChild, string>): Record<string, Value> {\n const out: Record<string, Value> = {};\n for (const [k, v] of Object.entries(el.p ?? {})) if (v !== null && v !== undefined) out[k] = jsonValue(v);\n return out;\n}\n\n/** A JSON value of a docs preview (strings, numbers, lists and objects of them) as an evaluator value. */\nfunction jsonValue(v: unknown): Value {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null) return v;\n if (Array.isArray(v)) return v.map(jsonValue);\n if (v && typeof v === 'object') return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, jsonValue(x)]));\n return undefined;\n}\n\n/** Preview children drawn for `{children}`: design system elements through their own TSX, texts as text. */\nfunction renderPreview(children: DocChild[], ctx: RenderContext): Node[] {\n const out: Node[] = [];\n for (const c of children) {\n if (typeof c === 'string') {\n if (c.trim()) out.push(textNode(c.trim()));\n continue;\n }\n if (!ctx.reader.exists(c.c) || ctx.depth >= 4) continue;\n const kids = c.children ?? [];\n let props: Record<string, Value> = previewProps(c);\n if (kids.length && kids.every((k) => typeof k === 'string')) props.children = (kids as string[]).join(' ');\n else if (kids.length) props.children = CHILDREN;\n props = withFormError(c.c, props, ctx);\n const n = renderComponent(ctx.reader, c.c, props, { ...ctx, depth: ctx.depth + 1 }, undefined, kids.some((k) => typeof k !== 'string') ? kids : undefined);\n if (n) out.push(n);\n else ctx.blockers?.push(`cannot draw its ${c.c} parts yet`);\n }\n return out;\n}\n\n/**\n * `return useRender({ defaultTagName: 'a', props: mergeProps({ className, children }, rest) })` (Base UI's render\n * hook, Link): the element it renders by default, with its class names and children.\n */\nfunction useRenderElement(fn: ts.FunctionLikeDeclaration, scope: Scope, ctx: RenderContext): Node[] | undefined {\n if (!fn.body || !ts.isBlock(fn.body)) return undefined;\n const ret = fn.body.statements.find(ts.isReturnStatement)?.expression;\n if (!ret || !ts.isCallExpression(ret) || ret.expression.getText(scope.src.sf) !== 'useRender' || !ret.arguments[0]) return undefined;\n const opts = evaluate(ret.arguments[0], scope) as Record<string, Value> | undefined;\n const tag = typeof opts?.defaultTagName === 'string' ? opts.defaultTagName : 'div';\n const props = (opts?.props && typeof opts.props === 'object' ? opts.props : {}) as Record<string, Value>;\n return [elementNode({ element: tag, props, kids: [] }, ctx)];\n}\n\n/** Renders a component for the given props into a node tree (its root node). */\nfunction renderComponent(reader: Reader, name: string, props: Record<string, Value>, ctx: RenderContext, fnOverride?: ts.FunctionLikeDeclaration, preview?: DocChild[]): Node | undefined {\n const src = reader.load(name);\n const fn = fnOverride ?? src?.fn;\n if (!src || !fn) return undefined;\n const scope: Scope = { src, vars: new Map(), locals: new Map(), toggles: new Map(), main: ctx.depth === 0, inits: new Map(), ...(preview ? { preview } : {}), ...(ctx.contexts ? { contexts: ctx.contexts } : {}) };\n const given = { ...props };\n if (!scope.main) {\n const on = (k: string) => props[k] === true;\n scope.checked = on('indeterminate') ? 'mixed' : on('checked') || on('defaultChecked') ? 'true' : 'false';\n }\n if (scope.main) {\n // Content props the component writes (\"label\", \"description\"): TEXT properties, defaulting to their name.\n for (const p of src.props.values()) {\n if (given[p.name] !== undefined || p.name === 'children') continue;\n if (p.kind === 'node' && !p.optional) given[p.name] = { textProp: p.name, text: sentenceCase(p.name) };\n if (p.kind === 'string' && !p.optional) given[p.name] = sentenceCase(p.name);\n }\n }\n const names = bindProps(fn, scope, given);\n if (scope.main) {\n // Optional icon props are BOOLEAN properties (\"Icon start\"): their JSX condition shows a part. So are optional\n // content props (\"Show description\") and optional strings a part depends on (an avatar photo's `src`).\n scope.toggleValues = new Map();\n for (const [local, prop] of names) {\n const info = src.props.get(prop);\n if (!info?.optional || given[prop] !== undefined) continue;\n if (info.kind === 'icon') scope.toggles.set(local, prop);\n else if (info.kind === 'node' && prop !== 'children') {\n scope.toggles.set(local, prop);\n scope.toggleValues.set(local, { textProp: prop, text: sentenceCase(prop) });\n } else if (info.kind === 'string') {\n scope.toggles.set(local, prop);\n // Text the example gives (a token name): drawn with it, shown by default, like the example.\n const example = ctx.examples?.[prop];\n scope.toggleValues.set(local, typeof example === 'string' ? example : sentenceCase(prop));\n if (typeof example === 'string') (scope.toggleOn ??= new Set()).add(prop);\n }\n }\n }\n const jsx = renderedJsx(fn, scope);\n const nodes = jsx ? renderJsx(jsx, ctx) : useRenderElement(fn, scope, ctx);\n if (!nodes) return undefined;\n return nodes.length === 1 ? nodes[0] : nodes.length ? { key: '', tag: 'div', classes: [], children: nodes, kind: 'frame' } : undefined;\n}\n\n/** A wrapper whose only child is the text becomes the text part itself (Button's `<span class=\"label\">`). */\nfunction collapseText(n: Node, root = true, boxed: (n: Node) => boolean = () => false, unseen: (n: Node) => boolean = () => false): Node {\n n.children = n.children.map((c) => collapseText(c, false, boxed, unseen));\n // Screen reader text inside a run (a status word before a detail): never drawn, so not part of the drawn sentence.\n const seen = n.children.filter((c) => !unseen(c));\n if (seen.length < n.children.length && seen.length && /^(span|p|label|small|strong|em|code)$/.test(n.tag)) n.children = seen;\n // Inline text runs (\"Page <span>6</span> of <span>12</span>\"): one text layer with the whole sentence, styled like\n // its first run (Figma would need mixed styles for the rest). Only texts written in code, never a TEXT property.\n const run = (c: Node): string | undefined =>\n c.kind === 'text' && c.chars !== undefined && !c.visible ? (c.raw ?? c.chars) : c.tag === 'span' && c.kind === 'frame' && !c.visible && c.children.length === 1 ? run(c.children[0]!) : undefined;\n if (n.kind === 'frame' && n.children.filter((c) => !c.space).length > 1 && /^(span|p|label|small|strong|em|code)$/.test(n.tag) && n.children.every((c) => run(c) !== undefined)) {\n // Joined as React renders them: the spaces the texts have (`Page ` before `{page}`, a space between words), none\n // between two texts of one expression (`color` `.` `action`); elements with nothing between them keep one space.\n let chars = '';\n n.children.forEach((c, i) => {\n const text = run(c)!;\n const prev = n.children[i - 1];\n if (prev) {\n const before = run(prev)!;\n chars += /\\s$/.test(before) || /^\\s/.test(text) || (prev.tag === '#text' && c.tag === '#text') ? '' : ' ';\n }\n chars += text;\n });\n n.children = [{ ...textNode(chars.replace(/\\s+/g, ' ').trim()) }];\n }\n n.children = n.children.filter((c) => !c.space);\n // Only inline wrappers (span): a block (Card header) keeps its frame for its padding.\n // Not when the span paints a box (a pill, a count badge): the box stays a frame around its text.\n if (!root && n.tag === 'span' && !n.name && n.kind === 'frame' && n.children.length === 1 && n.children[0]!.kind === 'text' && !n.children[0]!.classes.length && !n.children[0]!.inputLike && !boxed(n)) {\n const t = n.children[0]!;\n return { ...t, tag: n.tag, classes: n.classes, ...(n.visible ? { visible: n.visible } : {}) };\n }\n return n;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Spec\n\ninterface Built {\n /** What the render could not draw faithfully. */\n blockers: string[];\n root: Node;\n /** Part id -> node, in tree order. */\n parts: Map<string, Node>;\n parents: Map<string, string | undefined>;\n}\n\n/**\n * The values an element with `classes` inherits where `root` draws it: computed down the path from `root` to its\n * parent, from `page`. Undefined when no element of the tree has those classes.\n */\nfunction inheritedInside(root: Node, classes: string[], rules: CssRule[], page: Map<string, string> | undefined): Map<string, string> | undefined {\n const path: Node[] = [];\n const find = (n: Node): boolean => {\n if (n !== root && classes.every((c) => n.classes.includes(c))) return true;\n path.push(n);\n for (const c of n.children) if (find(c)) return true;\n path.pop();\n return false;\n };\n if (!find(root)) return undefined;\n let ctx = page;\n for (const n of path) {\n if (n.kind !== 'frame') continue;\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n ctx = computeValues(declaredFor(rules, el, DEFAULT_STATE), ctx);\n }\n return ctx;\n}\n\n/** Renders the main component for one set of axis values, with stable part ids. */\n/**\n * Which part of a component with a popup a set draws: the component without its popup (a select's trigger), or the\n * popup alone drawn open (`*.Popup` under the `*.Portal`), the way a Figma UI kit draws menus and dialogs.\n */\nexport type SpecView = 'without-popup' | 'popup';\n\n/** The tree without its portals (popups), or the first `*.Popup` under a portal as the root. */\nfunction applyView(root: Node, view: SpecView | undefined): Node | undefined {\n if (!view) return root;\n const isPortal = (n: Node) => /\\.Portal$/.test(n.tag);\n if (view === 'without-popup') {\n const strip = (n: Node): Node => ({ ...n, children: n.children.filter((c) => !isPortal(c)).map(strip) });\n return isPortal(root) ? undefined : strip(root);\n }\n let found: Node | undefined;\n const find = (n: Node, inPortal: boolean) => {\n if (found) return;\n if (inPortal && /\\.Popup$/.test(n.tag)) found = n;\n for (const c of n.children) find(c, inPortal || isPortal(n));\n };\n find(root, false);\n // Submenus and nested popups stay closed: only the popup itself is drawn open.\n const strip = (n: Node): Node => ({ ...n, children: n.children.filter((c) => !isPortal(c)).map(strip) });\n return found ? strip({ ...found, visible: undefined }) : undefined;\n}\n\nfunction build(reader: Reader, src: ComponentSource, props: Record<string, Value>, preview?: DocChild[], view?: SpecView, rules: CssRule[] = [], tokens?: Map<string, TokenInfo>, examples?: Record<string, Value>): Built | undefined {\n const blockers: string[] = [];\n const dv = props.defaultValue;\n const selected = typeof dv === 'string' ? dv : Array.isArray(dv) && dv.every((x) => typeof x === 'string') ? (dv as string[]) : undefined;\n const rendered = renderComponent(reader, src.name, { ...props, children: CHILDREN }, { reader, depth: 0, component: src.name, blockers, ...(selected !== undefined ? { selected } : {}), ...(examples ? { examples } : {}) }, undefined, preview);\n let root = rendered && applyView(rendered, view);\n if (!root) return undefined;\n // An unstyled outer element around one child (a select's Base UI root around its trigger): the child is the set.\n const overlay = (n: Node) => POPUP_PART.test(n.tag) || /\\.Portal$/.test(n.tag);\n while (root.children.length === 1 && !root.classes.length && !root.attrs && root.kind === 'frame' && !overlay(root) && root.children[0]!.kind === 'frame' && !root.children[0]!.visible && !overlay(root.children[0]!))\n root = root.children[0]!;\n // Compound components (Card): children come through props, so draw the parts the file exports (CardHeader...).\n if (root.takesChildren && !root.children.length && src.subcomponents.length) {\n root.fromExports = true;\n for (const sub of src.subcomponents) {\n const label = sub.name.slice(src.name.length);\n const n = renderComponent(reader, src.name, {}, { reader, depth: 1, component: src.name, blockers }, sub.fn);\n if (!n) continue;\n n.name = label;\n if (n.takesChildren && !n.children.length) n.children = [{ key: '', tag: '#text', classes: [], children: [], kind: 'text', text: { property: label, default: label } }];\n root.children.push(n);\n }\n }\n // Parts inside a selected option (a radio's dot) carry its checked state, as Base UI sets it on them. A panel of an\n // item that is not open (an accordion item outside its defaultValue, or alone) is not mounted: not drawn.\n const follow = (n: Node, inherited: Node['checked'], item?: Node) => {\n if (n.baseUi && n.selectedBy) inherited = n.checked;\n else if (n.baseUi && inherited) n.checked = inherited;\n if (n.baseUi && /\\.Item$/.test(n.tag)) item = n;\n if (n.baseUi && /\\.Panel$/.test(n.tag) && item && item.checked !== 'true' && item.checked !== 'state') n.inactive = true;\n for (const c of n.children) follow(c, inherited, item);\n };\n follow(root, undefined);\n decorate(root, rules, tokens);\n // A span that paints a box in its default look (background, border or padding): kept as a frame.\n const boxed = (n: Node) => {\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n const d = declaredFor(rules, el, DEFAULT_STATE);\n const set = (k: string) => d.has(k) && !/^(0|0px|none|transparent)$/.test(d.get(k)!.value.trim());\n return ['background-color', 'border-top-width', 'padding-left', 'padding-top'].some(set);\n };\n // Visually hidden (the screen reader text pattern): left out of the text runs it sits in.\n const unseen = (n: Node) => {\n if (n.kind !== 'frame' && n.kind !== 'text') return false;\n const el: CssElement = { tag: n.tag, classes: new Set(n.classes), children: [], present: true, isRoot: false, inputLike: false };\n return visuallyHidden(new Map([...declaredFor(rules, el, DEFAULT_STATE)].map(([k, d]) => [k, d.value])));\n };\n const tree = collapseText(root, true, boxed, unseen);\n const parts = new Map<string, Node>();\n const parents = new Map<string, string | undefined>();\n const used = new Set<string>();\n const slug = (s: string) => s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n const assign = (n: Node, parent: string | undefined) => {\n let base: string;\n if (!parent) base = 'root';\n else if (n.visible) base = slug(n.visible.prop);\n else if (n.text && n.kind === 'text' && !n.placeholder) base = n.text.prop === 'children' ? 'text' : `${slug(n.text.property)}-text`;\n else if (n.placeholder) base = 'placeholder';\n else if (n.name) base = slug(n.name);\n else base = slug(n.classes[0]?.split('|')[1] ?? (n.chars !== undefined ? 'text' : n.tag)) || 'part';\n let id = base;\n for (let i = 2; used.has(id); i++) id = `${base}-${i}`;\n used.add(id);\n n.key = id;\n parts.set(id, n);\n parents.set(id, parent);\n for (const c of n.children) assign(c, id);\n };\n assign(tree, undefined);\n return { root: tree, parts, parents, blockers };\n}\n\n/** CSS elements of a node tree (no part ids yet), for the cascade before the parts are named. */\nfunction cssElements(root: Node): Map<Node, CssElement> {\n const out = new Map<Node, CssElement>();\n const make = (n: Node, parent: CssElement | undefined): CssElement => {\n const el: CssElement = {\n tag: n.tag,\n classes: new Set(n.classes),\n parent,\n children: [],\n present: (!n.visible || !!n.visible.on) && !n.pseudo,\n isRoot: !parent,\n inputLike: !!n.inputLike,\n ...(n.baseUi ? { baseUi: true, checked: n.checked } : {}),\n ...(n.attrs ? { attrs: n.attrs } : {}),\n };\n out.set(n, el);\n el.children = n.children.map((c) => make(c, el));\n return el;\n };\n make(root, undefined);\n return out;\n}\n\nconst declaredVarCache = new WeakMap<CssRule[], Set<string>>();\n/** Custom properties the stylesheets declare (`--_height`): a var() of any other one that is not a token is set at run time. */\nfunction declaredVars(rules: CssRule[]): Set<string> {\n let s = declaredVarCache.get(rules);\n if (!s) {\n s = new Set(rules.flatMap((r) => r.decls.filter((d) => d.prop.startsWith('--')).map((d) => d.prop)));\n declaredVarCache.set(rules, s);\n }\n return s;\n}\n\n/** `var(--active-tab-left)`: a custom property Base UI sets while the page runs (no rule declares it, not a token). */\nfunction runtimeVar(raw: string | undefined, rules: CssRule[], tokens: Map<string, TokenInfo> | undefined): boolean {\n const m = raw ? /^var\\(\\s*(--[\\w-]+)\\s*\\)$/.exec(raw.trim()) : null;\n return !!m && !declaredVars(rules).has(m[1]!) && !tokens?.has(m[1]!);\n}\n\n/** Paints of a `::before` / `::after` that make it a visible decoration. */\nconst PSEUDO_PAINTS = ['background-color', 'border-top-width', 'border-bottom-width', 'border-left-width', 'border-right-width'];\n\n/**\n * Layers the CSS draws without an element of their own, made into nodes so Figma gets a layer for them:\n * - `::before` / `::after` with empty content that paint (a hairline under a tab list): a \"Decoration\" frame, first\n * when it sits under its siblings (negative z-index or ::before), else last. Styled from its host's pseudo rules.\n * - A Base UI indicator sized at run time to the selected item (`left: var(--active-tab-left)`): moved into that item,\n * first (under its content), to fill it where code reads the item's size.\n */\nfunction decorate(root: Node, rules: CssRule[], tokens: Map<string, TokenInfo> | undefined): void {\n if (!rules.length) return;\n const els = cssElements(root);\n const visit = (n: Node, parent: Node | undefined) => {\n for (const c of [...n.children]) visit(c, n);\n if (n.kind !== 'frame' || n.svgAttrs || n.pseudo) return;\n const el = els.get(n)!;\n if (n.baseUi && n.whenChecked && /\\.Indicator$/.test(n.tag) && parent) {\n const d = declaredFor(rules, el, DEFAULT_STATE);\n if (['left', 'top', 'width', 'height'].some((k) => runtimeVar(d.get(k)?.value, rules, tokens))) {\n const item = parent.children.find((s) => s !== n && s.baseUi && s.selectedBy && s.checked === 'true');\n if (item) {\n parent.children.splice(parent.children.indexOf(n), 1);\n item.children.unshift(n);\n n.follows = true;\n delete n.whenChecked;\n }\n }\n }\n for (const pseudo of ['before', 'after'] as const) {\n const d = declaredFor(rules, el, DEFAULT_STATE, pseudo);\n if (!/^(\"\"|'')$/.test(d.get('content')?.value.trim() ?? '')) continue;\n if (!PSEUDO_PAINTS.some((k) => d.has(k) && !/^(0|none|transparent)$/.test(d.get(k)!.value.trim()))) continue;\n const deco: Node = { key: '', tag: `::${pseudo}`, classes: [], children: [], kind: 'frame', pseudo, name: 'Decoration' };\n if (pseudo === 'before' || /^-/.test(d.get('z-index')?.value.trim() ?? '')) n.children.unshift(deco);\n else n.children.push(deco);\n }\n };\n visit(root, undefined);\n}\n\nfunction toCssTree(b: Built): Map<string, CssElement> {\n const els = new Map<string, CssElement>();\n const make = (n: Node, parent: CssElement | undefined): CssElement => {\n const el: CssElement = {\n tag: n.tag,\n classes: new Set(n.classes),\n parent,\n children: [],\n present: (!n.visible || !!n.visible.on) && !n.pseudo,\n isRoot: !parent,\n inputLike: !!n.inputLike,\n ...(n.baseUi ? { baseUi: true, checked: n.checked } : {}),\n ...(n.attrs ? { attrs: n.attrs } : {}),\n };\n els.set(n.key, el);\n el.children = n.children.map((c) => make(c, el));\n for (const [i, shape] of (n.shapes ?? []).entries()) {\n const sel: CssElement = { tag: shape.tag, classes: new Set(shape.classes), parent: el, children: [], present: true, isRoot: false, inputLike: false };\n els.set(`${n.key}#shape-${i}`, sel);\n el.children.push(sel);\n }\n return el;\n };\n make(b.root, undefined);\n return els;\n}\n\ninterface Resolved {\n value?: SpecValue;\n unmapped?: string;\n}\n\nconst isZero = (v: string) => /^0(px|rem|em|%)?$/.test(v);\n\n/** A CSS value as a token path, a literal 0, or null (no paint). */\nfunction resolveValue(raw: string | undefined, values: Map<string, string>, tokens: Map<string, TokenInfo>, depth = 0, parent?: Map<string, string>, forColor = false): Resolved | undefined {\n if (raw === undefined) return undefined;\n const v = raw.trim();\n const low = v.toLowerCase();\n if (depth > 12) return { unmapped: 'custom properties form a cycle' };\n if (low === 'transparent' || low === 'none') return { value: null };\n if (isZero(v)) return { value: 0 };\n // currentcolor is the element's color; inside `color` itself it is the parent's (CSS Color 4).\n if (low === 'currentcolor') return forColor ? resolveValue(parent?.get('color'), parent ?? new Map(), tokens, depth + 1) : resolveValue(values.get('color'), values, tokens, depth + 1, parent, true);\n if (low === 'normal' || low === 'auto' || low === 'inherit' || low === 'initial' || low === 'unset' || low === 'medium') return undefined;\n const m = /^var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([\\s\\S]+))?\\)$/.exec(v);\n if (m) {\n const name = m[1]!;\n const token = tokens.get(name);\n if (token) return { value: token.path };\n if (values.has(name)) return resolveValue(values.get(name), values, tokens, depth + 1, parent, forColor);\n if (m[2] !== undefined) return resolveValue(m[2], values, tokens, depth + 1, parent, forColor);\n return { unmapped: `${name} is not a token` };\n }\n if (/^calc\\(/i.test(v)) return calcValue(v, values, tokens, depth, parent);\n // min(a, b) for a size that shrinks on small screens (`min(var(--size-140), 100%)`): the token it is designed at.\n const mm = /^min\\(([\\s\\S]+)\\)$/i.exec(v);\n if (mm) {\n for (const arg of splitTop(mm[1]!, ',')) {\n const r = resolveValue(arg, values, tokens, depth + 1, parent, forColor);\n if (r && r.unmapped === undefined && typeof r.value === 'string') return r;\n }\n return { unmapped: 'min() of no token' };\n }\n if (v === '100%') return { unmapped: 'fills its container: Figma draws it at a fixed width' };\n if (/%$/.test(v)) return { unmapped: 'relative size: the Figma part hugs its content' };\n return { unmapped: 'literal value, not a token' };\n}\n\n/**\n * A calc() of tokens (\"calc(var(--space-2) + var(--space-0-5))\") as an expression of token paths: \"calc(space.2 + space.0-5)\".\n * A calc() of a single token is that token (bound in Figma). Literals other than plain numbers and px are not mapped.\n */\nfunction calcValue(v: string, values: Map<string, string>, tokens: Map<string, TokenInfo>, depth: number, parent?: Map<string, string>): Resolved {\n let inner = v.slice(v.indexOf('(') + 1, v.lastIndexOf(')'));\n let failed: string | undefined;\n // 1lh is the element's line height: its font size times its line-height factor, both tokens (a textarea of 3 rows).\n if (/\\d*\\.?\\d+lh\\b/.test(inner)) {\n const fs = resolveValue(values.get('font-size'), values, tokens, depth + 1, parent);\n const lh = resolveValue(values.get('line-height'), values, tokens, depth + 1, parent);\n if (typeof fs?.value === 'string' && typeof lh?.value === 'string' && !fs.value.startsWith('calc(') && !lh.value.startsWith('calc(')) {\n inner = inner.replace(/(\\d*\\.?\\d+)lh\\b/g, (_m, n: string) => (Number(n) === 1 ? `(${fs.value} * ${lh.value})` : `${n} * (${fs.value} * ${lh.value})`));\n }\n }\n const substituted = inner.replace(/var\\(\\s*--[\\w-]+\\s*(?:,[^()]*)?\\)/g, (m) => {\n // A custom property holding a plain number (`--_min-rows: 3`, set inline from a prop): that number.\n let raw: string | undefined = m;\n for (let hops = 0; hops < 12 && raw; hops++) {\n const name = /^var\\(\\s*(--[\\w-]+)/.exec(raw.trim())?.[1];\n if (!name || tokens.has(name)) break;\n raw = values.get(name);\n }\n if (raw !== undefined && /^-?\\d*\\.?\\d+$/.test(raw.trim())) return raw.trim();\n const r = resolveValue(m, values, tokens, depth + 1, parent);\n if (!r || r.unmapped !== undefined || r.value === null || r.value === undefined) {\n failed ??= r?.unmapped ?? `${m} has no value`;\n return '0';\n }\n if (typeof r.value === 'number') return String(r.value);\n return r.value.startsWith('calc(') ? `(${r.value.slice(5, -1)})` : r.value;\n });\n if (failed) return { unmapped: `calc(): ${failed}` };\n const types = typesOf(tokens);\n const parts = substituted.match(/[()*/]|[^\\s()*/]+/g) ?? [];\n for (const t of parts) {\n if (/^[()*/+-]$/.test(t) || /^-?\\d+(\\.\\d+)?(px)?$/.test(t) || types.has(t)) continue;\n return { unmapped: `calc() with ${t}: only tokens, numbers and px are mapped` };\n }\n const paths = parts.filter((t) => types.has(t));\n if (!paths.length) return { unmapped: 'calc() of literals, not a token' };\n if (parts.length === 1) return { value: paths[0]! };\n return { value: `calc(${parts.join(' ').replace(/\\( /g, '(').replace(/ \\)/g, ')')})` };\n}\n\nconst FRAME_FIELDS: [string, SpecField][] = [\n ['background-color', 'fill'],\n ['border-radius', 'cornerRadius'],\n ['padding-top', 'paddingTop'],\n ['padding-right', 'paddingRight'],\n ['padding-bottom', 'paddingBottom'],\n ['padding-left', 'paddingLeft'],\n ['gap', 'itemSpacing'],\n ['width', 'width'],\n ['height', 'height'],\n ['min-width', 'minWidth'],\n ['min-height', 'minHeight'],\n];\n\nconst TEXT_FIELDS: [string, SpecField][] = [\n ['color', 'textFill'],\n ['font-family', 'fontFamily'],\n ['font-size', 'fontSize'],\n ['font-weight', 'fontWeight'],\n ['line-height', 'lineHeight'],\n ['letter-spacing', 'letterSpacing'],\n];\n\n/** Fields CSS may give as a unitless number. */\nconst NUMBER_FIELDS: ReadonlySet<SpecField> = new Set(['strokeWeight', 'opacity']);\n\nconst SIDE_FIELDS: Record<string, SpecField> = { top: 'strokeTopWeight', right: 'strokeRightWeight', bottom: 'strokeBottomWeight', left: 'strokeLeftWeight' };\n\nconst typeCache = new WeakMap<Map<string, TokenInfo>, Map<string, TokenInfo>>();\n/** Token path -> token, for type checks. */\nfunction typesOf(tokens: Map<string, TokenInfo>): Map<string, TokenInfo> {\n let m = typeCache.get(tokens);\n if (!m) {\n m = new Map([...tokens.values()].map((t) => [t.path, t]));\n typeCache.set(tokens, m);\n }\n return m;\n}\n\nfunction expectedTypes(field: SpecField): string[] {\n if (field === 'textDecoration') return ['keyword'];\n if (COLOR_FIELDS.has(field)) return ['color'];\n if (field === 'fontFamily') return ['fontFamily'];\n if (field === 'fontWeight') return ['fontWeight', 'number'];\n if (field === 'opacity') return ['number'];\n return ['dimension', 'number'];\n}\n\ninterface PartValues {\n values: Partial<Record<SpecField, SpecValue>>;\n unmapped: { property: string; value: string; reason: string }[];\n}\n\nfunction partValues(node: Node, computed: Map<string, string>, own: Map<string, string>, tokens: Map<string, TokenInfo>, parent: Map<string, string> | undefined): PartValues {\n const out: PartValues = { values: {}, unmapped: [] };\n const set = (field: SpecField, prop: string, raw: string | undefined, skipZero = false) => {\n // Unitless numbers where CSS takes them (`stroke-width: 3`, `opacity: 0.5`): set as is, nothing to bind.\n if (raw !== undefined && NUMBER_FIELDS.has(field) && /^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(raw.trim())) {\n out.values[field] = Number(raw.trim());\n return;\n }\n // em: a multiple of the font size (the parent's, for font-size itself), from the font size token.\n const em = raw !== undefined ? /^(\\d*\\.?\\d+)em$/.exec(raw.trim()) : null;\n if (em) {\n const base = prop === 'font-size' ? parent?.get('font-size') : computed.get('font-size');\n const b = resolveValue(base, prop === 'font-size' ? (parent ?? new Map()) : computed, tokens, 0, parent);\n if (b && typeof b.value === 'string' && !b.value.startsWith('calc(')) {\n const n = Number(em[1]);\n out.values[field] = n === 1 ? b.value : `calc(${b.value} * ${n})`;\n return;\n }\n }\n const r = resolveValue(raw, computed, tokens, 0, parent, prop === 'color');\n if (!r) return;\n if (r.unmapped) {\n out.unmapped.push({ property: prop, value: raw!, reason: r.unmapped });\n return;\n }\n if (r.value === 0 && skipZero) return;\n if (r.value === null && !COLOR_FIELDS.has(field)) return;\n if (typeof r.value === 'string') {\n const t = typesOf(tokens).get(r.value);\n if (t && !expectedTypes(field).includes(t.type)) {\n out.unmapped.push({ property: prop, value: raw!, reason: `${r.value} is a ${t.type} token, ${field} needs ${expectedTypes(field).join(' or ')}` });\n return;\n }\n }\n out.values[field] = r.value as SpecValue;\n };\n // Opacity 0 hides the part and 1 is the default: only values in between are drawn.\n const opacity = own.get('opacity');\n const setOpacity = () => {\n if (opacity !== undefined && !/^(0|1|1\\.0+)$/.test(opacity.trim())) set('opacity', 'opacity', opacity);\n };\n if (node.kind === 'text') {\n for (const [prop, field] of TEXT_FIELDS) set(field, prop, computed.get(prop));\n // Underline (a link): a keyword, drawn unless its color is transparent (a standalone link at rest).\n const line = computed.get('text-decoration-line') ?? '';\n const lineColor = (computed.get('text-decoration-color') ?? '').trim().toLowerCase();\n const keyword = /underline/.test(line) ? 'UNDERLINE' : /line-through/.test(line) ? 'STRIKETHROUGH' : undefined;\n if (keyword && lineColor !== 'transparent') out.values.textDecoration = keyword;\n setOpacity();\n return out;\n }\n if (node.kind === 'icon') {\n set('width', 'width', computed.get('width'));\n set('height', 'height', computed.get('height'));\n set('stroke', 'color', computed.get('color'));\n set('strokeWeight', 'stroke-width', computed.get('stroke-width'));\n setOpacity();\n return out;\n }\n setOpacity();\n // Gap: the one along the auto layout direction; a wrapping row also spaces its lines (row-gap).\n const layout = layoutOf(computed);\n const gap = computed.get(layout.direction === 'HORIZONTAL' ? 'column-gap' : 'row-gap');\n for (const [prop, field] of FRAME_FIELDS) set(field, prop, field === 'itemSpacing' ? gap : computed.get(prop), field === 'minWidth' || field === 'minHeight');\n if (layout.wrap) set('counterAxisSpacing', 'row-gap', computed.get('row-gap'));\n // Borders: one stroke for four equal sides, or per-side weights (a top rule).\n const widths = (['top', 'right', 'bottom', 'left'] as const).map((s) => computed.get(`border-${s}-width`));\n const colors = (['top', 'right', 'bottom', 'left'] as const).map((s) => computed.get(`border-${s}-color`));\n const present = widths.map((w) => w !== undefined && !isZero(w));\n if (present.every(Boolean) && new Set(widths).size === 1 && new Set(colors).size === 1) {\n set('strokeWeight', 'border-width', widths[0]);\n set('stroke', 'border-color', colors[0]);\n } else if (present.some(Boolean)) {\n const colorAt = present.indexOf(true);\n set('stroke', 'border-color', colors[colorAt]);\n (['top', 'right', 'bottom', 'left'] as const).forEach((s, i) => (present[i] ? set(SIDE_FIELDS[s]!, `border-${s}-width`, widths[i]) : (out.values[SIDE_FIELDS[s]!] = 0)));\n }\n for (const [prop, reason] of Object.entries(REPORTED)) {\n const v = own.get(prop);\n if (v !== undefined && /var\\(/.test(v)) out.unmapped.push({ property: prop, value: v, reason });\n }\n contentBoxMinimums(out.values, computed, node.borderBox);\n return out;\n}\n\n/**\n * CSS min-height, min-width, height and width count the content box (box-sizing: content-box, the default): the padding\n * and the border come on top. Figma's include them. A checkbox row with `min-height: size.6` and `padding-block: space.0-5` is\n * 28px in code; drawn as minHeight size.6 it was 25. The minimum becomes the sum, as a calc() of the same tokens.\n */\nfunction contentBoxMinimums(values: PartValues['values'], computed: Map<string, string>, borderBoxByDefault = false): void {\n if ((computed.get('box-sizing') ?? (borderBoxByDefault ? 'border-box' : 'content-box')).trim() === 'border-box') return;\n const term = (v: SpecValue | undefined): string | undefined => {\n if (v === undefined || v === null || v === 0) return undefined;\n if (typeof v === 'number') return String(v);\n if (typeof v !== 'string') return undefined;\n return v.startsWith('calc(') ? `(${v.slice(5, -1)})` : v;\n };\n const sum = (base: SpecValue, extra: (SpecValue | undefined)[]): SpecValue => {\n const add = extra.map(term).filter((t): t is string => !!t);\n const head = term(base);\n if (!add.length || !head) return base;\n return `calc(${[head, ...add].join(' + ')})`;\n };\n const border = (side: 'Top' | 'Right' | 'Bottom' | 'Left') => values[`stroke${side}Weight` as SpecField] ?? values.strokeWeight;\n if (values.minHeight !== undefined) values.minHeight = sum(values.minHeight, [values.paddingTop, values.paddingBottom, border('Top'), border('Bottom')]);\n if (values.minWidth !== undefined) values.minWidth = sum(values.minWidth, [values.paddingLeft, values.paddingRight, border('Left'), border('Right')]);\n // height and width count the content box the same way: a table cell of height control.height.md with a 1px bottom\n // border is 45px in code (Table was 142px in Figma for 144).\n if (values.height !== undefined) values.height = sum(values.height, [values.paddingTop, values.paddingBottom, border('Top'), border('Bottom')]);\n if (values.width !== undefined) values.width = sum(values.width, [values.paddingLeft, values.paddingRight, border('Left'), border('Right')]);\n}\n\n/** A grid with no tracks of its own (`display: grid; place-items: center`): one cell, drawn as a centering auto layout. */\nconst singleCellGrid = (c: Map<string, string>) =>\n /grid/.test(c.get('display') ?? '') && ['grid-template-columns', 'grid-template-rows', 'grid-template-areas', 'grid-template', 'grid-auto-flow', 'grid-auto-columns'].every((k) => !c.get(k) || c.get(k) === 'none');\n\n/** The browser's display of table elements, when the CSS does not set one. */\nconst TABLE_DISPLAY: Record<string, string> = { table: 'table', thead: 'table-row-group', tbody: 'table-row-group', tfoot: 'table-row-group', tr: 'table-row', td: 'table-cell', th: 'table-cell', caption: 'table-caption' };\n\n/** Cross-axis alignment of grid items (align-items). */\nconst gridCounter = (v: string | undefined): SpecLayout['counter'] => (/center/.test(v ?? '') ? 'CENTER' : /end/.test(v ?? '') ? 'MAX' : /start/.test(v ?? '') ? 'MIN' : 'STRETCH');\n\nfunction layoutOf(computed: Map<string, string>): SpecLayout {\n const shown = computed.get('display');\n // A table row: its cells side by side, as tall as the row. A cell: its content placed by vertical-align and text-align.\n if (shown === 'table-row') return { direction: 'HORIZONTAL', primary: 'MIN', counter: 'STRETCH' };\n if (shown === 'table-cell') {\n const va = computed.get('vertical-align') ?? 'middle';\n const ta = computed.get('text-align') ?? 'start';\n return { direction: 'VERTICAL', primary: /middle/.test(va) ? 'CENTER' : /bottom/.test(va) ? 'MAX' : 'MIN', counter: /center/.test(ta) ? 'CENTER' : /(end|right)/.test(ta) ? 'MAX' : 'MIN' };\n }\n if (singleCellGrid(computed)) {\n const align = computed.get('align-items') ?? 'stretch';\n const justify = computed.get('justify-items') ?? 'stretch';\n const at = (v: string) => (/center/.test(v) ? 'CENTER' : /end/.test(v) ? 'MAX' : 'MIN');\n return { direction: 'VERTICAL', primary: at(align), counter: /stretch|normal/.test(justify) ? 'STRETCH' : at(justify) };\n }\n const dir = computed.get('flex-direction') ?? 'row';\n const display = computed.get('display') ?? 'block';\n const flex = /flex/.test(display);\n const justify = computed.get('justify-content') ?? 'normal';\n const align = computed.get('align-items') ?? 'normal';\n const primary = /center/.test(justify) ? 'CENTER' : /space-between/.test(justify) ? 'SPACE_BETWEEN' : /end/.test(justify) ? 'MAX' : 'MIN';\n const counter = /center/.test(align) ? 'CENTER' : /end/.test(align) ? 'MAX' : /stretch|normal/.test(align) && flex ? 'STRETCH' : 'MIN';\n return {\n direction: flex && !/column/.test(dir) ? 'HORIZONTAL' : 'VERTICAL',\n primary,\n counter: flex ? counter : 'STRETCH',\n ...(flex && /reverse/.test(dir) ? { reverse: true } : {}),\n ...(flex && !/column/.test(dir) && /^wrap/.test(computed.get('flex-wrap') ?? '') ? { wrap: true } : {}),\n };\n}\n\n/** `flex: 1` or `flex-grow` of 1 or more: the part takes the free space along its parent's auto layout direction. */\nfunction grows(c: Map<string, string> | undefined): boolean {\n const flex = c?.get('flex')?.trim();\n const grow = c?.get('flex-grow') ?? (flex && /^\\d/.test(flex) ? flex.split(/\\s+/)[0] : flex === 'auto' ? '1' : undefined);\n return grow !== undefined && Number(grow) >= 1;\n}\n\n/**\n * A block of text beside a fixed item in a row (`min-width: 0`, an alert's body next to its icon): in code it shrinks\n * so its text wraps at the row's width. Figma wraps text only in a layer of known width: Fill container.\n */\nfunction shrinksToFit(n: Node, c: Map<string, string> | undefined, parent: SpecLayout | undefined): boolean {\n return n.kind === 'frame' && parent?.direction === 'HORIZONTAL' && !parent.wrap && /^0(px)?$/.test(c?.get('min-width')?.trim() ?? '') && c?.get('flex-shrink')?.trim() !== '0' && !/^(none|0 0)/.test(c?.get('flex')?.trim() ?? '');\n}\n\n/** `overflow: hidden | clip`: the frame clips its content (a card's footer fill inside its rounded corners). */\nconst clips = (c: Map<string, string> | undefined) => /^(hidden|clip)\\b/.test(c?.get('overflow') ?? c?.get('overflow-x') ?? '');\n\n/** A block-level root (display block, flex, grid) or `width: 100%`: in code it fills its container's width. */\nconst INLINE_TAGS = new Set(['a', 'span', 'label', 'kbd', 'code', 'em', 'strong', 'b', 'i', 'small', 'abbr', 'button', 'input', 'textarea', 'select', 'img']);\n\nfunction fillsContainer(c: Map<string, string> | undefined, tag = 'div'): boolean {\n if (!c) return false;\n if (c.get('width') === '100%') return true;\n const display = c.get('display') ?? (INLINE_TAGS.has(tag) ? 'inline' : 'block');\n return /^(block|flex|grid|flow-root)$/.test(display);\n}\n\n/**\n * Why a component cannot be drawn faithfully: thrown by the generator, recorded in the coverage list as the reason\n * (\"opens a popup\", \"uses CSS grid\"). The message is plain language for designers.\n */\nexport class UnsupportedComponentError extends Error {\n constructor(\n public component: string,\n public reason: string,\n ) {\n super(`${component}: ${reason}`);\n }\n}\n\ninterface Evaluated {\n built: Built;\n values: SpecVariant['values'];\n unmapped: SpecUnmapped[];\n layouts: Map<string, SpecLayout>;\n /** Fingerprint of the classes rendered, to tell whether a prop changes anything. */\n classes: string;\n /** Part id -> computed CSS values. */\n computed: Map<string, Map<string, string>>;\n /** Parts not shown in this variant: display none, opacity 0, scale(0), visually hidden. */\n hidden: Set<string>;\n /** Parts drawn over their parent (absolute, filling it). */\n cover: Set<string>;\n /** Absolute parts pinned to their parent's edges, with the offsets. */\n pins: Map<string, NonNullable<SpecPart['pin']>>;\n /** Inline SVG parts: their markup and the stroke token of each shape. */\n vectors: Map<string, SpecVector>;\n /** Parts as wide or as tall as their parent (`width: 100%`). */\n stretch: Map<string, { width?: boolean; height?: boolean }>;\n /** What the generator cannot draw faithfully, in plain language. */\n blockers: string[];\n}\n\n/**\n * An inline `<svg>` as one vector layer: the markup with each shape's CSS written as attributes (stroke width,\n * opacity, dashes, line caps; `pathLength` dashes converted to lengths, a rotation of the svg baked in), and the\n * stroke color token of each shape, bound in Figma. Fills other than none, and values that are not tokens or numbers,\n * cannot be drawn faithfully.\n */\nfunction svgVector(node: Node, id: string, els: Map<string, CssElement>, rules: CssRule[], state: CssState, computed: Map<string, string>, tokens: Map<string, TokenInfo>): SpecVector | { blocker: string } {\n const esc = (v: string) => v.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n const num = (raw: string | undefined, values: Map<string, string>): number | undefined => {\n if (raw === undefined) return undefined;\n const t = raw.trim();\n if (/^-?\\d*\\.?\\d+$/.test(t)) return Number(t);\n // calc() of numbers and custom properties holding numbers (`calc(100 - var(--_pct))`).\n const sub = t.replace(/var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]+))?\\)/g, (_m, name: string, fb: string | undefined) => values.get(name) ?? fb ?? 'NaN');\n if (/^calc\\(/.test(sub) && /^[\\d\\s.+\\-*/()calc]+$/.test(sub)) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const n = Number(new Function(`return (${sub.replace(/calc/g, '')});`)());\n return Number.isFinite(n) ? n : undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n };\n const strokes: SpecValue[] = [];\n const shapes: string[] = [];\n for (const [i, shape] of (node.shapes ?? []).entries()) {\n const el = els.get(`${id}#shape-${i}`)!;\n const own = new Map([...declaredFor(rules, el, state)].map(([k, d]) => [k, d.value]));\n const c = computeValues(declaredFor(rules, el, state), computed);\n const attrs = { ...shape.svgAttrs };\n const fill = own.get('fill') ?? attrs.fill;\n if (fill && !/^(none|transparent)$/.test(fill)) return { blocker: 'draws SVG shapes with fills' };\n const strokeRaw = own.get('stroke') ?? attrs.stroke ?? node.svgAttrs?.stroke ?? 'currentcolor';\n const color = resolveValue(strokeRaw, c, tokens, 0, computed, false);\n if (!color || color.unmapped !== undefined || color.value === undefined) return { blocker: 'draws SVG shapes in colors that are not tokens' };\n strokes.push(color.value);\n const out: Record<string, string> = { ...attrs, fill: 'none', stroke: '#000000' };\n const width = num(own.get('stroke-width') ?? attrs['stroke-width'] ?? attrs.strokeWidth, c);\n if (width !== undefined) out['stroke-width'] = String(width);\n const opacity = num(own.get('opacity'), c);\n if (opacity !== undefined && opacity !== 1) out.opacity = String(opacity);\n const cap = own.get('stroke-linecap');\n if (cap) out['stroke-linecap'] = cap;\n const join = own.get('stroke-linejoin');\n if (join) out['stroke-linejoin'] = join;\n // Dashes against pathLength (a progress ring, a spinner arc): lengths on the real circumference.\n const pathLength = num(attrs.pathLength, c);\n const r = num(attrs.r, c);\n const scale = pathLength && r !== undefined ? (2 * Math.PI * r) / pathLength : 1;\n const dash = own.get('stroke-dasharray');\n if (dash) {\n const parts = splitTop(dash, /\\s|,/).map((x) => num(x, c));\n if (parts.some((x) => x === undefined)) return { blocker: 'draws SVG shapes with dashes it cannot read' };\n out['stroke-dasharray'] = parts.map((x) => +(x! * scale).toFixed(3)).join(' ');\n }\n const offset = own.get('stroke-dashoffset');\n if (offset) {\n const o = num(offset, c);\n if (o === undefined) return { blocker: 'draws SVG shapes with dashes it cannot read' };\n out['stroke-dashoffset'] = String(+(o * scale).toFixed(3));\n }\n delete out.pathLength;\n delete out.strokeWidth;\n delete out.key;\n shapes.push(`<${shape.tag} ${Object.entries(out).map(([k, v]) => `${k}=\"${esc(v)}\"`).join(' ')}/>`);\n }\n if (!shapes.length) return { blocker: 'draws SVG it cannot read' };\n const viewBox = node.svgAttrs?.viewBox ?? '0 0 24 24';\n const [, , w, h] = viewBox.split(/\\s+/).map(Number);\n // A rotation of the svg (a ring that starts at the top): baked into the drawing around its center.\n const rot = /^rotate\\((-?\\d+(?:\\.\\d+)?)deg\\)$/.exec(computed.get('transform')?.trim() ?? '');\n const body = rot ? `<g transform=\"rotate(${rot[1]} ${(w ?? 24) / 2} ${(h ?? 24) / 2})\">${shapes.join('')}</g>` : shapes.join('');\n return { svg: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w ?? 24}\" height=\"${h ?? 24}\" viewBox=\"${viewBox}\" fill=\"none\">${body}</svg>`, strokes };\n}\n\n/** Base UI parts that only exist while a popup or overlay is open. */\nconst POPUP_PART = /\\.(Portal|Popup|Positioner|Backdrop|Viewport)$/;\n\n/** `translateX(<value>)` of a transform, or undefined. */\nfunction translateX(transform: string | undefined): string | undefined {\n const m = /^translateX\\(([\\s\\S]+)\\)$/.exec(transform?.trim() ?? '');\n return m?.[1]?.trim();\n}\n\n/** An element hidden the way the visually hidden pattern does it: clipped to nothing, still read by screen readers. */\nconst visuallyHidden = (own: Map<string, string>) => /inset\\(50%\\)/.test(own.get('clip-path') ?? '') || /rect\\(0/.test(own.get('clip') ?? '');\n\nfunction evaluateVariant(\n reader: Reader,\n src: ComponentSource,\n rules: CssRule[],\n props: Record<string, Value>,\n state: CssState,\n tokens: Map<string, TokenInfo>,\n preview?: DocChild[],\n page?: Map<string, string>,\n view?: SpecView,\n examples?: Record<string, Value>,\n): Evaluated | undefined {\n const built = build(reader, src, props, preview, view, rules, tokens, examples);\n if (!built) return undefined;\n const els = toCssTree(built);\n /** Grids drawn as rows (every child spans all columns): their tracks and column gap, for subgrid rows. */\n const gridRows = new Map<string, { tracks: string[]; gap: string | undefined }>();\n /** Items in a flexible track of a subgrid row (`minmax(0, 1fr)`): they take the free space. */\n const gridGrow = new Set<string>();\n const computedById = new Map<string, Map<string, string>>();\n const ownById = new Map<string, Map<string, string>>();\n const values: SpecVariant['values'] = {};\n const unmapped: SpecUnmapped[] = [];\n const layouts = new Map<string, SpecLayout>();\n const hidden = new Set<string>();\n const cover = new Set<string>();\n const pins = new Map<string, NonNullable<SpecPart['pin']>>();\n const vectors = new Map<string, SpecVector>();\n const stretch = new Map<string, { width?: boolean; height?: boolean }>();\n const blockers: string[] = [...built.blockers];\n for (const [id, node] of built.parts) {\n const el = els.get(id)!;\n const parentId = built.parents.get(id);\n // A decoration takes its host's ::before or ::after rules.\n const own = node.pseudo && el.parent ? declaredFor(rules, el.parent, state, node.pseudo) : declaredFor(rules, el, state);\n // An indicator that follows the selected item: offsets Base UI sets at run time are 0, sizes fill the item.\n if (node.follows) {\n for (const [k, far] of [['left', ''], ['top', ''], ['width', 'right'], ['height', 'bottom']] as const) {\n const d = own.get(k);\n if (!d || !runtimeVar(d.value, rules, tokens)) continue;\n if (far) {\n own.delete(k);\n own.set(far, { ...d, prop: far, value: '0' });\n } else own.set(k, { ...d, value: '0' });\n }\n }\n let computed = computeValues(own, parentId ? computedById.get(parentId) : page);\n for (const [k, v] of node.styleVars ?? []) computed.set(k, v);\n // Table elements lay out as the browser's own stylesheet says (a row of cells).\n if (!computed.has('display') && TABLE_DISPLAY[node.tag]) computed.set('display', TABLE_DISPLAY[node.tag]!);\n // A table cell with no width of its own takes an equal share of its row; an item in a flexible grid track grows.\n if ((computed.get('display') === 'table-cell' && resolveValue(computed.get('width'), computed, tokens) === undefined) || gridGrow.has(id)) computed.set('flex-grow', '1');\n const ownValues = new Map([...own].map(([k, d]) => [k, d.value]));\n if (node.placeholder && el.parent) {\n // The placeholder text: the field's values (inherited), then its ::placeholder rules.\n const ph = declaredFor(rules, el.parent, state, 'placeholder');\n computed = computeValues(ph, computed);\n }\n computedById.set(id, computed);\n ownById.set(id, ownValues);\n if (POPUP_PART.test(node.tag) && parentId !== undefined) blockers.push('opens a popup');\n\n const parentHidden = parentId !== undefined && hidden.has(parentId);\n const transform = ownValues.get('transform');\n if (\n parentHidden ||\n computed.get('display') === 'none' ||\n computed.get('visibility') === 'hidden' ||\n /^0(\\.0+)?$/.test(ownValues.get('opacity')?.trim() ?? '') ||\n /scale\\(0\\)/.test(transform ?? '') ||\n visuallyHidden(ownValues) ||\n node.inactive ||\n (node.whenChecked && !/^(true|mixed)$/.test((node.checked === 'state' ? state.checked : node.checked) ?? ''))\n )\n hidden.add(id);\n const pv = partValues(node, computed, ownValues, tokens, parentId ? computedById.get(parentId) : page);\n values[id] = pv.values;\n if (node.svgAttrs && node.tag === 'svg') {\n const vec = svgVector(node, id, els, rules, state, computed, tokens);\n if ('blocker' in vec) blockers.push(vec.blocker);\n else vectors.set(id, vec);\n }\n // A single-line field centers its text vertically, as browsers draw it; a textarea starts at the top.\n if (node.kind === 'frame') layouts.set(id, node.inputLike && node.tag !== 'textarea' ? { direction: 'HORIZONTAL', primary: 'MIN', counter: 'CENTER' } : layoutOf(computed));\n // CSS grid drawn as auto layout: a grid whose children each span every column stacks them (rows); a row that\n // shares its parent's columns (`subgrid`) lines its items up in a row, edge tracks of 0 becoming the gap at its ends.\n let gridDrawn = false;\n if (node.kind === 'frame' && /grid/.test(computed.get('display') ?? '') && !singleCellGrid(computed)) {\n const kids = [...built.parts].filter(([cid]) => built.parents.get(cid) === id);\n const tracks = computed.get('grid-template-columns')?.trim();\n const parentGrid = parentId ? gridRows.get(parentId) : undefined;\n if (tracks === 'subgrid' && parentGrid) {\n gridDrawn = true;\n layouts.set(id, { direction: 'HORIZONTAL', primary: 'MIN', counter: gridCounter(computed.get('align-items')) });\n const gap = parentGrid.gap === undefined ? undefined : resolveValue(parentGrid.gap, computedById.get(parentId!) ?? new Map(), tokens);\n const g = gap && gap.unmapped === undefined && gap.value !== null ? gap.value : undefined;\n if (g !== undefined) {\n pv.values.itemSpacing = g;\n if (/^0(px)?$/.test(parentGrid.tracks[0] ?? '')) pv.values.paddingLeft = g;\n if (/^0(px)?$/.test(parentGrid.tracks[parentGrid.tracks.length - 1] ?? '')) pv.values.paddingRight = g;\n }\n for (const [cid] of kids) {\n const start = Number(/^\\s*(\\d+)/.exec(declaredFor(rules, els.get(cid)!, state).get('grid-column-start')?.value ?? declaredFor(rules, els.get(cid)!, state).get('grid-column')?.value ?? '')?.[1]);\n if (start && /fr\\)?$/.test(parentGrid.tracks[start - 1] ?? '')) gridGrow.add(cid);\n }\n unmapped.push({ part: id, property: 'grid-template-columns', value: 'subgrid', reason: 'columns line up across rows in code; in Figma each row sizes its own' });\n } else if (tracks && tracks !== 'none' && tracks !== 'subgrid' && kids.length && kids.every(([cid]) => /^1\\s*\\/\\s*-1$/.test(declaredFor(rules, els.get(cid)!, state).get('grid-column')?.value.trim() ?? ''))) {\n gridDrawn = true;\n gridRows.set(id, { tracks: splitTop(tracks, /\\s/).filter(Boolean), gap: computed.get('column-gap') });\n layouts.set(id, { direction: 'VERTICAL', primary: 'MIN', counter: 'STRETCH' });\n }\n }\n // A hidden part keeps its values (shown again, it looks right), but what it cannot draw does not matter here.\n if (hidden.has(id)) continue;\n // Decorations drawn by ::before or ::after that are not a layer (text content, or no paint we can draw).\n for (const pseudo of ['before', 'after'] as const) {\n if (node.children.some((c) => c.pseudo === pseudo)) continue;\n const d = declaredFor(rules, el, state, pseudo);\n const paints = [...PSEUDO_PAINTS, 'box-shadow'].some((k) => d.has(k) && !/^(0|none|transparent)$/.test(d.get(k)!.value));\n if (d.has('content') && paints) blockers.push('draws with ::before or ::after');\n }\n // A visible frame with nothing in it and nothing to paint: content the code puts there was not read.\n if (node.kind === 'frame' && !node.children.length && !node.inputLike && !node.media && !node.svgAttrs && Object.values(pv.values).every((x) => x === 0 || x === null || x === undefined))\n blockers.push('has parts whose content the generator cannot read yet');\n if (/grid/.test(computed.get('display') ?? '') && !singleCellGrid(computed) && !gridDrawn) blockers.push('uses CSS grid');\n // A value indicator with no height of its own (a slider's range): as tall as its track, like Base UI draws it.\n if (node.fraction !== undefined && ownValues.get('height') === undefined) stretch.set(id, { ...stretch.get(id), height: true });\n // A swatch of the token's own color: not a token, so not bound; set per instance.\n if (node.inlineFill) unmapped.push({ part: id, property: 'background-color', value: node.inlineFill, reason: \"the token's own color, from the content: not bound, set it on each instance\" });\n // Over its parent: absolute and filling it, or as wide and tall as a parent of fixed size (an avatar photo).\n const position = ownValues.get('position');\n const full = ownValues.get('width') === '100%' && ownValues.get('height') === '100%';\n const pVals = parentId ? values[parentId] : undefined;\n const inset = ['top', 'right', 'bottom', 'left'].every((k) => /^0(px)?$/.test(ownValues.get(k) ?? ''));\n if (parentId && ((position === 'absolute' && (inset || full)) || (position !== 'absolute' && full && pVals?.width !== undefined && pVals?.height !== undefined))) {\n cover.add(id);\n delete pv.values.width;\n delete pv.values.height;\n pv.unmapped = pv.unmapped.filter((u) => u.property !== 'width' && u.property !== 'height');\n } else if (parentId && position !== 'absolute' && (ownValues.get('width') === '100%' || ownValues.get('height') === '100%')) {\n // As wide or as tall as its parent (a progress bar's fill): Fill container on that axis.\n stretch.set(id, { ...(ownValues.get('width') === '100%' ? { width: true } : {}), ...(ownValues.get('height') === '100%' ? { height: true } : {}) });\n pv.unmapped = pv.unmapped.filter((u) => !((u.property === 'width' || u.property === 'height') && u.value === '100%'));\n for (const k of ['width', 'height'] as const) if (ownValues.get(k) === '100%') delete pv.values[k];\n } else if (parentId && position === 'absolute') {\n // Pinned to its parent's edges by tokens (a dialog's close button at the top right): an absolute layer in Figma.\n const pin: NonNullable<SpecPart['pin']> = {};\n let ok = true;\n for (const side of ['top', 'right', 'bottom', 'left'] as const) {\n const raw = ownValues.get(side);\n if (raw === undefined || raw === 'auto') continue;\n const r = resolveValue(raw, computed, tokens);\n if (!r || r.unmapped !== undefined || r.value === null || r.value === undefined) ok = false;\n else pin[side] = r.value;\n }\n if (ok && Object.keys(pin).length) pins.set(id, pin);\n else blockers.push('places layers over each other');\n } else if (parentId && position === 'fixed') blockers.push('places layers over each other');\n for (const u of pv.unmapped) unmapped.push({ part: id, ...u });\n // Transforms: scale(0) hides (above); none and scale(1) draw nothing; translateX moves a part inside its row.\n if (transform && !/^(none|scale\\(1\\))$/.test(transform.trim()) && !translateX(transform) && /^(translate|rotate|scale)/.test(transform.trim()) && !/^0(\\.0+)?$/.test(ownValues.get('opacity') ?? '1')) {\n unmapped.push({ part: id, property: 'transform', value: transform, reason: 'transforms are not drawn' });\n }\n }\n // translateX of the only child of a fixed-width row (a switch thumb): the offset becomes the row's padding, at the\n // start, or at the end when it is \"row width - own width - inset\". Anything else cannot be drawn faithfully.\n for (const [id] of built.parts) {\n const tx = translateX(ownById.get(id)?.get('transform'));\n if (!tx || hidden.has(id)) continue;\n const parentId = built.parents.get(id);\n const siblings = [...built.parts].filter(([cid, n]) => built.parents.get(cid) === parentId && !hidden.has(cid) && !n.visible);\n const parentLayout = parentId ? layouts.get(parentId) : undefined;\n const r = resolveValue(tx, computedById.get(id)!, tokens);\n // translateX(0), or a gesture offset that is 0 at rest (`var(--swipe-x, 0)`): nothing moves.\n if (r?.value === 0) continue;\n const pv = parentId ? values[parentId] : undefined;\n const own = values[id] ?? {};\n if (!parentId || !pv || siblings.length !== 1 || parentLayout?.direction !== 'HORIZONTAL' || !r || r.unmapped !== undefined || r.value === null || r.value === undefined) {\n blockers.push('moves a part with a transform');\n continue;\n }\n const v = r.value;\n const end = typeof v === 'string' && v.startsWith('calc(') ? new RegExp(`^calc\\\\(${escapeRe(String(pv.width))} - ${escapeRe(String(own.width))} - (\\\\S+)\\\\)$`).exec(v) : null;\n if (end) {\n pv.paddingRight = end[1]!;\n layouts.set(parentId, { ...parentLayout, primary: 'MAX' });\n } else if (typeof v === 'number' || (typeof v === 'string' && !v.startsWith('calc('))) {\n pv.paddingLeft = v;\n layouts.set(parentId, { ...parentLayout, primary: 'MIN' });\n } else blockers.push('moves a part with a transform');\n }\n const classes = [...built.parts].map(([id, n]) => `${id}:${n.classes.join(',')}:${n.visible?.prop ?? ''}`).join(';');\n return { built, values, unmapped, layouts, classes, computed: computedById, hidden, cover, pins, vectors, stretch, blockers };\n}\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nfunction product(axes: { name: string; values: string[] }[]): Record<string, string>[] {\n let out: Record<string, string>[] = [{}];\n for (const a of axes) out = out.flatMap((p) => a.values.map((v) => ({ ...p, [a.name]: v })));\n return out;\n}\n\n\n/** What a variant draws, to compare two variants. */\nconst drawn = (e: Evaluated) => JSON.stringify([e.values, [...e.hidden].sort(), [...e.layouts], [...e.vectors]]);\n\nconst BOX_FIELDS: SpecField[] = ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'itemSpacing'];\nconst PAINT_FIELDS: SpecField[] = ['fill', 'stroke', 'strokeWeight', 'strokeTopWeight', 'strokeRightWeight', 'strokeBottomWeight', 'strokeLeftWeight', 'cornerRadius', 'width', 'height', 'minWidth', 'minHeight'];\nconst empty = (v: SpecValue | undefined) => v === undefined || v === 0 || v === null;\n\n/**\n * A root whose only child is a plain frame that only adds padding and gap (Tag's `<span class=\"label\">`): the wrapper\n * is merged into the root, so Figma gets one auto layout frame with the icon and the text, like Badge. Only when the CSS\n * allows it: the root has no padding or gap of its own, and the wrapper has no paint, border, radius or size, in every\n * variant.\n */\nfunction flattenWrapper(parts: SpecPart[], variants: SpecVariant[], unmapped: SpecUnmapped[]): void {\n const root = parts.find((p) => !p.parent);\n const children = parts.filter((p) => p.parent === root?.id);\n const w = children[0];\n if (!root || root.kind !== 'frame' || children.length !== 1 || !w || w.kind !== 'frame' || w.visible || w.clip || w.cover) return;\n for (const v of variants) {\n const r = v.values[root.id] ?? {};\n const x = v.values[w.id] ?? {};\n if (BOX_FIELDS.some((f) => !empty(r[f])) || PAINT_FIELDS.some((f) => !empty(x[f])) || x.opacity !== undefined) return;\n if (v.hidden?.includes(w.id) || v.layout?.[w.id] || v.layout?.[root.id]) return;\n }\n for (const v of variants) {\n const r = (v.values[root.id] ??= {});\n const x = v.values[w.id] ?? {};\n for (const f of BOX_FIELDS) if (x[f] !== undefined) r[f] = x[f];\n delete v.values[w.id];\n }\n if (w.layout) root.layout = w.layout;\n if (w.source) root.source = root.source ? `${root.source}, ${w.source}` : w.source;\n for (const p of parts) if (p.parent === w.id) p.parent = root.id;\n for (const u of unmapped) if (u.part === w.id) u.part = root.id;\n parts.splice(parts.indexOf(w), 1);\n}\n\n/**\n * A text field's box that draws nothing of its own in any variant (an input inside a styled wrapper, like Input): the\n * placeholder text takes its place, so Figma gets the text directly in the wrapper.\n */\nfunction mergeFieldBoxes(parts: SpecPart[], variants: SpecVariant[], unmapped: SpecUnmapped[], fields: Set<string>): void {\n for (const box of parts.filter((p) => fields.has(p.id))) {\n const kids = parts.filter((p) => p.parent === box.id);\n const text = kids[0];\n if (kids.length !== 1 || text?.kind !== 'text' || !box.parent || box.visible || box.cover) continue;\n const drawsNothing = variants.every((v) => {\n const x = v.values[box.id] ?? {};\n return BOX_FIELDS.every((f) => empty(x[f])) && PAINT_FIELDS.every((f) => empty(x[f])) && x.opacity === undefined && !v.hidden?.includes(box.id) && !v.layout?.[box.id];\n });\n if (!drawsNothing) continue;\n text.parent = box.parent;\n if (box.source) text.source = box.source;\n for (const v of variants) delete v.values[box.id];\n for (const u of unmapped) if (u.part === box.id) u.part = text.id;\n parts.splice(parts.indexOf(box), 1);\n }\n}\n\n/** Reasons, most telling first: what a designer would recognize as the reason the component is not drawn. */\nconst REASON_ORDER = ['opens a popup', 'draws SVG shapes', 'uses CSS grid', 'draws with ::before or ::after', 'moves a part with a transform', 'places layers over each other', 'shows content computed while the page runs'];\n\n/** The one reason recorded for a component the generator cannot draw. */\nfunction mainReason(reasons: string[]): string {\n const rank = (r: string) => {\n const i = REASON_ORDER.indexOf(r);\n return i < 0 ? REASON_ORDER.length : i;\n };\n return [...new Set(reasons)].sort((a, b) => rank(a) - rank(b))[0]!;\n}\n\n/** The checked state an axis value stands for. */\nconst CHECKED: Record<string, CssState['checked']> = { false: 'false', true: 'true', mixed: 'mixed' };\n\n/** The spec of one component, or an error message when it cannot be derived. */\nexport function generateComponentSpec(name: string, opts: SpecGeneratorOptions, view?: SpecView, setName = name, fixed: Record<string, string> = {}): ComponentSpec {\n const reader = new Reader(opts);\n const src = reader.load(name);\n if (!src) throw new Error(`${name}: ${opts.componentsDir}/${name}/${name}.tsx was not found.`);\n if (!src.fn) throw new UnsupportedComponentError(name, 'is shown from a hook or a provider, not placed as a component');\n\n // Every CSS module the rendered tree may use: the component's own, the ones it imports, and those of nested components.\n const modules = new Map<string, string>();\n const addModules = (s: ComponentSource | null) => {\n if (!s) return;\n for (const path of s.styles.values()) {\n if (modules.has(path)) continue;\n const text = opts.read(path);\n if (text !== undefined) modules.set(path, text);\n }\n };\n addModules(src);\n const nestedNames = new Set<string>();\n const findNested = (s: ComponentSource, depth: number) => {\n const visit = (n: ts.Node) => {\n if ((ts.isJsxOpeningElement(n) || ts.isJsxSelfClosingElement(n)) && /^[A-Z]/.test(n.tagName.getText(s.sf))) {\n const tag = n.tagName.getText(s.sf);\n if (tag !== name && !nestedNames.has(tag) && reader.exists(tag)) {\n nestedNames.add(tag);\n const other = reader.load(tag);\n addModules(other);\n if (other && depth < 3) findNested(other, depth + 1);\n }\n }\n ts.forEachChild(n, visit);\n };\n visit(s.sf);\n };\n findNested(src, 0);\n // Docs preview: content for `{children}` (a group's options) and the components it draws.\n const docs = readDocs(src.folder, opts);\n // The docs preview, else the first example of the component sandbox that gives it content (a menu's items).\n const fromDocs = previewElement(docs?.preview, name);\n const previewEl = fromDocs ?? storyElement(readStories(src.folder, opts), name);\n const previewKids = previewEl?.children?.some((c) => typeof c !== 'string') ? previewEl.children : undefined;\n for (const c of docElements(previewKids)) {\n if (typeof c.c !== 'string' || nestedNames.has(c.c) || !reader.exists(c.c)) continue;\n nestedNames.add(c.c);\n const other = reader.load(c.c);\n addModules(other);\n if (other) findNested(other, 1);\n }\n // Base styles of the nested components first, then the component's own (they override, as with CSS module order).\n const ownDir = `${opts.componentsDir}/${src.folder}/`;\n const ordered = [...modules].sort(([a], [b]) => Number(a.startsWith(ownDir)) - Number(b.startsWith(ownDir)));\n const rules: CssRule[] = [];\n const cssErrors: string[] = [];\n // The page's base stylesheet first (tag rules like `:where(kbd)`), and what the page root gives every component to\n // inherit (`:where(html)`: text color, font family, size and line height).\n let page: Map<string, string> | undefined;\n const baseText = opts.baseCss ? opts.read(opts.baseCss) : undefined;\n if (baseText !== undefined) {\n const r = parseCssModule(opts.baseCss!, baseText, 0);\n rules.push(...r.rules);\n const html: CssElement = { tag: 'html', classes: new Set(), children: [], present: true, isRoot: false, inputLike: false };\n page = computeValues(declaredFor(r.rules, html, DEFAULT_STATE), undefined);\n }\n for (const [path, text] of ordered) {\n const r = parseCssModule(path, text, rules.length);\n rules.push(...r.rules);\n cssErrors.push(...r.errors);\n }\n // Required text props the docs preview fills (an avatar's name, for its initials).\n const baseProps: Record<string, Value> = {};\n // Lists the preview gives (a segmented control's items), and the option it selects (`defaultValue`).\n for (const p of src.props.values()) {\n const v = previewEl?.p?.[p.name];\n if (v === undefined || v === null) continue;\n if (p.kind === 'string' && typeof v === 'string' && (!p.optional || p.name === 'defaultValue')) baseProps[p.name] = v;\n if (p.kind === 'other' && (typeof v === 'object' || typeof v === 'number' || (typeof v === 'string' && p.name === 'defaultValue'))) baseProps[p.name] = jsonValue(v);\n }\n\n // Axes: string-literal union props that change the rendered classes.\n // Optional texts the example gives (a token name next to its value): drawn with that text, shown by default.\n const examples: Record<string, Value> = {};\n for (const p of src.props.values()) {\n const v = previewEl?.p?.[p.name];\n if (p.kind === 'string' && p.optional && typeof v === 'string' && baseProps[p.name] === undefined) examples[p.name] = v;\n }\n // A part drawn alone that code only renders inside its folder's popup (a menu item): it inherits what the popup gives\n // its content (font, line height, color), as in the page. Read by drawing the folder's popup with its example\n // content and finding the element with this part's classes in it.\n if (view === 'without-popup' && name !== src.folder) {\n const own = build(reader, src, { ...baseProps, ...fixed }, previewKids, view, rules, opts.tokens)?.root.classes ?? [];\n const folderSrc = reader.load(src.folder);\n const folderPreview = previewElement(docs?.preview, src.folder) ?? storyElement(readStories(src.folder, opts), src.folder);\n const folderKids = folderPreview?.children?.some((c) => typeof c !== 'string') ? folderPreview.children : undefined;\n const popup = own.length && folderSrc && folderKids ? build(reader, folderSrc, {}, folderKids, 'popup', rules, opts.tokens) : undefined;\n // A part the example does not show (a menu group) is content of the popup all the same: what the popup gives.\n if (popup) page = inheritedInside(popup.root, own, rules, page) ?? inheritedInside({ ...popup.root, children: [{ ...popup.root, classes: own, children: [] }] }, own, rules, page) ?? page;\n }\n const evalAt = (props: Record<string, Value>, state: CssState) =>\n evaluateVariant(reader, src, rules, { ...baseProps, ...props, ...fixed }, state, opts.tokens, previewKids, page, view, Object.keys(examples).length ? examples : undefined);\n const base = evalAt({}, DEFAULT_STATE);\n if (!base) throw new UnsupportedComponentError(name, 'renders in a way the generator cannot read yet');\n const unmappedProps: SpecUnmapped[] = [];\n const axes: SpecAxis[] = [];\n const defaults = new Map<string, Value>();\n {\n const scope: Scope = { src, vars: new Map(), locals: new Map(), toggles: new Map(), main: true };\n bindProps(src.fn, scope, {});\n for (const [prop] of src.props) defaults.set(prop, scope.vars.get(prop));\n }\n for (const p of src.props.values()) {\n if (p.kind !== 'union' || !p.values || fixed[p.name] !== undefined) continue;\n const changes = p.values.some((v) => evalAt({ [p.name]: v }, DEFAULT_STATE)?.classes !== base.classes);\n if (!changes) {\n unmappedProps.push({ part: 'root', property: `prop ${p.name}`, value: p.values.join(' | '), reason: 'does not change the styles' });\n continue;\n }\n const def = defaults.get(p.name);\n axes.push({ name: sentenceCase(p.name), prop: p.name, values: [...p.values], default: typeof def === 'string' && p.values.includes(def) ? def : p.values[0]! });\n }\n\n // Checked: Base UI parts of the component itself (a checkbox box, a switch thumb) styled by data-checked. Not for a\n // popup drawn open: its options show the preview's selection.\n const checkable = ['checked', 'defaultChecked', 'indeterminate'].some((p) => src.props.has(p)) || [...src.baseUiModules].some((m) => /^(checkbox|switch|radio|toggle|menu)/.test(m));\n if (view !== 'popup' && checkable) {\n const on = evalAt({}, { ...DEFAULT_STATE, checked: 'true' });\n const off = evalAt({}, { ...DEFAULT_STATE, checked: 'false' });\n if (on && off && drawn(on) !== drawn(off)) {\n const mixed = src.props.has('indeterminate') ? evalAt({}, { ...DEFAULT_STATE, checked: 'mixed' }) : undefined;\n axes.push({ name: 'Checked', values: mixed && drawn(mixed) !== drawn(on) ? ['false', 'true', 'mixed'] : ['false', 'true'], default: 'false' });\n }\n }\n\n const combos = product(axes);\n const propsFor = (combo: Record<string, string>) => Object.fromEntries(axes.filter((a) => a.prop).map((a) => [a.prop!, combo[a.name]!]));\n const stateFor = (combo: Record<string, string>, s: CssState): CssState => (combo.Checked ? { ...s, checked: CHECKED[combo.Checked] } : s);\n const canDisable = src.native === 'button' || src.native === 'input' || src.native === 'textarea' || src.props.has('disabled');\n // A popup drawn open is not hovered or pressed as a whole: its own states are not drawn.\n const states = view === 'popup' ? STATES.slice(0, 1) : STATES.filter((s) => s.name !== 'Disabled' || canDisable);\n const byState = new Map<string, Map<string, Evaluated>>();\n for (const s of states) {\n const m = new Map<string, Evaluated>();\n for (const combo of combos) {\n const ev = evalAt(propsFor(combo), stateFor(combo, s.state));\n if (ev) m.set(JSON.stringify(combo), ev);\n }\n byState.set(s.name, m);\n }\n // A state is drawn when it looks different from Default (and Pressed from Hover) in at least one variant.\n const differs = (s: string, from: string) =>\n combos.some((c) => {\n const a = byState.get(s)!.get(JSON.stringify(c));\n const b = byState.get(from)?.get(JSON.stringify(c));\n return a && b && drawn(a) !== drawn(b);\n });\n const stateNames = states\n .map((s) => s.name)\n .filter((s) => s === 'Default' || (differs(s, 'Default') && (s !== 'Pressed' || differs(s, 'Hover'))));\n if (stateNames.length > 1) axes.push({ name: 'State', values: stateNames, default: 'Default' });\n\n const blockers = new Set<string>();\n const evaluated: { props: Record<string, string>; ev: Evaluated }[] = [];\n for (const combo of combos) {\n for (const s of stateNames.length > 1 ? stateNames : ['Default']) {\n const ev = byState.get(s)!.get(JSON.stringify(combo));\n if (!ev) continue;\n evaluated.push({ props: stateNames.length > 1 ? { ...combo, State: s } : { ...combo }, ev });\n for (const b of ev.blockers) blockers.add(b);\n }\n }\n // Every variant must have the parts of the default one: a set's variants share their layers.\n // Variants share their layers: a part some variants do not render (a value shown only at the large size) is a layer\n // of the set, hidden in those variants. The parts must keep one parent and one order across variants.\n const order: string[] = [...base.built.parts.keys()];\n const owner = new Map<string, Evaluated>(order.map((id) => [id, base]));\n for (const { ev } of evaluated) {\n let prev: string | undefined;\n for (const id of ev.built.parts.keys()) {\n const known = owner.get(id);\n if (known && known.built.parents.get(id) !== ev.built.parents.get(id)) blockers.add('changes its layers between variants');\n if (!known) {\n order.splice(prev === undefined ? 0 : order.indexOf(prev) + 1, 0, id);\n owner.set(id, ev);\n }\n prev = id;\n }\n }\n for (const { ev } of evaluated) for (const id of order) if (!ev.built.parts.has(id)) ev.hidden.add(id);\n if (blockers.size) throw new UnsupportedComponentError(name, mainReason([...blockers]));\n\n // Axes that change nothing Figma draws (a Spacing prop that only sets margins): left out, reported.\n for (const axis of [...axes]) {\n if (!axis.prop) continue;\n const key = (p: Record<string, string>) => JSON.stringify(Object.entries(p).filter(([k]) => k !== axis.name));\n const groups = new Map<string, string[]>();\n for (const e of evaluated) groups.set(key(e.props), [...(groups.get(key(e.props)) ?? []), drawn(e.ev)]);\n if ([...groups.values()].some((g) => new Set(g).size > 1)) continue;\n axes.splice(axes.indexOf(axis), 1);\n unmappedProps.push({ part: 'root', property: `prop ${axis.prop}`, value: axis.values.join(' | '), reason: 'changes nothing the set draws (margins, or content it does not show), not drawn' });\n for (let i = evaluated.length - 1; i >= 0; i--) {\n const e = evaluated[i]!;\n if (e.props[axis.name] !== axis.default) {\n evaluated.splice(i, 1);\n continue;\n }\n delete e.props[axis.name];\n }\n }\n\n // Prototype interactions between the variants (hover, press, click to check) with the code's motion, and the motion\n // a Figma prototype cannot play (keyframes, keyboard focus, opening).\n const interactions = deriveInteractions(axes, evaluated, opts.tokens, /radio/i.test(setName));\n const drawnClasses = new Set<string>();\n const drawnElements = new Map<string, string[]>();\n for (const { ev } of evaluated)\n for (const n of ev.built.parts.values()) {\n for (const c of n.classes) drawnClasses.add(c);\n if (n.classes.length) drawnElements.set([...n.classes].sort().join(' '), [...n.classes]);\n }\n const motion = motionNotes(rules, drawnClasses, opts.tokens, view, [...drawnElements.values()]);\n\n const variants: SpecVariant[] = [];\n const unmapped: SpecUnmapped[] = [];\n // Parts no variant shows (a visually hidden legend, a glyph for a state the set does not draw): left out.\n const neverShown = new Set(order.filter((id) => evaluated.every((e) => e.ev.hidden.has(id))));\n for (const e of evaluated) {\n const ev = e.ev;\n const values = Object.fromEntries(Object.entries(ev.values).filter(([id]) => !neverShown.has(id)));\n const parentOf = (id: string) => owner.get(id)?.built.parents.get(id) ?? '';\n const hidden = order.filter((id) => ev.hidden.has(id) && !neverShown.has(id) && !neverShown.has(parentOf(id)));\n const layout: Record<string, SpecLayout> = {};\n for (const [id, l] of ev.layouts) if (JSON.stringify(l) !== JSON.stringify(owner.get(id)?.layouts.get(id))) layout[id] = l;\n // Icons the code picks per variant (an alert's tone icon): the icon instance each variant shows.\n const icons: Record<string, string> = {};\n for (const [id, n] of ev.built.parts) if (n.kind === 'icon' && n.icon && !neverShown.has(id)) icons[id] = iconComponentName(n.icon);\n const vectors = Object.fromEntries([...ev.vectors].filter(([id]) => !neverShown.has(id)));\n // Absolute layers placed differently in this variant (an indicator under a vertical tab, or filling a contained one).\n const pinOf = (x: Evaluated, id: string) => (x.cover.has(id) ? { top: 0, right: 0, bottom: 0, left: 0 } : x.pins.get(id));\n const pins: NonNullable<SpecVariant['pins']> = {};\n for (const id of order) {\n const own = pinOf(ev, id);\n const base = owner.get(id) && pinOf(owner.get(id)!, id);\n if (own && base && JSON.stringify(own) !== JSON.stringify(base) && !neverShown.has(id)) pins[id] = own;\n }\n variants.push({\n props: e.props,\n values,\n ...(Object.keys(icons).length ? { slots: icons } : {}),\n ...(hidden.length ? { hidden } : {}),\n ...(Object.keys(layout).length ? { layout } : {}),\n ...(Object.keys(vectors).length ? { vectors } : {}),\n ...(Object.keys(pins).length ? { pins } : {}),\n });\n unmapped.push(...ev.unmapped.filter((u) => !neverShown.has(u.part)));\n }\n if (variants.length > MAX_VARIANTS) throw new UnsupportedComponentError(name, `has ${variants.length} variants, more than ${MAX_VARIANTS}`);\n\n // Parts, layout and properties come from the default variant.\n const parts: SpecPart[] = [];\n const properties: SpecProperty[] = [];\n const dropped = new Set<string>();\n for (const id of order) {\n const at = owner.get(id)!;\n const n = at.built.parts.get(id)!;\n const parent = at.built.parents.get(id);\n if (neverShown.has(id) || (parent && dropped.has(parent))) {\n dropped.add(id);\n continue;\n }\n const cls = n.classes[0]?.split('|')[1];\n const part: SpecPart = {\n id,\n name: !parent ? setName : n.kind === 'text' ? (n.text?.property ?? (cls ? sentenceCase(cls) : 'Text')) : n.visible ? n.visible.property.replace(/^Show /, '').replace(/^./, (c) => c.toUpperCase()) : (n.name ?? (n.kind === 'icon' ? 'Icon' : (cls ?? n.tag))),\n kind: n.svgAttrs && n.tag === 'svg' ? 'vector' : n.kind,\n ...(parent ? { parent } : {}),\n ...(n.classes.length ? { source: n.classes.map((c) => c.split('|').map((x, i) => (i === 0 ? posix.basename(x) : `.${x}`)).join(' ')).join(', ') } : {}),\n ...(n.kind === 'frame' ? { layout: at.layouts.get(id) ?? layoutOf(at.computed.get(id) ?? new Map()) } : {}),\n ...(n.kind === 'frame' && clips(at.computed.get(id)) ? { clip: true } : {}),\n ...(!parent && fillsContainer(at.computed.get(id), n.tag) ? { fill: true } : {}),\n ...(n.text ? { text: n.text.property } : {}),\n ...(n.chars !== undefined ? { characters: n.chars } : {}),\n ...(n.visible ? { visible: n.visible.property } : {}),\n ...(at.cover.has(id) ? { cover: true } : {}),\n ...(at.pins.has(id) ? { pin: at.pins.get(id) } : {}),\n ...(at.stretch.has(id) ? { stretch: at.stretch.get(id) } : {}),\n ...(n.fraction !== undefined ? { fraction: n.fraction } : {}),\n ...(n.at !== undefined ? { at: n.at } : {}),\n ...(parent && (grows(at.computed.get(id)) || shrinksToFit(n, at.computed.get(id), at.layouts.get(parent))) ? { grow: true } : {}),\n ...(n.kind === 'icon' && n.icon ? { icon: iconComponentName(n.icon) } : {}),\n };\n parts.push(part);\n if (n.text && !properties.some((p) => p.name === n.text!.property)) properties.push({ name: n.text.property, type: 'TEXT', default: n.text.default, ...(n.text.prop ? { prop: n.text.prop } : {}) });\n }\n for (const id of order) {\n const n = owner.get(id)!.built.parts.get(id)!;\n if (!dropped.has(id) && n.visible && !properties.some((p) => p.name === n.visible!.property)) properties.push({ name: n.visible.property, type: 'BOOLEAN', default: !!n.visible.on, prop: n.visible.prop });\n }\n\n // Props the spec does not draw (loading, slots...), so readers know what is missing.\n const used = new Set([...axes.map((a) => a.prop), ...properties.map((p) => p.prop), 'disabled', 'className', 'children', 'render']);\n if (axes.some((a) => a.name === 'Checked')) for (const p of ['checked', 'defaultChecked', 'indeterminate']) used.add(p);\n for (const p of src.props.values()) {\n if (used.has(p.name) || p.kind === 'function' || p.kind === 'string' || p.kind === 'other' || p.kind === 'union') continue;\n unmappedProps.push({ part: 'root', property: `prop ${p.name}`, value: p.kind, reason: p.kind === 'node' ? 'slot content is not drawn' : p.kind === 'icon' ? 'icon prop with no icon part' : 'not drawn in this version' });\n }\n for (const e of cssErrors) unmappedProps.push({ part: 'root', property: 'css', value: e, reason: 'selector not understood' });\n\n mergeFieldBoxes(parts, variants, unmapped, new Set([...base.built.parts].filter(([, n]) => n.inputLike).map(([id]) => id)));\n flattenWrapper(parts, variants, unmapped);\n const compoundParts = new Set([...base.built.parts].filter(([, n]) => n.name).map(([id]) => id));\n const swapped = addSwaps(name, src, parts, properties, axes, variants, opts, compoundParts);\n // Images: the media slot, swappable for a real picture.\n for (const part of parts) {\n if (!base.built.parts.get(part.id)?.media || part.swap) continue;\n part.swap = { property: part.name, default: MEDIA_SLOT.name, options: [MEDIA_SLOT.name] };\n for (const v of variants) (v.slots ??= {})[part.id] = MEDIA_SLOT.name;\n }\n for (let i = unmappedProps.length - 1; i >= 0; i--) if (swapped.has(unmappedProps[i]!.property.replace(/^prop /, ''))) unmappedProps.splice(i, 1);\n\n const seen = new Set<string>();\n const dedup = [...unmappedProps, ...unmapped].filter((u) => {\n const k = `${u.part}|${u.property}|${u.reason}`;\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n // Every variant lists all of its fields (even when equal across variants): the plugin binds per variant.\n const source = [src.file, ...[...modules.keys()].sort()];\n // The code example the content comes from, for the fidelity check: the props the set used and the example's children.\n // Example texts count only where they are drawn (behind a BOOLEAN shown by default), not where code ignores them.\n const shownExamples = Object.fromEntries(Object.entries(examples).filter(([k]) => properties.some((p) => p.type === 'BOOLEAN' && p.prop === k && p.default === true)));\n const exampleProps = Object.fromEntries(Object.entries({ ...baseProps, ...shownExamples }).filter(([, v]) => isData(v)));\n const example: SpecExample | undefined =\n (previewKids && !base.built.root.fromExports) || Object.keys(exampleProps).length\n ? { c: src.name, ...(Object.keys(exampleProps).length ? { p: exampleProps } : {}), ...(previewKids && !base.built.root.fromExports ? { children: previewKids as SpecExample['children'] } : {}) }\n : undefined;\n const component = {\n ...(src.folder !== setName ? { component: src.folder } : {}),\n ...(Object.keys(fixed).length ? { fixed: { ...fixed } } : {}),\n ...(view ? { view } : {}),\n ...(example ? { example } : {}),\n };\n const motionFields = { ...(interactions.length ? { interactions } : {}), ...(motion.length ? { motion } : {}) };\n const spec: Omit<ComponentSpec, 'hash'> = { name: setName, ...component, source, axes, properties, parts, variants, unmapped: dedup, ...motionFields };\n return { name: setName, ...component, hash: hashSpec(spec), source, axes, properties, parts, variants, unmapped: dedup, ...motionFields };\n}\n\n/**\n * Interactions between the variants of a set, from its State and Checked axes: hover (While hovering, Default to Hover),\n * press (While pressing, Hover or Default to Pressed) and click (On click, Checked toggles; a radio only checks). With a\n * Checked axis, hover uses Mouse enter and Mouse leave, so a click is not undone when the pointer leaves. Only between\n * variants that look different; the transition is the code's for that change, grouped when variants differ.\n */\nfunction deriveInteractions(axes: SpecAxis[], evaluated: { props: Record<string, string>; ev: Evaluated }[], tokens: Map<string, TokenInfo>, radio: boolean): SpecInteraction[] {\n const byKey = new Map(evaluated.map((e) => [variantKeyOf(e.props), e]));\n const state = axes.find((a) => a.name === 'State');\n const checked = axes.find((a) => a.name === 'Checked');\n const rules: { trigger: SpecTrigger; axis: string; from: string; to: string; only?: (p: Record<string, string>) => boolean }[] = [];\n if (state) {\n const has = (v: string) => state.values.includes(v);\n if (has('Hover')) {\n if (checked) rules.push({ trigger: 'MOUSE_ENTER', axis: 'State', from: 'Default', to: 'Hover' }, { trigger: 'MOUSE_LEAVE', axis: 'State', from: 'Hover', to: 'Default' });\n else rules.push({ trigger: 'ON_HOVER', axis: 'State', from: 'Default', to: 'Hover' });\n }\n if (has('Pressed')) rules.push({ trigger: 'ON_PRESS', axis: 'State', from: has('Hover') ? 'Hover' : 'Default', to: 'Pressed' });\n }\n if (checked) {\n const pairs: [string, string][] = [['false', 'true']];\n if (!radio) pairs.push(['true', 'false']);\n if (checked.values.includes('mixed')) pairs.push(['mixed', 'true']);\n // Clicked where the pointer is: at rest or hovered, never while disabled.\n const only = (p: Record<string, string>) => p.State === undefined || p.State === 'Default' || p.State === 'Hover';\n for (const [from, to] of pairs) rules.push({ trigger: 'ON_CLICK', axis: 'Checked', from, to, only });\n }\n const out: SpecInteraction[] = [];\n for (const r of rules) {\n const groups = new Map<string, { transition: SpecInteraction['transition']; keys: string[] }>();\n let candidates = 0;\n for (const e of evaluated) {\n if (e.props[r.axis] !== r.from) continue;\n candidates++;\n if (r.only && !r.only(e.props)) continue;\n const target = byKey.get(variantKeyOf({ ...e.props, [r.axis]: r.to }));\n if (!target || drawn(target.ev) === drawn(e.ev)) continue;\n const transition = transitionBetween(e.ev.computed, target.ev.computed, tokens);\n const k = JSON.stringify(transition);\n const g = groups.get(k) ?? { transition, keys: [] };\n g.keys.push(variantKeyOf(e.props));\n groups.set(k, g);\n }\n const total = [...groups.values()].reduce((n, g) => n + g.keys.length, 0);\n for (const g of groups.values()) out.push({ trigger: r.trigger, axis: r.axis, from: r.from, to: r.to, ...(groups.size > 1 || total < candidates ? { variants: g.keys } : {}), transition: g.transition });\n }\n return out;\n}\n\n/** Whether a spec draws anything: a fill, a border, an icon or a text of its own. Layout helpers draw nothing. */\nexport function specDrawsSomething(spec: ComponentSpec): boolean {\n const kinds = new Map(spec.parts.map((p) => [p.id, p]));\n for (const v of spec.variants)\n for (const [id, vals] of Object.entries(v.values)) {\n const part = kinds.get(id);\n if (part?.kind === 'icon' || part?.kind === 'vector') return true;\n if (part?.kind === 'text' && part.text !== 'Label') return true;\n // The children text of a link (its own color or an underline), not the page text a layout helper passes through.\n if (part?.kind === 'text' && (vals.textDecoration !== undefined || (typeof vals.textFill === 'string' && vals.textFill !== 'color.text.default'))) return true;\n if ((vals.fill !== undefined && vals.fill !== null) || (vals.stroke !== undefined && vals.stroke !== null)) return true;\n }\n return false;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Swappable parts: icons and content slots\n\n/** The design system component that draws an icon (`<Icon icon={...} />`): its parts are icon instances. */\nconst ICON_COMPONENT = 'Icon';\n\n/** Icons every pulled file gets besides the ones the components use, so designers can swap without importing. */\nexport const COMMON_ICONS = ['Plus', 'Minus', 'Pencil', 'Trash2', 'Copy', 'Search', 'X', 'Check', 'ChevronDown', 'ChevronRight', 'Info', 'AlertTriangle', 'Star', 'Settings', 'ExternalLink', 'Download', 'Upload', 'Ellipsis'];\n\n/** Default icon of a slot when neither the docs preview nor the AllStates story shows one. */\nconst FALLBACK_ICON: Record<string, string> = { Badge: 'Info' };\nconst DEFAULT_FALLBACK_ICON = 'Plus';\n\n/** The icon components themselves: Icon.tsx draws `sm` by default; Lucide's grid is 24, the `lg` size. */\nexport const ICON_STYLE: SpecIconStyle = { size: 'icon.size.lg', color: 'color.text.default', stroke: 'icon.stroke' };\n\n/** Media slot: a neutral plate with a centered image icon, 16:9, as wide as a card (size.80). */\nexport const MEDIA_SLOT: SpecSlot = {\n name: 'Slot/Media',\n kind: 'media',\n values: { fill: 'color.bg.muted', width: 'size.80' },\n aspect: [16, 9],\n icon: 'Image',\n iconValues: { width: 'icon.size.lg', height: 'icon.size.lg', stroke: 'color.text.muted', strokeWeight: 'icon.stroke' },\n};\n\ninterface DocNode {\n c?: string;\n p?: Record<string, unknown>;\n children?: unknown[];\n}\n\n/** Every `{ c, p }` element of a docs.json value, in document order. */\nfunction docElements(v: unknown, out: DocNode[] = []): DocNode[] {\n if (Array.isArray(v)) for (const x of v) docElements(x, out);\n else if (v && typeof v === 'object') {\n const n = v as DocNode;\n if (typeof n.c === 'string') out.push(n);\n for (const x of Object.values(v)) docElements(x, out);\n }\n return out;\n}\n\nfunction readDocs(name: string, opts: SpecGeneratorOptions): Record<string, unknown> | undefined {\n const text = opts.read(`${opts.componentsDir}/${name}/${name}.docs.json`);\n if (!text) return undefined;\n try {\n return JSON.parse(text) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction readStories(name: string, opts: SpecGeneratorOptions): ts.SourceFile | undefined {\n const file = `${opts.componentsDir}/${name}/${name}.stories.tsx`;\n const text = opts.read(file);\n return text === undefined ? undefined : ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);\n}\n\n/** Names imported from lucide-react by a stories file. */\nfunction storyIcons(sf: ts.SourceFile | undefined): string[] {\n const out: string[] = [];\n for (const st of sf?.statements ?? []) {\n if (!ts.isImportDeclaration(st) || unquote(st.moduleSpecifier.getText(sf)) !== 'lucide-react') continue;\n const b = st.importClause?.namedBindings;\n if (b && ts.isNamedImports(b)) for (const e of b.elements) if (!e.isTypeOnly) out.push((e.propertyName ?? e.name).text);\n }\n return out;\n}\n\n/** First icon the AllStates story passes to `<Name prop={Icon}>` (the false branch of a condition: the general case). */\nfunction allStatesIcon(sf: ts.SourceFile | undefined, name: string, prop: string): string | undefined {\n if (!sf) return undefined;\n let decl: ts.Node | undefined;\n for (const st of sf.statements)\n if (ts.isVariableStatement(st)) for (const d of st.declarationList.declarations) if (ts.isIdentifier(d.name) && d.name.text === 'AllStates') decl = d;\n let found: string | undefined;\n const pick = (e: ts.Expression): string | undefined => {\n if (ts.isParenthesizedExpression(e)) return pick(e.expression);\n if (ts.isIdentifier(e)) return e.text;\n if (ts.isConditionalExpression(e)) return pick(e.whenFalse);\n return undefined;\n };\n const visit = (n: ts.Node) => {\n if (found) return;\n if ((ts.isJsxOpeningElement(n) || ts.isJsxSelfClosingElement(n)) && n.tagName.getText(sf) === name) {\n for (const a of n.attributes.properties) {\n if (!ts.isJsxAttribute(a) || a.name.getText(sf) !== prop || !a.initializer || !ts.isJsxExpression(a.initializer) || !a.initializer.expression) continue;\n found = pick(a.initializer.expression);\n if (found) return;\n }\n }\n ts.forEachChild(n, visit);\n };\n if (decl) visit(decl);\n return found;\n}\n\n/** Default icon of an icon prop: the docs preview, then the AllStates story, then a fallback. */\nfunction defaultIcon(name: string, prop: string, opts: SpecGeneratorOptions, folder = name): string {\n const docs = readDocs(folder, opts);\n for (const el of docElements(docs?.preview)) {\n const v = el.c === name ? el.p?.[prop] : undefined;\n if (typeof v === 'string' && /^[A-Z]\\w*$/.test(v)) return v;\n }\n return allStatesIcon(readStories(folder, opts), name, prop) ?? FALLBACK_ICON[name] ?? DEFAULT_FALLBACK_ICON;\n}\n\n/** Icon names a component's docs (icon props of any element) and stories (lucide-react imports) reference. */\nfunction referencedIcons(name: string, opts: SpecGeneratorOptions): string[] {\n const out: string[] = [];\n for (const el of docElements(readDocs(name, opts)))\n for (const [k, v] of Object.entries(el.p ?? {})) if (/^icon/i.test(k) && typeof v === 'string' && /^[A-Z]\\w*$/.test(v)) out.push(v);\n out.push(...storyIcons(readStories(name, opts)));\n return out;\n}\n\nconst zeroInline = (v: Partial<Record<SpecField, SpecValue>> | undefined) => !!v && v.paddingLeft === 0 && v.paddingRight === 0;\n\n/**\n * Marks the swappable parts of a spec and returns the code props they stand for:\n * - Icon parts swap between every icon (\"Icon\", \"Icon start\"), default from the docs or stories. Optional icons keep\n * their BOOLEAN visibility property.\n * - A compound part's content (a text in a non-root frame) that code draws full-bleed in some variant (no inline\n * padding: Card padding none, for media) becomes a content slot: \"Slot/<Component> <part> text\" or \"Slot/Media\",\n * Media by default where it is full-bleed. Its TEXT property moves to the text slot component.\n */\nfunction addSwaps(name: string, src: ComponentSource, parts: SpecPart[], properties: SpecProperty[], axes: SpecAxis[], variants: SpecVariant[], opts: SpecGeneratorOptions, compound: Set<string>): Set<string> {\n const props = new Set<string>();\n const iconProps = [...src.props.values()].filter((p) => p.kind === 'icon');\n const defaultKey = variantKeyOf(Object.fromEntries(axes.map((a) => [a.name, a.default])));\n const defaultVariant = variants.find((v) => variantKeyOf(v.props) === defaultKey) ?? variants[0];\n const setSlot = (part: string, value: (v: SpecVariant) => string) => {\n for (const v of variants) (v.slots ??= {})[part] = value(v);\n };\n for (const part of parts) {\n if (part.kind === 'icon') {\n const visibleProp = part.visible ? properties.find((p) => p.type === 'BOOLEAN' && p.name === part.visible)?.prop : undefined;\n const prop = visibleProp ?? iconProps.find((p) => !p.optional && !properties.some((x) => x.prop === p.name))?.name;\n if (!prop) continue;\n const icon = iconComponentName(defaultIcon(name, prop, opts, src.folder));\n part.swap = { property: sentenceCase(prop), default: icon, prop };\n setSlot(part.id, () => icon);\n props.add(prop);\n continue;\n }\n const parent = parts.find((p) => p.id === part.parent);\n if (part.kind !== 'text' || !part.text || !parent?.parent || parent.kind !== 'frame' || !compound.has(parent.id)) continue;\n if (!variants.some((v) => zeroInline(v.values[parent.id]))) continue;\n const textSlot = `Slot/${name} ${part.text.toLowerCase()} text`;\n const media = MEDIA_SLOT.name;\n part.swap = { property: part.text, default: zeroInline(defaultVariant?.values[parent.id]) ? media : textSlot, options: [textSlot, media] };\n setSlot(part.id, (v) => (zeroInline(v.values[parent.id]) ? media : textSlot));\n const i = properties.findIndex((p) => p.type === 'TEXT' && p.name === part.text);\n if (i >= 0) properties.splice(i, 1);\n delete part.text;\n }\n return props;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Lucide icons\n\n/** lucide-react export name -> icon id, from the ESM index (\"export { default as Trash2, ... } from './icons/trash.mjs'\"). */\nfunction lucideIndex(dir: string, opts: SpecGeneratorOptions): Map<string, string> {\n const text = opts.read(`${dir}/lucide-react.mjs`) ?? opts.read(`${dir}/lucide-react.js`);\n if (text === undefined) throw new Error(`lucide-react was not found at ${dir}: run npm install.`);\n const out = new Map<string, string>();\n for (const m of text.matchAll(/export\\s*\\{([^}]*)\\}\\s*from\\s*'\\.\\/icons\\/([\\w-]+)\\.m?js'/g)) {\n for (const part of m[1]!.split(',')) {\n const n = /default as (\\w+)/.exec(part.trim());\n if (n) out.set(n[1]!, m[2]!);\n }\n }\n return out;\n}\n\nconst attrText = (v: string | number) => String(v).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n\n/** The icon's SVG from its lucide-react module (`__iconData.node` or `__iconNode`), with Lucide's default attributes. */\nfunction lucideSvg(dir: string, id: string, opts: SpecGeneratorOptions): string {\n const file = `${dir}/icons/${id}.mjs`;\n const text = opts.read(file) ?? opts.read(`${dir}/icons/${id}.js`);\n if (text === undefined) throw new Error(`lucide-react has no icon file ${file}.`);\n const sf = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);\n let nodeArray: ts.ArrayLiteralExpression | undefined;\n const visit = (n: ts.Node) => {\n if (nodeArray) return;\n if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name) && n.initializer) {\n if (n.name.text === '__iconNode' && ts.isArrayLiteralExpression(n.initializer)) nodeArray = n.initializer;\n if (n.name.text === '__iconData' && ts.isObjectLiteralExpression(n.initializer)) {\n const prop = n.initializer.properties.find((p): p is ts.PropertyAssignment => ts.isPropertyAssignment(p) && p.name.getText(sf) === 'node');\n if (prop && ts.isArrayLiteralExpression(prop.initializer)) nodeArray = prop.initializer;\n }\n }\n ts.forEachChild(n, visit);\n };\n visit(sf);\n if (!nodeArray) throw new Error(`${file}: no icon node found.`);\n const children = nodeArray.elements.map((el) => {\n if (!ts.isArrayLiteralExpression(el)) throw new Error(`${file}: unexpected icon node.`);\n const [tag, attrs] = el.elements;\n const name = tag && ts.isStringLiteral(tag) ? tag.text : '';\n const pairs: string[] = [];\n if (attrs && ts.isObjectLiteralExpression(attrs)) {\n for (const p of attrs.properties) {\n if (!ts.isPropertyAssignment(p)) continue;\n const key = unquote(p.name.getText(sf));\n if (key === 'key') continue;\n const v = p.initializer;\n const value = ts.isStringLiteral(v) || ts.isNoSubstitutionTemplateLiteral(v) ? v.text : ts.isNumericLiteral(v) ? Number(v.text) : undefined;\n if (value !== undefined) pairs.push(`${key}=\"${attrText(value)}\"`);\n }\n }\n return `<${name}${pairs.length ? ` ${pairs.join(' ')}` : ''}/>`;\n });\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${children.join('')}</svg>`;\n}\n\n/**\n * The icons section: every icon a slot defaults to, every icon the components' docs and stories reference, the media\n * slot's icon, then the common set. One entry per Lucide icon (aliases folded into the first name seen), sorted by name.\n */\nexport function generateIcons(components: ComponentSpec[], opts: SpecGeneratorOptions, slots: SpecSlot[] = []): SpecIcon[] {\n const dir = opts.lucideDir ?? 'node_modules/lucide-react/dist/esm';\n const index = lucideIndex(dir, opts);\n const names: string[] = [];\n for (const c of components) {\n for (const p of c.parts) {\n if (p.swap && !p.swap.options) names.push(p.swap.default.replace(/^Icon\\//, ''));\n if (p.icon) names.push(p.icon.replace(/^Icon\\//, ''));\n }\n for (const v of c.variants) for (const x of Object.values(v.slots ?? {})) if (x.startsWith('Icon/')) names.push(x.slice(5));\n names.push(...referencedIcons(c.component ?? c.name, opts));\n }\n for (const s of slots) if (s.icon) names.push(s.icon);\n names.push(...COMMON_ICONS);\n const byId = new Map<string, SpecIcon>();\n for (const n of names) {\n const id = index.get(n);\n if (!id) throw new Error(`Icon ${n} is not exported by lucide-react.`);\n const hit = byId.get(id);\n if (!hit) byId.set(id, { name: n, lucide: id, svg: lucideSvg(dir, id, opts) });\n else if (hit.name !== n && !hit.aliases?.includes(n)) (hit.aliases ??= []).push(n);\n }\n return [...byId.values()].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0)).map((i) => (i.aliases ? { ...i, aliases: [...i.aliases].sort() } : i));\n}\n\n/** Content components the specs' slots swap to: each component's text slot (its default variant's text fields), then Media. */\nexport function generateSlots(components: ComponentSpec[]): SpecSlot[] {\n const out: SpecSlot[] = [];\n let media = false;\n for (const c of components) {\n const defaultKey = variantKeyOf(Object.fromEntries(c.axes.map((a) => [a.name, a.default])));\n const v = c.variants.find((x) => variantKeyOf(x.props) === defaultKey) ?? c.variants[0];\n for (const p of c.parts) {\n if (!p.swap?.options) continue;\n for (const o of p.swap.options) {\n if (o === MEDIA_SLOT.name) media = true;\n else if (!out.some((s) => s.name === o)) out.push({ name: o, kind: 'text', values: { ...(v?.values[p.id] ?? {}) }, text: { property: 'Text', default: p.name } });\n }\n }\n }\n if (media) out.push(MEDIA_SLOT);\n return out;\n}\n\nfunction specsFile(components: ComponentSpec[], opts: SpecGeneratorOptions, coverage?: SpecCoverage[]): ComponentSpecsFile {\n const slots = generateSlots(components);\n return {\n version: COMPONENT_SPECS_VERSION,\n generated: 'Generated by `npm run specs` from the component TSX and CSS modules. Do not edit: the test suite fails when it is out of date.',\n components,\n icons: generateIcons(components, opts, slots),\n iconStyle: ICON_STYLE,\n slots,\n ...(coverage ? { coverage } : {}),\n };\n}\n\n/** Specs of the named components (sets), in that order. Throws when one cannot be generated. */\nexport function generateComponentSpecs(names: string[], opts: SpecGeneratorOptions): ComponentSpecsFile {\n return specsFile(\n names.map((n) => generateComponentSpec(n, opts)),\n opts,\n );\n}\n\n/** One set per value of the union prop whose values change a component's layers, when each value draws faithfully. */\nfunction splitByLayers(folder: string, opts: SpecGeneratorOptions): ComponentSpec[] {\n const src = new Reader(opts).load(folder);\n for (const p of src?.props.values() ?? []) {\n if (p.kind !== 'union' || !p.values) continue;\n const out: ComponentSpec[] = [];\n for (const v of p.values) {\n try {\n const spec = generateComponentSpec(folder, opts, undefined, `${folder}/${sentenceCase(v)}`, { [p.name]: v });\n if (specDrawsSomething(spec)) out.push(spec);\n } catch {\n out.length = 0;\n break;\n }\n }\n if (out.length === p.values.length) return out;\n }\n return [];\n}\n\n/** CSS that paints something (a color, a background, a border, a shadow): a component without any is a layout helper. */\nconst PAINTS = /(^|[;{\\s])(color|background(-color)?|border(-(top|right|bottom|left))?(-color)?|box-shadow|fill|stroke)\\s*:(?!\\s*(0[;\\s}]|none|transparent))/m;\n\n/**\n * Every component folder, generated when the generator can draw it faithfully, else recorded with the reason it\n * cannot (unsupported) or as a layout helper with no visual of its own. Support is decided here, from what the generator\n * can read: no list to maintain. A folder's other exports (Radio in RadioGroup) get their own set when they draw\n * something; exports drawn inside the main set (CardHeader) do not.\n */\nexport function generateAllComponentSpecs(folders: string[], opts: SpecGeneratorOptions): ComponentSpecsFile {\n const withList = { ...opts, components: opts.components ?? folders };\n const reader = new Reader(withList);\n const components: ComponentSpec[] = [];\n const coverage: SpecCoverage[] = [];\n const cssOf = (folder: string) => [...(reader.load(folder)?.styles.values() ?? [])].map((path) => (opts.read(path) ?? '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')).join('\\n');\n const paints = (folder: string) => PAINTS.test(cssOf(folder));\n for (const folder of [...folders].sort()) {\n const reasons: string[] = [];\n const attempt = (name: string, view?: SpecView, setName?: string): ComponentSpec | undefined => {\n try {\n const spec = generateComponentSpec(name, withList, view, setName);\n return specDrawsSomething(spec) ? spec : undefined;\n } catch (err) {\n reasons.push(err instanceof UnsupportedComponentError ? err.reason : 'renders in a way the generator cannot read yet');\n return undefined;\n }\n };\n const exports = [folder, ...[...(reader.load(folder)?.exported.keys() ?? [])].filter((n) => n !== folder)];\n const sets: ComponentSpec[] = [];\n let main = attempt(folder);\n // Variants with different layers (a linear and a circular progress): one set per value of the prop that changes\n // them (\"Progress/Linear\", \"Progress/Circular\").\n if (!main && reasons.includes('changes its layers between variants')) {\n const split = splitByLayers(folder, withList);\n if (split.length) {\n sets.push(...split);\n main = split[0];\n reasons.length = 0;\n }\n }\n if (main && !sets.length) {\n sets.push(main);\n const compound = new Set(main.parts.map((p) => p.name));\n const drawnIn = new Set(main.parts.map((p) => p.source).filter(Boolean));\n for (const other of exports.slice(1)) {\n if (other.startsWith(folder) && compound.has(other.slice(folder.length))) continue;\n const spec = attempt(other);\n if (!spec) continue;\n // Not drawn alone when it is not faithful alone or adds nothing: a part that reads private custom properties\n // its parent sets (a tab's height from its list), or one the main set already draws with nothing to set\n // (a tab list).\n const readsParent = spec.unmapped.some((u) => /^--_[\\w-]+ is not a token$/.test(u.reason));\n const duplicate = drawnIn.has(spec.parts[0]?.source) && !spec.properties.length && spec.axes.every((a) => a.name === 'State');\n if (readsParent || duplicate) continue;\n sets.push(spec);\n }\n }\n // Popups (a select's list, a dialog, a tooltip): drawn open, as their own set, next to what opens them, the way a\n // Figma UI kit draws them. Base UI behaviour is not drawn, only the look.\n const hasPopup = /\\.(Portal|Popup)\\b/.test(opts.read(`${opts.componentsDir}/${folder}/${folder}.tsx`) ?? '');\n if (!main && hasPopup) {\n reasons.length = 0;\n for (const name of exports) {\n // What opens the popup counts when the component styles it (a select's trigger), not when it is the consumer's\n // own element (a tooltip's trigger).\n const closedSpec = attempt(name, 'without-popup');\n const closed = closedSpec?.parts.some((p) => p.source?.includes(`${folder}.module.css`)) ? closedSpec : undefined;\n if (closed && !sets.some((x) => x.name === closed.name)) sets.push(closed);\n const suffix = name === folder ? '' : name.startsWith(folder) ? name.slice(folder.length) : name;\n const popupName = `${folder}/${sets.some((x) => x.name === `${folder}/Popup`) ? suffix || 'Popup' : 'Popup'}`;\n // Drawn open by the export that renders the portal itself (DialogContent), not by those that only wrap it.\n const fnNode = reader.load(name)?.fn;\n const ownsPortal = !!fnNode && /\\.Portal\\b/.test(fnNode.getText());\n const open = ownsPortal ? attempt(name, 'popup', popupName) : undefined;\n if (open && !sets.some((x) => x.name === open.name)) sets.push(open);\n }\n }\n // The icon component: every icon is drawn as its own component on the Icons page.\n if (!sets.length && folder === ICON_COMPONENT) {\n coverage.push({ name: folder, status: 'generated', reason: 'drawn as icon components on the Icons page' });\n continue;\n }\n if (!sets.length) {\n const fileText = opts.read(`${opts.componentsDir}/${folder}/${folder}.tsx`) ?? '';\n // A component made of Base UI popup parts (a dialog, a menu, a toast) opens a popup, whatever it draws first.\n const reason = /\\.(Portal|Popup|Positioner)\\b/.test(fileText) && !reasons.length ? 'opens a popup' : reasons.length ? mainReason(reasons) : undefined;\n // What the generator cannot read but Claude drafted from the code (component-spec-overrides/<Name>.json).\n const drafted = draftedSpec(folder, withList);\n if (drafted) {\n components.push(drafted);\n coverage.push({ name: folder, status: 'drafted', reason: drafted.drafted!.reason, ...(drafted.name !== folder ? { sets: [drafted.name] } : {}) });\n continue;\n }\n if (!paints(folder)) coverage.push({ name: folder, status: 'layout', reason: /inset\\(50%\\)/.test(cssOf(folder)) ? 'screen reader text only, nothing to draw' : 'layout only, use auto layout' });\n else coverage.push({ name: folder, status: 'unsupported', reason: reason ?? 'draws nothing the generator can read yet' });\n continue;\n }\n components.push(...sets);\n coverage.push({ name: folder, status: 'generated', ...(sets.length > 1 || sets[0]!.name !== folder ? { sets: sets.map((x) => x.name) } : {}) });\n }\n return specsFile(components, withList, coverage);\n}\n\n// ---------------------------------------------------------------------------------------------\n// Drafted with Claude\n\n/** Where drafted specs live: next to component-specs.json (packages/react/component-spec-overrides). */\nexport const overridesDirOf = (componentsDir: string) => posix.join(posix.dirname(posix.dirname(componentsDir)), 'component-spec-overrides');\n\n/** FNV-1a of the code a drafted spec was read from, to tell when the code changed since. */\nexport function draftedCodeHash(files: string[], read: (path: string) => string | undefined): string {\n return specHash(files.map((f) => `${f}\\n${read(f) ?? ''}`).join('\\n'));\n}\n\n/**\n * A spec Claude drafted for a component the generator cannot read: `component-spec-overrides/<Folder>.json`, a\n * ComponentSpec marked `\"source\": \"drafted\"` with the files it was read from (`files`), the generator's reason and the\n * code's hash when drafted (`codeHash`). Validated like a generated spec, against the repo's tokens: an invalid one\n * fails `npm run specs`. Never counted as generated: its coverage is `drafted`, and it is `stale` once the code changed.\n */\nexport function draftedSpec(folder: string, opts: SpecGeneratorOptions): ComponentSpec | undefined {\n const path = `${opts.overridesDir ?? overridesDirOf(opts.componentsDir)}/${folder}.json`;\n const text = opts.read(path);\n if (text === undefined) return undefined;\n let raw: Record<string, unknown>;\n try {\n raw = JSON.parse(text) as Record<string, unknown>;\n } catch {\n throw new Error(`${path} is not valid JSON.`);\n }\n if (raw.source !== 'drafted') throw new Error(`${path}: a drafted spec says \"source\": \"drafted\".`);\n const files = Array.isArray(raw.files) ? (raw.files as unknown[]).filter((f): f is string => typeof f === 'string') : [];\n if (!files.length) throw new Error(`${path}: list the code it was drafted from in \"files\".`);\n const reason = typeof raw.reason === 'string' && raw.reason ? raw.reason : 'the generator cannot read it yet';\n const { $comment: _c, source: _s, files: _f, reason: _r, codeHash, hash: _h, drafted: _d, ...fields } = raw;\n const stale = typeof codeHash === 'string' && codeHash !== draftedCodeHash(files, opts.read);\n const body = { ...(fields as unknown as Omit<ComponentSpec, 'hash' | 'source' | 'drafted'>), drafted: { reason, ...(stale ? { stale: true } : {}) } };\n const problems = validateComponentSpec({ ...body, source: files }, new Map([...typesOf(opts.tokens)].map(([k, v]) => [k, v.type])));\n if (problems.length) throw new Error(`${path} does not match the component spec format:\\n- ${problems.join('\\n- ')}`);\n const { name, axes, properties, parts, variants, unmapped, ...rest } = body;\n const spec: Omit<ComponentSpec, 'hash'> = { name, ...rest, source: files, axes, properties, parts, variants, unmapped };\n return { name, ...rest, hash: hashSpec(spec), source: files, axes, properties, parts, variants, unmapped };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Repo helpers (Node)\n\n/** CSS custom property -> token, for every token of the repo (all tiers), with the repo's cssVar convention. */\nexport function tokenCssIndex(files: Record<string, string>, opts: { prefix?: string; separator?: string; layout?: Parameters<typeof buildTokenSet>[1] } = {}): Map<string, TokenInfo> {\n const set = buildTokenSet(files, opts.layout ?? {});\n const out = new Map<string, TokenInfo>();\n const ctx = defaultContext(set);\n for (const t of set.tokens.values()) {\n const v = tokenCssVar(t.path, opts.prefix, opts.separator);\n if (out.has(v)) continue;\n // Motion tokens carry their value: interactions play the code's duration and easing.\n const value = t.type === 'duration' || t.type === 'cubicBezier' ? resolve(set.byPath, t.path, ctx).value : undefined;\n out.set(v, { path: t.path, type: t.type, ...(value !== undefined ? { value } : {}) });\n }\n return out;\n}\n\n/** Generator options for the repo at `root` from bridge.config.json (tokens root, components dir, cssVar), and its component folders. */\nexport function repoSpecOptions(root: string): { opts: SpecGeneratorOptions; folders: string[] } {\n const configText = readFileSync(join(root, CONFIG_FILE), 'utf8');\n const config = loadConfig(configText);\n const tokensRoot = join(root, config.tokens.root);\n const files: Record<string, string> = {};\n const walk = (dir: string) => {\n for (const n of readdirSync(dir)) {\n const full = join(dir, n);\n if (statSync(full).isDirectory()) walk(full);\n else if (n.endsWith('.tokens.json')) files[relative(tokensRoot, full).split('\\\\').join('/')] = readFileSync(full, 'utf8');\n }\n };\n walk(tokensRoot);\n const tokens = tokenCssIndex(files, { prefix: config.cssVar.prefix, separator: config.cssVar.separator, layout: layoutOptions(config) });\n const read = (p: string) => {\n try {\n return readFileSync(join(root, p), 'utf8');\n } catch {\n return undefined;\n }\n };\n const componentsDir = config.components?.dir ?? 'packages/react/src/components';\n const dir = join(root, componentsDir);\n const folders = readdirSync(dir)\n .filter((n) => /^[A-Z]/.test(n) && statSync(join(dir, n)).isDirectory() && read(`${componentsDir}/${n}/${n}.tsx`) !== undefined)\n .sort();\n // The global base stylesheet next to the components (packages/react/src/styles/base.css), when the repo has one.\n const baseCss = posix.join(posix.dirname(componentsDir), 'styles/base.css');\n return { opts: { componentsDir, read, tokens, styleSuffix: config.components?.styleSuffix, components: folders, ...(read(baseCss) !== undefined ? { baseCss } : {}) }, folders };\n}\n\n/**\n * Specs for the repo at `root`. With `names`, those sets only (throws when one cannot be generated). Without, every\n * component folder: the sets the generator can draw, and the coverage of all of them (what `npm run specs` writes).\n */\nexport function generateRepoComponentSpecs(root: string, names?: string[]): ComponentSpecsFile {\n const { opts, folders } = repoSpecOptions(root);\n return names ? generateComponentSpecs(names, opts) : generateAllComponentSpecs(folders, opts);\n}\n\n/** The JSON text written to disk: stable, two-space indent, trailing newline. */\nexport const serializeComponentSpecs = (f: ComponentSpecsFile) => `${JSON.stringify(f, null, 2)}\\n`;\n","// Applying a suggestion on a local git checkout (Node only): the workspace adapter the planner reads through\n// (suggestion-apply.ts), the 3-way merge with `git merge-file`, and the three ways to hand the result over:\n// - branch (default): one commit on a new local branch through plumbing (commitToNewLocalBranch), the working tree,\n// the index and the checked-out branch untouched, nothing pushed;\n// - write: the files written into the working tree, refused when those files have uncommitted changes;\n// - patch: a `git format-patch` text built from a commit no branch points to.\n// A dry run plans and diffs, and writes nothing. Pushing, opening the pull request and posting the applied comment are\n// the caller's (CLI, MCP), with the developer's own access.\n\nimport { execFile } from 'node:child_process';\nimport { lstat, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { baseBranchOf, CONFIG_FILE, loadConfig, protectedBranchesOf, type BridgeConfig } from '../config';\nimport { slugify } from '../pr-composer';\nimport { planSuggestionApply, suggestionAppliedComment, type PlanSuggestionApplyInput, type SuggestionApplyOutcome, type SuggestionApplyPlan, type SuggestionWorkspace } from '../suggestion-apply';\nimport { gitBlobSha } from '../suggestions';\nimport { branchExists, commitToNewLocalBranch, commitTree, git, listFilesAt } from './git-local';\n\n/** Runs git and returns the exit code with the output instead of throwing on a non-zero code. */\nfunction gitCode(root: string, args: string[]): Promise<{ code: number; stdout: string; stderr: string }> {\n return new Promise((resolve) => {\n execFile('git', args, { cwd: root, maxBuffer: 32 * 1024 * 1024 }, (err, stdout, stderr) => {\n const code = err ? (typeof (err as { code?: unknown }).code === 'number' ? ((err as { code: number }).code) : -1) : 0;\n resolve({ code, stdout, stderr });\n });\n });\n}\n\n/** `git ls-tree <ref> -- <path>`: mode, type and object of one entry, or null. */\nasync function treeEntry(root: string, ref: string, path: string): Promise<{ mode: string; type: string; sha: string } | null> {\n const r = await gitCode(root, ['ls-tree', ref, '--', path]);\n const m = /^(\\d+) (\\w+) ([0-9a-f]+)\\t/.exec(r.stdout);\n return r.code === 0 && m ? { mode: m[1]!, type: m[2]!, sha: m[3]! } : null;\n}\n\n/** Each folder on the way to a path, then the path itself: \"a\", \"a/b\", \"a/b/c.json\". */\nconst prefixes = (path: string) => path.split('/').map((_, i, segs) => segs.slice(0, i + 1).join('/'));\n\n/** 3-way merge of three texts with `git merge-file -p`: the merged text, with conflict markers when not clean. */\nexport async function mergeText(root: string, input: { ours: string; base: string; theirs: string }): Promise<{ clean: boolean; text: string; conflicts: number }> {\n const dir = await mkdtemp(join(tmpdir(), 'bridge-merge-'));\n try {\n const [o, b, t] = ['current', 'base', 'suggested'].map((n) => join(dir, n));\n await Promise.all([writeFile(o!, input.ours), writeFile(b!, input.base), writeFile(t!, input.theirs)]);\n const r = await gitCode(root, ['merge-file', '-p', '-L', 'current', '-L', 'base', '-L', 'suggested', o!, b!, t!]);\n if (r.code < 0 || r.code > 127) throw new Error(`git merge-file failed: ${r.stderr.trim() || `exit ${r.code}`}`);\n return { clean: r.code === 0, text: r.stdout, conflicts: r.code };\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\n/** A unified diff of one file between two texts (null: absent), with a/ and b/ paths like `git diff`. */\nexport async function fileDiff(path: string, before: string | null, after: string | null): Promise<string> {\n if (before === after) return '';\n const dir = await mkdtemp(join(tmpdir(), 'bridge-diff-'));\n try {\n const side = async (name: 'a' | 'b', text: string | null) => {\n if (text === null) return '/dev/null';\n const p = join(dir, name, path);\n await mkdir(dirname(p), { recursive: true });\n await writeFile(p, text);\n return `${name}/${path}`;\n };\n const a = await side('a', before);\n const b = await side('b', after);\n const r = await new Promise<{ stdout: string }>((resolve) => execFile('git', ['diff', '--no-index', '--no-color', '--src-prefix=', '--dst-prefix=', '--', a, b], { cwd: dir, maxBuffer: 32 * 1024 * 1024 }, (_e, stdout) => resolve({ stdout })));\n return r.stdout;\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nexport interface GitWorkspaceOptions {\n /** Read this commit or branch. Absent: the working tree. */\n ref?: string | undefined;\n /** When the base commit is not in the clone, how to read a file there (for example GitHubClient.readFile). */\n readBase?: ((path: string, sha: string) => Promise<string | null>) | undefined;\n}\n\n/**\n * The workspace a suggestion plans against on a git checkout: the working tree (to write files there) or a ref (to\n * commit on top of it). The base commit is fetched from origin when the clone lacks it.\n */\nexport function gitWorkspace(root: string, opts: GitWorkspaceOptions = {}): SuggestionWorkspace {\n const { ref } = opts;\n let fetched = false;\n return {\n async read(path) {\n if (ref) {\n const e = await treeEntry(root, ref, path);\n if (!e || e.type !== 'blob' || e.mode === '120000') return null;\n return { text: await git(root, ['cat-file', 'blob', e.sha]), sha: e.sha };\n }\n try {\n const st = await lstat(join(root, path));\n if (!st.isFile()) return null;\n const text = await readFile(join(root, path), 'utf8');\n return { text, sha: gitBlobSha(text) };\n } catch {\n return null;\n }\n },\n async readAt(at, path) {\n if ((await gitCode(root, ['cat-file', '-e', `${at}^{commit}`])).code !== 0 && !fetched) {\n fetched = true;\n await gitCode(root, ['fetch', '--no-tags', '--quiet', 'origin', at]);\n }\n const e = await treeEntry(root, at, path);\n if (e?.type === 'blob') return git(root, ['cat-file', 'blob', e.sha]);\n return opts.readBase ? opts.readBase(path, at) : null;\n },\n async list() {\n if (ref) return listFilesAt(root, ref);\n const out = await git(root, ['ls-files', '-z', '--cached', '--others', '--exclude-standard']);\n const all = [...new Set(out.split('\\0').filter(Boolean))];\n const present = await Promise.all(all.map((p) => lstat(join(root, p)).then((s) => s.isFile(), () => false)));\n return all.filter((_, i) => present[i]);\n },\n async isSymlink(path) {\n for (const p of prefixes(path)) {\n if (ref) {\n const e = await treeEntry(root, ref, p);\n if (!e) return false;\n if (e.mode === '120000') return true;\n } else {\n try {\n if ((await lstat(join(root, p))).isSymbolicLink()) return true;\n } catch {\n return false;\n }\n }\n }\n return false;\n },\n merge: (input) => mergeText(root, input),\n };\n}\n\nexport type LocalApplyMode = 'branch' | 'write' | 'patch';\n\nexport interface ApplySuggestionLocallyInput extends Omit<PlanSuggestionApplyInput, 'workspace' | 'config'> {\n /** Repository root (a git checkout). */\n root: string;\n /** The issue number, for the branch name and the commit message. */\n number: number;\n /** Default: bridge.config.json read where the plan reads (the base ref, or the working tree for \"write\"). */\n config?: BridgeConfig | undefined;\n /** Default \"branch\". */\n mode?: LocalApplyMode | undefined;\n /** Plan and diff only: nothing is written. */\n dryRun?: boolean | undefined;\n /** The ref the branch or patch builds on. Default \"HEAD\". Ignored by \"write\" (the working tree). */\n base?: string | undefined;\n /** Branch name. Default `<branchPrefix>suggestion-<n>-<slug>`, then -2, -3 when taken. */\n branch?: string | undefined;\n /** GitHub login of the developer, for the applied comment. */\n by?: string | undefined;\n readBase?: GitWorkspaceOptions['readBase'];\n /** Clock for the applied comment (tests). */\n now?: (() => string) | undefined;\n}\n\nexport type LocalApplyStatus = 'dry-run' | 'branch-created' | 'branch-exists' | 'written' | 'patch' | Exclude<SuggestionApplyOutcome, 'ready'>;\n\nexport interface LocalSuggestionApply {\n status: LocalApplyStatus;\n exitCode: 0 | 1 | 3;\n message: string;\n plan: SuggestionApplyPlan;\n branch?: string | undefined;\n commit?: string | undefined;\n /** `git format-patch` text (mode \"patch\"). */\n patch?: string | undefined;\n /** Unified diff of what is (or, in a dry run, would be) written. */\n diff?: string | undefined;\n /** Files written into the working tree (mode \"write\"). */\n written?: string[] | undefined;\n /** The applied record to post on the issue once a branch or files exist (posting is the caller's). */\n appliedComment?: string | undefined;\n}\n\nconst COMMIT_TYPE: Record<string, string> = { 'token-change': 'feat(tokens)', docs: 'docs', 'component-spec': 'feat', brand: 'feat(tokens)', revert: 'revert', config: 'chore(config)' };\n\nfunction commitMessage(plan: SuggestionApplyPlan, n: number): string {\n const p = plan.payload;\n const type = `${COMMIT_TYPE[p.kind] ?? 'chore'}${p.tier.bump === 'major' ? '!' : ''}`;\n return [`${type}: ${p.title.trim()}`, '', p.summary.trim(), '', `Applies Bridge suggestion #${n} (version ${plan.payloadSha.slice(0, 7)}).`].filter((l, i, a) => !(l === '' && a[i - 1] === '')).join('\\n');\n}\n\nasync function readConfigAt(ws: SuggestionWorkspace): Promise<BridgeConfig> {\n const text = (await ws.read(CONFIG_FILE))?.text;\n if (!text) throw new Error(`No ${CONFIG_FILE} here: run \\`bridge init\\` first, or apply from the repository root.`);\n return loadConfig(text);\n}\n\n/**\n * Plans a suggestion against the local checkout and hands the result over as a branch (default), files in the\n * working tree, or a patch. Refused, blocked, conflicting or already applied plans write nothing.\n */\nexport async function applySuggestionLocally(input: ApplySuggestionLocallyInput): Promise<LocalSuggestionApply> {\n const mode = input.mode ?? 'branch';\n const base = input.base ?? 'HEAD';\n const { root } = input;\n const wsOpts = { readBase: input.readBase };\n const ws = gitWorkspace(root, mode === 'write' ? wsOpts : { ...wsOpts, ref: base });\n const config = input.config ?? (await readConfigAt(ws));\n const planFor = (workspace: SuggestionWorkspace) => planSuggestionApply({ ...input, config, workspace });\n const plan = await planFor(ws);\n const at = (input.now ?? (() => new Date().toISOString()))();\n const result = (status: LocalApplyStatus, rest: Partial<LocalSuggestionApply> = {}): LocalSuggestionApply => ({ status, exitCode: plan.exitCode, message: plan.message, plan, ...rest });\n if (plan.outcome !== 'ready') return result(plan.outcome);\n\n const readNow = async (path: string) => (await ws.read(path))?.text ?? null;\n const diffOf = async () => (await Promise.all(plan.writes.map(async (w) => fileDiff(w.path, await readNow(w.path), w.content)))).join('');\n\n if (input.dryRun) return result('dry-run', { message: `Dry run: ${plan.message.replace(/^Ready: /, '')} Nothing written.`, diff: await diffOf() });\n\n if (mode === 'patch') {\n const { sha } = await commitTree(root, { base, message: commitMessage(plan, input.number), files: plan.writes });\n const patch = await git(root, ['format-patch', '-1', '--stdout', sha]);\n return result('patch', { message: 'Patch ready: apply it with `git am`.', patch, commit: sha });\n }\n\n if (mode === 'write') {\n const paths = plan.writes.map((w) => w.path);\n const dirty = (await git(root, ['status', '--porcelain', '-z', '--', ...paths])).split('\\0').filter((l) => l.length > 3).map((l) => l.slice(3));\n if (dirty.length) {\n return result('refused', {\n exitCode: 1,\n message: `Not written: these files have uncommitted changes: ${dirty.join(', ')}. Commit or stash them, or apply on a branch instead.`,\n });\n }\n const diff = await diffOf();\n for (const w of plan.writes) {\n const full = join(root, w.path);\n if (w.content === null) await rm(full, { force: true });\n else {\n await mkdir(dirname(full), { recursive: true });\n await writeFile(full, w.content);\n }\n }\n return result('written', {\n message: `Written: ${paths.length} file(s) in the working tree. Review them, commit, and say \"Closes #${input.number}\" in the pull request.`,\n written: paths,\n diff,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, at }),\n });\n }\n\n // Branch: reuse a branch of the same name when its tip already has the change, else -2, -3.\n const prefix = config.governance.branchPrefix;\n const wanted = input.branch ?? `${prefix}suggestion-${input.number}-${slugify(plan.payload.title, 40)}`;\n let branch = wanted;\n for (let i = 2; await branchExists(root, branch); i++) {\n const there = await planFor(gitWorkspace(root, { ...wsOpts, ref: branch }));\n if (there.outcome === 'already-applied') {\n const commit = (await git(root, ['rev-parse', `refs/heads/${branch}`])).trim();\n return result('branch-exists', {\n exitCode: 0,\n message: `Already on ${branch}: that branch has every change of this suggestion. Push it and open a pull request that says \"Closes #${input.number}\".`,\n branch,\n commit,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, branch, commit, at }),\n });\n }\n branch = `${wanted}-${i}`;\n }\n const protectedBranches = [...new Set([...protectedBranchesOf(config), baseBranchOf(config)])];\n const res = await commitToNewLocalBranch(root, { base, branch, message: commitMessage(plan, input.number), files: plan.writes, protectedBranches, branchPrefix: prefix });\n return result('branch-created', {\n message: `Applied on ${branch}, your working tree is untouched. Push it and open a pull request that says \"Closes #${input.number}\".`,\n branch,\n commit: res.sha,\n diff: res.diff,\n appliedComment: suggestionAppliedComment(plan, { by: input.by, branch, commit: res.sha, at }),\n });\n}\n","// fsSource: a RepoSource over a local checkout (build time, CLI, tests). Lists files with node:fs, skipping\n// .git and node_modules, and pins the ref to the checkout's HEAD when git answers (\"working-tree\" otherwise).\n\nimport { execFileSync } from 'node:child_process';\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { normalizeRepoPath, type RepoSource, type RepoSourceRef } from '../repo-source';\n\nconst SKIP = new Set(['.git', 'node_modules']);\n\nfunction gitOut(root: string, args: string[]): string {\n try {\n return execFileSync('git', args, { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();\n } catch {\n return '';\n }\n}\n\n/** owner, repo and sha of a checkout: the github.com origin remote and HEAD, when git knows them. */\nexport function localRepoRef(root: string): RepoSourceRef {\n const origin = /github\\.com[:/]([\\w.-]+)\\/([\\w.-]+?)(\\.git)?$/.exec(gitOut(root, ['remote', 'get-url', 'origin']));\n return { owner: origin?.[1] ?? '', repo: origin?.[2] ?? '', sha: gitOut(root, ['rev-parse', 'HEAD']) || 'working-tree' };\n}\n\n/** A RepoSource over the files of `root` as they are on disk (uncommitted changes included). */\nexport function fsSource(root: string, ref: Partial<RepoSourceRef> = {}): RepoSource {\n let resolved: RepoSourceRef | undefined;\n const walk = (rel: string, out: string[]) => {\n for (const entry of readdirSync(join(root, rel), { withFileTypes: true })) {\n if (SKIP.has(entry.name)) continue;\n const path = rel ? `${rel}/${entry.name}` : entry.name;\n if (entry.isDirectory()) walk(path, out);\n else if (entry.isFile()) out.push(path);\n else if (entry.isSymbolicLink() && statSync(join(root, path), { throwIfNoEntry: false })?.isFile()) out.push(path);\n }\n };\n return {\n get ref() {\n resolved ??= { ...localRepoRef(root), ...Object.fromEntries(Object.entries(ref).filter(([, v]) => v !== undefined)) };\n return resolved;\n },\n async list(prefix = '') {\n const rel = normalizeRepoPath(prefix);\n const abs = join(root, rel);\n if (!existsSync(abs)) return [];\n if (!statSync(abs).isDirectory()) return [rel];\n const out: string[] = [];\n walk(rel, out);\n return out.sort();\n },\n async text(path) {\n const abs = join(root, normalizeRepoPath(path));\n try {\n return statSync(abs).isFile() ? readFileSync(abs, 'utf8') : null;\n } catch {\n return null;\n }\n },\n };\n}\n","// The in-page half of the Storybook measure: plain JavaScript, kept as a string so no bundler or test transform\n// rewrites it before it reaches the browser. It runs in a story's iframe once the story has rendered and returns a\n// MeasuredNode tree (see measure.ts) of what the browser actually drew: boxes, layout, paint, text, and the CSS custom\n// properties each value was declared with.\n//\n// How a token is found for a value: every style rule of the page (CSS modules, Sass output, CSS-in-JS rules inserted\n// with insertRule, Tailwind layers) is read once; for an element and a property the winning declaration (inline style,\n// then !important, specificity and order) is taken, and the custom properties it uses are followed through their own\n// declarations (`--button-bg: var(--color-action-primary-bg)`) to the end of the chain. A value no declaration ties to a\n// variable is matched by value against the variables defined on the root (`matched`), which is weaker evidence.\n\nexport const MEASURE_SCRIPT = String.raw`(function (arg) {\n arg = arg || {};\n var MAX_NODES = arg.maxNodes || 400;\n var MAX_DEPTH = arg.maxDepth || 14;\n var rootSel = arg.root || '#storybook-root, #root';\n var PROPS = ['display', 'position', 'visibility', 'opacity', 'overflow', 'box-sizing',\n 'flex-direction', 'flex-wrap', 'justify-content', 'align-items', 'align-self', 'flex-grow', 'row-gap', 'column-gap',\n 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\n 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\n 'width', 'height', 'min-width', 'min-height',\n 'background-color', 'background-image',\n 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width',\n 'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style',\n 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color',\n 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius',\n 'box-shadow', 'outline-style', 'outline-width', 'outline-color',\n 'color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'text-decoration-line', 'text-transform', 'text-align', 'white-space',\n 'fill', 'stroke', 'stroke-width', 'transform', 'grid-auto-flow', 'grid-template-columns', 'grid-template-rows', 'left', 'top', 'right', 'bottom'];\n // Properties a token is looked for (paint, spacing, shape, type).\n var TOKENED = ['row-gap', 'column-gap', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'width', 'height', 'min-width', 'min-height',\n 'background-color', 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width',\n 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color',\n 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius',\n 'box-shadow', 'opacity', 'color', 'font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'fill', 'stroke', 'stroke-width'];\n // Longhand -> shorthands that may set it, with the position of the longhand in a 1 to 4 value box shorthand.\n var SIDES = { top: 0, right: 1, bottom: 2, left: 3 };\n var CORNERS = { 'top-left': 0, 'top-right': 1, 'bottom-right': 2, 'bottom-left': 3 };\n var LOGICAL = { top: 'block-start', bottom: 'block-end', left: 'inline-start', right: 'inline-end' };\n var LOGICAL_CORNER = { 'top-left': 'start-start', 'top-right': 'start-end', 'bottom-right': 'end-end', 'bottom-left': 'end-start' };\n function shorthandsOf(p) {\n var m;\n // Logical longhands too (padding-block-start: a horizontal writing mode, left to right).\n if ((m = /^padding-(top|right|bottom|left)$/.exec(p))) return [['padding-' + LOGICAL[m[1]], -1], ['padding', SIDES[m[1]]], ['padding-block', m[1] === 'top' ? 0 : m[1] === 'bottom' ? 1 : -1], ['padding-inline', m[1] === 'left' ? 0 : m[1] === 'right' ? 1 : -1]].filter(function (x) { return !/block$|inline$/.test(x[0]) || x[1] >= 0; });\n if ((m = /^margin-(top|right|bottom|left)$/.exec(p))) return [['margin-' + LOGICAL[m[1]], -1], ['margin', SIDES[m[1]]]];\n if ((m = /^border-(top-left|top-right|bottom-right|bottom-left)-radius$/.exec(p))) return [['border-' + LOGICAL_CORNER[m[1]] + '-radius', -1], ['border-radius', CORNERS[m[1]]]];\n if ((m = /^border-(top|right|bottom|left)-(width|color|style)$/.exec(p))) return [['border-' + LOGICAL[m[1]] + '-' + m[2], -1], ['border-' + LOGICAL[m[1]], -1], ['border-' + m[2], SIDES[m[1]]], ['border-' + m[1], -1], ['border', -1], ['border-' + (m[1] === 'top' || m[1] === 'bottom' ? 'block' : 'inline'), -1]];\n if (p === 'row-gap') return [['gap', 0]];\n if (p === 'column-gap') return [['gap', 1]];\n if (p === 'background-color') return [['background', -1]];\n if (/^font-/.test(p) || p === 'line-height') return [['font', -1]];\n return [];\n }\n\n // ---- style rules, read once ----\n var rules = [];\n var order = 0;\n function walk(list, layered) {\n for (var i = 0; i < list.length; i++) {\n var r = list[i];\n try {\n if (r.selectorText !== undefined && r.style) {\n rules.push({ sel: r.selectorText, style: r.style, order: order++, layered: layered });\n if (r.cssRules && r.cssRules.length) walk(r.cssRules, layered); // CSS nesting\n } else if (r.media !== undefined && r.cssRules) {\n if (window.matchMedia(r.media.mediaText || 'all').matches) walk(r.cssRules, layered);\n } else if (r.conditionText !== undefined && r.cssRules) {\n walk(r.cssRules, layered);\n } else if (r.cssRules && r.name !== undefined) {\n walk(r.cssRules, true); // @layer block: unlayered rules win over it\n } else if (r.cssRules) {\n walk(r.cssRules, layered);\n }\n } catch (e) {}\n }\n }\n var sheetsRead = 0, sheetsBlocked = 0;\n for (var s = 0; s < document.styleSheets.length; s++) {\n try { walk(document.styleSheets[s].cssRules, false); sheetsRead++; } catch (e) { sheetsBlocked++; }\n }\n try { for (var a = 0; a < (document.adoptedStyleSheets || []).length; a++) walk(document.adoptedStyleSheets[a].cssRules, false); } catch (e) {}\n\n function splitTop(text, sepRe) {\n var out = [], depth = 0, cur = '', q = null;\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (q) { cur += c; if (c === q) q = null; continue; }\n if (c === '\"' || c === \"'\") { q = c; cur += c; continue; }\n if (c === '(' || c === '[') depth++;\n if (c === ')' || c === ']') depth--;\n if (depth === 0 && sepRe.test(c)) { if (cur.trim()) out.push(cur.trim()); cur = ''; continue; }\n cur += c;\n }\n if (cur.trim()) out.push(cur.trim());\n return out;\n }\n function specificity(sel) {\n var s = sel.replace(/:where\\([^)]*\\)/g, '').replace(/::?(before|after|placeholder|selection|marker|backdrop)\\b/g, '');\n var ids = (s.match(/#[\\w-]+/g) || []).length;\n var cls = (s.match(/\\.[\\w-]+|\\[[^\\]]*\\]|:(?!not\\b|is\\b|has\\b)[\\w-]+(\\([^)]*\\))?/g) || []).length;\n var types = (s.replace(/\\[[^\\]]*\\]|\\([^)]*\\)/g, '').match(/(^|[\\s>+~(])[a-zA-Z][\\w-]*/g) || []).length;\n return ids * 10000 + cls * 100 + types;\n }\n var PSEUDO_END = /::?(before|after)\\s*$/;\n // pseudo: the rules for el::before / el::after (the selector minus its pseudo-element); none: the element's own.\n function matchSpec(el, selText, pseudo) {\n var best = -1;\n var parts = splitTop(selText, /,/);\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n var pm = PSEUDO_END.exec(part);\n if (pseudo) {\n if (!pm || pm[1] !== pseudo) continue;\n part = part.slice(0, pm.index).trim() || '*';\n } else if (pm || /::/.test(part)) continue;\n try { if (el.matches(part)) best = Math.max(best, specificity(part) + (pseudo ? 1 : 0)); } catch (e) {}\n }\n return best;\n }\n var matchCache = { '': new Map(), before: new Map(), after: new Map() };\n function matching(el, pseudo) {\n var cache = matchCache[pseudo || ''];\n var m = cache.get(el);\n if (m) return m;\n m = [];\n for (var i = 0; i < rules.length; i++) {\n var sp = matchSpec(el, rules[i].sel, pseudo);\n if (sp >= 0) m.push({ r: rules[i], sp: sp });\n }\n cache.set(el, m);\n return m;\n }\n // The winning declared value of a property (longhand or the shorthand that sets it) on an element or its pseudo.\n function declared(el, prop, pseudo) {\n var best = null;\n function consider(value, important, layered, sp, ord, shorthand, pos) {\n if (!value) return;\n var rank = [important ? (layered ? 3 : 2) : (layered ? 0 : 1), sp, ord];\n if (!best || cmp(rank, best.rank) > 0) best = { value: value, rank: rank, shorthand: shorthand, pos: pos };\n }\n function cmp(x, y) { for (var i = 0; i < x.length; i++) if (x[i] !== y[i]) return x[i] - y[i]; return 0; }\n var short = prop.indexOf('--') === 0 ? [] : shorthandsOf(prop);\n var m = matching(el, pseudo);\n for (var i = 0; i < m.length; i++) {\n var st = m[i].r.style;\n var v = st.getPropertyValue(prop);\n if (v) consider(v, st.getPropertyPriority(prop) === 'important', m[i].r.layered, m[i].sp, m[i].r.order, null, -1);\n else for (var k = 0; k < short.length; k++) {\n var sv = st.getPropertyValue(short[k][0]);\n if (sv) consider(sv, st.getPropertyPriority(short[k][0]) === 'important', m[i].r.layered, m[i].sp, m[i].r.order, short[k][0], short[k][1]);\n }\n }\n var inl = !pseudo && el.style && el.style.getPropertyValue(prop);\n if (inl) consider(inl, el.style.getPropertyPriority(prop) === 'important', false, 1e9, 1e9, null, -1);\n else if (el.style && !pseudo) for (var j = 0; j < short.length; j++) {\n var iv = el.style.getPropertyValue(short[j][0]);\n if (iv) consider(iv, false, false, 1e9, 1e9, short[j][0], short[j][1]);\n }\n return best;\n }\n function varsIn(value) {\n var out = [], re = /var\\(\\s*(--[\\w-]+)/g, m;\n while ((m = re.exec(value))) out.push(m[1]);\n return out;\n }\n // The piece of a box shorthand that sets one side (\"padding: var(--a) var(--b)\" -> right is var(--b)).\n function boxPiece(value, pos) {\n if (pos < 0) return value;\n var parts = splitTop(value.replace(/\\s*\\/.*$/, ''), /\\s/);\n if (parts.length === 1) return parts[0];\n if (parts.length === 2) return parts[pos % 2];\n if (parts.length === 3) return parts[pos === 3 ? 1 : pos];\n return parts[pos] || value;\n }\n // Custom property chain: --button-bg -> --color-action-primary-bg -> --color-orange-500.\n function chainOf(el, name) {\n var chain = [name], seen = {};\n seen[name] = 1;\n var cur = name;\n for (var d = 0; d < 8; d++) {\n var found = null;\n for (var e = el; e && e.nodeType === 1; e = e.parentElement) {\n var dv = declared(e, cur);\n if (dv) { found = dv.value; break; }\n }\n if (!found) break;\n var next = varsIn(found);\n if (next.length !== 1 || seen[next[0]] || found.trim().indexOf('var(') !== 0) break;\n seen[next[0]] = 1;\n chain.push(next[0]);\n cur = next[0];\n }\n return chain;\n }\n\n // ---- value normalisation through a probe element ----\n var probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:0;height:0';\n document.body.appendChild(probe);\n var colorCache = {};\n function normColor(v) {\n if (v in colorCache) return colorCache[v];\n probe.style.color = '';\n probe.style.color = v;\n var out = probe.style.color ? getComputedStyle(probe).color : null;\n colorCache[v] = out;\n return out;\n }\n function normLength(v) {\n probe.style.width = '';\n probe.style.width = v;\n if (!probe.style.width) return null;\n var w = getComputedStyle(probe).width;\n probe.style.width = '0';\n return w;\n }\n var isColorProp = function (p) { return /color$/.test(p) || p === 'fill' || p === 'stroke'; };\n\n // Variables in scope at the component (for value matching): defined on :root, or on a provider element around the\n // story (Fluent's FluentProvider, a theme wrapper). Custom properties inherit, so the component root's computed style\n // holds both.\n var rootVars = null;\n var scopeEl = null;\n function rootTokens() {\n if (rootVars) return rootVars;\n rootVars = { colors: {}, lengths: {}, count: 0, scoped: 0 };\n var cs = getComputedStyle(scopeEl || document.documentElement);\n var top = scopeEl ? getComputedStyle(document.documentElement) : cs;\n var names = {};\n for (var i = 0; i < rules.length; i++) {\n var st = rules[i].style;\n for (var k = 0; k < st.length; k++) if (st[k].indexOf('--') === 0) names[st[k]] = 1;\n }\n for (var i2 = 0; i2 < cs.length; i2++) if (cs[i2].indexOf('--') === 0) names[cs[i2]] = 1;\n for (var i3 = 0; scopeEl && i3 < top.length; i3++) if (top[i3].indexOf('--') === 0) names[top[i3]] = 1;\n for (var n in names) {\n var v = cs.getPropertyValue(n).trim();\n if (!v) continue;\n rootVars.count++;\n if (scopeEl && !top.getPropertyValue(n).trim()) rootVars.scoped++;\n if (/^(#|rgb|hsl|oklch|oklab|lab|lch|color\\()/i.test(v)) {\n var c = normColor(v);\n if (c) (rootVars.colors[c] = rootVars.colors[c] || []).push(n);\n } else if (/^-?[\\d.]+(px|rem|em)$/.test(v)) {\n var l = normLength(v);\n if (l) (rootVars.lengths[l] = rootVars.lengths[l] || []).push(n);\n }\n }\n return rootVars;\n }\n\n function tokenFor(el, prop, computed, pseudo) {\n var d = declared(el, prop, pseudo);\n // A pseudo-element inherits from its element, an element from its parent.\n var parentOf = pseudo ? el : el.parentElement;\n if (d) {\n var piece = d.shorthand && /^(padding|margin|border-radius|border-width|border-color|border-style|gap)$/.test(d.shorthand) ? boxPiece(d.value, d.pos) : d.value;\n var vars = varsIn(piece);\n if (vars.length) {\n var pick = vars[0];\n if (vars.length > 1) {\n var cs = getComputedStyle(el, pseudo ? '::' + pseudo : null);\n for (var i = 0; i < vars.length; i++) {\n var rv = cs.getPropertyValue(vars[i]).trim();\n var same = isColorProp(prop) ? normColor(rv) === computed : normLength(rv) === computed;\n if (same) { pick = vars[i]; break; }\n }\n }\n var chain = chainOf(el, pick);\n // A color function around channels alone (\"hsl(var(--primary))\") gives the variable's color: tied to it too.\n var channels = isColorProp(prop) && vars.length === 1 ? /^(rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\(\\s*var\\(\\s*--[\\w-]+\\s*\\)\\s*\\)$/i.exec(piece.trim()) : null;\n var direct = (piece.trim().indexOf('var(') === 0 && vars.length === 1) || !!channels;\n // A declaration that does not give the computed value lost the cascade somewhere this script does not model:\n // the value is not tied to it (it may still match a variable by value below).\n if (direct && !/^(line-height|font-weight|opacity|font-family)$/.test(prop)) {\n var own = getComputedStyle(el, pseudo ? '::' + pseudo : null).getPropertyValue(pick).trim();\n var got = isColorProp(prop) ? normColor(channels ? channels[1] + '(' + own + ')' : own) : /px$/.test(computed) ? normLength(own) : null;\n if (own && got && got !== computed) d = null;\n }\n if (d) return { via: 'declared', chain: chain, exact: direct, declared: piece.trim() };\n }\n if (d && /^(inherit|currentcolor)$/i.test(d.value.trim()) && parentOf && prop !== 'background-color') {\n var cp = prop === 'fill' || prop === 'stroke' || /border-.*-color/.test(prop) ? 'color' : prop;\n // currentcolor on another property reads this element's (or pseudo's) own color; inherit, and color:\n // currentcolor, read the parent's (a pseudo-element's parent is its element).\n var up = /currentcolor/i.test(d.value) && cp !== prop\n ? tokenFor(el, cp, getComputedStyle(el, pseudo ? '::' + pseudo : null).getPropertyValue(cp), pseudo)\n : parentOf ? tokenFor(parentOf, cp, getComputedStyle(parentOf).getPropertyValue(cp)) : null;\n if (up) return up;\n }\n } else if (/^(color|font-family|font-size|font-weight|line-height|letter-spacing)$/.test(prop) && parentOf) {\n // Inherited: the token comes from the nearest ancestor that declares it.\n return tokenFor(parentOf, prop, computed);\n }\n var rt = rootTokens();\n var hit = isColorProp(prop) ? rt.colors[computed] : rt.lengths[computed];\n if (hit && hit.length) return { via: 'matched', chain: hit.slice(0, 3), exact: false };\n return null;\n }\n\n // ---- the rendered tree ----\n var count = 0;\n function own(el, cs) {\n var bg = cs.backgroundColor;\n var hasBg = bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent';\n var hasBorder = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['border' + s + 'Width']) > 0 && cs['border' + s + 'Style'] !== 'none'; });\n var pad = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['padding' + s]) > 0; });\n var paints = function (v) { return !!v && v !== 'none'; };\n return hasBg || hasBorder || pad || paints(cs.boxShadow) || paints(cs.backgroundImage);\n }\n function directText(el) {\n var t = '';\n for (var c = el.firstChild; c; c = c.nextSibling) if (c.nodeType === 3) t += c.nodeValue;\n return t.replace(/\\s+/g, ' ').trim();\n }\n function visible(el, cs) {\n if (cs.display === 'none' || cs.visibility === 'hidden' || cs.visibility === 'collapse') return false;\n // Closed or hidden content is not a layer: transparent, hidden, inert, clipped away, or a hidden popover.\n if (parseFloat(cs.opacity) === 0 || el.hidden || el.hasAttribute('inert')) return false;\n if (/inset\\((50|100)%/.test(cs.clipPath || '')) return false;\n if (el.getAttribute('aria-hidden') === 'true' && (/^(tooltip|dialog|menu|listbox)$/.test(el.getAttribute('role') || '') || /popover|tooltip/i.test(String(el.className && el.className.baseVal !== undefined ? el.className.baseVal : el.className)))) return false;\n var r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0 && !el.children.length) return false;\n // Visually hidden text for screen readers (1 px, clipped): not drawn, not a layer.\n if ((cs.position === 'absolute' || cs.position === 'fixed') && r.width <= 1 && r.height <= 1 && (/hidden|clip/.test(cs.overflow) || cs.clip !== 'auto' && cs.clip !== '' || cs.clipPath !== 'none')) return false;\n return true;\n }\n function round(n) { return Math.round(n * 100) / 100; }\n // An inline SVG as markup Figma can draw: every shape's computed fill and stroke written on it, currentColor\n // resolved, the rendered size set.\n function svgMarkup(el, r) {\n if (el.outerHTML.length > 12000) return null;\n var strokes = [];\n var clone = el.cloneNode(true);\n var src = [el].concat(Array.prototype.slice.call(el.querySelectorAll('*')));\n var dst = [clone].concat(Array.prototype.slice.call(clone.querySelectorAll('*')));\n var color = getComputedStyle(el).color;\n for (var i = 0; i < src.length && i < dst.length; i++) {\n var cs = getComputedStyle(src[i]);\n if (/^(path|circle|rect|ellipse|line|polyline|polygon|use|text)$/.test(src[i].tagName.toLowerCase()) || i === 0) {\n var f = cs.fill, k = cs.stroke;\n if (f) dst[i].setAttribute('fill', /url\\(/.test(f) ? (src[i].getAttribute('fill') || 'none') : f);\n if (k && k !== 'none') {\n dst[i].setAttribute('stroke', k);\n if (cs.strokeWidth) dst[i].setAttribute('stroke-width', parseFloat(cs.strokeWidth));\n if (i > 0) strokes.push(k);\n }\n else if (i > 0 && k === 'none' && src[i].getAttribute('stroke')) dst[i].setAttribute('stroke', 'none');\n }\n dst[i].removeAttribute('class');\n dst[i].removeAttribute('style');\n }\n clone.setAttribute('width', round(r.width));\n clone.setAttribute('height', round(r.height));\n if (!clone.getAttribute('xmlns')) clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n return { svg: clone.outerHTML.replace(/currentColor/gi, color), strokes: strokes };\n }\n // ::before / ::after drawn as a box (a switch knob, a checkbox's box, a radio's circle): a frame part with its box,\n // paint, border, radius and position. Text-only or empty pseudo-elements are not parts.\n function pseudoNode(el, which, hostRect) {\n var cs = getComputedStyle(el, '::' + which);\n var content = cs.content;\n if (!content || content === 'none' || content === 'normal' || cs.display === 'none' || cs.visibility === 'hidden') return null;\n var w = parseFloat(cs.width), h = parseFloat(cs.height);\n if (!(w > 0) || !(h > 0) || !/px$/.test(cs.width) || !/px$/.test(cs.height)) return null;\n var bg = cs.backgroundColor;\n var paints = (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') || (cs.backgroundImage && cs.backgroundImage !== 'none') || (cs.boxShadow && cs.boxShadow !== 'none');\n var bordered = ['Top', 'Right', 'Bottom', 'Left'].some(function (s) { return parseFloat(cs['border' + s + 'Width']) > 0 && cs['border' + s + 'Style'] !== 'none'; });\n if (!paints && !bordered) return null;\n // Border box: CSS width/height are content-box unless box-sizing says otherwise.\n if (cs.boxSizing !== 'border-box') {\n w += (parseFloat(cs.paddingLeft) || 0) + (parseFloat(cs.paddingRight) || 0) + (parseFloat(cs.borderLeftWidth) || 0) + (parseFloat(cs.borderRightWidth) || 0);\n h += (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0) + (parseFloat(cs.borderTopWidth) || 0) + (parseFloat(cs.borderBottomWidth) || 0);\n }\n var hcs = getComputedStyle(el);\n var padX = hostRect.left + (parseFloat(hcs.borderLeftWidth) || 0), padY = hostRect.top + (parseFloat(hcs.borderTopWidth) || 0);\n var padW = hostRect.width - (parseFloat(hcs.borderLeftWidth) || 0) - (parseFloat(hcs.borderRightWidth) || 0);\n var padH = hostRect.height - (parseFloat(hcs.borderTopWidth) || 0) - (parseFloat(hcs.borderBottomWidth) || 0);\n var x, y;\n if (cs.position === 'absolute' || cs.position === 'fixed') {\n x = /px$/.test(cs.left) ? padX + parseFloat(cs.left) : /px$/.test(cs.right) ? padX + padW - parseFloat(cs.right) - w : padX;\n y = /px$/.test(cs.top) ? padY + parseFloat(cs.top) : /px$/.test(cs.bottom) ? padY + padH - parseFloat(cs.bottom) - h : padY;\n } else {\n // In flow: before at the start of the content box, after at its end.\n var cx = padX + (parseFloat(hcs.paddingLeft) || 0), cy = padY + (parseFloat(hcs.paddingTop) || 0);\n x = which === 'before' ? cx : padX + padW - (parseFloat(hcs.paddingRight) || 0) - w;\n y = cy;\n }\n var m = /matrix\\(([^)]+)\\)/.exec(cs.transform || '');\n if (m) { var mv = m[1].split(',').map(parseFloat); x += mv[4] || 0; y += mv[5] || 0; }\n var style = {};\n for (var i = 0; i < PROPS.length; i++) style[PROPS[i]] = cs.getPropertyValue(PROPS[i]);\n style.width = round(w) + 'px';\n style.height = round(h) + 'px';\n var tokens = {};\n for (var j = 0; j < TOKENED.length; j++) {\n var p = TOKENED[j], v = style[p];\n if (!v || v === 'none' || v === 'normal' || v === 'auto' || v === 'rgba(0, 0, 0, 0)') continue;\n if (/width$/.test(p) && /^border-/.test(p) && v === '0px') continue;\n if (/^border-.*-color$/.test(p) && parseFloat(style[p.replace('color', 'width')]) === 0) continue;\n var t = tokenFor(el, p, v, which);\n if (t) tokens[p] = t;\n }\n count++;\n return { tag: '::' + which, kind: 'frame', pseudo: which, sized: { width: true, height: true }, classes: [], box: { x: round(x - originX), y: round(y - originY), width: round(w), height: round(h) }, style: style, tokens: tokens, children: [] };\n }\n var originX = 0, originY = 0;\n function node(el, depth) {\n count++;\n var cs = getComputedStyle(el);\n var r = el.getBoundingClientRect();\n var tag = el.tagName.toLowerCase();\n var style = {};\n for (var i = 0; i < PROPS.length; i++) style[PROPS[i]] = cs.getPropertyValue(PROPS[i]);\n var tokens = {};\n for (var j = 0; j < TOKENED.length; j++) {\n var p = TOKENED[j], v = style[p];\n if (!v || v === 'none' || v === 'normal' || v === 'auto' || v === 'rgba(0, 0, 0, 0)') continue;\n if (/width$/.test(p) && /^border-/.test(p) && v === '0px') continue;\n if (/^border-.*-color$/.test(p) && parseFloat(style[p.replace('color', 'width')]) === 0) continue;\n var t = tokenFor(el, p, v);\n if (t) tokens[p] = t;\n }\n // A width or height the CSS sets (not auto, a percentage or content-sized): the pull keeps it fixed.\n var sized = {};\n ['width', 'height'].forEach(function (k) {\n var dv = declared(el, k);\n var v = dv ? dv.value.trim() : (el.style && el.style.getPropertyValue(k)) || '';\n if (v && !/^(auto|inherit|initial|unset|revert|fit-content|max-content|min-content|stretch|-webkit-fill-available)/.test(v) && !/%/.test(v)) sized[k] = true;\n });\n var n = { tag: tag, classes: Array.prototype.slice.call(el.classList || []).slice(0, 8), box: { x: round(r.left - originX), y: round(r.top - originY), width: round(r.width), height: round(r.height) }, style: style, tokens: tokens, children: [] };\n var role = el.getAttribute('role');\n if (role) n.role = role;\n if (sized.width || sized.height) n.sized = sized;\n var dataState = {};\n for (var ai = 0; ai < el.attributes.length; ai++) {\n var an = el.attributes[ai].name;\n if (/^(data-(state|variant|size|disabled|checked|selected|tone|appearance)|aria-(checked|pressed|disabled|selected|invalid))$/.test(an)) dataState[an] = el.attributes[ai].value;\n }\n if (Object.keys(dataState).length) n.attrs = dataState;\n if (tag === 'svg') {\n n.kind = r.width <= 48 && r.height <= 48 ? 'icon' : 'vector';\n var mk = svgMarkup(el, r);\n if (mk) { n.svg = mk.svg; n.svgStrokes = mk.strokes; }\n return n;\n }\n if (tag === 'img') { n.kind = 'frame'; n.media = true; return n; }\n if (tag === 'input' || tag === 'textarea' || tag === 'select') {\n n.kind = 'frame';\n n.input = { type: el.type || tag, value: el.value || '', placeholder: el.getAttribute('placeholder') || '', checked: !!el.checked };\n }\n var hasEl = false;\n var before = pseudoNode(el, 'before', r), after = pseudoNode(el, 'after', r);\n if (before) { n.children.push(before); hasEl = true; }\n for (var c = el.firstChild; c; c = c.nextSibling) {\n if (count >= MAX_NODES) { n.truncated = true; break; }\n if (c.nodeType === 3) {\n var tx = c.nodeValue.replace(/\\s+/g, ' ').trim();\n if (!tx) continue;\n var range = document.createRange();\n range.selectNodeContents(c);\n var tr = range.getBoundingClientRect();\n n.children.push({ tag: '#text', kind: 'text', text: tx, box: { x: round(tr.left - originX), y: round(tr.top - originY), width: round(tr.width), height: round(tr.height) }, style: {}, tokens: {}, children: [] });\n } else if (c.nodeType === 1) {\n var ccs = getComputedStyle(c);\n if (!visible(c, ccs)) continue;\n if (depth + 1 > MAX_DEPTH) { hasEl = true; n.truncated = true; continue; }\n var cn = node(c, depth + 1);\n // A box with no area and nothing drawn inside (a closed popover's shell) is not a layer.\n if (cn.kind === 'frame' && !cn.children.length && !(cn.box.width * cn.box.height) && !cn.input && !cn.media) continue;\n hasEl = true;\n n.children.push(cn);\n }\n }\n if (after) { n.children.push(after); hasEl = true; }\n // An element holding only text is the text layer itself.\n if (!hasEl && n.children.length === 1 && n.children[0].kind === 'text' && !own(el, cs)) {\n n.kind = 'text';\n n.text = n.children[0].text;\n n.children = [];\n } else if (!n.kind) n.kind = 'frame';\n return n;\n }\n\n var host = document.querySelector(rootSel);\n if (!host) return { error: 'no element matches ' + rootSel + ' in the page' };\n // Popups portaled to the body (a menu, a dialog, a toast region): visible elements outside the story root.\n var portals = [];\n for (var b = document.body.firstElementChild; b; b = b.nextElementSibling) {\n if (b === probe || b.contains(host) || /^(SCRIPT|STYLE|LINK|TEMPLATE)$/.test(b.tagName)) continue;\n if (/sb-(wrapper|errordisplay|nopreview|preparing)|sb-show-main/.test(b.className || '')) continue;\n var bcs = getComputedStyle(b);\n if (!visible(b, bcs)) continue;\n // A portal container can be zero-size around its positioned popup: it counts when anything in it has a box.\n var br = b.getBoundingClientRect();\n if (br.width > 0 && br.height > 0) { portals.push(b); continue; }\n var inner = b.querySelectorAll('*');\n for (var q = 0; q < inner.length && q < 200; q++) { var ir = inner[q].getBoundingClientRect(); if (ir.width > 0 && ir.height > 0) { portals.push(b); break; } }\n }\n var storyRoot = host;\n // target 'portal': the component is the open popup (the newest portal), not the trigger in the story root.\n if (arg.target === 'portal') {\n if (!portals.length) { probe.remove(); return { error: 'no popup is open outside the story root' }; }\n host = portals[portals.length - 1];\n portals = portals.slice(0, -1);\n // A modal portal holds a backdrop beside the popup: the popup is the element with a popup role, when there is one.\n var roled = host.querySelector('[role=\"dialog\"], [role=\"alertdialog\"], [role=\"menu\"], [role=\"listbox\"], [role=\"tooltip\"], [role=\"tree\"], [role=\"grid\"]');\n if (roled && visible(roled, getComputedStyle(roled))) host = roled;\n }\n // Decorators and plain wrappers: go down while an element has one child and draws nothing itself.\n var el = host, wrappers = 0;\n // A decorator canvas the size of the viewport (a theme frame with a background and padding) is a wrapper too.\n // So is a full-width band around one narrower child (a theme provider painting the page background).\n function canvas(e) {\n var r = e.getBoundingClientRect();\n if (r.width >= window.innerWidth * 0.9 && r.height >= window.innerHeight * 0.9) return true;\n if (r.width < window.innerWidth * 0.9) return false;\n var c = e.children[0].getBoundingClientRect();\n if (c.width < r.width * 0.9) return true;\n // A full-width background with no border, radius or shadow: a theme surface, not a component.\n var cs = getComputedStyle(e);\n var noBorder = ['Top', 'Right', 'Bottom', 'Left'].every(function (x) { return !(parseFloat(cs['border' + x + 'Width']) > 0) || cs['border' + x + 'Style'] === 'none'; });\n return noBorder && !(parseFloat(cs.borderTopLeftRadius) > 0) && (!cs.boxShadow || cs.boxShadow === 'none');\n }\n while (arg.unwrap !== false && el.children.length === 1 && !directText(el) && (!own(el, getComputedStyle(el)) || canvas(el)) && el.children[0].tagName.toLowerCase() !== 'svg') {\n var only = el.children[0];\n var ocs = getComputedStyle(only);\n if (!visible(only, ocs)) break;\n el = only;\n wrappers++;\n }\n // within: a part that only renders inside its parent or a popup (a menu item, an accordion item, a toast) is measured\n // alone: the first visible match in the component, then in the popups.\n if (arg.within) {\n var pool = [el].concat(portals), hit = null;\n for (var wi = 0; wi < pool.length && !hit; wi++) {\n var cands = [];\n try { if (pool[wi].matches(arg.within)) cands.push(pool[wi]); cands = cands.concat(Array.prototype.slice.call(pool[wi].querySelectorAll(arg.within))); } catch (e) { probe.remove(); return { error: 'not a CSS selector: ' + arg.within }; }\n for (var ci = 0; ci < cands.length && !hit; ci++) if (visible(cands[ci], getComputedStyle(cands[ci])) && cands[ci].getBoundingClientRect().width > 0) hit = cands[ci];\n }\n if (!hit) { probe.remove(); return { error: 'no element matches ' + arg.within + ' in the story or its popups' }; }\n portals = portals.filter(function (p) { return !p.contains(hit); });\n el = hit;\n }\n // mark: tag the component element (for a forced :hover / :focus-visible from the browser driver) and stop.\n if (arg.mark) {\n var prev = document.querySelectorAll('[data-bridge-measure-root]');\n for (var mi = 0; mi < prev.length; mi++) prev[mi].removeAttribute('data-bridge-measure-root');\n el.setAttribute('data-bridge-measure-root', '');\n probe.remove();\n return { marked: true };\n }\n scopeEl = el;\n var hr = el.getBoundingClientRect();\n // Fill or hug: a block-level root that spans its container's content box (or is declared width: 100%) fills it.\n var rootFill = false;\n (function () {\n var pe = el.parentElement;\n var ecs = getComputedStyle(el);\n var inner = window.innerWidth;\n if (pe) {\n var pcs = getComputedStyle(pe);\n inner = pe.getBoundingClientRect().width - (parseFloat(pcs.paddingLeft) || 0) - (parseFloat(pcs.paddingRight) || 0) - (parseFloat(pcs.borderLeftWidth) || 0) - (parseFloat(pcs.borderRightWidth) || 0);\n }\n var dw = declared(el, 'width');\n var full = (dw && /^100%$/.test(dw.value.trim())) || (el.style && el.style.width === '100%');\n var blockish = /^(block|flex|grid|table|list-item|flow-root)$/.test(ecs.display);\n rootFill = !!full || (inner > 0 && Math.abs(hr.width - inner) <= 1 && (blockish || hr.width >= window.innerWidth * 0.5));\n })();\n originX = hr.left; originY = hr.top;\n var tree = arg.unwrap !== false && el === storyRoot && !storyRoot.children.length && !directText(storyRoot) ? null : node(el, 0);\n var portalTrees = [];\n for (var pi = 0; pi < portals.length && pi < 3; pi++) portalTrees.push(node(portals[pi], 0));\n probe.remove();\n var rt = rootVars || { count: 0 };\n return {\n root: tree,\n portals: portalTrees,\n wrappers: wrappers,\n nodes: count,\n rules: rules.length,\n sheets: { read: sheetsRead, blocked: sheetsBlocked },\n rootFill: rootFill,\n rootVariables: rt.count,\n scopedVariables: rt.scoped || 0,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n error: document.body.classList.contains('sb-show-errordisplay') ? (document.querySelector('#error-message') || {}).textContent || 'the story threw' : undefined\n };\n})`;\n","// The in-page half of the token harvest: plain JavaScript, kept as a string like MEASURE_SCRIPT. It lists every CSS\n// custom property the page's stylesheets declare (CSSOM: :root, provider and theme selectors, media, layers, nesting,\n// adopted sheets), takes for each the declaration that applies at the story (the nearest element that declares it,\n// then specificity and order), and resolves its value there: colors as rgb(), lengths in px. Channels (\"212 100% 47%\")\n// that every use wraps in one color function (hsl(var(--primary))) are that color.\n\nexport const TOKENS_SCRIPT = String.raw`(function (arg) {\n arg = arg || {};\n var rootSel = arg.root || '#storybook-root, #root';\n var host = document.querySelector(rootSel) || document.body;\n var at = host.firstElementChild || host;\n var decls = {};\n var order = 0;\n // Every var() use: the color function around it (rgb, hsl...), or a bare use; and the properties that alias it.\n var COLOR_FN = /^(rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)$/i;\n var useFn = {}, useBare = {}, aliasUses = {};\n function enclosing(s, pos) {\n for (var i = pos - 1, depth = 0; i >= 0; i--) {\n if (s[i] === ')') depth++;\n else if (s[i] === '(') {\n if (depth) { depth--; continue; }\n var j = i;\n while (j > 0 && /[\\w-]/.test(s[j - 1])) j--;\n var fn = s.slice(j, i).toLowerCase();\n // A fallback (var(--a, var(--b))): the function around the outer var.\n if (fn !== 'var') return fn;\n }\n }\n return '';\n }\n function scanDecl(d) {\n var c = d.indexOf(':');\n if (c < 0) return;\n var prop = d.slice(0, c).trim(), val = d.slice(c + 1).replace(/!important\\s*$/, '').trim();\n var alias = /^var\\(\\s*(--[\\w-]+)\\s*\\)$/.exec(val);\n if (alias && prop.indexOf('--') === 0) { (aliasUses[alias[1]] = aliasUses[alias[1]] || []).push(prop); return; }\n var re = /var\\(\\s*(--[\\w-]+)/g, m;\n while ((m = re.exec(val))) {\n var fn = enclosing(val, m.index);\n if (COLOR_FN.test(fn)) (useFn[m[1]] = useFn[m[1]] || {})[fn === 'rgba' || fn === 'hsla' ? fn.slice(0, 3) : fn] = 1;\n else useBare[m[1]] = 1;\n }\n }\n function scanUses(text) {\n for (var i = 0, depth = 0, start = 0; i <= text.length; i++) {\n var ch = text[i];\n if (ch === '(') depth++;\n else if (ch === ')') depth--;\n else if (i === text.length || (ch === ';' && depth <= 0)) { scanDecl(text.slice(start, i)); start = i + 1; depth = 0; }\n }\n }\n // The one color function every use of a property wraps it in, through the properties that alias it: '' unused, null\n // when a use is bare or two functions disagree.\n function channelFn(name, seen) {\n if (seen[name]) return '';\n seen[name] = 1;\n if (useBare[name]) return null;\n var fns = {};\n for (var f in useFn[name] || {}) fns[f] = 1;\n var al = aliasUses[name] || [];\n for (var i = 0; i < al.length; i++) {\n var g = channelFn(al[i], seen);\n if (g === null) return null;\n if (g) fns[g] = 1;\n }\n var k = Object.keys(fns);\n return k.length === 1 ? k[0] : k.length ? null : '';\n }\n function add(sel, style) {\n try { scanUses(style.cssText || ''); } catch (e) {}\n for (var k = 0; k < style.length; k++) {\n var n = style[k];\n if (n.indexOf('--') !== 0 || n.indexOf('--_') === 0 || n.indexOf('--sb-') === 0) continue;\n (decls[n] = decls[n] || []).push({ sel: sel, raw: style.getPropertyValue(n).trim(), order: order++ });\n }\n }\n function walk(list) {\n for (var i = 0; i < list.length; i++) {\n var r = list[i];\n try {\n if (r.selectorText !== undefined && r.style) {\n add(r.selectorText, r.style);\n if (r.cssRules && r.cssRules.length) walk(r.cssRules);\n } else if (r.media !== undefined && r.cssRules) {\n if (window.matchMedia(r.media.mediaText || 'all').matches) walk(r.cssRules);\n } else if (r.cssRules) walk(r.cssRules);\n } catch (e) {}\n }\n }\n var blocked = 0;\n for (var s = 0; s < document.styleSheets.length; s++) {\n try { walk(document.styleSheets[s].cssRules); } catch (e) { blocked++; }\n }\n try { for (var a = 0; a < (document.adoptedStyleSheets || []).length; a++) walk(document.adoptedStyleSheets[a].cssRules); } catch (e) {}\n // Inline styles on the story's ancestors (a provider that sets variables in style=\"\").\n for (var up = at; up && up.nodeType === 1; up = up.parentElement) if (up.style && up.style.length) add('[style]', up.style);\n // Inline styles in the story use variables too.\n var inline = host.querySelectorAll('[style]');\n for (var q = 0; q < inline.length; q++) try { scanUses(inline[q].style.cssText || ''); } catch (e) {}\n\n function specificity(sel) {\n var x = sel.replace(/:where\\([^)]*\\)/g, '');\n var ids = (x.match(/#[\\w-]+/g) || []).length;\n var cls = (x.match(/\\.[\\w-]+|\\[[^\\]]*\\]|:(?!not\\b|is\\b|has\\b|root\\b)[\\w-]+(\\([^)]*\\))?/g) || []).length + (x.match(/:root/g) || []).length;\n var types = (x.replace(/\\[[^\\]]*\\]|\\([^)]*\\)/g, '').match(/(^|[\\s>+~(])[a-zA-Z][\\w-]*/g) || []).length;\n return ids * 10000 + cls * 100 + types;\n }\n function matchSpec(el, selText) {\n var best = -1, parts = selText.split(/,(?![^(]*\\))/);\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i].trim();\n if (!p || /::/.test(p)) continue;\n try { if (el.matches(p)) best = Math.max(best, specificity(p)); } catch (e) {}\n }\n return best;\n }\n // The declaration that applies at the story: the nearest element up from it with a matching rule, then specificity\n // and order; inline style wins at its element.\n function winning(name) {\n var list = decls[name];\n for (var el = at; el && el.nodeType === 1; el = el.parentElement) {\n var best = null, bestRank = null;\n if (el.style && el.style.getPropertyValue(name)) return { sel: '[style]', raw: el.style.getPropertyValue(name).trim() };\n for (var i = 0; i < list.length; i++) {\n if (list[i].sel === '[style]') continue;\n var sp = matchSpec(el, list[i].sel);\n if (sp < 0) continue;\n if (!best || sp > bestRank[0] || (sp === bestRank[0] && list[i].order > bestRank[1])) { best = list[i]; bestRank = [sp, list[i].order]; }\n }\n if (best) return best;\n }\n return null;\n }\n\n var probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:0;height:0';\n (at.parentElement || document.body).appendChild(probe);\n function norm(v) {\n if (!v) return { type: 'string', value: '' };\n probe.style.color = '';\n probe.style.color = v;\n if (probe.style.color) return { type: 'color', value: getComputedStyle(probe).color };\n if (/^-?[\\d.]+$/.test(v)) return { type: 'number', value: Number(v) };\n probe.style.width = '';\n probe.style.width = v;\n if (probe.style.width && !/auto|%/.test(v)) {\n var w = getComputedStyle(probe).width;\n if (/px$/.test(w)) return { type: 'length', value: Math.round(parseFloat(w) * 100) / 100 };\n }\n return { type: 'string', value: v };\n }\n var cs = getComputedStyle(at), rootCs = getComputedStyle(document.documentElement);\n var out = [];\n var ROOTISH = /^(:root|html|:host|body|\\*)(\\s*,\\s*(:root|html|:host|body|\\*))*$/;\n for (var name in decls) {\n var w = winning(name);\n var resolved = cs.getPropertyValue(name).trim() || rootCs.getPropertyValue(name).trim();\n var r = norm(resolved);\n var fn = r.type === 'string' && resolved ? channelFn(name, {}) : '';\n if (fn) {\n probe.style.color = '';\n probe.style.color = fn + '(' + resolved + ')';\n if (probe.style.color) r = { type: 'color', value: getComputedStyle(probe).color };\n }\n var scopes = [];\n for (var j = 0; j < decls[name].length && scopes.length < 6; j++) {\n var sel = decls[name][j].sel;\n if (!ROOTISH.test(sel.trim()) && scopes.indexOf(sel) < 0) scopes.push(sel.length > 120 ? sel.slice(0, 120) : sel);\n }\n out.push({ name: name, raw: w ? w.raw : decls[name][0].raw, applies: !!w, type: r.type, value: r.value, scopes: scopes });\n }\n probe.remove();\n return { properties: out, blocked: blocked };\n})`;\n\n/** The Storybook globals that switch a theme, a brand or a density, with their toolbar values and defaults. */\nexport const GLOBALS_SCRIPT = String.raw`(function () {\n var p = window.__STORYBOOK_PREVIEW__;\n if (!p) return null;\n var store = p.storyStoreValue || {};\n var ann = store.projectAnnotations || p.projectAnnotations || {};\n var types = ann.globalTypes || (store.globals && store.globals.globalTypes) || {};\n var current = (store.userGlobals && store.userGlobals.get && store.userGlobals.get()) || (store.globals && store.globals.get && store.globals.get()) || ann.initialGlobals || ann.globals || {};\n var out = [];\n for (var k in types) {\n var t = types[k] || {};\n var items = (t.toolbar && t.toolbar.items) || t.options || [];\n var values = [];\n for (var i = 0; i < items.length; i++) {\n var it = items[i];\n var v = typeof it === 'string' ? it : it && (it.value !== undefined ? it.value : it.title);\n if (typeof v === 'string' && v && values.indexOf(v) < 0) values.push(v);\n }\n if (values.length < 2 || values.length > 12) continue;\n var def = current[k] !== undefined ? String(current[k]) : (t.defaultValue !== undefined ? String(t.defaultValue) : values[0]);\n out.push({ global: k, values: values, default: def });\n }\n return out;\n})()`;\n","// Storybook measure: what a story really draws, read from the browser instead of guessed from the CSS source.\n//\n// The static generator (component-specs.ts) reads our TSX and CSS modules and predicts the layer tree; it only works on\n// libraries written the way ours is. A measure opens a story's iframe in a headless browser and records the rendered\n// tree: element boxes, auto layout (flex direction, gap, padding, alignment), paint, radii, borders, typography, text,\n// and which CSS custom properties (tokens) each value resolves through. Any React library with a Storybook can be\n// measured, whatever its styling (CSS modules, Sass, Tailwind, CSS-in-JS).\n//\n// The browser is injected (MeasurePage): core has no browser dependency. The CLI drives an installed Chrome through\n// playwright-core (bridge specs --measure). measuredToSpec turns a measure into the shape the Figma pull reads from\n// component-specs.json (parts + per-part field values with token paths), plus the raw values and token evidence a\n// spec does not carry.\n\nimport type { SpecField, SpecLayout, SpecValue } from '../component-spec';\nimport { parseBoxShadow, withSrgbColors } from '../css-color';\nimport { sharedTokenPrefix, tokenVariablePath, type MeasuredBox, type MeasuredMode, type MeasuredNode, type MeasuredPart, type MeasuredProps, type MeasuredSpec, type MeasuredState, type MeasuredToken, type MeasuredTokenProperty, type MeasuredTokens } from '../measured-spec';\nimport { storybookIframeUrl, type StorybookIframeOptions, type StorybookIndex } from '../storybook';\nimport { MEASURE_SCRIPT } from './measure-script';\nimport { GLOBALS_SCRIPT, TOKENS_SCRIPT } from './tokens-script';\n\nexport { MEASURE_SCRIPT, TOKENS_SCRIPT, GLOBALS_SCRIPT };\n// The measured shapes and the comparison are browser safe (the Figma plugin reads them): re-exported for Node callers.\nexport * from '../measured-spec';\n\n/** The script's answer for one page. */\nexport interface MeasureResult {\n root: MeasuredNode | null;\n /** Visible elements outside the story root (popups portaled to the body), up to 3. */\n portals: MeasuredNode[];\n /** Plain wrapper elements skipped above the root (decorators). */\n wrappers: number;\n nodes: number;\n /** Style rules read, and stylesheets that could not be read (cross-origin). */\n rules: number;\n sheets: { read: number; blocked: number };\n /** Custom properties in scope at the component (root and provider elements), the pool `matched` tokens come from. */\n rootVariables: number;\n /** Of those, the ones a provider element around the story defines, not the page root (Fluent's FluentProvider). */\n scopedVariables?: number | undefined;\n viewport: { width: number; height: number };\n /** The root is block-level and spans its container (or is width: 100%): it fills in Figma, it does not hug. */\n rootFill?: boolean | undefined;\n /** A filling root was laid out at this width (px) for the measure and its screenshot, not the canvas width. */\n fillWidth?: number | undefined;\n /** With `open`: how the popup came to show (`already`: the story renders it open), or `none`. */\n opened?: 'already' | 'click' | 'hover' | 'focus' | 'none' | undefined;\n error?: string | undefined;\n}\n\nexport interface MeasuredStory extends MeasureResult {\n /** With `shot`: the PNG written and the root's size in CSS pixels. */\n shot?: { file: string; width: number; height: number } | undefined;\n /** The props the story rendered with, read from Storybook's story context (args over component defaults). */\n props?: MeasuredProps | undefined;\n /** The pseudo state forced on the component, when asked and the browser could force it. */\n state?: MeasuredState | undefined;\n id: string;\n url: string;\n /** Milliseconds from navigation to measured. */\n ms: number;\n}\n\n/** The browser a measure runs in: a page that can open a URL and evaluate an expression (playwright's Page fits). */\nexport interface MeasurePage {\n goto(url: string, options?: { waitUntil?: 'load' | 'domcontentloaded' | 'networkidle'; timeout?: number }): Promise<unknown>;\n evaluate<T>(expression: string): Promise<T>;\n /**\n * Forces pseudo classes on every element matching `selector` (Chrome DevTools CSS.forcePseudoState), or clears\n * them with []. Optional: without it, `state` is not measured.\n */\n forcePseudo?(selector: string, states: string[]): Promise<boolean>;\n /** PNG of the first element matching `selector`, written to `file`; its size in CSS pixels. Optional (shots). */\n screenshot?(selector: string, file: string): Promise<{ width: number; height: number } | null>;\n}\n\n/**\n * Tags the element a measure with these options reads (`data-bridge-measure-root`): the component after wrappers, the\n * popup, or the `within` part. For a screenshot of exactly what was measured.\n */\nexport async function markMeasuredRoot(page: MeasurePage, o: Pick<MeasureOptions, 'root' | 'unwrap' | 'within' | 'target' | 'open'> = {}): Promise<boolean> {\n const arg = { root: o.root ?? '#storybook-root, #root', unwrap: o.unwrap, within: o.within, target: o.target ?? (o.open && !o.within ? 'portal' : undefined), mark: true };\n const r = await page.evaluate<{ marked?: boolean } | null>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`).catch(() => null);\n return !!r?.marked;\n}\n\nexport interface MeasureOptions {\n iframe?: StorybookIframeOptions | undefined;\n /** Root selector inside the iframe (`#storybook-root, #root`: Storybook 7+ then 6). */\n root?: string | undefined;\n maxNodes?: number | undefined;\n maxDepth?: number | undefined;\n /** Longest wait for the story to render, ms (default 15000). */\n timeout?: number | undefined;\n /**\n * Measure the open popup (a menu, a dialog, a select's list, a tooltip) instead of its trigger: when none shows yet,\n * the first closed trigger in the story is clicked, then hovered and focused, and the popup portaled to the body is\n * the measured root. Stories that render open (`defaultOpen` / `open` args) are measured as they are.\n */\n open?: boolean | undefined;\n /**\n * A part measured alone inside what rendered (the component, then its popups): `[role=menuitem]`, `[role=tab]`, a\n * class. For parts that only render inside a parent or a portal (a menu item, an accordion item, a toast).\n */\n within?: string | undefined;\n /** Story args to render with (`{ size: 'lg', disabled: true }`), passed in the iframe URL. */\n args?: Record<string, string | number | boolean> | undefined;\n /** A pseudo state forced on the component before it is measured (needs `MeasurePage.forcePseudo`). */\n state?: MeasuredState | undefined;\n /** Read the story's props from Storybook (default true in measureStory). */\n props?: boolean | undefined;\n /** Width a filling root is laid out at when it spans the canvas (default 400 px; 0 keeps the canvas width). */\n fillWidth?: number | undefined;\n /** Write a PNG of the measured root to this file (needs `MeasurePage.screenshot`), forced state included. */\n shot?: string | undefined;\n /** `portal`: the newest popup outside the story root is the component (set by `open`). */\n target?: 'root' | 'portal' | undefined;\n /**\n * Go down from the root through plain wrappers and viewport-size decorator canvases to the component (default true).\n * false: the root element is the component.\n */\n unwrap?: boolean | undefined;\n}\n\n/**\n * Waits until the story has rendered: Storybook's root has content (or its error screen shows), fonts are loaded and\n * the markup stops changing for a few frames. Resolves with `rendered`, `error` or `timeout`.\n */\nexport const WAIT_SCRIPT = (rootSel: string, timeout: number, self = false) => `(async () => {\n const t0 = performance.now();\n const frame = () => new Promise((r) => requestAnimationFrame(() => r(null)));\n const host = () => document.querySelector(${JSON.stringify(rootSel)});\n let state = 'timeout';\n while (performance.now() - t0 < ${timeout}) {\n if (document.body && document.body.classList.contains('sb-show-errordisplay')) { state = 'error'; break; }\n const h = host();\n if (h && (${self} || h.children.length || (h.textContent || '').trim())) { state = 'rendered'; break; }\n await new Promise((r) => setTimeout(r, 50));\n }\n try { await Promise.race([document.fonts.ready, new Promise((r) => setTimeout(r, 3000))]); } catch (e) {}\n // Settle briefly: the markup stops changing for a few frames, or 1.5 s passes (a spinner never stops).\n let last = '', same = 0;\n const settle0 = performance.now();\n while (state === 'rendered' && same < 3 && performance.now() - settle0 < 1500) {\n await frame();\n await new Promise((r) => setTimeout(r, 60));\n const s = document.body.innerHTML.length + ':' + document.querySelectorAll('*').length;\n same = s === last ? same + 1 : 0;\n last = s;\n }\n // Animations: finished ones jump to their end, endless ones (a loading spinner) are paused where they are.\n try { (document.getAnimations ? document.getAnimations() : []).forEach((a) => { try { a.finish(); } catch (e) { a.pause(); } }); } catch (e) {}\n return state;\n})()`;\n\n/**\n * Opens the story's popup when none shows: clicks the first closed trigger (pointer and mouse events in order), then\n * hovers and focuses it (tooltips), and waits for the portal to settle. Resolves with how it opened, or `none`.\n */\nexport const OPEN_SCRIPT = (rootSel: string) => `(async () => {\n const root = document.querySelector(${JSON.stringify(rootSel)});\n if (!root) return 'none';\n const shown = () => Array.prototype.filter.call(document.body.children, (b) => {\n if (b.contains(root) || /^(SCRIPT|STYLE|LINK|TEMPLATE)$/.test(b.tagName) || /sb-/.test(String(b.className || ''))) return false;\n const cs = getComputedStyle(b), r = b.getBoundingClientRect();\n if (cs.display === 'none' || cs.visibility === 'hidden') return false;\n return r.width > 0 && r.height > 0 || Array.prototype.some.call(b.querySelectorAll('*'), (c) => { const x = c.getBoundingClientRect(); return x.width > 0 && x.height > 0; });\n }).length;\n const settle = async () => {\n for (let i = 0; i < 20; i++) {\n await new Promise((r) => setTimeout(r, 50));\n const running = (document.getAnimations ? document.getAnimations() : []).filter((a) => a.playState === 'running');\n if (!running.length) break;\n await Promise.race([Promise.all(running.map((a) => a.finished.catch(() => null))), new Promise((r) => setTimeout(r, 1500))]);\n }\n };\n if (shown()) { await settle(); return 'already'; }\n const trigger = root.querySelector('[aria-haspopup]:not([aria-expanded=\"true\"]), [aria-expanded=\"false\"]') || root.querySelector('button, [role=\"button\"], [role=\"combobox\"], a[href], [tabindex=\"0\"]');\n if (!trigger) return 'none';\n const wait = async (ms) => { const t0 = performance.now(); while (performance.now() - t0 < ms) { if (shown()) { await settle(); return true; } await new Promise((r) => setTimeout(r, 50)); } return false; };\n const r = trigger.getBoundingClientRect();\n const at = { bubbles: true, cancelable: true, composed: true, clientX: r.left + r.width / 2, clientY: r.top + r.height / 2, button: 0, pointerId: 1, pointerType: 'mouse', isPrimary: true };\n const fire = (type, Ctor) => trigger.dispatchEvent(new Ctor(type, type === 'pointerdown' || type === 'mousedown' ? { ...at, buttons: 1 } : at));\n fire('pointerdown', PointerEvent); fire('mousedown', MouseEvent); fire('pointerup', PointerEvent); fire('mouseup', MouseEvent); fire('click', MouseEvent);\n if (await wait(800)) return 'click';\n fire('pointerover', PointerEvent); fire('pointerenter', PointerEvent); fire('mouseover', MouseEvent); fire('mouseenter', MouseEvent); fire('pointermove', PointerEvent); fire('mousemove', MouseEvent);\n if (await wait(1200)) return 'hover';\n try { trigger.focus(); } catch (e) {}\n if (await wait(800)) return 'focus';\n return 'none';\n})()`;\n\n/**\n * Reads the rendered story's props from Storybook's preview (7, 8, 9): its args (with URL overrides) over the component\n * defaults docgen found, and the argTypes (enum options, booleans, texts). Plain values only; null when the preview\n * exposes nothing.\n */\nexport const PROPS_SCRIPT = (id?: string) => `(async () => {\n const p = window.__STORYBOOK_PREVIEW__;\n if (!p) return null;\n const want = ${JSON.stringify(id ?? null)};\n let story = p.currentRender && p.currentRender.story;\n if (want && (!story || story.id !== want)) { try { story = await p.storyStoreValue.loadStory({ storyId: want }); } catch (e) { story = story || null; } }\n if (!story) return null;\n const plain = (v) => ['string', 'number', 'boolean'].includes(typeof v);\n const clean = (o) => { const out = {}; for (const k in o || {}) if (plain(o[k])) out[k] = o[k]; return out; };\n let live;\n try { live = p.storyStoreValue && p.storyStoreValue.args && p.storyStoreValue.args.get(story.id); } catch (e) {}\n const args = clean(live || story.initialArgs);\n const lit = (v) => {\n if (v === undefined || v === null) return undefined;\n if (typeof v !== 'string') return plain(v) ? v : undefined;\n const t = v.trim();\n if (t === 'true' || t === 'false') return t === 'true';\n if (/^-?\\\\d+(\\\\.\\\\d+)?$/.test(t)) return Number(t);\n const q = /^(['\"\\`])(.*)\\\\1$/.exec(t);\n return q ? q[2] : undefined;\n };\n const argTypes = {}, defaults = {};\n for (const name in story.argTypes || {}) {\n const a = story.argTypes[name] || {};\n if (a.table && a.table.disable) continue;\n const t = a.type || {};\n const tn = typeof t === 'string' ? t : t.name;\n let options = Array.isArray(a.options) ? a.options : tn === 'enum' && Array.isArray(t.value) ? t.value : undefined;\n if (!options && tn === 'union' && Array.isArray(t.value) && t.value.every((x) => x && x.name === 'literal')) options = t.value.map((x) => x.value);\n if (options) options = options.filter(plain).map((x) => String(x).replace(/^(['\"])(.*)\\\\1$/, '$2'));\n const control = a.control && typeof a.control === 'object' ? a.control.type : typeof a.control === 'string' ? a.control : undefined;\n const kind = options && options.length ? 'enum' : tn === 'boolean' || control === 'boolean' ? 'boolean' : tn === 'string' || control === 'text' ? 'text' : tn === 'number' || control === 'number' || control === 'range' ? 'number' : 'other';\n const d = lit(a.defaultValue !== undefined ? a.defaultValue : a.table && a.table.defaultValue && a.table.defaultValue.summary);\n argTypes[name] = { kind };\n if (options && options.length) argTypes[name].options = options;\n if (d !== undefined) { argTypes[name].default = d; defaults[name] = d; }\n if (control) argTypes[name].control = control;\n }\n const c = story.component;\n const component = c && (c.displayName || c.name) || undefined;\n return { props: Object.assign({}, defaults, args), args, argTypes, component };\n})()`;\n\n/**\n * Token values as the open story resolves them (on the component, so provider-scoped variables count): token path ->\n * computed value, colors as `rgb()` and lengths in px, for value-level comparison (compareSpecToMeasured's `resolve`).\n */\nexport async function resolveTokenValues(page: MeasurePage, vars: Record<string, string>): Promise<Record<string, string>> {\n const expr = `(() => {\n const vars = ${JSON.stringify(vars)};\n const el = document.querySelector('[data-bridge-measure-root]') || document.querySelector('#storybook-root > *, #root > *') || document.documentElement;\n const cs = getComputedStyle(el);\n const probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none';\n (el.parentElement || document.body).appendChild(probe);\n const out = {};\n for (const path in vars) {\n const raw = cs.getPropertyValue(vars[path]).trim();\n if (!raw) continue;\n probe.style.color = ''; probe.style.width = '';\n probe.style.color = raw;\n if (probe.style.color) { out[path] = getComputedStyle(probe).color; continue; }\n probe.style.width = raw;\n out[path] = probe.style.width ? getComputedStyle(probe).width : raw;\n }\n probe.remove();\n return out;\n })()`;\n return (await page.evaluate<Record<string, string>>(expr)) ?? {};\n}\n\n/**\n * Where a forced state goes: the component and every element in it, as Figma's state variant shows it (a group's\n * Hover shows each option's hover, a field's Hover its control's hover), not only the outer element.\n */\nconst STATE_TARGETS = '[data-bridge-measure-root], [data-bridge-measure-root] *';\n\n/** The pseudo classes a real interaction sets: a press is also a hover, focus-visible is also focus. */\nconst PSEUDO_CLASSES: Record<MeasuredState, string[]> = { hover: ['hover'], 'focus-visible': ['focus-visible', 'focus'], active: ['active', 'hover'] };\n\n// ---------------------------------------------------------------------------------------------\n// Token harvest\n\n/** Storybook globals that are modes in Figma: a theme or color scheme, a brand, a density. */\nconst MODE_GLOBAL = /theme|scheme|mode|brand|density|appearance/i;\nconst ALIAS = /^var\\(\\s*(--[\\w-]+)\\s*(?:,[^)]*)?\\)$/;\n\ninterface RawTokenProperty {\n name: string;\n raw: string;\n applies: boolean;\n type: MeasuredTokenProperty['type'];\n value: string | number;\n scopes: string[];\n}\n\nexport interface HarvestOptions {\n iframe?: StorybookIframeOptions | undefined;\n /** Read every mode the Storybook's globals expose (default true). */\n modes?: boolean | undefined;\n timeout?: number | undefined;\n}\n\n/**\n * Every CSS custom property a Storybook's stylesheets define, read in one story: its declared value where the story\n * sits (providers included), resolved there, in two tiers (a literal is a primitive, `var(--x)` is semantic), and again\n * under each theme, brand or density global the Storybook exposes (one Figma mode per value).\n */\nexport async function harvestTokens(page: MeasurePage, storybook: string, story: string, o: HarvestOptions = {}): Promise<MeasuredTokens> {\n const timeout = o.timeout ?? 15000;\n const read = async (globals: Record<string, string>) => {\n const iframe = { ...(o.iframe ?? {}), globals: { ...(o.iframe?.globals ?? {}), ...globals } };\n await page.goto(storybookIframeUrl(storybook, story, iframe), { waitUntil: 'domcontentloaded', timeout: timeout + 15000 });\n await page.evaluate<string>(WAIT_SCRIPT('#storybook-root, #root', timeout));\n const r = await page.evaluate<{ properties: RawTokenProperty[] } | null>(`(${TOKENS_SCRIPT})({})`);\n return withSrgbColors(r?.properties ?? []);\n };\n const base = await read({});\n // A theme on a page attribute: set it where it lives (the root when nowhere), let styles apply, read again.\n let moved = false;\n const readWithAttribute = async (attr: string, value: string) => {\n // Back to the default globals first if a global mode moved the page.\n if (moved) {\n await read({});\n moved = false;\n }\n await page.evaluate(`(async () => { const els = document.querySelectorAll('[${attr}]'); (els.length ? Array.from(els) : [document.documentElement]).forEach((e) => e.setAttribute('${attr}', ${JSON.stringify(value)})); await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r))); })()`);\n const r = await page.evaluate<{ properties: RawTokenProperty[] } | null>(`(${TOKENS_SCRIPT})({})`);\n return withSrgbColors(r?.properties ?? []);\n };\n const found = o.modes === false ? [] : ((await page.evaluate<MeasuredMode[] | null>(GLOBALS_SCRIPT).catch(() => null)) ?? []);\n // Views that are not a theme (Primer's \"all\" shows every scheme side by side).\n const modes: MeasuredMode[] = found\n .filter((m) => MODE_GLOBAL.test(m.global))\n .map((m) => ({ ...m, values: [m.default, ...m.values.filter((v) => v !== m.default)].filter((v) => !/^(all|side-?by-?side|stacked|both|none)$/i.test(v)) }))\n .filter((m) => m.values.length >= 2);\n // No theme global: a theme the stylesheets hang on a page attribute ([data-carbon-theme=\"g100\"]), read by setting it.\n if (o.modes !== false && !modes.some((m) => /theme|scheme|mode/i.test(m.global))) {\n const attrs = new Map<string, Map<string, number>>();\n for (const p of base)\n for (const sel of p.scopes)\n for (const part of sel.split(','))\n for (const m of part.trim().matchAll(/^(?::root|html|body)?\\[([\\w-]+)=[\"']?([\\w-]+)[\"']?\\]$/g)) {\n const vals = attrs.get(m[1]!) ?? new Map<string, number>();\n vals.set(m[2]!, (vals.get(m[2]!) ?? 0) + 1);\n attrs.set(m[1]!, vals);\n }\n for (const [attr, vals] of attrs) {\n const values = [...vals.entries()].filter(([, n]) => n >= 10).map(([v]) => v);\n if (values.length < 2 || values.length > 12 || !MODE_GLOBAL.test(attr)) continue;\n const current = await page.evaluate<string | null>(`(() => { const e = document.querySelector('[${attr}]'); return e && e.getAttribute('${attr}'); })()`).catch(() => null);\n // The value the page shows now is the default mode (Carbon's white lives in :root, not under its attribute).\n const def = current ?? values[0]!;\n modes.push({ global: attr, attribute: true, values: [def, ...values.filter((v) => v !== def)], default: def });\n }\n }\n const prefix = sharedTokenPrefix(base.map((p) => p.name));\n const props: MeasuredTokenProperty[] = base.map((p) => {\n const alias = ALIAS.exec(p.raw)?.[1];\n const kind: MeasuredTokenProperty['kind'] = alias ? 'alias' : /var\\(/.test(p.raw) ? 'expression' : 'literal';\n return {\n name: p.name,\n path: tokenVariablePath(p.name, prefix),\n tier: alias ? 'semantic' : 'primitive',\n kind,\n type: p.type,\n raw: p.raw,\n ...(alias ? { aliasOf: alias } : {}),\n value: p.value,\n ...(p.scopes.length ? { scopes: p.scopes } : {}),\n };\n });\n const byName = new Map(props.map((p) => [p.name, p]));\n for (const m of modes) {\n for (const value of m.values) {\n const key = `${m.global}:${value}`;\n const rows = value === m.default ? base : m.attribute ? await readWithAttribute(m.global, value) : ((moved = true), await read({ [m.global]: value }));\n for (const r of rows) {\n const p = byName.get(r.name);\n if (!p) continue;\n (p.values ??= {})[key] = r.value;\n const alias = ALIAS.exec(r.raw)?.[1];\n if (p.tier === 'semantic' && alias && alias !== p.aliasOf) (p.aliasOfByMode ??= {})[key] = alias;\n }\n }\n }\n // Per property, keep a mode's values only where they change it (`value` holds for the others): Primer has thousands.\n for (const p of props) {\n for (const m of modes) {\n const keys = m.values.map((v) => `${m.global}:${v}`);\n if (new Set(keys.map((k) => JSON.stringify(p.values?.[k]))).size <= 1) for (const k of keys) delete p.values?.[k];\n }\n if (p.values && !Object.keys(p.values).length) delete p.values;\n }\n // A mode that changes nothing is not a mode of these variables.\n const live = modes.filter((m) => props.some((p) => p.values && `${m.global}:${m.default}` in p.values));\n if (live.length !== modes.length) {\n const dead = new Set(modes.filter((m) => !live.includes(m)).map((m) => m.global));\n for (const p of props) {\n for (const k of Object.keys(p.values ?? {})) if (dead.has(k.split(':')[0]!)) delete p.values![k];\n for (const k of Object.keys(p.aliasOfByMode ?? {})) if (dead.has(k.split(':')[0]!)) delete p.aliasOfByMode![k];\n if (p.values && !Object.keys(p.values).length) delete p.values;\n if (p.aliasOfByMode && !Object.keys(p.aliasOfByMode).length) delete p.aliasOfByMode;\n }\n }\n // Compiled themes write each semantic token as a literal per theme. When a primitive (the same in every mode) holds\n // the value in every mode, the property is a semantic alias of it: Primitives + Semantic, as Figma needs.\n const keyOf = (p: MeasuredTokenProperty, v: string | number) => `${p.type}:${v}`;\n const primitiveFor = new Map<string, string>();\n for (const p of [...props].sort((a, b) => a.name.length - b.name.length || a.name.localeCompare(b.name)))\n if (p.kind === 'literal' && !p.values && (p.type === 'color' || p.type === 'length') && !primitiveFor.has(keyOf(p, p.value))) primitiveFor.set(keyOf(p, p.value), p.name);\n let inferred = 0;\n for (const p of props) {\n if (p.kind !== 'literal' || !p.values) continue;\n const def = primitiveFor.get(keyOf(p, p.value));\n const byMode = Object.entries(p.values).map(([k, v]) => [k, primitiveFor.get(keyOf(p, v))] as const);\n if (!def || def === p.name || byMode.some(([, n]) => !n)) continue;\n p.tier = 'semantic';\n p.kind = 'alias';\n p.aliasOf = def;\n p.inferred = true;\n const changes = byMode.filter(([, n]) => n !== def);\n if (changes.length) p.aliasOfByMode = Object.fromEntries(byMode) as Record<string, string>;\n inferred++;\n }\n return {\n story,\n ...(prefix ? { prefix } : {}),\n modes: live,\n properties: props,\n counts: {\n properties: props.length,\n primitives: props.filter((p) => p.tier === 'primitive').length,\n semantic: props.filter((p) => p.tier === 'semantic').length,\n used: 0,\n scoped: props.filter((p) => p.scopes?.length).length,\n inferred,\n },\n };\n}\n\n/**\n * Makes sure the story renders with these args. Storybook drops URL args it cannot validate against a story's initial\n * args (Carbon's Button story declares none), so when the store does not hold them after the first render they are\n * sent the way the Controls panel sends them (`updateStoryArgs`), and the re-render is awaited. Resolves `url` (the URL\n * args held), `channel`, or `failed`.\n */\nexport const APPLY_ARGS_SCRIPT = (id: string, args: Record<string, string | number | boolean>, timeout: number) => `(async () => {\n const want = ${JSON.stringify(args)};\n const t0 = performance.now();\n let p = window.__STORYBOOK_PREVIEW__;\n while ((!p || !p.currentRender || !p.storyStoreValue) && performance.now() - t0 < ${timeout}) { await new Promise((r) => setTimeout(r, 50)); p = window.__STORYBOOK_PREVIEW__; }\n if (!p || !p.storyStoreValue) return 'failed';\n const id = ${JSON.stringify(id)};\n const held = () => { let a = {}; try { a = p.storyStoreValue.args.get(id) || {}; } catch (e) {} return Object.keys(want).every((k) => a[k] === want[k]); };\n // Let the first render finish (an update sent during it is lost), then check again.\n const root = () => document.querySelector('#storybook-root, #root');\n while (performance.now() - t0 < ${timeout} && !(root() && (root().children.length || (root().textContent || '').trim()))) await new Promise((r) => setTimeout(r, 50));\n await new Promise((r) => setTimeout(r, 100));\n if (held()) return 'url';\n const ch = window.__STORYBOOK_ADDONS_CHANNEL__;\n if (!ch) return 'failed';\n const done = await new Promise((resolve) => {\n const t = setTimeout(() => finish(false), 5000);\n const ok = () => finish(true);\n const bad = () => finish(false);\n function finish(v) { clearTimeout(t); ch.off('storyRendered', ok); ch.off('storyErrored', bad); ch.off('storyThrewException', bad); resolve(v); }\n ch.on('storyRendered', ok); ch.on('storyErrored', bad); ch.on('storyThrewException', bad);\n ch.emit('updateStoryArgs', { storyId: id, updatedArgs: want });\n });\n return done && held() ? 'channel' : 'failed';\n})()`;\n\n/** Opens one story in its iframe and measures what it rendered. */\nexport async function measureStory(page: MeasurePage, storybook: string, id: string, o: MeasureOptions = {}): Promise<MeasuredStory> {\n const iframe = { ...(o.iframe ?? {}) };\n if (o.args && Object.keys(o.args).length) iframe.args = { ...(iframe.args ?? {}), ...Object.fromEntries(Object.entries(o.args).map(([k, v]) => [k, typeof v === 'boolean' ? `!${v}` : String(v)])) };\n const url = storybookIframeUrl(storybook, id, iframe);\n const t0 = Date.now();\n // DOM ready, then the story's own wait (rendered, fonts, a short settle): an animated story never reaches network idle.\n await page.goto(url, { waitUntil: 'domcontentloaded', timeout: (o.timeout ?? 15000) + 15000 });\n if (o.args && Object.keys(o.args).length) await page.evaluate<string>(APPLY_ARGS_SCRIPT(id, o.args, o.timeout ?? 15000)).catch(() => 'failed');\n const m = await measureRendered(page, o);\n let props: MeasuredProps | null = null;\n if (o.props !== false && m.root) props = await page.evaluate<MeasuredProps | null>(PROPS_SCRIPT(id)).catch(() => null);\n return { id, url, ...m, ...(props && typeof props === 'object' ? { props } : {}), ms: Date.now() - t0 };\n}\n\n/** Measures what the page shows now (a story already open, or re-rendered with new args): waits for it, then reads it. */\nexport async function measureRendered(page: MeasurePage, o: MeasureOptions = {}): Promise<MeasureResult & { ms: number; state?: MeasuredState | undefined; shot?: { file: string; width: number; height: number } | undefined }> {\n const t0 = Date.now();\n const root = o.root ?? '#storybook-root, #root';\n const timeout = o.timeout ?? 15000;\n const rendered = await page.evaluate<string>(WAIT_SCRIPT(root, timeout, o.unwrap === false));\n let opened: MeasureResult['opened'];\n if (o.open && rendered === 'rendered') opened = await page.evaluate<NonNullable<MeasureResult['opened']>>(OPEN_SCRIPT(root));\n const target = o.target ?? (o.open && !o.within ? 'portal' : undefined);\n const arg = { root, maxNodes: o.maxNodes, maxDepth: o.maxDepth, unwrap: o.unwrap, target, within: o.within };\n let state: MeasuredState | undefined;\n if (o.state && page.forcePseudo && rendered === 'rendered') {\n // Tag the component element, then force the state on it the way DevTools does (no pointer, no layout shift).\n const marked = await page.evaluate<{ marked?: boolean }>(`(${MEASURE_SCRIPT})(${JSON.stringify({ ...arg, mark: true })})`);\n if (marked?.marked && (await page.forcePseudo(STATE_TARGETS, PSEUDO_CLASSES[o.state]).catch(() => false))) {\n state = o.state;\n await page.evaluate('new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(() => setTimeout(r, 120))))');\n }\n }\n const r = await page.evaluate<MeasureResult | { error: string }>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`);\n let base: MeasureResult = 'root' in r ? r : { root: null, portals: [], wrappers: 0, nodes: 0, rules: 0, sheets: { read: 0, blocked: 0 }, rootVariables: 0, viewport: { width: 0, height: 0 }, error: r.error };\n // A root that fills its container spans the whole canvas in a story: lay it out at a component's width instead, so\n // the measured width, the plan and the screenshot agree (a text field at 400 px, not 1,116).\n const fillWidth = o.fillWidth ?? 400;\n if (fillWidth && base.root && base.rootFill && base.root.box.width > fillWidth + 1 && (state || (await markMeasuredRoot(page, { ...o, root })))) {\n await page.evaluate(`(async () => { const e = document.querySelector('[data-bridge-measure-root]'); if (e) { e.style.width = '${fillWidth}px'; e.style.maxWidth = 'none'; e.style.minWidth = '0'; } await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r))); })()`);\n const again = await page.evaluate<MeasureResult | { error: string }>(`(${MEASURE_SCRIPT})(${JSON.stringify(arg)})`);\n if ('root' in again && again.root) base = { ...again, rootFill: true, fillWidth };\n }\n if (opened) base.opened = opened;\n if (opened === 'none' && !base.root) base.error = 'the popup did not open: no trigger in the story opened it';\n if (rendered === 'timeout' && !base.error && !base.root) base.error = `the story did not render within ${timeout} ms`;\n if (rendered === 'error' && !base.error) base.error = 'the story threw';\n let shot: { file: string; width: number; height: number } | undefined;\n if (o.shot && page.screenshot && base.root) {\n // The element the measure read, in the state it was read in (the forced state is still on).\n if (state || (await markMeasuredRoot(page, { ...o, root }))) {\n const size = await page.screenshot('[data-bridge-measure-root]', o.shot).catch(() => null);\n if (size) shot = { file: o.shot, ...size };\n }\n }\n if (state) await page.forcePseudo?.(STATE_TARGETS, []).catch(() => false);\n // Colors as sRGB: a page keeps oklch(), lab() and color() in computed values; Figma and the token files read rgb().\n return { ...withSrgbColors(base), ...(state ? { state } : {}), ...(shot ? { shot } : {}), ms: Date.now() - t0 };\n}\n\nexport interface StoryPick {\n id: string;\n title: string;\n name: string;\n}\n\nexport interface PickStoriesOptions {\n /** Components by name or title, case-insensitive (\"Button\", \"Forms/Input\"). */\n only?: string[] | undefined;\n /** Exact story ids; replaces `only` and `perComponent`. */\n ids?: string[] | undefined;\n /** Stories per component, in index order (default 3). */\n perComponent?: number | undefined;\n}\n\n/** The stories a measure opens: given ids, else the first stories of each (selected) component. */\nexport function pickStoriesToMeasure(index: StorybookIndex, o: PickStoriesOptions = {}): StoryPick[] {\n if (o.ids?.length) {\n const byId = new Map(index.entries.map((e) => [e.id, e]));\n return o.ids.map((id) => {\n const e = byId.get(id);\n return { id, title: e?.title ?? '', name: e?.name ?? id };\n });\n }\n const want = (o.only ?? []).map((x) => x.trim().toLowerCase()).filter(Boolean);\n const per = o.perComponent ?? 3;\n return index.components\n .filter((c) => c.stories.length && (!want.length || want.includes(c.name.toLowerCase()) || want.includes(c.title.toLowerCase())))\n .flatMap((c) => c.stories.slice(0, per).map((e) => ({ id: e.id, title: c.title, name: e.name })));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Stories that show many instances at once (\"Sizes\", \"Variants\", a gallery of tags)\n\nconst SEMANTIC_CONTAINER = /^(fieldset|ul|ol|nav|form|menu|dl|select|header|footer|button|a|label|input|textarea)$/;\n\n/**\n * A frame that only lays children out: no paint, border, shadow, radius, role or semantic tag (a Stack, a flex row, a\n * story's layout table).\n */\nfunction plainLayout(n: MeasuredNode, anyRole = false): boolean {\n if (n.kind !== 'frame' || n.input || n.media || (!anyRole && (n.role || SEMANTIC_CONTAINER.test(n.tag)))) return false;\n const st = n.style;\n const painted = !transparent(st['background-color']) || (st['background-image'] && st['background-image'] !== 'none') || (st['box-shadow'] && st['box-shadow'] !== 'none');\n const bordered = (['top', 'right', 'bottom', 'left'] as const).some((x) => st[`border-${x}-style`] !== 'none' && (px(st[`border-${x}-width`]) ?? 0) > 0);\n return !painted && !bordered && !((px(st['border-top-left-radius']) ?? 0) > 0);\n}\n\n/** Two nodes are instances of one component: same tag and role, and a class in common (or both unclassed). */\nfunction sameComponent(a: MeasuredNode, b: MeasuredNode): boolean {\n if (a.tag !== b.tag || a.kind !== b.kind || a.role !== b.role) return false;\n const ca = new Set((a.classes ?? []).map(localClassName));\n const cb = (b.classes ?? []).map(localClassName);\n if (!ca.size && !cb.length) return true;\n return cb.some((c) => ca.has(c));\n}\n\n/** Re-bases a subtree's boxes on its own top-left corner. */\nfunction rebase(n: MeasuredNode, dx = n.box.x, dy = n.box.y): MeasuredNode {\n return { ...n, box: { ...n.box, x: Math.round((n.box.x - dx) * 100) / 100, y: Math.round((n.box.y - dy) * 100) / 100 }, children: n.children.map((c) => rebase(c, dx, dy)) };\n}\n\n/**\n * The instances of a story that renders a component several times (a \"Sizes\" story, a row of tags, a matrix table of\n * colors by sizes): under layout-only frames, captions aside, the components found, when most are the same component.\n * Returns [] for a story that renders one component: a radio group's radios are its own parts (the group has a role,\n * so it is the component, not a layout).\n */\nexport function splitInstances(root: MeasuredNode | null): MeasuredNode[] {\n if (!root || !plainLayout(root)) return [];\n const found: MeasuredNode[] = [];\n const collect = (n: MeasuredNode, depth: number) => {\n for (const c of n.children) {\n // Captions (\"sm\", \"Solid\") beside the instances; a sentence is content (an empty state's description), not a caption.\n if (c.kind === 'text' && (c.text ?? '').length <= 24) continue;\n if (c.kind === 'text') {\n found.push(c);\n continue;\n }\n // Inside the story, a group that draws nothing (a tag group with role=\"group\") is still just layout.\n if (plainLayout(c, true) && depth < 8 && c.children.length) collect(c, depth + 1);\n else if (!plainLayout(c, true)) found.push(c);\n }\n };\n collect(root, 0);\n if (found.length < 2) return [];\n let best: MeasuredNode[] = [];\n for (const k of found) {\n if (best.includes(k)) continue;\n const run = found.filter((c) => sameComponent(k, c));\n if (run.length > best.length) best = run;\n }\n // Most of what the story shows must be the same component (a strict majority): two buttons in an empty state are its actions.\n if (best.length < 2 || best.length * 2 <= found.length) return [];\n return best.map((n) => ({ ...rebase(n), at: { x: n.box.x - root.box.x, y: n.box.y - root.box.y } }));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Measure -> spec shape\n\nexport interface MeasuredToSpecOptions {\n /** CSS custom property -> token path. Default: the name without `--`, dashes as dots (`--space-2` -> `space.2`); private names (`--_bg`) are not tokens. */\n tokenOf?: ((cssVar: string) => string | undefined) | undefined;\n}\n\n/**\n * CSS module local name from a built class: Vite (`_label_aukrr_131`, `_label_1x2y3`), webpack and Next\n * (`Button_label__a1b2c`, `Button-module__label__a1b2c`), a prefixed scheme (`prc-Button-Label-pTQ3x`). Other classes come\n * back as they are.\n */\nexport function localClassName(cls: string): string {\n // A BEM element (`cds--toggle__switch`, `block_element`) is a class, not a hash: a hash has a digit or a capital.\n const hashed = (h: string | undefined) => !!h && /[0-9A-Z]/.test(h);\n const m =\n /^_([A-Za-z][\\w-]*?)_[A-Za-z0-9]{5,8}_\\d+$/.exec(cls) ??\n [/^[A-Za-z][\\w-]*?(?:-module)?_{1,2}([A-Za-z][\\w-]*?)__([\\w-]{5,8})$/.exec(cls)].find((x) => x && hashed(x[2])) ??\n /^(?:[a-z]+-)?[A-Z][A-Za-z0-9]*-([A-Za-z]\\w*)-[A-Za-z0-9_]{5}$/.exec(cls) ??\n [/^_?([A-Za-z][\\w-]*?)_([A-Za-z0-9-]{5,8})$/.exec(cls)].find((x) => x && hashed(x[2]));\n return m ? m[1]! : cls;\n}\n\n/** Tailwind-style utility keywords that are a class on their own (`flex`, `relative`, `truncate`). */\nconst UTILITY_KEYWORDS = new Set(\n 'flex inline-flex grid inline-grid block inline-block inline hidden contents table relative absolute fixed sticky static truncate uppercase lowercase capitalize normal-case italic not-italic underline overline line-through no-underline grow shrink border rounded shadow outline ring transition transform visible invisible collapse isolate container antialiased subpixel-antialiased group peer sr-only not-sr-only resize filter blur'.split(' '),\n);\n/** Utility shapes: a property prefix and a value (`px-4`, `text-sm`, `rounded-lg`, `gap-x-1`, `w-full`). */\nconst UTILITY_SHAPE =\n /^(?:p|px|py|pt|pr|pb|pl|ps|pe|m|mx|my|mt|mr|mb|ml|ms|me|w|h|min-w|min-h|max-w|max-h|size|gap|gap-x|gap-y|space-x|space-y|text|bg|from|via|to|border|border-[trblxyse]|rounded|rounded-[trblse]{1,2}|font|leading|tracking|z|top|right|bottom|left|start|end|inset|inset-x|inset-y|opacity|shadow|ring|ring-offset|outline|outline-offset|items|justify|justify-items|justify-self|content|self|place-items|place-content|place-self|flex|basis|grow|shrink|order|col|col-span|col-start|col-end|row|row-span|row-start|row-end|grid-cols|grid-rows|grid-flow|auto-cols|auto-rows|overflow|overflow-x|overflow-y|cursor|select|pointer-events|transition|duration|ease|delay|animate|scale|scale-x|scale-y|rotate|translate-x|translate-y|skew-x|skew-y|origin|fill|stroke|object|aspect|line-clamp|whitespace|break|decoration|underline-offset|list|align|appearance|backdrop|brightness|contrast|drop-shadow|grayscale|invert|saturate|sepia|hue-rotate|tabular|caret|accent|scroll|snap|touch|will-change|columns|divide|divide-x|divide-y|indent|box|float|clear|mix-blend|bg-blend)-[\\w.-]+$/;\n\n/**\n * A class that says how an element looks, not what it is: a utility (`flex`, `px-4`, `hover:bg-blue`, `w-[12px]`,\n * `-mt-1`) or a class a CSS-in-JS library generated from the styles (`css-1g7m1fs`, `sc-bdVaJa`). It changes with the\n * look from one variant to the next, so it never names or pairs a part: tag and position do. A BEM or semantic\n * class (`cds--btn__label`, `chakra-alert__title`, a CSS module's `label`) still does.\n */\nexport function isUtilityClass(cls: string): boolean {\n if (/[:[\\]/!]/.test(cls) || /^-[a-z]/.test(cls) || /\\.\\d/.test(cls)) return true;\n if (/^css-[a-z0-9]{5,8}$/.test(cls) || (/^(?:emotion|sc|jsx|svelte|astro)-[A-Za-z0-9_-]{4,}$/.test(cls) && /\\d|[A-Z]/.test(cls))) return true;\n return UTILITY_KEYWORDS.has(cls) || UTILITY_SHAPE.test(cls);\n}\n\nconst defaultTokenOf = (v: string) => (/^--_/.test(v) ? undefined : v.replace(/^--/, '').split('-').filter(Boolean).join('.'));\nconst px = (v: string | undefined): number | undefined => {\n if (!v) return undefined;\n const m = /^(-?[\\d.]+)px$/.exec(v.trim());\n return m ? Math.round(Number(m[1]) * 100) / 100 : undefined;\n};\nconst transparent = (v: string | undefined) => !v || v === 'transparent' || /^rgba\\([^)]*,\\s*0\\)$/.test(v);\n\n/** Auto layout of a measured element, as the pull reads it. */\n/** How in-flow children are laid out by their boxes: each below the previous, all on one row, or neither. */\nfunction arrangement(children: MeasuredBox[]): 'stacked' | 'row' | undefined {\n const kids = children.filter((c) => c.width > 0 || c.height > 0);\n if (kids.length < 2) return undefined;\n const stacked = kids.every((c, i) => i === 0 || c.y >= kids[i - 1]!.y + kids[i - 1]!.height - 1);\n const row = kids.every((c, i) => i === 0 || c.x >= kids[i - 1]!.x + kids[i - 1]!.width - 1);\n return stacked && !row ? 'stacked' : row && !stacked ? 'row' : undefined;\n}\n\n/** align-items as the counter axis alignment. */\nfunction alignOf(style: Record<string, string>): SpecLayout['counter'] {\n const a = style['align-items'] ?? 'normal';\n return /center/.test(a) ? 'CENTER' : /end/.test(a) ? 'MAX' : /^(flex-)?start|baseline/.test(a) ? 'MIN' : 'STRETCH';\n}\n\nexport function measuredLayout(style: Record<string, string>, children: MeasuredBox[] = []): SpecLayout | undefined {\n const d = style.display ?? '';\n const arranged = arrangement(children);\n // An inline element holding blocks (a <label> around a text and a switch) lays them out by their boxes.\n if (!/flex|grid|block|inline-block|list-item/.test(d)) return arranged ? { direction: arranged === 'stacked' ? 'VERTICAL' : 'HORIZONTAL', primary: 'MIN', counter: 'MIN' } : undefined;\n const flex = /flex/.test(d);\n const grid = /grid/.test(d);\n const dir = style['flex-direction'] ?? 'row';\n let direction: SpecLayout['direction'] = flex && dir.startsWith('row') ? 'HORIZONTAL' : 'VERTICAL';\n if (grid) {\n // A grid has no direction: its flow, its tracks, else where its children sit.\n const tracks = (v: string | undefined) => (v && v !== 'none' ? v.trim().split(/\\s+(?![^(]*\\))/).length : 0);\n const cols = tracks(style['grid-template-columns']);\n const rows = tracks(style['grid-template-rows']);\n const sideBySide = children.length >= 2 && children.every((c) => Math.abs(c.y + c.height / 2 - (children[0]!.y + children[0]!.height / 2)) <= Math.max(2, children[0]!.height / 2)) && new Set(children.map((c) => Math.round(c.x))).size === children.length;\n direction = /column/.test(style['grid-auto-flow'] ?? '') || (cols >= 2 && rows <= 1) || (cols < 2 && rows < 2 && sideBySide) ? 'HORIZONTAL' : 'VERTICAL';\n if (cols >= 2 && rows >= 2) direction = sideBySide ? 'HORIZONTAL' : 'VERTICAL';\n // Tracks across and down, filled row by row (a radio group of radio and label columns): a row that wraps at its width.\n if (cols >= 2 && rows >= 2 && !sideBySide && !/column/.test(style['grid-auto-flow'] ?? '')) return { direction: 'HORIZONTAL', primary: 'MIN', counter: alignOf(style), wrap: true };\n }\n const j = style['justify-content'] ?? 'normal';\n const primary: SpecLayout['primary'] = !flex && !grid ? 'MIN' : /space-between/.test(j) ? 'SPACE_BETWEEN' : /center/.test(j) ? 'CENTER' : /end|right/.test(j) ? 'MAX' : 'MIN';\n const counter = alignOf(style);\n // The boxes are the referee: a row that wrapped into a column at its width, or blocks that sit side by side.\n // (A wrapping row stays a row: Figma wraps it the same way at the same width.)\n if (arranged === 'stacked' && direction === 'HORIZONTAL' && !(flex && style['flex-wrap'] === 'wrap')) direction = 'VERTICAL';\n else if (arranged === 'row' && direction === 'VERTICAL' && !flex) direction = 'HORIZONTAL';\n const out: SpecLayout = { direction, primary, counter };\n if (flex && /reverse/.test(dir)) out.reverse = true;\n if (flex && direction === 'HORIZONTAL' && style['flex-wrap'] === 'wrap') out.wrap = true;\n return out;\n}\n\nconst FIELD_MAP: [SpecField, string][] = [\n ['fill', 'background-color'],\n ['cornerRadius', 'border-top-left-radius'],\n ['paddingTop', 'padding-top'],\n ['paddingRight', 'padding-right'],\n ['paddingBottom', 'padding-bottom'],\n ['paddingLeft', 'padding-left'],\n ['minWidth', 'min-width'],\n ['minHeight', 'min-height'],\n ['opacity', 'opacity'],\n];\nconst TEXT_MAP: [SpecField, string][] = [\n ['textFill', 'color'],\n ['fontFamily', 'font-family'],\n ['fontSize', 'font-size'],\n ['fontWeight', 'font-weight'],\n ['lineHeight', 'line-height'],\n ['letterSpacing', 'letter-spacing'],\n];\n\n/**\n * Turns a measured story into the spec shape: one part per drawn element (wrappers that draw nothing are kept as\n * frames, text runs become text parts), values bound to the declared token when there is one.\n */\nexport function measuredToSpec(m: Pick<MeasuredStory, 'id' | 'root'> & { rootFill?: boolean | undefined }, o: MeasuredToSpecOptions = {}): MeasuredSpec {\n const tokenOf = o.tokenOf ?? defaultTokenOf;\n const out: MeasuredSpec = { story: m.id, parts: [], values: {}, raw: {}, tokens: {}, boxes: {}, coverage: { fields: 0, declared: 0, matched: 0, literal: 0 } };\n if (!m.root) return out;\n const used = new Set<string>();\n const idFor = (n: MeasuredNode, isRoot: boolean, inherited?: string) => {\n // The root's id is reserved: a nested element with a .root class (a radio's dot, a card's inner root) gets root-2,\n // never a second \"root\" that would make the part tree loop.\n if (isRoot) {\n used.add('root');\n return 'root';\n }\n const cls = (n.classes ?? []).map(localClassName).find((c) => /^[A-Za-z]/.test(c) && c.length < 40 && !isUtilityClass(c));\n // Without a class that names it: its tag, numbered in order (the same structure gives the same ids in every variant).\n let base = cls ?? (n.pseudo ? `${inherited ?? 'root'}-${n.pseudo}` : n.kind === 'text' ? (inherited ? `${inherited}-text` : 'text') : n.kind === 'icon' ? 'icon' : n.tag);\n base = base.replace(/[^A-Za-z0-9-]+/g, '-').toLowerCase() || 'part';\n let id = base;\n for (let i = 2; used.has(id); i++) id = `${base}-${i}`;\n used.add(id);\n return id;\n };\n const visit = (n: MeasuredNode, parent: string | undefined, parentStyle: Record<string, string> | undefined, parentBox?: MeasuredBox): string => {\n const id = idFor(n, !parent, parent);\n const style = n.kind === 'text' && n.tag === '#text' ? (parentStyle ?? {}) : n.style;\n const tokens = n.kind === 'text' && n.tag === '#text' ? {} : n.tokens;\n const part: MeasuredPart = { id, name: id === 'root' ? 'Root' : id.replace(/-/g, ' ').replace(/^./, (c) => c.toUpperCase()), kind: n.kind };\n if (parent) part.parent = parent;\n const named = (n.classes ?? []).map(localClassName).filter((c) => !isUtilityClass(c));\n if (named.length) part.source = named.join(' ');\n if (n.kind === 'frame') {\n const l = measuredLayout(n.style, n.children.filter((c) => c.style.position !== 'absolute' && c.style.position !== 'fixed').map((c) => c.box));\n if (l) part.layout = l;\n if (/^(hidden|clip)/.test(n.style.overflow ?? '')) part.clip = true;\n if ((n.style.position === 'absolute' || n.style.position === 'fixed') && parent) {\n // Out of the auto layout: inset 0 covers the parent, else pinned at its offset from the parent's corner (px).\n const zero = (v: string | undefined) => v !== undefined && /^0(px)?$/.test(v.trim());\n if (['top', 'right', 'bottom', 'left'].every((k) => zero(n.style[k]))) part.cover = true;\n else {\n const pb = parentBox ?? { x: 0, y: 0 };\n part.pin = { top: Math.round((n.box.y - pb.y) * 100) / 100, left: Math.round((n.box.x - pb.x) * 100) / 100 };\n }\n }\n if (Number(n.style['flex-grow']) > 0) part.grow = true;\n }\n if (n.kind === 'text') part.characters = n.text ?? '';\n if (!parent && m.rootFill) part.fill = true;\n const margins = Object.fromEntries((['top', 'right', 'bottom', 'left'] as const).map((k) => [k, px(n.style[`margin-${k}`]) ?? 0]).filter(([, v]) => Math.abs(v as number) > 0.5));\n if (Object.keys(margins).length) part.margins = margins;\n out.parts.push(part);\n partById.set(id, part);\n out.boxes[id] = n.box;\n const values: Partial<Record<SpecField, SpecValue>> = {};\n const raw: Partial<Record<SpecField, string | number>> = {};\n const ev: Partial<Record<SpecField, MeasuredToken>> = {};\n const put = (field: SpecField, prop: string, literal: string | number | null | undefined) => {\n if (literal === undefined) return;\n out.coverage.fields++;\n if (literal !== null) raw[field] = literal;\n const t = tokens[prop];\n if (t) ev[field] = t;\n // Bound only when the declaration is the variable itself; a calc() or a shorthand mixing it keeps the number.\n if (t?.via === 'declared' && t.exact) {\n out.coverage.declared++;\n // The first link that is a token: private variables (`--_bg`) hand over to what they alias.\n const path = t.chain.map(tokenOf).find((x): x is string => !!x);\n if (path) return void (values[field] = path);\n } else if (t?.via === 'declared') out.coverage.declared++;\n else if (t?.via === 'matched') out.coverage.matched++;\n else out.coverage.literal++;\n if (literal === null) values[field] = null;\n else if (typeof literal === 'number') values[field] = literal;\n };\n if (n.kind === 'frame') {\n for (const [field, prop] of FIELD_MAP) {\n const v = n.style[prop];\n if (field === 'fill') put(field, prop, transparent(v) ? (n.style['background-image'] && n.style['background-image'] !== 'none' ? n.style['background-image'] : undefined) : v);\n else if (field === 'opacity') put(field, prop, v && Number(v) < 1 ? Number(v) : undefined);\n else if (field === 'minWidth' || field === 'minHeight') {\n // Figma minimums include padding and border; CSS ones do only under border-box.\n const sides = field === 'minWidth' ? (['left', 'right'] as const) : (['top', 'bottom'] as const);\n const extra = n.style['box-sizing'] === 'content-box' ? sides.reduce((a, x) => a + (px(n.style[`padding-${x}`]) ?? 0) + (n.style[`border-${x}-style`] === 'none' ? 0 : (px(n.style[`border-${x}-width`]) ?? 0)), 0) : 0;\n const min = px(v);\n if (!min) continue;\n if (extra) {\n out.coverage.fields++;\n out.coverage.literal++;\n raw[field] = min + extra;\n values[field] = min + extra;\n } else put(field, prop, min);\n }\n else if (field === 'cornerRadius' && v && /%$/.test(v.trim())) {\n // 50% is half the smaller side (a round knob or dot): px from the box.\n const half = Math.min(n.box.width, n.box.height) / 2;\n const r = Math.min(half, Math.round((Math.min(n.box.width, n.box.height) * Number.parseFloat(v)) / 100 * 100) / 100);\n if (r >= half - 0.5) part.fullRadius = true;\n if (r > 0) {\n out.coverage.fields++;\n out.coverage.literal++;\n raw[field] = r;\n values[field] = part.fullRadius ? 999 : r;\n }\n } else {\n // A radius of half the shorter side or more (9999px pills) is a full radius: half the side in Figma.\n const half = Math.min(n.box.width, n.box.height) / 2;\n if (field === 'cornerRadius' && (px(v) ?? 0) >= half - 0.5 && half > 0) part.fullRadius = true;\n put(field, prop, px(v) || undefined); // zero paddings and radii are Figma's default: not a field\n // A pill is 999 px in Figma, unless the radius is bound to a token.\n if (part.fullRadius && field === 'cornerRadius' && typeof values.cornerRadius === 'number') values.cornerRadius = 999;\n }\n }\n const widths = (['top', 'right', 'bottom', 'left'] as const).map((s) => (n.style[`border-${s}-style`] === 'none' ? 0 : (px(n.style[`border-${s}-width`]) ?? 0)));\n if (widths.some((w) => w > 0)) {\n const side = widths.findIndex((w) => w > 0);\n const s = (['top', 'right', 'bottom', 'left'] as const)[side]!;\n const color = n.style[`border-${s}-color`];\n put('stroke', `border-${s}-color`, transparent(color) ? null : color);\n if (widths.every((w) => w === widths[0])) put('strokeWeight', 'border-top-width', widths[0]);\n else (['top', 'right', 'bottom', 'left'] as const).forEach((x, i) => put(({ top: 'strokeTopWeight', right: 'strokeRightWeight', bottom: 'strokeBottomWeight', left: 'strokeLeftWeight' } as const)[x], `border-${x}-width`, widths[i]));\n }\n // A shadow (an elevation, a focus ring drawn as one): the computed list, drawn as Figma effects.\n if (parseBoxShadow(n.style['box-shadow']).length) put('shadow', 'box-shadow', n.style['box-shadow']);\n const l = part.layout;\n if (l && /flex|grid/.test(n.style.display ?? '')) {\n const gap = l.direction === 'HORIZONTAL' ? n.style['column-gap'] : n.style['row-gap'];\n put('itemSpacing', l.direction === 'HORIZONTAL' ? 'column-gap' : 'row-gap', px(gap) || undefined);\n if (l.wrap) put('counterAxisSpacing', 'row-gap', px(n.style['row-gap']) || undefined);\n }\n put('width', 'width', n.box.width);\n put('height', 'height', n.box.height);\n }\n if (n.kind === 'text') {\n for (const [field, prop] of TEXT_MAP) {\n const v = style[prop];\n if (!v || v === 'normal') continue;\n put(field, prop, field === 'textFill' || field === 'fontFamily' ? v : field === 'fontWeight' ? Number(v) : px(v));\n }\n const deco = style['text-decoration-line'];\n if (deco && /underline|line-through/.test(deco)) raw.textDecoration = /underline/.test(deco) ? 'UNDERLINE' : 'STRIKETHROUGH';\n }\n if ((n.kind === 'icon' || n.kind === 'vector') && n.svg) (out.vectors ??= {})[id] = { svg: n.svg, strokes: n.svgStrokes ?? [] };\n if (n.kind === 'icon' || n.kind === 'vector') {\n put('width', 'width', n.box.width);\n put('height', 'height', n.box.height);\n // Outline icons (Lucide, Carbon) paint with stroke, solid ones (Primer octicons) with fill; currentColor reads as color.\n const stroked = !!n.style.stroke && n.style.stroke !== 'none';\n const prop = stroked ? 'stroke' : 'fill';\n const paint = n.style[prop];\n if (paint && paint !== 'none') put(stroked ? 'stroke' : 'fill', n.tokens[prop] ? prop : 'color', /currentcolor/i.test(paint) ? n.style.color : paint);\n if (stroked) put('strokeWeight', 'stroke-width', px(n.style['stroke-width']) ?? (Number(n.style['stroke-width']) || undefined));\n }\n if (Object.keys(values).length) out.values[id] = values;\n if (Object.keys(raw).length) out.raw[id] = raw;\n if (Object.keys(ev).length) out.tokens[id] = ev;\n if (n.sized && (n.sized.width || n.sized.height)) (out.sized ??= {})[id] = { ...(n.sized.width ? { width: n.box.width } : {}), ...(n.sized.height ? { height: n.box.height } : {}) };\n const kids = n.children.map((c) => [c, visit(c, id, n.style, n.box)] as const);\n // A grid that wraps does so at its measured width, each item at its track's: Figma wraps fixed widths only.\n if (part.layout?.wrap && /grid/.test(n.style.display ?? '')) {\n for (const [c, cid] of [[n, id] as const, ...kids]) if (c === n || !/absolute|fixed/.test(c.style.position ?? '')) (out.sized ??= {})[cid] = { ...out.sized?.[cid], width: c.box.width };\n }\n if (part.layout) spacing(id, n, part.layout, kids);\n if (n.kind === 'frame') positioned(id, part, n, kids);\n // Moved or scaled by a transform (a progress indicator slid left, a check scaled in): the layer sits where it is\n // drawn, at the size it is drawn, out of the flow (its box is the drawn one).\n const t = /matrix\\(([^)]+)\\)/.exec(n.style.transform ?? '')?.[1]?.split(',').map(Number);\n if (parent && parentBox && t && t.length === 6 && Math.abs(t[1]!) < 1e-6 && Math.abs(t[2]!) < 1e-6 && (Math.abs(t[4]!) >= 0.5 || Math.abs(t[5]!) >= 0.5 || Math.abs(t[0]! - 1) > 0.01 || Math.abs(t[3]! - 1) > 0.01) && !part.cover) {\n part.pin = { top: Math.round((n.box.y - parentBox.y) * 100) / 100, left: Math.round((n.box.x - parentBox.x) * 100) / 100 };\n if (Math.abs(t[0]! - 1) > 0.01 || Math.abs(t[3]! - 1) > 0.01) (out.sized ??= {})[id] = { width: n.box.width, height: n.box.height };\n }\n return id;\n };\n const partById = new Map<string, MeasuredPart>();\n const byId = (id: string) => partById.get(id) ?? out.parts.find((p) => p.id === id);\n /**\n * Out of flow children. A lone decoration (a switch knob, a radio dot) is rebuilt in auto layout: the parent aligns\n * it start, center or end on each axis and its padding carries the offset, when that reproduces the measured\n * position within 1 px. Anything else out of flow that overlaps its siblings or leaves its parent is an overlay.\n */\n const positioned = (id: string, parentPart: MeasuredPart, n: MeasuredNode, kids: (readonly [MeasuredNode, string])[]) => {\n const abs = kids.filter(([c]) => c.style.position === 'absolute' || c.style.position === 'fixed');\n if (!abs.length) return;\n const flow = kids.filter(([c]) => !(c.style.position === 'absolute' || c.style.position === 'fixed') && (c.box.width > 0 || c.box.height > 0));\n const st = n.style;\n const b = (k: string) => (st[`border-${k}-style`] === 'none' ? 0 : (px(st[`border-${k}-width`]) ?? 0));\n const inner = { x: n.box.x + b('left'), y: n.box.y + b('top'), r: n.box.x + n.box.width - b('right'), bottom: n.box.y + n.box.height - b('bottom') };\n const r2 = (x: number) => Math.round(x * 100) / 100;\n if (abs.length === 1 && !flow.length) {\n const [c, cid] = abs[0]!;\n const p = byId(cid);\n if (p && !p.cover) {\n const left = r2(c.box.x - inner.x), right = r2(inner.r - (c.box.x + c.box.width));\n const top = r2(c.box.y - inner.y), bottom = r2(inner.bottom - (c.box.y + c.box.height));\n const ax = (a: number, z: number) => (Math.abs(a - z) <= 1 ? 'center' : a <= z ? 'start' : 'end') as 'start' | 'center' | 'end';\n const x = ax(left, right), y = ax(top, bottom);\n if (left >= -0.5 && right >= -0.5 && top >= -0.5 && bottom >= -0.5) {\n delete p.pin;\n const map = { start: 'MIN', center: 'CENTER', end: 'MAX' } as const;\n parentPart.layout = { direction: 'HORIZONTAL', primary: map[x], counter: map[y], align: { [cid]: { primary: map[x], counter: map[y] } } };\n const vals = (out.values[id] ??= {});\n const raws = (out.raw[id] ??= {});\n const set = (k: 'paddingLeft' | 'paddingRight' | 'paddingTop' | 'paddingBottom', v: number) => {\n if (v > 0.5) {\n vals[k] = v;\n raws[k] = v;\n } else {\n delete vals[k];\n delete raws[k];\n }\n };\n set('paddingLeft', x === 'start' ? left : 0);\n set('paddingRight', x === 'end' ? right : 0);\n set('paddingTop', y === 'start' ? top : 0);\n set('paddingBottom', y === 'end' ? bottom : 0);\n return;\n }\n }\n }\n const overlaps = (a: MeasuredBox, z: MeasuredBox) => a.x < z.x + z.width - 0.5 && z.x < a.x + a.width - 0.5 && a.y < z.y + z.height - 0.5 && z.y < a.y + a.height - 0.5;\n for (const [c, cid] of abs) {\n const p = byId(cid);\n if (!p || p.cover) continue;\n const outside = c.box.x < inner.x - 0.5 || c.box.y < inner.y - 0.5 || c.box.x + c.box.width > inner.r + 0.5 || c.box.y + c.box.height > inner.bottom + 0.5;\n if (outside || flow.some(([f]) => overlaps(c.box, f.box))) p.overlay = true;\n }\n };\n /**\n * Margins become auto layout: the space the boxes show before the first child and after the last becomes padding,\n * the space between children becomes the gap when it is the same everywhere, else the smallest gap plus a spacer\n * per child (a label 8 px above its field, a helper 4 px below it).\n */\n const spacing = (id: string, n: MeasuredNode, layout: SpecLayout, kids: (readonly [MeasuredNode, string])[]) => {\n if (layout.primary !== 'MIN' || layout.wrap || layout.reverse) return;\n const flow = kids.filter(([c]) => c.style.position !== 'absolute' && c.style.position !== 'fixed' && (c.box.width > 0 || c.box.height > 0));\n if (!flow.length) return;\n const v = layout.direction === 'VERTICAL';\n const st = n.style;\n const side = v ? (['top', 'bottom'] as const) : (['left', 'right'] as const);\n const num = (x: string | undefined) => px(x) ?? 0;\n const startEdge = (v ? n.box.y : n.box.x) + (st[`border-${side[0]}-style`] === 'none' ? 0 : num(st[`border-${side[0]}-width`])) + num(st[`padding-${side[0]}`]);\n const endEdge = (v ? n.box.y + n.box.height : n.box.x + n.box.width) - (st[`border-${side[1]}-style`] === 'none' ? 0 : num(st[`border-${side[1]}-width`])) - num(st[`padding-${side[1]}`]);\n const lo = (b: MeasuredBox) => (v ? b.y : b.x);\n const hi = (b: MeasuredBox) => (v ? b.y + b.height : b.x + b.width);\n const gaps = flow.slice(1).map(([c], i) => Math.round((lo(c.box) - hi(flow[i]![0].box)) * 100) / 100);\n if (gaps.some((g) => g < -0.5)) return; // overlapping (inline runs, negative margins): leave the declared layout\n const vals = (out.values[id] ??= {});\n const raws = (out.raw[id] ??= {});\n const padKey = (k: 'top' | 'bottom' | 'left' | 'right') => (({ top: 'paddingTop', bottom: 'paddingBottom', left: 'paddingLeft', right: 'paddingRight' }) as const)[k];\n const first = flow[0]![0];\n const last = flow[flow.length - 1]![0];\n // Only space a margin makes (text centred in a taller line is not padding): a child's own margin, at most what the boxes show.\n const before = Math.min(num(first.style[`margin-${side[0]}`]), Math.round((lo(first.box) - startEdge) * 100) / 100);\n // After the last child: only its own margin (free space in a fixed or stretched box is not padding).\n const after = Math.min(num(last.style[`margin-${side[1]}`]), Math.round((endEdge - hi(last.box)) * 100) / 100);\n for (const [k, extra] of [[side[0], before], [side[1], after]] as const) {\n if (!(extra > 0.5)) continue;\n const total = Math.round((num(st[`padding-${k}`]) + extra) * 100) / 100;\n vals[padKey(k)] = total;\n raws[padKey(k)] = total;\n }\n if (!gaps.length) return;\n const marginBetween = flow.slice(1).some(([c], i) => num(flow[i]![0].style[`margin-${side[1]}`]) > 0.5 || num(c.style[`margin-${side[0]}`]) > 0.5);\n if (!marginBetween) return;\n const declaredGap = num(v ? st['row-gap'] : st['column-gap']);\n const min = Math.min(...gaps);\n const uniform = gaps.every((g) => Math.abs(g - gaps[0]!) <= 0.5);\n if (uniform && Math.abs(gaps[0]! - declaredGap) <= 0.5) return;\n vals.itemSpacing = uniform ? gaps[0]! : min;\n raws.itemSpacing = vals.itemSpacing as number;\n if (!uniform)\n flow.slice(1).forEach(([c, cid], i) => {\n const extra = Math.round((gaps[i]! - min) * 100) / 100;\n if (!(extra > 0.5)) return;\n (out.spacers ??= {})[cid] = extra;\n // The margin's owner gets a wrapper with that padding: the previous child's end margin, else this child's start.\n const [prev, pid] = flow[i]!;\n const onPrev = num(prev.style[`margin-${side[1]}`]) > 0.5 && !(num(c.style[`margin-${side[0]}`]) > num(prev.style[`margin-${side[1]}`]));\n const owner = byId(onPrev ? pid : cid);\n if (owner) owner.wrap = { padding: { ...(owner.wrap?.padding ?? {}), [onPrev ? side[1] : side[0]]: extra } };\n });\n };\n visit(m.root, undefined, undefined);\n for (const k of Object.keys(out.values)) if (!Object.keys(out.values[k]!).length) delete out.values[k];\n for (const k of Object.keys(out.raw)) if (!Object.keys(out.raw[k]!).length) delete out.raw[k];\n return out;\n}\n"],"names":["resolve","sep","ch","walk","width","l","vars","strip","align","justify","join","base","dir","t"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACL9B,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}