@weasel-js/forge 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +33 -0
  2. package/dist/{FrameController-BspC9Zr5.d.ts → FrameController-HEcTM04H.d.ts} +24 -1
  3. package/dist/{chunk-A4JOEGYQ.js → chunk-7GQI2PDH.js} +7 -46
  4. package/dist/chunk-7GQI2PDH.js.map +1 -0
  5. package/dist/{chunk-PO5JLVYT.js → chunk-DDDCZ6XW.js} +98 -11
  6. package/dist/chunk-DDDCZ6XW.js.map +1 -0
  7. package/dist/{chunk-FWPBKKYB.js → chunk-ERRLEH6S.js} +10 -11
  8. package/dist/chunk-ERRLEH6S.js.map +1 -0
  9. package/dist/chunk-LLGBNJAZ.js +77 -0
  10. package/dist/chunk-LLGBNJAZ.js.map +1 -0
  11. package/dist/chunk-WEQSLPKT.js +9 -0
  12. package/dist/chunk-WEQSLPKT.js.map +1 -0
  13. package/dist/{chunk-VEKEBILL.js → chunk-YKN3IAEX.js} +12 -10
  14. package/dist/chunk-YKN3IAEX.js.map +1 -0
  15. package/dist/{config-DU_WuORS.d.ts → config-pDbcbGco.d.ts} +20 -3
  16. package/dist/csf/preview-api.js +1 -1
  17. package/dist/frame/index.css +63 -7
  18. package/dist/frame/index.css.map +1 -1
  19. package/dist/frame/index.d.ts +4 -2
  20. package/dist/frame/index.js +10 -3
  21. package/dist/frame/index.js.map +1 -1
  22. package/dist/index.d.ts +12 -4
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/shell/index.css +162 -3
  26. package/dist/shell/index.css.map +1 -1
  27. package/dist/shell/index.d.ts +39 -37
  28. package/dist/shell/index.js +166 -188
  29. package/dist/shell/index.js.map +1 -1
  30. package/dist/test/index.d.ts +1 -1
  31. package/dist/test/index.js +4 -3
  32. package/dist/test/index.js.map +1 -1
  33. package/dist/vite/index.js +344 -18
  34. package/dist/vite/index.js.map +1 -1
  35. package/package.json +10 -10
  36. package/dist/chunk-A4JOEGYQ.js.map +0 -1
  37. package/dist/chunk-FWPBKKYB.js.map +0 -1
  38. package/dist/chunk-PO5JLVYT.js.map +0 -1
  39. package/dist/chunk-VEKEBILL.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/vite/html.ts","../../src/vite/build.ts","../../src/vite/autoTitle.ts","../../src/vite/indexFile.ts","../../src/vite/storybookShims.ts","../../src/vite/plugin.ts","../../src/vite/forgeTest.ts"],"names":["autoTitle","forge","PAGES","fileURLToPath","dirname","join","relative","files","resolve","sep","matchesGlob"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The document forge serves for `entry`, one of its `virtual:forge/*-entry.js` modules. A build hands the\n * bare id to its own resolver; the dev server needs the `/@id/` form a browser can request.\n */\nexport function html(entry: string, mode: 'serve' | 'build' = 'serve'): string {\n const src = `${mode === 'serve' ? '/@id/' : ''}virtual:forge/${entry}`;\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>weaselforge</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"${src}\"></script>\n </body>\n</html>\n`;\n}\n","import { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { html } from './html';\n\nconst DIR = 'node_modules/.forge';\ntype Source = string | Uint8Array;\n\nconst PAGES: Record<string, string> = { index: 'shell-entry.js', frame: 'frame-entry.js' };\n\n/** Writes a build document per forge page under `<root>/node_modules/.forge`, returning them as build inputs. */\nexport function writePages(root: string): Record<string, string> {\n const dir = join(root, DIR);\n mkdirSync(dir, { recursive: true });\n return Object.fromEntries(\n Object.entries(PAGES).map(([name, entry]) => {\n const file = join(dir, `${name}.html`);\n writeFileSync(file, html(entry, 'build'));\n return [name, file];\n }),\n );\n}\n\n/** Vite wrote a relative base's urls from two directories down; the documents now sit at the output root. */\nconst up = (source: Source) =>\n (typeof source === 'string' ? source : new TextDecoder().decode(source)).replace(/(\\s(?:src|href)=\")\\.\\.\\/\\.\\.\\//g, '$1./');\n\n/** Replaces the documents vite emitted at their input path with copies at the output root. */\nexport function hoistPages(\n bundle: Record<string, { type: string; source?: Source }>,\n emit: (file: { type: 'asset'; fileName: string; source: Source }) => void,\n): void {\n for (const name of Object.keys(PAGES)) {\n const from = `${DIR}/${name}.html`;\n const asset = bundle[from];\n if (asset?.type !== 'asset' || asset.source === undefined) continue;\n delete bundle[from];\n emit({ type: 'asset', fileName: `${name}.html`, source: up(asset.source) });\n }\n}\n","import { dirname, matchesGlob, relative, resolve, sep } from 'node:path';\n\n// A port of Storybook 10.4.0's auto-title (preview-api `userOrAutoTitle`, common `normalizeStoriesEntry`)\n// for string `stories` entries, which carry no title prefix. It must agree with Storybook or ids and links diverge.\n\nconst posix = (path: string): string => path.split(sep).join('/');\n\n/** Storybook's `normalizeStoryPath`. */\nconst dotted = (path: string): string => (/^\\.{1,2}([/\\\\]|$)/.test(path) ? path : `./${path}`);\n\n/** The directory a stories glob searches from: picomatch `scan`'s `prefix + base`, or a file's directory. */\nexport function globDirectory(pattern: string): string {\n const segments = pattern.split('/');\n const magic = segments.findIndex((segment) => /^!|(^|[^\\\\])[*?[{(]/.test(segment));\n return magic === -1 ? dirname(pattern) : segments.slice(0, magic).join('/');\n}\n\n/** Storybook's `sanitize` in autoTitle: strips the extension, then collapses `Button/Button`, `index` and `stories.js`. */\nfunction titleParts(parts: string[]): string[] {\n const last = parts[parts.length - 1];\n if (last === undefined) return parts;\n const stripped = last.replace(/(?:[.](?:story|stories))?([.][^.]+)$/i, '');\n if (parts.length === 1) return [stripped];\n const nextToLast = parts[parts.length - 2];\n if (stripped && nextToLast && stripped.toLowerCase() === nextToLast.toLowerCase()) return [...parts.slice(0, -2), stripped];\n if (stripped && (/^(story|stories)([.][^.]+)$/i.test(last) || /^index$/i.test(stripped))) return parts.slice(0, -1);\n return [...parts.slice(0, -1), stripped];\n}\n\nconst titleFrom = (importPath: string, directory: string): string =>\n titleParts(importPath.replace(directory, '').split('/').filter(Boolean)).join('/');\n\n/**\n * The title Storybook gives a story file whose meta names none: its path under the directory of the first\n * `stories` glob that matches it. A file no glob matches is titled from its path under `root`.\n */\nexport function autoTitle(file: string, root: string, stories: readonly string[]): string {\n const path = posix(relative(root, file));\n const importPath = dotted(path);\n for (const pattern of stories) {\n if (!matchesGlob(path, pattern.replace(/^\\.\\//, ''))) continue;\n const directory = dotted(posix(relative(root, resolve(root, globDirectory(pattern))))).replace(/\\/$/, '');\n return titleFrom(importPath, directory);\n }\n return titleFrom(importPath, '.');\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\nimport { storyId, storyNameFromExport } from '../story/ids';\nimport type { IndexEntry } from '../story/types';\n\ntype Bindings = Map<string, t.Node>;\n\n/** The stories `code` declares, in source order, without running it. `file` is absolute; `autoTitle` titles a meta that names none. */\nexport function indexFile(code: string, file: string, autoTitle: string): IndexEntry[] {\n try {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n return indexProgram(parse(code, { sourceType: 'module', plugins }).program, file, autoTitle);\n } catch (err) {\n throw new Error(`${file}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\nfunction indexProgram(program: t.Program, file: string, autoTitle: string): IndexEntry[] {\n const bindings: Bindings = new Map();\n const wrappers = new Set<string>();\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.source.value === '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && ['meta', 'story'].includes(exportedName(spec.imported))) {\n wrappers.add(spec.local.name);\n }\n }\n }\n const decl = stmt.type === 'ExportNamedDeclaration' ? stmt.declaration : stmt;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n }\n }\n\n let metaNode: t.Node | undefined;\n let metaDoc: string | undefined;\n const exported: { name: string; node: t.Node | undefined; doc: string | undefined }[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ExportDefaultDeclaration') {\n metaNode = stmt.declaration;\n metaDoc = docOf(stmt);\n }\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n const doc = docOf(stmt);\n const decl = stmt.declaration;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier') exported.push({ name: d.id.name, node: d.init ?? undefined, doc: docOf(d) ?? doc });\n }\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n exported.push({ name: decl.id.name, node: undefined, doc });\n }\n for (const spec of stmt.specifiers) {\n if (spec.type !== 'ExportSpecifier' || spec.exportKind === 'type') continue;\n const name = exportedName(spec.exported);\n const node = stmt.source ? undefined : bindings.get(spec.local.name);\n if (name === 'default') {\n metaNode = node;\n metaDoc ??= doc;\n } else exported.push({ name, node, doc });\n }\n }\n if (!metaNode && !program.body.some(isDefaultExport)) return [];\n\n const meta = objectOf(metaNode, bindings, wrappers);\n const title = stringProp(meta, 'title') ?? autoTitle;\n const include = storyFilter(meta, 'includeStories');\n const exclude = storyFilter(meta, 'excludeStories');\n const componentNode = prop(meta, 'component');\n const componentName = componentNode?.type === 'Identifier' ? componentNode.name : undefined;\n const metaIsolate = isolateOf(meta, bindings, wrappers, 'default');\n\n return exported\n .filter(({ name }) => name !== '__namedExportsOrder')\n .filter(({ name }) => (!include || include(name)) && (!exclude || !exclude(name)))\n .map(({ name, node, doc }) => {\n const spec = objectOf(node, bindings, wrappers);\n const isolate = isolateOf(spec, bindings, wrappers, name) ?? metaIsolate;\n return {\n id: storyId(title, name),\n title,\n name: stringProp(spec, 'name') ?? stringProp(spec, 'storyName') ?? storyNameFromExport(name),\n exportName: name,\n file,\n ...(doc === undefined ? {} : { description: doc }),\n ...(metaDoc === undefined ? {} : { componentDescription: metaDoc }),\n ...(componentName === undefined ? {} : { componentName }),\n ...(isolate === undefined ? {} : { isolate }),\n };\n });\n}\n\n/**\n * The reason `obj` isolates its story: `isolate` on a native meta or story, `parameters.forge.isolate` in CSF.\n * It must be a string literal, because the shell reads it without importing the module.\n */\nfunction isolateOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>, exportName: string): string | undefined {\n const parameters = objectOf(prop(obj, 'parameters'), bindings, wrappers);\n const forge = objectOf(prop(parameters, 'forge'), bindings, wrappers);\n const value = prop(obj, 'isolate') ?? prop(forge, 'isolate');\n if (value === undefined) return undefined;\n const literal = stringLiteral(value);\n if (literal === undefined) throw new Error(`${exportName}: isolate must be a string literal`);\n return literal;\n}\n\n/** The value of a plain string literal or an expression-free template literal. */\nfunction stringLiteral(node: t.Node): string | undefined {\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) return node.quasis.map((q) => q.value.cooked ?? q.value.raw).join('');\n return undefined;\n}\n\nfunction isDefaultExport(stmt: t.Statement): boolean {\n if (stmt.type === 'ExportDefaultDeclaration') return true;\n return (\n stmt.type === 'ExportNamedDeclaration' &&\n stmt.specifiers.some((s) => s.type === 'ExportSpecifier' && exportedName(s.exported) === 'default')\n );\n}\n\n/**\n * The JSDoc block immediately above `node`, as prose. A `//` comment is not\n * one: a line comment above an export is as often a note to the author as a\n * description of the story, and printing it in the dossier would be guessing.\n */\nfunction docOf(node: t.Node): string | undefined {\n const comments = node.leadingComments;\n const last = comments?.[comments.length - 1];\n if (last?.type !== 'CommentBlock' || !last.value.startsWith('*')) return undefined;\n const text = last.value\n .slice(1)\n .split('\\n')\n .map((line) => line.replace(/^\\s*\\*/, '').trim())\n .join('\\n')\n .trim();\n return text || undefined;\n}\n\nfunction exportedName(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** The object literal `node` evaluates to, through casts, `meta(…)`/`story(…)` and top-level `const`s. */\nfunction objectOf(node: t.Node | undefined, bindings: Bindings, wrappers: Set<string>, depth = 0): t.ObjectExpression | null {\n if (!node || depth > 16) return null;\n switch (node.type) {\n case 'ObjectExpression':\n return node;\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return objectOf(node.expression, bindings, wrappers, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' && wrappers.has(node.callee.name)\n ? objectOf(node.arguments[0], bindings, wrappers, depth + 1)\n : null;\n case 'Identifier':\n return objectOf(bindings.get(node.name), bindings, wrappers, depth + 1);\n default:\n return null;\n }\n}\n\nfunction prop(obj: t.ObjectExpression | null, key: string): t.Node | undefined {\n for (const p of obj?.properties ?? []) {\n if (p.type !== 'ObjectProperty' || p.computed) continue;\n const name = p.key.type === 'Identifier' ? p.key.name : p.key.type === 'StringLiteral' ? p.key.value : null;\n if (name === key) return p.value;\n }\n return undefined;\n}\n\nfunction stringProp(obj: t.ObjectExpression | null, key: string): string | undefined {\n const value = prop(obj, key);\n return value?.type === 'StringLiteral' ? value.value : undefined;\n}\n\n/** `includeStories`/`excludeStories` as a predicate, when written as a string array or a regex literal. */\nfunction storyFilter(obj: t.ObjectExpression | null, key: string): ((name: string) => boolean) | null {\n const value = prop(obj, key);\n if (value?.type === 'RegExpLiteral') {\n const re = new RegExp(value.pattern, value.flags.replace(/[gy]/g, ''));\n return (name) => re.test(name);\n }\n if (value?.type === 'ArrayExpression' && value.elements.every((e) => e?.type === 'StringLiteral')) {\n const names = new Set(value.elements.map((e) => (e as t.StringLiteral).value));\n return (name) => names.has(name);\n }\n return null;\n}\n","import { fileURLToPath } from 'node:url';\nimport type { Plugin } from 'vite';\n\n/** Storybook specifiers a CSF file may import, and the forge entry each answers to. */\nconst SHIMS: readonly (readonly [RegExp, string])[] = [\n [/^@?storybook\\/preview-api$/, '@weasel-js/forge/preview-api'],\n [/^@?storybook\\/test$/, '@weasel-js/forge/play'],\n];\n\n/** Points the Storybook runtime specifiers a CSF file may carry at forge's own entries. */\nexport function storybookShims(): Plugin {\n // Resolved from forge's own location, through the app's aliases, so a monorepo reaches source and an install reaches dist.\n return {\n name: 'weaselforge:storybook-shims',\n enforce: 'pre',\n resolveId(id) {\n const hit = SHIMS.find(([pattern]) => pattern.test(id));\n if (!hit) return undefined;\n return this.resolve(hit[1], fileURLToPath(import.meta.url), { skipSelf: true });\n },\n };\n}\n","import { existsSync, globSync, readFileSync, statSync } from 'node:fs';\nimport { basename, dirname, join, matchesGlob, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { Logger, Plugin, ViteDevServer } from 'vite';\nimport type { IndexEntry } from '../story/types';\nimport { hoistPages, writePages } from './build';\nimport { autoTitle } from './autoTitle';\nimport { html } from './html';\nimport { indexFile } from './indexFile';\nimport { storybookShims } from './storybookShims';\n\nexport interface ForgeOptions {\n /** Globs of story files, relative to the vite root. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root. Only frame documents import it. Optional. */\n frameConfig?: string;\n /** Path to the shell config module, relative to the vite root. Only the workshop page imports it. Optional. */\n shellConfig?: string;\n /** Alias Storybook's runtime modules to forge shims (Task 13). Default true. */\n storybookShims?: boolean;\n}\n\nconst PREFIX = 'virtual:forge/';\nconst MODULES = new Set(['index.js', 'importers.js', 'frame-config.js', 'shell-config.js', 'shell-entry.js', 'frame-entry.js']);\nconst PAGES: Record<string, string> = { '/': 'shell-entry.js', '/index.html': 'shell-entry.js', '/frame.html': 'frame-entry.js' };\n\n/** forge's shell and frame entry modules: source beside this file in a checkout, the built entries in an install. */\nfunction ownEntries(): string[] {\n const here = fileURLToPath(import.meta.url);\n for (let dir = dirname(here); dir !== dirname(dir); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (!existsSync(manifest) || (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: string }).name !== '@weasel-js/forge') {\n continue;\n }\n const source = !relative(join(dir, 'src'), here).startsWith('..');\n return ['shell', 'frame'].map((realm) => join(dir, source ? `src/${realm}/index.ts` : `dist/${realm}/index.js`));\n }\n return [];\n}\n\nexport function forge(options: ForgeOptions): Plugin[] {\n let root = process.cwd();\n let base = '/';\n let byFile: Map<string, IndexEntry[]> | null = null;\n let logger: Logger | undefined;\n\n const glob = (): string[] => {\n const files = options.stories.flatMap((pattern) =>\n globSync(pattern, { cwd: root, exclude: (name) => basename(String(name)) === 'node_modules' })\n .map((f) => resolve(root, f))\n // A failed story run leaves `__screenshots__/<file>.stories.tsx/` directories that match the globs.\n .filter((f) => statSync(f).isFile())\n .sort(),\n );\n return [...new Set(files)];\n };\n const matches = (file: string): boolean => {\n const path = relative(root, file).split(sep).join('/');\n return !path.split('/').includes('node_modules') && options.stories.some((pattern) => matchesGlob(path, pattern));\n };\n const read = (file: string) => indexFile(readFileSync(file, 'utf8'), file, autoTitle(file, root, options.stories));\n const logError = (err: unknown) => logger?.error(`[forge] ${err instanceof Error ? err.message : String(err)}`);\n /** A file that fails to parse stays in the map with no entries, so an edit that fixes it re-indexes it. */\n const files = (): Map<string, IndexEntry[]> => {\n byFile ??= new Map(\n glob().map((file) => {\n try {\n return [file, read(file)];\n } catch (err) {\n logError(err);\n return [file, []];\n }\n }),\n );\n return byFile;\n };\n const index = () => [...files().values()].flat();\n\n const configModule = (path: string | undefined) =>\n path ? `export { default } from ${JSON.stringify(resolve(root, path))};\\n` : 'export default {};\\n';\n\n const modules: Record<string, () => string> = {\n 'index.js': () => `export default ${JSON.stringify(index())};\\n`,\n 'importers.js': () => {\n const lines = [...files()]\n .filter(([, entries]) => entries.length > 0)\n .map(([file]) => ` ${JSON.stringify(file)}: () => import(${JSON.stringify(file)}),`);\n return `export default {\\n${lines.join('\\n')}\\n};\\n`;\n },\n 'frame-config.js': () => configModule(options.frameConfig),\n 'shell-config.js': () => configModule(options.shellConfig),\n 'shell-entry.js': () => `import { mountWorkshop } from '@weasel-js/forge/shell';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport config from 'virtual:forge/shell-config.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nconst workshop = mountWorkshop({\n index,\n importers,\n setup,\n config,\n frameUrl: ${JSON.stringify(`${base}frame.html`)},\n stories: ${JSON.stringify(options.stories)},\n});\nimport.meta.hot?.on('forge:index', (next) => workshop.setIndex(next));\n// A story edit reaches here as an update of the importers module, whose fresh import() URLs carry the new\n// timestamps; the file it names arrives just before, so the reload waits for the importers that can fetch it.\nconst stale = new Set();\nimport.meta.hot?.on('forge:story', ({ file }) => stale.add(file));\nimport.meta.hot?.accept('virtual:forge/importers.js', (next) => {\n if (!next) return;\n workshop.setImporters(next.default);\n for (const file of stale) workshop.reloadStory(file);\n stale.clear();\n});\n`,\n 'frame-entry.js': () => `import { mountFrame } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nmountFrame({ index, importers, setup });\n// The importers module is shared with the workshop page, which accepts a story edit in place; a frame document\n// showing the old module reloads instead, and without this the edit would dead-end here and reload every page.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`,\n };\n\n function reindex(server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink'): void {\n const current = files();\n if (event === 'change' && current.has(file)) server.ws.send({ type: 'custom', event: 'forge:story', data: { file } });\n if (event === 'change' && !current.has(file)) return;\n if (event === 'add' && !matches(file)) return;\n if (event === 'unlink' && !current.has(file)) return;\n\n const before = JSON.stringify(index());\n if (event === 'unlink') {\n current.delete(file);\n } else {\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n return;\n }\n }\n const next = index();\n if (JSON.stringify(next) === before) return;\n\n for (const env of Object.values(server.environments)) {\n for (const name of ['index.js', 'importers.js']) {\n const mod = env.moduleGraph.getModuleById(`\\0${PREFIX}${name}`);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n }\n server.ws.send({ type: 'custom', event: 'forge:index', data: next });\n }\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge',\n config(config, { command }) {\n const at = resolve(config.root ?? process.cwd());\n // The pages are virtual, so vite's scan finds no entry of its own to crawl for dependencies.\n const entries = [\n ...options.stories,\n ...[options.frameConfig, options.shellConfig].flatMap((path) => (path ? [resolve(at, path)] : [])),\n ...ownEntries(),\n ];\n const optimizeDeps = { entries };\n if (command !== 'build') return { optimizeDeps };\n return { optimizeDeps, build: { rolldownOptions: { input: writePages(at) } } };\n },\n generateBundle: {\n order: 'post',\n handler(_, bundle) {\n hoistPages(bundle, (file) => this.emitFile(file));\n },\n },\n configResolved(config) {\n root = config.root;\n base = config.base;\n logger = config.logger;\n byFile = null;\n },\n resolveId(id) {\n return id.startsWith(PREFIX) && MODULES.has(id.slice(PREFIX.length)) ? `\\0${id}` : undefined;\n },\n load(id) {\n if (!id.startsWith(`\\0${PREFIX}`)) return undefined;\n return modules[id.slice(PREFIX.length + 1)]?.();\n },\n configureServer(server) {\n server.watcher.add([...files().keys()]);\n for (const event of ['add', 'change', 'unlink'] as const) {\n server.watcher.on(event, (file) => reindex(server, resolve(file), event));\n }\n server.middlewares.use((req, res, next) => {\n const url = req.url ?? '/';\n const path = url.split('?')[0] ?? '/';\n const prefix = base.endsWith('/') ? base.slice(0, -1) : base;\n const page = path === prefix ? '/' : path.startsWith(`${prefix}/`) ? path.slice(prefix.length) : null;\n const entry = req.method === 'GET' && page !== null ? PAGES[page] : undefined;\n if (!entry) return next();\n server.transformIndexHtml(url, html(entry)).then(\n (doc) => {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html');\n res.end(doc);\n },\n (err: unknown) => next(err),\n );\n });\n },\n },\n ];\n}\n","import { matchesGlob, relative, resolve, sep } from 'node:path';\nimport type { Plugin } from 'vite';\nimport { autoTitle } from './autoTitle';\nimport { indexFile } from './indexFile';\nimport { storybookShims } from './storybookShims';\n\nexport interface ForgeTestOptions {\n /** Globs of story files, relative to the vite root. Each matching file becomes a test file. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root; it sets up every story. Optional. */\n frameConfig?: string;\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n}\n\nconst TIMEOUT_MS = 15_000;\n\n/**\n * A vite plugin for vitest browser mode: every story in a matching file runs as one test, rendered and played\n * through forge's frame in the test page itself.\n */\nexport function forgeTest(options: ForgeTestOptions): Plugin[] {\n let root = process.cwd();\n\n const matches = (id: string): boolean => {\n if (id.startsWith('\\0') || id.includes('?')) return false;\n const path = relative(root, id).split(sep).join('/');\n if (path.startsWith('../') || path.split('/').includes('node_modules')) return false;\n return options.stories.some((pattern) => matchesGlob(path, pattern));\n };\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge:test',\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n transform(code, id) {\n if (!matches(id)) return undefined;\n const title = autoTitle(id, root, options.stories);\n const entries = indexFile(code, id, title);\n if (entries.length === 0) return undefined;\n const q = (value: string) => JSON.stringify(value);\n // The module comes from its own URL at test time: vitest imports a test file with a cache-busting query,\n // so a static self-import would evaluate the file a second time and register every test twice.\n const lines = [\n '',\n `import { test as __forge_test } from \"vitest\";`,\n `import { page as __forge_page } from \"vitest/browser\";`,\n `import { runStory as __forge_runStory } from \"@weasel-js/forge/test\";`,\n // shell.css draws the story host; frame.css still holds the boundary's fault rule.\n `import \"@weasel-js/forge/shell.css\";`,\n `import \"@weasel-js/forge/frame.css\";`,\n ...(options.frameConfig ? [`import __forge_frame_config from ${q(resolve(root, options.frameConfig))};`] : []),\n `const __forge_file = ${q(id)};`,\n `const __forge_title = ${q(title)};`,\n `const __forge_timeout = ${TIMEOUT_MS};`,\n 'const __forge_options = {',\n ` setup: ${options.frameConfig ? '__forge_frame_config' : 'undefined'},`,\n ' viewport: (width, height) => __forge_page.viewport(width, height),',\n '};',\n 'const __forge_run = async (exportName) => __forge_runStory(await import(/* @vite-ignore */ import.meta.url), exportName, __forge_file, __forge_title, __forge_options);',\n // An isolated story asks for a document of its own, which the test page is not; its reason goes in the name.\n ...entries.map((entry) =>\n entry.isolate === undefined\n ? `__forge_test(${q(entry.name)}, () => __forge_run(${q(entry.exportName)}), __forge_timeout);`\n : `__forge_test.skip(${q(`${entry.name} (isolated: ${entry.isolate})`)}, () => {});`,\n ),\n ];\n return { code: `${code}\\n${lines.join('\\n')}\\n`, map: null };\n },\n },\n ];\n}\n"]}
