@walkeros/explorer 4.7.2 → 4.8.0-next-1791496487198

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/design/components/index.ts","../../../src/design/components/cx.ts","../../../src/design/components/atoms/Button.tsx","../../../src/design/components/atoms/InlineCode.tsx","../../../src/design/components/atoms/EventLegend.tsx","../../../src/design/components/atoms/Icon.tsx","../../../src/design/components/atoms/Eyebrow.tsx","../../../src/design/components/atoms/Stat.tsx","../../../src/design/components/atoms/Text.tsx","../../../src/design/components/atoms/TextLink.tsx","../../../src/design/components/atoms/Card.tsx","../../../src/design/components/atoms/InstallCommand.tsx","../../../src/design/components/atoms/PhotoPlaceholder.tsx","../../../src/design/components/molecules/CheckList.tsx","../../../src/design/components/molecules/SectionHeading.tsx","../../../src/design/components/molecules/ProblemCard.tsx","../../../src/design/components/molecules/FeatureItem.tsx","../../../src/design/components/molecules/FaqItem.tsx","../../../src/design/components/molecules/PlanCard.tsx","../../../src/design/components/molecules/CaseCard.tsx","../../../src/design/components/molecules/HighlightCard.tsx","../../../src/design/components/molecules/BrowserFrame.tsx","../../../src/design/components/molecules/QuickstartSteps.tsx","../../../src/design/components/layout/Section.tsx","../../../src/design/components/layout/CardGrid.tsx","../../../src/design/components/layout/Split.tsx","../../../src/design/components/layout/Cluster.tsx","../../../src/design/components/layout/Hero.tsx","../../../src/design/components/viz/DestinationMappingViz.tsx","../../../src/design/components/viz/data/destination-mapping.ts","../../../src/design/components/viz/parts/CodeTokens.tsx","../../../src/design/components/viz/parts/tokens.ts","../../../src/design/components/viz/parts/format.ts","../../../src/design/components/viz/parts/VizFrame.tsx","../../../src/design/components/viz/HeroTaggingViz.tsx","../../../src/design/components/viz/parts/timeline.ts","../../../src/design/components/viz/data/hero.ts","../../../src/design/components/viz/parts/EventsTable.tsx","../../../src/design/components/viz/parts/style.ts","../../../src/design/components/viz/parts/hooks.ts","../../../src/design/components/viz/parts/Pill.tsx","../../../src/design/components/viz/parts/Thumb.tsx","../../../src/design/components/viz/ArticleTeaserTracking.tsx","../../../src/design/components/viz/data/article-teaser.ts"],"sourcesContent":["// @walkeros/explorer/design/components: the design system's React components.\n// Imports nothing but react; styles ship in @walkeros/explorer/styles.css.\n// Each folder keeps its own export list, so batches add components without\n// sharing this file; names stay flat for consumers.\nexport * from './atoms';\nexport * from './molecules';\nexport * from './layout';\nexport * from './viz';\nexport type { CallToAction, DataAttributes, LinkComponent } from './types';\n","/** Joins the truthy class names with spaces. */\nexport function cx(...names: Array<string | false | null | undefined>): string {\n return names.filter((name): name is string => Boolean(name)).join(' ');\n}\n","import React, {\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cx } from '../cx';\nimport type { LinkComponent } from '../types';\n\ninterface ButtonOwnProps {\n children: ReactNode;\n variant?: 'primary' | 'secondary';\n arrow?: boolean;\n block?: boolean;\n className?: string;\n}\n\ntype AnchorProps = AnchorHTMLAttributes<HTMLAnchorElement>;\n\n/** With `href`: a link, rendered by `linkComponent` when given, else `<a>`. */\nexport interface ButtonLinkProps\n extends ButtonOwnProps, Omit<AnchorProps, keyof ButtonOwnProps | 'href'> {\n href: string;\n /**\n * A client-side router link (a Docusaurus or Next `Link` taking `href`),\n * rendered instead of `<a>` with the same `href`, `className`, children and\n * every other attribute.\n */\n linkComponent?: LinkComponent;\n}\n\n/** Without `href`: a `<button>`, `type=\"button\"` unless `type` says otherwise. */\nexport interface ButtonElementProps\n extends\n ButtonOwnProps,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonOwnProps> {\n href?: undefined;\n linkComponent?: undefined;\n}\n\n/**\n * Every attribute Button does not own (`data-elb*` tagging, `aria-*`,\n * `onClick`, ...) reaches the rendered element.\n */\nexport type ButtonProps = ButtonLinkProps | ButtonElementProps;\n\nfunction classes({\n variant = 'primary',\n block = false,\n className,\n}: Pick<ButtonOwnProps, 'variant' | 'block' | 'className'>): string {\n return cx(\n 'elb-btn',\n `elb-btn--${variant}`,\n block && 'elb-btn--block',\n className,\n );\n}\n\nfunction LinkButton({\n children,\n variant,\n arrow,\n block,\n className,\n linkComponent: Link,\n ...anchor\n}: ButtonLinkProps) {\n const props = {\n ...anchor,\n className: classes({ variant, block, className }),\n };\n const content = (\n <>\n {children}\n {arrow && <span aria-hidden=\"true\"> →</span>}\n </>\n );\n return Link ? <Link {...props}>{content}</Link> : <a {...props}>{content}</a>;\n}\n\nfunction ButtonElement({\n children,\n variant,\n arrow,\n block,\n className,\n type = 'button',\n ...rest\n}: ButtonElementProps) {\n return (\n <button\n {...rest}\n type={type}\n className={classes({ variant, block, className })}\n >\n {children}\n {arrow && <span aria-hidden=\"true\"> →</span>}\n </button>\n );\n}\n\n/**\n * The walkerOS call-to-action: a `primary` fill with `on-primary` text, or a\n * flat `surface` secondary. Renders a link with `href`, a button otherwise.\n * Use at most one primary per group.\n */\nexport function Button(props: ButtonProps) {\n return props.href === undefined ? (\n <ButtonElement {...props} />\n ) : (\n <LinkButton {...props} />\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface InlineCodeProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n}\n\n/** Mono code token inside prose: attribute names, function calls, event names. */\nexport function InlineCode({ children, className, ...rest }: InlineCodeProps) {\n return (\n <code {...rest} className={cx('elb-code-inline', className)}>\n {children}\n </code>\n );\n}\n","import React, { type HTMLAttributes } from 'react';\nimport { cx } from '../cx';\n\nexport interface EventLegendProps extends HTMLAttributes<HTMLDivElement> {\n parts?: Array<'entity' | 'action' | 'property' | 'context' | 'globals'>;\n}\n\ntype EventPart = NonNullable<EventLegendProps['parts']>[number];\n\n// The five parts of a walkerOS event, in event order, with their colours.\nconst PARTS: ReadonlyArray<readonly [EventPart, string]> = [\n ['entity', 'var(--event-entity)'],\n ['action', 'var(--event-action)'],\n ['property', 'var(--event-property)'],\n ['context', 'var(--event-context)'],\n ['globals', 'var(--event-globals)'],\n];\n\n/**\n * The fixed colour key for the five parts of a walkerOS event. Event colours\n * only show on dark grounds, so the legend is a dark island in both themes.\n * `parts` shows a subset, still in event order.\n */\nexport function EventLegend({ parts, className, ...rest }: EventLegendProps) {\n return (\n <div {...rest} className={cx('elb-legend', className)} data-theme=\"dark\">\n {PARTS.filter(([part]) => !parts || parts.includes(part)).map(\n ([part, color]) => (\n <span key={part} className=\"elb-legend__item\">\n <i\n className=\"elb-legend__swatch\"\n style={{ background: color }}\n aria-hidden=\"true\"\n />\n {part}\n </span>\n ),\n )}\n </div>\n );\n}\n","import React, { type ReactElement, type SVGAttributes } from 'react';\nimport { cx } from '../cx';\n\nexport type IconName =\n | 'check'\n | 'copy'\n | 'lock'\n | 'reload'\n | 'bookmark'\n | 'warning';\n\nexport interface IconProps extends Omit<SVGAttributes<SVGSVGElement>, 'name'> {\n name: IconName;\n size?: number;\n}\n\n/** Each glyph's grid and strokes, drawn in currentColor. */\nconst GLYPHS: Readonly<\n Record<IconName, { viewBox: string; strokes: ReactElement }>\n> = {\n check: {\n viewBox: '0 0 16 16',\n strokes: (\n <path\n d=\"M3 8.5l3 3 7-7\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ),\n },\n copy: {\n viewBox: '0 0 24 24',\n strokes: (\n <>\n <rect\n x={9}\n y={9}\n width={12}\n height={12}\n rx={2}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n />\n <path\n d=\"M5 15V5a2 2 0 0 1 2-2h10\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n />\n </>\n ),\n },\n lock: {\n viewBox: '0 0 24 24',\n strokes: (\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x={5} y={11} width={14} height={10} rx={2} />\n <path d=\"M8 11V7a4 4 0 0 1 8 0v4\" />\n </g>\n ),\n },\n reload: {\n viewBox: '0 0 24 24',\n strokes: (\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 4v6h-6\" />\n <path d=\"M20.5 15a9 9 0 1 1-2.1-9.4L21 10\" />\n </g>\n ),\n },\n bookmark: {\n viewBox: '0 0 24 24',\n strokes: (\n <path\n d=\"M6 3h12v18l-6-4-6 4z\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinejoin=\"round\"\n />\n ),\n },\n warning: {\n viewBox: '0 0 24 24',\n strokes: (\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.3 3.9 2.4 18a2 2 0 0 0 1.7 3h15.8a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </g>\n ),\n },\n};\n\n/** The design system's line glyphs, drawn in currentColor; a check is always primary. */\nexport function Icon({ name, size = 16, className, ...rest }: IconProps) {\n const { viewBox, strokes } = GLYPHS[name];\n // Decorative unless the caller labels it (`aria-hidden={false}`, `aria-label`).\n return (\n <svg\n aria-hidden\n focusable={false}\n {...rest}\n width={size}\n height={size}\n className={cx('elb-icon', `elb-icon--${name}`, className)}\n viewBox={viewBox}\n >\n {strokes}\n </svg>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface EyebrowProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n variant?: 'eyebrow' | 'label';\n tone?: 'link' | 'muted';\n}\n\n/** An uppercase line above a heading (`eyebrow`) or a card's tier label (`label`). */\nexport function Eyebrow({\n children,\n variant = 'eyebrow',\n tone = 'link',\n className,\n ...rest\n}: EyebrowProps) {\n return (\n <p\n {...rest}\n className={cx(\n 'elb-eyebrow',\n variant === 'label' && 'elb-eyebrow--label',\n tone === 'muted' && 'elb-eyebrow--muted',\n className,\n )}\n >\n {children}\n </p>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface StatProps extends HTMLAttributes<HTMLDivElement> {\n value: ReactNode;\n children: ReactNode;\n}\n\n/** One figure and its label, as a tile inside a case card. */\nexport function Stat({ value, children, className, ...rest }: StatProps) {\n return (\n <div {...rest} className={cx('elb-stat', className)}>\n <span className=\"elb-stat__value\">{value}</span>\n <p className=\"elb-stat__label\">{children}</p>\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface TextProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n size?: 'body' | 'lg';\n tone?: 'muted' | 'fg';\n}\n\n/** A paragraph of supporting copy, `fg-2` unless `tone=\"fg\"`. */\nexport function Text({\n children,\n size = 'body',\n tone = 'muted',\n className,\n ...rest\n}: TextProps) {\n return (\n <p\n {...rest}\n className={cx(\n 'elb-text',\n size === 'lg' && 'elb-text--lg',\n tone === 'fg' && 'elb-text--fg',\n className,\n )}\n >\n {children}\n </p>\n );\n}\n","import React, { type AnchorHTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport type { LinkComponent } from '../types';\n\nexport interface TextLinkProps extends Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n 'href'\n> {\n href: string;\n children: ReactNode;\n tone?: 'link' | 'muted';\n arrow?: boolean;\n /** A router link rendered instead of `<a>`, with the same props. */\n linkComponent?: LinkComponent;\n}\n\n/** An inline link in `link` (or `fg-2`) colour, underlined on hover. */\nexport function TextLink({\n href,\n children,\n tone = 'link',\n arrow = false,\n linkComponent: Link,\n className,\n ...rest\n}: TextLinkProps) {\n const props = {\n ...rest,\n href,\n className: cx(\n 'elb-text-link',\n tone === 'muted' && 'elb-text-link--muted',\n className,\n ),\n };\n const content = (\n <>\n {children}\n {arrow && <span aria-hidden=\"true\"> →</span>}\n </>\n );\n return Link ? <Link {...props}>{content}</Link> : <a {...props}>{content}</a>;\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** `sm` card-pad-sm (26px), `md` card-pad (28px), `lg` 32px. */\n padding?: 'sm' | 'md' | 'lg';\n radius?: 'lg' | 'xl';\n /** Tints the border toward primary on hover. */\n hover?: boolean;\n /** The one recommended item: primary border and the plan-highlight ring. */\n highlight?: boolean;\n /** A glow halo in the top right corner. */\n glow?: boolean;\n}\n\n/** The flat card frame: surface, 1px border, a column of children. */\nexport function Card({\n children,\n padding = 'md',\n radius = 'lg',\n hover = false,\n highlight = false,\n glow = false,\n className,\n ...rest\n}: CardProps) {\n return (\n <div\n {...rest}\n className={cx(\n 'elb-card',\n `elb-card--pad-${padding}`,\n radius === 'xl' && 'elb-card--radius-xl',\n hover && 'elb-card--hover',\n highlight && 'elb-card--highlight',\n glow && 'elb-card--glow',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import React, {\n useEffect,\n useId,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n} from 'react';\nimport { cx } from '../cx';\nimport { Icon } from './Icon';\n\nexport interface InstallCommandProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick' | 'type' | 'children'\n> {\n /** The command shown and copied. */\n command?: string;\n}\n\ntype CopyState = 'idle' | 'done' | 'failed';\n\n/** How long the check stays after a successful copy. */\nconst CONFIRM_MS = 1400;\n\n/**\n * True only when the clipboard took the text. A missing clipboard API (http,\n * older browsers) throws on access, which counts as a failure like a rejection.\n */\nasync function copyText(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * A copy-to-clipboard chip for a CLI command. It confirms with a check only when\n * the copy succeeded, and says \"Copy failed\" otherwise. The button's accessible\n * name is the visible command, so speech input can target it; the action is its\n * description. The live region sits beside the button: a button's content is\n * presentational for assistive technology.\n */\nexport function InstallCommand({\n command = 'npm i -g @walkeros/cli',\n className,\n 'aria-describedby': describedBy,\n ...rest\n}: InstallCommandProps) {\n const hintId = useId();\n const [state, setState] = useState<CopyState>('idle');\n const mounted = useRef(true);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n clearTimeout(timer.current);\n };\n }, []);\n\n const copy = async (): Promise<void> => {\n const copied = await copyText(command);\n if (!mounted.current) return;\n clearTimeout(timer.current);\n setState(copied ? 'done' : 'failed');\n if (copied) timer.current = setTimeout(() => setState('idle'), CONFIRM_MS);\n };\n\n return (\n <>\n <button\n {...rest}\n aria-describedby={describedBy ? `${hintId} ${describedBy}` : hintId}\n type=\"button\"\n className={cx('elb-cmd', className)}\n onClick={() => {\n void copy();\n }}\n >\n <span>\n <span className=\"elb-cmd__prompt\" aria-hidden=\"true\">\n ${' '}\n </span>\n {command}\n </span>\n <span\n className={cx(\n 'elb-cmd__icon',\n state === 'done' && 'elb-cmd__icon--done',\n )}\n >\n <Icon name={state === 'done' ? 'check' : 'copy'} />\n </span>\n </button>\n <span id={hintId} hidden>\n Copy install command\n </span>\n <span className=\"elb-cmd__status\" role=\"status\">\n {state === 'done' ? 'Copied' : state === 'failed' ? 'Copy failed' : ''}\n </span>\n </>\n );\n}\n","import React, { type HTMLAttributes } from 'react';\nimport { cx } from '../cx';\n\nexport interface PhotoPlaceholderProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** The word in the middle. */\n label?: string;\n /** `theme` follows dark and light; `viz` is the demos' look, dark in both. */\n tone?: 'theme' | 'viz';\n}\n\n/** A striped stand-in for a photo, sized by the caller. */\nexport function PhotoPlaceholder({\n label = 'photo',\n tone = 'theme',\n className,\n ...rest\n}: PhotoPlaceholderProps) {\n // Decorative unless the caller names it (`role`, `aria-label`, `aria-labelledby`).\n const named =\n rest.role !== undefined ||\n rest['aria-label'] !== undefined ||\n rest['aria-labelledby'] !== undefined;\n return (\n <div\n aria-hidden={named ? undefined : true}\n {...rest}\n className={cx('elb-photo', tone === 'viz' && 'elb-photo--viz', className)}\n {...(tone === 'viz' ? { 'data-theme': 'dark' } : {})}\n >\n {label}\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Icon } from '../atoms/Icon';\n\nexport interface CheckListProps extends HTMLAttributes<HTMLUListElement> {\n items: ReactNode[];\n /** `inline` wraps in a row (16px checks); `stack` is a column (14px checks). */\n layout?: 'inline' | 'stack';\n align?: 'start' | 'center';\n}\n\n/** Short claims, each led by a primary check. */\nexport function CheckList({\n items,\n layout = 'inline',\n align = 'start',\n className,\n ...rest\n}: CheckListProps) {\n const stack = layout === 'stack';\n return (\n <ul\n {...rest}\n className={cx(\n 'elb-checklist',\n stack && 'elb-checklist--stack',\n align === 'center' && 'elb-checklist--center',\n className,\n )}\n >\n {items.map((item, index) => (\n <li key={index} className=\"elb-checklist__item\">\n <Icon name=\"check\" size={stack ? 14 : 16} />\n {item}\n </li>\n ))}\n </ul>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Eyebrow } from '../atoms/Eyebrow';\n\nexport interface SectionHeadingProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n title: ReactNode;\n eyebrow?: ReactNode;\n lead?: ReactNode;\n /** 1 is the page's hero heading: an h1, always centred. */\n level?: 1 | 2;\n /** The h2 size: `lg` for sections, `md` beside a demo. */\n size?: 'lg' | 'md';\n /** Hero only: a phrase after the title in primary. */\n highlight?: ReactNode;\n align?: 'start' | 'center';\n}\n\n/** Eyebrow, heading and lead: the opening of a section, or the hero. */\nexport function SectionHeading({\n title,\n eyebrow,\n lead,\n level = 2,\n size = 'lg',\n highlight,\n align = 'start',\n className,\n ...rest\n}: SectionHeadingProps) {\n const hero = level === 1;\n return (\n <div\n {...rest}\n className={cx(\n 'elb-sh',\n (hero || align === 'center') && 'elb-sh--center',\n className,\n )}\n >\n {eyebrow !== undefined && <Eyebrow>{eyebrow}</Eyebrow>}\n {hero ? (\n <h1 className=\"elb-sh__title elb-sh__title--display\">\n {title}\n {highlight !== undefined && (\n <>\n {' '}\n <span className=\"elb-sh__highlight\">{highlight}</span>\n </>\n )}\n </h1>\n ) : (\n <h2 className={cx('elb-sh__title', `elb-sh__title--${size}`)}>\n {title}\n </h2>\n )}\n {lead !== undefined && (\n <p className={cx('elb-sh__lead', hero && 'elb-sh__lead--hero')}>\n {lead}\n </p>\n )}\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Card } from '../atoms/Card';\n\nexport interface ProblemCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n number: string;\n title: ReactNode;\n children: ReactNode;\n}\n\n/** A numbered card naming one problem. */\nexport function ProblemCard({\n number,\n title,\n children,\n className,\n ...rest\n}: ProblemCardProps) {\n return (\n <Card\n {...rest}\n padding=\"sm\"\n hover\n className={cx('elb-problem-card', className)}\n >\n <h3 className=\"elb-problem-card__title\">\n <span className=\"elb-problem-card__number\">{number}</span>\n {title}\n </h3>\n <p className=\"elb-problem-card__text\">{children}</p>\n </Card>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Icon } from '../atoms/Icon';\nimport { TextLink } from '../atoms/TextLink';\nimport type { DataAttributes, LinkComponent } from '../types';\n\nexport interface FeatureItemProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n title: ReactNode;\n children: ReactNode;\n href?: string;\n linkLabel?: string;\n /** A router link rendered instead of `<a>`. */\n linkComponent?: LinkComponent;\n /** Tagging for the link alone (the root takes the item's own). */\n linkAttributes?: DataAttributes;\n}\n\n/** A checked feature with a title, one sentence and a docs link. */\nexport function FeatureItem({\n title,\n children,\n href,\n linkLabel = 'Docs',\n linkComponent,\n linkAttributes,\n className,\n ...rest\n}: FeatureItemProps) {\n return (\n <div {...rest} className={cx('elb-feature', className)}>\n <Icon name=\"check\" size={20} />\n <div>\n <h3 className=\"elb-feature__title\">{title}</h3>\n <p className=\"elb-feature__text\">{children}</p>\n {href !== undefined && (\n <TextLink\n {...linkAttributes}\n href={href}\n arrow\n linkComponent={linkComponent}\n className=\"elb-feature__link\"\n >\n {linkLabel}\n </TextLink>\n )}\n </div>\n </div>\n );\n}\n","import React, {\n Fragment,\n type DetailsHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cx } from '../cx';\n\nexport interface FaqItemProps extends Omit<\n DetailsHTMLAttributes<HTMLDetailsElement>,\n 'children'\n> {\n question: ReactNode;\n /** The answer; an array renders one block per entry, strings as paragraphs. */\n children: ReactNode;\n}\n\n/** One FAQ question as a native disclosure; `open` sets the initial state. */\nexport function FaqItem({\n question,\n children,\n className,\n ...rest\n}: FaqItemProps) {\n const parts = Array.isArray(children) ? children : [children];\n return (\n <details {...rest} className={cx('elb-faq', className)}>\n <summary className=\"elb-faq__question\">{question}</summary>\n <div className=\"elb-faq__answer\">\n {parts.map((part, index) =>\n typeof part === 'string' ? (\n <p key={index}>{part}</p>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </div>\n </details>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Button } from '../atoms/Button';\nimport { Card } from '../atoms/Card';\nimport { Eyebrow } from '../atoms/Eyebrow';\nimport type { CallToAction, LinkComponent } from '../types';\nimport { CheckList } from './CheckList';\n\nexport interface PlanCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n label: string;\n title: ReactNode;\n children: ReactNode;\n features?: ReactNode[];\n cta?: CallToAction;\n /** The one recommended plan: primary CTA, ring, link-coloured label. */\n highlight?: boolean;\n linkComponent?: LinkComponent;\n}\n\n/** A service tier: label, name, description, checked features and a CTA. */\nexport function PlanCard({\n label,\n title,\n children,\n features,\n cta,\n highlight = false,\n linkComponent,\n className,\n ...rest\n}: PlanCardProps) {\n return (\n <Card\n {...rest}\n padding=\"md\"\n highlight={highlight}\n className={cx('elb-plan', className)}\n >\n <Eyebrow variant=\"label\" tone={highlight ? 'link' : 'muted'}>\n {label}\n </Eyebrow>\n <h3 className=\"elb-plan__title\">{title}</h3>\n <p className=\"elb-plan__text\">{children}</p>\n {features && <CheckList items={features} layout=\"stack\" />}\n {cta && (\n <Button\n {...cta.attributes}\n href={cta.href}\n variant={highlight ? 'primary' : 'secondary'}\n block\n linkComponent={linkComponent}\n >\n {cta.label}\n </Button>\n )}\n </Card>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Card } from '../atoms/Card';\nimport { Eyebrow } from '../atoms/Eyebrow';\nimport { Stat } from '../atoms/Stat';\n\nexport interface CaseStat {\n value: ReactNode;\n label: ReactNode;\n}\n\nexport interface CaseCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n label: string;\n title: ReactNode;\n children: ReactNode;\n stats: CaseStat[];\n}\n\n/** A customer story: label, headline, text and a row of stat tiles. */\nexport function CaseCard({\n label,\n title,\n children,\n stats,\n className,\n ...rest\n}: CaseCardProps) {\n return (\n <Card {...rest} padding=\"md\" className={cx('elb-case-card', className)}>\n <Eyebrow variant=\"label\">{label}</Eyebrow>\n <h3 className=\"elb-case-card__title\">{title}</h3>\n <p className=\"elb-case-card__text\">{children}</p>\n <div className=\"elb-case-card__stats\">\n {stats.map((stat, index) => (\n <Stat key={index} value={stat.value}>\n {stat.label}\n </Stat>\n ))}\n </div>\n </Card>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { Button } from '../atoms/Button';\nimport { Card } from '../atoms/Card';\nimport { Eyebrow } from '../atoms/Eyebrow';\nimport type { CallToAction, LinkComponent } from '../types';\n\nexport interface HighlightCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n label: string;\n title: ReactNode;\n children: ReactNode;\n /** A secondary button below the text; omit for a card without one. */\n cta?: CallToAction;\n linkComponent?: LinkComponent;\n}\n\n/** A large card with a corner glow and an optional secondary CTA: a direction to explore. */\nexport function HighlightCard({\n label,\n title,\n children,\n cta,\n linkComponent,\n className,\n ...rest\n}: HighlightCardProps) {\n return (\n <Card\n {...rest}\n padding=\"lg\"\n radius=\"xl\"\n hover\n glow\n className={cx('elb-highlight-card', className)}\n >\n <Eyebrow variant=\"label\">{label}</Eyebrow>\n <h3 className=\"elb-highlight-card__title\">{title}</h3>\n <p className=\"elb-highlight-card__text\">{children}</p>\n {cta && (\n <Button\n {...cta.attributes}\n href={cta.href}\n variant=\"secondary\"\n arrow\n linkComponent={linkComponent}\n className=\"elb-highlight-card__cta\"\n >\n {cta.label}\n </Button>\n )}\n </Card>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { Icon } from '../atoms/Icon';\nimport { cx } from '../cx';\n\nexport interface BrowserBookmark {\n label: string;\n url: string;\n}\n\nexport interface BrowserFrameProps extends HTMLAttributes<HTMLDivElement> {\n /** Shown read-only in the address field. */\n url: string;\n /** A row of links under the address bar; the one whose `url` equals `url` is current. */\n bookmarks?: ReadonlyArray<BrowserBookmark>;\n /** Called with a bookmark's url on its click; without it the bookmarks are disabled. */\n onNavigate?: (url: string) => void;\n /** Adds a reload button. */\n onReload?: () => void;\n /** The caller's controls at the end of the address bar, after reload; a link or button there looks like reload. */\n actions?: ReactNode;\n /** The page: fills the viewport. An `iframe` takes its full size, borderless. */\n children: ReactNode;\n}\n\n/**\n * A browser window around a page, on the site theme. The caller sizes it: give\n * the root a height (and a width where it does not fill its parent) through\n * `className` or `style`; the viewport takes what the bars leave.\n */\nexport function BrowserFrame({\n url,\n bookmarks,\n onNavigate,\n onReload,\n actions,\n children,\n className,\n ...rest\n}: BrowserFrameProps) {\n return (\n <div {...rest} className={cx('elb-browser', className)}>\n <div className=\"elb-browser__bar\">\n <span className=\"elb-browser__dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n <div className=\"elb-browser__address\" title={url}>\n <Icon name=\"lock\" size={14} />\n <span className=\"elb-browser__url\">{url}</span>\n </div>\n {onReload && (\n <button\n type=\"button\"\n className=\"elb-browser__reload\"\n aria-label=\"Reload\"\n onClick={onReload}\n >\n <Icon name=\"reload\" size={16} />\n </button>\n )}\n {actions && <div className=\"elb-browser__actions\">{actions}</div>}\n </div>\n {bookmarks && bookmarks.length > 0 && (\n <nav className=\"elb-browser__bookmarks\" aria-label=\"Bookmarks\">\n {bookmarks.map((bookmark) => {\n const current = bookmark.url === url;\n return (\n <button\n key={bookmark.url}\n type=\"button\"\n className={cx(\n 'elb-browser__bookmark',\n current && 'elb-browser__bookmark--active',\n )}\n aria-current={current ? 'page' : undefined}\n disabled={!onNavigate}\n onClick={() => onNavigate?.(bookmark.url)}\n >\n <Icon name=\"bookmark\" size={14} />\n <span>{bookmark.label}</span>\n </button>\n );\n })}\n </nav>\n )}\n <div className=\"elb-browser__viewport\">{children}</div>\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface QuickstartStep {\n title: string;\n text: string;\n}\n\nexport interface QuickstartStepsProps extends HTMLAttributes<HTMLDivElement> {\n steps: ReadonlyArray<QuickstartStep>;\n /** After the steps, aligned to their start: the link to the full guide. */\n children?: ReactNode;\n}\n\n/** Hand-drawn arrows between the steps, in turn: a wave, then a loop. */\nconst ARROWS = [\n {\n kind: 'wave',\n paths: [\n 'M4 26 C 18 6, 34 6, 40 20 S 58 34, 70 16',\n 'M62 20 L70 16 L69.5 25',\n ],\n },\n {\n kind: 'loop',\n paths: [\n 'M4 28 C 20 30, 26 8, 38 10 C 50 12, 44 28, 36 24 C 28 20, 44 6, 72 14',\n 'M65.7 7.6 L72 14 L63.3 16.2',\n ],\n },\n];\n\nfunction Arrow({ kind, paths }: (typeof ARROWS)[number]) {\n return (\n <li\n className={cx('elb-quickstart__arrow', `elb-quickstart__arrow--${kind}`)}\n aria-hidden=\"true\"\n >\n <svg\n width=\"76\"\n height=\"40\"\n viewBox=\"0 0 76 40\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {paths.map((d) => (\n <path key={d} d={d} />\n ))}\n </svg>\n </li>\n );\n}\n\n/**\n * Numbered steps in a row joined by hand-drawn arrows, a column on narrow\n * screens; the children follow below.\n */\nexport function QuickstartSteps({\n steps,\n children,\n className,\n ...rest\n}: QuickstartStepsProps) {\n return (\n <div {...rest} className={cx('elb-quickstart', className)}>\n <ol className=\"elb-quickstart__steps\">\n {steps.flatMap((step, index) => {\n const item = (\n <li key={step.title} className=\"elb-quickstart__step\">\n <div className=\"elb-quickstart__head\">\n <span className=\"elb-quickstart__num\" aria-hidden=\"true\">\n {index + 1}\n </span>\n <h3 className=\"elb-quickstart__title\">{step.title}</h3>\n </div>\n <p className=\"elb-quickstart__copy\">{step.text}</p>\n </li>\n );\n return index < steps.length - 1\n ? [\n item,\n <Arrow\n key={`arrow-${index}`}\n {...ARROWS[index % ARROWS.length]}\n />,\n ]\n : [item];\n })}\n </ol>\n {children}\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /** `alt` grounds the band in bg-2. */\n tone?: 'default' | 'alt';\n}\n\n/** A page band: section-y padding, a top rule, a container whose children stand heading-gap apart. */\nexport function Section({\n children,\n tone = 'default',\n className,\n ...rest\n}: SectionProps) {\n return (\n <section\n {...rest}\n className={cx(\n 'elb-section',\n tone === 'alt' && 'elb-section--alt',\n className,\n )}\n >\n <div className=\"elb-section__inner\">{children}</div>\n </section>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface CardGridProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** The minimum column width in px; columns auto-fit. */\n min: 280 | 300 | 420 | 440;\n /** `cards` gap space-5; `features` 44px rows and 48px columns. */\n gap?: 'cards' | 'features';\n}\n\n/** An auto-fit grid of cards or feature items. */\nexport function CardGrid({\n children,\n min,\n gap = 'cards',\n className,\n ...rest\n}: CardGridProps) {\n return (\n <div\n {...rest}\n className={cx(\n 'elb-card-grid',\n `elb-card-grid--min-${min}`,\n gap === 'features' && 'elb-card-grid--features',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface SplitProps extends HTMLAttributes<HTMLDivElement> {\n start: ReactNode;\n end: ReactNode;\n /** `even`: two equal columns from 420px; `aside`: a narrow heading column beside a wide one. */\n variant?: 'even' | 'aside';\n}\n\n/** Two columns that stack when narrow. */\nexport function Split({\n start,\n end,\n variant = 'even',\n className,\n ...rest\n}: SplitProps) {\n return (\n <div\n {...rest}\n className={cx(\n 'elb-split',\n variant === 'aside' && 'elb-split--aside',\n className,\n )}\n >\n <div className=\"elb-split__start\">{start}</div>\n <div className=\"elb-split__end\">{end}</div>\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\n\nexport interface ClusterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** `actions` 12px apart; `links` 8px rows and 24px columns. */\n gap?: 'actions' | 'links';\n align?: 'start' | 'center';\n /**\n * Set apart from the content above by an extra heading gap, for a call to\n * action below a section's content.\n */\n separated?: boolean;\n}\n\n/** A wrapping row of buttons or links. */\nexport function Cluster({\n children,\n gap = 'actions',\n align = 'start',\n separated = false,\n className,\n ...rest\n}: ClusterProps) {\n return (\n <div\n {...rest}\n className={cx(\n 'elb-cluster',\n gap === 'links' && 'elb-cluster--links',\n align === 'center' && 'elb-cluster--center',\n separated && 'elb-cluster--separated',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../cx';\nimport { SectionHeading } from '../molecules/SectionHeading';\n\nexport interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n eyebrow: ReactNode;\n title: ReactNode;\n /** A phrase after the title in primary. */\n highlight?: ReactNode;\n lead: ReactNode;\n /** The call-to-action row. */\n actions: ReactNode;\n /** A short proof line below the actions. */\n proof?: ReactNode;\n /** The demo below, left-aligned. */\n children?: ReactNode;\n}\n\n/** The page's opening band: centred heading, actions, proof and a demo, on a glow. */\nexport function Hero({\n eyebrow,\n title,\n highlight,\n lead,\n actions,\n proof,\n children,\n className,\n ...rest\n}: HeroProps) {\n return (\n <section {...rest} className={cx('elb-hero', className)}>\n <div className=\"elb-hero__inner\">\n <SectionHeading\n level={1}\n eyebrow={eyebrow}\n title={title}\n highlight={highlight}\n lead={lead}\n />\n <div className=\"elb-hero__actions\">{actions}</div>\n {proof !== undefined && <div className=\"elb-hero__proof\">{proof}</div>}\n {children !== undefined && (\n <div className=\"elb-hero__demo\">{children}</div>\n )}\n </div>\n </section>\n );\n}\n","import React, { useState, type HTMLAttributes } from 'react';\nimport { cx } from '../cx';\nimport { MAPPING_CAPTION, MAPPING_EVENTS } from './data/destination-mapping';\nimport { CodeTokens } from './parts/CodeTokens';\nimport {\n formatCall,\n formatElb,\n formatRule,\n tokenizeCode,\n} from './parts/format';\nimport { VizFrame } from './parts/VizFrame';\n\nexport interface DestinationMappingVizProps extends HTMLAttributes<HTMLDivElement> {\n /** The event chosen first, on the server too. */\n initialEvent?: 0 | 1 | 2;\n /** Text below the cards; `''` hides it. */\n caption?: string;\n}\n\n/**\n * Mapping demo: pick one `elb()` event and see the mapping rule and the call it\n * produces in GA4, Meta Pixel, TikTok Pixel and Amplitude. The calls are what\n * the real destinations send for these rules; a fidelity test holds them to it.\n */\nexport function DestinationMappingViz({\n initialEvent = 0,\n caption = MAPPING_CAPTION,\n ...rest\n}: DestinationMappingVizProps) {\n const [index, setIndex] = useState<number>(initialEvent);\n const event = MAPPING_EVENTS[index];\n const name = `${event.entity} ${event.action}`;\n return (\n <VizFrame {...rest} variant=\"mapping\">\n <div className=\"elb-viz-mapping\">\n <div className=\"elb-viz-mapping__pick\">\n <div className=\"elb-viz-mapping__label\">Pick an event</div>\n <div className=\"elb-viz-mapping__chips\">\n {MAPPING_EVENTS.map((item, position) => (\n <button\n key={`${item.entity} ${item.action}`}\n type=\"button\"\n aria-label={`${item.entity} ${item.action}`}\n aria-pressed={position === index}\n className={cx(\n 'elb-viz-mapping__chip',\n position === index && 'elb-viz-mapping__chip--active',\n )}\n onClick={() => setIndex(position)}\n >\n <span className=\"elb-viz-mapping__chip-entity\">\n {item.entity}\n </span>\n <span className=\"elb-viz-mapping__chip-action\">\n {item.action}\n </span>\n </button>\n ))}\n </div>\n </div>\n <div className=\"elb-viz-mapping__event\">\n <CodeTokens tokens={tokenizeCode(formatElb(event), name)} active />\n </div>\n <div className=\"elb-viz-mapping__body\">\n <div className=\"elb-viz-mapping__comment\">\n {'// same event, four destinations, zero app code touched'}\n </div>\n <div className=\"elb-viz-mapping__cards\">\n {event.destinations.map((destination) => (\n <div key={destination.id} className=\"elb-viz-mapping__card\">\n <span className=\"elb-viz-mapping__name\">\n {destination.label}\n </span>\n <div className=\"elb-viz-mapping__row\">\n <span className=\"elb-viz-mapping__tag\">mapping</span>\n <span className=\"elb-viz-mapping__rule\">\n <CodeTokens\n tokens={tokenizeCode(\n formatRule(\n event.entity,\n event.action,\n destination.rule,\n ),\n destination.rule.name,\n )}\n active\n />\n </span>\n </div>\n <div className=\"elb-viz-mapping__row elb-viz-mapping__row--sends\">\n <span className=\"elb-viz-mapping__tag\">sends</span>\n <div className=\"elb-viz-mapping__calls\">\n {destination.calls\n .flatMap((call) => formatCall(call))\n .map((line, position) => (\n <div key={position} className=\"elb-viz-mapping__line\">\n <CodeTokens\n tokens={tokenizeCode(line, destination.rule.name)}\n active\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n {caption !== '' && (\n <p className=\"elb-viz-mapping__caption\">{caption}</p>\n )}\n </div>\n </VizFrame>\n );\n}\n","/**\n * The destination mapping demo's script: three events, each through the real\n * mapping rules of four web destinations, and the vendor calls those produce.\n * A fidelity test runs every rule through the real destination and compares\n * the calls, so what the demo prints is what walkerOS sends. This file imports\n * nothing: the website's test loads it by path.\n */\n\n/** A mapping value in the shape walkerOS reads (Mapping.Value). */\nexport type MappingValue = string | MappingValueConfig;\n\nexport interface MappingValueConfig {\n key?: string;\n value?: string | number | boolean;\n map?: { [key: string]: MappingValue };\n loop?: [MappingValue, MappingValue];\n set?: MappingValue[];\n}\n\n/** A destination's rule for one event (Mapping.Rule). */\nexport interface MappingRule {\n name?: string;\n data?: MappingValue;\n silent?: boolean;\n settings?: { revenue?: MappingValue };\n}\n\n/** One argument a vendor function received. */\nexport type CallArg = string | number | boolean | CallArg[] | CallObject;\n\nexport interface CallObject {\n [key: string]: CallArg;\n}\n\n/** One vendor call: the function's name, then its arguments. */\nexport type CallRecord = [string, ...CallArg[]];\n\nexport type DestinationId = 'ga4' | 'meta' | 'tiktok' | 'amplitude';\n\nexport interface MappingDestination {\n id: DestinationId;\n label: string;\n rule: MappingRule;\n calls: CallRecord[];\n}\n\nexport interface MappingEntity {\n entity: string;\n data: { [key: string]: string | number };\n}\n\nexport interface MappingDemoEvent {\n entity: string;\n action: string;\n data: { [key: string]: string | number };\n nested?: MappingEntity[];\n destinations: MappingDestination[];\n}\n\n/** Stands for a value walkerOS generates per event (its id); printed as '…'. */\nexport const GENERATED_ID = '…';\n\nexport const MAPPING_CAPTION =\n '50+ destination packages ship with the project. Removing GA4 or adding a new pixel is a block in this file, not a re-instrumentation project across every page.';\n\nconst GA4_MEASUREMENT_ID = 'G-XXXXXXXXXX';\n\n/** Each destination's settings, in its package's own shape. */\nexport const DESTINATION_SETTINGS: Readonly<Record<DestinationId, CallObject>> =\n {\n ga4: { ga4: { measurementId: GA4_MEASUREMENT_ID } },\n meta: { pixelId: '1234567890' },\n tiktok: { apiKey: 'C0D3T1KT0K' },\n amplitude: { apiKey: 'amplitude-api-key' },\n };\n\nexport const MAPPING_EVENTS: MappingDemoEvent[] = [\n {\n entity: 'product',\n action: 'view',\n data: { id: 'ers', price: 420, currency: 'EUR' },\n destinations: [\n {\n id: 'ga4',\n label: 'GA4',\n rule: {\n name: 'view_item',\n data: {\n map: {\n currency: 'data.currency',\n value: 'data.price',\n items: { loop: ['this', { map: { item_id: 'data.id' } }] },\n },\n },\n },\n calls: [\n [\n 'gtag',\n 'event',\n 'view_item',\n {\n currency: 'EUR',\n value: 420,\n items: [{ item_id: 'ers' }],\n send_to: GA4_MEASUREMENT_ID,\n },\n ],\n ],\n },\n {\n id: 'meta',\n label: 'Meta Pixel',\n rule: {\n name: 'ViewContent',\n data: {\n map: {\n value: 'data.price',\n currency: 'data.currency',\n contents: {\n set: [\n {\n map: {\n id: 'data.id',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n content_type: { value: 'product' },\n },\n },\n },\n calls: [\n [\n 'fbq',\n 'track',\n 'ViewContent',\n {\n value: 420,\n currency: 'EUR',\n contents: [{ id: 'ers', quantity: 1 }],\n content_type: 'product',\n },\n { eventID: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'tiktok',\n label: 'TikTok Pixel',\n rule: {\n name: 'ViewContent',\n data: {\n map: {\n content_id: 'data.id',\n content_type: { value: 'product' },\n value: 'data.price',\n currency: 'data.currency',\n },\n },\n },\n calls: [\n [\n 'ttq.track',\n 'ViewContent',\n {\n content_id: 'ers',\n content_type: 'product',\n value: 420,\n currency: 'EUR',\n },\n { event_id: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'amplitude',\n label: 'Amplitude',\n rule: {\n name: 'Product Viewed',\n data: {\n map: {\n product_id: 'data.id',\n price: 'data.price',\n currency: 'data.currency',\n },\n },\n },\n calls: [\n [\n 'amplitude.track',\n 'Product Viewed',\n { product_id: 'ers', price: 420, currency: 'EUR' },\n ],\n ],\n },\n ],\n },\n {\n entity: 'lead',\n action: 'submit',\n data: { type: 'demo', value: 2500, currency: 'EUR' },\n destinations: [\n {\n id: 'ga4',\n label: 'GA4',\n rule: {\n name: 'generate_lead',\n data: { map: { value: 'data.value', currency: 'data.currency' } },\n },\n calls: [\n [\n 'gtag',\n 'event',\n 'generate_lead',\n { value: 2500, currency: 'EUR', send_to: GA4_MEASUREMENT_ID },\n ],\n ],\n },\n {\n id: 'meta',\n label: 'Meta Pixel',\n rule: {\n name: 'Lead',\n data: { map: { value: 'data.value', currency: 'data.currency' } },\n },\n calls: [\n [\n 'fbq',\n 'track',\n 'Lead',\n { value: 2500, currency: 'EUR' },\n { eventID: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'tiktok',\n label: 'TikTok Pixel',\n rule: {\n name: 'Contact',\n data: { map: { value: 'data.value', currency: 'data.currency' } },\n },\n calls: [\n [\n 'ttq.track',\n 'Contact',\n { value: 2500, currency: 'EUR' },\n { event_id: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'amplitude',\n label: 'Amplitude',\n rule: {\n name: 'Lead Submitted',\n data: {\n map: {\n lead_type: 'data.type',\n value: 'data.value',\n currency: 'data.currency',\n },\n },\n },\n calls: [\n [\n 'amplitude.track',\n 'Lead Submitted',\n { lead_type: 'demo', value: 2500, currency: 'EUR' },\n ],\n ],\n },\n ],\n },\n {\n entity: 'order',\n action: 'complete',\n data: { id: '0rd3r1d', value: 462, currency: 'EUR' },\n nested: [\n { entity: 'product', data: { id: 'ers', price: 420, quantity: 1 } },\n ],\n destinations: [\n {\n id: 'ga4',\n label: 'GA4',\n rule: {\n name: 'purchase',\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.value',\n currency: 'data.currency',\n items: {\n loop: [\n 'nested',\n {\n map: {\n item_id: 'data.id',\n price: 'data.price',\n quantity: 'data.quantity',\n },\n },\n ],\n },\n },\n },\n },\n calls: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n transaction_id: '0rd3r1d',\n value: 462,\n currency: 'EUR',\n items: [{ item_id: 'ers', price: 420, quantity: 1 }],\n send_to: GA4_MEASUREMENT_ID,\n },\n ],\n ],\n },\n {\n id: 'meta',\n label: 'Meta Pixel',\n rule: {\n name: 'Purchase',\n data: {\n map: {\n value: 'data.value',\n currency: 'data.currency',\n contents: {\n loop: [\n 'nested',\n { map: { id: 'data.id', quantity: 'data.quantity' } },\n ],\n },\n content_type: { value: 'product' },\n },\n },\n },\n calls: [\n [\n 'fbq',\n 'track',\n 'Purchase',\n {\n value: 462,\n currency: 'EUR',\n contents: [{ id: 'ers', quantity: 1 }],\n content_type: 'product',\n },\n { eventID: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'tiktok',\n label: 'TikTok Pixel',\n rule: {\n name: 'CompletePayment',\n data: {\n map: {\n order_id: 'data.id',\n value: 'data.value',\n currency: 'data.currency',\n contents: {\n loop: [\n 'nested',\n {\n map: {\n content_id: 'data.id',\n quantity: 'data.quantity',\n price: 'data.price',\n },\n },\n ],\n },\n content_type: { value: 'product' },\n },\n },\n },\n calls: [\n [\n 'ttq.track',\n 'CompletePayment',\n {\n order_id: '0rd3r1d',\n value: 462,\n currency: 'EUR',\n contents: [{ content_id: 'ers', quantity: 1, price: 420 }],\n content_type: 'product',\n },\n { event_id: GENERATED_ID },\n ],\n ],\n },\n {\n id: 'amplitude',\n label: 'Amplitude',\n rule: {\n silent: true,\n settings: {\n revenue: {\n loop: [\n 'nested',\n {\n map: {\n productId: 'data.id',\n price: 'data.price',\n quantity: 'data.quantity',\n revenueType: { value: 'purchase' },\n currency: { value: 'EUR' },\n },\n },\n ],\n },\n },\n },\n calls: [\n [\n 'amplitude.revenue',\n {\n productId: 'ers',\n price: 420,\n quantity: 1,\n revenueType: 'purchase',\n currency: 'EUR',\n },\n ],\n ],\n },\n ],\n },\n];\n","import React, { type ReactNode } from 'react';\nimport { cx } from '../../cx';\nimport type { CodeToken, EventPart } from './tokens';\n\n/** Code runs in their colours; a marked run tints only while `active`. */\nexport function CodeTokens({\n tokens,\n active = false,\n}: {\n tokens: readonly CodeToken[];\n active?: boolean;\n}) {\n return (\n <>\n {tokens.map((token, index) => (\n <span\n key={index}\n className={cx(\n 'elb-viz-tok',\n `elb-viz-tok--${token.kind}`,\n active && token.mark && `elb-viz-tok--mark-${token.mark}`,\n )}\n >\n {token.t}\n </span>\n ))}\n </>\n );\n}\n\nexport interface CodeLineProps {\n number?: number;\n /** Colours the left bar in an event part's colour. */\n bar?: EventPart;\n className?: string;\n children: ReactNode;\n}\n\n/** One code line: a bar, an optional line number, then the code. */\nexport function CodeLine({ number, bar, className, children }: CodeLineProps) {\n return (\n <div className={cx('elb-viz-line', className)}>\n <span\n className={cx('elb-viz-line__bar', bar && `elb-viz-line__bar--${bar}`)}\n aria-hidden=\"true\"\n />\n {number !== undefined && (\n <span className=\"elb-viz-line__number\">{number}</span>\n )}\n <span className=\"elb-viz-line__code\">{children}</span>\n </div>\n );\n}\n","/** The colour role of one run of code in a demo. */\nexport type TokenKind =\n | 'tag'\n | 'attr'\n | 'punct'\n | 'str'\n | 'text'\n | 'kw'\n | 'num'\n | 'fn'\n | 'key'\n | 'value';\n\n/** The five parts of a walkerOS event; each has its own colour. */\nexport type EventPart =\n | 'entity'\n | 'action'\n | 'property'\n | 'context'\n | 'globals';\n\n/** One run of code text; `mark` tints it in an event part's colour. */\nexport interface CodeToken {\n readonly t: string;\n readonly kind: TokenKind;\n readonly mark?: EventPart;\n}\n\nexport function tok(t: string, kind: TokenKind, mark?: EventPart): CodeToken {\n return mark ? { t, kind, mark } : { t, kind };\n}\n\nexport function lineText(tokens: readonly CodeToken[]): string {\n return tokens.map((token) => token.t).join('');\n}\n\nexport function typedLength(tokens: readonly CodeToken[]): number {\n return tokens.reduce((length, token) => length + token.t.length, 0);\n}\n\n/** The first `n` characters of `tokens`, still as tokens: a typing effect. */\nexport function truncate(tokens: readonly CodeToken[], n: number): CodeToken[] {\n const out: CodeToken[] = [];\n let left = n;\n for (const token of tokens) {\n if (left <= 0) break;\n const t = token.t.slice(0, left);\n out.push({ ...token, t });\n left -= t.length;\n }\n return out;\n}\n","import { tok, type CodeToken } from './tokens';\n\n/** A value printed as JavaScript: a vendor call's argument or an event field. */\nexport type Literal =\n | string\n | number\n | boolean\n | null\n | Literal[]\n | { [key: string]: Literal };\n\n/** A recorded vendor call: the function's name, then its arguments. */\nexport type CallRecord = readonly [string, ...Literal[]];\n\n/** The parts of a mapping rule the demo names; data and settings bodies are elided. */\nexport interface RuleShape {\n readonly name?: string;\n readonly silent?: boolean;\n readonly data?: unknown;\n readonly settings?: object;\n}\n\n/** An event as `elb()` receives it. */\nexport interface ElbShape {\n readonly entity: string;\n readonly action: string;\n readonly data: { readonly [key: string]: Literal };\n readonly nested?: ReadonlyArray<{ readonly entity: string }>;\n}\n\nconst ELIDED = '{…}';\n\nfunction isRecord(value: Literal): value is { [key: string]: Literal } {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** `value` as a JavaScript literal: single-quoted strings, `{ key: value }` objects. */\nexport function literal(value: Literal): string {\n if (typeof value === 'string')\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\n if (typeof value !== 'object' || value === null) return String(value);\n if (Array.isArray(value)) return `[${value.map(literal).join(', ')}]`;\n const entries = Object.entries(value);\n return entries.length === 0\n ? '{}'\n : `{ ${entries.map(([key, item]) => `${key}: ${literal(item)}`).join(', ')} }`;\n}\n\n/** A rule as the demo's mapping line: name and flags shown, bodies elided. */\nexport function formatRule(\n entity: string,\n action: string,\n rule: RuleShape,\n): string {\n const fields: string[] = [];\n if (rule.name !== undefined) fields.push(`\"name\": \"${rule.name}\"`);\n if (rule.silent) fields.push('\"silent\": true');\n if (rule.data !== undefined) fields.push(`\"data\": ${ELIDED}`);\n if (rule.settings !== undefined) {\n const settings = Object.keys(rule.settings).map(\n (key) => `\"${key}\": ${ELIDED}`,\n );\n fields.push(`\"settings\": { ${settings.join(', ')} }`);\n }\n return `\"${entity}\": { \"${action}\": { ${fields.join(', ')} } }`;\n}\n\n/** A recorded call as JavaScript lines; the first object argument is expanded. */\nexport function formatCall(record: CallRecord): string[] {\n const [fn, ...args] = record;\n const at = args.findIndex(isRecord);\n const params = args[at];\n if (at < 0 || params === undefined || !isRecord(params))\n return [`${fn}(${args.map(literal).join(', ')})`];\n const fields = Object.entries(params);\n if (fn === 'amplitude.revenue') {\n if (fields.length === 0) return ['amplitude.revenue(new Revenue())'];\n return [\n 'amplitude.revenue(new Revenue()',\n ...fields.map(\n ([key, value], index) =>\n ` .set${key.charAt(0).toUpperCase()}${key.slice(1)}(${literal(value)})${\n index === fields.length - 1 ? ')' : ''\n }`,\n ),\n ];\n }\n const before = args.slice(0, at).map(literal);\n const after = args.slice(at + 1).map(literal);\n return [\n `${fn}(${[...before, '{'].join(', ')}`,\n ...fields.map(([key, value]) => ` ${key}: ${literal(value)},`),\n `}${after.map((arg) => `, ${arg}`).join('')})`,\n ];\n}\n\n/** The `elb()` call that sends `event`; nested entities are abbreviated. */\nexport function formatElb(event: ElbShape): string {\n const name = literal(`${event.entity} ${event.action}`);\n const data = literal(event.data);\n if (!event.nested?.length) return `elb(${name}, ${data})`;\n const nested = event.nested.map(\n (entity) => `{ entity: ${literal(entity.entity)}, … }`,\n );\n return `elb({ name: ${name}, data: ${data}, nested: [${nested.join(', ')}] })`;\n}\n\nconst TOKEN = /\"[^\"]*\"|'[^']*'|\\d+(?:\\.\\d+)?|[A-Za-z_]\\w*|\\s+|./g;\nconst CALLS =\n /^(?:gtag|fbq|elb|ttq|track|amplitude|revenue|Revenue|set[A-Z]\\w*)$/;\n\n/** One printed line as coloured tokens; strings equal to `highlight` are marked. */\nexport function tokenizeCode(line: string, highlight?: string): CodeToken[] {\n const tokens: CodeToken[] = [];\n for (const match of line.matchAll(TOKEN)) {\n const t = match[0];\n const isKey = /^\\s*:/.test(line.slice((match.index ?? 0) + t.length));\n if (t.startsWith('\"') || t.startsWith(\"'\")) {\n const marked = highlight !== undefined && t.slice(1, -1) === highlight;\n tokens.push(\n tok(t, isKey ? 'key' : 'value', marked ? 'entity' : undefined),\n );\n } else if (/^\\d/.test(t) || t === 'true' || t === 'false') {\n tokens.push(tok(t, 'num'));\n } else if (CALLS.test(t)) {\n tokens.push(tok(t, 'fn'));\n } else if (/^[A-Za-z_]/.test(t)) {\n tokens.push(tok(t, isKey ? 'key' : 'text'));\n } else if (/^\\s+$/.test(t)) {\n tokens.push(tok(t, 'text'));\n } else {\n tokens.push(tok(t, 'punct'));\n }\n }\n return tokens;\n}\n","import React, { type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../cx';\n\nexport interface VizFrameProps extends HTMLAttributes<HTMLDivElement> {\n variant: 'hero' | 'teaser' | 'mapping';\n children: ReactNode;\n}\n\n/**\n * A demo's dark island: viz colours in both themes, and the container its 640px\n * breakpoint queries (the body inside, since a container cannot query itself).\n */\nexport function VizFrame({\n variant,\n children,\n className,\n ...rest\n}: VizFrameProps) {\n return (\n <div\n {...rest}\n data-theme=\"dark\"\n className={cx('elb-viz', `elb-viz--${variant}`, className)}\n >\n <div className=\"elb-viz__body\">{children}</div>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState, type HTMLAttributes } from 'react';\nimport { cx } from '../cx';\nimport { HERO_START, heroFrame } from './data/hero';\nimport { CodeLine, CodeTokens } from './parts/CodeTokens';\nimport { EventsTable } from './parts/EventsTable';\nimport { useInView, useReducedMotion } from './parts/hooks';\nimport { Pill } from './parts/Pill';\nimport { vizStyle } from './parts/style';\nimport { Thumb } from './parts/Thumb';\nimport { VizFrame } from './parts/VizFrame';\n\nexport interface HeroTaggingVizProps extends HTMLAttributes<HTMLDivElement> {\n playing?: boolean;\n speed?: number;\n /** The loop time (ms) of the first frame, on the server too. */\n startAt?: number;\n}\n\n/** The longest step one animation frame may take, so a hidden tab does not jump. */\nconst MAX_STEP = 64;\n\n/**\n * Hero demo: walkerOS attributes are typed into an article teaser, the card\n * lights up as each part is tagged, a cursor clicks it, and the events land in\n * a live table. Animates only while visible; still with reduced motion.\n */\nexport function HeroTaggingViz({\n playing = true,\n speed = 1,\n startAt = HERO_START,\n ...rest\n}: HeroTaggingVizProps) {\n const paneRef = useRef<HTMLDivElement>(null);\n const inView = useInView(paneRef, 0);\n const reduced = useReducedMotion();\n const [time, setTime] = useState(startAt);\n const animate = playing && inView && !reduced;\n\n useEffect(() => {\n if (!animate) return undefined;\n let frame = 0;\n let last = performance.now();\n const step = (now: number) => {\n const elapsed = Math.min(MAX_STEP, now - last);\n last = now;\n setTime((value) => value + elapsed * speed);\n frame = requestAnimationFrame(step);\n };\n frame = requestAnimationFrame(step);\n return () => cancelAnimationFrame(frame);\n }, [animate, speed]);\n\n const { article, lines, fade, caretOn, card, cursor, rows } = heroFrame(time);\n return (\n <VizFrame {...rest} variant=\"hero\">\n <div className=\"elb-viz-hero\">\n <div ref={paneRef} className=\"elb-viz-hero__pane\">\n <div className=\"elb-viz-hero__bar\">\n <span className=\"elb-viz-hero__dots\" aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n <span className=\"elb-viz-hero__file\">ArticleTeaser.html</span>\n </div>\n <div\n className=\"elb-viz-hero__code\"\n style={vizStyle({ '--elb-viz-fade': fade })}\n >\n {lines.map((line) => (\n <CodeLine\n key={line.id}\n number={line.n}\n bar={line.on ? 'entity' : undefined}\n className={cx(\n 'elb-viz-hero__line',\n line.on && 'elb-viz-hero__line--on',\n )}\n >\n {line.caret === null ? (\n <CodeTokens tokens={line.tokens} />\n ) : (\n <>\n <CodeTokens tokens={line.tokens.slice(0, line.caret)} />\n <span\n className=\"elb-viz-caret\"\n style={vizStyle({ '--elb-viz-caret': caretOn ? 1 : 0 })}\n />\n <CodeTokens tokens={line.tokens.slice(line.caret)} />\n </>\n )}\n </CodeLine>\n ))}\n </div>\n <div className=\"elb-viz-hero__stage\">\n <div\n className={cx(\n 'elb-viz-hero__card',\n card.entity && 'elb-viz-hero__card--tagged',\n )}\n style={vizStyle({\n '--elb-viz-card-opacity': card.opacity,\n '--elb-viz-card-offset': card.offset,\n })}\n >\n <div className=\"elb-viz-hero__pills\">\n {card.entity && <Pill part=\"entity\">article</Pill>}\n {card.impression && <Pill part=\"action\">impression</Pill>}\n </div>\n <div className=\"elb-viz-hero__thumb\">\n <Thumb kind={article.thumb} />\n </div>\n <div className=\"elb-viz-hero__text\">\n <span\n className={cx(\n 'elb-viz-hero__kicker',\n card.category && 'elb-viz-hero__kicker--on',\n )}\n >\n {article.kicker}\n </span>\n <span className=\"elb-viz-hero__title\">\n <span\n className={cx(\n 'elb-viz-hero__mark',\n card.title && 'elb-viz-hero__mark--on',\n )}\n >\n {article.title}\n </span>\n </span>\n <div className=\"elb-viz-hero__foot\">\n <span\n className={cx(\n 'elb-viz-hero__link',\n card.action && 'elb-viz-hero__link--on',\n )}\n >\n Open →\n <span\n className=\"elb-viz-hero__cursor\"\n aria-hidden=\"true\"\n style={vizStyle({\n '--elb-viz-cursor-x': cursor.x,\n '--elb-viz-cursor-y': cursor.y,\n '--elb-viz-cursor-opacity': cursor.opacity,\n '--elb-viz-ring-scale': cursor.ring,\n '--elb-viz-ring-opacity': cursor.ringOpacity,\n '--elb-viz-press': cursor.pressed ? 0.8 : 1,\n })}\n >\n <span className=\"elb-viz-hero__ring\" />\n <span className=\"elb-viz-hero__pointer\" />\n </span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <EventsTable rows={rows} />\n </div>\n </VizFrame>\n );\n}\n","/** `x` limited to [0, 1]. */\nexport function clamp(x: number): number {\n return Math.max(0, Math.min(1, x));\n}\n\n/** Cubic ease in and out on [0, 1]. */\nexport function ease(x: number): number {\n return x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2;\n}\n","/**\n * The hero demo's script: walkerOS attributes typed into an article teaser, the\n * card lighting up per tagged part, a click, and the events in a live table.\n * heroMarkup() is the tagged markup the demo ends on, and heroEvents() what\n * walkerOS makes of it; a fidelity test runs the one through walkerOS and\n * compares with the other. Imports only package-free demo parts.\n */\nimport { clamp, ease } from '../parts/timeline';\nimport {\n lineText,\n tok,\n truncate,\n typedLength,\n type CodeToken,\n} from '../parts/tokens';\nimport type { ThumbKind } from '../parts/Thumb';\n\nexport interface HeroArticle {\n readonly kicker: string;\n readonly title: string;\n readonly thumb: ThumbKind;\n}\n\nexport const HERO_ARTICLES: readonly HeroArticle[] = [\n { kicker: 'Tech', title: 'Return of the Bug', thumb: 'bug' },\n { kicker: 'Tech', title: 'The quiet return of RSS', thumb: 'tech' },\n { kicker: 'Food', title: 'Why sourdough came back', thumb: 'food' },\n];\n\n/** The first frame, on the server too: the first article tagged, both events in the table. */\nexport const HERO_START = 9000;\n\n/** One article's loop, in ms. */\nexport const HERO_LOOP = 11500;\n\n/** The loop's cues, in ms from the start of an article's loop. */\nconst CUE = {\n slideInStart: 0,\n slideInEnd: 500,\n entityStart: 900,\n entityEnd: 1500,\n impressionStart: 1800,\n impressionEnd: 2600,\n categoryStart: 2900,\n categoryEnd: 3600,\n titleStart: 3900,\n titleEnd: 4700,\n actionStart: 5000,\n actionEnd: 5800,\n impressionEvent: 6200,\n moveStart: 6900,\n moveEnd: 7700,\n click: 7850,\n openEvent: 8000,\n fadeOut: 10600,\n slideOutStart: 10800,\n slideOutEnd: 11400,\n};\n\nconst MAX_ROWS = 24;\nconst PAST = 10000;\n\nconst ENTITY = [\n tok('data-elb', 'attr'),\n tok('=', 'punct'),\n tok('\"article\"', 'str'),\n];\nconst IMPRESSION = [\n tok('data-elbaction', 'attr'),\n tok('=', 'punct'),\n tok('\"impression\"', 'str'),\n];\nconst CATEGORY = [\n tok(' ', 'punct'),\n tok('data-elb-article', 'attr'),\n tok('=', 'punct'),\n tok('\"category:#innerText\"', 'str'),\n];\nconst TITLE = [\n tok(' ', 'punct'),\n tok('data-elb-article', 'attr'),\n tok('=', 'punct'),\n tok('\"title:#innerText\"', 'str'),\n];\nconst ACTION = [\n tok(' ', 'punct'),\n tok('data-elbaction', 'attr'),\n tok('=', 'punct'),\n tok('\"click:open\"', 'str'),\n];\n\ntype Slot = 'entity' | 'impression' | 'category' | 'title' | 'action';\n\nconst TYPING: ReadonlyArray<readonly [number, number]> = [\n [CUE.entityStart, CUE.entityEnd],\n [CUE.impressionStart, CUE.impressionEnd],\n [CUE.categoryStart, CUE.categoryEnd],\n [CUE.titleStart, CUE.titleEnd],\n [CUE.actionStart, CUE.actionEnd],\n];\n\nexport interface HeroLine {\n readonly id: string;\n readonly n: number;\n readonly tokens: readonly CodeToken[];\n readonly on: boolean;\n /** How many tokens stand before the caret; null without a caret. */\n readonly caret: number | null;\n}\n\nexport interface HeroEvent {\n readonly name: string;\n readonly data: Readonly<Record<string, string>>;\n}\n\nexport interface HeroRow extends HeroEvent {\n readonly key: string;\n readonly age: number;\n}\n\nexport interface HeroFrame {\n readonly article: HeroArticle;\n readonly lines: readonly HeroLine[];\n readonly fade: number;\n readonly caretOn: boolean;\n readonly card: {\n readonly opacity: number;\n readonly offset: number;\n readonly entity: boolean;\n readonly impression: boolean;\n readonly category: boolean;\n readonly title: boolean;\n readonly action: boolean;\n };\n readonly cursor: {\n readonly x: number;\n readonly y: number;\n readonly opacity: number;\n readonly ring: number;\n readonly ringOpacity: number;\n readonly pressed: boolean;\n };\n readonly rows: readonly HeroRow[];\n}\n\nfunction articleAt(loop: number): HeroArticle {\n return HERO_ARTICLES[loop % HERO_ARTICLES.length];\n}\n\nfunction caretSlot(ph: number): Slot | null {\n if (ph >= CUE.entityStart - 400 && ph < CUE.impressionStart - 300)\n return 'entity';\n if (ph >= CUE.impressionStart - 300 && ph < CUE.categoryStart - 100)\n return 'impression';\n if (ph >= CUE.categoryStart - 100 && ph < CUE.titleStart - 100)\n return 'category';\n if (ph >= CUE.titleStart - 100 && ph < CUE.actionStart - 100) return 'title';\n if (ph >= CUE.actionStart - 100 && ph < CUE.moveStart) return 'action';\n return null;\n}\n\nfunction typed(\n tokens: readonly CodeToken[],\n start: number,\n end: number,\n ph: number,\n): CodeToken[] {\n return truncate(\n tokens,\n Math.round(clamp((ph - start) / (end - start)) * typedLength(tokens)),\n );\n}\n\n/** The code pane's lines at phase `ph` of an article's loop. */\nfunction heroLines(article: HeroArticle, ph: number): HeroLine[] {\n const slot = caretSlot(ph);\n const indent = tok(' ', 'punct');\n const entity = typed(ENTITY, CUE.entityStart, CUE.entityEnd, ph);\n const impression = typed(\n IMPRESSION,\n CUE.impressionStart,\n CUE.impressionEnd,\n ph,\n );\n const category = typed(CATEGORY, CUE.categoryStart, CUE.categoryEnd, ph);\n const title = typed(TITLE, CUE.titleStart, CUE.titleEnd, ph);\n const action = typed(ACTION, CUE.actionStart, CUE.actionEnd, ph);\n const lines: Array<Omit<HeroLine, 'n'> | null> = [\n {\n id: 'open',\n tokens: [\n tok('<article', 'tag'),\n tok(' ', 'punct'),\n tok('class', 'attr'),\n tok('=', 'punct'),\n tok('\"teaser\"', 'str'),\n ],\n on: false,\n caret: null,\n },\n ph >= CUE.entityStart - 400\n ? {\n id: 'entity',\n tokens: [indent, ...entity],\n on: true,\n caret: slot === 'entity' ? 1 + entity.length : null,\n }\n : null,\n ph >= CUE.impressionStart - 300\n ? {\n id: 'impression',\n tokens: [indent, ...impression],\n on: true,\n caret: slot === 'impression' ? 1 + impression.length : null,\n }\n : null,\n { id: 'close', tokens: [tok('>', 'tag')], on: false, caret: null },\n {\n id: 'image',\n tokens: [\n indent,\n tok('<img', 'tag'),\n tok(' ', 'punct'),\n tok('src', 'attr'),\n tok('=', 'punct'),\n tok(`\"/img/${article.thumb}.jpg\"`, 'str'),\n tok(' ', 'punct'),\n tok('alt', 'attr'),\n tok('=', 'punct'),\n tok('\"\"', 'str'),\n tok(' />', 'tag'),\n ],\n on: false,\n caret: null,\n },\n {\n id: 'category',\n tokens: [\n indent,\n tok('<span', 'tag'),\n tok(' ', 'punct'),\n tok('class', 'attr'),\n tok('=', 'punct'),\n tok('\"kicker\"', 'str'),\n ...category,\n tok('>', 'tag'),\n tok(article.kicker, 'text'),\n tok('</span>', 'tag'),\n ],\n on: ph >= CUE.categoryStart - 100,\n caret: slot === 'category' ? 6 + category.length : null,\n },\n {\n id: 'title',\n tokens: [\n indent,\n tok('<h3', 'tag'),\n ...title,\n tok('>', 'tag'),\n tok(article.title, 'text'),\n tok('</h3>', 'tag'),\n ],\n on: ph >= CUE.titleStart - 100,\n caret: slot === 'title' ? 2 + title.length : null,\n },\n {\n id: 'action',\n tokens: [\n indent,\n tok('<a', 'tag'),\n ...action,\n tok('>', 'tag'),\n tok('Open →', 'text'),\n tok('</a>', 'tag'),\n ],\n on: ph >= CUE.actionStart - 100,\n caret: slot === 'action' ? 2 + action.length : null,\n },\n { id: 'end', tokens: [tok('</article>', 'tag')], on: false, caret: null },\n ];\n return lines\n .filter((line): line is Omit<HeroLine, 'n'> => line !== null)\n .map((line, index) => ({ ...line, n: index + 1 }));\n}\n\n/** What walkerOS makes of the tagged teaser: its impression and the click on Open. */\nexport function heroEvents(\n article: HeroArticle,\n): readonly [HeroEvent, HeroEvent] {\n const data = { category: article.kicker, title: article.title };\n return [\n { name: 'article impression', data },\n { name: 'article open', data },\n ];\n}\n\n/** The tagged teaser as the demo's code pane ends on it, as HTML. */\nexport function heroMarkup(article: HeroArticle): string {\n return heroLines(article, CUE.moveStart)\n .map((line) => lineText(line.tokens))\n .join('\\n');\n}\n\nfunction heroRows(loop: number, ph: number): HeroRow[] {\n const rows: HeroRow[] = [];\n for (let j = loop; j >= 0 && rows.length < MAX_ROWS; j--) {\n const [impression, open] = heroEvents(articleAt(j));\n const current = j === loop;\n if (!current || ph >= CUE.openEvent)\n rows.push({\n ...open,\n key: `${j}-open`,\n age: current ? ph - CUE.openEvent : PAST,\n });\n if (!current || ph >= CUE.impressionEvent)\n rows.push({\n ...impression,\n key: `${j}-impression`,\n age: current ? ph - CUE.impressionEvent : PAST,\n });\n }\n return rows.slice(0, MAX_ROWS);\n}\n\n/** Everything the hero demo shows at time `t` (ms since the first loop began). */\nexport function heroFrame(t: number): HeroFrame {\n const loop = Math.floor(t / HERO_LOOP);\n const ph = t - loop * HERO_LOOP;\n const article = articleAt(loop);\n const slideIn = ease(\n clamp((ph - CUE.slideInStart) / (CUE.slideInEnd - CUE.slideInStart)),\n );\n const slideOut = ease(\n clamp((ph - CUE.slideOutStart) / (CUE.slideOutEnd - CUE.slideOutStart)),\n );\n const move = ease(\n clamp((ph - CUE.moveStart) / (CUE.moveEnd - CUE.moveStart)),\n );\n const ripple = clamp((ph - CUE.click) / 550);\n const cursorShown = ph >= CUE.moveStart - 200 && ph < CUE.fadeOut + 200;\n const fadingOut = ph > CUE.fadeOut ? 1 - clamp((ph - CUE.fadeOut) / 200) : 1;\n return {\n article,\n lines: heroLines(article, ph),\n fade:\n ph < 250\n ? ph / 250\n : ph > CUE.fadeOut\n ? 1 - clamp((ph - CUE.fadeOut) / (HERO_LOOP - CUE.fadeOut - 150))\n : 1,\n caretOn:\n TYPING.some(([start, end]) => ph >= start && ph <= end) || ph % 900 < 500,\n card: {\n opacity: clamp(ph / 250) * (1 - slideOut),\n offset: ph >= CUE.slideOutStart ? -slideOut * 190 : (1 - slideIn) * 190,\n entity: ph >= CUE.entityEnd,\n impression: ph >= CUE.impressionEnd,\n category: ph >= CUE.categoryEnd,\n title: ph >= CUE.titleEnd,\n action: ph >= CUE.actionEnd,\n },\n cursor: {\n x: 22 + (1 - move) * 190,\n y: 11 - (1 - move) * 80,\n opacity: cursorShown\n ? clamp((ph - (CUE.moveStart - 200)) / 200) * fadingOut\n : 0,\n ring: 1 + ripple * 1.8,\n ringOpacity: ph >= CUE.click ? (1 - ripple) * 0.9 : 0,\n pressed: ph >= CUE.click && ph < CUE.click + 180,\n },\n rows: heroRows(loop, ph),\n };\n}\n","import React, { Fragment } from 'react';\nimport { vizStyle } from './style';\nimport { clamp, ease } from './timeline';\n\nexport interface EventsTableRow {\n readonly key: string;\n readonly name: string;\n readonly data: Readonly<Record<string, string>>;\n /** Milliseconds since the row arrived; drives its tint, fade and slide. */\n readonly age: number;\n}\n\nconst SKELETON_ROWS = 6;\n\n/** The hero's live `SELECT * FROM walkerOS.events` table. */\nexport function EventsTable({ rows }: { rows: readonly EventsTableRow[] }) {\n const skeletons = Math.max(0, SKELETON_ROWS - rows.length);\n return (\n <div className=\"elb-viz-table\">\n <div className=\"elb-viz-table__head\">\n <span className=\"elb-viz-table__query\">\n <span className=\"elb-viz-table__keyword\">SELECT</span> *{' '}\n <span className=\"elb-viz-table__keyword\">FROM</span>{' '}\n <span className=\"elb-viz-table__source\">walkerOS.events</span>\n </span>\n <span className=\"elb-viz-table__live\">\n <span className=\"elb-viz-table__dot\" aria-hidden=\"true\" />\n live\n </span>\n </div>\n <div className=\"elb-viz-table__body\">\n <div className=\"elb-viz-table__scroll\">\n <div className=\"elb-viz-table__rows\">\n <div className=\"elb-viz-table__row elb-viz-table__row--header\">\n <span className=\"elb-viz-table__cell elb-viz-table__cell--n\">\n Row\n </span>\n <span className=\"elb-viz-table__cell\">\n name<span className=\"elb-viz-table__type\">STRING</span>\n </span>\n <span className=\"elb-viz-table__cell\">\n data<span className=\"elb-viz-table__type\">JSON</span>\n </span>\n </div>\n {rows.map((row, index) => (\n <div\n key={row.key}\n className=\"elb-viz-table__row elb-viz-table__row--event\"\n style={vizStyle({\n '--elb-viz-row-tint': 14 * (1 - clamp(row.age / 1600)),\n '--elb-viz-row-opacity': clamp(row.age / 300),\n '--elb-viz-row-shift': (1 - ease(clamp(row.age / 500))) * -80,\n })}\n >\n <span className=\"elb-viz-table__cell elb-viz-table__cell--n\">\n {index + 1}\n </span>\n <span className=\"elb-viz-table__cell\">{row.name}</span>\n <span className=\"elb-viz-table__cell elb-viz-table__json\">\n {'{'}\n {Object.entries(row.data).map(([key, value], position) => (\n <Fragment key={key}>\n {position === 0 ? '\"' : ',\"'}\n <span className=\"elb-viz-table__json-key\">{key}</span>\n {'\":\"'}\n <span className=\"elb-viz-table__json-value\">{value}</span>\n {'\"'}\n </Fragment>\n ))}\n {'}'}\n </span>\n </div>\n ))}\n {Array.from({ length: skeletons }, (_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"elb-viz-table__row elb-viz-table__row--skeleton\"\n aria-hidden=\"true\"\n >\n <span className=\"elb-viz-table__cell elb-viz-table__cell--n\">\n {rows.length + index + 1}\n </span>\n <span className=\"elb-viz-table__cell\">\n <span className=\"elb-viz-table__bar\" />\n </span>\n <span className=\"elb-viz-table__cell\">\n <span className=\"elb-viz-table__bar\" />\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\n/** A demo's per-frame custom property. */\nexport type VizVar = `--elb-viz-${string}`;\n\n/**\n * Per-frame values as custom properties on an element's style. Callers write\n * each name as a literal key and the demo's partial declares its default, so\n * the design checker matches every var() to a declaration.\n */\nexport function vizStyle(\n vars: Partial<Record<VizVar, string | number>>,\n): CSSProperties {\n const style: CSSProperties = {};\n return Object.assign(style, vars);\n}\n","import { useEffect, useState, type RefObject } from 'react';\n\nconst REDUCED_MOTION = '(prefers-reduced-motion: reduce)';\n\n/**\n * True while at least `threshold` of the element is visible, and always true\n * where IntersectionObserver is missing. False on the server and in the first\n * client frame, so a demo's server HTML never depends on it.\n */\nexport function useInView(\n ref: RefObject<Element | null>,\n threshold: number,\n): boolean {\n const [inView, setInView] = useState(false);\n useEffect(() => {\n const element = ref.current;\n if (!element || typeof IntersectionObserver === 'undefined') {\n setInView(true);\n return undefined;\n }\n // isIntersecting turns true at the first visible pixel; the ratio holds\n // it to the threshold. The newest entry is the element's current state.\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[entries.length - 1];\n if (entry)\n setInView(\n entry.isIntersecting && entry.intersectionRatio >= threshold,\n );\n },\n { threshold },\n );\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, threshold]);\n return inView;\n}\n\n/** The visitor's reduced-motion preference; false on the server and in the first client frame. */\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n if (typeof window.matchMedia !== 'function') return undefined;\n const media = window.matchMedia(REDUCED_MOTION);\n const update = () => setReduced(media.matches);\n update();\n media.addEventListener('change', update);\n return () => media.removeEventListener('change', update);\n }, []);\n return reduced;\n}\n","import React, { type ReactNode } from 'react';\nimport { cx } from '../../cx';\nimport type { EventPart } from './tokens';\n\nexport interface PillProps {\n part: EventPart;\n /** `outline`: viz-bg ground, coloured border and text. */\n variant?: 'solid' | 'outline';\n className?: string;\n children: ReactNode;\n}\n\n/** A small label in an event part's colour. */\nexport function Pill({\n part,\n variant = 'solid',\n className,\n children,\n}: PillProps) {\n return (\n <span\n className={cx(\n 'elb-viz-pill',\n `elb-viz-pill--${part}`,\n variant === 'outline' && 'elb-viz-pill--outline',\n className,\n )}\n >\n {children}\n </span>\n );\n}\n","import React from 'react';\nimport { cx } from '../../cx';\n\nexport type ThumbKind = 'bug' | 'tech' | 'food';\n\nconst BUG_LINES = [\n 'M36 46 L28 42',\n 'M35 54 L27 56',\n 'M38 61 L31 66',\n 'M76 46 L84 42',\n 'M77 54 L85 56',\n 'M74 61 L81 66',\n 'M51 25 Q47 17 42 16',\n 'M61 25 Q65 17 70 16',\n];\n\nconst BUG_SPOTS: ReadonlyArray<readonly [number, number, number]> = [\n [47, 44, 3.4],\n [65, 44, 3.4],\n [45, 56, 2.8],\n [67, 56, 2.8],\n];\n\nfunction Bug() {\n return (\n <>\n <rect className=\"elb-viz-thumb__ground\" width={112} height={86} />\n <ellipse\n className=\"elb-viz-thumb__shadow\"\n cx={56}\n cy={66}\n rx={30}\n ry={6}\n />\n <g\n className=\"elb-viz-thumb__legs\"\n strokeWidth={2.4}\n strokeLinecap=\"round\"\n >\n {BUG_LINES.map((d) => (\n <path key={d} d={d} />\n ))}\n </g>\n <circle className=\"elb-viz-thumb__ink\" cx={42} cy={16} r={2} />\n <circle className=\"elb-viz-thumb__ink\" cx={70} cy={16} r={2} />\n <ellipse\n className=\"elb-viz-thumb__ink\"\n cx={56}\n cy={30}\n rx={10}\n ry={7.5}\n />\n <circle className=\"elb-viz-thumb__eye\" cx={52} cy={29} r={1.6} />\n <circle className=\"elb-viz-thumb__eye\" cx={60} cy={29} r={1.6} />\n <ellipse\n className=\"elb-viz-thumb__shell\"\n cx={56}\n cy={50}\n rx={21}\n ry={18}\n />\n <path className=\"elb-viz-thumb__seam\" d=\"M56 33 L56 68\" strokeWidth={2} />\n {BUG_SPOTS.map(([x, y, r]) => (\n <circle\n key={`${x}-${y}`}\n className=\"elb-viz-thumb__ink\"\n cx={x}\n cy={y}\n r={r}\n />\n ))}\n <path\n className=\"elb-viz-thumb__shine\"\n d=\"M44 38 Q48 35 52 36\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n </>\n );\n}\n\nfunction Tech() {\n return (\n <>\n <rect className=\"elb-viz-thumb__ground\" width={112} height={86} />\n <rect\n className=\"elb-viz-thumb__badge\"\n x={38}\n y={25}\n width={36}\n height={36}\n rx={8}\n />\n <circle className=\"elb-viz-thumb__dot\" cx={47} cy={52} r={3.2} />\n <path\n className=\"elb-viz-thumb__wave\"\n d=\"M45 42 A10 10 0 0 1 57 54\"\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n />\n <path\n className=\"elb-viz-thumb__wave\"\n d=\"M45 34.5 A17.5 17.5 0 0 1 64.5 54\"\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n />\n </>\n );\n}\n\nfunction Food() {\n return (\n <>\n <rect className=\"elb-viz-thumb__ground\" width={112} height={86} />\n <ellipse\n className=\"elb-viz-thumb__plate\"\n cx={56}\n cy={62}\n rx={44}\n ry={10}\n />\n <ellipse\n className=\"elb-viz-thumb__loaf\"\n cx={56}\n cy={50}\n rx={31}\n ry={19}\n />\n <ellipse\n className=\"elb-viz-thumb__crust\"\n cx={56}\n cy={45}\n rx={25}\n ry={13}\n />\n <path\n className=\"elb-viz-thumb__score\"\n d=\"M40 44 Q56 35 72 44\"\n strokeWidth={2.2}\n strokeLinecap=\"round\"\n />\n <path\n className=\"elb-viz-thumb__score\"\n d=\"M44 51 Q56 45 68 51\"\n strokeWidth={2.2}\n strokeLinecap=\"round\"\n />\n </>\n );\n}\n\n/** The hero's article thumbnails, painted from viz tokens. */\nexport function Thumb({ kind }: { kind: ThumbKind }) {\n return (\n <svg\n className={cx('elb-viz-thumb', `elb-viz-thumb--${kind}`)}\n viewBox=\"0 0 112 86\"\n preserveAspectRatio=\"xMidYMid slice\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {kind === 'bug' ? <Bug /> : kind === 'tech' ? <Tech /> : <Food />}\n </svg>\n );\n}\n","import React, { useEffect, useRef, useState, type HTMLAttributes } from 'react';\nimport { cx } from '../cx';\nimport { EventLegend } from '../atoms/EventLegend';\nimport { PhotoPlaceholder } from '../atoms/PhotoPlaceholder';\nimport {\n TEASER_CAPTIONS,\n TEASER_ENTITY,\n TEASER_ITEMS,\n TEASER_PAGES,\n TEASER_PAGE_IDS,\n TEASER_STEPS,\n teaserAdvance,\n teaserStepEnd,\n teaserStepStart,\n type TeaserArticle,\n type TeaserEffect,\n type TeaserPage,\n type TeaserStep,\n} from './data/article-teaser';\nimport { CodeLine, CodeTokens } from './parts/CodeTokens';\nimport { useInView, useReducedMotion } from './parts/hooks';\nimport { Pill } from './parts/Pill';\nimport { VizFrame } from './parts/VizFrame';\n\nexport interface ArticleTeaserTrackingProps extends HTMLAttributes<HTMLDivElement> {\n autoplay?: boolean;\n speed?: number;\n /** Start with this step shown in full (the server frame is step 0 otherwise). */\n initialStep?: TeaserStep;\n}\n\nconst FIRST_DELAY = 800;\nconst JUMP_DELAY = 250;\nconst SCROLL_DELAY = 400;\n\nfunction fade(on: boolean): string {\n return cx('elb-viz-teaser__fade', on && 'elb-viz-teaser__fade--on');\n}\n\nfunction TeaserCard({\n article,\n position,\n seen,\n ahead,\n}: {\n article: TeaserArticle;\n position: number;\n seen: ReadonlySet<TeaserEffect>;\n ahead: boolean;\n}) {\n return (\n <div\n className={cx(\n 'elb-viz-teaser__card',\n seen.has('entity') && 'elb-viz-teaser__card--entity',\n ahead && 'elb-viz-teaser__card--ahead',\n )}\n >\n <span className=\"elb-viz-teaser__pills\">\n <Pill part=\"entity\" className={fade(seen.has('entity'))}>\n {TEASER_ENTITY}\n </Pill>\n <Pill\n part=\"property\"\n variant=\"outline\"\n className={fade(seen.has('position'))}\n >\n {position}\n </Pill>\n </span>\n <PhotoPlaceholder\n tone=\"viz\"\n className={cx('elb-viz-teaser__photo', fade(seen.has('image')))}\n />\n <span\n className={cx(\n 'elb-viz-teaser__kicker',\n fade(seen.has('category')),\n seen.has('category') && 'elb-viz-teaser__kicker--on',\n )}\n >\n {article.kicker}\n </span>\n <span\n className={cx(\n 'elb-viz-teaser__title',\n fade(seen.has('title')),\n seen.has('title') && 'elb-viz-teaser__title--on',\n )}\n >\n {article.title}\n </span>\n <span\n className={cx(\n 'elb-viz-teaser__link',\n fade(seen.has('action')),\n seen.has('action') && 'elb-viz-teaser__link--on',\n )}\n >\n Open →\n </span>\n </div>\n );\n}\n\n/**\n * A list and its cards are reached at the list's step. The lead list's first\n * card stands for the teaser the atom and molecule steps tag, so it and its\n * list are reached from step 1. Narrow frames hide what is not reached yet\n * instead of stacking empty boxes.\n */\nfunction TeaserGroup({\n page,\n seen,\n current,\n lead,\n}: {\n page: TeaserPage;\n seen: ReadonlySet<TeaserEffect>;\n current: TeaserStep;\n lead: boolean;\n}) {\n const globalsOn = seen.has(page.globalsEffect);\n const listOn = seen.has(page.listEffect);\n const reached = page.step <= current;\n return (\n <div\n className={cx(\n 'elb-viz-teaser__page',\n globalsOn && 'elb-viz-teaser__page--on',\n !reached && !lead && 'elb-viz-teaser__page--ahead',\n )}\n >\n <span className=\"elb-viz-teaser__page-pill\">\n <Pill\n part=\"globals\"\n className={fade(globalsOn)}\n >{`pagetype:${page.pagetype}`}</Pill>\n </span>\n <div\n className={cx(\n 'elb-viz-teaser__list',\n listOn && 'elb-viz-teaser__list--on',\n )}\n >\n <div className={cx('elb-viz-teaser__list-head', fade(listOn))}>\n <span className=\"elb-viz-teaser__list-label\">\n <span className=\"elb-viz-teaser__list-name\">{page.header}</span>\n {page.heading !== undefined && (\n <span className=\"elb-viz-teaser__list-heading\">\n {page.heading}\n </span>\n )}\n </span>\n <Pill part=\"context\">{`list:${page.list}`}</Pill>\n </div>\n <div className=\"elb-viz-teaser__cards\">\n {page.articles.map((article, index) => (\n <TeaserCard\n key={article.title}\n article={article}\n position={index + 1}\n seen={seen}\n ahead={!reached && !(lead && index === 0)}\n />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Tagging demo: one ArticleTeaser tagged once, walked through atom, molecule,\n * organisms and pages, showing how every instance inherits entity, action,\n * properties, context and globals. Autoplays while the code is in view; shows\n * the finished walk-through with reduced motion. A clicked step plays from its\n * start and stays there.\n */\nexport function ArticleTeaserTracking({\n autoplay = true,\n speed = 1,\n initialStep,\n ...rest\n}: ArticleTeaserTrackingProps) {\n const codeRef = useRef<HTMLDivElement>(null);\n const inView = useInView(codeRef, 0.35);\n const reduced = useReducedMotion();\n const [shown, setShown] = useState(() =>\n initialStep ? teaserStepEnd(initialStep) : 0,\n );\n const [delay, setDelay] = useState<number | null>(FIRST_DELAY);\n // A clicked step: autoplay plays it and ends with it.\n const [pinned, setPinned] = useState<TeaserStep | null>(null);\n const playing = autoplay && inView && !reduced;\n const end = pinned === null ? TEASER_ITEMS.length : teaserStepEnd(pinned);\n\n useEffect(() => {\n if (reduced) setShown(TEASER_ITEMS.length);\n }, [reduced]);\n\n useEffect(() => {\n if (!playing || delay === null) return undefined;\n const timer = setTimeout(() => {\n const advance = teaserAdvance(shown);\n if (!advance) {\n setDelay(null);\n return;\n }\n setShown(advance.next);\n setDelay(advance.next < end ? advance.delay : null);\n }, delay / speed);\n return () => clearTimeout(timer);\n }, [playing, delay, shown, speed, end]);\n\n // Keep the newest line in the middle of the code pane.\n useEffect(() => {\n const pane = codeRef.current;\n if (!pane || shown === 0 || typeof pane.scrollTo !== 'function')\n return undefined;\n const timer = setTimeout(() => {\n const line = pane.querySelector(`[data-line=\"${shown - 1}\"]`);\n const top =\n line instanceof HTMLElement\n ? line.offsetTop - pane.clientHeight / 2\n : 0;\n pane.scrollTo({\n top: Math.max(0, top),\n behavior: reduced ? 'auto' : 'smooth',\n });\n }, SCROLL_DELAY);\n return () => clearTimeout(timer);\n }, [shown, reduced]);\n\n const jump = (step: TeaserStep) => {\n setPinned(step);\n if (autoplay && !reduced) {\n setShown(teaserStepStart(step));\n setDelay(JUMP_DELAY);\n } else {\n setShown(teaserStepEnd(step));\n }\n };\n\n const count = Math.min(shown, TEASER_ITEMS.length);\n const visibleStep = count > 0 ? TEASER_ITEMS[count - 1].step : 0;\n const current: TeaserStep = visibleStep === 0 ? 1 : visibleStep;\n const seen = new Set<TeaserEffect>();\n for (const item of TEASER_ITEMS.slice(0, count))\n if (item.kind === 'code' && item.effect) seen.add(item.effect);\n\n let lineNumber = 0;\n let separated = false;\n const lines = TEASER_ITEMS.map((item, index) => {\n const visible = item.step <= visibleStep;\n const lineClass = cx(\n 'elb-viz-teaser__line',\n visible && 'elb-viz-teaser__line--visible',\n visible && item.step < current && 'elb-viz-teaser__line--dim',\n item.kind === 'file' && 'elb-viz-teaser__line--file',\n );\n if (item.kind === 'file') {\n lineNumber = 0;\n const fileClass = cx(\n 'elb-viz-teaser__file',\n separated && 'elb-viz-teaser__file--separated',\n );\n separated = true;\n return (\n <div key={index} data-line={index} className={lineClass}>\n <div className={fileClass}>\n <span className=\"elb-viz-teaser__file-name\">{item.name}</span>\n <span className=\"elb-viz-teaser__file-level\">{item.level}</span>\n </div>\n </div>\n );\n }\n lineNumber += 1;\n const reached = index < count;\n const isCurrent = index === count - 1 && item.effect !== undefined;\n return (\n <div key={index} data-line={index} className={lineClass}>\n <CodeLine\n number={lineNumber}\n bar={reached ? item.part : undefined}\n className={cx(\n 'elb-viz-teaser__code',\n isCurrent &&\n `elb-viz-teaser__code--current-${item.part ?? 'plain'}`,\n )}\n >\n <CodeTokens tokens={item.tokens} active={reached} />\n </CodeLine>\n </div>\n );\n });\n\n return (\n <VizFrame {...rest} variant=\"teaser\">\n <div className=\"elb-viz-teaser\">\n <div className=\"elb-viz-teaser__header\">\n <div className=\"elb-viz-teaser__steps\">\n {TEASER_STEPS.map(({ step, label }) => (\n <button\n key={step}\n type=\"button\"\n aria-label={`Step ${step}: ${label}`}\n aria-pressed={step === current}\n className={cx(\n 'elb-viz-teaser__step',\n step === current && 'elb-viz-teaser__step--active',\n step < current && 'elb-viz-teaser__step--done',\n )}\n onClick={() => jump(step)}\n >\n <span className=\"elb-viz-teaser__step-number\">{step}</span>\n <span>{label}</span>\n </button>\n ))}\n </div>\n <div className=\"elb-viz-teaser__legend\">\n <EventLegend />\n </div>\n </div>\n <p className=\"elb-viz-teaser__caption\">{TEASER_CAPTIONS[current]}</p>\n <div className=\"elb-viz-teaser__body\">\n <div className=\"elb-viz-teaser__pane\">\n <div ref={codeRef} className=\"elb-viz-teaser__scroll\">\n {lines}\n </div>\n </div>\n <div className=\"elb-viz-teaser__pages\">\n {TEASER_PAGE_IDS.map((id, index) => (\n <TeaserGroup\n key={id}\n page={TEASER_PAGES[id]}\n seen={seen}\n current={current}\n lead={index === 0}\n />\n ))}\n </div>\n </div>\n </div>\n </VizFrame>\n );\n}\n","/**\n * The article teaser demo's script: one ArticleTeaser tagged once, walked from\n * atom to page templates. The code pane, the cards, the page HTML and the\n * expected events all come from the constants below, so a fidelity test that\n * runs the page HTML through walkerOS checks what the cards show.\n */\nimport { tok, type CodeToken, type EventPart } from '../parts/tokens';\n\nexport type TeaserStep = 1 | 2 | 3 | 4 | 5;\nexport type TeaserPageId = 'home' | 'article';\n\n/** What reaching a code line adds to the cards. */\nexport type TeaserEffect =\n | 'action'\n | 'entity'\n | 'position'\n | 'image'\n | 'category'\n | 'title'\n | 'homefeed'\n | 'related'\n | 'homepage'\n | 'articlepage';\n\nexport interface TeaserFile {\n readonly kind: 'file';\n readonly step: TeaserStep;\n readonly name: string;\n readonly level: 'atom' | 'molecule' | 'organism' | 'template';\n}\n\nexport interface TeaserCode {\n readonly kind: 'code';\n readonly step: TeaserStep;\n readonly tokens: readonly CodeToken[];\n readonly effect?: TeaserEffect;\n /** The event part this line tags: its bar and highlight colour. */\n readonly part?: EventPart;\n}\n\nexport type TeaserItem = TeaserFile | TeaserCode;\n\nexport interface TeaserArticle {\n readonly kicker: string;\n readonly title: string;\n}\n\nexport interface TeaserPage {\n readonly template: string;\n readonly organism: string;\n readonly pagetype: string;\n readonly list: string;\n /** The list variable the organism maps over. */\n readonly items: string;\n readonly step: TeaserStep;\n readonly listEffect: TeaserEffect;\n readonly globalsEffect: TeaserEffect;\n readonly header: string;\n readonly heading?: string;\n readonly articles: readonly TeaserArticle[];\n}\n\nexport interface TeaserExpectation {\n readonly position: number;\n readonly category: string;\n readonly title: string;\n readonly list: string;\n readonly pagetype: string;\n}\n\nexport interface TeaserAdvance {\n readonly next: number;\n /** The wait before the following advance; null when the walk-through is done. */\n readonly delay: number | null;\n}\n\nexport const TEASER_ENTITY = 'article';\nexport const TEASER_ACTION = 'click:open';\n\nexport const TEASER_PAGE_IDS: readonly TeaserPageId[] = ['home', 'article'];\n\nexport const TEASER_PAGES: Readonly<Record<TeaserPageId, TeaserPage>> = {\n home: {\n template: 'HomePage.tsx',\n organism: 'HomeFeed',\n pagetype: 'homepage',\n list: 'homefeed',\n items: 'stories',\n step: 3,\n listEffect: 'homefeed',\n globalsEffect: 'homepage',\n header: '<HomeFeed /> · homepage',\n articles: [\n { kicker: 'Tech', title: 'Return of the Bug' },\n { kicker: 'Tech', title: 'The quiet return of RSS' },\n { kicker: 'Food', title: 'Why sourdough came back' },\n ],\n },\n article: {\n template: 'ArticlePage.tsx',\n organism: 'RelatedStories',\n pagetype: 'article',\n list: 'related',\n items: 'related',\n step: 4,\n listEffect: 'related',\n globalsEffect: 'articlepage',\n header: '<RelatedStories /> · article page',\n heading: 'Related stories',\n articles: [\n { kicker: 'Tech', title: 'The quiet return of RSS' },\n { kicker: 'Science', title: 'A year on the ice shelf' },\n { kicker: 'Culture', title: 'Small venues, big nights' },\n ],\n },\n};\n\nexport const TEASER_STEPS: ReadonlyArray<{\n readonly step: TeaserStep;\n readonly label: string;\n}> = [\n { step: 1, label: 'Atom' },\n { step: 2, label: 'Molecule' },\n { step: 3, label: TEASER_PAGES.home.organism },\n { step: 4, label: TEASER_PAGES.article.organism },\n { step: 5, label: 'Pages' },\n];\n\nexport const TEASER_CAPTIONS: Readonly<Record<TeaserStep, string>> = {\n 1: `Link carries the ${TEASER_ACTION} action wherever it is rendered.`,\n 2: `ArticleTeaser makes each card an ${TEASER_ENTITY} entity and reads category and title from its elements.`,\n 3: `${TEASER_PAGES.home.organism} wraps three teasers and adds list:${TEASER_PAGES.home.list} context to their events.`,\n 4: `${TEASER_PAGES.article.organism} reuses the same ArticleTeaser and adds list:${TEASER_PAGES.article.list} context.`,\n 5: 'Each page template sets pagetype as a global, which is added to every event on that page.',\n};\n\nconst file = (\n step: TeaserStep,\n name: string,\n level: TeaserFile['level'],\n): TeaserFile => ({\n kind: 'file',\n step,\n name,\n level,\n});\n\nconst code = (\n step: TeaserStep,\n tokens: CodeToken[],\n effect?: TeaserEffect,\n part?: EventPart,\n): TeaserCode => ({ kind: 'code', step, tokens, effect, part });\n\nconst PROPERTY = `data-elb-${TEASER_ENTITY}`;\n\nfunction buildItems(): TeaserItem[] {\n const items: TeaserItem[] = [\n file(1, 'Link.tsx', 'atom'),\n code(1, [\n tok('export const', 'kw'),\n tok(' Link ', 'text'),\n tok('= ({ href, children }) => (', 'punct'),\n ]),\n code(\n 1,\n [\n tok(' ', 'punct'),\n tok('<a', 'tag'),\n tok(' ', 'punct'),\n tok('href', 'attr'),\n tok('={href} ', 'punct'),\n tok('data-elbaction', 'attr', 'action'),\n tok('=', 'punct'),\n tok(`\"${TEASER_ACTION}\"`, 'str', 'action'),\n tok('>', 'tag'),\n ],\n 'action',\n 'action',\n ),\n code(1, [tok(' ', 'punct'), tok('{children}', 'punct')]),\n code(1, [tok(' ', 'punct'), tok('</a>', 'tag')]),\n code(1, [tok(');', 'punct')]),\n file(2, 'ArticleTeaser.tsx', 'molecule'),\n code(2, [\n tok('export const', 'kw'),\n tok(' ArticleTeaser ', 'text'),\n tok('= ({', 'punct'),\n ]),\n code(2, [tok(' title, category, image, url, position,', 'punct')]),\n code(2, [tok('}) => (', 'punct')]),\n code(\n 2,\n [\n tok(' ', 'punct'),\n tok('<article', 'tag'),\n tok(' ', 'punct'),\n tok('data-elb', 'attr', 'entity'),\n tok('=', 'punct'),\n tok(`\"${TEASER_ENTITY}\"`, 'str', 'entity'),\n ],\n 'entity',\n 'entity',\n ),\n code(\n 2,\n [\n tok(' ', 'punct'),\n tok(PROPERTY, 'attr', 'property'),\n tok('={`', 'punct'),\n tok('position:${position}', 'str', 'property'),\n tok('`}', 'punct'),\n tok('>', 'tag'),\n ],\n 'position',\n 'property',\n ),\n code(\n 2,\n [\n tok(' ', 'punct'),\n tok('<img', 'tag'),\n tok(' ', 'punct'),\n tok('src', 'attr'),\n tok('={image} ', 'punct'),\n tok('/>', 'tag'),\n ],\n 'image',\n ),\n code(\n 2,\n [\n tok(' ', 'punct'),\n tok('<span', 'tag'),\n tok(' ', 'punct'),\n tok(PROPERTY, 'attr', 'property'),\n tok('=', 'punct'),\n tok('\"category:#innerText\"', 'str', 'property'),\n tok('>', 'tag'),\n tok('{category}', 'punct'),\n tok('</span>', 'tag'),\n ],\n 'category',\n 'property',\n ),\n code(\n 2,\n [\n tok(' ', 'punct'),\n tok('<h3', 'tag'),\n tok(' ', 'punct'),\n tok(PROPERTY, 'attr', 'property'),\n tok('=', 'punct'),\n tok('\"title:#innerText\"', 'str', 'property'),\n tok('>', 'tag'),\n tok('{title}', 'punct'),\n tok('</h3>', 'tag'),\n ],\n 'title',\n 'property',\n ),\n code(2, [\n tok(' ', 'punct'),\n tok('<Link', 'tag'),\n tok(' ', 'punct'),\n tok('href', 'attr'),\n tok('={url}', 'punct'),\n tok('>', 'tag'),\n tok('Open →', 'text'),\n tok('</Link>', 'tag'),\n ]),\n code(2, [tok(' ', 'punct'), tok('</article>', 'tag')]),\n code(2, [tok(');', 'punct')]),\n ];\n for (const id of TEASER_PAGE_IDS) {\n const page = TEASER_PAGES[id];\n items.push(\n file(page.step, `${page.organism}.tsx`, 'organism'),\n code(\n page.step,\n [\n tok('<section', 'tag'),\n tok(' ', 'punct'),\n tok('data-elbcontext', 'attr', 'context'),\n tok('=', 'punct'),\n tok(`\"list:${page.list}\"`, 'str', 'context'),\n tok('>', 'tag'),\n ],\n page.listEffect,\n 'context',\n ),\n code(page.step, [\n tok(` {${page.items}.map((s, i) => `, 'punct'),\n tok('<ArticleTeaser', 'tag'),\n tok(' {...s} ', 'punct'),\n tok('position', 'attr'),\n tok('={i + 1} ', 'punct'),\n tok('/>', 'tag'),\n tok(')}', 'punct'),\n ]),\n code(page.step, [tok('</section>', 'tag')]),\n );\n }\n for (const id of TEASER_PAGE_IDS) {\n const page = TEASER_PAGES[id];\n items.push(\n file(5, page.template, 'template'),\n code(\n 5,\n [\n tok('<main', 'tag'),\n tok(' ', 'punct'),\n tok('data-elbglobals', 'attr', 'globals'),\n tok('=', 'punct'),\n tok(`\"pagetype:${page.pagetype}\"`, 'str', 'globals'),\n tok('>', 'tag'),\n ],\n page.globalsEffect,\n 'globals',\n ),\n code(5, [tok(' ', 'punct'), tok(`<${page.organism} />`, 'tag')]),\n code(5, [tok('</main>', 'tag')]),\n );\n }\n return items;\n}\n\nexport const TEASER_ITEMS: readonly TeaserItem[] = buildItems();\n\nfunction hasEffect(item: TeaserItem): boolean {\n return item.kind === 'code' && item.effect !== undefined;\n}\n\n/** Index of the first item of `step`. */\nexport function teaserStepStart(step: TeaserStep): number {\n return TEASER_ITEMS.findIndex((item) => item.step === step);\n}\n\n/** Index after the last item of `step`. */\nexport function teaserStepEnd(step: TeaserStep): number {\n let end = teaserStepStart(step);\n while (end < TEASER_ITEMS.length && TEASER_ITEMS[end].step === step) end += 1;\n return end;\n}\n\n/**\n * Autoplay: from `n` shown items, the next count to show and the wait before\n * the step after it. A new file opens alone; otherwise the walk runs to the\n * next line with an effect. A pause marks the move to the next step.\n */\nexport function teaserAdvance(n: number): TeaserAdvance | null {\n if (n >= TEASER_ITEMS.length) return null;\n const item = TEASER_ITEMS[n];\n if (\n item.kind === 'file' &&\n (n === 0 || TEASER_ITEMS[n - 1].step !== item.step)\n )\n return { next: n + 1, delay: 1300 };\n let next = n;\n while (\n next < TEASER_ITEMS.length &&\n TEASER_ITEMS[next].step === item.step &&\n !hasEffect(TEASER_ITEMS[next])\n )\n next += 1;\n if (next < TEASER_ITEMS.length && TEASER_ITEMS[next].step === item.step)\n next += 1;\n if (next >= TEASER_ITEMS.length) return { next, delay: null };\n return {\n next,\n delay: 1700 + (TEASER_ITEMS[next].step !== item.step ? 1600 : 0),\n };\n}\n\n/** A page template's HTML as walkerOS sees it, built from the same constants as the cards. */\nexport function teaserPageHtml(id: TeaserPageId): string {\n const page = TEASER_PAGES[id];\n const cards = page.articles.map((article, index) =>\n [\n ` <article data-elb=\"${TEASER_ENTITY}\" ${PROPERTY}=\"position:${index + 1}\">`,\n ' <img alt=\"\" />',\n ` <span ${PROPERTY}=\"category:#innerText\">${article.kicker}</span>`,\n ` <h3 ${PROPERTY}=\"title:#innerText\">${article.title}</h3>`,\n ` <a href=\"#\" data-elbaction=\"${TEASER_ACTION}\">Open →</a>`,\n ' </article>',\n ].join('\\n'),\n );\n return [\n `<main data-elbglobals=\"pagetype:${page.pagetype}\">`,\n ` <section data-elbcontext=\"list:${page.list}\">`,\n ...cards,\n ' </section>',\n '</main>',\n ].join('\\n');\n}\n\n/** Per card on a page, what the demo shows: position pill, kicker, title, list and pagetype pills. */\nexport function teaserExpectations(id: TeaserPageId): TeaserExpectation[] {\n const page = TEASER_PAGES[id];\n return page.articles.map((article, index) => ({\n position: index + 1,\n category: article.kicker,\n title: article.title,\n list: page.list,\n pagetype: page.pagetype,\n }));\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","fade","import_react","import_jsx_runtime"]}