@weasel-js/forge 1.16.0 → 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
@@ -0,0 +1 @@
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","../src/shell/useOverflowing.ts"],"names":["f","jsx","value","isPlainObject","useContext","useState","useEffect","config","useLatest","useRef","useLayoutEffect"],"mappings":"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","file":"chunk-EVPVBDHM.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 { API_EXPORT } from '../story/api';\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 || exportName === API_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","import { useLayoutEffect, useState } from 'react';\n\nconst overflows = (el: HTMLElement) => el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n\n/** Whether `el` currently has more content than it shows, rechecked as it or any child resizes. */\nexport function useOverflowing(el: HTMLElement | null): boolean {\n const [overflowing, setOverflowing] = useState(false);\n useLayoutEffect(() => {\n if (!el || typeof ResizeObserver === 'undefined') return;\n const check = () => setOverflowing(overflows(el));\n const sizes = new ResizeObserver(check);\n const watch = () => {\n sizes.disconnect();\n sizes.observe(el);\n for (const child of el.children) sizes.observe(child, { box: 'border-box' });\n };\n const children = new MutationObserver(() => {\n watch();\n check();\n });\n children.observe(el, { childList: true });\n watch();\n check();\n return () => {\n children.disconnect();\n sizes.disconnect();\n };\n }, [el]);\n return overflowing;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { GLOBALS_KEY, effectiveGlobals, storyConfig, isForgePath, FOLLOW_APP } from './chunk-FPF2JSWB.js';
2
- import { StoryHost, useHostConditions, createA11yHighlighter, scanCssVars, auditElement } from './chunk-PGLOYXDP.js';
2
+ import { StoryHost, useHostConditions, createA11yHighlighter, scanCssVars, auditElement, useOverflowing } from './chunk-EVPVBDHM.js';
3
3
  import { ClockContext } from './chunk-TT4ZOYB6.js';
4
4
  import { createEmitter } from '@weasel-js/registry';
5
5
  import { createContext, memo, useContext, useCallback, useSyncExternalStore, useMemo, useId, useState, useRef, useLayoutEffect, useEffect } from 'react';
@@ -54,32 +54,6 @@ var NONE = {};
54
54
  function useCssOverrides() {
55
55
  return usePersistedState("fg-css-overrides", NONE, { scope: "trial" });
56
56
  }
57
- var overflows = (el) => el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;
58
- function useOverflowing(el) {
59
- const [overflowing, setOverflowing] = useState(false);
60
- useLayoutEffect(() => {
61
- if (!el || typeof ResizeObserver === "undefined") return;
62
- const check = () => setOverflowing(overflows(el));
63
- const sizes = new ResizeObserver(check);
64
- const watch = () => {
65
- sizes.disconnect();
66
- sizes.observe(el);
67
- for (const child of el.children) sizes.observe(child, { box: "border-box" });
68
- };
69
- const children = new MutationObserver(() => {
70
- watch();
71
- check();
72
- });
73
- children.observe(el, { childList: true });
74
- watch();
75
- check();
76
- return () => {
77
- children.disconnect();
78
- sizes.disconnect();
79
- };
80
- }, [el]);
81
- return overflowing;
82
- }
83
57
  function StoryScroller({ children }) {
84
58
  const [el, setEl] = useState(null);
85
59
  const overflowing = useOverflowing(el);
@@ -539,5 +513,5 @@ function StoryTrial({ story, setup, ctx, hostRef, onRendered, onError }) {
539
513
  }
540
514
 
541
515
  export { IN_VIEW_MARGIN, LiveCopies, LiveFrameCopies, LiveLensesContext, StoryGlobalsContext, StoryHostsContext, StoryTrial, TrialFramesContext, TrialHost, createLiveLenses, createStoryHosts, createTrialFrames, describeLens, resolveComparison, resolveContextOf, scrollerOf, trialAt, useCopyConfig, useCssOverrides, useTrialFrame, withArgs };
542
- //# sourceMappingURL=chunk-SZ2SMRE6.js.map
543
- //# sourceMappingURL=chunk-SZ2SMRE6.js.map
516
+ //# sourceMappingURL=chunk-KNBEHCFD.js.map
517
+ //# sourceMappingURL=chunk-KNBEHCFD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/trialFrames.ts","../src/shell/StoryGlobalsContext.ts","../src/shell/inViewMargin.ts","../src/shell/cssVars/overrides.ts","../src/shell/StoryScroller.tsx","../src/shell/storyHosts.ts","../src/shell/storyShow.ts","../src/shell/TrialHost.tsx","../src/shell/StoryBody.tsx","../src/shell/loupe/conditions.ts","../src/shell/loupe/liveLenses.ts","../src/shell/loupe/trialAt.ts","../src/shell/loupe/LiveCopies.tsx","../src/shell/StoryTrial.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","useLayoutEffect","useEffect","StoryBody","NONE","createEmitter","useMemo","useSyncExternalStore","useLatest","useRef","TrialIdContext","jsxs","Fragment"],"mappings":"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","file":"chunk-KNBEHCFD.js","sourcesContent":["import { createEmitter } from '@weasel-js/registry';\nimport { createContext, useCallback, useContext, useSyncExternalStore } from 'react';\nimport type { A11yOutcome, CssVarReport, ToFrame } from '../protocol/messages';\n\nexport type { A11yOutcome };\n\n/** The half of a trial's frame that answers a request: each call is one round trip over the frame's channel. */\nexport interface TrialFrameCalls {\n send: (msg: ToFrame) => void;\n audit: () => Promise<A11yOutcome>;\n}\n\n/** What trial chrome can reach of the frame its trial shows. */\nexport interface TrialFrame {\n /** Null while no frame is connected. */\n send: ((msg: ToFrame) => void) | null;\n /** The frame's latest `vars` report. */\n vars: readonly CssVarReport[];\n /** Runs axe over the story and records the answer as `a11y`. Null while no frame is connected. */\n audit: (() => Promise<A11yOutcome>) | null;\n /** What the last audit found; null until one has run against the connected frame. */\n a11y: A11yOutcome | null;\n}\n\n/** Each trial's frame, keyed by trial id: `FrameView` connects and reports, trial chrome reads. */\nexport interface TrialFrames {\n /** Returns a disconnect that does nothing once a newer connection replaced this one. */\n connect(trialId: string, calls: TrialFrameCalls): () => void;\n report(trialId: string, vars: readonly CssVarReport[]): void;\n reportA11y(trialId: string, outcome: A11yOutcome): void;\n get(trialId: string): TrialFrame;\n subscribe(listener: () => void): () => void;\n}\n\nconst NO_FRAME: TrialFrame = { send: null, vars: [], audit: null, a11y: null };\n\nexport function createTrialFrames(): TrialFrames {\n const frames = new Map<string, TrialFrame>();\n const changes = createEmitter();\n const changed = changes.emit;\n const patch = (trialId: string, next: Partial<TrialFrame>) => {\n const frame = frames.get(trialId);\n if (!frame) return;\n frames.set(trialId, { ...frame, ...next });\n changed();\n };\n return {\n connect(trialId, calls) {\n frames.set(trialId, { send: calls.send, vars: [], audit: calls.audit, a11y: null });\n changed();\n return () => {\n if (frames.get(trialId)?.send !== calls.send) return;\n frames.delete(trialId);\n changed();\n };\n },\n report: (trialId, vars) => patch(trialId, { vars }),\n reportA11y: (trialId, a11y) => patch(trialId, { a11y }),\n get: (trialId) => frames.get(trialId) ?? NO_FRAME,\n subscribe: changes.subscribe,\n };\n}\n\n/** The workshop's `TrialFrames`; `null` outside a `Workshop`. */\nexport const TrialFramesContext = createContext<TrialFrames | null>(null);\n\n/** The frame of the trial `trialId` names, re-read when it connects or reports. */\nexport function useTrialFrame(trialId: string): TrialFrame {\n const frames = useContext(TrialFramesContext);\n const subscribe = useCallback((listener: () => void) => frames?.subscribe(listener) ?? (() => {}), [frames]);\n const read = () => frames?.get(trialId) ?? NO_FRAME;\n return useSyncExternalStore(subscribe, read, read);\n}\n","import { createContext } from 'react';\nimport type { Globals } from '../protocol/messages';\n\n/** The lab's global values, which a trial's pins override. A change reaches open frames without replacing instruments. */\nexport const StoryGlobalsContext = createContext<Globals>({});\n","/** How far past the viewport a trial's story stays mounted, so a small scroll back does not reload it. */\nexport const IN_VIEW_MARGIN = '50%';\n","import { usePersistedState } from '@weasel-js/labkit';\n\nexport type CssOverrides = Readonly<Record<string, string>>;\n\nconst NONE: CssOverrides = {};\n\n/** The CSS variable overrides of the trial this is rendered inside, persisted with it. */\nexport function useCssOverrides() {\n return usePersistedState<CssOverrides>('fg-css-overrides', NONE, { scope: 'trial' });\n}\n","import { useTrialTitle } from '@weasel-js/labkit';\nimport { type ReactNode, useState } from 'react';\nimport { useOverflowing } from './useOverflowing';\n\n/**\n * The story's own box. While its story overflows it is a tab stop, so a keyboard can scroll it, and a region named\n * for the trial, as WCAG asks of a focusable scroller.\n */\nexport function StoryScroller({ children }: { children: ReactNode }) {\n const [el, setEl] = useState<HTMLDivElement | null>(null);\n const overflowing = useOverflowing(el);\n const title = useTrialTitle();\n return (\n <div\n ref={setEl}\n className=\"fg-story__scroll\"\n {...(overflowing ? { tabIndex: 0, role: 'region', 'aria-label': title ?? 'Story' } : {})}\n >\n {children}\n </div>\n );\n}\n","import { createContext, type RefObject, useContext, useLayoutEffect } from 'react';\n\n/** Each trial's story host, keyed by trial id: `TrialHost` attaches its element, an annotation target reads it. */\nexport interface StoryHosts {\n /** One ref per trial, the same object every time, holding its host while one is attached. */\n ref(trialId: string): RefObject<HTMLElement | null>;\n /**\n * Returns the detach, which leaves a later attach for the same trial standing. `show` renders the host's content\n * while it is out of view, resolving once that has painted, with the release.\n */\n attach(trialId: string, host: HTMLElement, show?: () => Promise<() => void>): () => void;\n /** Renders trial `trialId`'s story wherever it is, until the release it resolves with is called. */\n show(trialId: string): Promise<() => void>;\n}\n\nexport function createStoryHosts(): StoryHosts {\n const refs = new Map<string, RefObject<HTMLElement | null>>();\n const shows = new Map<string, { host: HTMLElement; show: () => Promise<() => void> }>();\n const ref = (trialId: string) => {\n let held = refs.get(trialId);\n if (!held) {\n held = { current: null };\n refs.set(trialId, held);\n }\n return held;\n };\n return {\n ref,\n attach(trialId, host, show) {\n const held = ref(trialId);\n held.current = host;\n if (show) shows.set(trialId, { host, show });\n return () => {\n if (held.current === host) held.current = null;\n if (shows.get(trialId)?.host === host) shows.delete(trialId);\n };\n },\n show(trialId) {\n return shows.get(trialId)?.show() ?? Promise.resolve(() => {});\n },\n };\n}\n\n/** The workshop's `StoryHosts`; `null` outside a `Workshop`. */\nexport const StoryHostsContext = createContext<StoryHosts | null>(null);\n\n/** Attaches `host` as the story host of trial `trialId` while both are given. */\nexport function useStoryHost(\n trialId: string | null | undefined,\n host: HTMLElement | null,\n show?: () => Promise<() => void>,\n): void {\n const hosts = useContext(StoryHostsContext);\n useLayoutEffect(\n () => (host && hosts && trialId ? hosts.attach(trialId, host, show) : undefined),\n [host, hosts, trialId, show],\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\n/** Calls `done` once `host`'s fonts are ready and a frame has painted after; returns the cancel. */\nexport function afterPaint(host: HTMLElement, done: () => void): () => void {\n let canceled = false;\n const finish = () => {\n if (!canceled) done();\n };\n const { fonts } = host.ownerDocument;\n if (!fonts) finish();\n else {\n const frame = () => requestAnimationFrame(finish);\n void fonts.ready.then(frame, frame);\n }\n return () => {\n canceled = true;\n };\n}\n\n/**\n * Whether a story host renders its content: while it is near the viewport, or while a caller of `show` holds it.\n * `show` resolves once the content has painted, with the release.\n */\nexport function useStoryShow(\n host: HTMLElement | null,\n inView: boolean,\n): { live: boolean; show: () => Promise<() => void> } {\n const [held, setHeld] = useState(0);\n const [waiters] = useState<(() => void)[]>(() => []);\n const live = inView || held > 0;\n\n const show = useCallback(\n () =>\n new Promise<() => void>((resolve) => {\n let released = false;\n const release = () => {\n if (released) return;\n released = true;\n setHeld((n) => n - 1);\n };\n waiters.push(() => resolve(release));\n setHeld((n) => n + 1);\n }),\n [waiters],\n );\n\n useEffect(() => {\n if (!host || !live || waiters.length === 0) return;\n const waiting = waiters.splice(0);\n let settled = false;\n const cancel = afterPaint(host, () => {\n settled = true;\n for (const resolve of waiting) resolve();\n });\n return () => {\n cancel();\n if (!settled) waiters.unshift(...waiting);\n };\n }, [host, live, held, waiters]);\n\n // A caller still waiting when the host goes finds it gone rather than hanging.\n useEffect(\n () => () => {\n for (const resolve of waiters.splice(0)) resolve();\n },\n [waiters],\n );\n\n return { live, show };\n}\n","import { useLatest } from '@weasel-js/core';\nimport { LabBoundary, TrialIdContext } from '@weasel-js/labkit';\nimport { OverlayPortalProvider } from '@weasel-js/ui/portal-host';\nimport {\n type ReactNode,\n type RefObject,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { auditElement } from '../frame/a11y';\nimport { createA11yHighlighter } from '../frame/a11yHighlight';\nimport { scanCssVars } from '../frame/cssVars';\nimport type { FrameSetup } from '../frame/FrameController';\nimport { useNearViewport } from '@weasel-js/react';\nimport { IN_VIEW_MARGIN } from './inViewMargin';\nimport type { CssVarReport, Globals, Layout, ToFrame } from '../protocol/messages';\nimport { useCssOverrides } from './cssVars/overrides';\nimport { effectiveGlobals, GLOBALS_KEY } from './globals';\nimport { useHostConditions } from './hostConditions';\nimport { StoryGlobalsContext } from './StoryGlobalsContext';\nimport { StoryScroller } from './StoryScroller';\nimport { useStoryHost } from './storyHosts';\nimport { afterPaint, useStoryShow } from './storyShow';\nimport { TrialFramesContext } from './trialFrames';\n\n/** Props for `TrialHost`. */\nexport interface TrialHostProps {\n layout: Layout;\n setup: FrameSetup;\n /** The trial's config, read for its `$globals` pins. */\n config: unknown;\n /** Rendered once the host element exists, with the globals in force on it. */\n children: (globals: Globals) => ReactNode;\n /** Receives the host element, for a caller with no trial to reach it through. */\n hostRef?: RefObject<HTMLElement | null>;\n /** Called once the children's first commit has painted. */\n onRendered?: () => void;\n /**\n * Makes this host a second copy of the trial's story: it takes `id` as its host id and `globals` in place of the\n * computed ones, carries `data-fg-copy`, and stays out of the frame registry, the a11y highlighter and `onRendered`.\n */\n copy?: { id: string; globals: Globals };\n}\n\nconst VARS_SETTLE_MS = 100;\n\n/**\n * The workshop is itself a lab; below the boundary a story sees no lab, trial or theme above it, as in a document of\n * its own. Overlays portal to the host, outside the scroller, so they stay put as it scrolls, and a modal takes the\n * host for its viewport.\n */\nfunction StoryContent({ host, children }: { host: HTMLElement; children: ReactNode }) {\n return (\n <LabBoundary>\n <OverlayPortalProvider container={host} contained>{children}</OverlayPortalProvider>\n </LabBoundary>\n );\n}\n\n/**\n * One story's box in the workshop document: what a frame document was, as an element. It applies the globals to\n * itself, keeps its CSS variable overrides on itself, contains fixed-position descendants and portals, reports its\n * vars and audits to the trial's frame registry, and unmounts its content while out of view unless something holds it shown.\n */\nexport function TrialHost({ layout, setup, config, children, hostRef, onRendered, copy }: TrialHostProps) {\n const trialId = useContext(TrialIdContext);\n const frames = useContext(TrialFramesContext);\n const labGlobals = useContext(StoryGlobalsContext);\n const pins = (config as Record<string, unknown> | null | undefined)?.[GLOBALS_KEY];\n const computed = useMemo(() => effectiveGlobals(labGlobals, pins), [labGlobals, pins]);\n const globals = copy?.globals ?? computed;\n const [persisted] = useCssOverrides();\n const reactId = useId();\n const hostId = copy?.id ?? trialId ?? reactId;\n const [host, setHost] = useState<HTMLDivElement | null>(null);\n const elementRef = useRef<HTMLDivElement | null>(null);\n const inView = useNearViewport(elementRef, IN_VIEW_MARGIN);\n const { live, show } = useStoryShow(host, inView);\n const [pending, setPending] = useState(true);\n // Settles at the first render below, which an audit waits for: until then the host holds no story to judge.\n const [rendered] = useState(() => {\n let resolve!: () => void;\n const promise = new Promise<void>((r) => { resolve = r; });\n return { promise, resolve };\n });\n const latest = useLatest({ onRendered: copy ? undefined : onRendered });\n\n const overridesRef = useHostConditions(host, { hostId, globals, overrides: persisted, setup });\n\n // The registry connection: the host's vars and audits, reported to the trial. A copy has none.\n useLayoutEffect(() => {\n const overrides = overridesRef.current;\n if (!host || !overrides || copy) return;\n const doc = host.ownerDocument;\n let lastVars: CssVarReport[] | null = null;\n let reported: string | null = null;\n const publish = (vars: CssVarReport[]) => {\n lastVars = vars;\n const key = JSON.stringify(vars);\n if (key === reported) return;\n reported = key;\n if (trialId) frames?.report(trialId, vars);\n };\n const scan = () => publish(scanCssVars(doc, overrides.has, host));\n let settleTimer: ReturnType<typeof setTimeout> | undefined;\n const ownMutation = (record: MutationRecord) =>\n overrides.owns(record.target) ||\n (record.type === 'childList' &&\n [...record.addedNodes, ...record.removedNodes].length > 0 &&\n [...record.addedNodes, ...record.removedNodes].every(overrides.owns));\n const mutations =\n typeof MutationObserver === 'undefined'\n ? null\n : new MutationObserver((records) => {\n if (records.every(ownMutation)) return;\n clearTimeout(settleTimer);\n settleTimer = setTimeout(scan, VARS_SETTLE_MS);\n });\n mutations?.observe(host, { subtree: true, childList: true, characterData: true, attributes: true });\n\n const highlighter = createA11yHighlighter(doc);\n const send = (msg: ToFrame) => {\n if (msg.type === 'a11y.highlight') highlighter.show(msg.targets);\n if (msg.type !== 'vars.set') return;\n overrides.set(msg.name, msg.value);\n if (lastVars?.some((v) => v.name === msg.name)) scan();\n };\n const audit = async () => {\n await rendered.promise;\n const outcome = await auditElement(host, { page: false });\n if (trialId) frames?.reportA11y(trialId, outcome);\n return outcome;\n };\n const disconnect = frames && trialId ? frames.connect(trialId, { send, audit }) : () => {};\n\n return () => {\n disconnect();\n highlighter.dispose();\n mutations?.disconnect();\n clearTimeout(settleTimer);\n };\n }, [host, hostId, trialId, frames, copy, overridesRef, rendered]);\n\n useStoryHost(trialId, copy ? null : host, show);\n // The host is hidden until its first commit has painted with its fonts, so a new trial never shows a jump.\n const announced = useRef(false);\n useEffect(() => {\n if (!host || !live || announced.current) return;\n return afterPaint(host, () => {\n announced.current = true;\n rendered.resolve();\n setPending(false);\n latest.current.onRendered?.();\n });\n }, [host, live, latest, rendered]);\n\n return (\n <div\n ref={(el) => {\n elementRef.current = el;\n if (hostRef) hostRef.current = el;\n setHost(el);\n }}\n className=\"fg-story\"\n data-fg-host={hostId}\n data-fg-copy={copy ? '' : undefined}\n data-fg-layout={layout}\n data-pending={pending || undefined}\n >\n <StoryScroller>{host && live ? <StoryContent host={host}>{children(globals)}</StoryContent> : null}</StoryScroller>\n </div>\n );\n}\n","import { memo } from 'react';\nimport { StoryHost } from '../frame/StoryHost';\nimport type { Globals } from '../protocol/messages';\nimport type { Decorator, LoadedStory, StoryContext } from '../story/types';\n\nexport interface StoryBodyProps {\n story: LoadedStory;\n config: StoryContext['config'];\n setConfig: StoryContext['setConfig'];\n state: unknown;\n setState: StoryContext['setState'];\n globals: Globals;\n decorators: readonly Decorator[];\n resetKey: number;\n onError: (error: unknown) => void;\n}\n\n/** Calls `render` only when its inputs change, as Storybook does: the lab re-renders a trial for its own reasons, and a\n * story declaring a component inside `render` remounts it on every extra call. */\nexport const StoryBody = memo(function StoryBody({ story, config, setConfig, state, setState, globals, decorators, resetKey, onError }: StoryBodyProps) {\n const storyCtx: StoryContext = { config, setConfig, state, setState, globals, title: story.title, name: story.name };\n return <StoryHost story={story} ctx={storyCtx} decorators={decorators} resetKey={resetKey} onError={onError} />;\n});\n","import type { LabMode } from '@weasel-js/labkit';\nimport { withValueAtPath } from '@weasel-js/labkit/config';\nimport { systemColorScheme } from '@weasel-js/react';\nimport type { Globals } from '../../protocol/messages';\nimport { effectiveGlobals, FOLLOW_APP, GLOBALS_KEY, type GlobalDeclarations } from '../globals';\n\n/** What a lens compares the story against: the opposite color mode, or globals, args and a DPR of its own. */\nexport type ForgeComparison =\n | { kind: 'opposite-mode' }\n | {\n kind: 'custom';\n globals?: Readonly<Record<string, string>>;\n args?: Readonly<Record<string, unknown>>;\n dpr?: number;\n };\n\n/** The conditions a compared render runs under. `dpr` is null where the comparison leaves it alone. */\nexport interface ResolvedConditions {\n globals: Globals;\n args: Readonly<Record<string, unknown>>;\n dpr: number | null;\n}\n\n/** What resolving a comparison reads besides the comparison and the globals it starts from. */\nexport interface ResolveContext {\n declarations: GlobalDeclarations;\n modeGlobal: string;\n prefersDark: boolean;\n labMode: LabMode;\n}\n\nconst NO_ARGS: Readonly<Record<string, unknown>> = {};\n\n/** `value` with `App` read from the lab's own mode and `auto` from the OS, as the story would be shown. */\nfunction shownMode(value: string, ctx: ResolveContext): string {\n const followed = value === FOLLOW_APP ? ctx.labMode : value;\n return followed === 'auto' ? (ctx.prefersDark ? 'dark' : 'light') : followed;\n}\n\nconst SWAP: Readonly<Record<string, string>> = { light: 'dark', dark: 'light' };\n\n/**\n * The mode opposite the one `base` shows, from its declaration's `opposite` or else a swap of light and dark; `to`\n * is undefined where it has none.\n */\nexport function oppositeMode(base: Globals, ctx: ResolveContext): { from: string; to: string | undefined } {\n const from = shownMode(String(base[ctx.modeGlobal] ?? ''), ctx);\n const own = ctx.declarations[ctx.modeGlobal]?.opposite;\n return { from, to: own ? own(from, base) : SWAP[from] };\n}\n\n/**\n * The conditions `c` asks for, starting from `base` — the globals the story renders under before the comparison,\n * pins included. Resolved when a lens renders rather than when the comparison is chosen, so opposite mode keeps\n * showing the opposite after the lab's mode changes; a mode with no opposite leaves the story as it is.\n */\nexport function resolveComparison(c: ForgeComparison | null, base: Globals, ctx: ResolveContext): ResolvedConditions {\n if (c === null) return { globals: base, args: NO_ARGS, dpr: null };\n if (c.kind === 'opposite-mode') {\n const { to } = oppositeMode(base, ctx);\n return { globals: to === undefined ? base : { ...base, [ctx.modeGlobal]: to }, args: NO_ARGS, dpr: null };\n }\n return {\n globals: c.globals ? { ...base, ...c.globals } : base,\n args: c.args ?? NO_ARGS,\n dpr: c.dpr ?? null,\n };\n}\n\n/** A global's value as the toolbar names it: \"Theme: Ocean\". */\nfunction globalLabel(key: string, value: string, declarations: GlobalDeclarations): string {\n const declaration = declarations[key];\n if (!declaration) return `${key}: ${value}`;\n const option = declaration.options.find((o) => o.value === value);\n return `${declaration.label}: ${option?.label ?? value}`;\n}\n\n/** What a lens's comparison is named against: the globals it resolves over, and whether the lens shows Pixels. */\nexport interface DescribeAgainst {\n base: Globals;\n ctx: ResolveContext;\n /** False on a lens that shows no Pixels, where a DPR comparison changes nothing. */\n pixels?: boolean;\n}\n\n/**\n * How a lens names `c`: \"Opposite mode\", \"Theme: Ocean\", \"Arg size = 3\", \"DPR 2×\". Given what the lens renders\n * against, opposite mode says so when there is no opposite to show, and a DPR says it applies to Pixels only on a\n * lens that shows none.\n */\nexport function describeComparison(c: ForgeComparison, declarations: GlobalDeclarations, against?: DescribeAgainst): string {\n if (c.kind === 'opposite-mode') {\n const flip = against ? oppositeMode(against.base, against.ctx) : null;\n return flip && flip.to === undefined ? `Opposite mode: no opposite for '${flip.from}'` : 'Opposite mode';\n }\n const globals = Object.entries(c.globals ?? {}).map(([key, value]) => globalLabel(key, value, declarations));\n const args = Object.entries(c.args ?? {}).map(([path, value]) => `Arg ${path} = ${String(value)}`);\n const dpr = c.dpr ? [`DPR ${c.dpr}×${against?.pixels === false ? ' (Pixels only)' : ''}`] : [];\n return [...globals, ...args, ...dpr].join(', ') || 'As it is';\n}\n\n/**\n * How a lens over a trial names `c`: against that trial's own globals, pins included, as the lens renders it, and\n * whether the lens shows Pixels.\n */\nexport function describeLens(c: ForgeComparison, lab: LabConditions, trialConfig: unknown, pixels: boolean): string {\n const pins = (trialConfig as Record<string, unknown> | null | undefined)?.[GLOBALS_KEY];\n const base = effectiveGlobals(lab.labValues, pins);\n return describeComparison(c, lab.declarations, { base, ctx: resolveContextOf(lab), pixels });\n}\n\n/** `config` with each of `args` written at its path. */\nexport const withArgs = (config: unknown, args: Readonly<Record<string, unknown>>): unknown =>\n Object.entries(args).reduce((c, [path, value]) => withValueAtPath(c, path, value), config);\n\n/** The lab as a lens reads it when it renders: its globals, its mode, and the declarations behind them. */\nexport interface LabConditions {\n labValues: Globals;\n mode: LabMode;\n declarations: GlobalDeclarations;\n modeGlobal: string;\n}\n\n/** What resolving a comparison against `lab` reads, the OS color scheme included. */\nexport function resolveContextOf(lab: LabConditions): ResolveContext {\n const prefersDark = systemColorScheme() === 'dark';\n return { declarations: lab.declarations, modeGlobal: lab.modeGlobal, prefersDark, labMode: lab.mode };\n}\n","import { createContext } from 'react';\nimport { createEmitter } from '@weasel-js/registry';\nimport type { ForgeComparison, ResolveContext } from './conditions';\nimport type { TrialHit } from './trialAt';\n\n/** One Live lens cell's ask of the trial under its reticle: render a copy into `slot`, magnified about `hit.local`. */\nexport interface LiveRequest {\n /** The lens's id; a cell showing a comparison adds `~compared`, so a Split lens's two cells are two requests. */\n lensId: string;\n slot: HTMLElement;\n hit: TrialHit;\n factor: number;\n /** The slot's size, in CSS px. */\n size: { width: number; height: number };\n /** What the copy compares against, resolved over the trial's own globals, pins included; null shows the story\n * as it is. */\n compare: ForgeComparison | null;\n ctx: ResolveContext;\n /** Config values written over the trial's at their paths. */\n args: Readonly<Record<string, unknown>>;\n}\n\n/** The Live requests standing, by lens, read by each trial for the copies it owes. */\nexport interface LiveLenses {\n /** `null` withdraws the lens's request. */\n set(lensId: string, request: LiveRequest | null): void;\n /** The same array until a request changes. */\n forTrial(trialId: string): readonly LiveRequest[];\n subscribe(listener: () => void): () => void;\n}\n\nconst NONE: readonly LiveRequest[] = [];\n\nexport function createLiveLenses(): LiveLenses {\n const requests = new Map<string, LiveRequest>();\n const changed = createEmitter();\n let byTrial = new Map<string, readonly LiveRequest[]>();\n return {\n set(lensId, request) {\n if (request === null) {\n if (!requests.delete(lensId)) return;\n } else requests.set(lensId, request);\n byTrial = new Map();\n changed.emit();\n },\n forTrial(trialId) {\n let found = byTrial.get(trialId);\n if (!found) {\n const mine = [...requests.values()].filter((r) => r.hit.trialId === trialId);\n found = mine.length === 0 ? NONE : mine;\n byTrial.set(trialId, found);\n }\n return found;\n },\n subscribe: changed.subscribe,\n };\n}\n\n/** The workshop's Live requests; null outside a workshop, where no trial renders copies. */\nexport const LiveLensesContext = createContext<LiveLenses | null>(null);\n","import type { LoupePoint } from '@weasel-js/labkit/loupe';\n\n/** The trial under a client point: its host, and the point in the host's own px. */\nexport interface TrialHit {\n trialId: string;\n host: HTMLElement;\n /** In the host's own px: the client offset from its corner, undone by any zoom on the pane holding it. */\n local: LoupePoint;\n /** Client px per host px. */\n scale: number;\n}\n\n/** The element an in-document story scrolls in, inside its host; null for a host with none, as a frame's. */\nexport const scrollerOf = (host: HTMLElement | null): HTMLElement | null =>\n host?.querySelector<HTMLElement>(':scope > .fg-story__scroll') ?? null;\n\nconst stackAt = (client: LoupePoint, doc: Document): readonly Element[] =>\n doc.elementsFromPoint?.(client.x, client.y) ?? [];\n\n/**\n * The topmost story host under `client`, an in-document story's or an isolated one's frame host, skipping a lens's\n * copies, which only ever show some host beneath them.\n */\nexport function trialAt(client: LoupePoint, doc: Document = document): TrialHit | null {\n for (const el of stackAt(client, doc)) {\n const host = el.closest<HTMLElement>('[data-fg-host]');\n if (!host || host.hasAttribute('data-fg-copy')) continue;\n const rect = host.getBoundingClientRect();\n const scale = host.offsetWidth > 0 ? rect.width / host.offsetWidth : 1;\n return {\n trialId: host.dataset.fgHost ?? '',\n host,\n local: { x: (client.x - rect.left) / scale, y: (client.y - rect.top) / scale },\n scale,\n };\n }\n return null;\n}\n","import './loupe.css';\nimport {\n type CSSProperties,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { FrameSetup } from '../../frame/FrameController';\nimport type { Globals, Layout } from '../../protocol/messages';\nimport type { ClockHandle } from '@weasel-js/clock';\nimport { ClockContext } from '../../timeline/context';\nimport { effectiveGlobals, GLOBALS_KEY } from '../globals';\nimport { StoryBody, type StoryBodyProps } from '../StoryBody';\nimport { StoryGlobalsContext } from '../StoryGlobalsContext';\nimport { TrialHost } from '../TrialHost';\nimport { resolveComparison, withArgs } from './conditions';\nimport { type LiveLenses, LiveLensesContext, type LiveRequest } from './liveLenses';\nimport { scrollerOf } from './trialAt';\n\n/** Props for `LiveCopies`: what a trial renders its own content with, which every copy of it shares. */\nexport interface LiveCopiesProps {\n trialId: string | null;\n layout: Layout;\n setup: FrameSetup;\n /** The trial's whole config, read for its `$globals` pins. */\n trialConfig: unknown;\n /** One copy's content, under the copy's globals and with the lens's args to write over the trial's config. */\n children: (globals: Globals, args: Readonly<Record<string, unknown>>) => ReactNode;\n}\n\n/** Props for `StoryCopy`. */\nexport interface StoryCopyProps {\n /** The story's own body props; a copy replaces `config`, `setConfig` and `globals`. */\n body: Omit<StoryBodyProps, 'globals'>;\n /** The trial's clock; a copy reads it and never drives it. */\n clock: ClockHandle | null;\n globals: Globals;\n args: Readonly<Record<string, unknown>>;\n}\n\n/** A story trial's copy: its body under the copy's globals, with the lens's args written over its config. */\nexport function StoryCopy({ body, clock, globals, args }: StoryCopyProps) {\n const { config, setConfig } = useCopyConfig(body.config, body.setConfig, args);\n return (\n <ClockContext.Provider value={clock}>\n <StoryBody {...body} config={config} setConfig={setConfig} globals={globals} />\n </ClockContext.Provider>\n );\n}\n\n/** Whether a write to `path` would land on, inside or over the arg at `arg`. */\nconst covers = (arg: string, path: string) =>\n path === arg || path.startsWith(`${arg}.`) || arg.startsWith(`${path}.`);\n\nconst px = (n: number) => `${n}px`;\n\n/** Where the copy sits in its slot: the host's own size, scaled by the factor about the hit point, which lands on the\n * slot's center. Set as custom properties, which the stylesheet reads. */\nfunction placement(request: LiveRequest): CSSProperties {\n const { hit, factor, size } = request;\n return {\n ['--fg-lens-copy-w' as string]: px(hit.host.offsetWidth),\n ['--fg-lens-copy-h' as string]: px(hit.host.offsetHeight),\n ['--fg-lens-copy-x' as string]: px(size.width / 2 - hit.local.x * factor),\n ['--fg-lens-copy-y' as string]: px(size.height / 2 - hit.local.y * factor),\n ['--fg-lens-copy-f' as string]: String(factor),\n } as CSSProperties;\n}\n\n\n/** Runs `sync` after every commit of the copy's content, which mounts a render after the copy's host does. */\nfunction AfterCommit({ sync }: { sync: () => void }) {\n useLayoutEffect(sync);\n return null;\n}\n\n/** The globals a lens's copy renders under: the comparison resolved over the trial's own, pins included. */\nfunction useCopyGlobals(request: LiveRequest, trialConfig: unknown): Globals {\n const labGlobals = useContext(StoryGlobalsContext);\n const pins = (trialConfig as Record<string, unknown> | null | undefined)?.[GLOBALS_KEY];\n const own = useMemo(() => effectiveGlobals(labGlobals, pins), [labGlobals, pins]);\n const { compare, ctx } = request;\n return useMemo<Globals>(() => resolveComparison(compare, own, ctx).globals, [own, compare, ctx]);\n}\n\n/**\n * A copy's config and its writer: the trial's config with each of `args` written at its path, and a `setConfig`\n * that drops a write to any of them, since the comparison owns those, and passes every other write to the trial.\n */\nexport function useCopyConfig(\n trialConfig: unknown,\n trialSetConfig: (path: string, value: unknown) => void,\n args: Readonly<Record<string, unknown>>,\n): { config: unknown; setConfig: (path: string, value: unknown) => void } {\n const config = useMemo(() => withArgs(trialConfig, args), [args, trialConfig]);\n // Keyed by the paths alone, so a comparison re-resolved to the same args keeps the story's `setConfig` stable.\n const argPaths = Object.keys(args).join('\\n');\n const setConfig = useCallback(\n (path: string, value: unknown) => {\n const owned = argPaths === '' ? [] : argPaths.split('\\n');\n if (!owned.some((arg) => covers(arg, path))) trialSetConfig(path, value);\n },\n [argPaths, trialSetConfig],\n );\n return { config, setConfig };\n}\n\n/** Portals a copy into its lens's slot, placed and scaled about the reticle's point. */\nfunction LensPortal({ request, children }: { request: LiveRequest; children: ReactNode }) {\n return createPortal(\n <div className=\"fg-lens-copy\" style={placement(request)}>\n {children}\n </div>,\n request.slot,\n );\n}\n\nconst copyId = (trialId: string, request: LiveRequest) => `${trialId}~lens-${request.lensId}`;\n\n/** The Live requests standing over `trialId`, re-read as they change. */\nfunction useRequests(lenses: LiveLenses, trialId: string): readonly LiveRequest[] {\n const forTrial = useCallback(() => lenses.forTrial(trialId), [lenses, trialId]);\n return useSyncExternalStore(lenses.subscribe, forTrial);\n}\n\nfunction LensCopy({ request, trialId, layout, setup, trialConfig, children }: LiveCopiesProps & { request: LiveRequest; trialId: string }) {\n const globals = useCopyGlobals(request, trialConfig);\n const id = copyId(trialId, request);\n const copy = useMemo(() => ({ id, globals }), [id, globals]);\n\n const main = request.hit.host;\n const { slot } = request;\n // Found from the slot, not through the copy's host ref, which a re-render of the host detaches until after its\n // content's layout effects have run.\n const sync = useCallback(() => {\n const from = scrollerOf(main);\n const to = scrollerOf(slot.querySelector<HTMLElement>(':scope > .fg-lens-copy > [data-fg-copy]'));\n if (!from || !to) return;\n to.scrollTop = from.scrollTop;\n to.scrollLeft = from.scrollLeft;\n }, [main, slot]);\n useEffect(() => {\n const from = scrollerOf(main);\n from?.addEventListener('scroll', sync, { passive: true });\n return () => from?.removeEventListener('scroll', sync);\n }, [main, sync]);\n\n return (\n <LensPortal request={request}>\n {/* Remounted on a new factor: no observer sees a transform change, and a canvas inside sizes its backing\n store for the magnification it mounted under. */}\n <TrialHost key={request.factor} layout={layout} setup={setup} config={trialConfig} copy={copy}>\n {(g) => (\n <>\n {children(g, request.args)}\n <AfterCommit sync={sync} />\n </>\n )}\n </TrialHost>\n </LensPortal>\n );\n}\n\nfunction Copies({ lenses, trialId, ...props }: LiveCopiesProps & { lenses: LiveLenses; trialId: string }) {\n const requests = useRequests(lenses, trialId);\n return requests.map((request) => (\n <LensCopy key={request.lensId} request={request} trialId={trialId} {...props} />\n ));\n}\n\n/**\n * The trial's copies for the Live lenses over it: each a second render of its content, portaled into its lens, under\n * the lens's globals and args, following its scroll.\n */\nexport function LiveCopies(props: LiveCopiesProps) {\n const lenses = useContext(LiveLensesContext);\n const { trialId } = props;\n return lenses && trialId ? <Copies {...props} lenses={lenses} trialId={trialId} /> : null;\n}\n\n/**\n * What a lens's copy of an isolated story renders: its host id, the globals and args it renders under, the trial's\n * host, whose scroll it follows, and the factor the lens shows it at.\n */\nexport interface LensFrameCopy {\n id: string;\n main: HTMLElement;\n globals: Globals;\n args: Readonly<Record<string, unknown>>;\n factor: number;\n}\n\n/** Props for `LiveFrameCopies`. */\nexport interface LiveFrameCopiesProps {\n trialId: string | null;\n /** The trial's whole config, read for its `$globals` pins. */\n trialConfig: unknown;\n /** The trial's frame view in copy mode. */\n children: (copy: LensFrameCopy) => ReactNode;\n}\n\nfunction FrameLensCopy({ request, trialId, trialConfig, children }: Omit<LiveFrameCopiesProps, 'trialId'> & { request: LiveRequest; trialId: string }) {\n const globals = useCopyGlobals(request, trialConfig);\n const id = copyId(trialId, request);\n const { args, factor } = request;\n const main = request.hit.host;\n const copy = useMemo(() => ({ id, main, globals, args, factor }), [id, main, globals, args, factor]);\n return <LensPortal request={request}>{children(copy)}</LensPortal>;\n}\n\nfunction FrameCopies({ lenses, trialId, ...props }: Omit<LiveFrameCopiesProps, 'trialId'> & { lenses: LiveLenses; trialId: string }) {\n const requests = useRequests(lenses, trialId);\n return requests.map((request) => <FrameLensCopy key={request.lensId} request={request} trialId={trialId} {...props} />);\n}\n\n/**\n * The copies an isolated trial owes the Live lenses over it: each a frame of its own, portaled into its lens, under\n * the lens's globals and args, following its scroll. The trial's frame view renders itself as each copy, through\n * `children`.\n */\nexport function LiveFrameCopies(props: LiveFrameCopiesProps) {\n const lenses = useContext(LiveLensesContext);\n const { trialId } = props;\n return lenses && trialId ? <FrameCopies {...props} lenses={lenses} trialId={trialId} /> : null;\n}\n","import { type RenderContext, TrialIdContext, useTrialClockHandle } from '@weasel-js/labkit';\nimport { useLatest } from '@weasel-js/core';\nimport { type RefObject, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport type { FrameSetup } from '../frame/FrameController';\nimport type { Globals } from '../protocol/messages';\nimport type { Decorator, LoadedStory } from '../story/types';\nimport { ClockContext } from '../timeline/context';\nimport { isForgePath, storyConfig } from './globals';\nimport { LiveCopies, StoryCopy } from './loupe/LiveCopies';\nimport { StoryBody } from './StoryBody';\nimport { TrialHost } from './TrialHost';\n\n/** Props for `StoryTrial`. */\nexport interface StoryTrialProps {\n story: LoadedStory;\n setup: FrameSetup;\n /** The trial's config and state; the story reads and writes them through its `StoryContext`. */\n ctx: Pick<RenderContext<unknown, unknown>, 'config' | 'state' | 'setConfig' | 'setState'>;\n hostRef?: RefObject<HTMLElement | null>;\n onRendered?: () => void;\n /** A render throw, after the boundary has shown it. */\n onError?: (error: unknown) => void;\n}\n\nconst NO_DECORATORS: readonly Decorator[] = [];\n\n/** A story rendered in the workshop document, inside a `TrialHost`, from the trial's own config and state. */\nexport function StoryTrial({ story, setup, ctx, hostRef, onRendered, onError }: StoryTrialProps) {\n const latestRef = useLatest(ctx);\n // Kept across a write to a key forge owns, so moving the playhead or a pin does not re-render the story.\n const [heldConfig, setHeldConfig] = useState(() => storyConfig(ctx.config));\n const config = storyConfig(ctx.config, heldConfig);\n if (config !== heldConfig) setHeldConfig(config);\n\n // A trial opened on the provisional instrument starts at `null`; the story's own initial state fills it once.\n const seeded = useRef(false);\n useEffect(() => {\n if (seeded.current || ctx.state !== null || !story.initialState) return;\n seeded.current = true;\n ctx.setState(story.initialState(config));\n }, [ctx, story, config]);\n\n // Each new input retries a render the boundary caught, as the frame did on each message.\n // State, not a ref: a render React throws away takes its bump with it.\n const [input, setInput] = useState({ config, state: ctx.state, key: 0 });\n let resetKey = input.key;\n if (input.config !== config || input.state !== ctx.state) {\n resetKey = input.key + 1;\n setInput({ config, state: ctx.state, key: resetKey });\n }\n\n // Stable, as the frame's were: a story may list them as effect dependencies.\n // The pins belong to the trial; a story cannot see them, so it cannot set them either.\n const setConfig = useCallback((path: string, value: unknown) => {\n if (!isForgePath(path)) latestRef.current.setConfig(path, value);\n }, [latestRef]);\n const setState = useCallback((next: unknown) => latestRef.current.setState(next), [latestRef]);\n\n // The story's clock is the one labkit made for its trial from the timeline the instrument declares.\n const trialId = useContext(TrialIdContext);\n const ownHost = useRef<HTMLElement | null>(null);\n const host = hostRef ?? ownHost;\n const spec = story.timeline?.(config) ?? null;\n const trialClock = useTrialClockHandle();\n const clock = spec ? trialClock : null;\n\n const decorators = setup.decorators ?? NO_DECORATORS;\n const latestError = useLatest(onError);\n const reportError = useCallback((error: unknown) => latestError.current?.(error), [latestError]);\n const body = {\n story,\n config,\n setConfig,\n state: ctx.state,\n setState,\n decorators,\n resetKey,\n onError: reportError,\n };\n const render = (globals: Globals) => (\n <ClockContext.Provider value={clock}>\n <StoryBody {...body} globals={globals} />\n </ClockContext.Provider>\n );\n\n return (\n <>\n <TrialHost\n layout={story.layout}\n setup={setup}\n config={ctx.config}\n hostRef={host}\n {...(onRendered ? { onRendered } : {})}\n >\n {render}\n </TrialHost>\n <LiveCopies trialId={trialId} layout={story.layout} setup={setup} trialConfig={ctx.config}>\n {(globals, args) => <StoryCopy body={body} clock={clock} globals={globals} args={args} />}\n </LiveCopies>\n </>\n );\n}\n"]}
@@ -17,11 +17,14 @@ function storyNameFromExport(exportName) {
17
17
  // src/csf/propArgTypes.ts
18
18
  var PROP_ARG_TYPES_EXPORT = "__forgeArgTypes";
19
19
 
20
+ // src/story/api.ts
21
+ var API_EXPORT = "__forgeApi";
22
+
20
23
  // src/frame/safeOverride.ts
21
24
  function isSafeOverride(name, value) {
22
25
  return /^--[\w-]+$/.test(name) && !/[{};]/.test(value);
23
26
  }
24
27
 
25
- export { PROP_ARG_TYPES_EXPORT, isSafeOverride, sanitize, storyId, storyNameFromExport };
26
- //# sourceMappingURL=chunk-5WS67HMU.js.map
27
- //# sourceMappingURL=chunk-5WS67HMU.js.map
28
+ export { API_EXPORT, PROP_ARG_TYPES_EXPORT, isSafeOverride, sanitize, storyId, storyNameFromExport };
29
+ //# sourceMappingURL=chunk-PN4IFL5E.js.map
30
+ //# sourceMappingURL=chunk-PN4IFL5E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/story/ids.ts","../src/csf/propArgTypes.ts","../src/story/api.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;;;ACA9B,IAAM,UAAA,GAAa;;;ACGnB,SAAS,cAAA,CAAe,MAAc,KAAA,EAAwB;AACnE,EAAA,OAAO,aAAa,IAAA,CAAK,IAAI,KAAK,CAAC,OAAA,CAAQ,KAAK,KAAK,CAAA;AACvD","file":"chunk-PN4IFL5E.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","/** The named export forge's vite plugin adds to a story module: the API of the meta's component. */\nexport const API_EXPORT = '__forgeApi';\n\nexport interface ApiProp {\n name: string;\n /** As its declaration spells it, else as the compiler prints it. */\n type: string;\n required: boolean;\n /** Source text: the component's destructuring default, else its `@default` tag. */\n default?: string;\n description?: string;\n /** The `@deprecated` tag's text; empty for a bare tag. */\n deprecated?: string;\n}\n\nexport interface ApiMember {\n name: string;\n kind: 'method' | 'property';\n /** A method's signature, arrow style, or a property's type. */\n signature: string;\n readonly: boolean;\n description?: string;\n}\n\n/** Props declared by the platform or a skipped package, counted per declaring type rather than listed. */\nexport interface ApiInherited {\n from: string;\n count: number;\n}\n\n/** What the component's `ref` takes. A platform type, such as an element, lists no members. */\nexport interface ApiRef {\n type: string;\n members: ApiMember[];\n}\n\nexport interface ApiTable {\n props: ApiProp[];\n inherited: ApiInherited[];\n ref: ApiRef | null;\n}\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,4 +1,4 @@
1
- import { sanitize } from './chunk-5WS67HMU.js';
1
+ import { sanitize } from './chunk-PN4IFL5E.js';
2
2
 
3
3
  // src/story/indexPages.ts
4
4
  var SUFFIX = ":index";
@@ -56,5 +56,5 @@ function indexEntries(stories) {
56
56
  }
57
57
 
58
58
  export { byComponent, indexEntries, indexId, isIndexId };
59
- //# sourceMappingURL=chunk-RVJHUY7W.js.map
60
- //# sourceMappingURL=chunk-RVJHUY7W.js.map
59
+ //# sourceMappingURL=chunk-ZGELUE2H.js.map
60
+ //# sourceMappingURL=chunk-ZGELUE2H.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/story/indexPages.ts"],"names":[],"mappings":"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","file":"chunk-RVJHUY7W.js","sourcesContent":["import { sanitize } from './ids';\nimport type { IndexEntry } from './types';\n\nconst SUFFIX = ':index';\n\n/** The name an index page goes by in the sidebar and in its trial's title. */\nexport const INDEX_NAME = 'Index';\n\n/** The id of `title`'s index page. A colon never survives `sanitize`, so no story id can collide with it. */\nexport function indexId(title: string): string {\n return `${sanitize(title)}${SUFFIX}`;\n}\n\nexport function isIndexId(id: string): boolean {\n return id.endsWith(SUFFIX);\n}\n\n/** A story file's name with its `.stories.tsx`-style suffix removed: `Bar` for `/x/Bar.stories.tsx`. */\nfunction stemOf(file: string): string {\n const name = file.replaceAll('\\\\', '/').split('/').pop() ?? file;\n return name.replace(/(?:\\.(?:story|stories))?\\.[^.]+$/i, '');\n}\n\n/**\n * The file that speaks for a title several story files share: the one named for the title's last segment, so\n * `Bar.stories.tsx` over `lab/BarArc.stories.tsx` for `ui/Bar`, else the first. Its meta describes the component.\n */\nexport function primaryFile(title: string, files: readonly string[]): string | undefined {\n const name = (title.split('/').pop() ?? title).toLowerCase();\n return files.find((file) => stemOf(file).toLowerCase() === name) ?? files[0];\n}\n\n/** `stories` grouped by title, in the order titles first appear, each title's primary file's stories first. */\nexport function byComponent<E extends Pick<IndexEntry, 'title' | 'file'>>(stories: readonly E[]): E[] {\n const byTitle = new Map<string, E[]>();\n for (const entry of stories) {\n const group = byTitle.get(entry.title);\n if (group) group.push(entry);\n else byTitle.set(entry.title, [entry]);\n }\n return [...byTitle].flatMap(([title, group]) => {\n const primary = primaryFile(title, [...new Set(group.map((entry) => entry.file))]);\n return [...group.filter((entry) => entry.file === primary), ...group.filter((entry) => entry.file !== primary)];\n });\n}\n\n/**\n * One index-page entry per title in `stories`, in the order titles first appear. It routes and runs like a story:\n * its `file` is the title's primary file, its descriptions are that file's, and its tags are those every story\n * of the title carries.\n */\nexport function indexEntries(stories: readonly IndexEntry[]): IndexEntry[] {\n const byTitle = new Map<string, IndexEntry>();\n for (const entry of byComponent(stories)) {\n const page = byTitle.get(entry.title);\n if (page) {\n if (page.tags) {\n const common = page.tags.filter((tag) => entry.tags?.includes(tag));\n if (common.length > 0) page.tags = common;\n else delete page.tags;\n }\n continue;\n }\n byTitle.set(entry.title, {\n id: indexId(entry.title),\n title: entry.title,\n name: INDEX_NAME,\n exportName: '',\n file: entry.file,\n ...(entry.componentDescription === undefined ? {} : { componentDescription: entry.componentDescription }),\n ...(entry.componentName === undefined ? {} : { componentName: entry.componentName }),\n ...(entry.tags === undefined ? {} : { tags: entry.tags }),\n });\n }\n return [...byTitle.values()];\n}\n"]}
1
+ {"version":3,"sources":["../src/story/indexPages.ts"],"names":[],"mappings":"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","file":"chunk-ZGELUE2H.js","sourcesContent":["import { sanitize } from './ids';\nimport type { IndexEntry } from './types';\n\nconst SUFFIX = ':index';\n\n/** The name an index page goes by in the sidebar and in its trial's title. */\nexport const INDEX_NAME = 'Index';\n\n/** The id of `title`'s index page. A colon never survives `sanitize`, so no story id can collide with it. */\nexport function indexId(title: string): string {\n return `${sanitize(title)}${SUFFIX}`;\n}\n\nexport function isIndexId(id: string): boolean {\n return id.endsWith(SUFFIX);\n}\n\n/** A story file's name with its `.stories.tsx`-style suffix removed: `Bar` for `/x/Bar.stories.tsx`. */\nfunction stemOf(file: string): string {\n const name = file.replaceAll('\\\\', '/').split('/').pop() ?? file;\n return name.replace(/(?:\\.(?:story|stories))?\\.[^.]+$/i, '');\n}\n\n/**\n * The file that speaks for a title several story files share: the one named for the title's last segment, so\n * `Bar.stories.tsx` over `lab/BarArc.stories.tsx` for `ui/Bar`, else the first. Its meta describes the component.\n */\nexport function primaryFile(title: string, files: readonly string[]): string | undefined {\n const name = (title.split('/').pop() ?? title).toLowerCase();\n return files.find((file) => stemOf(file).toLowerCase() === name) ?? files[0];\n}\n\n/** `stories` grouped by title, in the order titles first appear, each title's primary file's stories first. */\nexport function byComponent<E extends Pick<IndexEntry, 'title' | 'file'>>(stories: readonly E[]): E[] {\n const byTitle = new Map<string, E[]>();\n for (const entry of stories) {\n const group = byTitle.get(entry.title);\n if (group) group.push(entry);\n else byTitle.set(entry.title, [entry]);\n }\n return [...byTitle].flatMap(([title, group]) => {\n const primary = primaryFile(title, [...new Set(group.map((entry) => entry.file))]);\n return [...group.filter((entry) => entry.file === primary), ...group.filter((entry) => entry.file !== primary)];\n });\n}\n\n/**\n * One index-page entry per title in `stories`, in the order titles first appear. It routes and runs like a story:\n * its `file` is the title's primary file, its descriptions are that file's, and its tags are those every story\n * of the title carries.\n */\nexport function indexEntries(stories: readonly IndexEntry[]): IndexEntry[] {\n const byTitle = new Map<string, IndexEntry>();\n for (const entry of byComponent(stories)) {\n const page = byTitle.get(entry.title);\n if (page) {\n if (page.tags) {\n const common = page.tags.filter((tag) => entry.tags?.includes(tag));\n if (common.length > 0) page.tags = common;\n else delete page.tags;\n }\n continue;\n }\n byTitle.set(entry.title, {\n id: indexId(entry.title),\n title: entry.title,\n name: INDEX_NAME,\n exportName: '',\n file: entry.file,\n ...(entry.componentDescription === undefined ? {} : { componentDescription: entry.componentDescription }),\n ...(entry.componentName === undefined ? {} : { componentName: entry.componentName }),\n ...(entry.tags === undefined ? {} : { tags: entry.tags }),\n });\n }\n return [...byTitle.values()];\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { LabMode, LabContribution, LabPage } from '@weasel-js/labkit';
2
2
  import { Theme } from '@weasel-js/theme';
3
3
  import { ControlRenderer } from '@weasel-js/labkit/config';
4
- import { G as Globals, F as FrameSetup } from './FrameController-BM6xuEfY.js';
4
+ import { G as Globals, F as FrameSetup } from './FrameController-D9CddmJg.js';
5
5
  import { IconRef } from '@weasel-js/icons';
6
6
  import { L as Library } from './library-CdTj-hFp.js';
7
7