@weasel-js/forge 1.15.2 → 1.16.1

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 (35) hide show
  1. package/README.md +14 -0
  2. package/dist/{FrameController-BM6xuEfY.d.ts → FrameController-D9CddmJg.d.ts} +2 -0
  3. package/dist/{chunk-PPB7VP6R.js → chunk-5B4RDEF3.js} +87 -7
  4. package/dist/chunk-5B4RDEF3.js.map +1 -0
  5. package/dist/{chunk-MRYXJTDO.js → chunk-7YVJS4QS.js} +3 -3
  6. package/dist/{chunk-MRYXJTDO.js.map → chunk-7YVJS4QS.js.map} +1 -1
  7. package/dist/{chunk-PGLOYXDP.js → chunk-EVPVBDHM.js} +31 -5
  8. package/dist/chunk-EVPVBDHM.js.map +1 -0
  9. package/dist/{chunk-SZ2SMRE6.js → chunk-KNBEHCFD.js} +3 -29
  10. package/dist/chunk-KNBEHCFD.js.map +1 -0
  11. package/dist/{chunk-5WS67HMU.js → chunk-PN4IFL5E.js} +6 -3
  12. package/dist/chunk-PN4IFL5E.js.map +1 -0
  13. package/dist/{chunk-RVJHUY7W.js → chunk-ZGELUE2H.js} +3 -3
  14. package/dist/{chunk-RVJHUY7W.js.map → chunk-ZGELUE2H.js.map} +1 -1
  15. package/dist/{config-DOjWyIui.d.ts → config-Ey2RPFrg.d.ts} +1 -1
  16. package/dist/frame/index.css +100 -0
  17. package/dist/frame/index.css.map +1 -1
  18. package/dist/frame/index.d.ts +4 -4
  19. package/dist/frame/index.js +4 -4
  20. package/dist/index.d.ts +3 -3
  21. package/dist/{mountFrame-CRPAjg1M.d.ts → mountFrame-AZzyw6bu.d.ts} +1 -1
  22. package/dist/shell/index.css +100 -0
  23. package/dist/shell/index.css.map +1 -1
  24. package/dist/shell/index.d.ts +4 -4
  25. package/dist/shell/index.js +7 -7
  26. package/dist/test/index.d.ts +1 -1
  27. package/dist/test/index.js +3 -3
  28. package/dist/vite/index.d.ts +5 -0
  29. package/dist/vite/index.js +271 -56
  30. package/dist/vite/index.js.map +1 -1
  31. package/package.json +11 -11
  32. package/dist/chunk-5WS67HMU.js.map +0 -1
  33. package/dist/chunk-PGLOYXDP.js.map +0 -1
  34. package/dist/chunk-PPB7VP6R.js.map +0 -1
  35. package/dist/chunk-SZ2SMRE6.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/forge",
3
- "version": "1.15.2",
3
+ "version": "1.16.1",
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",
@@ -69,14 +69,14 @@
69
69
  "@testing-library/dom": "^10.4.0",
70
70
  "@testing-library/user-event": "^14.6.1",
71
71
  "@vitest/expect": "^5.0.2",
72
- "@weasel-js/clock": "1.15.2",
73
- "@weasel-js/icons": "1.15.2",
74
- "@weasel-js/prefs": "1.15.2",
75
- "@weasel-js/react": "1.15.2",
76
- "@weasel-js/registry": "1.15.2",
77
- "@weasel-js/svg": "1.15.2",
78
- "@weasel-js/theme": "1.15.2",
79
- "@weasel-js/ui": "1.15.2",
72
+ "@weasel-js/clock": "1.16.1",
73
+ "@weasel-js/icons": "1.16.1",
74
+ "@weasel-js/prefs": "1.16.1",
75
+ "@weasel-js/react": "1.16.1",
76
+ "@weasel-js/registry": "1.16.1",
77
+ "@weasel-js/svg": "1.16.1",
78
+ "@weasel-js/theme": "1.16.1",
79
+ "@weasel-js/ui": "1.16.1",
80
80
  "axe-core": "^4.13.0",
81
81
  "chai": "^6.2.2"
82
82
  },
@@ -84,8 +84,8 @@
84
84
  "@babel/types": "^8.0.6"
85
85
  },