1
+ {"version":3,"sources":["../../src/vite/html.ts","../../src/vite/build.ts","../../src/vite/autoTitle.ts","../../src/vite/depGraph.ts","../../src/vite/indexFile.ts","../../src/vite/storybookShims.ts","../../src/vite/plugin.ts","../../src/vite/forgeTest.ts"],"names":["resolve","dirname","relative","sep","autoTitle","parse","forge","PAGES","fileURLToPath","join","files","matchesGlob","read"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The document forge serves for `entry`, one of its `virtual:forge/*-entry.js` modules. A build hands the\n * bare id to its own resolver; the dev server needs the `/@id/` form a browser can request.\n */\nexport function html(entry: string, mode: 'serve' | 'build' = 'serve'): string {\n const src = `${mode === 'serve' ? '/@id/' : ''}virtual:forge/${entry}`;\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>weaselforge</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"${src}\"></script>\n </body>\n</html>\n`;\n}\n","import { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { html } from './html.ts';\n\nconst DIR = 'node_modules/.forge';\ntype Source = string | Uint8Array;\n\nconst PAGES: Record<string, string> = { index: 'shell-entry.js', frame: 'frame-entry.js' };\n\n/** Writes a build document per forge page under `<root>/node_modules/.forge`, returning them as build inputs. */\nexport function writePages(root: string): Record<string, string> {\n const dir = join(root, DIR);\n mkdirSync(dir, { recursive: true });\n return Object.fromEntries(\n Object.entries(PAGES).map(([name, entry]) => {\n const file = join(dir, `${name}.html`);\n writeFileSync(file, html(entry, 'build'));\n return [name, file];\n }),\n );\n}\n\n/** Vite wrote a relative base's urls from two directories down; the documents now sit at the output root. */\nconst up = (source: Source) =>\n (typeof source === 'string' ? source : new TextDecoder().decode(source)).replace(/(\\s(?:src|href)=\")\\.\\.\\/\\.\\.\\//g, '$1./');\n\n/** Replaces the documents vite emitted at their input path with copies at the output root. */\nexport function hoistPages(\n bundle: Record<string, { type: string; source?: Source }>,\n emit: (file: { type: 'asset'; fileName: string; source: Source }) => void,\n): void {\n for (const name of Object.keys(PAGES)) {\n const from = `${DIR}/${name}.html`;\n const asset = bundle[from];\n if (asset?.type !== 'asset' || asset.source === undefined) continue;\n delete bundle[from];\n emit({ type: 'asset', fileName: `${name}.html`, source: up(asset.source) });\n }\n}\n","import { dirname, matchesGlob, relative, resolve, sep } from 'node:path';\n\n// A port of Storybook 10.4.0's auto-title (preview-api `userOrAutoTitle`, common `normalizeStoriesEntry`)\n// for string `stories` entries, which carry no title prefix. It must agree with Storybook or ids and links diverge.\n\nconst posix = (path: string): string => path.split(sep).join('/');\n\n/** Storybook's `normalizeStoryPath`. */\nconst dotted = (path: string): string => (/^\\.{1,2}([/\\\\]|$)/.test(path) ? path : `./${path}`);\n\n/** The directory a stories glob searches from: picomatch `scan`'s `prefix + base`, or a file's directory. */\nexport function globDirectory(pattern: string): string {\n const segments = pattern.split('/');\n const magic = segments.findIndex((segment) => /^!|(^|[^\\\\])[*?[{(]/.test(segment));\n return magic === -1 ? dirname(pattern) : segments.slice(0, magic).join('/');\n}\n\n/** Storybook's `sanitize` in autoTitle: strips the extension, then collapses `Button/Button`, `index` and `stories.js`. */\nfunction titleParts(parts: string[]): string[] {\n const last = parts[parts.length - 1];\n if (last === undefined) return parts;\n const stripped = last.replace(/(?:[.](?:story|stories))?([.][^.]+)$/i, '');\n if (parts.length === 1) return [stripped];\n const nextToLast = parts[parts.length - 2];\n if (stripped && nextToLast && stripped.toLowerCase() === nextToLast.toLowerCase()) return [...parts.slice(0, -2), stripped];\n if (stripped && (/^(story|stories)([.][^.]+)$/i.test(last) || /^index$/i.test(stripped))) return parts.slice(0, -1);\n return [...parts.slice(0, -1), stripped];\n}\n\nconst titleFrom = (importPath: string, directory: string): string =>\n titleParts(importPath.replace(directory, '').split('/').filter(Boolean)).join('/');\n\n/**\n * The title Storybook gives a story file whose meta names none: its path under the directory of the first\n * `stories` glob that matches it. A file no glob matches is titled from its path under `root`.\n */\nexport function autoTitle(file: string, root: string, stories: readonly string[]): string {\n const path = posix(relative(root, file));\n const importPath = dotted(path);\n for (const pattern of stories) {\n if (!matchesGlob(path, pattern.replace(/^\\.\\//, ''))) continue;\n const directory = dotted(posix(relative(root, resolve(root, globDirectory(pattern))))).replace(/\\/$/, '');\n return titleFrom(importPath, directory);\n }\n return titleFrom(importPath, '.');\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\nimport { dirname, relative, sep } from 'node:path';\nimport { isGallery } from '../story/tags.ts';\nimport type { ComponentDeps, DepGraph, IndexEntry } from '../story/types.ts';\n\n/** Resolves an import as the bundler would: an absolute file, or null for anything that is not one. */\nexport type ResolveImport = (specifier: string, importer: string) => Promise<string | null>;\n\nexport interface DepGraphOptions {\n root: string;\n read: (file: string) => string;\n}\n\nexport interface DepGraphBuilder {\n build(entries: readonly IndexEntry[], resolve: ResolveImport): Promise<DepGraph>;\n /** Drops what was read from `file`. True when the graph had read it, so the graph may have changed. */\n invalidate(file: string): boolean;\n /** Drops every cached import resolution, keeping the parsed files. */\n reset(): void;\n}\n\ninterface Import {\n spec: string;\n /** `*` for a namespace import. */\n imported: string;\n}\n\ntype Export = { kind: 'local'; local: string } | { kind: 'from'; spec: string; imported: string };\n\ninterface ModuleInfo {\n imports: Map<string, Import>;\n exports: Map<string, Export>;\n stars: string[];\n /** Per top-level binding, the names its declaration refers to. */\n refs: Map<string, Set<string>>;\n}\n\n/** A declared binding: the file declaring it and its name there. */\ntype Key = string;\nconst keyOf = (file: string, local: string): Key => `${file}#${local}`;\nconst fileOfKey = (key: Key): string => key.slice(0, key.lastIndexOf('#'));\n\nconst SCRIPT = /\\.[cm]?[jt]sx?$/;\nconst DEFAULT_LOCAL = '*default*';\n/** Keys holding types, which name no value a component could render. */\nconst TYPE_KEYS = new Set(['typeAnnotation', 'typeParameters', 'typeArguments', 'returnType', 'superTypeParameters', 'implements']);\n\n/**\n * The component graph of `entries`, derived from source: each component is the binding its story file's meta names\n * (or, when that is declared in the story file itself, the import the title's last segment names), found by\n * following imports and re-exports to the file declaring it. What a component uses is every listed component that\n * its own declaration reaches, directly or through the file's local helpers and the relative imports in its own\n * directory. Each file is read and parsed once and each import resolved once, until `invalidate` names it.\n */\nexport function createDepGraph({ root, read }: DepGraphOptions): DepGraphBuilder {\n const modules = new Map<string, ModuleInfo | null>();\n const resolutions = new Map<string, Map<string, Promise<string | null>>>();\n\n const info = (file: string): ModuleInfo | null => {\n if (!modules.has(file)) {\n let parsed: ModuleInfo | null = null;\n try {\n parsed = moduleInfo(read(file), file);\n } catch {\n parsed = null;\n }\n modules.set(file, parsed);\n }\n return modules.get(file) ?? null;\n };\n\n return {\n invalidate(file) {\n const known = modules.has(file) || resolutions.has(file);\n modules.delete(file);\n resolutions.delete(file);\n return known;\n },\n\n reset() {\n resolutions.clear();\n },\n\n async build(entries, resolve) {\n const resolveFrom = (spec: string, importer: string): Promise<string | null> => {\n let byImporter = resolutions.get(importer);\n if (!byImporter) {\n byImporter = new Map();\n resolutions.set(importer, byImporter);\n }\n let pending = byImporter.get(spec);\n if (!pending) {\n pending = resolve(spec, importer).then(\n (id) => {\n const file = id?.split('?')[0];\n return file && !file.startsWith('\\0') && SCRIPT.test(file) && !file.split(/[\\\\/]/).includes('node_modules') ? file : null;\n },\n () => null,\n );\n byImporter.set(spec, pending);\n }\n return pending;\n };\n\n /** The binding `name` exported from `file` is declared as, through re-exports. */\n const declaring = async (file: string, name: string, depth = 0): Promise<Key | null> => {\n const mod = info(file);\n if (!mod || depth > 32) return null;\n const exp = mod.exports.get(name);\n if (exp?.kind === 'local') {\n const imp = mod.imports.get(exp.local);\n return imp ? importKey(file, imp, depth + 1) : keyOf(file, exp.local);\n }\n if (exp?.kind === 'from') {\n const target = await resolveFrom(exp.spec, file);\n return target ? declaring(target, exp.imported, depth + 1) : null;\n }\n if (name === 'default') return null;\n for (const spec of mod.stars) {\n const target = await resolveFrom(spec, file);\n const found = target ? await declaring(target, name, depth + 1) : null;\n if (found) return found;\n }\n return null;\n };\n\n const importKey = async (importer: string, imp: Import, depth = 0): Promise<Key | null> => {\n if (imp.imported === '*') return null;\n const target = await resolveFrom(imp.spec, importer);\n return target ? declaring(target, imp.imported, depth) : null;\n };\n\n /** The component a story file's meta stands for. */\n const componentOf = async (entry: IndexEntry): Promise<Key | null> => {\n const mod = info(entry.file);\n if (!mod) return null;\n const byTitle = entry.title.split('/').pop()?.replace(/\\s+/g, '');\n for (const local of [entry.componentName, byTitle]) {\n const imp = local ? mod.imports.get(local) : undefined;\n const key = imp ? await importKey(entry.file, imp) : null;\n if (key) return key;\n }\n return null;\n };\n\n const titles = new Map<string, IndexEntry[]>();\n for (const entry of entries) {\n if (isGallery(entry)) continue;\n const list = titles.get(entry.title);\n if (list) list.push(entry);\n else titles.set(entry.title, [entry]);\n }\n\n const components = new Map<string, Key | null>();\n const byKey = new Map<Key, string[]>();\n for (const [title, list] of titles) {\n let key: Key | null = null;\n for (const file of new Set(list.map((e) => e.file))) {\n key = await componentOf(list.find((e) => e.file === file) as IndexEntry);\n if (key) break;\n }\n components.set(title, key);\n if (key) byKey.set(key, [...(byKey.get(key) ?? []), title]);\n }\n const componentFiles = new Set([...byKey.keys()].map(fileOfKey));\n\n /** The keys `key`'s own source reaches that are other components. */\n const reached = async (key: Key): Promise<Set<Key>> => {\n const out = new Set<Key>();\n const home = fileOfKey(key);\n const homeDir = dirname(home);\n const visited = new Set<string>();\n\n const walkFile = async (file: string, roots: readonly string[] | null): Promise<void> => {\n const mod = info(file);\n if (!mod) return;\n const locals = new Set<string>();\n if (roots === null) {\n for (const name of mod.refs.keys()) locals.add(name);\n for (const name of mod.imports.keys()) locals.add(name);\n } else {\n const queue = [...roots];\n while (queue.length > 0) {\n const name = queue.pop() as string;\n if (locals.has(name)) continue;\n locals.add(name);\n const here = keyOf(file, name);\n if (here !== key && byKey.has(here)) {\n out.add(here);\n continue;\n }\n for (const ref of mod.refs.get(name) ?? []) {\n if (mod.refs.has(ref) || mod.imports.has(ref)) queue.push(ref);\n }\n }\n }\n for (const name of locals) {\n const imp = mod.imports.get(name);\n if (!imp) continue;\n const target = await importKey(file, imp);\n if (target && byKey.has(target)) {\n if (target !== key) out.add(target);\n continue;\n }\n if (!imp.spec.startsWith('.')) continue;\n const helper = await resolveFrom(imp.spec, file);\n if (!helper || visited.has(helper) || componentFiles.has(helper)) continue;\n if (relative(homeDir, helper).startsWith('..')) continue;\n visited.add(helper);\n await walkFile(helper, null);\n }\n };\n\n visited.add(home);\n await walkFile(home, [key.slice(home.length + 1)]);\n return out;\n };\n\n const graph: DepGraph = {};\n for (const [title, key] of components) {\n graph[title] = { source: key ? relative(root, fileOfKey(key)).split(sep).join('/') : null, uses: [], usedBy: [] };\n }\n for (const [title, key] of components) {\n if (!key) continue;\n const uses = new Set<string>();\n for (const target of await reached(key)) {\n for (const other of byKey.get(target) ?? []) if (other !== title) uses.add(other);\n }\n const node = graph[title] as ComponentDeps;\n node.uses = [...uses].sort();\n for (const other of node.uses) graph[other]?.usedBy.push(title);\n }\n for (const node of Object.values(graph)) node.usedBy.sort();\n return Object.fromEntries(Object.entries(graph).sort(([a], [b]) => a.localeCompare(b)));\n },\n };\n}\n\nfunction moduleInfo(code: string, file: string): ModuleInfo {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[cm]?[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n const program = parse(code, { sourceType: 'module', plugins }).program;\n const imports = new Map<string, Import>();\n const exports = new Map<string, Export>();\n const stars: string[] = [];\n const refs = new Map<string, Set<string>>();\n const declare = (name: string, node: t.Node | null | undefined) => refs.set(name, node ? namesIn(node) : new Set());\n\n const declareStatement = (decl: t.Node | null | undefined): string[] => {\n if (!decl) return [];\n switch (decl.type) {\n case 'FunctionDeclaration':\n case 'ClassDeclaration':\n if (!decl.id) return [];\n declare(decl.id.name, decl);\n return [decl.id.name];\n case 'VariableDeclaration':\n return decl.declarations.flatMap((d) => {\n if (d.id.type !== 'Identifier') return [];\n declare(d.id.name, d.init);\n return [d.id.name];\n });\n default:\n return [];\n }\n };\n\n for (const stmt of program.body) {\n switch (stmt.type) {\n case 'ImportDeclaration':\n if (stmt.importKind === 'type') break;\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && spec.importKind === 'type') continue;\n const imported =\n spec.type === 'ImportNamespaceSpecifier' ? '*' : spec.type === 'ImportDefaultSpecifier' ? 'default' : nameOf(spec.imported);\n imports.set(spec.local.name, { spec: stmt.source.value, imported });\n }\n break;\n case 'ExportNamedDeclaration':\n if (stmt.exportKind === 'type') break;\n for (const name of declareStatement(stmt.declaration)) exports.set(name, { kind: 'local', local: name });\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ExportSpecifier' && spec.exportKind === 'type') continue;\n if (spec.type !== 'ExportSpecifier') continue;\n const exported = nameOf(spec.exported);\n const local = nameOf(spec.local);\n exports.set(exported, stmt.source ? { kind: 'from', spec: stmt.source.value, imported: local } : { kind: 'local', local });\n }\n break;\n case 'ExportAllDeclaration':\n if (stmt.exportKind !== 'type') stars.push(stmt.source.value);\n break;\n case 'ExportDefaultDeclaration': {\n const decl = stmt.declaration;\n const named = (decl.type === 'FunctionDeclaration' || decl.type === 'ClassDeclaration') && decl.id ? decl.id.name : null;\n if (named) declare(named, decl);\n else if (decl.type === 'Identifier') {\n exports.set('default', { kind: 'local', local: decl.name });\n break;\n } else declare(DEFAULT_LOCAL, decl);\n exports.set('default', { kind: 'local', local: named ?? DEFAULT_LOCAL });\n break;\n }\n default:\n declareStatement(stmt);\n }\n }\n return { imports, exports, stars, refs };\n}\n\nfunction nameOf(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** Every identifier `node` refers to as a value, JSX tags included. Types and property names are left out. */\nfunction namesIn(node: t.Node): Set<string> {\n const out = new Set<string>();\n const walk = (value: unknown, key?: string): void => {\n if (key !== undefined && TYPE_KEYS.has(key)) return;\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n return;\n }\n if (!value || typeof value !== 'object' || typeof (value as { type?: unknown }).type !== 'string') return;\n const n = value as t.Node;\n if (n.type.startsWith('TS') && !('expression' in n)) return;\n if (n.type === 'Identifier' || n.type === 'JSXIdentifier') {\n out.add(n.name);\n return;\n }\n for (const [k, child] of Object.entries(n)) {\n if (k === 'leadingComments' || k === 'trailingComments' || k === 'innerComments' || k === 'loc') continue;\n if ((n.type === 'MemberExpression' || n.type === 'OptionalMemberExpression') && k === 'property' && !n.computed) continue;\n if (n.type === 'JSXMemberExpression' && k === 'property') continue;\n if ((n.type === 'ObjectProperty' || n.type === 'ObjectMethod' || n.type === 'ClassMethod' || n.type === 'ClassProperty') && k === 'key' && !n.computed) continue;\n if (n.type === 'JSXAttribute' && k === 'name') continue;\n walk(child, k);\n }\n };\n walk(node);\n return out;\n}\n","import { type ParserPlugin, parse } from '@babel/parser';\nimport type * as t from '@babel/types';\nimport { storyId, storyNameFromExport } from '../story/ids.ts';\nimport type { IndexEntry } from '../story/types.ts';\n\ntype Bindings = Map<string, t.Node>;\n\n/** The stories `code` declares, in source order, without running it. `file` is absolute; `autoTitle` titles a meta that names none. */\nexport function indexFile(code: string, file: string, autoTitle: string): IndexEntry[] {\n try {\n const plugins: ParserPlugin[] = ['typescript', 'decorators-legacy', ...(/\\.[jt]sx$/.test(file) ? (['jsx'] as const) : [])];\n return indexProgram(parse(code, { sourceType: 'module', plugins }).program, file, autoTitle);\n } catch (err) {\n throw new Error(`${file}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });\n }\n}\n\nfunction indexProgram(program: t.Program, file: string, autoTitle: string): IndexEntry[] {\n const bindings: Bindings = new Map();\n const wrappers = new Set<string>();\n for (const stmt of program.body) {\n if (stmt.type === 'ImportDeclaration' && stmt.source.value === '@weasel-js/forge') {\n for (const spec of stmt.specifiers) {\n if (spec.type === 'ImportSpecifier' && ['meta', 'story'].includes(exportedName(spec.imported))) {\n wrappers.add(spec.local.name);\n }\n }\n }\n const decl = stmt.type === 'ExportNamedDeclaration' ? stmt.declaration : stmt;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) if (d.id.type === 'Identifier' && d.init) bindings.set(d.id.name, d.init);\n }\n }\n\n let metaNode: t.Node | undefined;\n let metaDoc: string | undefined;\n const exported: { name: string; node: t.Node | undefined; doc: string | undefined }[] = [];\n for (const stmt of program.body) {\n if (stmt.type === 'ExportDefaultDeclaration') {\n metaNode = stmt.declaration;\n metaDoc = docOf(stmt);\n }\n if (stmt.type !== 'ExportNamedDeclaration' || stmt.exportKind === 'type') continue;\n const doc = docOf(stmt);\n const decl = stmt.declaration;\n if (decl?.type === 'VariableDeclaration') {\n for (const d of decl.declarations) {\n if (d.id.type === 'Identifier') exported.push({ name: d.id.name, node: d.init ?? undefined, doc: docOf(d) ?? doc });\n }\n } else if (decl?.type === 'FunctionDeclaration' && decl.id) {\n exported.push({ name: decl.id.name, node: undefined, doc });\n }\n for (const spec of stmt.specifiers) {\n if (spec.type !== 'ExportSpecifier' || spec.exportKind === 'type') continue;\n const name = exportedName(spec.exported);\n const node = stmt.source ? undefined : bindings.get(exportedName(spec.local));\n if (name === 'default') {\n metaNode = node;\n metaDoc ??= doc;\n } else exported.push({ name, node, doc });\n }\n }\n if (!metaNode && !program.body.some(isDefaultExport)) return [];\n\n const meta = objectOf(metaNode, bindings, wrappers);\n const title = stringProp(meta, 'title') ?? autoTitle;\n const include = storyFilter(meta, 'includeStories');\n const exclude = storyFilter(meta, 'excludeStories');\n const componentNode = prop(meta, 'component');\n const componentName = componentNode?.type === 'Identifier' ? componentNode.name : undefined;\n const metaIsolate = isolateOf(meta, bindings, wrappers, 'default');\n const metaTags = tagsOf(meta);\n\n return exported\n .filter(({ name }) => name !== '__namedExportsOrder')\n .filter(({ name }) => (!include || include(name)) && (!exclude || !exclude(name)))\n .map(({ name, node, doc }) => {\n const spec = objectOf(node, bindings, wrappers);\n const isolate = isolateOf(spec, bindings, wrappers, name) ?? metaIsolate;\n const tags = combineTags(metaTags, tagsOf(spec));\n return {\n id: storyId(title, name),\n title,\n name: stringProp(spec, 'name') ?? stringProp(spec, 'storyName') ?? storyNameFromExport(name),\n exportName: name,\n file,\n ...(doc === undefined ? {} : { description: doc }),\n ...(metaDoc === undefined ? {} : { componentDescription: metaDoc }),\n ...(componentName === undefined ? {} : { componentName }),\n ...(isolate === undefined ? {} : { isolate }),\n ...(tags === undefined ? {} : { tags }),\n };\n });\n}\n\n/**\n * The reason `obj` isolates its story: `isolate` on a native meta or story, `parameters.forge.isolate` in CSF.\n * It must be a string literal, because the shell reads it without importing the module.\n */\nfunction isolateOf(obj: t.ObjectExpression | null, bindings: Bindings, wrappers: Set<string>, exportName: string): string | undefined {\n const parameters = objectOf(prop(obj, 'parameters'), bindings, wrappers);\n const forge = objectOf(prop(parameters, 'forge'), bindings, wrappers);\n const value = prop(obj, 'isolate') ?? prop(forge, 'isolate');\n if (value === undefined) return undefined;\n const literal = stringLiteral(value);\n if (literal === undefined) throw new Error(`${exportName}: isolate must be a string literal`);\n return literal;\n}\n\n/** `obj`'s `tags`: the string literals of an array literal. */\nfunction tagsOf(obj: t.ObjectExpression | null): string[] | undefined {\n const value = prop(obj, 'tags');\n if (value?.type !== 'ArrayExpression') return undefined;\n return value.elements.flatMap((e) => (e ? (stringLiteral(e) ?? []) : []));\n}\n\n/** A story's tags as Storybook combines them: the meta's, then its own, where `!tag` removes `tag`. */\nfunction combineTags(meta: string[] | undefined, own: string[] | undefined): string[] | undefined {\n if (meta === undefined && own === undefined) return undefined;\n const out = new Set(meta);\n for (const tag of own ?? []) {\n if (tag.startsWith('!')) out.delete(tag.slice(1));\n else out.add(tag);\n }\n return [...out];\n}\n\n/** The value of a plain string literal or an expression-free template literal. */\nfunction stringLiteral(node: t.Node): string | undefined {\n if (node.type === 'StringLiteral') return node.value;\n if (node.type === 'TemplateLiteral' && node.expressions.length === 0) return node.quasis.map((q) => q.value.cooked ?? q.value.raw).join('');\n return undefined;\n}\n\nfunction isDefaultExport(stmt: t.Statement): boolean {\n if (stmt.type === 'ExportDefaultDeclaration') return true;\n return (\n stmt.type === 'ExportNamedDeclaration' &&\n stmt.specifiers.some((s) => s.type === 'ExportSpecifier' && exportedName(s.exported) === 'default')\n );\n}\n\n/**\n * The JSDoc block immediately above `node`, as prose. A `//` comment is not\n * one: a line comment above an export is as often a note to the author as a\n * description of the story, and printing it in the dossier would be guessing.\n */\nfunction docOf(node: t.Node): string | undefined {\n const comments = node.leadingComments;\n const last = comments?.[comments.length - 1];\n if (last?.type !== 'CommentBlock' || !last.value.startsWith('*')) return undefined;\n const text = last.value\n .slice(1)\n .split('\\n')\n .map((line) => line.replace(/^\\s*\\*/, '').trim())\n .join('\\n')\n .trim();\n return text || undefined;\n}\n\nfunction exportedName(node: t.Identifier | t.StringLiteral): string {\n return node.type === 'Identifier' ? node.name : node.value;\n}\n\n/** The object literal `node` evaluates to, through casts, `meta(…)`/`story(…)` and top-level `const`s. */\nfunction objectOf(node: t.Node | undefined, bindings: Bindings, wrappers: Set<string>, depth = 0): t.ObjectExpression | null {\n if (!node || depth > 16) return null;\n switch (node.type) {\n case 'ObjectExpression':\n return node;\n case 'TSSatisfiesExpression':\n case 'TSAsExpression':\n case 'TSTypeAssertion':\n case 'TSNonNullExpression':\n case 'ParenthesizedExpression':\n return objectOf(node.expression, bindings, wrappers, depth + 1);\n case 'CallExpression':\n return node.callee.type === 'Identifier' && wrappers.has(node.callee.name)\n ? objectOf(node.arguments[0], bindings, wrappers, depth + 1)\n : null;\n case 'Identifier':\n return objectOf(bindings.get(node.name), bindings, wrappers, depth + 1);\n default:\n return null;\n }\n}\n\nfunction prop(obj: t.ObjectExpression | null, key: string): t.Node | undefined {\n for (const p of obj?.properties ?? []) {\n if (p.type !== 'ObjectProperty' || p.computed) continue;\n const name = p.key.type === 'Identifier' ? p.key.name : p.key.type === 'StringLiteral' ? p.key.value : null;\n if (name === key) return p.value;\n }\n return undefined;\n}\n\nfunction stringProp(obj: t.ObjectExpression | null, key: string): string | undefined {\n const value = prop(obj, key);\n return value?.type === 'StringLiteral' ? value.value : undefined;\n}\n\n/** `includeStories`/`excludeStories` as a predicate, when written as a string array or a regex literal. */\nfunction storyFilter(obj: t.ObjectExpression | null, key: string): ((name: string) => boolean) | null {\n const value = prop(obj, key);\n if (value?.type === 'RegExpLiteral') {\n const re = new RegExp(value.pattern, value.flags.replace(/[gy]/g, ''));\n return (name) => re.test(name);\n }\n if (value?.type === 'ArrayExpression' && value.elements.every((e) => e?.type === 'StringLiteral')) {\n const names = new Set(value.elements.map((e) => (e as t.StringLiteral).value));\n return (name) => names.has(name);\n }\n return null;\n}\n","import { fileURLToPath } from 'node:url';\nimport type { Plugin } from 'vite';\n\n/** Storybook specifiers a CSF file may import, and the forge entry each answers to. */\nconst SHIMS: readonly (readonly [RegExp, string])[] = [\n [/^@?storybook\\/preview-api$/, '@weasel-js/forge/preview-api'],\n [/^@?storybook\\/test$/, '@weasel-js/forge/play'],\n];\n\n/** Points the Storybook runtime specifiers a CSF file may carry at forge's own entries. */\nexport function storybookShims(): Plugin {\n // Resolved from forge's own location, through the app's aliases, so a monorepo reaches source and an install reaches dist.\n return {\n name: 'weaselforge:storybook-shims',\n enforce: 'pre',\n resolveId(id) {\n const hit = SHIMS.find(([pattern]) => pattern.test(id));\n if (!hit) return undefined;\n return this.resolve(hit[1], fileURLToPath(import.meta.url), { skipSelf: true });\n },\n };\n}\n","import { existsSync, globSync, readFileSync, statSync } from 'node:fs';\nimport { basename, dirname, join, matchesGlob, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { Logger, Plugin, ViteDevServer } from 'vite';\nimport type { IndexEntry } from '../story/types.ts';\nimport { hoistPages, writePages } from './build.ts';\nimport { autoTitle } from './autoTitle.ts';\nimport { createDepGraph, type DepGraphBuilder, type ResolveImport } from './depGraph.ts';\nimport { html } from './html.ts';\nimport { indexFile } from './indexFile.ts';\nimport { storybookShims } from './storybookShims.ts';\n\nexport interface ForgeOptions {\n /** Globs of story files, relative to the vite root. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root. Only frame documents import it. Optional. */\n frameConfig?: string;\n /** Path to the shell config module, relative to the vite root. Only the workshop page imports it. Optional. */\n shellConfig?: string;\n /** Alias Storybook's runtime modules to forge shims (Task 13). Default true. */\n storybookShims?: boolean;\n}\n\nconst PREFIX = 'virtual:forge/';\nconst MODULES = new Set(['index.js', 'importers.js', 'deps.js', 'frame-config.js', 'shell-config.js', 'shell-entry.js', 'frame-entry.js']);\nconst PAGES: Record<string, string> = { '/': 'shell-entry.js', '/index.html': 'shell-entry.js', '/frame.html': 'frame-entry.js' };\n\n/** forge's shell and frame entry modules: source beside this file in a checkout, the built entries in an install. */\nfunction ownEntries(): string[] {\n const here = fileURLToPath(import.meta.url);\n for (let dir = dirname(here); dir !== dirname(dir); dir = dirname(dir)) {\n const manifest = join(dir, 'package.json');\n if (!existsSync(manifest) || (JSON.parse(readFileSync(manifest, 'utf8')) as { name?: string }).name !== '@weasel-js/forge') {\n continue;\n }\n const source = !relative(join(dir, 'src'), here).startsWith('..');\n return ['shell', 'frame'].map((realm) => join(dir, source ? `src/${realm}/index.ts` : `dist/${realm}/index.js`));\n }\n return [];\n}\n\nexport function forge(options: ForgeOptions): Plugin[] {\n let root = process.cwd();\n let base = '/';\n let byFile: Map<string, IndexEntry[]> | null = null;\n let logger: Logger | undefined;\n let deps: DepGraphBuilder | null = null;\n /** The graph last served or pushed; null until a page first asks for it, so no edit rebuilds it before then. */\n let depsSent: string | null = null;\n let depsPending: Promise<void> | null = null;\n\n const glob = (): string[] => {\n const files = options.stories.flatMap((pattern) =>\n globSync(pattern, { cwd: root, exclude: (name) => basename(String(name)) === 'node_modules' })\n .map((f) => resolve(root, f))\n // A failed story run leaves `__screenshots__/<file>.stories.tsx/` directories that match the globs.\n .filter((f) => statSync(f).isFile())\n .sort(),\n );\n return [...new Set(files)];\n };\n const matches = (file: string): boolean => {\n const path = relative(root, file).split(sep).join('/');\n return !path.split('/').includes('node_modules') && options.stories.some((pattern) => matchesGlob(path, pattern));\n };\n const read = (file: string) => indexFile(readFileSync(file, 'utf8'), file, autoTitle(file, root, options.stories));\n const logError = (err: unknown) => logger?.error(`[forge] ${err instanceof Error ? err.message : String(err)}`);\n /** A file that fails to parse stays in the map with no entries, so an edit that fixes it re-indexes it. */\n const files = (): Map<string, IndexEntry[]> => {\n byFile ??= new Map(\n glob().map((file) => {\n try {\n return [file, read(file)];\n } catch (err) {\n logError(err);\n return [file, []];\n }\n }),\n );\n return byFile;\n };\n const index = () => [...files().values()].flat();\n const depGraph = (): DepGraphBuilder => (deps ??= createDepGraph({ root, read: (file) => readFileSync(file, 'utf8') }));\n\n const configModule = (path: string | undefined) =>\n path ? `export { default } from ${JSON.stringify(resolve(root, path))};\\n` : 'export default {};\\n';\n\n const modules: Record<string, () => string> = {\n 'index.js': () => `export default ${JSON.stringify(index())};\\n`,\n 'importers.js': () => {\n const lines = [...files()]\n .filter(([, entries]) => entries.length > 0)\n .map(([file]) => ` ${JSON.stringify(file)}: () => import(${JSON.stringify(file)}),`);\n return `export default {\\n${lines.join('\\n')}\\n};\\n`;\n },\n 'frame-config.js': () => configModule(options.frameConfig),\n 'shell-config.js': () => configModule(options.shellConfig),\n 'shell-entry.js': () => `import { mountWorkshop } from '@weasel-js/forge/shell';\nimport '@weasel-js/labkit/styles.css';\nimport '@weasel-js/forge/shell.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport config from 'virtual:forge/shell-config.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nconst workshop = mountWorkshop({\n index,\n importers,\n setup,\n config,\n frameUrl: ${JSON.stringify(`${base}frame.html`)},\n stories: ${JSON.stringify(options.stories)},\n});\nimport.meta.hot?.on('forge:index', (next) => workshop.setIndex(next));\n// Read from source on first request, so the graph costs nothing until the page is up.\nimport('virtual:forge/deps.js').then((m) => workshop.setDependencies(m.default));\nimport.meta.hot?.on('forge:deps', (next) => workshop.setDependencies(next));\n// A story edit reaches here as an update of the importers module, whose fresh import() URLs carry the new\n// timestamps; the file it names arrives just before, so the reload waits for the importers that can fetch it.\nconst stale = new Set();\nimport.meta.hot?.on('forge:story', ({ file }) => stale.add(file));\nimport.meta.hot?.accept('virtual:forge/importers.js', (next) => {\n if (!next) return;\n workshop.setImporters(next.default);\n for (const file of stale) workshop.reloadStory(file);\n stale.clear();\n});\n`,\n 'frame-entry.js': () => `import { mountFrame } from '@weasel-js/forge/frame';\nimport '@weasel-js/forge/frame.css';\nimport index from 'virtual:forge/index.js';\nimport importers from 'virtual:forge/importers.js';\nimport setup from 'virtual:forge/frame-config.js';\n\nmountFrame({ index, importers, setup });\n// The importers module is shared with the workshop page, which accepts a story edit in place; a frame document\n// showing the old module reloads instead, and without this the edit would dead-end here and reload every page.\nimport.meta.hot?.accept('virtual:forge/importers.js', () => location.reload());\n`,\n };\n\n const invalidate = (server: ViteDevServer, names: readonly string[]): void => {\n for (const env of Object.values(server.environments)) {\n for (const name of names) {\n const mod = env.moduleGraph.getModuleById(`\\0${PREFIX}${name}`);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n }\n };\n\n /** Rebuilds the graph after an edit and pushes it when it changed. Edits landing while one runs share the next. */\n function redeps(server: ViteDevServer): void {\n if (depsSent === null || depsPending) return;\n const resolve: ResolveImport = async (spec, importer) =>\n (await server.environments.client.pluginContainer.resolveId(spec, importer))?.id ?? null;\n depsPending = Promise.resolve()\n .then(async () => {\n const graph = await depGraph().build(index(), resolve);\n const json = JSON.stringify(graph);\n if (json === depsSent) return;\n depsSent = json;\n invalidate(server, ['deps.js']);\n server.ws.send({ type: 'custom', event: 'forge:deps', data: graph });\n })\n .catch(logError)\n .finally(() => {\n depsPending = null;\n });\n }\n\n /** Re-reads a story file after `event`; true when the index changed. */\n function reindex(server: ViteDevServer, file: string, event: 'add' | 'change' | 'unlink'): boolean {\n const current = files();\n if (event === 'change' && current.has(file)) server.ws.send({ type: 'custom', event: 'forge:story', data: { file } });\n if (event === 'change' && !current.has(file)) return false;\n if (event === 'add' && !matches(file)) return false;\n if (event === 'unlink' && !current.has(file)) return false;\n\n const before = JSON.stringify(index());\n if (event === 'unlink') {\n current.delete(file);\n } else {\n try {\n current.set(file, read(file));\n } catch (err) {\n logError(err);\n return false;\n }\n }\n const next = index();\n if (JSON.stringify(next) === before) return false;\n\n invalidate(server, ['index.js', 'importers.js']);\n server.ws.send({ type: 'custom', event: 'forge:index', data: next });\n return true;\n }\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge',\n config(config, { command }) {\n const at = resolve(config.root ?? process.cwd());\n // The pages are virtual, so vite's scan finds no entry of its own to crawl for dependencies.\n const entries = [\n ...options.stories,\n ...[options.frameConfig, options.shellConfig].flatMap((path) => (path ? [resolve(at, path)] : [])),\n ...ownEntries(),\n ];\n const optimizeDeps = { entries };\n if (command !== 'build') return { optimizeDeps };\n return { optimizeDeps, build: { rolldownOptions: { input: writePages(at) } } };\n },\n generateBundle: {\n order: 'post',\n handler(_, bundle) {\n hoistPages(bundle, (file) => this.emitFile(file));\n },\n },\n configResolved(config) {\n root = config.root;\n base = config.base;\n logger = config.logger;\n byFile = null;\n deps = null;\n depsSent = null;\n },\n resolveId(id) {\n return id.startsWith(PREFIX) && MODULES.has(id.slice(PREFIX.length)) ? `\\0${id}` : undefined;\n },\n async load(id) {\n if (!id.startsWith(`\\0${PREFIX}`)) return undefined;\n const name = id.slice(PREFIX.length + 1);\n if (name !== 'deps.js') return modules[name]?.();\n const graph = await depGraph().build(index(), async (spec, importer) => (await this.resolve(spec, importer))?.id ?? null);\n depsSent = JSON.stringify(graph);\n return `export default ${depsSent};\\n`;\n },\n configureServer(server) {\n server.watcher.add([...files().keys()]);\n for (const event of ['add', 'change', 'unlink'] as const) {\n server.watcher.on(event, (path) => {\n const file = resolve(path);\n const indexed = reindex(server, file, event);\n // A new file can answer an import that resolved to nothing before.\n const added = event === 'add' && /\\.[cm]?[jt]sx?$/.test(file) && !file.split(sep).includes('node_modules');\n if (added) depGraph().reset();\n const read = added || (event !== 'add' && depGraph().invalidate(file));\n if (indexed || read) redeps(server);\n });\n }\n server.middlewares.use((req, res, next) => {\n const url = req.url ?? '/';\n const path = url.split('?')[0] ?? '/';\n const prefix = base.endsWith('/') ? base.slice(0, -1) : base;\n const page = path === prefix ? '/' : path.startsWith(`${prefix}/`) ? path.slice(prefix.length) : null;\n const entry = req.method === 'GET' && page !== null ? PAGES[page] : undefined;\n if (!entry) return next();\n server.transformIndexHtml(url, html(entry)).then(\n (doc) => {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html');\n res.end(doc);\n },\n (err: unknown) => next(err),\n );\n });\n },\n },\n ];\n}\n","import { matchesGlob, relative, resolve, sep } from 'node:path';\nimport type { Plugin } from 'vite';\nimport { autoTitle } from './autoTitle.ts';\nimport { indexFile } from './indexFile.ts';\nimport { storybookShims } from './storybookShims.ts';\n\nexport interface ForgeTestOptions {\n /** Globs of story files, relative to the vite root. Each matching file becomes a test file. */\n stories: string[];\n /** Path to the frame config module, relative to the vite root; it sets up every story. Optional. */\n frameConfig?: string;\n /** Alias Storybook's runtime modules to forge shims. Default true. */\n storybookShims?: boolean;\n}\n\nconst TIMEOUT_MS = 15_000;\n\n/**\n * A vite plugin for vitest browser mode: every story in a matching file runs as one test, rendered and played\n * through forge's frame in the test page itself.\n */\nexport function forgeTest(options: ForgeTestOptions): Plugin[] {\n let root = process.cwd();\n\n const matches = (id: string): boolean => {\n if (id.startsWith('\\0') || id.includes('?')) return false;\n const path = relative(root, id).split(sep).join('/');\n if (path.startsWith('../') || path.split('/').includes('node_modules')) return false;\n return options.stories.some((pattern) => matchesGlob(path, pattern));\n };\n\n return [\n ...(options.storybookShims === false ? [] : [storybookShims()]),\n {\n name: 'weaselforge:test',\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n transform(code, id) {\n if (!matches(id)) return undefined;\n const title = autoTitle(id, root, options.stories);\n const entries = indexFile(code, id, title);\n if (entries.length === 0) return undefined;\n const q = (value: string) => JSON.stringify(value);\n // The module comes from its own URL at test time: vitest imports a test file with a cache-busting query,\n // so a static self-import would evaluate the file a second time and register every test twice.\n const lines = [\n '',\n `import { test as __forge_test } from \"vitest\";`,\n `import { page as __forge_page } from \"vitest/browser\";`,\n `import { runStory as __forge_runStory } from \"@weasel-js/forge/test\";`,\n // shell.css draws the story host; frame.css still holds the boundary's fault rule.\n `import \"@weasel-js/forge/shell.css\";`,\n `import \"@weasel-js/forge/frame.css\";`,\n ...(options.frameConfig ? [`import __forge_frame_config from ${q(resolve(root, options.frameConfig))};`] : []),\n `const __forge_file = ${q(id)};`,\n `const __forge_title = ${q(title)};`,\n `const __forge_timeout = ${TIMEOUT_MS};`,\n 'const __forge_options = {',\n ` setup: ${options.frameConfig ? '__forge_frame_config' : 'undefined'},`,\n ' viewport: (width, height) => __forge_page.viewport(width, height),',\n '};',\n 'const __forge_run = async (exportName) => __forge_runStory(await import(/* @vite-ignore */ import.meta.url), exportName, __forge_file, __forge_title, __forge_options);',\n // An isolated story asks for a document of its own, which the test page is not; its reason goes in the name.\n ...entries.map((entry) =>\n entry.isolate === undefined\n ? `__forge_test(${q(entry.name)}, () => __forge_run(${q(entry.exportName)}), __forge_timeout);`\n : `__forge_test.skip(${q(`${entry.name} (isolated: ${entry.isolate})`)}, () => {});`,\n ),\n ];\n return { code: `${code}\\n${lines.join('\\n')}\\n`, map: null };\n },\n },\n ];\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/forge",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "A component workshop on labkit: stories in isolated frames, controls and state in lab trials.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -54,7 +54,7 @@
54
54
  "url": "https://github.com/orochi235/weasel/issues"
55
55
  },
56
56
  "engines": {
57
- "node": ">=22"
57
+ "node": "^22.18.0 || >=24.11.0"
58
58
  },
59
59
  "files": [
60
60
  "dist",
@@ -65,25 +65,25 @@
65
65
  "build": "tsup"
66
66
  },
67
67
  "dependencies": {
68
- "@babel/parser": "^7.29.0",
68
+ "@babel/parser": "^8.0.6",
69
69
  "@testing-library/dom": "^10.4.0",
70
70
  "@testing-library/user-event": "^14.6.1",
71
- "@vitest/expect": "^4.1.6",
72
- "@weasel-js/theme": "1.6.0",
73
- "@weasel-js/ui": "1.6.0",
71
+ "@vitest/expect": "^5.0.2",
72
+ "@weasel-js/theme": "1.7.0",
73
+ "@weasel-js/ui": "1.7.0",
74
74
  "axe-core": "^4.13.0",
75
75
  "chai": "^6.2.2"
76
76
  },
77
77
  "devDependencies": {
78
- "@babel/types": "^7.29.0"
78
+ "@babel/types": "^8.0.6"
79
79
  },
80
80
  "peerDependencies": {
81
- "@weasel-js/core": "1.6.0",
82
- "@weasel-js/labkit": "1.6.0",
81
+ "@weasel-js/core": "1.7.0",
82
+ "@weasel-js/labkit": "1.7.0",
83
83
  "react": "^19.0.0",
84
84
  "react-dom": "^19.0.0",
85
85
  "vite": "^8.0.0",
86
- "vitest": "^4.0.0"
86
+ "vitest": "^4.0.0 || ^5.0.0"
87
87
  },
88
88
  "peerDependenciesMeta": {
89
89
  "vitest": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/trialFrames.ts","../src/shell/StoryGlobalsContext.ts","../src/shell/cssVars/overrides.ts","../src/shell/globals.ts","../src/shell/TrialHost.tsx","../src/shell/StoryTrial.tsx"],"names":["createContext","useContext","labGlobals","useRef","useMemo","useEffect","useCallback","jsx"],"mappings":"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","file":"chunk-A4JOEGYQ.js","sourcesContent":["import { createContext, type RefObject, useCallback, useContext, useSyncExternalStore } from 'react';\nimport type { A11yReport, CapturedPicture, CssVarReport, ToFrame, Viewport } from '../protocol/messages';\n\ntype Send = (msg: ToFrame) => void;\n\n/** What an axe run in the frame came back with. */\nexport type A11yOutcome = { ok: true; report: A11yReport } | { ok: false; message: string };\n\n/** The half of a trial's frame that answers a request: each call is one round trip over the frame's channel. */\nexport interface TrialFrameCalls {\n send: Send;\n audit: () => Promise<A11yOutcome>;\n /** Rejects when the frame could not draw itself, or went away before it did. */\n capture: () => Promise<CapturedPicture>;\n}\n\n/** What trial chrome can reach of the frame its trial shows. */\nexport interface TrialFrame {\n /** Null while no frame is connected. */\n send: Send | null;\n /** The frame's latest `vars` report. */\n vars: readonly CssVarReport[];\n /** Runs axe over the story and records the answer as `a11y`. Null while no frame is connected. */\n audit: (() => Promise<A11yOutcome>) | null;\n /** What the last audit found; null until one has run against the connected frame. */\n a11y: A11yOutcome | null;\n /** The story's own picture, for an export to draw over. Null while no frame is connected. */\n capture: (() => Promise<CapturedPicture>) | null;\n /** The story's content box, as the frame last measured it; null until it has. */\n size: Viewport | null;\n}\n\n/** Each trial's frame, keyed by trial id: `FrameView` connects and reports, trial chrome reads. */\nexport interface TrialFrames {\n /** Returns a disconnect that does nothing once a newer connection replaced this one. */\n connect(trialId: string, calls: TrialFrameCalls): () => void;\n report(trialId: string, vars: readonly CssVarReport[]): void;\n reportA11y(trialId: string, outcome: A11yOutcome): void;\n reportSize(trialId: string, size: Viewport): void;\n /** The element a trial's frame is mounted in — stable across the frame reloads that replace the link,\n * because an annotation target's ref has to outlive them. */\n hostRef(trialId: string): RefObject<HTMLElement | null>;\n get(trialId: string): TrialFrame;\n subscribe(listener: () => void): () => void;\n}\n\nconst NO_FRAME: TrialFrame = { send: null, vars: [], audit: null, a11y: null, capture: null, size: null };\n\nexport function createTrialFrames(): TrialFrames {\n const frames = new Map<string, TrialFrame>();\n const hosts = new Map<string, RefObject<HTMLElement | null>>();\n const listeners = new Set<() => void>();\n const changed = () => {\n for (const listener of [...listeners]) listener();\n };\n const patch = (trialId: string, next: Partial<TrialFrame>) => {\n const frame = frames.get(trialId);\n if (!frame) return;\n frames.set(trialId, { ...frame, ...next });\n changed();\n };\n return {\n connect(trialId, calls) {\n const held = frames.get(trialId);\n frames.set(trialId, {\n send: calls.send,\n vars: [],\n audit: calls.audit,\n a11y: null,\n capture: calls.capture,\n size: held?.size ?? null,\n });\n changed();\n return () => {\n if (frames.get(trialId)?.send !== calls.send) return;\n frames.delete(trialId);\n changed();\n };\n },\n report: (trialId, vars) => patch(trialId, { vars }),\n reportA11y: (trialId, a11y) => patch(trialId, { a11y }),\n reportSize(trialId, size) {\n const frame = frames.get(trialId) ?? NO_FRAME;\n if (frame.size?.width === size.width && frame.size?.height === size.height) return;\n frames.set(trialId, { ...frame, size });\n changed();\n },\n hostRef(trialId) {\n let ref = hosts.get(trialId);\n if (!ref) {\n ref = { current: null };\n hosts.set(trialId, ref);\n }\n return ref;\n },\n get: (trialId) => frames.get(trialId) ?? NO_FRAME,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n\nexport const TrialFramesContext = createContext<TrialFrames | null>(null);\n\n/** The frame of the trial `trialId` names, re-read when it connects or reports. */\nexport function useTrialFrame(trialId: string): TrialFrame {\n const frames = useContext(TrialFramesContext);\n const subscribe = useCallback((listener: () => void) => frames?.subscribe(listener) ?? (() => {}), [frames]);\n const read = () => frames?.get(trialId) ?? NO_FRAME;\n return useSyncExternalStore(subscribe, read, read);\n}\n","import { createContext } from 'react';\nimport type { Globals } from '../protocol/messages';\n\n/** The lab's global values, which a trial's pins override. A change reaches open frames without replacing instruments. */\nexport const StoryGlobalsContext = createContext<Globals>({});\n","import { usePersistedState } from '@weasel-js/labkit';\n\nexport type CssOverrides = Readonly<Record<string, string>>;\n\nconst NONE: CssOverrides = {};\n\n/** The CSS variable overrides of the trial this is rendered inside, persisted with it. */\nexport function useCssOverrides() {\n return usePersistedState<CssOverrides>('fg-css-overrides', NONE, { scope: 'trial' });\n}\n","import { type ConfigSchema, f } from '@weasel-js/labkit/config';\nimport type { Globals } from '../protocol/messages';\n\n/** One global the workshop's toolbar sets for every story, and a trial may pin for its own. */\nexport interface GlobalDeclaration {\n label: string;\n options: readonly { value: string; label: string }[];\n default: string;\n /** Another global's key: the toolbar shows this one in a popover beside that one rather than in the bar itself. */\n under?: string;\n}\n\nexport type GlobalDeclarations = Readonly<Record<string, GlobalDeclaration>>;\n\n/** The config group every story schema gains, holding the trial's pins. A story never sees it. */\nexport const GLOBALS_KEY = '$globals';\n/** A pin's value when the trial follows the lab. */\nexport const FOLLOW_LAB = 'lab';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const isGlobalsPath = (path: string): boolean => path === GLOBALS_KEY || path.startsWith(`${GLOBALS_KEY}.`);\n\n/** The lab's values from what was stored: declared keys only, and a value no option offers falls back to the default. */\nexport function labGlobals(declarations: GlobalDeclarations, stored: unknown): Globals {\n const from = isRecord(stored) ? stored : {};\n return Object.fromEntries(\n Object.entries(declarations).map(([key, declaration]) => {\n const value = from[key];\n return [key, declaration.options.some((option) => option.value === value) ? value : declaration.default];\n }),\n );\n}\n\n/** The lab's values, overridden by the pins in a trial's config that do not follow the lab. */\nexport function effectiveGlobals(lab: Globals, pins: unknown): Globals {\n if (!isRecord(pins)) return lab;\n const pinned = Object.entries(pins).filter(([key, value]) => key in lab && value !== FOLLOW_LAB);\n return pinned.length === 0 ? lab : { ...lab, ...Object.fromEntries(pinned) };\n}\n\n/**\n * The config a story receives: the trial's, without its pins. Returns `previous` when every other entry is the same,\n * so a change to a pin alone is not a change to the story's config.\n */\nexport function storyConfig(config: unknown, previous?: unknown): unknown {\n if (!isRecord(config) || !(GLOBALS_KEY in config)) return config;\n const rest = Object.fromEntries(Object.entries(config).filter(([key]) => key !== GLOBALS_KEY));\n if (isRecord(previous)) {\n const keys = Object.keys(rest);\n if (keys.length === Object.keys(previous).length && keys.every((key) => rest[key] === previous[key])) return previous;\n }\n return rest;\n}\n\n/** `schema` with a `$globals` group appended: one leaf per declaration, following the lab until pinned. */\nexport function withGlobals(schema: ConfigSchema<unknown>, declarations: GlobalDeclarations): ConfigSchema<unknown> {\n const entries = Object.entries(declarations);\n if (entries.length === 0) return schema;\n const leaves = Object.fromEntries(\n entries.map(([key, declaration]) => [\n key,\n f.enum(FOLLOW_LAB, [{ value: FOLLOW_LAB, label: 'Lab' }, ...declaration.options]).label(declaration.label),\n ]),\n );\n // An empty group name contributes rows without a heading of its own, under the section's.\n const group = f.group(leaves).label('').section('Globals', { layout: 'inline', pack: 'pairs' });\n return f.schema({ ...schema.nodes, [GLOBALS_KEY]: group }) as ConfigSchema<unknown>;\n}\n","import { LabBoundary, TrialIdContext } from '@weasel-js/labkit';\nimport { OverlayPortalProvider } from '@weasel-js/ui';\nimport {\n type ReactNode,\n type RefObject,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { runAxe } from '../frame/a11y';\nimport { captureElement } from '../frame/capture';\nimport { createOverrides, type Overrides, scanCssVars } from '../frame/cssVars';\nimport type { FrameSetup } from '../frame/FrameController';\nimport { createGlobalsTarget } from '../frame/globalsTarget';\nimport type { CssVarReport, Globals, Layout, ToFrame } from '../protocol/messages';\nimport { useCssOverrides } from './cssVars/overrides';\nimport { effectiveGlobals, GLOBALS_KEY } from './globals';\nimport { StoryGlobalsContext } from './StoryGlobalsContext';\nimport { type A11yOutcome, TrialFramesContext } from './trialFrames';\n\nexport interface TrialHostProps {\n layout: Layout;\n setup: FrameSetup;\n /** The trial's config, read for its `$globals` pins. */\n config: unknown;\n /** Rendered once the host element exists, with the globals in force on it. */\n children: (globals: Globals) => ReactNode;\n /** Receives the host element, for a caller with no trial to reach it through. */\n hostRef?: RefObject<HTMLElement | null>;\n /** Called once the children's first commit has painted. */\n onRendered?: () => void;\n}\n\n/** How far past the viewport a story stays mounted, so a small scroll back does not remount it. */\nconst IN_VIEW_MARGIN = '50%';\nconst VARS_SETTLE_MS = 100;\n\n/** Whether `ref`'s element is near the viewport; true where the browser cannot say. */\nfunction useInView(ref: RefObject<Element | null>): boolean {\n const [inView, setInView] = useState(true);\n useEffect(() => {\n const el = ref.current;\n if (!el || typeof IntersectionObserver === 'undefined') return;\n const observer = new IntersectionObserver(\n (entries) => {\n const last = entries.at(-1);\n if (last) setInView(last.isIntersecting);\n },\n { rootMargin: IN_VIEW_MARGIN },\n );\n observer.observe(el);\n return () => observer.disconnect();\n }, [ref]);\n return inView;\n}\n\n/** A selector matching only the element carrying `id`. */\nconst scopeOf = (id: string) => `[data-fg-host=\"${id}\"]`;\n\n/**\n * One story's box in the workshop document: what a frame document was, as an element. It applies the globals to\n * itself, keeps its CSS variable overrides on itself, contains fixed-position descendants and portals, reports its\n * vars, size and audits to the trial's frame registry, and unmounts its content while out of view.\n */\nexport function TrialHost({ layout, setup, config, children, hostRef, onRendered }: TrialHostProps) {\n const trialId = useContext(TrialIdContext);\n const frames = useContext(TrialFramesContext);\n const labGlobals = useContext(StoryGlobalsContext);\n const pins = (config as Record<string, unknown> | null | undefined)?.[GLOBALS_KEY];\n const globals = useMemo(() => effectiveGlobals(labGlobals, pins), [labGlobals, pins]);\n const [persisted] = useCssOverrides();\n const reactId = useId();\n const hostId = trialId ?? reactId;\n const [host, setHost] = useState<HTMLDivElement | null>(null);\n const elementRef = useRef<HTMLDivElement | null>(null);\n const inView = useInView(elementRef);\n const [pending, setPending] = useState(true);\n const overridesRef = useRef<Overrides | null>(null);\n const latest = useRef({ setup, onRendered });\n latest.current = { setup, onRendered };\n\n // Everything the host owns for its lifetime: the globals target, the overrides rule, the registry connection.\n useLayoutEffect(() => {\n if (!host) return;\n const doc = host.ownerDocument;\n const scope = scopeOf(hostId);\n const { cssVarsScope } = latest.current.setup;\n const overrides = createOverrides(doc, cssVarsScope ? `${scope}, ${scope} :is(${cssVarsScope})` : scope);\n overridesRef.current = overrides;\n let lastVars: CssVarReport[] | null = null;\n let reported: string | null = null;\n const publish = (vars: CssVarReport[]) => {\n lastVars = vars;\n const key = JSON.stringify(vars);\n if (key === reported) return;\n reported = key;\n if (trialId) frames?.report(trialId, vars);\n };\n const scan = () => publish(scanCssVars(doc, overrides.has, host));\n let settleTimer: ReturnType<typeof setTimeout> | undefined;\n const ownMutation = (record: MutationRecord) =>\n overrides.owns(record.target) ||\n (record.type === 'childList' &&\n [...record.addedNodes, ...record.removedNodes].length > 0 &&\n [...record.addedNodes, ...record.removedNodes].every(overrides.owns));\n const mutations =\n typeof MutationObserver === 'undefined'\n ? null\n : new MutationObserver((records) => {\n if (records.every(ownMutation)) return;\n clearTimeout(settleTimer);\n settleTimer = setTimeout(scan, VARS_SETTLE_MS);\n });\n mutations?.observe(host, { subtree: true, childList: true, characterData: true, attributes: true });\n\n const send = (msg: ToFrame) => {\n if (msg.type !== 'vars.set') return;\n overrides.set(msg.name, msg.value);\n const at = lastVars?.findIndex((v) => v.name === msg.name) ?? -1;\n if (!lastVars || at < 0) return;\n const vars = lastVars.slice();\n vars[at] = { ...vars[at]!, overridden: overrides.has(msg.name) };\n scan();\n };\n const audit = async (): Promise<A11yOutcome> => {\n let outcome: A11yOutcome;\n try {\n outcome = { ok: true, report: await runAxe(host, { page: false }) };\n } catch (error) {\n outcome = { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n if (trialId) frames?.reportA11y(trialId, outcome);\n return outcome;\n };\n const capture = async () => captureElement(host);\n const disconnect = frames && trialId ? frames.connect(trialId, { send, audit, capture }) : () => {};\n if (frames && trialId) frames.hostRef(trialId).current = host;\n\n const sizes =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n const { width, height } = host.getBoundingClientRect();\n if (trialId) frames?.reportSize(trialId, { width: Math.ceil(width), height: Math.ceil(height) });\n });\n sizes?.observe(host);\n\n return () => {\n disconnect();\n sizes?.disconnect();\n mutations?.disconnect();\n clearTimeout(settleTimer);\n overrides.dispose();\n overridesRef.current = null;\n if (frames && trialId && frames.hostRef(trialId).current === host) frames.hostRef(trialId).current = null;\n };\n }, [host, hostId, trialId, frames]);\n\n // The overrides the trial persisted, put back on every mount and kept in step with the panel's edits.\n const applied = useRef<Record<string, string>>({});\n useLayoutEffect(() => {\n const overrides = overridesRef.current;\n if (!overrides) return;\n for (const name of Object.keys(applied.current)) if (!(name in persisted)) overrides.set(name, null);\n for (const [name, value] of Object.entries(persisted)) overrides.set(name, value);\n applied.current = { ...persisted };\n }, [host, persisted]);\n\n useLayoutEffect(() => {\n if (!host) return;\n const target = createGlobalsTarget(host, scopeOf(hostId));\n latest.current.setup.applyGlobals?.(globals, target);\n return () => target.dispose();\n }, [host, hostId, globals]);\n\n // The host is hidden until its first commit has painted with its fonts, so a new trial never shows a jump.\n const announced = useRef(false);\n useEffect(() => {\n if (!host || !inView || announced.current) return;\n announced.current = true;\n let canceled = false;\n const done = () => {\n if (canceled) return;\n setPending(false);\n latest.current.onRendered?.();\n };\n const { fonts } = host.ownerDocument;\n if (!fonts) {\n done();\n return;\n }\n const afterPaint = () => requestAnimationFrame(done);\n void fonts.ready.then(afterPaint, afterPaint);\n return () => {\n canceled = true;\n };\n }, [host, inView]);\n\n return (\n <div\n ref={(el) => {\n elementRef.current = el;\n if (hostRef) hostRef.current = el;\n setHost(el);\n }}\n className=\"fg-story\"\n data-fg-host={hostId}\n data-fg-layout={layout}\n data-pending={pending || undefined}\n >\n {host && inView ? (\n // The workshop is itself a lab; below the boundary a story sees no lab, trial or theme above it, as in a\n // document of its own.\n <LabBoundary>\n <OverlayPortalProvider container={host}>{children(globals)}</OverlayPortalProvider>\n </LabBoundary>\n ) : null}\n </div>\n );\n}\n","import type { RenderContext } from '@weasel-js/labkit';\nimport { type RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport type { FrameSetup } from '../frame/FrameController';\nimport { StoryHost } from '../frame/StoryHost';\nimport type { Globals } from '../protocol/messages';\nimport type { LoadedStory, StoryContext } from '../story/types';\nimport { isGlobalsPath, storyConfig } from './globals';\nimport { TrialHost } from './TrialHost';\n\nexport interface StoryTrialProps {\n story: LoadedStory;\n setup: FrameSetup;\n /** The trial's config and state; the story reads and writes them through its `StoryContext`. */\n ctx: Pick<RenderContext<unknown, unknown>, 'config' | 'state' | 'setConfig' | 'setState'>;\n hostRef?: RefObject<HTMLElement | null>;\n onRendered?: () => void;\n /** A render throw, after the boundary has shown it. */\n onError?: (error: unknown) => void;\n}\n\n/** A story rendered in the workshop document, inside a `TrialHost`, from the trial's own config and state. */\nexport function StoryTrial({ story, setup, ctx, hostRef, onRendered, onError }: StoryTrialProps) {\n const latest = useRef(ctx);\n latest.current = ctx;\n const config = useMemo(() => storyConfig(ctx.config), [ctx.config]);\n\n // A trial opened on the provisional instrument starts at `null`; the story's own initial state fills it once.\n const seeded = useRef(false);\n useEffect(() => {\n if (seeded.current || ctx.state !== null || !story.initialState) return;\n seeded.current = true;\n ctx.setState(story.initialState(config));\n }, [ctx, story, config]);\n\n // Each new input retries a render the boundary caught, as the frame did on each message.\n const input = useRef({ config, state: ctx.state, key: 0 });\n if (input.current.config !== config || input.current.state !== ctx.state) {\n input.current = { config, state: ctx.state, key: input.current.key + 1 };\n }\n const resetKey = input.current.key;\n\n // Stable, as the frame's were: a story may list them as effect dependencies.\n // The pins belong to the trial; a story cannot see them, so it cannot set them either.\n const setConfig = useCallback((path: string, value: unknown) => {\n if (!isGlobalsPath(path)) latest.current.setConfig(path, value);\n }, []);\n const setState = useCallback((next: unknown) => latest.current.setState(next), []);\n\n const decorators = setup.decorators ?? [];\n const render = (globals: Globals) => {\n const storyCtx: StoryContext = {\n config,\n setConfig,\n state: ctx.state,\n setState,\n globals,\n title: story.title,\n name: story.name,\n };\n return (\n <StoryHost\n story={story}\n ctx={storyCtx}\n decorators={decorators}\n resetKey={resetKey}\n onError={(error) => onError?.(error)}\n />\n );\n };\n\n return (\n <TrialHost\n layout={story.layout}\n setup={setup}\n config={ctx.config}\n {...(hostRef ? { hostRef } : {})}\n {...(onRendered ? { onRendered } : {})}\n >\n {render}\n </TrialHost>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/frame/a11y.ts","../src/frame/cssVars.ts","../src/frame/capture.ts","../src/frame/globalsTarget.ts","../src/frame/StoryHost.tsx","../src/csf/isPlainObject.ts","../src/csf/argsToSchema.ts","../src/csf/loadCsfModule.tsx","../src/story/native.ts","../src/story/load.ts"],"names":["config","value","f"],"mappings":";;;;;;;;AAqBA,IAAM,OAAA,uBAAc,GAAA,CAAI,CAAC,SAAS,UAAA,EAAY,SAAA,EAAW,UAAU,CAAC,CAAA;AAEpE,SAAS,QAAQ,IAAA,EAA+B;AAC9C,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,EAAA;AAC9B,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAK,MAAA,GAAmC,IAAA;AAAA,IAClE,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA;AAAA,MAE/B,QAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,SAAU,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAK,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,IAAI,CAAE,CAAA;AAAA,MACvF,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,GAAI,KAAK,cAAA,KAAmB,MAAA,GAAY,EAAC,GAAI,EAAE,cAAA,EAAgB,IAAA,CAAK,cAAA;AAAe,KACrF,CAAE;AAAA,GACJ;AACF;AAEA,IAAI,OAAA,GAAqC,IAAA;AAGzC,SAAS,OAAA,GAA8B;AACrC,EAAA,OAAA,KAAY,OAAO,UAAU,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAS,GAAA,CAA2C,WAAY,GAA4B,CAAA;AACjI,EAAA,OAAO,OAAA;AACT;AAGO,IAAM,UAAA,GAAgC;AAAA,EAC3C,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAQA,eAAsB,OAAO,OAAA,EAAkB,EAAE,OAAO,IAAA,EAAK,GAAmB,EAAC,EAAwB;AACvG,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,EAAQ;AAC1B,EAAA,MAAM,QAAQ,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,WAAA,CAAY,WAAW,GAAA,CAAI,CAAC,EAAA,KAAO,CAAC,IAAI,EAAE,OAAA,EAAS,KAAA,EAAO,CAAC,CAAC,CAAA;AACpG,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,GAAA,CAAI,SAAS,KAAA,GAAQ,EAAE,KAAA,EAAM,GAAI,MAAS,CAAA;AACnE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAAA,IACzC,UAAA,EAAY,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAAA,IACzC,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,IACtB,YAAA,EAAc,OAAO,YAAA,CAAa;AAAA,GACpC;AACF;;;AC1EA,IAAM,OAAA,GAAU,qBAAA;AAEhB,SAAS,OAAA,CAAQ,MAAc,KAAA,EAA0B;AACvD,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,EAAA,KAAA,MAAW,GAAG,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,OAAO,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,IAAK,CAAA;AAChE;AAGA,SAAS,SAAA,CAAU,OAAsB,KAAA,EAA0B;AACjE,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,KAAA,CAAM,QAAA;AAAA,EAChB,CAAA,CAAA,MAAQ;AAEN,IAAA;AAAA,EACF;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,IAAA,MAAM,WAAY,IAAA,CAAyD,UAAA;AAC3E,IAAA,IAAI,QAAA,EAAU,SAAA,CAAU,QAAA,EAAU,KAAK,CAAA;AAAA,SAClC,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA;AAAA,EAClC;AACF;AAOO,SAAS,YACd,GAAA,EACA,UAAA,GAAwC,MAAM,KAAA,EAC9C,IAAA,GAAgB,IAAI,eAAA,EACJ;AAChB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,iBAAiB,SAAS,CAAC,CAAA,EAAG,OAAA,CAAQ,EAAA,CAAG,YAAA,CAAa,OAAO,CAAA,IAAK,IAAI,KAAK,CAAA;AAC3G,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,EAAG,SAAA,CAAU,OAAO,KAAK,CAAA;AAEvE,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC7C,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA,CACb,MAAK,CACL,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,MAAM,KAAA,EAAO,MAAA,CAAO,IAAI,IAAI,CAAA,IAAK,IAAI,UAAA,EAAY,UAAA,CAAW,IAAI,CAAA,EAAE,CAAE,CAAA;AAC1F;AAEA,SAAS,aAAA,CAAc,GAAA,EAAe,KAAA,EAAyB,IAAA,EAAoC;AACjG,EAAA,MAAM,OAAO,GAAA,CAAI,WAAA;AACjB,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAA;AACtC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,gBAAA,CAAiB,IAAI,EAAE,IAAA,EAAK;AAC9C,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA,SAC5B,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EACxB;AACA,EAAA,MAAM,QAAQ,IAAA,KAAS,GAAA,CAAI,eAAA,GAAmB,GAAA,CAAI,QAAQ,IAAA,GAAQ,IAAA;AAClE,EAAA,KAAA,MAAW,EAAA,IAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,GAAG,CAAC,CAAA,GAAI,EAAC,EAAG;AAClF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,EAAE,CAAA;AACtC,IAAA,KAAA,IAAS,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,QAAQ,KAAA,CAAM,gBAAA,CAAiB,QAAQ,CAAC,CAAE,EAAE,IAAA,EAAK;AACvD,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAI,KAAK,CAAA;AAC7B,MAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IACrB;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,aAAA,CAAc,GAAA,EAAe,IAAA,EAAc,IAAA,GAAgB,IAAI,eAAA,EAAyB;AACtG,EAAA,OAAO,aAAA,CAAc,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,IAAK,EAAA;AACvD;AAeO,SAAS,eAAA,CAAgB,GAAA,EAAe,KAAA,GAAQ,OAAA,EAAoB;AACzE,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AACvC,EAAA,KAAA,CAAM,YAAA,CAAa,qBAAqB,EAAE,CAAA;AAG1C,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,KAAA,CAAM,UAAA,KAAe,GAAA,CAAI,IAAA,EAAM;AACjC,MAAA,IAAI,OAAO,KAAA,CAAM,kBAAA;AACjB,MAAA,OAAO,IAAA,EAAM,YAAA,CAAa,mBAAmB,CAAA,SAAU,IAAA,CAAK,kBAAA;AAC5D,MAAA,IAAI,SAAS,IAAA,EAAM;AAAA,IACrB;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACvB,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,MAAM,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA;AACvE,IAAA,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,OAAO,KAAK,CAAA;AAAA,EAA2B,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,CAAA,GAAU,EAAA;AAAA,EAC1G,CAAA;AAEA,EAAA,QAAA,EAAS;AACT,EAAA,MAAM,WAAW,OAAO,gBAAA,KAAqB,cAAc,IAAA,GAAO,IAAI,iBAAiB,QAAQ,CAAA;AAC/F,EAAA,QAAA,EAAU,QAAQ,GAAA,CAAI,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,GAAA,CAAI,MAAM,KAAA,EAAO;AACf,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,WACjC,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC3B,MAAA,KAAA,EAAM;AAAA,IACR,CAAA;AAAA,IACA,GAAA,EAAK,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,IAAA,KAAS,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,IACnC,OAAA,GAAU;AACR,MAAA,QAAA,EAAU,UAAA,EAAW;AACrB,MAAA,KAAA,CAAM,MAAA,EAAO;AAAA,IACf;AAAA,GACF;AACF;;;ACzHA,IAAM,MAAA,GAAS,4BAAA;AAGf,SAAS,YAAY,GAAA,EAAuB;AAC1C,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,EAAG;AAC/C,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,IACtE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AACtB;AASO,SAAS,eAAe,OAAA,EAAiE;AAC9F,EAAA,MAAM,MAAM,OAAA,CAAQ,aAAA;AACpB,EAAA,MAAM,IAAA,GAAO,QAAQ,qBAAA,EAAsB;AAC3C,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA;AAE5C,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,aAAA,CAAc,KAAK,CAAA;AACpC,EAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,EAAE,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,YAAY,GAAG,CAAA,CAC3B,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,IAAI,CAAA,EAAA,EAAK,EAAE,KAAK,CAAA,CAAA,CAAG,CAAA,CACnC,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA;AACvC,EAAA,KAAA,CAAM,WAAA,GAAc,CAAA,EAAG,WAAA,CAAY,GAAG,CAAC;AAAA,kBAAA,EAAuB,MAAM,CAAA,CAAA,CAAA;AACpE,EAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAC,CAAA;AAG1C,EAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,EAAc,CAAE,kBAAkB,IAAI,CAAA;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,QAAQ,CAAA,YAAA,EAAe,MAAM,CAAA,SAAA,EAAY,CAAC,aAAa,CAAC,CAAA,eAAA,EAAkB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,oCAAA,EAAuC,CAAC,CAAA,UAAA,EAAa,CAAC,KAAK,KAAK,CAAA,sBAAA;AAAA,GAClJ;AACF;;;ACpCO,SAAS,mBAAA,CAAoB,MAAmB,KAAA,EAAwD;AAC7G,EAAA,MAAM,MAAM,IAAA,CAAK,aAAA;AACjB,EAAA,IAAI,KAAA,GAAiC,IAAA;AACrC,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAM,GAAA,EAAK;AACT,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQ,GAAA,CAAI,cAAc,OAAO,CAAA;AACjC,QAAA,KAAA,CAAM,YAAA,CAAa,mBAAmB,KAAK,CAAA;AAC3C,QAAA,GAAA,CAAI,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MACvB;AACA,MAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AAAA,IACtB,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,KAAA,EAAO,MAAA,EAAO;AACd,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,GACF;AACF;ACjBA,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,GAAA,EAAI,EAAyD;AACzF,EAAA,OAAO,KAAA,CAAM,OAAO,GAAG,CAAA;AACzB;AAEA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,GAAA,EAAK,YAAW,EAA4D;AACtG,EAAA,IAAI,KAAA,GAAyB,sBAAM,GAAA,CAAC,WAAA,EAAA,EAAY,OAAc,GAAA,EAAU,CAAA;AACxE,EAAA,KAAA,MAAW,YAAY,CAAC,GAAG,MAAM,UAAA,EAAY,GAAG,UAAU,CAAA,EAAG;AAC3D,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,OAAA,EAAS,GAAG,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,KAAA,EAAM;AACf;AAQO,IAAM,SAAA,GAAN,cAAwB,SAAA,CAAyC;AAAA,EAC7D,KAAA,GAAuB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAAA,EAE5F,OAAO,wBAAA,CAAyB,KAAA,EAAuB,KAAA,EAAqD;AAC1G,IAAA,OAAO,KAAA,CAAM,QAAA,KAAa,KAAA,CAAM,QAAA,GAAW,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,EAC3G;AAAA,EAEA,OAAO,yBAAyB,KAAA,EAAwC;AACtE,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAK;AAAA,EAC/B;AAAA,EAES,kBAAkB,KAAA,EAAsB;AAC/C,IAAA,IAAA,CAAK,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,EAC1B;AAAA,EAES,MAAA,GAAoB;AAC3B,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAQ;AACrB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA;AACvB,MAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAE,CAAA;AAAA,IAClG;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,UAAA,KAAe,IAAA,CAAK,KAAA;AACxC,IAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAc,GAAA,EAAU,UAAA,EAAwB,CAAA;AAAA,EACpE;AACF;;;ACvDO,IAAM,aAAA,GAAgB,CAAC,KAAA,KAC5B,CAAC,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,cAAA,CAAe,KAAK,MAAM,MAAA,CAAO;;;ACmClF,SAAS,UAAU,OAAA,EAAmC;AACpD,EAAA,MAAM,EAAE,SAAQ,GAAI,OAAA;AACpB,EAAA,IAAI,OAAA,KAAY,OAAO,OAAO,KAAA;AAC9B,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,EAAE,MAAM,OAAA,EAAQ;AACxD,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAC1F;AAEA,SAAS,cAAc,OAAA,EAAmC;AACxD,EAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,EAAA,OAAO,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,QAAQ,CAAA,GAAK,IAAA,GAAoB,IAAA;AACpG;AAEA,SAAS,SAAS,KAAA,EAA6B;AAC7C,EAAA,QAAQ,OAAO,KAAA;AAAO,IACpB,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,IACvB,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,CAAE,QAAQ,KAAK,CAAA;AAAA,IACxB,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,IACvB;AACE,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,aAAA,CAAc,KAAK,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,GAAI,IAAA;AAAA;AAEtF;AAEA,SAAS,OAAA,CAAQ,MAAmC,OAAA,EAAkB;AACpE,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAAa,OAAA,CAAQ,GAAA,KAAQ,MAAA,EAAW,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,GAAG,CAAA;AACpG,EAAA,IAAI,QAAQ,IAAA,KAAS,MAAA,QAAiB,GAAA,CAAI,IAAA,CAAK,QAAQ,IAAI,CAAA;AAC3D,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAAA,EAAkB,OAAA,EAAkB,GAAA,EAAc,KAAA,EAA6B;AACjG,EAAA,MAAM,OAAA,GAAU,cAAc,OAAO,CAAA;AAErC,EAAA,MAAM,GAAA,GAAM,MAAU,GAAA,GAAM,KAAA,GAAQ,MAAA;AACpC,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,OAAO,OAAA,CAAQ,CAAA,CAAE,OAAO,GAAA,EAAK,GAAG,OAAO,CAAA;AAC7C,MAAA,OAAO,OAAA,CAAQ,QAAQ,MAAA,IAAa,OAAA,CAAQ,QAAQ,MAAA,GAAY,IAAA,CAAK,OAAM,GAAI,IAAA;AAAA,IACjF;AAAA,IACA,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,GAAA,GAAM,OAAA,CAAQ,CAAA,CAAE,MAAA,CAAO,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,CAAE,MAAA,EAAO,GAAI,IAAA;AAAA,IAC5D,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,IACxB,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,IACjC,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,CAAE,MAAA,CAAO,GAAA,EAAK,CAAA;AAAA,IACvB,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,MAAA,EAAW;AACd,MAAA,IAAI,CAAC,SAAS,OAAO,OAAA,CAAQ,SAAS,MAAA,IAAa,GAAA,GAAM,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA;AAC3E,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,GAAA,IAAe,OAAO,CAAA;AAC1C,MAAA,OAAO,OAAA,CAAQ,SAAS,OAAA,IAAW,OAAA,CAAQ,SAAS,cAAA,GAAiB,IAAA,CAAK,OAAM,GAAI,IAAA;AAAA,IACtF;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,GAAI,IAAA;AAAA,IACzC;AACE,MAAA,OAAO,GAAA,GAAM,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA;AAAA;AAErC;AAGA,SAAS,YAAY,SAAA,EAAgF;AACnG,EAAA,IAAI,EAAE,KAAA,IAAS,SAAA,CAAA,EAAY,OAAO,IAAA;AAClC,EAAA,MAAM,EAAE,KAAI,GAAI,SAAA;AAChB,EAAA,OAAO,CAAC,MAAA,KAAW;AACjB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,UAAU,MAAA,KAAW,MAAA,EAAW,OAAQ,KAAA,KAAU,WAAe,SAAA,CAAU,MAAA;AAC/E,IAAA,IAAI,QAAQ,SAAA,EAAW,OAAO,OAAO,EAAA,CAAG,KAAA,EAAO,UAAU,EAAE,CAAA;AAC3D,IAAA,IAAI,KAAA,IAAS,WAAW,OAAO,CAAC,OAAO,EAAA,CAAG,KAAA,EAAO,UAAU,GAAG,CAAA;AAC9D,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,MAAO,SAAA,CAAU,MAAA,IAAU,IAAA,CAAA;AAAA,EACjD,CAAA;AACF;AAUA,SAAS,OAAA,CAAQ,GAAA,EAAa,KAAA,EAAgB,OAAA,EAA8B,QAAA,EAAwC;AAClH,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAA,EAAS,OAAA,KAAY,MAAA,IAAa,aAAA,CAAc,OAAA,IAAW,EAAE,CAAA,EAAG,OAAO,IAAA;AACxG,EAAA,OAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAG,IAAI,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AACtD;AAGO,SAAS,YAAA,CACd,IAAA,EACA,QAAA,EACA,QAAA,GAA4B,EAAC,EACN;AACvB,EAAA,MAAM,QAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,GAAA,oBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA,EAAG;AAC3E,IAAA,MAAM,MAAM,GAAA,IAAO,IAAA;AAEnB,IAAA,MAAM,OAAO,GAAA,GAAM,YAAA,CAAa,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI,IAAA;AAC7C,IAAA,IAAI,GAAA,IAAO,CAAC,IAAA,EAAM;AAClB,IAAA,MAAM,QAAQ,IAAA,EAAM,KAAA;AACpB,IAAA,MAAM,OAAA,GAAU,SAAS,GAAG,CAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,OAAA,GAAU,SAAA,CAAU,OAAO,CAAA,GAAI,KAAA;AAE/C,IAAA,IAAI,IAAA,GAAA,CACD,MAAM,OAAA,CAAQ,GAAA,EAAK,OAAO,OAAA,EAAS,QAAQ,IAAI,IAAA,MAC/C,OAAA,GAAU,WAAW,OAAA,EAAS,OAAA,IAAW,EAAC,EAAG,GAAA,EAAK,KAAK,CAAA,GAAI,GAAA,GAAM,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA,CAAA;AACtF,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,OAAA,KAAY,QAAQ,OAAA,KAAY,KAAA,IAAS,QAAQ,KAAA,EAAO,OAAA,CAAA,EAAU,IAAA,GAAO,IAAA,CAAK,MAAA,EAAO;AACzF,IAAA,IAAI,SAAS,WAAA,EAAa,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,WAAW,CAAA;AAClE,IAAA,IAAI,SAAS,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,IAAI,CAAA;AACjD,IAAA,MAAM,YAAY,OAAA,EAAS,EAAA,GAAK,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAA,GAAI,IAAA;AAC1D,IAAA,IAAI,SAAA,EAAW,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAC3C,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAAA,EACf;AACA,EAAA,OAAO,CAAA,CAAE,OAAO,KAAoB,CAAA;AACtC;;;AC1GA,IAAM,OAAA,GAA6B,CAAC,UAAA,EAAY,QAAA,EAAU,YAAY,CAAA;AAEtE,IAAM,OAAA,GAAU,CAAK,KAAA,KAAqC,KAAA,KAAU,MAAA,GAAY,EAAC,GAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAG1H,IAAM,mBAAmB,CAAC,IAAA,KACxB,MAAA,CAAO,WAAA,CAAY,OAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAC,CAAA;AAGpF,IAAM,OAAA,GAAU,CAAC,GAAA,EAAa,MAAA,KAC5B,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,CAAO,SAAS,GAAG,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,KAAM,IAAA;AAGvE,SAAS,qBAAqB,OAAA,EAA2E;AACvG,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,EAAG;AACvD,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA,CAAc,KAAK,KAAK,aAAA,CAAc,GAAA,CAAI,GAAG,CAAC,IAAI,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,EAAG,KAAK,CAAA,GAAI,KAAA;AAAA,IACpG;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,eAAA,CAAgB,YAAqC,OAAA,EAAmD;AAC/G,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,EAAA,MAAM,OAAA,GAAW,WAAW,QAAA,EACxB,OAAA;AACJ,EAAA,MAAM,SAAS,QAAA,EAAU,KAAA,GAAQ,UAAU,QAAA,CAAS,KAAK,GAAG,MAAA,GAAS,MAAA;AACrE,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAA2B,CAAA,IAAK,iBAAA,CAAkB,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACtG,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,MAAA,EAAQ,KAAK,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,MAAA,EAAQ,MAAM,CAAA;AAChC,EAAA,IAAI,MAAA,CAAO,MAAM,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,MAAM,GAAG,OAAO,IAAA;AACxD,EAAA,OAAO,QAAA,EAAU,SAAA,GAAY,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAA,EAAM,GAAI,EAAE,KAAA,EAAO,MAAA,EAAO;AAClF;AAEA,IAAM,UAAA,GAAa,cAAwC,IAAI,CAAA;AAE/D,SAAS,KAAA,GAAmB;AAC1B,EAAA,OAAO,UAAA,CAAW,UAAU,CAAA,IAAI,IAAK,IAAA;AACvC;AAEA,SAAS,IAAA,CAAK,EAAE,EAAA,EAAG,EAAuC;AACxD,EAAA,OAAO,EAAA,EAAG;AACZ;AAQA,IAAM,gBAAA,GAAmB,cAAkC,IAAI,CAAA;AAG/D,SAAS,MAAA,CAAO;AAAA,EACd,EAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIc;AACZ,EAAA,MAAM,KAAA,GAAQ,WAAW,gBAAgB,CAAA;AACzC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAoB,EAAE,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAU,EAAA,GAAK,QAAQ,EAAE,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,QAAA,EAAS;AAC1E,EAAA,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,GAAI,MAAM,MAAM,CAAA;AACrC,EAAA,MAAM,EAAE,QAAO,GAAI,KAAA;AACnB,EAAA,MAAM,QAAQ,MAAA,CAAO,QAAA;AAErB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM,CAAC,IAAA,KAAS;AACd,MAAA,MAAM,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAO,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA;AAC9F,MAAA,OAAO,IAAA,CAAK,MAAA,KAAW,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,IAClF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAClB,EAAA,OAAO,aAAA;AAAA,IACL,gBAAA,CAAiB,QAAA;AAAA,IACjB,EAAE,OAAO,MAAA,EAAO;AAAA,IAChB,cAAc,WAAA,CAAY,QAAA,EAAU,EAAE,KAAA,EAAO,OAAM,EAAG,aAAA,CAAc,IAAA,EAAM,EAAE,IAAI,MAAM,EAAA,CAAG,OAAO,CAAA,EAAG,CAAC;AAAA,GACtG;AACF;AAMO,SAAS,aAAA,CACd,GAAA,EACA,SAAA,EACA,iBAAA,GAA6C,EAAC,EAC/B;AACf,EAAA,MAAM,OAAQ,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA,GAAI,GAAA,CAAI,UAAU,EAAC;AAC1D,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,SAAA;AAC5B,EAAA,MAAM,UAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrD,IAAA,IAAI,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,qBAAA,IAAyB,eAAe,YAAA,EAAc;AACrG,IAAA,IAAI,KAAK,cAAA,IAAkB,CAAC,QAAQ,UAAA,EAAY,IAAA,CAAK,cAAc,CAAA,EAAG;AACtE,IAAA,IAAI,KAAK,cAAA,IAAkB,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,cAAc,CAAA,EAAG;AACrE,IAAA,IAAI,CAAC,KAAA,IAAU,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,UAAA,EAAa;AAG1E,IAAA,MAAM,IAAA,GAAoB,OAAO,KAAA,KAAU,UAAA,GAAa,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAmB,GAAK,KAAA;AACpG,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AACpC,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAA,IAAa,oBAAoB,UAAU,CAAA;AAC1E,IAAA,MAAM,OAAO,EAAE,GAAG,KAAK,IAAA,EAAM,GAAG,KAAK,IAAA,EAAK;AAC1C,IAAA,MAAM,aAAa,iBAAA,CAAkB,iBAAA,EAAmB,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AACxF,IAAA,MAAM,QAAA,GAAY,WAAW,QAAA,EAAyD,QAAA;AACtF,IAAA,MAAM,MAAA,GAAS,YAAA;AAAA,MACb,IAAA;AAAA,MACA,iBAAA,CAAkB,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAQ,CAAA;AAAA,MAC9C,aAAA,CAAc,QAAQ,CAAA,GAAI,QAAA,GAAW;AAAC,KACxC;AACA,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,EAAS;AACjC,IAAA,MAAM,eAAe,EAAE,GAAG,KAAK,OAAA,EAAS,GAAG,KAAK,OAAA,EAAQ;AACxD,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,IAAA,MAAM,QAAA,GACJ,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,KAAW,SAAA,GAAY,CAAC,CAAA,KAAM,aAAA,CAAc,SAAA,EAAW,CAAC,CAAA,GAAI,MAAA,CAAA;AAElF,IAAA,MAAM,QAAA,GAAW,CAACA,OAAAA,KAChB,MAAA,CAAO,WAAA;AAAA,MACL,MAAA,CAAO,QAAQ,gBAAA,CAAiBA,OAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAKC,MAAK,MAAM,CAAC,GAAA,EAAK,GAAA,IAAO,IAAA,GAAO,UAAA,CAAWA,MAAAA,EAAO,KAAK,GAAG,CAAC,CAAA,GAAIA,MAAK,CAAC;AAAA,KAC1H;AACF,IAAA,MAAM,aAAa,CAACD,OAAAA,EAAiB,OAAA,EAAkB,KAAA,GAAmB,EAAC,MAAmB;AAAA,MAC5F,IAAA,EAAM,gBAAA,CAAiB,EAAE,GAAG,MAAM,GAAG,QAAA,CAASA,OAAc,CAAA,EAAG,GAAG,YAAA,CAAa,KAAA,EAAOA,OAAc,GAAG,CAAA;AAAA,MACvG,OAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,EAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ,CAAA;AACA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAmB,EAAA,KACjC,cAAc,MAAA,EAAQ;AAAA,MACpB,EAAA;AAAA,MACA,KAAA,EAAO,CAAC,EAAE,KAAA,EAAO,UAAS,KAA4C;AACpE,QAAA,MAAM,UAAU,UAAA,CAAW,GAAA,CAAI,MAAA,EAAQ,GAAA,CAAI,SAAS,KAAK,CAAA;AACzD,QAAA,MAAM,KAAA,GAAmB;AAAA,UACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,QAAA;AAAA,UACA,QAAA,EAAU,IAAA;AAAA,UACV,WAAW,GAAA,CAAI,SAAA;AAAA,UACf;AAAA,SACF;AACA,QAAA,OAAO,CAAC,OAAO,OAAO,CAAA;AAAA,MACxB,CAAA;AAAA,MACA;AAAA,KACD,CAAA;AAEH,IAAA,MAAM,KAAA,GACJ,CAAC,SAAA,KACD,CAAC,OAAO,GAAA,KACN,aAAA;AAAA,MACE,UAAA,CAAW,QAAA;AAAA,MACX,EAAE,OAAO,KAAA,EAAM;AAAA,MACf,OAAO,GAAA,EAAK,CAAC,YAAY,SAAA,CAAU,KAAA,EAAO,OAAO,CAAC;AAAA,KACpD;AAEJ,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,OAAA,GAAW,WAAW,KAAA,EAA6C,OAAA;AACzE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA;AAE/B,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,EAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA,EAAc,IAAA;AAAA,MACd,MAAA,EAAQ,CAAC,GAAA,KAAQ;AACf,QAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,QAAA,OAAO,MAAA,CAAO,KAAK,CAAC,OAAA,KAAY,SAAS,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,MACjE,CAAA;AAAA,MACA,UAAA,EAAY,CAAC,GAAG,OAAA,CAAQ,KAAK,UAAU,CAAA,EAAG,GAAG,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,IAAI,KAAK,CAAA;AAAA,MAChF,QAAQ,MAAA,IAAU,OAAA,CAAQ,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,QAAA;AAAA,MACtD,QAAA,EAAU,eAAA,CAAgB,UAAA,EAAY,YAAY,CAAA;AAAA,MAClD,OAAA,EAAS,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,IAAA;AAAA,MACjD,IAAA,EAAM,IAAA,GACF,CAAC,EAAE,aAAA,EAAe,QAAAA,OAAAA,EAAQ,OAAA,EAAQ,KAChC,IAAA,CAAK,EAAE,GAAG,WAAWA,OAAAA,EAAQ,OAAO,CAAA,EAAG,aAAA,EAAe,IAAA,EAAM,OAAO,QAAQ,EAAA,KAAO,EAAA,EAAG,EAAG,CAAA,GAC1F;AAAA,KACL,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;ACtOO,SAAS,gBAAA,CAAiB,KAA8B,SAAA,EAAkC;AAC/F,EAAA,MAAM,QAAA,GAAqB,SAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA,GAAK,GAAA,CAAI,UAAuB,EAAC;AACxF,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,SAAA;AAChC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrD,IAAA,IAAI,eAAe,SAAA,IAAa,CAAC,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA,EAAG;AAC3D,IAAA,MAAM,IAAA,GAAO,KAAA;AACb,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AAAA,MAC7B,KAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,mBAAA,CAAoB,UAAU,CAAA;AAAA,MACjD,UAAA;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA,IAAUE,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,MAClC,YAAA,EAAc,KAAK,KAAA,IAAS,IAAA;AAAA,MAC5B,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAA,EAAY,CAAC,GAAI,IAAA,CAAK,UAAA,IAAc,EAAC,EAAI,GAAI,QAAA,CAAS,UAAA,IAAc,EAAG,CAAA;AAAA,MACvE,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,QAAA,CAAS,MAAA,IAAU,UAAA;AAAA,MAC1C,QAAA,EAAU,KAAK,QAAA,IAAY,IAAA;AAAA,MAC3B,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,QAAA,CAAS,OAAA,IAAW,IAAA;AAAA,MAC7C,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,KACpB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;;;ACrBO,SAAS,WAAA,CACd,GAAA,EACA,SAAA,EACA,UAAA,EACe;AACf,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA,GAC/B,gBAAA,CAAiB,GAAA,EAAK,SAAS,CAAA,GAC/B,aAAA,CAAc,GAAA,EAAK,SAAA,EAAW,UAAU,CAAA;AAC9C;AAGO,SAAS,cAAc,GAAA,EAAkD;AAC9E,EAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AACjB,EAAA,MAAM,MAAA,GAAS,SAAS,IAAA,EAAM,MAAM,IAAI,IAAA,EAAM,KAAA,GAAQ,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,KAAA;AAC/E,EAAA,OAAO,OAAO,MAAA,KAAW,UAAA,GAAc,MAAA,GAAyB,IAAA;AAClE","file":"chunk-FWPBKKYB.js","sourcesContent":["import type { A11yFinding, A11yReport } from '../protocol/messages';\n\n/** The shape of `axe.run`'s answer this module reads. */\ninterface AxeResult {\n violations: readonly AxeFinding[];\n incomplete: readonly AxeFinding[];\n passes: readonly unknown[];\n inapplicable: readonly unknown[];\n}\ninterface AxeFinding {\n id: string;\n impact?: string | null;\n help: string;\n helpUrl: string;\n description: string;\n nodes: readonly { target: readonly unknown[]; html: string; failureSummary?: string }[];\n}\ninterface AxeModule {\n run(context: Element, options?: unknown): Promise<AxeResult>;\n}\n\nconst IMPACTS = new Set(['minor', 'moderate', 'serious', 'critical']);\n\nfunction finding(from: AxeFinding): A11yFinding {\n const impact = from.impact ?? '';\n return {\n id: from.id,\n impact: IMPACTS.has(impact) ? (impact as A11yFinding['impact']) : null,\n help: from.help,\n helpUrl: from.helpUrl,\n description: from.description,\n nodes: from.nodes.map((node) => ({\n // An axe target entry is a selector, or an array of them for an element inside a shadow root.\n target: node.target.map((part) => (Array.isArray(part) ? part.join(' ') : String(part))),\n html: node.html,\n ...(node.failureSummary === undefined ? {} : { failureSummary: node.failureSummary }),\n })),\n };\n}\n\nlet loading: Promise<AxeModule> | null = null;\n\n/** axe is ~500 KB, so a frame that is never audited never pays for it. */\nfunction loadAxe(): Promise<AxeModule> {\n loading ??= import('axe-core').then((mod) => (mod as unknown as { default?: AxeModule }).default ?? (mod as unknown as AxeModule));\n return loading;\n}\n\n/** Rules that judge the page rather than the element audited; off when the element is one story on a page of many. */\nexport const PAGE_RULES: readonly string[] = [\n 'bypass',\n 'document-title',\n 'html-has-lang',\n 'html-lang-valid',\n 'html-xml-lang-mismatch',\n 'landmark-one-main',\n 'page-has-heading-one',\n 'region',\n];\n\nexport interface RunAxeOptions {\n /** Whether `element` stands for the whole page. False leaves `PAGE_RULES` out. Default true. */\n page?: boolean;\n}\n\n/** Runs axe over `element` and reduces its answer to what crosses the frame's channel. */\nexport async function runAxe(element: Element, { page = true }: RunAxeOptions = {}): Promise<A11yReport> {\n const axe = await loadAxe();\n const rules = page ? undefined : Object.fromEntries(PAGE_RULES.map((id) => [id, { enabled: false }]));\n const result = await axe.run(element, rules ? { rules } : undefined);\n return {\n violations: result.violations.map(finding),\n incomplete: result.incomplete.map(finding),\n passes: result.passes.length,\n inapplicable: result.inapplicable.length,\n };\n}\n","import type { CssVarReport } from '../protocol/messages';\n\nconst VAR_REF = /var\\(\\s*(--[\\w-]+)/g;\n\nfunction collect(text: string, names: Set<string>): void {\n if (!text.includes('var(')) return;\n for (const [, name] of text.matchAll(VAR_REF)) names.add(name!);\n}\n\n/** A grouping rule's text holds its children's; an `@import` holds only its URL, so its sheet is read too. */\nfunction walkRules(sheet: CSSStyleSheet, names: Set<string>): void {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n // A cross-origin sheet refuses to be read.\n return;\n }\n for (const rule of Array.from(rules)) {\n const imported = (rule as CSSRule & { styleSheet?: CSSStyleSheet | null }).styleSheet;\n if (imported) walkRules(imported, names);\n else collect(rule.cssText, names);\n }\n}\n\n/**\n * Every custom property the document references with `var()`, from inline styles and stylesheet rules — computed\n * styles have already substituted the reference away. Values resolve on `root`, the document's by default, or else\n * on the first element under it that declares one.\n */\nexport function scanCssVars(\n doc: Document,\n overridden: (name: string) => boolean = () => false,\n root: Element = doc.documentElement,\n): CssVarReport[] {\n const names = new Set<string>();\n for (const el of Array.from(doc.querySelectorAll('[style]'))) collect(el.getAttribute('style') ?? '', names);\n for (const sheet of Array.from(doc.styleSheets)) walkRules(sheet, names);\n\n const values = resolveValues(doc, names, root);\n return [...names]\n .sort()\n .map((name) => ({ name, value: values.get(name) ?? '', overridden: overridden(name) }));\n}\n\nfunction resolveValues(doc: Document, names: Iterable<string>, root: Element): Map<string, string> {\n const view = doc.defaultView;\n const values = new Map<string, string>();\n if (!view) return values;\n const own = view.getComputedStyle(root);\n const missing: string[] = [];\n for (const name of names) {\n const value = own.getPropertyValue(name).trim();\n if (value) values.set(name, value);\n else missing.push(name);\n }\n const under = root === doc.documentElement ? (doc.body ?? root) : root;\n for (const el of missing.length > 0 ? Array.from(under.querySelectorAll('*')) : []) {\n const style = view.getComputedStyle(el);\n for (let i = missing.length - 1; i >= 0; i--) {\n const value = style.getPropertyValue(missing[i]!).trim();\n if (!value) continue;\n values.set(missing[i]!, value);\n missing.splice(i, 1);\n }\n if (missing.length === 0) break;\n }\n return values;\n}\n\n/** One custom property's value, resolved the way `scanCssVars` resolves each. */\nexport function resolveCssVar(doc: Document, name: string, root: Element = doc.documentElement): string {\n return resolveValues(doc, [name], root).get(name) ?? '';\n}\n\nexport interface Overrides {\n set(name: string, value: string | null): void;\n has(name: string): boolean;\n /** Whether `node` is the override style element or inside it. */\n owns(node: Node): boolean;\n dispose(): void;\n}\n\n/**\n * Custom property overrides as one rule on `scope`, kept last in `<head>`. `:not(#fg-overrides)` adds an ID's weight\n * without `!important`, so the rule outranks a theme's attribute selectors; a stylesheet that lands after it sends\n * the element back to the end.\n */\nexport function createOverrides(doc: Document, scope = ':root'): Overrides {\n const values = new Map<string, string>();\n const style = doc.createElement('style');\n style.setAttribute('data-fg-overrides', '');\n\n // Another instance's style counts as last place too, or two instances would take turns moving forever.\n const keepLast = () => {\n if (style.parentNode === doc.head) {\n let next = style.nextElementSibling;\n while (next?.hasAttribute('data-fg-overrides')) next = next.nextElementSibling;\n if (next === null) return;\n }\n doc.head.append(style);\n };\n const write = () => {\n const decls = [...values].map(([name, value]) => ` ${name}: ${value};`);\n style.textContent = decls.length > 0 ? `:is(${scope}):not(#fg-overrides) {\\n${decls.join('\\n')}\\n}\\n` : '';\n };\n\n keepLast();\n const observer = typeof MutationObserver === 'undefined' ? null : new MutationObserver(keepLast);\n observer?.observe(doc.head, { childList: true });\n\n return {\n set(name, value) {\n if (value === null) values.delete(name);\n else values.set(name, value);\n write();\n },\n has: (name) => values.has(name),\n owns: (node) => style.contains(node),\n dispose() {\n observer?.disconnect();\n style.remove();\n },\n };\n}\n","import type { CapturedPicture } from '../protocol/messages';\nimport { scanCssVars } from './cssVars';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/** Every rule the document can read. A cross-origin sheet refuses, and is skipped. */\nfunction documentCss(doc: Document): string {\n const out: string[] = [];\n for (const sheet of Array.from(doc.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) out.push(rule.cssText);\n } catch {\n // A cross-origin sheet refuses to be read.\n }\n }\n return out.join('\\n');\n}\n\n/**\n * The story's own subtree as an SVG picture: the DOM inside a `<foreignObject>`, with the document's\n * stylesheets beside it.\n *\n * The capture root is a `<div>`, so nothing a rule hangs off `:root`, `html` or `body` reaches the story —\n * hence the custom properties restated on the root, which is what theme tokens travel by.\n */\nexport function captureElement(element: HTMLElement): Extract<CapturedPicture, { kind: 'svg' }> {\n const doc = element.ownerDocument;\n const rect = element.getBoundingClientRect();\n const w = Math.max(1, Math.ceil(rect.width));\n const h = Math.max(1, Math.ceil(rect.height));\n\n const root = doc.createElement('div');\n root.setAttribute('data-fg-capture', '');\n const tokens = scanCssVars(doc)\n .filter((v) => v.value)\n .map((v) => `${v.name}: ${v.value};`)\n .join('');\n const style = doc.createElement('style');\n style.textContent = `${documentCss(doc)}\\n[data-fg-capture]{${tokens}}`;\n root.append(style, element.cloneNode(true));\n\n // XML, not HTML: an `<svg>` base is re-parsed as XML, where `<br>` and friends have to be closed.\n const inner = new XMLSerializer().serializeToString(root);\n return {\n kind: 'svg',\n markup: `<svg xmlns=\"${SVG_NS}\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\"><foreignObject x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\">${inner}</foreignObject></svg>`,\n };\n}\n","/** What a setup's `applyGlobals` is handed: the element the globals apply to, and a way to style it alone. */\nexport interface GlobalsTarget {\n /** A frame document's root, or one story's host in the workshop document. */\n root: HTMLElement;\n /** A selector matching `root` and nothing else, so a rule written under it reaches only this target. */\n scope: string;\n /** Replaces the CSS forge keeps for this target. */\n style: (css: string) => void;\n}\n\n/** A target over `root`, owning one `<style>` in the document's head; `dispose` removes it. */\nexport function createGlobalsTarget(root: HTMLElement, scope: string): GlobalsTarget & { dispose: () => void } {\n const doc = root.ownerDocument;\n let style: HTMLStyleElement | null = null;\n return {\n root,\n scope,\n style(css) {\n if (!style) {\n style = doc.createElement('style');\n style.setAttribute('data-fg-globals', scope);\n doc.head.append(style);\n }\n style.textContent = css;\n },\n dispose() {\n style?.remove();\n style = null;\n },\n };\n}\n","import { Component, type ReactNode } from 'react';\nimport type { Decorator, LoadedStory, StoryContext } from '../story/types';\n\nexport interface StoryHostProps {\n story: LoadedStory;\n ctx: StoryContext;\n /** Outermost decorators, from the frame setup. */\n decorators: readonly Decorator[];\n /** A change clears a caught error, so new input retries the render. */\n resetKey: number;\n onError: (error: unknown) => void;\n}\n\nfunction RenderStory({ story, ctx }: { story: LoadedStory; ctx: StoryContext }): ReactNode {\n return story.render(ctx);\n}\n\nfunction Decorated({ story, ctx, decorators }: Omit<StoryHostProps, 'resetKey' | 'onError'>): ReactNode {\n let inner: () => ReactNode = () => <RenderStory story={story} ctx={ctx} />;\n for (const decorate of [...story.decorators, ...decorators]) {\n const wrapped = inner;\n inner = () => decorate(wrapped, ctx);\n }\n return inner();\n}\n\ninterface BoundaryState {\n error: unknown;\n failed: boolean;\n resetKey: number;\n}\n\nexport class StoryHost extends Component<StoryHostProps, BoundaryState> {\n override state: BoundaryState = { error: null, failed: false, resetKey: this.props.resetKey };\n\n static getDerivedStateFromProps(props: StoryHostProps, state: BoundaryState): Partial<BoundaryState> | null {\n return props.resetKey === state.resetKey ? null : { error: null, failed: false, resetKey: props.resetKey };\n }\n\n static getDerivedStateFromError(error: unknown): Partial<BoundaryState> {\n return { error, failed: true };\n }\n\n override componentDidCatch(error: unknown): void {\n this.props.onError(error);\n }\n\n override render(): ReactNode {\n if (this.state.failed) {\n const { error } = this.state;\n return <pre className=\"fg-frame__fault\">{error instanceof Error ? error.message : String(error)}</pre>;\n }\n const { story, ctx, decorators } = this.props;\n return <Decorated story={story} ctx={ctx} decorators={decorators} />;\n }\n}\n","export const isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\n","import { type ConfigNode, type ConfigSchema, type ConfigShape, f } from '@weasel-js/labkit/config';\nimport { isPlainObject } from './isPlainObject';\nimport { portSafePart } from './portSafe';\n\n/** Storybook's conditional control: shown only while an arg, or a global, meets the test. */\nexport type ArgCondition = ({ arg: string } | { global: string }) & {\n truthy?: boolean;\n exists?: boolean;\n eq?: unknown;\n neq?: unknown;\n};\n\n/** A CSF `argTypes` entry, as far as forge reads it. */\nexport interface ArgType {\n name?: string;\n description?: string;\n control?: string | false | { type?: string; min?: number; max?: number; step?: number };\n options?: readonly unknown[];\n table?: { disable?: boolean };\n if?: ArgCondition;\n}\n\ninterface Leaf extends ConfigNode<unknown> {\n hidden(): Leaf;\n describe(description: string): Leaf;\n label(name: string): Leaf;\n showIf(predicate: (config: Record<string, unknown>) => boolean): Leaf;\n}\n\ninterface Control {\n type: string | undefined;\n min?: number;\n max?: number;\n step?: number;\n}\n\nfunction controlOf(argType: ArgType): Control | false {\n const { control } = argType;\n if (control === false) return false;\n if (typeof control === 'string') return { type: control };\n return { type: control?.type, min: control?.min, max: control?.max, step: control?.step };\n}\n\nfunction stringOptions(argType: ArgType): string[] | null {\n const opts = argType.options;\n return opts && opts.length > 0 && opts.every((o) => typeof o === 'string') ? (opts as string[]) : null;\n}\n\nfunction inferred(value: unknown): Leaf | null {\n switch (typeof value) {\n case 'number':\n return f.number(value);\n case 'boolean':\n return f.boolean(value);\n case 'string':\n return f.string(value);\n default:\n return Array.isArray(value) || isPlainObject(value) ? f.custom('json', value) : null;\n }\n}\n\nfunction bounded(node: ReturnType<typeof f.number>, control: Control) {\n let out = node;\n if (control.min !== undefined && control.max !== undefined) out = out.range(control.min, control.max);\n if (control.step !== undefined) out = out.step(control.step);\n return out;\n}\n\nfunction controlled(control: Control, argType: ArgType, has: boolean, value: unknown): Leaf | null {\n const options = stringOptions(argType);\n // Storybook passes an argTypes-only key as undefined, so the component's own default applies.\n const def = <T>() => (has ? value : undefined) as T;\n switch (control.type) {\n case 'number': {\n const node = bounded(f.number(def()), control);\n return control.min !== undefined && control.max !== undefined ? node.input() : node;\n }\n case 'range':\n case 'slider':\n return has ? bounded(f.number(def()), control).slider() : null;\n case 'boolean':\n return f.boolean(def());\n case 'switch':\n return f.boolean(def()).toggle();\n case 'text':\n case 'textarea':\n return f.string(def());\n case 'select':\n case 'radio':\n case 'inline-radio':\n case undefined: {\n if (!options) return control.type === undefined && has ? inferred(value) : null;\n const node = f.enum(def<string>(), options);\n return control.type === 'radio' || control.type === 'inline-radio' ? node.radio() : node;\n }\n case 'object':\n return has ? f.custom('json', value) : null;\n default:\n return has ? inferred(value) : null;\n }\n}\n\n/** The config predicate for an `if`; null for a condition on a global, which a story's config does not hold. */\nfunction conditionOf(condition: ArgCondition): ((config: Record<string, unknown>) => boolean) | null {\n if (!('arg' in condition)) return null;\n const { arg } = condition;\n return (config) => {\n const value = config[arg];\n if (condition.exists !== undefined) return (value !== undefined) === condition.exists;\n if ('eq' in condition) return Object.is(value, condition.eq);\n if ('neq' in condition) return !Object.is(value, condition.neq);\n return Boolean(value) === (condition.truthy ?? true);\n };\n}\n\n/** `parameters.controls.matchers`: arg names that pick a control when the arg's argType names none. */\nexport interface ControlMatchers {\n color?: RegExp;\n /** labkit has no date leaf, so a date match keeps the leaf its value infers. */\n date?: RegExp;\n}\n\n/** Storybook's rule: a string arg with no control or options whose name matches `color` gets a color picker. */\nfunction matched(key: string, value: unknown, argType: ArgType | undefined, matchers: ControlMatchers): Leaf | null {\n if (typeof value !== 'string' || argType?.control !== undefined || stringOptions(argType ?? {})) return null;\n return matchers.color?.test(key) ? f.color(value) : null;\n}\n\n/** A labkit schema for a CSF story's args, refined by its `argTypes`. */\nexport function argsToSchema(\n args: Readonly<Record<string, unknown>>,\n argTypes: Readonly<Record<string, ArgType | undefined>>,\n matchers: ControlMatchers = {},\n): ConfigSchema<unknown> {\n const nodes: Record<string, Leaf> = {};\n for (const key of new Set([...Object.keys(args), ...Object.keys(argTypes)])) {\n const has = key in args;\n // A control carries only what crosses the port; the frame puts the rest back from `args` (`withUnsent`).\n const part = has ? portSafePart(args[key]) : null;\n if (has && !part) continue;\n const value = part?.value;\n const argType = argTypes[key];\n const control = argType ? controlOf(argType) : false;\n\n let node: Leaf | null =\n (has ? matched(key, value, argType, matchers) : null) ??\n (control ? controlled(control, argType ?? {}, has, value) : has ? inferred(value) : null);\n if (!node) continue;\n if (argType && (argType.control === false || argType.table?.disable)) node = node.hidden();\n if (argType?.description) node = node.describe(argType.description);\n if (argType?.name) node = node.label(argType.name);\n const shownWhen = argType?.if ? conditionOf(argType.if) : null;\n if (shownWhen) node = node.showIf(shownWhen);\n nodes[key] = node;\n }\n return f.schema(nodes as ConfigShape);\n}\n","import {\n type ComponentType,\n createContext,\n createElement,\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport type { Globals, Layout, Viewport } from '../protocol/messages';\nimport { storyId, storyNameFromExport } from '../story/ids';\nimport type { Decorator, LoadedStory, PlayContext, StoryContext } from '../story/types';\nimport { type ArgsScope, ArgsContext, appliedLocal, coverOf, type LocalArgs } from './argsContext';\nimport { type ArgType, argsToSchema, type ControlMatchers } from './argsToSchema';\nimport { isPlainObject } from './isPlainObject';\nimport { withUnsent } from './portSafe';\n\ntype Args = Record<string, unknown>;\ntype CsfContext = {\n args: Args;\n globals: Globals;\n parameters: Record<string, unknown>;\n title: string;\n name: string;\n id: string;\n viewMode: 'story';\n};\ntype CsfRender = (args: Args, context: CsfContext) => ReactNode;\ntype CsfDecorator = (Story: ComponentType, context: CsfContext) => ReactNode;\ntype CsfPlay = (context: CsfContext & { canvasElement: HTMLElement; step: CsfStep }) => void | Promise<void>;\ntype CsfStep = (label: string, fn: () => void | Promise<void>) => Promise<void>;\n\ninterface Annotations {\n title?: string;\n name?: string;\n storyName?: string;\n component?: ComponentType<Args>;\n args?: Args;\n argTypes?: Record<string, ArgType>;\n parameters?: Record<string, unknown>;\n globals?: Record<string, unknown>;\n decorators?: CsfDecorator | CsfDecorator[];\n render?: CsfRender;\n play?: CsfPlay;\n includeStories?: string[] | RegExp;\n excludeStories?: string[] | RegExp;\n}\n\nconst LAYOUTS: readonly Layout[] = ['centered', 'padded', 'fullscreen'];\n\nconst asArray = <T,>(value: T | T[] | undefined): T[] => (value === undefined ? [] : Array.isArray(value) ? value : [value]);\n\n/** Storybook's `deleteUndefined`, which its args store applies after every update. */\nconst withoutUndefined = (args: Args): Args =>\n Object.fromEntries(Object.entries(args).filter(([, value]) => value !== undefined));\n\n/** Storybook's `matches` from `isExportStory`. */\nconst matches = (key: string, filter: string[] | RegExp) =>\n Array.isArray(filter) ? filter.includes(key) : key.match(filter) !== null;\n\n/** Storybook's `combineParameters`: plain objects merge deeply, anything else is replaced. */\nfunction combineParameters(...sources: (Record<string, unknown> | undefined)[]): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const source of sources) {\n for (const [key, value] of Object.entries(source ?? {})) {\n if (value === undefined) continue;\n out[key] = isPlainObject(value) && isPlainObject(out[key]) ? combineParameters(out[key], value) : value;\n }\n }\n return out;\n}\n\nfunction resolveViewport(parameters: Record<string, unknown>, globals: Record<string, unknown>): Viewport | null {\n const selected = globals.viewport as { value?: string; isRotated?: boolean } | undefined;\n const options = (parameters.viewport as { options?: Record<string, { styles?: { width?: string; height?: string } }> } | undefined)\n ?.options;\n const styles = selected?.value ? options?.[selected.value]?.styles : undefined;\n const px = (v: string | undefined) => (v && /^\\d+(\\.\\d+)?px$/.test(v) ? Number.parseFloat(v) : Number.NaN);\n const width = px(styles?.width);\n const height = px(styles?.height);\n if (Number.isNaN(width) || Number.isNaN(height)) return null;\n return selected?.isRotated ? { width: height, height: width } : { width, height };\n}\n\nconst InnerStory = createContext<(() => ReactNode) | null>(null);\n\nfunction Story(): ReactNode {\n return useContext(InnerStory)?.() ?? null;\n}\n\nfunction Call({ fn }: { fn: () => ReactNode }): ReactNode {\n return fn();\n}\n\ninterface StoryLocals {\n story: string;\n local: LocalArgs;\n setLocal: Dispatch<SetStateAction<LocalArgs>>;\n}\n\nconst LocalArgsContext = createContext<StoryLocals | null>(null);\n\n/** The outermost scope of a story holds its frame-local args, so its decorators and render share them. */\nfunction Scoped({\n id,\n build,\n fn,\n}: {\n id: string;\n build: (local: StoryLocals) => [ArgsScope, CsfContext];\n fn: (context: CsfContext) => ReactNode;\n}): ReactNode {\n const outer = useContext(LocalArgsContext);\n const [local, setLocal] = useState<LocalArgs>({});\n const shared = outer?.story === id ? outer : { story: id, local, setLocal };\n const [scope, context] = build(shared);\n const { config } = scope;\n const prune = shared.setLocal;\n // An entry config has moved past must not come back if config later returns to the value it covered.\n useEffect(() => {\n prune((prev) => {\n const kept = Object.entries(prev).filter(([key, entry]) => coverOf(config[key]) === entry.over);\n return kept.length === Object.keys(prev).length ? prev : Object.fromEntries(kept);\n });\n }, [config, prune]);\n return createElement(\n LocalArgsContext.Provider,\n { value: shared },\n createElement(ArgsContext.Provider, { value: scope }, createElement(Call, { fn: () => fn(context) })),\n );\n}\n\n/**\n * Normalizes a Component Story Format module. `autoTitle` titles the stories when the meta names no title;\n * `parameters` are the project's, under the meta's and each story's.\n */\nexport function loadCsfModule(\n mod: Record<string, unknown>,\n autoTitle: string,\n projectParameters: Record<string, unknown> = {},\n): LoadedStory[] {\n const meta = (isPlainObject(mod.default) ? mod.default : {}) as Annotations;\n const title = meta.title ?? autoTitle;\n const stories: LoadedStory[] = [];\n\n for (const [exportName, value] of Object.entries(mod)) {\n if (exportName === 'default' || exportName === '__namedExportsOrder' || exportName === '__esModule') continue;\n if (meta.includeStories && !matches(exportName, meta.includeStories)) continue;\n if (meta.excludeStories && matches(exportName, meta.excludeStories)) continue;\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) continue;\n\n // A CSF 2 function export hoists its annotations onto itself.\n const spec: Annotations = typeof value === 'function' ? { ...value, render: value as CsfRender } : (value as Annotations);\n const id = storyId(title, exportName);\n const name = spec.name || spec.storyName || storyNameFromExport(exportName);\n const args = { ...meta.args, ...spec.args };\n const parameters = combineParameters(projectParameters, meta.parameters, spec.parameters);\n const matchers = (parameters.controls as { matchers?: ControlMatchers } | undefined)?.matchers;\n const config = argsToSchema(\n args,\n combineParameters(meta.argTypes, spec.argTypes) as Record<string, ArgType>,\n isPlainObject(matchers) ? matchers : {},\n );\n const defaults = config.defaults() as Args;\n const storyGlobals = { ...meta.globals, ...spec.globals };\n const component = meta.component;\n const renderFn: CsfRender | undefined =\n spec.render ?? meta.render ?? (component ? (a) => createElement(component, a) : undefined);\n\n const withArgs = (config: Args): Args =>\n Object.fromEntries(\n Object.entries(withoutUndefined(config)).map(([key, value]) => [key, key in args ? withUnsent(value, args[key]) : value]),\n );\n const csfContext = (config: unknown, globals: Globals, local: LocalArgs = {}): CsfContext => ({\n args: withoutUndefined({ ...args, ...withArgs(config as Args), ...appliedLocal(local, config as Args) }),\n globals,\n parameters,\n title,\n name,\n id,\n viewMode: 'story',\n });\n const scoped = (ctx: StoryContext, fn: (context: CsfContext) => ReactNode): ReactNode =>\n createElement(Scoped, {\n id,\n build: ({ local, setLocal }: StoryLocals): [ArgsScope, CsfContext] => {\n const context = csfContext(ctx.config, ctx.globals, local);\n const scope: ArgsScope = {\n args: context.args,\n config: ctx.config as Args,\n defaults,\n original: args,\n setConfig: ctx.setConfig,\n setLocal,\n };\n return [scope, context];\n },\n fn,\n });\n\n const adapt =\n (decorator: CsfDecorator): Decorator =>\n (inner, ctx) =>\n createElement(\n InnerStory.Provider,\n { value: inner },\n scoped(ctx, (context) => decorator(Story, context)),\n );\n\n const layout = parameters.layout as Layout | undefined;\n const isolate = (parameters.forge as { isolate?: unknown } | undefined)?.isolate;\n const play = spec.play ?? meta.play;\n\n stories.push({\n id,\n title,\n name,\n exportName,\n config,\n initialState: null,\n render: (ctx) => {\n if (!renderFn) return null;\n return scoped(ctx, (context) => renderFn(context.args, context));\n },\n decorators: [...asArray(spec.decorators), ...asArray(meta.decorators)].map(adapt),\n layout: layout && LAYOUTS.includes(layout) ? layout : 'padded',\n viewport: resolveViewport(parameters, storyGlobals),\n isolate: typeof isolate === 'string' ? isolate : null,\n play: play\n ? ({ canvasElement, config, globals }: PlayContext) =>\n play({ ...csfContext(config, globals), canvasElement, step: async (_label, fn) => fn() })\n : null,\n });\n }\n return stories;\n}\n","import { f } from '@weasel-js/labkit/config';\nimport { isNative } from './define';\nimport { storyId, storyNameFromExport } from './ids';\nimport type { LoadedStory, MetaSpec, StorySpec } from './types';\n\n/** Normalizes a module written with `meta` and `story`; exports that are not stories are skipped. */\n/** `autoTitle` titles the stories when the meta names no title. */\nexport function loadNativeModule(mod: Record<string, unknown>, autoTitle: string): LoadedStory[] {\n const metaSpec: MetaSpec = isNative(mod.default, 'meta') ? (mod.default as MetaSpec) : {};\n const title = metaSpec.title ?? autoTitle;\n const stories: LoadedStory[] = [];\n for (const [exportName, value] of Object.entries(mod)) {\n if (exportName === 'default' || !isNative(value, 'story')) continue;\n const spec = value as StorySpec<unknown, unknown>;\n stories.push({\n id: storyId(title, exportName),\n title,\n name: spec.name ?? storyNameFromExport(exportName),\n exportName,\n config: spec.config ?? f.schema({}),\n initialState: spec.state ?? null,\n render: spec.render,\n decorators: [...(spec.decorators ?? []), ...(metaSpec.decorators ?? [])],\n layout: spec.layout ?? metaSpec.layout ?? 'centered',\n viewport: spec.viewport ?? null,\n isolate: spec.isolate ?? metaSpec.isolate ?? null,\n play: spec.play ?? null,\n });\n }\n return stories;\n}\n","import { loadCsfModule } from '../csf/loadCsfModule';\nimport { isNative } from './define';\nimport { loadNativeModule } from './native';\nimport type { IndexRender, LoadedStory } from './types';\n\n/**\n * A story module's stories: a module whose default export is a forge `meta` is native, anything else is CSF under\n * `parameters`. `autoTitle` titles the stories when the meta names no title.\n */\nexport function loadStories(\n mod: Record<string, unknown>,\n autoTitle: string,\n parameters?: Record<string, unknown>,\n): LoadedStory[] {\n return isNative(mod.default, 'meta')\n ? loadNativeModule(mod, autoTitle)\n : loadCsfModule(mod, autoTitle, parameters);\n}\n\n/** A module's own index page: a native meta's `index`, or a CSF meta's `parameters.forge.index`. */\nexport function indexRenderOf(mod: Record<string, unknown>): IndexRender | null {\n const meta = mod.default as { index?: unknown; parameters?: { forge?: { index?: unknown } } } | undefined;\n const render = isNative(meta, 'meta') ? meta?.index : meta?.parameters?.forge?.index;\n return typeof render === 'function' ? (render as IndexRender) : null;\n}\n"]}