86
86
  "peerDependencies": {
87
- "@weasel-js/core": "1.15.2",
88
- "@weasel-js/labkit": "1.15.2",
87
+ "@weasel-js/core": "1.16.1",
88
+ "@weasel-js/labkit": "1.16.1",
89
89
  "react": "^19.0.0",
90
90
  "playwright": "^1.50.0",
91
91
  "react-dom": "^19.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/story/ids.ts","../src/csf/propArgTypes.ts","../src/frame/safeOverride.ts"],"names":[],"mappings":";AAIO,SAAS,SAAS,IAAA,EAAsB;AAC7C,EAAA,OAAO,KACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,iDAAA,EAAmD,GAAG,CAAA,CAC9D,OAAA,CAAQ,KAAA,EAAO,GAAG,EAClB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CACjB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtB;AAEA,SAAS,YAAA,CAAa,MAAc,IAAA,EAA+B;AACjE,EAAA,MAAM,SAAA,GAAY,SAAS,IAAI,CAAA;AAC/B,EAAA,IAAI,SAAA,KAAc,IAAI,MAAM,IAAI,MAAM,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,uCAAA,CAAyC,CAAA;AACvG,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,OAAA,CAAQ,OAAe,UAAA,EAA4B;AACjE,EAAA,OAAO,CAAA,EAAG,aAAa,KAAA,EAAO,MAAM,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,UAAA,EAAY,MAAM,CAAC,CAAA,CAAA;AAC5E;AAGO,SAAS,oBAAoB,UAAA,EAA4B;AAC9D,EAAA,OAAO,WACJ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CACjB,QAAQ,IAAA,EAAM,GAAG,CAAA,CACjB,OAAA,CAAQ,OAAO,GAAG,CAAA,CAClB,QAAQ,wBAAA,EAA0B,CAAC,GAAG,CAAA,EAAW,CAAA,EAAW,CAAA,KAAc,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA,CAAE,EACzF,OAAA,CAAQ,iBAAA,EAAmB,CAAC,CAAA,EAAG,GAAW,CAAA,KAAc,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE,CAAA,CACnE,OAAA,CAAQ,kBAAA,EAAoB,CAAC,GAAG,CAAA,EAAW,CAAA,KAAc,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA,CAAE,CAAA,CACpE,OAAA,CAAQ,oBAAoB,CAAC,CAAA,EAAG,GAAW,CAAA,KAAc,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CACpE,QAAQ,aAAA,EAAe,CAAC,GAAG,CAAA,EAAW,CAAA,KAAc,GAAG,CAAC,CAAA,EAAG,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA,CAC5E,QAAQ,KAAA,EAAO,GAAG,EAClB,IAAA,EAAK;AACV;;;ACnCO,IAAM,qBAAA,GAAwB;;;ACG9B,SAAS,cAAA,CAAe,MAAc,KAAA,EAAwB;AACnE,EAAA,OAAO,aAAa,IAAA,CAAK,IAAI,KAAK,CAAC,OAAA,CAAQ,KAAK,KAAK,CAAA;AACvD","file":"chunk-5WS67HMU.js","sourcesContent":["// sanitize, storyId and storyNameFromExport are ports of storybook/internal/csf (10.4.0)'s\n// sanitize, toId and storyNameFromExport; they must agree or links diverge.\n\n/** Lower-case; runs of the listed separators become one dash. Everything else, non-ASCII letters included, survives. */\nexport function sanitize(part: string): string {\n return part\n .toLowerCase()\n .replace(/[ ’–—―′¿'`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]/gi, '-')\n .replace(/-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n}\n\nfunction sanitizeSafe(part: string, kind: 'kind' | 'name'): string {\n const sanitized = sanitize(part);\n if (sanitized === '') throw new Error(`Invalid ${kind} '${part}', must include alphanumeric characters`);\n return sanitized;\n}\n\nexport function storyId(title: string, exportName: string): string {\n return `${sanitizeSafe(title, 'kind')}--${sanitizeSafe(exportName, 'name')}`;\n}\n\n/** `PrimaryButton` → `Primary Button`, `withIcon2` → `With Icon 2`. */\nexport function storyNameFromExport(exportName: string): string {\n return exportName\n .replace(/_/g, ' ')\n .replace(/-/g, ' ')\n .replace(/\\./g, ' ')\n .replace(/([^\\n])([A-Z])([a-z])/g, (_, a: string, b: string, c: string) => `${a} ${b}${c}`)\n .replace(/([a-z])([A-Z])/g, (_, a: string, b: string) => `${a} ${b}`)\n .replace(/([a-z])([0-9])/gi, (_, a: string, b: string) => `${a} ${b}`)\n .replace(/([0-9])([a-z])/gi, (_, a: string, b: string) => `${a} ${b}`)\n .replace(/(\\s|^)(\\w)/g, (_, a: string, b: string) => `${a}${b.toUpperCase()}`)\n .replace(/ +/g, ' ')\n .trim();\n}\n","/** The named export forge's vite plugin adds to a story module: argTypes read from the props of the meta's `component`. */\nexport const PROP_ARG_TYPES_EXPORT = '__forgeArgTypes';\n","/**\n * Whether a CSS variable override can be declared as given: a custom property name, and a value that cannot close\n * the declaration or the rule around it. A value that could would let whoever sets it write rules of their own.\n */\nexport function isSafeOverride(name: string, value: string): boolean {\n return /^--[\\w-]+$/.test(name) && !/[{};]/.test(value);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/frame/a11yContrast.ts","../src/frame/a11y.ts","../src/frame/a11yHighlight.ts","../src/frame/cssVarUse.ts","../src/frame/cssVars.ts","../src/frame/globalsTarget.ts","../src/timeline/StoryClock.tsx","../src/frame/StoryHost.tsx","../src/csf/argsToSchema.ts","../src/timeline/declare.ts","../src/csf/loadCsfModule.tsx","../src/story/native.ts","../src/story/load.ts","../src/shell/hostConditions.ts"],"names":["f","jsx","value","isPlainObject","useContext","useState","useEffect","config","useLatest","useRef"],"mappings":"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","file":"chunk-PGLOYXDP.js","sourcesContent":["// axe judges contrast against the whole document, so in the workshop it gives up on every story's text over chrome\n// around it: labkit's overlay canvas, or the lab's starfield pseudo element. This re-judges that text without the chrome.\n\n/** axe's color type, as `commons.color` hands it out. */\nexport interface AxeColor {\n alpha: number;\n toHexString(): string;\n}\n\n/** The part of axe's `commons` this module calls. */\nexport interface AxeCommons {\n dom: {\n getTextElementStack(node: Element): Element[][];\n reduceToElementsBelowFloating(stack: Element[], node: Element): Element[];\n };\n color: {\n Color: new () => AxeColor & { parseString(value: string): AxeColor };\n flattenColors(source: AxeColor, backdrop: AxeColor): AxeColor;\n hasValidContrastRatio(\n bg: AxeColor,\n fg: AxeColor,\n fontSize: number,\n isBold: boolean,\n ): { isValid: boolean; contrastRatio: number; expectedContrastRatio: number };\n };\n}\n\nexport interface ContrastAxe {\n setup(node?: Element | Document): unknown;\n teardown(): void;\n commons: AxeCommons;\n}\n\n/** What the judge made of one element: decided, or still undecidable for the reason named in axe's vocabulary. */\nexport type ContrastVerdict =\n | { decided: true; isValid: boolean; ratio: number; expected: number; fg: string; bg: string }\n | { decided: false; key: string };\n\n/** The axe reasons that can come from outside the audited element, and so are worth a second look. */\nexport const RECHECKED = new Set(['bgOverlap', 'pseudoContent', 'elmPartiallyObscured', 'elmPartiallyObscuring']);\n\nconst undecided = (key: string): ContrastVerdict => ({ decided: false, key });\n\n/** axe's `findPseudoElement` test for one element: a positioned pseudo box with paint, larger than `minimum`. */\nfunction pseudoArea(el: Element, which: '::before' | '::after'): number {\n const style = getComputedStyle(el, which);\n if (style.content === 'none' || style.display === 'none' || style.visibility === 'hidden' || style.position !== 'absolute') return 0;\n if (style.backgroundColor === 'rgba(0, 0, 0, 0)' && style.backgroundImage === 'none') return 0;\n const width = parseFloat(style.width);\n const height = parseFloat(style.height);\n if (!style.width.endsWith('px') || !style.height.endsWith('px')) return width === 0 || height === 0 ? 0 : Infinity;\n return width * height;\n}\n\nfunction hasPseudoBackdrop(node: Element, root: Element): boolean {\n const rect = node.getBoundingClientRect();\n const minimum = rect.width * rect.height * 0.25;\n for (let el: Element | null = node; el; el = el.parentElement) {\n if (pseudoArea(el, '::before') + pseudoArea(el, '::after') > minimum) return true;\n if (el === root) return false;\n }\n return false;\n}\n\n/** Whether anything between `node` and the document root composites the text in a way this judge doesn't model. */\nfunction hasCompositing(node: Element): boolean {\n for (let el: Element | null = node; el; el = el.parentElement) {\n const style = getComputedStyle(el);\n if (Number(style.opacity) < 1 || style.filter !== 'none' || style.mixBlendMode !== 'normal') return true;\n if (style.backdropFilter && style.backdropFilter !== 'none') return true;\n }\n return false;\n}\n\nconst isChrome = (el: Element, root: Element) => !root.contains(el) && !el.contains(root);\nconst paints = (style: CSSStyleDeclaration) => style.backgroundImage !== 'none' || style.backgroundColor !== 'rgba(0, 0, 0, 0)';\n\n/**\n * The stack under each of `node`'s text rects, with chrome above it left out, or null when that chrome paints a\n * background of its own over the text. A canvas or image has content no style reveals, and counts as painting nothing.\n */\nfunction stacksWithoutChrome(axe: ContrastAxe, node: Element, root: Element): Element[][] | null {\n const stacks: Element[][] = [];\n for (const stack of axe.commons.dom.getTextElementStack(node)) {\n const at = stack.indexOf(node);\n const above = at < 0 ? stack : stack.slice(0, at);\n if (above.some((el) => isChrome(el, root) && paints(getComputedStyle(el)))) return null;\n const kept = [...above.filter((el) => !isChrome(el, root)), ...(at < 0 ? [] : stack.slice(at))];\n stacks.push(axe.commons.dom.reduceToElementsBelowFloating(kept, node));\n }\n return stacks;\n}\n\n/** axe's `fullyEncompasses`: whether `el`'s box, or its whole scrolled extent when it scrolls, holds every rect. */\nfunction covers(el: Element, style: CSSStyleDeclaration, rects: readonly DOMRect[]): boolean {\n const box = el.getBoundingClientRect();\n const scrolls = ['scroll', 'auto'].includes(style.overflow);\n const right = scrolls ? box.left + el.scrollWidth : box.right;\n const bottom = scrolls ? box.top + el.scrollHeight : box.bottom;\n return rects.every((r) => r.top >= box.top && r.bottom <= bottom && r.left >= box.left && r.right <= right);\n}\n\nfunction ownText(node: Element): string {\n let text = '';\n for (const child of node.childNodes) if (child.nodeType === Node.TEXT_NODE) text += child.textContent ?? '';\n return text.trim();\n}\n\nfunction textRects(node: Element): DOMRect[] {\n const range = document.createRange();\n const rects: DOMRect[] = [];\n for (const child of node.childNodes) {\n if (child.nodeType !== Node.TEXT_NODE || !child.textContent?.trim()) continue;\n range.selectNodeContents(child);\n rects.push(...range.getClientRects());\n }\n return rects;\n}\n\n/** Judges `node`'s text contrast as axe would, with the chrome around `root` out of the picture. Call between `axe.setup` and `axe.teardown`. */\nexport function judgeContrast(axe: ContrastAxe, node: Element, root: Element): ContrastVerdict {\n const { Color, flattenColors, hasValidContrastRatio } = axe.commons.color;\n const style = getComputedStyle(node);\n if (hasPseudoBackdrop(node, root)) return undecided('pseudoContent');\n if (style.textShadow !== 'none') return undecided('complexTextShadows');\n if (hasCompositing(node) || parseFloat(style.getPropertyValue('-webkit-text-stroke-width')) > 0) return undecided('blended');\n const stacks = stacksWithoutChrome(axe, node, root);\n if (!stacks?.length) return undecided('bgOverlap');\n for (const stack of stacks) {\n if (stack[0] !== node) return undecided('bgOverlap');\n if (stack.length !== stacks[0]!.length || stack.some((el, i) => el !== stacks[0]![i])) return undecided('elmPartiallyObscuring');\n }\n\n const rects = textRects(node);\n const layers: AxeColor[] = [];\n for (const el of stacks[0]!) {\n const elStyle = getComputedStyle(el);\n if (elStyle.backgroundImage !== 'none') return undecided(elStyle.backgroundImage.includes('gradient') ? 'bgGradient' : 'bgImage');\n if (el instanceof HTMLImageElement || el instanceof HTMLCanvasElement || el instanceof SVGElement) return undecided('imgNode');\n const color = new Color().parseString(elStyle.backgroundColor);\n if (color.alpha === 0) continue;\n if (elStyle.display !== 'inline' && !covers(el, elStyle, rects)) return undecided('elmPartiallyObscured');\n layers.push(color);\n if (color.alpha === 1) break;\n }\n const white = new Color().parseString('#fff');\n const bg = layers.reduceRight<AxeColor>((backdrop, layer) => flattenColors(layer, backdrop), white);\n const fg = new Color().parseString(style.getPropertyValue('-webkit-text-fill-color') || style.color);\n const bold = parseFloat(style.fontWeight) >= 700 || style.fontWeight === 'bold';\n const verdict = hasValidContrastRatio(bg, fg, parseFloat(style.fontSize), bold);\n // axe's own last word on a computed ratio: 1:1 may be hidden on purpose, and one failing character may not be text.\n if (Math.floor(verdict.contrastRatio * 100) === 100) return undecided('equalRatio');\n if (!verdict.isValid && ownText(node).length === 1) return undecided('shortTextContent');\n return {\n decided: true,\n isValid: verdict.isValid,\n ratio: verdict.contrastRatio,\n expected: verdict.expectedContrastRatio,\n fg: fg.toHexString(),\n bg: bg.toHexString(),\n };\n}\n","import type { A11yFinding, A11yNode, A11yOutcome, A11yReport } from '../protocol/messages';\nimport { type ContrastAxe, judgeContrast, RECHECKED } from './a11yContrast';\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 { id: string }[];\n inapplicable: readonly unknown[];\n}\ninterface AxeCheck {\n message?: string;\n data?: { messageKey?: string } | null;\n}\ninterface AxeNode {\n target: readonly unknown[];\n html: string;\n failureSummary?: string;\n element?: Element;\n any?: readonly AxeCheck[];\n all?: readonly AxeCheck[];\n none?: readonly AxeCheck[];\n reason?: A11yNode['reason'];\n}\ninterface AxeFinding {\n id: string;\n impact?: string | null;\n help: string;\n helpUrl: string;\n description: string;\n nodes: readonly AxeNode[];\n}\ninterface AxeModule extends ContrastAxe {\n run(context: Element, options?: unknown): Promise<AxeResult>;\n}\n\nconst IMPACTS = new Set(['minor', 'moderate', 'serious', 'critical']);\n\n/** Why axe could not decide a node: the first check that says, as axe's message key and its own sentence. */\nfunction reasonOf(node: AxeNode): A11yNode['reason'] {\n if (node.reason) return node.reason;\n const checks = [...(node.any ?? []), ...(node.all ?? []), ...(node.none ?? [])];\n const said = checks.find((c) => c.data?.messageKey) ?? checks.find((c) => c.message);\n if (!said) return undefined;\n const key = said.data?.messageKey;\n return { ...(key ? { key } : {}), ...(said.message ? { message: said.message } : {}) };\n}\n\nfunction finding(from: AxeFinding, withReasons = false): A11yFinding {\n const impact = from.impact ?? '';\n const reasons = withReasons ? from.nodes.map(reasonOf) : [];\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, i) => ({\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 ...(reasons[i] ? { reason: reasons[i] } : {}),\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// axe refuses a run while another is under way in the same document, and the workshop page holds every story.\nlet last: Promise<unknown> = Promise.resolve();\n\n/** Runs axe over `element` and reduces its answer to what crosses the frame's channel. A run waits for the one before it. */\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 run = async () => recheckContrast(axe, element, await axe.run(element, { elementRef: true, ...(rules ? { rules } : {}) }));\n const running = last.then(run, run);\n last = running;\n const result = await running;\n return {\n violations: result.violations.map((f) => finding(f)),\n incomplete: result.incomplete.map((f) => finding(f, true)),\n passes: result.passes.length,\n inapplicable: result.inapplicable.length,\n };\n}\n\n/** Moves the color-contrast nodes axe gave up on because of chrome outside `root` to where `judgeContrast` puts them. */\nfunction recheckContrast(axe: AxeModule, root: Element, result: AxeResult): AxeResult {\n const review = result.incomplete.find((f) => f.id === 'color-contrast');\n const rechecked = (n: AxeNode) => n.element !== undefined && RECHECKED.has(reasonOf(n)?.key ?? '');\n if (!review?.nodes.some(rechecked)) return result;\n const kept: AxeNode[] = [];\n const failed: AxeNode[] = [];\n let passed = false;\n axe.setup(document);\n try {\n for (const node of review.nodes) {\n const verdict = rechecked(node) ? judgeContrast(axe, node.element!, root) : null;\n if (!verdict) kept.push(node);\n else if (!verdict.decided) kept.push({ ...node, failureSummary: undefined, reason: { key: verdict.key } });\n else if (verdict.isValid) passed = true;\n else {\n const summary = `Contrast is ${verdict.ratio.toFixed(2)}:1 (foreground ${verdict.fg}, background ${verdict.bg}); ${verdict.expected}:1 is needed.`;\n failed.push({ ...node, failureSummary: summary });\n }\n }\n } finally {\n axe.teardown();\n }\n const others = (list: readonly AxeFinding[]) => list.filter((f) => f.id !== 'color-contrast');\n const failing = result.violations.find((f) => f.id === 'color-contrast');\n const violations = failed.length === 0 ? result.violations : [\n ...others(result.violations),\n { ...review, impact: 'serious', ...failing, nodes: [...(failing?.nodes ?? []), ...failed] },\n ];\n const incomplete = kept.length === 0 ? others(result.incomplete) : result.incomplete.map((f) => (f === review ? { ...f, nodes: kept } : f));\n const passes = passed && !result.passes.some((p) => p.id === 'color-contrast') ? [...result.passes, { id: 'color-contrast' }] : result.passes;\n return { ...result, violations, incomplete, passes };\n}\n\n/** `runAxe`, with a failure to run reported as an outcome rather than thrown. */\nexport async function auditElement(element: Element, options?: RunAxeOptions): Promise<A11yOutcome> {\n try {\n return { ok: true, report: await runAxe(element, options) };\n } catch (error) {\n return { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n}\n","/** Outlines over the elements an axe finding names, drawn in the document that holds them. */\nexport interface A11yHighlighter {\n /** Outlines every element `targets` reaches, replacing what was shown; an empty list clears. */\n show(targets: readonly (readonly string[])[]): void;\n dispose(): void;\n}\n\nconst CSS = `[data-fg-a11y-highlight] {\n position: fixed;\n z-index: var(--wzl-z-drag, 10000);\n box-sizing: border-box;\n pointer-events: none;\n border: 2px solid var(--wzl-danger, #e5484d);\n border-radius: 2px;\n background: color-mix(in srgb, var(--wzl-danger, #e5484d) 15%, transparent);\n}\n`;\n\n/** The element an axe target reaches: each entry after the first steps into the frame or shadow root before it. */\nexport function resolveTarget(doc: Document, target: readonly string[]): Element | null {\n let scope: Document | ShadowRoot = doc;\n let found: Element | null = null;\n for (const selector of target) {\n try {\n found = scope.querySelector(selector);\n } catch {\n return null;\n }\n if (!found) return null;\n const inner: Document | ShadowRoot | null | undefined =\n found.shadowRoot ?? (found as HTMLIFrameElement).contentDocument;\n if (inner) scope = inner;\n }\n return found;\n}\n\nexport function createA11yHighlighter(doc: Document): A11yHighlighter {\n let style: HTMLStyleElement | null = null;\n let boxes: { el: Element; box: HTMLElement }[] = [];\n const view = doc.defaultView;\n\n const place = () => {\n for (const { el, box } of boxes) {\n const rect = el.getBoundingClientRect();\n box.style.left = `${rect.left}px`;\n box.style.top = `${rect.top}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n }\n };\n\n const clear = () => {\n for (const { box } of boxes) box.remove();\n boxes = [];\n view?.removeEventListener('scroll', place, true);\n view?.removeEventListener('resize', place);\n };\n\n return {\n show(targets) {\n clear();\n const elements = targets.map((target) => resolveTarget(doc, target)).filter((el) => el !== null);\n if (elements.length === 0) return;\n if (!style) {\n style = doc.createElement('style');\n style.setAttribute('data-fg-a11y-highlight-style', '');\n style.textContent = CSS;\n doc.head.append(style);\n }\n boxes = elements.map((el) => {\n const box = doc.createElement('div');\n box.setAttribute('data-fg-a11y-highlight', '');\n box.setAttribute('aria-hidden', 'true');\n doc.body.append(box);\n return { el, box };\n });\n place();\n view?.addEventListener('scroll', place, true);\n view?.addEventListener('resize', place);\n },\n dispose() {\n clear();\n style?.remove();\n style = null;\n },\n };\n}\n","const VAR_REF = /var\\(\\s*(--[\\w-]+)/g;\nconst CUSTOM_DECL = /(?:^|[;{\\s])(--[\\w-]+)\\s*:\\s*([^;]*)/g;\n// A selector naming a pseudo-element, or a state the pointer or focus has to be in, matches no element at rest.\nconst RESTLESS = /::?(?:before|after|first-line|first-letter|marker|placeholder|selection|backdrop|file-selector-button)\\b|::[\\w-]+(?:\\([^)]*\\))?|:(?:hover|active|focus-visible|focus-within|focus|visited|target)\\b/g;\nconst STYLE_RULE = 1;\n\n/** Every custom property `text` reads with `var()`. */\nexport function varRefs(text: string, into: Set<string> = new Set()): Set<string> {\n if (!text.includes('var(')) return into;\n for (const [, name] of text.matchAll(VAR_REF)) into.add(name!);\n return into;\n}\n\n/** Where a selector lands relative to the story: on it or inside it, or on an ancestor whose declarations it inherits. */\ninterface Reach {\n readonly within: boolean;\n readonly above: boolean;\n}\n\nfunction reach(selector: string, root: Element): Reach {\n const resting = selector.replace(RESTLESS, '').trim() || '*';\n try {\n return { within: root.matches(resting) || root.querySelector(resting) !== null, above: root.parentElement?.closest(resting) != null };\n } catch {\n // A selector the engine can't query is kept rather than lost.\n return { within: true, above: true };\n }\n}\n\n/** A declaration block split into what it defines and the custom properties its other declarations read. */\nfunction readBlock(block: string, defs: Map<string, Set<string>>, seeds: Set<string> | null): void {\n for (const [, name, value] of block.matchAll(CUSTOM_DECL)) {\n const refs = defs.get(name!) ?? new Set<string>();\n varRefs(value!, refs);\n defs.set(name!, refs);\n }\n if (seeds) varRefs(block.replace(CUSTOM_DECL, ''), seeds);\n}\n\nfunction blockOf(rule: CSSRule): string {\n const text = rule.cssText;\n const open = text.indexOf('{');\n return open < 0 ? '' : text.slice(open + 1, text.lastIndexOf('}'));\n}\n\nfunction walk(rules: CSSRuleList, root: Element, defs: Map<string, Set<string>>, seeds: Set<string>, parent?: Reach): void {\n for (const rule of Array.from(rules)) {\n const imported = (rule as CSSRule & { styleSheet?: CSSStyleSheet | null }).styleSheet;\n if (imported) {\n const inner = cssRulesOf(imported);\n if (inner) walk(inner, root, defs, seeds);\n continue;\n }\n const children = (rule as CSSRule & { cssRules?: CSSRuleList }).cssRules;\n if (rule.type !== STYLE_RULE) {\n // @media, @supports, @layer and @container hold rules; a keyframe or a font face reaches no element.\n if (children) walk(children, root, defs, seeds, parent);\n continue;\n }\n // A nested rule's selector is relative to its parent's, so it inherits the parent's reach.\n const at = parent ?? reach((rule as CSSStyleRule).selectorText, root);\n if (at.within || at.above) readBlock(blockOf(rule), defs, at.within ? seeds : null);\n }\n}\n\nexport function cssRulesOf(sheet: CSSStyleSheet): CSSRuleList | null {\n try {\n return sheet.cssRules;\n } catch {\n // A cross-origin sheet refuses to be read.\n return null;\n }\n}\n\n/**\n * The custom properties the story under `root` uses: those read by a declaration of a rule matching an element in\n * it, or by its inline styles, and every property one of those reads in turn through a definition that reaches it.\n * A definition on an ancestor reaches it by inheritance; an ancestor's other declarations do not count as use.\n */\nexport function usedCssVars(doc: Document, root: Element): Set<string> {\n const defs = new Map<string, Set<string>>();\n const seeds = new Set<string>();\n for (const sheet of Array.from(doc.styleSheets)) {\n const rules = cssRulesOf(sheet);\n if (rules) walk(rules, root, defs, seeds);\n }\n for (const el of Array.from(doc.querySelectorAll('[style]'))) {\n const within = root.contains(el);\n if (within || el.contains(root)) readBlock(el.getAttribute('style') ?? '', defs, within ? seeds : null);\n }\n\n const used = new Set<string>();\n const queue = [...seeds];\n while (queue.length > 0) {\n const name = queue.pop()!;\n if (used.has(name)) continue;\n used.add(name);\n for (const ref of defs.get(name) ?? []) queue.push(ref);\n }\n return used;\n}\n","import type { CssVarReport } from '../protocol/messages';\nimport { usedCssVars, varRefs } from './cssVarUse';\nimport { isSafeOverride } from './safeOverride';\n\nconst collect = (text: string, names: Set<string>) => void varRefs(text, names);\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 — each marked with whether the story under `root` uses it.\n * Values resolve on `root`, the document's by default, or else 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 const used = usedCssVars(doc, root);\n return [...names]\n .sort()\n .map((name) => ({ name, value: values.get(name) ?? '', overridden: overridden(name), used: used.has(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 selector = `:is(${scope}):not(#fg-overrides)`;\n /** Each declaration goes through the rule's own CSSOM, which drops what the browser would not take as one value,\n * and the text is written back from what it kept; an override that could close the rule is never offered. */\n const write = () => {\n style.textContent = values.size > 0 ? `${selector} {}` : '';\n const rule = style.sheet?.cssRules[0] as CSSStyleRule | undefined;\n if (!rule) return;\n for (const [name, value] of values) if (isSafeOverride(name, value)) rule.style.setProperty(name, value);\n const decls = [...values.keys()].flatMap((name) => {\n const value = rule.style.getPropertyValue(name).trim();\n return value && isSafeOverride(name, value) ? [` ${name}: ${value};`] : [];\n });\n style.textContent = decls.length > 0 ? `${selector} {\\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","/** 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 { type ClockHandle, createClock, createClockRegistry } from '@weasel-js/clock';\nimport { useClockLoop } from '@weasel-js/clock/react';\nimport { useLatest } from '@weasel-js/core';\nimport { type ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport type { LoadedStory } from '../story/types';\nimport { clockSpecOf } from './clockSpec';\nimport { ClockContext } from './context';\nimport type { TimelineSpec } from './types';\n\nconst keyOf = (spec: TimelineSpec | null): string | null =>\n spec ? `${spec.start ?? 0}|${spec.duration}|${spec.loop ?? true}|${spec.rate ?? 1}` : null;\n\n/**\n * A clock of the story's own, where no lab makes one: made when `spec` appears, dropped when it goes, and redeclared\n * when it changes; the clock keeps any span the story's `setSpan` laid over it.\n */\nexport function useOwnClock(spec: TimelineSpec | null): ClockHandle | null {\n const [handle, setHandle] = useState(() => (spec ? createClock(clockSpecOf(spec)) : null));\n let current = handle;\n if (spec && !handle) {\n current = createClock(clockSpecOf(spec));\n setHandle(current);\n } else if (!spec && handle) {\n current = null;\n setHandle(null);\n }\n const latest = useLatest(spec);\n const key = keyOf(spec);\n const declared = useRef(key);\n useEffect(() => {\n if (!current || !latest.current || key === declared.current) return;\n declared.current = key;\n current.declare(clockSpecOf(latest.current));\n }, [current, key, latest]);\n return current;\n}\n\nfunction OwnClock({ spec, children }: { spec: TimelineSpec; children: ReactNode }) {\n const handle = useOwnClock(spec);\n const [registry] = useState(() => createClockRegistry(handle));\n useClockLoop(registry);\n return <ClockContext.Provider value={handle}>{children}</ClockContext.Provider>;\n}\n\n/**\n * Gives a story declaring a timeline a clock of its own where nothing above supplies one — an index page, a frame, a\n * story test. It stands paused at the span's start, with no transport, until the story moves it.\n */\nexport function WithStoryClock({ story, config, children }: { story: LoadedStory; config: unknown; children: ReactNode }) {\n const outer = useContext(ClockContext);\n if (outer || !story.timeline) return children;\n return <OwnClock spec={story.timeline(config)}>{children}</OwnClock>;\n}\n","import { Component, type ReactNode } from 'react';\nimport type { Decorator, LoadedStory, StoryContext } from '../story/types';\nimport { WithStoryClock } from '../timeline/StoryClock';\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 (\n <WithStoryClock story={story} config={ctx.config}>\n <Decorated story={story} ctx={ctx} decorators={decorators} />\n </WithStoryClock>\n );\n }\n}\n","import { type ConfigNode, type ConfigSchema, type ConfigShape, f, ObjectNode, UnionNode } from '@weasel-js/labkit/config';\nimport { isPlainObject } from '@weasel-js/core';\nimport { iconFromData } from '@weasel-js/ui/components/Icon';\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/**\n * Storybook's `SBType`, as far as forge reads it: the shape of an arg's value. A control is built from the parts of\n * an array, an object or a union, and a union of objects that each pin one field to a string is edited as a choice\n * of that string, with the chosen object's own fields under it.\n */\nexport type ArgShape =\n | { name: 'boolean' | 'string' | 'number' }\n | { name: 'enum'; value: readonly string[] }\n | { name: 'array'; value: ArgShape }\n | { name: 'object'; value: Readonly<Record<string, ArgShape>> }\n | { name: 'union'; value: readonly ArgShape[] };\n\n/** A CSF `argTypes` entry, as far as forge reads it. */\nexport interface ArgType {\n name?: string;\n description?: string;\n type?: ArgShape;\n control?:\n | string\n | false\n | {\n type?: string;\n min?: number;\n max?: number;\n step?: number;\n /** forge's own: a qualified icon ref (`ui:variantSolid`) per option, drawn in place of its label. */\n icons?: Readonly<Record<string, string>>;\n };\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 icons?: Readonly<Record<string, string>>;\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, icons: control?.icons };\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\ntype ObjectShape = Extract<ArgShape, { name: 'object' }>;\n\n/**\n * A union's members by the string each pins one field to, with that field: the first field every member pins.\n * Members pinning the same string are one variant, holding the fields of each.\n */\nfunction variantsOf(members: readonly ArgShape[]): { tag: string; variants: Map<string, ObjectShape> } | null {\n const objects = members.filter((m): m is ObjectShape => m.name === 'object');\n if (objects.length !== members.length || objects.length === 0) return null;\n const pinned = (m: ObjectShape, key: string) => {\n const field = m.value[key];\n return field?.name === 'enum' && field.value.length === 1 ? field.value[0] : undefined;\n };\n const tag = Object.keys(objects[0]!.value).find((key) => objects.every((m) => pinned(m, key) !== undefined));\n if (tag === undefined) return null;\n const variants = new Map<string, ObjectShape>();\n for (const member of objects) {\n const name = pinned(member, tag)!;\n const held = variants.get(name)?.value ?? {};\n const added = Object.entries(member.value).filter(([key]) => !(key in held));\n variants.set(name, { name: 'object', value: { ...held, ...Object.fromEntries(added) } });\n }\n return { tag, variants };\n}\n\nfunction fieldsOf(shape: ObjectShape, value: unknown, omit?: string): Record<string, Leaf> | null {\n const held = isPlainObject(value) ? value : {};\n const fields: Record<string, Leaf> = {};\n for (const [key, field] of Object.entries(shape.value)) {\n if (key === omit) continue;\n const leaf = shaped(field, held[key]);\n if (leaf) fields[key] = leaf;\n }\n return Object.keys(fields).length > 0 ? fields : null;\n}\n\n/** A leaf editing a value of `shape`, starting at `value`; null for a shape no control can edit. */\nfunction shaped(shape: ArgShape, value: unknown): Leaf | null {\n switch (shape.name) {\n case 'boolean':\n return f.boolean(value as boolean);\n case 'string':\n return f.string(value as string);\n case 'number':\n return f.number(value as number);\n case 'enum':\n return shape.value.length > 0 ? f.enum(value as string, shape.value) : null;\n case 'array': {\n const item = shaped(shape.value, undefined);\n return item ? (f.list(Array.isArray(value) ? value : [], item) as unknown as Leaf) : null;\n }\n case 'object': {\n const fields = fieldsOf(shape, value);\n if (!fields) return null;\n const node = f.object(fields);\n return new ObjectNode(isPlainObject(value) ? value : node.default, node.annotations, node.options) as unknown as Leaf;\n }\n case 'union': {\n const union = variantsOf(shape.value);\n if (!union) return null;\n const { tag, variants } = union;\n const held = isPlainObject(value) ? value[tag] : undefined;\n const nodes = Object.fromEntries(\n [...variants].map(([name, member]) => [name, f.object(fieldsOf(member, held === name ? value : undefined, tag) ?? {})]),\n );\n const node = f.union(tag, nodes);\n const start = typeof held === 'string' && variants.has(held) ? value : node.default;\n return new UnionNode(start, node.annotations, node.options) as unknown as Leaf;\n }\n default:\n return null;\n }\n}\n\n/** A leaf for an object-valued arg: from its argType's shape where one is given and editable, else a JSON leaf. */\nfunction structured(argType: ArgType, value: unknown): Leaf | null {\n return (argType.type ? shaped(argType.type, value) : null) ?? inferred(value);\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 ? structured(argType, value) : null;\n const { icons } = control;\n const node = f.enum(\n def<string>(),\n icons ? options.map((value) => {\n const ref = iconFromData(icons[value]);\n return { value, label: value, ...(ref ? { icon: ref } : {}) };\n }) : options,\n );\n return control.type === 'radio' || control.type === 'inline-radio' ? node.radio() : node;\n }\n case 'object':\n return has ? (argType.type ? shaped(argType.type, value) : null) ?? 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 type { TimelineSpec } from './types';\n\nconst isSpec = (value: unknown): value is TimelineSpec =>\n !!value && typeof value === 'object' && typeof (value as { duration?: unknown }).duration === 'number';\n\n/** A declared timeline as a function of config: a spec stands for itself at every config, a function is called with\n * the config. Anything else declares none. `adapt` turns the trial's config into what the function is handed. */\nexport function timelineOf(\n value: unknown,\n adapt: (config: unknown) => unknown = (config) => config,\n): ((config: unknown) => TimelineSpec) | null {\n if (isSpec(value)) return () => value;\n if (typeof value === 'function') return (config) => (value as (input: unknown) => TimelineSpec)(adapt(config));\n return null;\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 { DEFAULT_LAYOUT, type Globals, type Layout, type 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 '@weasel-js/core';\nimport { withUnsent } from './portSafe';\nimport { PROP_ARG_TYPES_EXPORT } from './propArgTypes';\nimport { timelineOf } from '../timeline/declare';\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. `title` is the index entry's, which wins over the meta's own: the\n * index reads the meta without running it and falls back to the auto title for one it cannot read, so taking the\n * meta's here would give one story two ids. `parameters` are the project's, under the meta's and each story's.\n */\nexport function loadCsfModule(\n mod: Record<string, unknown>,\n title: string,\n projectParameters: Record<string, unknown> = {},\n): LoadedStory[] {\n const meta = (isPlainObject(mod.default) ? mod.default : {}) as Annotations;\n const stories: LoadedStory[] = [];\n const propArgTypes = isPlainObject(mod[PROP_ARG_TYPES_EXPORT]) ? (mod[PROP_ARG_TYPES_EXPORT] as Record<string, ArgType>) : undefined;\n\n for (const [exportName, value] of Object.entries(mod)) {\n if (exportName === PROP_ARG_TYPES_EXPORT) continue;\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 render = spec.render ?? meta.render;\n // A render that takes no args draws the same thing whatever a prop's control says.\n const fromProps = render === undefined || render.length > 0 ? propArgTypes : undefined;\n const config = argsToSchema(\n args,\n combineParameters(fromProps, 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 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 forgeParams = parameters.forge as { isolate?: unknown; timeline?: unknown } | undefined;\n const isolate = forgeParams?.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 : DEFAULT_LAYOUT,\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 timeline: timelineOf(forgeParams?.timeline, (config) => csfContext(config, {}).args),\n });\n }\n return stories;\n}\n","import { f } from '@weasel-js/labkit/config';\nimport { isNative } from './define';\nimport { storyId, storyNameFromExport } from './ids';\nimport { timelineOf } from '../timeline/declare';\nimport type { LoadedStory, MetaSpec, StorySpec } from './types';\nimport { DEFAULT_LAYOUT } from '../protocol/messages';\n\n/**\n * Normalizes a module written with `meta` and `story`; exports that are not stories are skipped. `title` is the index\n * entry's, which wins over the meta's own: the index reads the meta without running it and can miss it, so taking\n * the meta's here would give one story two titles.\n */\nexport function loadNativeModule(mod: Record<string, unknown>, title: string): LoadedStory[] {\n const metaSpec: MetaSpec = isNative(mod.default, 'meta') ? (mod.default as MetaSpec) : {};\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 ?? DEFAULT_LAYOUT,\n viewport: spec.viewport ?? null,\n isolate: spec.isolate ?? metaSpec.isolate ?? null,\n play: spec.play ?? null,\n timeline: timelineOf(spec.timeline ?? metaSpec.timeline),\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`. `title` is the module's index entry title, which every story takes as given.\n */\nexport function loadStories(\n mod: Record<string, unknown>,\n title: string,\n parameters?: Record<string, unknown>,\n): LoadedStory[] {\n return isNative(mod.default, 'meta')\n ? loadNativeModule(mod, title)\n : loadCsfModule(mod, title, 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","import { useLatest } from '@weasel-js/core';\nimport { type RefObject, useLayoutEffect, useRef } from 'react';\nimport { createOverrides, type Overrides } from '../frame/cssVars';\nimport type { FrameSetup } from '../frame/FrameController';\nimport { createGlobalsTarget } from '../frame/globalsTarget';\nimport type { Globals } from '../protocol/messages';\nimport type { CssOverrides } from './cssVars/overrides';\n\n/** A selector matching only the element carrying `id`. */\nexport const scopeOf = (id: string) => `[data-fg-host=\"${id}\"]`;\n\n/** Applies `globals` to the host carrying `hostId` through `setup`; the returned function removes what it styled. */\nexport function applyGlobalsTo(host: HTMLElement, hostId: string, globals: Globals, setup: FrameSetup): () => void {\n const target = createGlobalsTarget(host, scopeOf(hostId));\n setup.applyGlobals?.(globals, target);\n return () => target.dispose();\n}\n\n/**\n * The conditions a host element lives under: its globals target, and its CSS variable overrides rule with the\n * trial's persisted overrides put back and kept in step. Everything is scoped to `hostId`; no registry connection.\n * The returned ref holds the overrides while `host` is set.\n */\nexport function useHostConditions(\n host: HTMLElement | null,\n opts: { hostId: string; globals: Globals; overrides: CssOverrides; setup: FrameSetup },\n): RefObject<Overrides | null> {\n const { hostId, globals, overrides: persisted, setup } = opts;\n const latest = useLatest({ setup });\n const overridesRef = useRef<Overrides | null>(null);\n\n useLayoutEffect(() => {\n if (!host) return;\n const scope = scopeOf(hostId);\n const { cssVarsScope } = latest.current.setup;\n overridesRef.current = createOverrides(\n host.ownerDocument,\n cssVarsScope ? `${scope}, ${scope} :is(${cssVarsScope})` : scope,\n );\n return () => {\n overridesRef.current?.dispose();\n overridesRef.current = null;\n };\n }, [host, hostId, latest]);\n\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, hostId, persisted]);\n\n useLayoutEffect(\n () => (host ? applyGlobalsTo(host, hostId, globals, latest.current.setup) : undefined),\n [host, hostId, globals, latest],\n );\n\n return overridesRef;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/kitIcons.tsx","../src/protocol/schema.ts","../src/protocol/channel.ts","../src/story/library.ts","../src/story/indexBundle.ts","../src/shell/labDensity.ts","../src/frame/index/indexEnv.ts","../src/frame/index/LabBadge.tsx","../src/frame/index/LibraryBadge.tsx","../src/frame/index/variants.ts","../src/frame/index/Description.tsx","../src/frame/index/IndexPage.tsx"],"names":["jsx","Badge","resolveConfigSchema","isEntryShown","isConfigBranch","createContext","useContext"],"mappings":"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","file":"chunk-PPB7VP6R.js","sourcesContent":["import type { ReactNode } from 'react';\nimport { createRoot, type Root } from 'react-dom/client';\nimport { IconRegistryProvider } from '@weasel-js/core';\nimport type { IconTable } from '@weasel-js/icons';\nimport { kitIcons } from '@weasel-js/ui/kit-icons';\n\n/** A React root whose every render draws its icons from the kit's tables, plus `extra` (an app's own): the\n * workshop's, and each story frame's. */\nexport function createKitRoot(container: Element, extra: readonly IconTable[] = []): Pick<Root, 'render' | 'unmount'> {\n const root = createRoot(container);\n const icons = extra.length > 0 ? [...kitIcons, ...extra] : kitIcons;\n return {\n render: (node: ReactNode) => root.render(<IconRegistryProvider icons={icons}>{node}</IconRegistryProvider>),\n unmount: () => root.unmount(),\n };\n}\n","import {\n f,\n isConfigBranch,\n isEntryShown,\n resolveConfigSchema,\n schemaNodeAtPath,\n type Annotations,\n type BranchAnnotations,\n type ConfigBranch,\n type ConfigEntry,\n type ConfigNode,\n type ConfigSchema,\n type ConfigShape,\n type NodeOptions,\n} from '@weasel-js/labkit/config';\n\n/** The section a described entry sits in, as structured-clone data. */\nexport interface SectionDescription {\n label: string;\n collapsed?: boolean;\n}\n\n/** One key of a described shape: a leaf, or a branch holding more. */\nexport type DescribedEntry =\n | {\n branch: true;\n annotations: BranchAnnotations;\n section?: SectionDescription;\n conditional: boolean;\n children: DescribedShape;\n }\n | {\n branch: false;\n kind: string | null;\n default: unknown;\n annotations: Annotations;\n section?: SectionDescription;\n conditional: boolean;\n validated: boolean;\n /** The node draws its own row with `.render`, which stays in the frame. */\n customControl: boolean;\n };\n\n/** A config shape as structured-clone data: each key's entry, described. */\nexport type DescribedShape = { [key: string]: DescribedEntry };\n\n/** A story's `f.schema` as structured-clone data. */\nexport interface SchemaDescription {\n nodes: DescribedShape;\n}\n\n/** Answers the workshop has for the rebuilt schema's predicates. */\nexport interface SchemaAnswers {\n hidden(path: string, config: unknown): boolean;\n errors(path: string, config: unknown): string[];\n}\n\nconst joinPath = (at: string, key: string): string => (at === '' ? key : `${at}.${key}`);\n\nfunction describeShape(shape: ConfigShape): DescribedShape {\n const out: DescribedShape = {};\n for (const [key, entry] of Object.entries(shape)) {\n const { section, showIf } = entry.options;\n const common = {\n annotations: { ...entry.annotations },\n ...(section === undefined ? {} : { section: { ...section } }),\n conditional: showIf !== undefined,\n };\n out[key] = isConfigBranch(entry)\n ? { branch: true, ...common, children: describeShape(entry.children) }\n : {\n branch: false,\n kind: entry.kind,\n default: entry.default,\n ...common,\n validated: entry.options.validate !== undefined,\n customControl: entry.options.render !== undefined,\n };\n }\n return out;\n}\n\nexport function describeSchema(schema: ConfigSchema<unknown>): SchemaDescription {\n return { nodes: describeShape(schema.nodes) };\n}\n\nfunction rebuildShape(shape: DescribedShape, at: string, answers: SchemaAnswers): ConfigShape {\n const out: Record<string, ConfigEntry> = {};\n for (const [key, entry] of Object.entries(shape)) {\n const path = joinPath(at, key);\n const options: NodeOptions = {\n ...(entry.section === undefined ? {} : { section: entry.section }),\n ...(entry.conditional ? { showIf: (config) => !answers.hidden(path, config) } : {}),\n };\n if (entry.branch) {\n const branch: ConfigBranch = {\n children: rebuildShape(entry.children, path, answers),\n annotations: entry.annotations,\n options,\n };\n out[key] = branch;\n } else {\n const node: ConfigNode = {\n kind: entry.kind,\n default: entry.default,\n annotations: entry.annotations,\n options: entry.validated ? { ...options, validate: (_leaf, config) => answers.errors(path, config) } : options,\n };\n out[key] = node;\n }\n }\n return out;\n}\n\nexport function schemaFromDescription(\n description: SchemaDescription,\n answers: SchemaAnswers,\n): ConfigSchema<unknown> {\n return f.schema(rebuildShape(description.nodes, '', answers)) as ConfigSchema<unknown>;\n}\n\n/** Evaluate a schema's own predicates for one config — the frame's half of `answers`. */\nexport function answerSchema(\n schema: ConfigSchema<unknown>,\n config: unknown,\n): { hidden: string[]; errors: Record<string, string[]> } {\n const hidden: string[] = [];\n const errors: Record<string, string[]> = {};\n const record = config as Record<string, unknown>;\n const { group } = resolveConfigSchema(schema);\n\n const walk = (shape: ConfigShape, at: string): void => {\n for (const [key, entry] of Object.entries(shape)) {\n const path = joinPath(at, key);\n if (!isEntryShown(entry, record, group)) hidden.push(path);\n if (isConfigBranch(entry)) {\n walk(entry.children, path);\n continue;\n }\n const { validate } = entry.options;\n if (!validate) continue;\n const leaf = schemaNodeAtPath(group, path);\n if (!leaf || 'children' in leaf) continue;\n const found = validate(leaf, record);\n if (found.length > 0) errors[path] = found;\n }\n };\n walk(schema.nodes, '');\n return { hidden, errors };\n}\n","import { createEmitter } from '@weasel-js/registry';\nimport { type Envelope, PROTOCOL_VERSION } from './messages';\n\nexport interface PortLike {\n postMessage(message: unknown): void;\n addEventListener(type: 'message', fn: (event: MessageEvent) => void): void;\n removeEventListener(type: 'message', fn: (event: MessageEvent) => void): void;\n start?(): void;\n close(): void;\n}\n\n/** One end of a two-way message link: sends `Out`, hears `In`. */\nexport interface Channel<In, Out> {\n send(msg: Out): void;\n on(fn: (msg: In) => void): () => void;\n close(): void;\n}\n\nexport type Mismatch = { reason: 'not-an-envelope' } | { reason: 'version'; version: unknown };\n\nexport interface ChannelOptions {\n onMismatch?: (mismatch: Mismatch) => void;\n}\n\nexport function openChannel<In, Out>(port: PortLike, options: ChannelOptions = {}): Channel<In, Out> {\n const messages = createEmitter<[msg: In]>();\n const onMessage = (event: MessageEvent) => {\n const data: unknown = event.data;\n if (typeof data !== 'object' || data === null || !('msg' in data)) {\n options.onMismatch?.({ reason: 'not-an-envelope' });\n return;\n }\n const envelope = data as Partial<Envelope<In>>;\n if (envelope.v !== PROTOCOL_VERSION) {\n options.onMismatch?.({ reason: 'version', version: envelope.v });\n return;\n }\n messages.emit(envelope.msg as In);\n };\n port.addEventListener('message', onMessage);\n port.start?.();\n return {\n send: (msg) => port.postMessage({ v: PROTOCOL_VERSION, msg } satisfies Envelope<Out>),\n on: messages.subscribe,\n close: () => {\n port.removeEventListener('message', onMessage);\n port.close();\n },\n };\n}\n","import type { AppearanceProps } from '@weasel-js/ui/appearance';\nimport { createContext } from 'react';\n\n/** One library of a project: the story files under `path` carry `label`. */\nexport interface Library {\n /** A stretch of path every story file of the library has, with forward slashes: `/packages/ui/`. */\n path: string;\n label: string;\n /** The tint of the library's badge, as a `<Badge>` takes one. Default: the badge's own low emphasis. */\n tint?: AppearanceProps['tint'];\n}\n\n/** A project's libraries, as the tree's package filter, the index page header, and Get Info ask about them. */\nexport interface Libraries {\n /** The label of the first library whose `path` the story's file holds, else its title's first segment. */\n of(entry: { file: string; title: string }): string;\n tintOf(label: string): AppearanceProps['tint'];\n}\n\nexport function librariesFrom(table: readonly Library[] = []): Libraries {\n return {\n of(entry) {\n const file = entry.file.replaceAll('\\\\', '/');\n return table.find((library) => file.includes(library.path))?.label ?? entry.title.split('/')[0] ?? entry.title;\n },\n tintOf: (label) => table.find((library) => library.label === label)?.tint,\n };\n}\n\n/** No table: every story's library is its title's first segment. */\nexport const TITLE_LIBRARIES = librariesFrom();\n\n/** The workshop's libraries, from `ShellConfig.libraries`. */\nexport const LibrariesContext = createContext<Libraries>(TITLE_LIBRARIES);\n","import { byComponent, indexId, isIndexId } from './indexPages';\nimport { type Libraries, TITLE_LIBRARIES } from './library';\nimport { indexRenderOf, loadStories } from './load';\nimport { taggedIds } from './tags';\nimport type { IndexRender, LoadedStory } from './types';\n\n/** A component's index page as it loads: its stories in index order, and the page's own render. */\nexport interface IndexBundle {\n title: string;\n /** The package the component ships in. */\n library: string;\n description?: string;\n /** The tags every story of the component carries. */\n tags?: readonly string[];\n /** The ids of the stories tagged `gallery`. */\n galleries: readonly string[];\n /** The ids of the stories tagged `lab`. */\n labs: readonly string[];\n stories: readonly LoadedStory[];\n descriptions: Readonly<Record<string, string>>;\n render: IndexRender | null;\n}\n\n/** What a document has loaded for an entry: one story, or a component's index page. */\nexport type Loaded = { kind: 'story'; story: LoadedStory } | { kind: 'index'; bundle: IndexBundle };\n\n/** One story as an index page's loader finds it. */\nexport interface BundleEntry {\n id: string;\n title: string;\n file: string;\n exportName: string;\n description?: string;\n componentDescription?: string;\n tags?: readonly string[];\n}\n\n/** Where `loadIndexBundle` reads a component's stories from. */\nexport interface IndexBundleSource {\n index: readonly BundleEntry[];\n /** The module of a story file; called once per file the component's stories live in. */\n importOf: (file: string) => Promise<Record<string, unknown>>;\n load?: ((mod: Record<string, unknown>, title: string, parameters?: Record<string, unknown>) => LoadedStory[]) | undefined;\n parameters?: Record<string, unknown> | undefined;\n prepare?: ((story: LoadedStory) => void | Promise<void>) | undefined;\n libraries?: Libraries | undefined;\n}\n\nconst commonTags = (entries: readonly BundleEntry[]): string[] | undefined => {\n const [first, ...rest] = entries;\n const common = (first?.tags ?? []).filter((tag) => rest.every((e) => e.tags?.includes(tag)));\n return common.length > 0 ? common : undefined;\n};\n\n/**\n * The index page `id` names, loaded from every file its component's stories live in. Its description and library are\n * its primary file's. Rejects when no story of `index` belongs to the component.\n */\nexport async function loadIndexBundle(id: string, source: IndexBundleSource): Promise<IndexBundle> {\n const { importOf, load = loadStories, parameters, prepare, libraries = TITLE_LIBRARIES } = source;\n const entries = source.index.filter((e) => !isIndexId(e.id) && indexId(e.title) === id);\n const primary = byComponent(entries)[0];\n if (!primary) throw new Error(`No component with index \"${id}\"`);\n const { title } = primary;\n const files = [...new Set(entries.map((e) => e.file))];\n const mods = await Promise.all(files.map(importOf));\n const byFile = new Map(files.map((file, i) => [file, load(mods[i] ?? {}, title, parameters)]));\n const stories = entries.flatMap((e) => byFile.get(e.file)?.find((s) => s.exportName === e.exportName) ?? []);\n for (const story of stories) await prepare?.(story);\n const tags = commonTags(entries);\n return {\n title,\n library: libraries.of(primary),\n ...(primary.componentDescription === undefined ? {} : { description: primary.componentDescription }),\n ...(tags === undefined ? {} : { tags }),\n ...taggedIds(entries),\n stories,\n descriptions: Object.fromEntries(entries.flatMap((e) => (e.description ? [[e.id, e.description]] : []))),\n render: mods.map(indexRenderOf).find((render) => render !== null) ?? null,\n };\n}\n","/** The density the workshop's lab is drawn at, and so the density a capture of a story in it takes. */\nexport const LAB_DENSITY = 'roomy';\n","import type { Globals } from '../../protocol/messages';\nimport type { IndexBundle } from '../../story/indexBundle';\nimport { isGallery } from '../../story/tags';\nimport type { Decorator, DepGraph } from '../../story/types';\nimport type { IndexEnv } from './IndexPage';\n\n/** What an index page's document adds to its bundle. */\nexport interface IndexEnvInputs {\n /** The component graph, or null where it has not arrived or the document has none. */\n graph: DepGraph | null;\n globals: Globals;\n /** The frame config's, outermost. */\n decorators: readonly Decorator[];\n open: (id: string) => void;\n}\n\n/** What every cell of `bundle`'s page shares, in whichever document renders it. */\nexport function indexEnvOf(bundle: IndexBundle, { graph, globals, decorators, open }: IndexEnvInputs): IndexEnv {\n const gallery = isGallery(bundle);\n const dependencies = gallery ? undefined : graph?.[bundle.title];\n return {\n title: bundle.title,\n library: bundle.library,\n ...(bundle.description === undefined ? {} : { description: bundle.description }),\n stories: bundle.stories,\n descriptions: bundle.descriptions,\n gallery,\n galleries: bundle.galleries,\n labs: bundle.labs,\n ...(dependencies ? { dependencies } : {}),\n globals,\n decorators,\n open,\n // A story that throws shows its error in its own cell; the rest of the page is still worth reading.\n onError: (error) => console.error(error),\n };\n}\n","// The component's own entry, not the barrel: the barrel would bring every weasel-ui component into each frame.\nimport { Badge } from '@weasel-js/ui/components/Badge';\n\n/** Marks a story tagged `lab`: opening it opens a whole screen, not a specimen. */\nexport function LabBadge({ className }: { className?: string }) {\n return (\n <Badge grade=\"info\" variant=\"subtle\" size=\"sm\" {...(className ? { className } : {})}>\n Lab\n </Badge>\n );\n}\n","// The component's own entry, not the barrel: the barrel would bring every weasel-ui component into each frame.\nimport { Badge } from '@weasel-js/ui/components/Badge';\nimport { useContext } from 'react';\nimport { LibrariesContext } from '../../story/library';\n\n/** A component's library, as a badge in the tint the project gave that library. */\nexport function LibraryBadge({ library, className }: { library: string; className?: string }) {\n const tint = useContext(LibrariesContext).tintOf(library);\n return (\n <Badge emphasis=\"low\" {...(tint === undefined ? {} : { tint })} variant=\"subtle\" size=\"sm\" {...(className ? { className } : {})}>\n {library}\n </Badge>\n );\n}\n","import { type ConfigSchema, type ConfigShape, isConfigBranch, isEntryShown, resolveConfigSchema, titleCase } from '@weasel-js/labkit/config';\nimport { isPlainObject } from '@weasel-js/core';\n\nexport interface VariantValue {\n value: unknown;\n label: string;\n}\n\n/** One control a story is shown varying along, with every other control at its default. */\nexport interface VariantRow {\n /** Dotted, as `setConfig` takes it. */\n path: string;\n label: string;\n values: VariantValue[];\n}\n\n/** Above this many choices a row stops being something to scan. */\nexport const MAX_ENUM_OPTIONS = 8;\nexport const MAX_ROWS = 6;\n\nconst labelOf = (key: string, name: string | undefined): string => name ?? titleCase(key);\n\n/**\n * The boolean and enum controls of `schema` a story can be shown varying along, in schema order: skipped are\n * controls that draw their own row, controls hidden at the defaults, and enums with more than\n * `MAX_ENUM_OPTIONS` choices. At most `MAX_ROWS`.\n */\nexport function variantRows(schema: ConfigSchema<unknown>): VariantRow[] {\n const defaults = schema.defaults() as Record<string, unknown>;\n const { group } = resolveConfigSchema(schema);\n const rows: VariantRow[] = [];\n const walk = (shape: ConfigShape, at: string): void => {\n for (const [key, entry] of Object.entries(shape)) {\n if (rows.length >= MAX_ROWS) return;\n const path = at === '' ? key : `${at}.${key}`;\n if (!isEntryShown(entry, defaults, group)) continue;\n if (isConfigBranch(entry)) {\n walk(entry.children, path);\n continue;\n }\n if (entry.annotations.hidden || entry.options.render) continue;\n const label = labelOf(key, entry.annotations.name);\n if (entry.kind === 'boolean') {\n rows.push({ path, label, values: [false, true].map((value) => ({ value, label: String(value) })) });\n } else if (entry.kind === 'enum') {\n const options = entry.annotations.options ?? [];\n if (options.length < 2 || options.length > MAX_ENUM_OPTIONS) continue;\n rows.push({ path, label, values: options.map((o) => ({ value: o.value, label: o.label })) });\n }\n }\n };\n walk(schema.nodes, '');\n return rows;\n}\n\n/** `over` merged into `base`: nested plain objects merge, anything else replaces. */\nexport function mergeConfig(base: unknown, over: unknown): unknown {\n if (!isPlainObject(base) || !isPlainObject(over)) return over === undefined ? base : over;\n const out: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(over)) out[key] = mergeConfig(base[key], value);\n return out;\n}\n\n/** `config` with `value` at dotted `path`, copying each object along the way. */\nexport function withValueAt(config: unknown, path: string, value: unknown): unknown {\n const [head, ...rest] = path.split('.');\n if (head === undefined) return value;\n const record = isPlainObject(config) ? config : {};\n return { ...record, [head]: rest.length === 0 ? value : withValueAt(record[head], rest.join('.'), value) };\n}\n","// The component's own entry, not the barrel: the barrel would bring every weasel-ui component into each frame.\nimport { InlineMarkdown } from '@weasel-js/ui/components/InlineMarkdown';\n\n/** Splits JSDoc prose into paragraphs at blank lines, rejoining the lines a comment wrapped. */\nexport function paragraphsOf(text: string): string[] {\n return text\n .split(/\\n\\s*\\n/)\n .map((paragraph) => paragraph.split('\\n').map((line) => line.trim()).filter(Boolean).join(' '))\n .filter(Boolean);\n}\n\n/** A story's or component's JSDoc description, a paragraph per `className`-ed `<p>`, its inline markdown drawn. */\nexport function Description({ text, className }: { text: string; className: string }) {\n return (\n <>\n {paragraphsOf(text).map((paragraph, i) => (\n <p key={i} className={className}>\n <InlineMarkdown text={paragraph} />\n </p>\n ))}\n </>\n );\n}\n","// The components' own entries, not the barrel: the barrel would bring every weasel-ui component into each frame.\nimport { Badge } from '@weasel-js/ui/components/Badge';\nimport {\n createContext,\n type MouseEvent,\n type ReactNode,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { Globals } from '../../protocol/messages';\nimport { indexId } from '../../story/indexPages';\nimport type { ComponentDeps, Decorator, IndexContext, IndexStoryProps, LoadedStory, StoryContext } from '../../story/types';\nimport { StoryHost } from '../StoryHost';\nimport { useNearViewport } from '@weasel-js/react';\nimport { mergeConfig, variantRows, withValueAt } from './variants';\nimport './index.css';\nimport { Description } from './Description';\nimport { LabBadge } from './LabBadge';\nimport { LibraryBadge } from './LibraryBadge';\nimport num from '@weasel-js/theme/numeric.module.css';\n\n/** What every cell on an index page shares with the frame that hosts it. */\nexport interface IndexEnv {\n title: string;\n /** The package the component ships in. */\n library?: string;\n description?: string;\n stories: readonly LoadedStory[];\n /** Per story id, the JSDoc above its export. */\n descriptions: Readonly<Record<string, string>>;\n /** A catalog or showcase rather than one component: every story of it is tagged `gallery`. */\n gallery?: boolean;\n /** The ids of the stories tagged `gallery`. */\n galleries?: readonly string[];\n /** The ids of the stories tagged `lab`: whole screens, which the page links to but does not embed. */\n labs?: readonly string[];\n /** The component's place in the component graph; absent until the graph arrives, and for a gallery. */\n dependencies?: ComponentDeps;\n globals: Globals;\n /** The frame config's, outermost. */\n decorators: readonly Decorator[];\n open: (id: string) => void;\n onError: (error: unknown) => void;\n}\n\nexport const IndexEnvContext = createContext<IndexEnv | null>(null);\n\nfunction useEnv(): IndexEnv {\n const env = useContext(IndexEnvContext);\n if (!env) throw new Error('An index page part rendered outside its index page');\n return env;\n}\n\n/** How far past the viewport a cell stays mounted. */\nconst NEAR_MARGIN = '100%';\n\n/**\n * One story at its defaults with `config` over them. It keeps its own config and state, so it stays interactive, and\n * it mounts only while near the viewport, so a page of canvas stories stays under the browser's WebGL context cap.\n */\nexport function IndexStory({ story, config: over, label }: IndexStoryProps) {\n const env = useEnv();\n const [config, setConfig] = useState(() => mergeConfig(story.config.defaults(), over));\n const [state, setState] = useState<unknown>(() => story.initialState?.(config) ?? null);\n const cell = useRef<HTMLElement>(null);\n // Starts unmounted, so a page of canvas stories never mounts every cell at once.\n const near = useNearViewport(cell, NEAR_MARGIN, false);\n // Held while unmounted, so scrolling past a cell does not move everything after it.\n const [height, setHeight] = useState<number | null>(null);\n useEffect(() => {\n const el = cell.current;\n if (!near || !el || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => setHeight(el.getBoundingClientRect().height));\n observer.observe(el);\n return () => observer.disconnect();\n }, [near]);\n const ctx: StoryContext = {\n config,\n setConfig: (path, value) => setConfig((prev: unknown) => withValueAt(prev, path, value)),\n state,\n setState: (next) =>\n setState((prev: unknown) => (typeof next === 'function' ? (next as (p: unknown) => unknown)(prev) : next)),\n globals: env.globals,\n title: story.title,\n name: story.name,\n };\n return (\n <figure\n ref={cell}\n className={`fg-index-cell fg-index-cell--${story.layout}`}\n style={!near && height !== null ? { minHeight: height } : undefined}\n >\n <div className=\"fg-index-cell__stage\">\n {near ? (\n <StoryHost story={story} ctx={ctx} decorators={env.decorators} resetKey={0} onError={env.onError} />\n ) : null}\n </div>\n {label === undefined ? null : <figcaption className=\"fg-index-cell__label\">{label}</figcaption>}\n </figure>\n );\n}\n\n/** `story` once per value of each boolean and enum control, every other control at its default. Each row is headed one\n * level below the story's `h2`, and named for the story as well, since every story's rows share labels. */\nexport function IndexVariants({ story }: { story: LoadedStory }) {\n const rows = useMemo(() => variantRows(story.config), [story]);\n const defaults = useMemo(() => story.config.defaults(), [story]);\n if (rows.length === 0) return null;\n return (\n <div className=\"fg-index-variants\">\n {rows.map((row) => (\n <section key={row.path} className=\"fg-index-variants__row\" aria-label={`${story.name}: ${row.label}`}>\n <h3 className=\"fg-index-variants__label\">{row.label}</h3>\n <div className=\"fg-index-variants__cells\">\n {row.values.map((v) => (\n <IndexStory\n key={String(v.value)}\n story={story}\n config={withValueAt(defaults, row.path, v.value) as Record<string, unknown>}\n label={v.label}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n );\n}\n\nfunction GalleryBadge() {\n return (\n <Badge emphasis=\"high\" variant=\"subtle\" size=\"sm\">\n Gallery\n </Badge>\n );\n}\n\n/** A link to `id` in the workshop. A plain click opens it in place; a modified one is left to the browser. */\nfunction OpenLink({ id, className, children }: { id: string; className: string; children: ReactNode }) {\n const env = useEnv();\n const follow = (event: MouseEvent) => {\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n event.preventDefault();\n env.open(id);\n };\n return (\n <a className={className} href={`#/${encodeURIComponent(id)}`} onClick={follow}>\n {children}\n </a>\n );\n}\n\nfunction DependencyList({ label, titles, empty }: { label: string; titles: readonly string[]; empty: string }) {\n const labelId = useId();\n return (\n <div className=\"fg-index-deps__row\">\n <dt id={labelId} className=\"fg-index-deps__label\">\n {label}\n </dt>\n <dd className=\"fg-index-deps__value\">\n {titles.length === 0 ? (\n <span className=\"fg-index-deps__empty\">{empty}</span>\n ) : (\n <ul className=\"fg-index-deps__list\" aria-labelledby={labelId}>\n {titles.map((title) => {\n const cut = title.lastIndexOf('/') + 1;\n return (\n <li key={title}>\n <OpenLink className=\"fg-index-deps__link\" id={indexId(title)}>\n <span className=\"fg-index-deps__prefix\">{title.slice(0, cut)}</span>\n {title.slice(cut)}\n </OpenLink>\n </li>\n );\n })}\n </ul>\n )}\n </dd>\n </div>\n );\n}\n\n/** The listed components this one uses and those that use it, read from source. Nothing for a gallery. */\nexport function IndexDependencies() {\n const { gallery, dependencies } = useEnv();\n if (gallery || !dependencies) return null;\n if (dependencies.source === null) {\n return (\n <p className=\"fg-index-deps__none\">\n forge found no source file for this component, so it lists none of its dependencies. It looks for the\n import the meta&rsquo;s <code>component</code> names, or else the one the title&rsquo;s last segment names.\n </p>\n );\n }\n return (\n <dl className=\"fg-index-deps\" aria-label=\"Dependencies\">\n <DependencyList label=\"Uses\" titles={dependencies.uses} empty=\"No listed component.\" />\n <DependencyList label=\"Used by\" titles={dependencies.usedBy} empty=\"No listed component uses it.\" />\n </dl>\n );\n}\n\nconst DAY = new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' });\n\nfunction HistoryDate({ label, iso, version }: { label: string; iso: string; version: string | null }) {\n return (\n <div className=\"fg-index-history__item\">\n <dt className=\"fg-index-history__label\">{label}</dt>\n <dd className={`fg-index-history__value ${num.numeric}`}>\n <time dateTime={iso}>{DAY.format(new Date(iso))}</time> ({version ?? 'unreleased'})\n </dd>\n </div>\n );\n}\n\n/** When the component's source file was created and last changed, each with the release that shipped it, read from\n * git. Nothing for a gallery, or for a source file git has never committed. */\nexport function IndexHistory() {\n const { gallery, dependencies } = useEnv();\n const history = gallery ? undefined : dependencies?.history;\n if (!history) return null;\n return (\n <dl className=\"fg-index-history\" aria-label=\"History\">\n <HistoryDate label=\"Created\" iso={history.created} version={history.introduced} />\n <HistoryDate label=\"Modified\" iso={history.modified} version={history.modifiedIn} />\n </dl>\n );\n}\n\nfunction StorySection({ story, variants }: { story: LoadedStory; variants: boolean }) {\n const env = useEnv();\n const headingId = useId();\n const description = env.descriptions[story.id];\n const gallery = !env.gallery && env.galleries?.includes(story.id);\n const lab = env.labs?.includes(story.id) ?? false;\n return (\n <section className=\"fg-index-story\" aria-labelledby={headingId}>\n <div className=\"fg-index-story__main\">\n <div className=\"fg-index-story__text\">\n <header className=\"fg-index-story__head\">\n <h2 id={headingId} className=\"fg-index-story__name\">\n <OpenLink className=\"fg-index-story__link\" id={story.id}>\n {story.name}\n </OpenLink>\n </h2>\n {gallery ? <GalleryBadge /> : null}\n {lab ? <LabBadge /> : null}\n </header>\n {description ? <Description text={description} className=\"fg-index-story__description\" /> : null}\n </div>\n {lab ? null : <IndexStory story={story} />}\n </div>\n {variants ? <IndexVariants story={story} /> : null}\n </section>\n );\n}\n\n/** Which of `stories` show their variants: the first of each set of controls, leaving out labs. Stories of one CSF\n * file share their meta's controls, and the same rows under every story would only repeat. */\nfunction firstOfEachControlSet(stories: readonly LoadedStory[], labs: readonly string[]): Set<string> {\n const seen = new Set<string>();\n const shown = new Set<string>();\n for (const story of stories) {\n if (labs.includes(story.id)) continue;\n const key = JSON.stringify(variantRows(story.config));\n if (seen.has(key)) continue;\n seen.add(key);\n shown.add(story.id);\n }\n return shown;\n}\n\n/** The generated page: the component's title and description, then each story, with the variants of the first of\n * each set of controls. */\nexport function DefaultIndex() {\n const env = useEnv();\n const withVariants = useMemo(() => firstOfEachControlSet(env.stories, env.labs ?? []), [env.stories, env.labs]);\n const segments = env.title.split('/');\n const name = segments.pop();\n const { library } = env;\n if (library !== undefined && segments[0] === library) segments.shift();\n return (\n <article className=\"fg-index\">\n <header className=\"fg-index__head\">\n {segments.length > 0 || library !== undefined ? (\n <p className=\"fg-index__path\">\n {library !== undefined ? <LibraryBadge library={library} className=\"fg-index__library\" /> : null}\n {segments.join(' / ')}\n </p>\n ) : null}\n <div className=\"fg-index__title-row\">\n <h1 className=\"fg-index__title\">{name}</h1>\n {env.gallery ? <GalleryBadge /> : null}\n </div>\n {env.description ? <Description text={env.description} className=\"fg-index__description\" /> : null}\n <IndexHistory />\n <IndexDependencies />\n </header>\n {env.stories.map((story) => (\n <StorySection key={story.id} story={story} variants={withVariants.has(story.id)} />\n ))}\n </article>\n );\n}\n\n/** What a component's own index page is handed. */\nexport function indexContext(env: IndexEnv): IndexContext {\n return {\n title: env.title,\n ...(env.description === undefined ? {} : { description: env.description }),\n stories: env.stories,\n globals: env.globals,\n Story: IndexStory,\n Variants: IndexVariants,\n DefaultIndex,\n Dependencies: IndexDependencies,\n History: IndexHistory,\n gallery: env.gallery ?? false,\n open: env.open,\n };\n}\n\n/** The page itself: the component's own, or the generated one. */\nexport function IndexPage({ env, render }: { env: IndexEnv; render: ((ctx: IndexContext) => ReactNode) | null }) {\n return (\n <IndexEnvContext.Provider value={env}>{render ? render(indexContext(env)) : <DefaultIndex />}</IndexEnvContext.Provider>\n );\n}\n"]}