@weasel-js/labkit 0.8.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -3
- package/dist/_dts/{DrawCommand-DACv9lhe.d.ts → DrawCommand-BwRCZYuo.d.ts} +72 -6
- package/dist/_dts/{useExperimentState-eSvpwV_P.d.ts → useExperimentState-CJn2hHzd.d.ts} +6 -4
- package/dist/{chunk-SSMHPMDV.js → chunk-53XSBIUK.js} +12 -11
- package/dist/chunk-53XSBIUK.js.map +1 -0
- package/dist/{chunk-FBZCQXI2.js → chunk-FP5LYDVX.js} +1229 -1227
- package/dist/chunk-FP5LYDVX.js.map +1 -0
- package/dist/{chunk-OHGEOTCV.js → chunk-HNXVLKBG.js} +3 -3
- package/dist/{chunk-OHGEOTCV.js.map → chunk-HNXVLKBG.js.map} +1 -1
- package/dist/{chunk-6V7ROR7G.js → chunk-XVBXYKFJ.js} +1168 -557
- package/dist/chunk-XVBXYKFJ.js.map +1 -0
- package/dist/index.d.ts +37 -13
- package/dist/index.js +776 -27
- package/dist/index.js.map +1 -1
- package/dist/passthrough/weasel-canvas.d.ts +1 -1
- package/dist/passthrough/weasel-canvas.js +1 -1
- package/dist/passthrough/weasel-ui.d.ts +97 -69
- package/dist/passthrough/weasel-ui.js +2 -2
- package/dist/state/index.d.ts +2 -2
- package/dist/state/index.js +2 -2
- package/dist/styles.css +228 -287
- package/dist/ui/layers/index.js +3 -3
- package/package.json +4 -6
- package/src/canvas/CanvasStack.less +1 -1
- package/src/controls/ControlPanel.less +12 -12
- package/src/dragdrop/DragGhost.less +2 -2
- package/src/dragdrop/Palette.less +6 -6
- package/src/index.ts +2 -0
- package/src/lab/Lab.test.tsx +20 -15
- package/src/lab/Lab.tsx +33 -32
- package/src/lab/LabContext.ts +3 -3
- package/src/lab/LabShell.less +14 -14
- package/src/lab/LabShell.test.tsx +7 -20
- package/src/lab/LabShell.tsx +22 -13
- package/src/lab/WorkspaceGrid.less +1 -1
- package/src/lab/WorkspaceGrid.stories.tsx +4 -4
- package/src/lab/index.ts +1 -1
- package/src/lab/useSystemMode.ts +30 -0
- package/src/layers/LayerList.less +9 -9
- package/src/primitives/FpsMeter.less +5 -5
- package/src/primitives/ScaleIndicator.less +7 -7
- package/src/primitives/Sidebar.less +12 -12
- package/src/primitives/StatusBar.less +10 -10
- package/src/primitives/Toolbar.less +16 -16
- package/src/state/store.test.ts +17 -9
- package/src/state/store.ts +13 -10
- package/src/state/types.ts +5 -2
- package/src/theme/Interstellar.stories.less +20 -20
- package/src/theme/Interstellar.stories.tsx +44 -59
- package/src/theme/base.less +26 -26
- package/src/theme/interstellar.test.ts +30 -0
- package/src/theme/interstellar.tokens.json +57 -0
- package/src/theme/interstellar.ts +9 -0
- package/src/ui/layers/LayerStack.less +21 -21
- package/src/ui/properties/CurveField.less +5 -5
- package/src/ui/properties/EffectCard.tsx +2 -2
- package/src/ui/properties/PropertyGroup.less +6 -6
- package/src/ui/properties/PropertyPanel.less +70 -70
- package/src/ui/properties/SpeechBalloonPanels.stories.tsx +1 -1
- package/src/ui/properties/storyLayouts.tsx +1 -1
- package/src/workspace/Workspace.less +14 -14
- package/src/workspace/Workspace.stories.tsx +2 -2
- package/src/workspace/Workspace.test.tsx +2 -2
- package/dist/chunk-6V7ROR7G.js.map +0 -1
- package/dist/chunk-FBZCQXI2.js.map +0 -1
- package/dist/chunk-SSMHPMDV.js.map +0 -1
- package/dist/theme-interstellar.css +0 -25
- package/dist/theme-light.css +0 -13
- package/src/theme/interstellar.less +0 -34
- package/src/theme/light.less +0 -14
- package/src/theme/tokens.less +0 -85
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ui/src/dlog.ts","../../ui/src/components/Plot2D/geometry.ts","../../ui/src/components/Plot2D/Plot2D.tsx","../../ui/src/components/Tooltip/Tooltip.tsx","../../ui/src/components/ActionBar/ActionBar.tsx","../../ui/src/components/Badge/shapes/Pill.tsx","../../ui/src/components/Badge/shapes/Plain.tsx","../../ui/src/components/Badge/shapes/Square.tsx","../../ui/src/components/Badge/shapes/Notched.tsx","../../ui/src/components/Badge/shapes/Perforated.tsx","../../ui/src/components/Badge/shapes/Hexagon.tsx","../../ui/src/components/Badge/shapes/Starburst.tsx","../../ui/src/components/Badge/shapes/Scalloped.tsx","../../ui/src/components/Badge/shapes/Shield.tsx","../../ui/src/components/Badge/shapes/Ribbon.tsx","../../ui/src/components/Badge/shapes/Beavis.tsx","../../ui/src/components/Badge/shapes/Sparkler.tsx","../../ui/src/components/Badge/shapes/Postage.tsx","../../ui/src/components/Badge/shapes/Cloud.tsx","../../ui/src/components/Badge/shapes/House.tsx","../../ui/src/components/Badge/shapes/Plaque.tsx","../../ui/src/components/Badge/shapes/Crest.tsx","../../ui/src/components/Badge/shapes/Urn.tsx","../../ui/src/components/Badge/shapes/Coffin.tsx","../../ui/src/components/Badge/shapes/Receipt.tsx","../../ui/src/components/Badge/shapes/Wood.tsx","../../ui/src/components/Badge/shapes/Quatrefoil.tsx","../../ui/src/components/Badge/shapes/index.ts","../../ui/src/components/Badge/bases/ChamferedRect.tsx","../../ui/src/components/Badge/bases/RoundedRect.tsx","../../ui/src/components/Badge/bases/polygonSampler.ts","../../ui/src/components/Badge/bases/Polygon.tsx","../../ui/src/components/Badge/bases/Puzzle.tsx","../../ui/src/components/Badge/bases/Quatrefoil.tsx","../../ui/src/components/Badge/bases/OctantSpline.tsx","../../ui/src/components/Badge/bases/OctantBSpline.tsx","../../ui/src/components/Badge/bases/Ribbon.tsx","../../ui/src/components/Badge/bases/edgeProfiles.ts","../../ui/src/components/Badge/bases/Powerline.tsx","../../ui/src/components/Badge/bases/index.ts","../../ui/src/components/Badge/effects/rangeMask.ts","../../ui/src/components/Badge/effects/Spikes.tsx","../../ui/src/components/Badge/effects/Puffs.tsx","../../ui/src/components/Badge/effects/Bites.tsx","../../ui/src/components/Badge/effects/Scallops.tsx","../../ui/src/components/Badge/effects/Bevel.tsx","../../ui/src/components/Badge/effects/Sheen.tsx","../../ui/src/components/Badge/effects/Rivets.tsx","../../ui/src/components/Badge/effects/Shadow.tsx","../../ui/src/components/Badge/effects/Woodgrain.tsx","../../ui/src/components/Badge/effects/Perforations.tsx","../../ui/src/components/Badge/effects/Bevel2.tsx","../../ui/src/components/Badge/effects/Outline.tsx","../../ui/src/components/Badge/effects/Sunbeams.tsx","../../ui/src/components/Badge/effects/Aqua.tsx","../../ui/src/components/Badge/effects/Metal.tsx","../../ui/src/components/Badge/effects/index.ts","../../ui/src/components/Badge/Badge.tsx","../../ui/src/components/Button/Button.tsx","../../ui/src/useReorderDragList.ts","../../ui/src/components/DataGrid/DataGrid.tsx","../../ui/src/components/Keycaps/Keycap.tsx","../../ui/src/components/Keycaps/Keycaps.tsx","../../ui/src/components/Keycaps/keySpecsFromMods.ts","../../ui/src/components/Keycaps/keyGlyph.ts","../../ui/src/format/number.ts","../../ui/src/components/Slider/Slider.tsx","../../ui/src/components/ToggleBar/ToggleBar.tsx","../../ui/src/components/OptionsBar/OptionsBar.tsx","../../ui/src/components/ActionsBar/ActionsBar.tsx","../../ui/src/components/Powerline/Powerline.tsx","../../ui/src/components/Checkbox/Checkbox.tsx","../../ui/src/components/Field/Field.tsx","../../ui/src/components/Input/Input.tsx","../../ui/src/components/NumberField/NumberField.tsx","../../ui/src/components/RadioGroup/RadioGroup.tsx","../../ui/src/components/RangeSlider/RangeSlider.tsx","../../ui/src/components/Select/Select.tsx","../../ui/src/components/Switch/Switch.tsx","../../ui/src/components/Dialog/Dialog.tsx","../../ui/src/components/Sidebar/Sidebar.tsx","../../ui/src/components/SidebarPanel/SidebarPanel.tsx","../../ui/src/components/ToolButton/ToolButton.tsx","../../ui/src/components/ToolGroup/ToolGroup.tsx","../../ui/src/components/ToolPalette/formatShortcut.ts","../../ui/src/components/ToolPalette/ToolPalette.tsx","../../ui/src/components/Tabs/Tabs.tsx","../../ui/src/components/ComboBox/ComboBox.tsx","../../ui/src/components/CurveEditor/catmullRom.ts","../../ui/src/components/CurveEditor/monotone.ts","../../ui/src/components/CurveEditor/interpolation.ts","../../ui/src/components/CurveEditor/hitTest.ts","../../ui/src/components/CurveEditor/createFunctionLayer.tsx","../../ui/src/components/CurveEditor/LayeredCurveEditor.tsx","../../ui/src/components/CurveEditor/CurveEditor.tsx","../../ui/src/components/PointPlotter/PointPlotter.tsx","../../ui/src/paintGradientTrack.tsx","../../ui/src/color/oklch.ts"],"names":["e","t","n","r","i","c","l","u","d","f","_","v","y","b","x","S","C","w","T","a","E","D","O","k","s","o","p","m","h","g","A","j","M","N","P","F","ee","I","te","ne","re","ie","L","ae","oe","R","se","z","ce","B","V","le","H","U","ue","de","W","fe","G","K","q","J","Y","X","Z","Q","$","Le","Re"],"mappings":"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","file":"chunk-FP5LYDVX.js","sourcesContent":["/**\n * Namespaced, opt-in console tracing. Off by default; production builds\n * may strip the calls entirely depending on the bundler.\n *\n * Enable in the browser:\n *\n * localStorage.setItem('weasel.debug', '*') // all namespaces\n * localStorage.setItem('weasel.debug', 'curve-editor') // just curve editor\n * localStorage.setItem('weasel.debug', 'curve-editor,layer-stack')\n *\n * Each component picks a stable namespace and calls `dlog(namespace, ...)`.\n * Useful for tracing pointer/event flows that are hard to capture\n * post-hoc (drag handlers, gesture sequences, selection mutations).\n *\n * The flag is read once and cached for the page session — reload to\n * pick up changes. Cheap hot-path checks (one nullish-coalesce + Set\n * lookup) so leaving calls in place is fine.\n *\n * Mirrors `src/debug/flag.ts` in the kit. Two impls live here because\n * weasel-ui doesn't depend on the kit, but both read the same\n * localStorage keys so behavior is uniform. See the kit copy for the\n * canonical list of kit-level namespaces.\n *\n * Known weasel-ui namespaces:\n * - plot2d — Plot2D mount / unmount\n * - curve-editor — CurveEditor pointer flow\n */\n\nconst KEYS = ['weasel.debug', 'weaseldraw.debug'] as const;\n\ninterface Cached {\n all: boolean;\n set: Set<string>;\n}\n\nlet cached: Cached | null = null;\n\nfunction read(): Cached {\n const empty: Cached = { all: false, set: new Set() };\n if (typeof localStorage === 'undefined') return empty;\n try {\n for (const k of KEYS) {\n const v = localStorage.getItem(k);\n if (v == null || v === '') continue;\n if (v === '1' || v === 'true' || v === '*') return { all: true, set: new Set() };\n return { all: false, set: new Set(v.split(/[\\s,]+/).filter(Boolean)) };\n }\n return empty;\n } catch {\n return empty;\n }\n}\n\nfunction get(): Cached {\n if (cached === null) cached = read();\n return cached;\n}\n\n/** True when `namespace` (or `*`) is enabled. */\nexport function isDebugEnabled(namespace: string): boolean {\n const c = get();\n return c.all || c.set.has(namespace);\n}\n\n/** Conditional `console.debug` — no-op unless `namespace` (or `*`) is enabled.\n * Each call is prefixed with `[namespace]` so the source is searchable. */\nexport function dlog(namespace: string, ...args: unknown[]): void {\n if (!isDebugEnabled(namespace)) return;\n // eslint-disable-next-line no-console\n console.debug(`[${namespace}]`, ...args);\n}\n","/**\n * Coordinate transforms (model ↔ plot) for Plot2D. Pure / deterministic —\n * no DOM, no React, no state.\n *\n * Model space: caller-defined xRange × yRange. Y axis goes UP.\n * Plot space: 0..width × 0..height in CSS pixels. Y axis goes DOWN (SVG).\n */\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface ModelRange {\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n}\n\nexport interface PlotSize {\n width: number;\n height: number;\n}\n\nexport function modelToPlot(p: Point, m: ModelRange, plot: PlotSize): Point {\n const xFrac = (p.x - m.xMin) / (m.xMax - m.xMin);\n const yFrac = (p.y - m.yMin) / (m.yMax - m.yMin);\n return {\n x: xFrac * plot.width,\n // Invert y so model y=0 sits at plot bottom (SVG y grows downward).\n y: (1 - yFrac) * plot.height,\n };\n}\n\nexport function plotToModel(p: Point, m: ModelRange, plot: PlotSize): Point {\n const xFrac = p.x / plot.width;\n const yFrac = 1 - p.y / plot.height;\n return {\n x: m.xMin + xFrac * (m.xMax - m.xMin),\n y: m.yMin + yFrac * (m.yMax - m.yMin),\n };\n}\n","import {\n forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n modelToPlot, plotToModel,\n type ModelRange, type Point,\n} from './geometry';\nimport s from './Plot2D.module.css';\nimport { dlog } from '../../dlog';\n\nexport interface GridSettings {\n /** Number of evenly-spaced internal grid lines per axis (excluding\n * the edges). Applied to both x and y. Default 3. */\n divisions?: number;\n /** Stroke color override. When omitted, uses `var(--plot-grid)`. */\n color?: string;\n}\n\nexport interface AxesSettings {\n /** Stroke color override. When omitted, uses `var(--plot-axis)`. */\n color?: string;\n}\n\nexport interface Plot2DCoords {\n plot: Point;\n model: Point;\n}\n\nexport interface Plot2DProps {\n width: number;\n height: number;\n /** Model-space x range. Default [0, 1]. */\n xRange?: readonly [number, number];\n /** Model-space y range. Default [0, 1]. */\n yRange?: readonly [number, number];\n /** Background grid. `false` / `null` / omitted = no grid. Pass `{}`\n * for default (3 divisions per axis) or populated GridSettings. */\n grid?: GridSettings | false | null;\n /** Axis lines. `false` / `null` = no axes. Omitted = default-styled\n * axes (on). Pass AxesSettings to customize. */\n axes?: AxesSettings | false | null;\n /** Forwarded to the underlying svg. Consumer opts into focus this way. */\n tabIndex?: number;\n className?: string;\n style?: CSSProperties;\n /** Pointer down on the SVG. Receives both plot- and model-space coords\n * pre-computed so consumers don't repeat the rect/transform dance. */\n onPointerDown?: (e: ReactPointerEvent<SVGSVGElement>, coords: Plot2DCoords) => void;\n onKeyDown?: (e: ReactKeyboardEvent<SVGSVGElement>) => void;\n children?: ReactNode;\n}\n\nexport interface Plot2DHandle {\n readonly svg: SVGSVGElement | null;\n plotToModel(pt: Point): Point;\n modelToPlot(pt: Point): Point;\n /** Convert a DOM event's clientX/clientY (e.g. from a window-attached\n * pointermove during drag) to plot-space. */\n clientToPlot(e: { clientX: number; clientY: number }): Point;\n /** Convenience: clientToPlot → plotToModel. */\n clientToModel(e: { clientX: number; clientY: number }): Point;\n readonly width: number;\n readonly height: number;\n}\n\nexport const Plot2D = forwardRef<Plot2DHandle, Plot2DProps>(function Plot2D(props, ref) {\n const {\n width, height,\n xRange = [0, 1],\n yRange = [0, 1],\n grid,\n axes,\n tabIndex,\n className,\n style,\n onPointerDown,\n onKeyDown,\n children,\n } = props;\n\n const svgRef = useRef<SVGSVGElement | null>(null);\n\n const modelRange: ModelRange = useMemo(\n () => ({ xMin: xRange[0], xMax: xRange[1], yMin: yRange[0], yMax: yRange[1] }),\n [xRange, yRange],\n );\n\n const plotSize = useMemo(() => ({ width, height }), [width, height]);\n\n const clientToPlot = useCallback((e: { clientX: number; clientY: number }): Point => {\n const rect = svgRef.current?.getBoundingClientRect();\n const left = rect?.left ?? 0;\n const top = rect?.top ?? 0;\n return { x: e.clientX - left, y: e.clientY - top };\n }, []);\n\n useEffect(() => {\n dlog('plot2d', 'mount', { width, height });\n return () => dlog('plot2d', 'unmount');\n }, []);\n useImperativeHandle(ref, () => ({\n get svg() { return svgRef.current; },\n plotToModel: (pt: Point) => plotToModel(pt, modelRange, plotSize),\n modelToPlot: (pt: Point) => modelToPlot(pt, modelRange, plotSize),\n clientToPlot,\n clientToModel: (e) => plotToModel(clientToPlot(e), modelRange, plotSize),\n get width() { return plotSize.width; },\n get height() { return plotSize.height; },\n }), [modelRange, plotSize, clientToPlot]);\n\n const handlePointerDown = useCallback((e: ReactPointerEvent<SVGSVGElement>) => {\n if (!onPointerDown) return;\n const plot = clientToPlot(e);\n const model = plotToModel(plot, modelRange, plotSize);\n onPointerDown(e, { plot, model });\n }, [onPointerDown, clientToPlot, modelRange, plotSize]);\n\n const cls = [s.root, className].filter(Boolean).join(' ');\n\n return (\n <svg\n ref={svgRef}\n className={cls}\n style={style}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n tabIndex={tabIndex}\n onPointerDown={onPointerDown ? handlePointerDown : undefined}\n onKeyDown={onKeyDown}\n >\n {grid && (() => {\n const divisions = grid.divisions ?? 3;\n const stroke = grid.color;\n // Evenly-spaced internal divisions, excluding the edges (which\n // belong to the axes). For divisions=3, fractions are 1/4, 2/4, 3/4.\n const fractions: number[] = [];\n for (let i = 1; i <= divisions; i++) fractions.push(i / (divisions + 1));\n return (\n <g>\n {fractions.map((f) => (\n <line\n key={`gx-${f}`}\n data-plot-element=\"grid\"\n className={s.grid}\n stroke={stroke}\n x1={f * width} x2={f * width}\n y1={0} y2={height}\n />\n ))}\n {fractions.map((f) => (\n <line\n key={`gy-${f}`}\n data-plot-element=\"grid\"\n className={s.grid}\n stroke={stroke}\n x1={0} x2={width}\n y1={f * height} y2={f * height}\n />\n ))}\n </g>\n );\n })()}\n {axes !== false && axes !== null && (() => {\n const stroke = axes?.color;\n return (\n <g>\n <line\n data-plot-element=\"axis\"\n className={s.axis}\n stroke={stroke}\n x1={0} x2={width}\n y1={height} y2={height}\n />\n <line\n data-plot-element=\"axis\"\n className={s.axis}\n stroke={stroke}\n x1={0} x2={0}\n y1={0} y2={height}\n />\n </g>\n );\n })()}\n {children}\n </svg>\n );\n});\n","import type { ReactNode } from 'react';\nimport {\n TooltipTrigger as RACTooltipTrigger,\n Tooltip as RACTooltip,\n OverlayArrow,\n type TooltipProps as RACTooltipProps,\n type TooltipTriggerComponentProps,\n} from 'react-aria-components';\nimport s from './Tooltip.module.css';\n\nexport type TooltipTriggerProps = TooltipTriggerComponentProps;\n\n/**\n * TooltipTrigger with kit defaults: ~600 ms open delay, instant close.\n * Wrap a focusable trigger plus a `<Tooltip>`. Non-RAC triggers (plain\n * `<button>` etc.) must be wrapped in `<Focusable>` from\n * react-aria-components so hover/focus props reach the DOM node.\n *\n * Caveat: while a tooltip is open, react-aria captures the first Escape\n * keydown (document-level, capture phase) to dismiss it — app-level\n * Escape handlers (deselect, cancel gesture) see only the second press.\n */\nexport function TooltipTrigger(props: TooltipTriggerProps) {\n const { delay = 600, closeDelay = 0, ...rest } = props;\n return <RACTooltipTrigger delay={delay} closeDelay={closeDelay} {...rest} />;\n}\n\nexport type TooltipProps = Omit<RACTooltipProps, 'children' | 'className'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Tooltip bubble with an arrow pointing at the trigger. Non-interactive\n * content only (ARIA tooltip semantics). Use inside `<TooltipTrigger>`.\n */\nexport function Tooltip(props: TooltipProps) {\n const { children, className, placement = 'top', offset = 8, ...rest } = props;\n return (\n <RACTooltip\n {...rest}\n placement={placement}\n offset={offset}\n className={[s.tooltip, className].filter(Boolean).join(' ')}\n >\n <OverlayArrow className={s.arrow}>\n <svg width={8} height={8} viewBox=\"0 0 8 8\" aria-hidden=\"true\">\n <path d=\"M0 0 L4 4 L8 0\" />\n </svg>\n </OverlayArrow>\n {children}\n </RACTooltip>\n );\n}\n","import { useSyncExternalStore, type ReactNode } from 'react';\nimport { Focusable } from 'react-aria-components';\nimport {\n useActionsRegistry,\n useOptionalDepRegistry,\n evaluateEnabled,\n type Action,\n} from '@weasel-js/core';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport s from './ActionBar.module.css';\n\nconst EMPTY_LIST: readonly Action[] = Object.freeze([]);\nconst noopSubscribe = (): (() => void) => () => {};\n\nexport interface ActionBarProps {\n /** Group key — only actions with `action.group === group` are rendered. */\n group: string;\n /** Layout direction. Defaults to `'horizontal'`. */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Per-id icon overrides — keyed by `action.id`. When an entry is provided\n * it replaces the action's own `icon` for this bar only. Mirrors\n * `PathfinderPanelProps.icons` so call sites that ship custom glyph sets\n * can swap them in without re-registering actions.\n */\n icons?: Record<string, ReactNode>;\n /**\n * Per-id label overrides — keyed by `action.id`. Drives both `aria-label`\n * and `title`. When omitted, the action's own `label` is used.\n */\n labels?: Record<string, string>;\n /** Additional class for the toolbar root. */\n className?: string;\n}\n\nfunction resolveIcon(action: Action, override: ReactNode | undefined): ReactNode {\n if (override !== undefined) return override;\n const i = action.icon;\n if (typeof i === 'function') return i();\n return i;\n}\n\nfunction resolveTitle(label: string, shortcut: string | undefined): string {\n return shortcut ? `${label} (${shortcut})` : label;\n}\n\n/**\n * Generic group-keyed action toolbar. Reads the parent `ActionsRegistry`,\n * filters to actions whose `group` matches `props.group`, and renders one\n * icon button per match. Disabled state is derived from each action's\n * `enabled` predicate via `evaluateEnabled` (so the button greys out and\n * swallows clicks while the keybinding — if any — still fires through the\n * registry's keydown listener; that's the registry's contract, not ours).\n *\n * Visual parity with the WeaselDraw `<PathfinderPanel>` is intentional;\n * this is the generic, registry-driven version. No keyboard navigation\n * (roving tabindex) yet — bar consumers today are short flat strips. Add\n * if/when a long bar lands.\n */\nexport function ActionBar(props: ActionBarProps) {\n const { group, orientation = 'horizontal', icons, labels, className } = props;\n const registry = useActionsRegistry();\n const depReg = useOptionalDepRegistry();\n const all = useSyncExternalStore(\n registry ? registry.subscribe : noopSubscribe,\n registry ? registry.list : () => EMPTY_LIST,\n registry ? registry.list : () => EMPTY_LIST,\n );\n const actions = all.filter((a) => a.group === group);\n\n // Build the deps bag fresh each render — predicates read selection / etc.\n // from these. ActionBar relies on its parent re-rendering when the\n // underlying state changes (e.g. the consumer reads `selection.current`\n // somewhere above us) for `enabled` to reflect the latest values.\n const deps = depReg\n ? {\n selection: depReg.get('selection'),\n scene: depReg.get('scene'),\n history: depReg.get('history'),\n view: depReg.get('view'),\n pointer: depReg.get('pointer'),\n activeTool: depReg.get('activeTool'),\n booleansAdapter: depReg.get('booleansAdapter'),\n }\n : undefined;\n\n const cls = [s.bar, orientation === 'vertical' && s.vertical, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} role=\"toolbar\" aria-label={`${group} actions`}>\n {actions.map((action) => {\n const label = labels?.[action.id] ?? action.label;\n const icon = resolveIcon(action, icons?.[action.id]);\n const { enabled } = evaluateEnabled(action, deps);\n const disabled = !enabled;\n const title = resolveTitle(label, action.shortcut);\n return (\n <TooltipTrigger key={action.id} isDisabled={disabled}>\n <Focusable isDisabled={disabled}>\n <button\n type=\"button\"\n data-testid={`action-bar-item-${action.id}`}\n aria-label={label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n className={s.button}\n onClick={() => {\n if (disabled) return;\n // Dispatch through the registry so the enabled() guard runs.\n // If no registry is in scope the click is a no-op — ActionBar\n // is expected to render under an `ActionsProvider`.\n registry?.trigger(action.id);\n }}\n >\n {icon}\n </button>\n </Focusable>\n <Tooltip>{title}</Tooltip>\n </TooltipTrigger>\n );\n })}\n </div>\n );\n}\n","import type { ShapeModule } from '../types';\n\nconst Pill: ShapeModule = {\n Component: () => null,\n insets: { top: 0, right: 0, bottom: 0, left: 0 },\n stretches: true,\n renderMode: 'css',\n};\n\nexport default Pill;\n","import type { ShapeModule } from '../types';\n\nconst Plain: ShapeModule = {\n Component: () => null,\n insets: { top: 0, right: 0, bottom: 0, left: 0 },\n stretches: true,\n renderMode: 'css',\n};\n\nexport default Plain;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface SquareParams {\n /** 0..1 fraction of the maximum corner rounding (1 = full pill). */\n erosion?: number;\n}\n\nconst DEFAULTS: Required<SquareParams> = { erosion: 0.16 };\n\nconst Square: ShapeModule<SquareParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return { base: 'rounded-rect', baseParams: { erosion: cfg.erosion } };\n },\n insets: { top: 0, right: 0, bottom: 0, left: 0 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Square;\n","import type { ShapeModule } from '../types';\n\nexport interface NotchedParams {\n /** 0..1 fraction of max corner radius. */\n erosion?: number;\n /** rx/ry eccentricity of the corner arcs. */\n eccentricity?: number;\n}\n\nconst DEFAULTS: Required<NotchedParams> = { erosion: 0.28, eccentricity: 1 };\n\nfunction notchedPath(r: number, ecc: number) {\n const W = 100, H = 100;\n const rx = r * ecc;\n const ry = r / ecc;\n return [\n `M ${rx} 0`,\n `L ${W - rx} 0`,\n `A ${rx} ${ry} 0 0 0 ${W} ${ry}`,\n `L ${W} ${H - ry}`,\n `A ${rx} ${ry} 0 0 0 ${W - rx} ${H}`,\n `L ${rx} ${H}`,\n `A ${rx} ${ry} 0 0 0 0 ${H - ry}`,\n `L 0 ${ry}`,\n `A ${rx} ${ry} 0 0 0 ${rx} 0`,\n 'Z',\n ].join(' ');\n}\n\nconst Notched: ShapeModule<NotchedParams> = {\n Component: ({ variant, focused, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const e = Math.max(0, Math.min(cfg.erosion, 1));\n const r = e * 49;\n const ecc = Math.max(0.2, Math.min(cfg.eccentricity, 5));\n const d = notchedPath(r, ecc);\n return (\n <>\n {(variant === 'solid' || variant === 'subtle') && (\n <path className=\"badge-fill\" d={d} />\n )}\n {(variant === 'outline' || variant === 'solid') && (\n <path className=\"badge-stroke\" d={d} />\n )}\n {focused && <path className=\"badge-focus\" d={d} transform=\"translate(50 50) scale(1.06) translate(-50 -50)\" />}\n </>\n );\n },\n insets: { top: 0, right: 4, bottom: 0, left: 4 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Notched;\n","import { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport type { ShapeModule } from '../types';\n\nexport interface PerforatedParams {\n holeRadius?: number;\n holePitch?: number;\n}\n\nconst DEFAULTS: Required<PerforatedParams> = { holeRadius: 3.5, holePitch: 11 };\n\nfunction PerforatedComponent({ variant, focused, params }: {\n variant: 'outline' | 'solid' | 'subtle';\n focused: boolean;\n params: PerforatedParams;\n}) {\n const cfg = { ...DEFAULTS, ...params };\n const maskId = useId();\n const ref = useRef<SVGGElement>(null);\n const [box, setBox] = useState({ w: 100, h: 100 });\n\n useLayoutEffect(() => {\n const svg = ref.current?.ownerSVGElement;\n if (!svg) return;\n const update = () => {\n const r = svg.getBoundingClientRect();\n if (r.width > 0 && r.height > 0) setBox({ w: r.width, h: r.height });\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(update);\n ro.observe(svg);\n return () => ro.disconnect();\n }, []);\n\n // Convert CSS-px hole sizing into viewBox units so holes look circular on either axis.\n const rx = (cfg.holeRadius / box.w) * 100;\n const ry = (cfg.holeRadius / box.h) * 100;\n const nH = Math.max(2, Math.round(box.w / cfg.holePitch));\n const nV = Math.max(2, Math.round(box.h / cfg.holePitch));\n\n const notches: { cx: number; cy: number }[] = [];\n for (let i = 0; i < nH; i++) {\n const t = (i + 0.5) / nH;\n notches.push({ cx: t * 100, cy: 0 });\n notches.push({ cx: t * 100, cy: 100 });\n }\n for (let i = 0; i < nV; i++) {\n const t = (i + 0.5) / nV;\n notches.push({ cx: 0, cy: t * 100 });\n notches.push({ cx: 100, cy: t * 100 });\n }\n\n return (\n <g ref={ref}>\n <defs>\n <mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"-5\" y=\"-5\" width=\"110\" height=\"110\">\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"white\" />\n {notches.map((n, i) => (\n <ellipse key={i} cx={n.cx} cy={n.cy} rx={rx} ry={ry} fill=\"black\" />\n ))}\n </mask>\n </defs>\n {(variant === 'solid' || variant === 'subtle') && (\n <rect className=\"badge-fill\" x=\"0\" y=\"0\" width=\"100\" height=\"100\" mask={`url(#${maskId})`} />\n )}\n {(variant === 'outline' || variant === 'solid') && (\n <rect className=\"badge-stroke\" x=\"0\" y=\"0\" width=\"100\" height=\"100\" mask={`url(#${maskId})`} />\n )}\n {focused && (\n <rect className=\"badge-focus\" x=\"-4\" y=\"-4\" width=\"108\" height=\"108\" mask={`url(#${maskId})`} />\n )}\n </g>\n );\n}\n\n// Avoid unused warning while keeping useEffect imported elsewhere if needed in future.\nvoid useEffect;\n\nconst Perforated: ShapeModule<PerforatedParams> = {\n Component: PerforatedComponent,\n insets: { top: 2, right: 4, bottom: 2, left: 4 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Perforated;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface HexagonParams {\n tipHeight?: number;\n /** Truncate the top and bottom tips, leaving a horizontal flat edge.\n * Measured as a distance from each tip vertically (0 = sharp point, tipHeight = fully flat). */\n tipTruncation?: number;\n}\n\nconst DEFAULTS: Required<HexagonParams> = { tipHeight: 25, tipTruncation: 0 };\n\nfunction hexVerts(tip: number, truncation: number): [number, number][] {\n const t = Math.max(0, Math.min(tip, 49));\n const trunc = Math.max(0, Math.min(truncation, t));\n if (trunc <= 0) {\n return [[50, 0], [100, t], [100, 100 - t], [50, 100], [0, 100 - t], [0, t]];\n }\n const ratio = trunc / t;\n const xL = 50 - 50 * ratio;\n const xR = 50 + 50 * ratio;\n return [\n [xL, trunc], [xR, trunc],\n [100, t], [100, 100 - t],\n [xR, 100 - trunc], [xL, 100 - trunc],\n [0, 100 - t], [0, t],\n ];\n}\n\nconst Hexagon: ShapeModule<HexagonParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return { base: 'polygon', baseParams: { vertices: hexVerts(cfg.tipHeight, cfg.tipTruncation) } };\n },\n insets: { top: 4, right: 6, bottom: 4, left: 6 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Hexagon;\n","import type { ShapeModule } from '../types';\n\nexport interface StarburstParams {\n points?: number;\n outerR?: number;\n innerR?: number;\n rotation?: number;\n erosion?: number;\n}\n\nconst DEFAULTS: Required<StarburstParams> = {\n points: 12,\n outerR: 48,\n innerR: 36,\n rotation: -7,\n erosion: 0,\n};\n\nfunction starburstPath(points: number, outerR: number, innerR: number, rotationDeg: number, erosion: number) {\n const cx = 50, cy = 50;\n const total = points * 2;\n const step = (Math.PI * 2) / total;\n const start = (rotationDeg * Math.PI) / 180;\n const rnd = Math.max(0, Math.min(erosion, 1));\n const pts: [number, number][] = [];\n for (let i = 0; i < total; i++) {\n const r = i % 2 === 0 ? outerR : innerR;\n const a = start + i * step;\n pts.push([cx + Math.cos(a) * r, cy + Math.sin(a) * r]);\n }\n if (rnd <= 0) {\n let d = '';\n for (let i = 0; i < pts.length; i++) {\n d += (i === 0 ? 'M ' : ' L ') + pts[i][0].toFixed(2) + ' ' + pts[i][1].toFixed(2);\n }\n return d + ' Z';\n }\n let d = '';\n for (let i = 0; i < pts.length; i++) {\n const prev = pts[(i + pts.length - 1) % pts.length];\n const curr = pts[i];\n const next = pts[(i + 1) % pts.length];\n const t = rnd * 0.45;\n const enterX = curr[0] + (prev[0] - curr[0]) * t;\n const enterY = curr[1] + (prev[1] - curr[1]) * t;\n const exitX = curr[0] + (next[0] - curr[0]) * t;\n const exitY = curr[1] + (next[1] - curr[1]) * t;\n if (i === 0) d += `M ${enterX.toFixed(2)} ${enterY.toFixed(2)}`;\n else d += ` L ${enterX.toFixed(2)} ${enterY.toFixed(2)}`;\n d += ` Q ${curr[0].toFixed(2)} ${curr[1].toFixed(2)} ${exitX.toFixed(2)} ${exitY.toFixed(2)}`;\n }\n return d + ' Z';\n}\n\nconst Starburst: ShapeModule<StarburstParams> = {\n Component: ({ variant, focused, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const d = starburstPath(cfg.points, cfg.outerR, cfg.innerR, cfg.rotation, cfg.erosion);\n const dFocus = starburstPath(cfg.points, cfg.outerR + 4, cfg.innerR + 3, cfg.rotation, cfg.erosion);\n return (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && <path className=\"badge-focus\" d={dFocus} />}\n </>\n );\n },\n insets: { top: 8, right: 8, bottom: 8, left: 8 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Starburst;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface ScallopedParams {\n scallopRadius?: number;\n scallopSpacing?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<ScallopedParams> = { scallopRadius: 5, scallopSpacing: 12, irregularity: 0 };\n\nconst Scalloped: ShapeModule<ScallopedParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return {\n base: 'rounded-rect',\n baseParams: { erosion: 0 },\n effects: [\n {\n type: 'scallops',\n params: { scallopRadius: cfg.scallopRadius, scallopSpacing: cfg.scallopSpacing, irregularity: cfg.irregularity },\n },\n ],\n };\n },\n insets: { top: 4, right: 6, bottom: 4, left: 6 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Scalloped;\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport type { ShapeModule } from '../types';\n\nexport interface ShieldParams {\n pointDepth?: number;\n shoulderY?: number;\n curveTightness?: number;\n /** 0..1 fraction of max top-corner rounding. */\n erosion?: number;\n}\n\nconst DEFAULTS: Required<ShieldParams> = {\n pointDepth: 100,\n shoulderY: 55,\n curveTightness: 0.7,\n erosion: 0.33,\n};\n\nfunction ShieldComponent({ variant, focused, params }: {\n variant: 'outline' | 'solid' | 'subtle';\n focused: boolean;\n params: ShieldParams;\n}) {\n const cfg = { ...DEFAULTS, ...params };\n const ref = useRef<SVGGElement>(null);\n const [box, setBox] = useState({ w: 100, h: 100 });\n\n useLayoutEffect(() => {\n const svg = ref.current?.ownerSVGElement;\n if (!svg) return;\n const update = () => {\n const r = svg.getBoundingClientRect();\n if (r.width > 0 && r.height > 0) setBox({ w: r.width, h: r.height });\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(update);\n ro.observe(svg);\n return () => ro.disconnect();\n }, []);\n\n const pd = Math.max(60, Math.min(cfg.pointDepth, 110));\n const sh = Math.max(20, Math.min(cfg.shoulderY, pd - 5));\n const cpY = sh + (pd - sh) * Math.max(0.1, Math.min(cfg.curveTightness, 1));\n // Aspect-aware top corner radii (so the rounded corners stay circular in CSS).\n const cornerCss = Math.max(0, Math.min(cfg.erosion, 1)) * 12;\n const rxC = (cornerCss / box.w) * 100;\n const ryC = (cornerCss / box.h) * 100;\n const d = [\n `M ${rxC.toFixed(3)} 0`,\n `L ${(100 - rxC).toFixed(3)} 0`,\n `A ${rxC.toFixed(3)} ${ryC.toFixed(3)} 0 0 1 100 ${ryC.toFixed(3)}`,\n `L 100 ${sh}`,\n `Q 100 ${cpY} 50 ${pd}`,\n `Q 0 ${cpY} 0 ${sh}`,\n `L 0 ${ryC.toFixed(3)}`,\n `A ${rxC.toFixed(3)} ${ryC.toFixed(3)} 0 0 1 ${rxC.toFixed(3)} 0`,\n 'Z',\n ].join(' ');\n return (\n <g ref={ref}>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && (\n <path className=\"badge-focus\" d={d} transform=\"translate(50 50) scale(1.06) translate(-50 -50)\" />\n )}\n </g>\n );\n}\n\nconst Shield: ShapeModule<ShieldParams> = {\n Component: ShieldComponent,\n insets: { top: 2, right: 8, bottom: 14, left: 8 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Shield;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport type RibbonEnd = 'inward' | 'outward' | 'flat';\n\nexport interface RibbonParams {\n left?: RibbonEnd;\n right?: RibbonEnd;\n /** Taper depth in CSS px. The actual pointer width stays fixed regardless\n * of badge width — the underlying base recomputes viewBox vertices at\n * build time using the rendered box dimensions. */\n taperWidth?: number;\n}\n\nconst DEFAULTS: Required<RibbonParams> = { left: 'inward', right: 'outward', taperWidth: 8 };\n\nconst Ribbon: ShapeModule<RibbonParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return { base: 'ribbon', baseParams: cfg };\n },\n // Unused at render time when `compose` is set — the base's insets win — but\n // required by the ShapeModule contract.\n insets: { top: 0, right: 0, bottom: 0, left: 0 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Ribbon;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface BeavisParams {\n points?: number;\n cornerRadius?: number;\n spikeLen?: number;\n spikeBaseWidth?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<BeavisParams> = {\n points: 44,\n cornerRadius: 6,\n spikeLen: 12,\n spikeBaseWidth: 3,\n irregularity: 0,\n};\n\nconst Beavis: ShapeModule<BeavisParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n // Nominal badge half-height for cornerRadius → erosion: real badges are ~22px tall\n // so half = 11. Clamp into [0,1].\n const erosion = Math.max(0, Math.min(1, cfg.cornerRadius / 11));\n return {\n base: 'rounded-rect',\n baseParams: { erosion },\n effects: [\n {\n type: 'spikes',\n params: {\n count: cfg.points,\n length: cfg.spikeLen,\n baseWidth: cfg.spikeBaseWidth,\n vertScale: 1,\n horzScale: 1,\n diagonalScale: 1,\n irregularity: cfg.irregularity,\n },\n },\n ],\n };\n },\n insets: { top: 6, right: 8, bottom: 6, left: 8 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Beavis;\n","import type { ShapeModule } from '../types';\n\nexport interface SparklerParams {\n points?: number;\n outerR?: number;\n innerR?: number;\n rotation?: number;\n}\n\nconst DEFAULTS: Required<SparklerParams> = {\n points: 16,\n outerR: 58,\n innerR: 50,\n rotation: -5,\n};\n\nfunction sparklerPath(points: number, outerR: number, innerR: number, rotation: number) {\n const cx = 50, cy = 50;\n const total = points * 2;\n const step = (Math.PI * 2) / total;\n const start = (rotation * Math.PI) / 180;\n let d = '';\n for (let i = 0; i < total; i++) {\n const r = i % 2 === 0 ? outerR : innerR;\n const a = start + i * step;\n const x = cx + Math.cos(a) * r;\n const y = cy + Math.sin(a) * r;\n d += (i === 0 ? 'M ' : ' L ') + x.toFixed(2) + ' ' + y.toFixed(2);\n }\n return d + ' Z';\n}\n\nconst Sparkler: ShapeModule<SparklerParams> = {\n Component: ({ variant, focused, params }) => {\n const { points, outerR, innerR, rotation } = { ...DEFAULTS, ...params };\n const d = sparklerPath(points, outerR, innerR, rotation);\n const dFocus = sparklerPath(points, outerR + 4, innerR + 3, rotation);\n return (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && <path className=\"badge-focus\" d={dFocus} />}\n </>\n );\n },\n insets: { top: 4, right: 4, bottom: 4, left: 4 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Sparkler;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface PostageParams {\n biteRadius?: number;\n biteSpacing?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<PostageParams> = { biteRadius: 3, biteSpacing: 8, irregularity: 0 };\n\nconst Postage: ShapeModule<PostageParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return {\n base: 'rounded-rect',\n baseParams: { erosion: 0 },\n effects: [\n {\n type: 'bites',\n params: { biteRadius: cfg.biteRadius, biteSpacing: cfg.biteSpacing, irregularity: cfg.irregularity },\n },\n ],\n };\n },\n insets: { top: 4, right: 6, bottom: 4, left: 6 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Postage;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface CloudParams {\n bumpWidth?: number;\n puffiness?: number;\n /** 0..1 fraction of max body roundness. */\n erosion?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<CloudParams> = {\n bumpWidth: 24,\n puffiness: 14,\n erosion: 0.2,\n irregularity: 0,\n};\n\nconst Cloud: ShapeModule<CloudParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return {\n base: 'rounded-rect',\n baseParams: { erosion: cfg.erosion },\n effects: [\n {\n type: 'puffs',\n params: { bumpWidth: cfg.bumpWidth, puffiness: cfg.puffiness, irregularity: cfg.irregularity },\n },\n ],\n };\n },\n insets: { top: 6, right: 8, bottom: 6, left: 8 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Cloud;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface HouseParams {\n eaveY?: number;\n peakHeight?: number;\n roofOverhang?: number;\n}\n\nconst DEFAULTS: Required<HouseParams> = { eaveY: 32, peakHeight: 32, roofOverhang: 0 };\n\nconst House: ShapeModule<HouseParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n const ey = Math.max(2, Math.min(cfg.eaveY, 95));\n const peakY = ey - Math.max(0, cfg.peakHeight);\n const ov = Math.max(0, Math.min(cfg.roofOverhang, 12));\n return {\n base: 'polygon',\n baseParams: {\n vertices: [\n [50, peakY],\n [100 + ov, ey],\n [100, ey],\n [100, 100],\n [0, 100],\n [0, ey],\n [-ov, ey],\n ],\n },\n };\n },\n insets: { top: 10, right: 4, bottom: 0, left: 4 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default House;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport type PlaqueCorner = 'tl' | 'tr' | 'bl' | 'br';\n\nexport interface PlaqueParams {\n bevelWidth?: number;\n lightFrom?: PlaqueCorner;\n rivetRadius?: number;\n rivetInset?: number;\n sheenIntensity?: number;\n}\n\nconst DEFAULTS: Required<PlaqueParams> = {\n bevelWidth: 6,\n lightFrom: 'tl',\n rivetRadius: 2.4,\n rivetInset: 7,\n sheenIntensity: 0.22,\n};\n\nconst Plaque: ShapeModule<PlaqueParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return {\n base: 'rounded-rect',\n baseParams: { erosion: 0 },\n effects: [\n { type: 'bevel', params: { bevelWidth: cfg.bevelWidth, lightFrom: cfg.lightFrom } },\n { type: 'sheen', params: { lightFrom: cfg.lightFrom, intensity: cfg.sheenIntensity } },\n { type: 'rivets', params: { radius: cfg.rivetRadius, inset: cfg.rivetInset, lightFrom: cfg.lightFrom } },\n ],\n };\n },\n insets: { top: 6, right: 8, bottom: 6, left: 8 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Plaque;\n","import type { ShapeModule } from '../types';\n\nexport interface CrestParams {\n topInset?: number;\n pointDepth?: number;\n}\n\nconst DEFAULTS: Required<CrestParams> = { topInset: 12, pointDepth: 100 };\n\nfunction crestPath(topInset: number, pointDepth: number) {\n const ti = Math.max(0, Math.min(topInset, 35));\n const pd = Math.max(60, Math.min(pointDepth, 110));\n // 5-sided shield silhouette with rounded shoulders and a bottom point.\n return [\n `M ${ti} 6`,\n `Q ${ti / 2} 0 ${ti + 4} 0`,\n `L ${100 - ti - 4} 0`,\n `Q ${100 - ti / 2} 0 ${100 - ti} 6`,\n `L ${100 - ti * 0.4} ${pd * 0.35}`,\n `Q ${100 - ti} ${pd * 0.7} 50 ${pd}`,\n `Q ${ti} ${pd * 0.7} ${ti * 0.4} ${pd * 0.35}`,\n 'Z',\n ].join(' ');\n}\n\nconst Crest: ShapeModule<CrestParams> = {\n Component: ({ variant, focused, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const d = crestPath(cfg.topInset, cfg.pointDepth);\n return (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && (\n <path className=\"badge-focus\" d={d} transform=\"translate(50 50) scale(1.06) translate(-50 -50)\" />\n )}\n </>\n );\n },\n insets: { top: 4, right: 10, bottom: 14, left: 10 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Crest;\n","import type { ShapeModule } from '../types';\n\nconst d = 'M 35 0 L 30 12 Q 15 30 15 55 Q 15 75 30 90 L 30 100 L 70 100 L 70 90 Q 85 75 85 55 Q 85 30 70 12 L 65 0 Z';\n\nconst Urn: ShapeModule = {\n Component: ({ variant, focused }) => (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && (\n <path className=\"badge-focus\" d={d} transform=\"translate(50 50) scale(1.05) translate(-50 -50)\" />\n )}\n </>\n ),\n insets: { top: 4, right: 12, bottom: 4, left: 12 },\n stretches: true,\n};\n\nexport default Urn;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface CoffinParams {\n headX?: number;\n headHalfHeight?: number;\n shoulderX?: number;\n shoulderHalfHeight?: number;\n footX?: number;\n footHalfHeight?: number;\n}\n\nconst DEFAULTS: Required<CoffinParams> = {\n headX: 6,\n headHalfHeight: 23,\n shoulderX: 33,\n shoulderHalfHeight: 36,\n footX: 100,\n footHalfHeight: 29,\n};\n\nconst Coffin: ShapeModule<CoffinParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n const hX = Math.max(0, Math.min(cfg.headX, 40));\n const sX = Math.max(hX + 1, Math.min(cfg.shoulderX, 70));\n const fX = Math.max(sX + 1, Math.min(cfg.footX, 100));\n const hH = Math.max(2, Math.min(cfg.headHalfHeight, 50));\n const sDelta = Math.max(0, Math.min(cfg.shoulderHalfHeight, 50));\n const sH = Math.min(50, hH + sDelta);\n const fH = Math.max(2, Math.min(cfg.footHalfHeight, 50));\n return {\n base: 'polygon',\n baseParams: {\n vertices: [\n [hX, 50 - hH],\n [sX, 50 - sH],\n [fX, 50 - fH],\n [fX, 50 + fH],\n [sX, 50 + sH],\n [hX, 50 + hH],\n ],\n },\n };\n },\n insets: { top: 4, right: 6, bottom: 4, left: 11 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Coffin;\n","import type { ShapeModule } from '../types';\n\nexport interface ReceiptParams {\n teeth?: number;\n tearDepth?: number;\n sideToTopRatio?: number;\n}\n\nconst DEFAULTS: Required<ReceiptParams> = { teeth: 11, tearDepth: 4, sideToTopRatio: 3 };\n\nfunction receiptPath(teeth: number, depth: number) {\n const N = Math.max(3, Math.floor(teeth));\n const baseDepth = Math.max(1, depth);\n const depthAt = (i: number) => baseDepth * (0.55 + 0.55 * Math.abs(Math.sin(i * 1.73 + 0.5)));\n let d = `M 0 0 L 100 0`;\n for (let i = 0; i < N; i++) {\n const yMid = ((i + 0.5) / N) * 100;\n const yEnd = ((i + 1) / N) * 100;\n d += ` L ${(100 - depthAt(i)).toFixed(3)} ${yMid.toFixed(3)} L 100 ${yEnd.toFixed(3)}`;\n }\n d += ` L 0 100`;\n for (let i = N - 1; i >= 0; i--) {\n const yMid = ((i + 0.5) / N) * 100;\n const yStart = (i / N) * 100;\n d += ` L ${depthAt(i + N).toFixed(3)} ${yMid.toFixed(3)} L 0 ${yStart.toFixed(3)}`;\n }\n return d + ' Z';\n}\n\nconst BASE_TOP = 2;\n\nconst Receipt: ShapeModule<ReceiptParams> = {\n Component: ({ variant, focused, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const d = receiptPath(cfg.teeth, cfg.tearDepth);\n return (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={d} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={d} />}\n {focused && (\n <path className=\"badge-focus\" d={d} transform=\"translate(50 50) scale(1.04) translate(-50 -50)\" />\n )}\n </>\n );\n },\n insets: (params) => {\n const ratio = Math.max(0.2, Math.min(params.sideToTopRatio ?? DEFAULTS.sideToTopRatio, 10));\n const top = BASE_TOP;\n const side = Math.round(top * ratio);\n return { top, right: side, bottom: top, left: side };\n },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Receipt;\n","import type { ShapeModule } from '../types';\n\nconst body = 'M 8 30 Q 0 50 8 70 L 92 70 Q 100 50 92 30 Z';\n\nconst Wood: ShapeModule = {\n Component: ({ variant, focused }) => (\n <>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={body} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={body} />}\n {(variant === 'outline' || variant === 'solid') && (\n <>\n {/* Long flowing grain curves */}\n <path className=\"badge-stroke\" d=\"M 12 38 Q 30 35 50 39 T 88 38\" opacity={0.5} fill=\"none\" />\n <path className=\"badge-stroke\" d=\"M 10 46 Q 36 49 54 45 T 90 47\" opacity={0.4} fill=\"none\" />\n <path className=\"badge-stroke\" d=\"M 12 54 Q 28 51 52 56 T 88 54\" opacity={0.55} fill=\"none\" />\n <path className=\"badge-stroke\" d=\"M 10 62 Q 40 65 58 61 T 90 62\" opacity={0.4} fill=\"none\" />\n {/* Knots (concentric ellipses around a darker core) */}\n <ellipse className=\"badge-stroke\" cx=\"32\" cy=\"50\" rx=\"3.4\" ry=\"2.8\" opacity={0.7} fill=\"none\" />\n <ellipse className=\"badge-stroke\" cx=\"32\" cy=\"50\" rx=\"1.4\" ry=\"1.1\" opacity={0.85} fill=\"none\" />\n <ellipse className=\"badge-stroke\" cx=\"70\" cy=\"42\" rx=\"2.4\" ry=\"2\" opacity={0.6} fill=\"none\" />\n </>\n )}\n {focused && (\n <path className=\"badge-focus\" d={body} transform=\"translate(50 50) scale(1.05) translate(-50 -50)\" />\n )}\n </>\n ),\n insets: { top: 10, right: 4, bottom: 10, left: 4 },\n stretches: true,\n};\n\nexport default Wood;\n","import type { ShapeModule, ShapeComposeSpec } from '../types';\n\nexport interface QuatrefoilParams {\n spikeR?: number;\n lobeR?: number;\n valleyR?: number;\n valleyAt?: number;\n spikeCurvature?: number;\n spikeBend?: number;\n spikeTipErosion?: number;\n lobeCurvature?: number;\n lobeBend?: number;\n lobeTipErosion?: number;\n valleySmooth?: number;\n rotation?: number;\n samples?: number;\n}\n\nconst DEFAULTS: Required<QuatrefoilParams> = {\n spikeR: 50,\n lobeR: 42,\n valleyR: 25,\n valleyAt: 0.5,\n spikeCurvature: 1,\n spikeBend: 0,\n spikeTipErosion: 0,\n lobeCurvature: 1,\n lobeBend: 0,\n lobeTipErosion: 0,\n valleySmooth: 3,\n rotation: 0,\n samples: 192,\n};\n\nconst Quatrefoil: ShapeModule<QuatrefoilParams> = {\n compose: (params): ShapeComposeSpec => {\n const cfg = { ...DEFAULTS, ...params };\n return { base: 'quatrefoil', baseParams: cfg };\n },\n insets: { top: 10, right: 14, bottom: 10, left: 14 },\n stretches: true,\n defaults: DEFAULTS,\n};\n\nexport default Quatrefoil;\n","import type { BadgeShape, ShapeModule } from '../types';\nimport Pill from './Pill';\nimport Plain from './Plain';\nimport Square, { type SquareParams } from './Square';\nimport Notched, { type NotchedParams } from './Notched';\nimport Perforated, { type PerforatedParams } from './Perforated';\nimport Hexagon, { type HexagonParams } from './Hexagon';\nimport Starburst, { type StarburstParams } from './Starburst';\nimport Scalloped, { type ScallopedParams } from './Scalloped';\nimport Shield, { type ShieldParams } from './Shield';\nimport Ribbon, { type RibbonParams } from './Ribbon';\nimport Beavis, { type BeavisParams } from './Beavis';\nimport Sparkler, { type SparklerParams } from './Sparkler';\nimport Postage, { type PostageParams } from './Postage';\nimport Cloud, { type CloudParams } from './Cloud';\nimport House, { type HouseParams } from './House';\nimport Plaque, { type PlaqueParams } from './Plaque';\nimport Crest, { type CrestParams } from './Crest';\nimport Urn from './Urn';\nimport Coffin, { type CoffinParams } from './Coffin';\nimport Receipt, { type ReceiptParams } from './Receipt';\nimport Wood from './Wood';\nimport Quatrefoil, { type QuatrefoilParams } from './Quatrefoil';\n\nexport interface BadgeShapeParams {\n pill: Record<string, never>;\n plain: Record<string, never>;\n square: SquareParams;\n notched: NotchedParams;\n perforated: PerforatedParams;\n hexagon: HexagonParams;\n starburst: StarburstParams;\n scalloped: ScallopedParams;\n shield: ShieldParams;\n ribbon: RibbonParams;\n beavis: BeavisParams;\n sparkler: SparklerParams;\n postage: PostageParams;\n cloud: CloudParams;\n house: HouseParams;\n plaque: PlaqueParams;\n crest: CrestParams;\n urn: Record<string, never>;\n coffin: CoffinParams;\n receipt: ReceiptParams;\n wood: Record<string, never>;\n quatrefoil: QuatrefoilParams;\n}\n\nexport const SHAPES: Record<BadgeShape, ShapeModule<any>> = {\n pill: Pill,\n plain: Plain,\n square: Square,\n notched: Notched,\n perforated: Perforated,\n hexagon: Hexagon,\n starburst: Starburst,\n scalloped: Scalloped,\n shield: Shield,\n ribbon: Ribbon,\n beavis: Beavis,\n sparkler: Sparkler,\n postage: Postage,\n cloud: Cloud,\n house: House,\n plaque: Plaque,\n crest: Crest,\n urn: Urn,\n coffin: Coffin,\n receipt: Receipt,\n wood: Wood,\n quatrefoil: Quatrefoil,\n};\n\nexport const ALL_SHAPES: BadgeShape[] = [\n 'pill', 'plain', 'square', 'notched', 'perforated',\n 'hexagon',\n 'starburst', 'scalloped', 'shield', 'ribbon', 'beavis',\n 'sparkler', 'postage', 'cloud', 'house', 'plaque',\n 'crest', 'urn', 'coffin', 'receipt', 'wood', 'quatrefoil',\n];\n","import type { BaseModule, BaseSampler, PerimeterPoint } from './types';\n\nexport interface ChamferedRectParams {\n /** CSS px length of each 45° corner chamfer. */\n chamfer?: number;\n}\n\nconst DEFAULTS: Required<ChamferedRectParams> = { chamfer: 6 };\n\nconst ChamferedRect: BaseModule<ChamferedRectParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n // Chamfer per axis (CSS px → viewBox per-axis).\n const cx = cfg.chamfer * sx;\n const cy = cfg.chamfer * sy;\n // 8 vertices traced clockwise from top-left chamfer start.\n const verts: [number, number][] = [\n [cx, 0],\n [100 - cx, 0],\n [100, cy],\n [100, 100 - cy],\n [100 - cx, 100],\n [cx, 100],\n [0, 100 - cy],\n [0, cy],\n ];\n // Pre-compute CSS lengths of each segment and cumulative sums.\n const cssLens: number[] = [];\n const cumulative: number[] = [0];\n for (let i = 0; i < verts.length; i++) {\n const a = verts[i];\n const b = verts[(i + 1) % verts.length];\n const dx = (b[0] - a[0]) / sx;\n const dy = (b[1] - a[1]) / sy;\n const len = Math.hypot(dx, dy);\n cssLens.push(len);\n cumulative.push(cumulative[cumulative.length - 1] + len);\n }\n const totalCss = cumulative[cumulative.length - 1];\n\n const bodyPath = `M ${verts[0][0]} ${verts[0][1]} ` +\n verts.slice(1).map(([x, y]) => `L ${x} ${y}`).join(' ') + ' Z';\n\n const perimeterAt = (s: number): PerimeterPoint => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n for (let i = 0; i < cssLens.length; i++) {\n const segStart = cumulative[i];\n const segEnd = cumulative[i + 1];\n if (sm <= segEnd + 1e-9) {\n const t = cssLens[i] > 0 ? (sm - segStart) / cssLens[i] : 0;\n const a = verts[i];\n const b = verts[(i + 1) % verts.length];\n const x = a[0] + (b[0] - a[0]) * t;\n const y = a[1] + (b[1] - a[1]) * t;\n // Outward normal: edge direction in CSS rotated 90° clockwise.\n const ex = (b[0] - a[0]) / sx;\n const ey = (b[1] - a[1]) / sy;\n const el = Math.hypot(ex, ey) || 1;\n // Going clockwise around the body, outward = (-tangent_y, tangent_x)... actually\n // for clockwise traversal in SVG (y-down), outward is to the LEFT of direction,\n // which is (ey, -ex) normalised.\n const nx = ey / el;\n const ny = -ex / el;\n return { x, y, nx, ny };\n }\n }\n return { x: verts[0][0], y: verts[0][1], nx: 0, ny: -1 };\n };\n\n const sampler: BaseSampler = { bodyPath, perimeterAt, totalCss };\n return sampler;\n },\n defaults: DEFAULTS,\n insets: { top: 0, right: 4, bottom: 0, left: 4 },\n};\n\nexport default ChamferedRect;\n","import type { BaseModule, BaseSampler, PerimeterPoint } from './types';\n\nexport interface RoundedRectParams {\n /** 0..1 fraction of the maximum corner rounding (1 = full pill / ellipse). */\n erosion?: number;\n /** Stretch the corner arcs horizontally vs vertically. 1 = circular at the badge's\n * native aspect; >1 wider corner arcs; <1 taller corner arcs. */\n eccentricity?: number;\n /** 0..1 vertical squeeze applied to the left and right ends, linearly tapering toward\n * the middle. 1 = ends fully collapsed to the centerline (lemon/lens silhouette). */\n pinch?: number;\n}\n\nconst DEFAULTS: Required<RoundedRectParams> = { erosion: 0.16, eccentricity: 1, pinch: 0 };\n\nconst RoundedRect: BaseModule<RoundedRectParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const erosion = Math.max(0, Math.min(cfg.erosion, 1));\n const ecc = Math.max(0.1, Math.min(cfg.eccentricity, 10));\n // Max corner radius in CSS = half of the shorter axis (so erosion=1 gives a full pill/ellipse).\n const cornerCss = erosion * (Math.min(boxW, boxH) / 2);\n const rxC = cornerCss * sx * ecc;\n const ryC = cornerCss * sy / ecc;\n const rx = Math.max(0, Math.min(rxC, 50));\n const ry = Math.max(0, Math.min(ryC, 50));\n\n const topCss = (100 - 2 * rx) / sx;\n const sideCss = (100 - 2 * ry) / sy;\n const denom = cornerCss + cornerCss || 1;\n const hh = 0;\n const arcCss = (Math.PI * denom * (1 + 3 * hh / (10 + Math.sqrt(4 - 3 * hh)))) / 4;\n\n const segments = [\n { kind: 'h-edge', cssLen: topCss },\n { kind: 'tr-arc', cssLen: arcCss },\n { kind: 'v-edge', cssLen: sideCss },\n { kind: 'br-arc', cssLen: arcCss },\n { kind: 'h-edge-b', cssLen: topCss },\n { kind: 'bl-arc', cssLen: arcCss },\n { kind: 'v-edge-l', cssLen: sideCss },\n { kind: 'tl-arc', cssLen: arcCss },\n ];\n const cum: number[] = [0];\n for (const s of segments) cum.push(cum[cum.length - 1] + s.cssLen);\n const totalCss = cum[cum.length - 1];\n\n const perimeterAt = (s: number): PerimeterPoint => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n let segIdx = 0;\n while (segIdx < segments.length - 1 && sm > cum[segIdx + 1]) segIdx++;\n const local = sm - cum[segIdx];\n const seg = segments[segIdx];\n const t = seg.cssLen > 0 ? local / seg.cssLen : 0;\n switch (seg.kind) {\n case 'h-edge':\n return { x: rx + (100 - 2 * rx) * t, y: 0, nx: 0, ny: -1 };\n case 'tr-arc': {\n const ang = -Math.PI / 2 + t * (Math.PI / 2);\n return {\n x: (100 - rx) + rx * Math.cos(ang),\n y: ry + ry * Math.sin(ang),\n nx: Math.cos(ang),\n ny: Math.sin(ang),\n };\n }\n case 'v-edge':\n return { x: 100, y: ry + (100 - 2 * ry) * t, nx: 1, ny: 0 };\n case 'br-arc': {\n const ang = t * (Math.PI / 2);\n return {\n x: (100 - rx) + rx * Math.cos(ang),\n y: (100 - ry) + ry * Math.sin(ang),\n nx: Math.cos(ang),\n ny: Math.sin(ang),\n };\n }\n case 'h-edge-b':\n return { x: (100 - rx) - (100 - 2 * rx) * t, y: 100, nx: 0, ny: 1 };\n case 'bl-arc': {\n const ang = Math.PI / 2 + t * (Math.PI / 2);\n return {\n x: rx + rx * Math.cos(ang),\n y: (100 - ry) + ry * Math.sin(ang),\n nx: Math.cos(ang),\n ny: Math.sin(ang),\n };\n }\n case 'v-edge-l':\n return { x: 0, y: (100 - ry) - (100 - 2 * ry) * t, nx: -1, ny: 0 };\n case 'tl-arc': {\n const ang = Math.PI + t * (Math.PI / 2);\n return {\n x: rx + rx * Math.cos(ang),\n y: ry + ry * Math.sin(ang),\n nx: Math.cos(ang),\n ny: Math.sin(ang),\n };\n }\n }\n return { x: 0, y: 0, nx: 0, ny: -1 };\n };\n\n // Vertical pinch toward the centerline, parameterised by horizontal distance from x=50.\n // pinch=0 → identity; pinch=1 → collapses the left/right ends to y=50.\n // Erosion supersedes pinch: as the corners round into a full ellipse there's nothing\n // structurally left to pinch (the ends already taper to the centerline). Scale by\n // (1 - erosion) so a fully pilled badge ignores the slider.\n const pinch = Math.max(0, Math.min(cfg.pinch, 1)) * (1 - erosion);\n const pinchY = (x: number, y: number): number => {\n if (pinch === 0) return y;\n const d = Math.abs(x - 50) / 50;\n return 50 + (y - 50) * (1 - d * pinch);\n };\n\n let bodyPath: string;\n let perimeterAtFinal = perimeterAt;\n if (pinch === 0) {\n bodyPath = [\n `M ${rx} 0`,\n `L ${100 - rx} 0`,\n `A ${rx} ${ry} 0 0 1 100 ${ry}`,\n `L 100 ${100 - ry}`,\n `A ${rx} ${ry} 0 0 1 ${100 - rx} 100`,\n `L ${rx} 100`,\n `A ${rx} ${ry} 0 0 1 0 ${100 - ry}`,\n `L 0 ${ry}`,\n `A ${rx} ${ry} 0 0 1 ${rx} 0`,\n 'Z',\n ].join(' ');\n } else {\n // Sample the unpinched perimeter densely and apply the y-pinch to each point.\n const N = 240;\n const samplePts: { x: number; y: number }[] = [];\n for (let i = 0; i < N; i++) {\n const sCss = (i / N) * totalCss;\n const pt = perimeterAt(sCss);\n samplePts.push({ x: pt.x, y: pinchY(pt.x, pt.y) });\n }\n bodyPath = samplePts.reduce((acc, p, i) =>\n acc + (i === 0 ? `M ${p.x.toFixed(3)} ${p.y.toFixed(3)}` : ` L ${p.x.toFixed(3)} ${p.y.toFixed(3)}`),\n '') + ' Z';\n\n // Warped perimeterAt: pinched point + normal recomputed from local warped tangent.\n perimeterAtFinal = (s: number) => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const pt = perimeterAt(sm);\n const x = pt.x;\n const y = pinchY(pt.x, pt.y);\n const eps = totalCss / 480;\n const a = perimeterAt(sm - eps);\n const b = perimeterAt(sm + eps);\n const ax = a.x, ay = pinchY(a.x, a.y);\n const bx = b.x, by = pinchY(b.x, b.y);\n const tx = (bx - ax) / sx;\n const ty = (by - ay) / sy;\n const tl = Math.hypot(tx, ty) || 1;\n return { x, y, nx: ty / tl, ny: -tx / tl };\n };\n }\n\n const sampler: BaseSampler = { bodyPath, perimeterAt: perimeterAtFinal, totalCss };\n return sampler;\n },\n defaults: DEFAULTS,\n insets: { top: 0, right: 4, bottom: 0, left: 4 },\n};\n\nexport default RoundedRect;\n","import type { BaseSampler, PerimeterPoint } from './types';\n\n/** Build a BaseSampler from a clockwise polygon's vertex list (viewBox 0..100). */\nexport function polygonSampler(verts: [number, number][], boxW: number, boxH: number): BaseSampler {\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const cssLens: number[] = [];\n const cumulative: number[] = [0];\n for (let i = 0; i < verts.length; i++) {\n const a = verts[i];\n const b = verts[(i + 1) % verts.length];\n const dx = (b[0] - a[0]) / sx;\n const dy = (b[1] - a[1]) / sy;\n const len = Math.hypot(dx, dy);\n cssLens.push(len);\n cumulative.push(cumulative[cumulative.length - 1] + len);\n }\n const totalCss = cumulative[cumulative.length - 1];\n const bodyPath = `M ${verts[0][0]} ${verts[0][1]} ` +\n verts.slice(1).map(([x, y]) => `L ${x} ${y}`).join(' ') + ' Z';\n const perimeterAt = (s: number): PerimeterPoint => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n for (let i = 0; i < cssLens.length; i++) {\n const segStart = cumulative[i];\n const segEnd = cumulative[i + 1];\n if (sm <= segEnd + 1e-9) {\n const t = cssLens[i] > 0 ? (sm - segStart) / cssLens[i] : 0;\n const a = verts[i];\n const b = verts[(i + 1) % verts.length];\n const x = a[0] + (b[0] - a[0]) * t;\n const y = a[1] + (b[1] - a[1]) * t;\n const ex = (b[0] - a[0]) / sx;\n const ey = (b[1] - a[1]) / sy;\n const el = Math.hypot(ex, ey) || 1;\n const nx = ey / el;\n const ny = -ex / el;\n return { x, y, nx, ny };\n }\n }\n return { x: verts[0][0], y: verts[0][1], nx: 0, ny: -1 };\n };\n return { bodyPath, perimeterAt, totalCss };\n}\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\nexport interface PolygonParams {\n /** Vertices in viewBox 0..100 coordinates, traced clockwise. */\n vertices?: [number, number][];\n}\n\nconst DEFAULT_VERTS: [number, number][] = [\n [0, 0], [100, 0], [100, 100], [0, 100],\n];\n\nconst Polygon: BaseModule<PolygonParams> = {\n build: (params, boxW, boxH) => {\n const verts = (params?.vertices && params.vertices.length >= 3) ? params.vertices : DEFAULT_VERTS;\n return polygonSampler(verts, boxW, boxH);\n },\n defaults: { vertices: DEFAULT_VERTS },\n insets: { top: 0, right: 4, bottom: 0, left: 4 },\n};\n\nexport default Polygon;\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\nexport type PuzzleEdge = 'flat' | 'out' | 'in';\n\nexport interface PuzzleParams {\n top?: PuzzleEdge;\n right?: PuzzleEdge;\n bottom?: PuzzleEdge;\n left?: PuzzleEdge;\n /** Tab radius in viewBox units (0..50). */\n tabSize?: number;\n /** Sample density per tab arc. */\n arcSamples?: number;\n}\n\nconst DEFAULTS: Required<PuzzleParams> = {\n top: 'out',\n right: 'in',\n bottom: 'out',\n left: 'in',\n tabSize: 12,\n arcSamples: 18,\n};\n\n// Fraction of the tab radius the tab center sits beyond the body edge. A center offset of\n// `OFFSET_RATIO * r` gives a tab whose chord (intersection with the edge) has half-length\n// √(1 − OFFSET_RATIO²) · r. Smaller offset → wider neck.\nconst OFFSET_RATIO = 0.62;\n\n/** Sample a side's vertices walking clockwise from `start` to `end` along the edge, possibly\n * detouring around a tab. The starting vertex `start` is NOT included; the ending vertex `end`\n * IS included so successive edge calls chain cleanly. */\nfunction edgeVertices(\n start: [number, number],\n end: [number, number],\n outwardX: number,\n outwardY: number,\n type: PuzzleEdge,\n tabR: number,\n arcSamples: number,\n): [number, number][] {\n if (type === 'flat') return [end];\n const sign = type === 'out' ? 1 : -1;\n const dx = end[0] - start[0];\n const dy = end[1] - start[1];\n const len = Math.hypot(dx, dy) || 1;\n const tx = dx / len;\n const ty = dy / len;\n const mx = (start[0] + end[0]) / 2;\n const my = (start[1] + end[1]) / 2;\n const cx = mx + outwardX * sign * tabR * OFFSET_RATIO;\n const cy = my + outwardY * sign * tabR * OFFSET_RATIO;\n const half = tabR * Math.sqrt(Math.max(0, 1 - OFFSET_RATIO * OFFSET_RATIO));\n const p1: [number, number] = [mx - tx * half, my - ty * half];\n const p2: [number, number] = [mx + tx * half, my + ty * half];\n const apex: [number, number] = [\n mx + outwardX * sign * (tabR + tabR * (1 - OFFSET_RATIO)),\n my + outwardY * sign * (tabR + tabR * (1 - OFFSET_RATIO)),\n ];\n const r = Math.hypot(p1[0] - cx, p1[1] - cy);\n const θ1 = Math.atan2(p1[1] - cy, p1[0] - cx);\n const θ2 = Math.atan2(p2[1] - cy, p2[0] - cx);\n const θApex = Math.atan2(apex[1] - cy, apex[0] - cx);\n // Choose the arc direction that sweeps through θApex.\n const TAU = Math.PI * 2;\n const apexFromStart = ((θApex - θ1) % TAU + TAU) % TAU;\n const endFromStart = ((θ2 - θ1) % TAU + TAU) % TAU;\n // If the CCW sweep covers apex before reaching θ2, use CCW; otherwise CW.\n const sweep = apexFromStart < endFromStart ? endFromStart : endFromStart - TAU;\n\n const out: [number, number][] = [];\n out.push(p1);\n for (let i = 1; i <= arcSamples; i++) {\n const t = i / arcSamples;\n const θ = θ1 + sweep * t;\n out.push([cx + r * Math.cos(θ), cy + r * Math.sin(θ)]);\n }\n out.push(end);\n return out;\n}\n\nconst Puzzle: BaseModule<PuzzleParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const r = Math.max(2, Math.min(cfg.tabSize, 40));\n const N = Math.max(6, Math.floor(cfg.arcSamples));\n // Clockwise traversal of the unit rect: TL → TR → BR → BL → TL.\n const TL: [number, number] = [0, 0];\n const TR: [number, number] = [100, 0];\n const BR: [number, number] = [100, 100];\n const BL: [number, number] = [0, 100];\n const verts: [number, number][] = [TL];\n verts.push(...edgeVertices(TL, TR, 0, -1, cfg.top, r, N));\n verts.push(...edgeVertices(TR, BR, 1, 0, cfg.right, r, N));\n verts.push(...edgeVertices(BR, BL, 0, 1, cfg.bottom, r, N));\n verts.push(...edgeVertices(BL, TL, -1, 0, cfg.left, r, N));\n // Drop the trailing duplicate of TL.\n if (verts.length > 1 && verts[verts.length - 1][0] === TL[0] && verts[verts.length - 1][1] === TL[1]) {\n verts.pop();\n }\n return polygonSampler(verts, boxW, boxH);\n },\n defaults: DEFAULTS,\n insets: { top: 12, right: 16, bottom: 12, left: 16 },\n};\n\nexport default Puzzle;\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\n/**\n * 8-fold-symmetric polar shape. The whole silhouette is defined by a single curve r(s)\n * over s ∈ [0, 1], where s=0 is the cardinal direction and s=1 is the diagonal. The full\n * shape comes from reflecting that octant curve eight times around the center. The curve\n * itself is two superellipse segments meeting at a valley:\n *\n * s ∈ [0, valleyAt] → spike segment, from `spikeR` down to `valleyR`\n * s ∈ [valleyAt, 1] → lobe segment, from `valleyR` up to `lobeR`\n *\n * Each segment has its own curvature, bend bias, and tip-erosion controls.\n */\nexport interface QuatrefoilParams {\n /** Radius at s=0 (cardinal direction). */\n spikeR?: number;\n /** Radius at s=1 (diagonal direction). */\n lobeR?: number;\n /** Radius at the junction between spike and lobe segments. */\n valleyR?: number;\n /** Position of the junction in [0, 1]. 0.5 = symmetric octant; <0.5 narrows the spike side. */\n valleyAt?: number;\n /** Spike-segment curvature (superellipse exponent). 1 = flat diagonal sides; <1 caves\n * inward (concave/star); >1 bulges outward (convex/square-shouldered). */\n spikeCurvature?: number;\n /** Spike-segment bend bias. Positive shifts the curve's bend toward the tip; negative\n * toward the base. */\n spikeBend?: number;\n /** Flat-top truncation of the cardinal tip (0..1). */\n spikeTipErosion?: number;\n /** Lobe-segment curvature, same semantics as spike. */\n lobeCurvature?: number;\n /** Lobe-segment bend bias. */\n lobeBend?: number;\n /** Flat-top truncation of the diagonal lobe peak (0..1). */\n lobeTipErosion?: number;\n /** Smooth the corner at the valley junction. 0 = sharp, higher = puffier crossover. */\n valleySmooth?: number;\n /** Rotate the pattern in degrees. */\n rotation?: number;\n /** Polygon sample count. */\n samples?: number;\n}\n\nconst DEFAULTS: Required<QuatrefoilParams> = {\n spikeR: 50,\n lobeR: 42,\n valleyR: 25,\n valleyAt: 0.5,\n spikeCurvature: 1,\n spikeBend: 0,\n spikeTipErosion: 0,\n lobeCurvature: 1,\n lobeBend: 0,\n lobeTipErosion: 0,\n valleySmooth: 3,\n rotation: 0,\n samples: 192,\n};\n\nfunction smoothMax(a: number, b: number, g: number): number {\n const d = a - b;\n return (a + b + Math.sqrt(d * d + g * g)) / 2;\n}\n\n/** Generalised superellipse-style profile from (0, 0) to (1, 1) with asymmetric exponents\n * controlled by curvature and bend. erosion truncates the top of the curve. */\nfunction curveSegment(t: number, curvature: number, bend: number, erosion: number): number {\n if (t <= 0) return 0;\n if (t >= 1) return 1 - erosion;\n const expA = Math.max(0.1, curvature * (1 + bend));\n const expB = Math.max(0.1, curvature * (1 - bend));\n const v = Math.pow(1 - Math.pow(1 - t, expA), 1 / expB);\n return Math.min(v, 1 - erosion);\n}\n\nexport function quatrefoilVertices(params: QuatrefoilParams = {}): [number, number][] {\n const cfg = { ...DEFAULTS, ...params };\n const spike = Math.max(5, Math.min(cfg.spikeR, 50));\n const lobe = Math.max(5, Math.min(cfg.lobeR, 50 * Math.SQRT2));\n const valley = Math.max(0, Math.min(cfg.valleyR, Math.min(spike, lobe)));\n const vAt = Math.max(0.05, Math.min(cfg.valleyAt, 0.95));\n const sCurv = Math.max(0.2, cfg.spikeCurvature);\n const sBend = Math.max(-0.95, Math.min(cfg.spikeBend, 0.95));\n const sErode = Math.max(0, Math.min(cfg.spikeTipErosion, 1));\n const lCurv = Math.max(0.2, cfg.lobeCurvature);\n const lBend = Math.max(-0.95, Math.min(cfg.lobeBend, 0.95));\n const lErode = Math.max(0, Math.min(cfg.lobeTipErosion, 1));\n const smooth = Math.max(0, cfg.valleySmooth);\n const rot = (cfg.rotation * Math.PI) / 180;\n const N = Math.max(24, Math.floor(cfg.samples));\n const cx = 50, cy = 50;\n const verts: [number, number][] = [];\n for (let i = 0; i < N; i++) {\n const θ = (i / N) * 2 * Math.PI;\n const s = Math.abs(Math.sin(2 * (θ - rot))); // 0..1 across each octant\n // t1: spike-side parameter, 1 at cardinal (s=0), 0 at valley (s=vAt). Clamped to ≥ 0.\n const t1 = (vAt - s) / vAt;\n // t2: lobe-side parameter, 0 at valley (s=vAt), 1 at diagonal (s=1). Clamped to ≥ 0.\n const t2 = (s - vAt) / (1 - vAt);\n const rSpike = valley + (spike - valley) * curveSegment(Math.max(0, t1), sCurv, sBend, sErode);\n const rLobe = valley + (lobe - valley) * curveSegment(Math.max(0, t2), lCurv, lBend, lErode);\n // Smooth corner at the valley: outside the smoothing band both rSpike and rLobe equal\n // `valley` on the inactive side, so smoothMax just picks the active one. Near the join\n // both are close to valley and smoothMax lifts the corner.\n const r = smoothMax(rSpike, rLobe, smooth);\n verts.push([cx + r * Math.cos(θ), cy + r * Math.sin(θ)]);\n }\n return verts;\n}\n\nconst Quatrefoil: BaseModule<QuatrefoilParams> = {\n build: (params, boxW, boxH) => polygonSampler(quatrefoilVertices(params), boxW, boxH),\n defaults: DEFAULTS,\n insets: { top: 10, right: 14, bottom: 10, left: 14 },\n};\n\nexport default Quatrefoil;\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\n/**\n * Symmetric polar-spline base. The silhouette comes from a single curve r(s) over\n * s ∈ [0, 1] that gets reflected/rotated to fill the full circle:\n *\n * - `mode: 'octant'`: 1/8 of the perimeter (cardinal → diagonal), mirrored within each\n * quadrant and rotated to fill the rest. 8-fold symmetric.\n * - `mode: 'quadrant'`: 1/4 of the perimeter (cardinal → next cardinal), rotated 4 times\n * with no internal mirror. 4-fold rotational symmetry; endpoints share radius.\n *\n * The interpolant is a **clamped natural cubic spline** with zero slope at both endpoints\n * (so the reflected/rotated full curve has no kink crossing the symmetry axes). C² across\n * the whole octant — continuous curvature, not just slope — which removes the \"lumpy\" feel\n * that local Hermite splines have when anchors are uneven.\n */\nexport interface OctantSplineParams {\n mode?: 'octant' | 'quadrant';\n /** Number of active anchors (3..12). */\n count?: number;\n s0?: number; s1?: number; s2?: number; s3?: number; s4?: number; s5?: number;\n s6?: number; s7?: number; s8?: number; s9?: number; s10?: number; s11?: number;\n r0?: number; r1?: number; r2?: number; r3?: number; r4?: number; r5?: number;\n r6?: number; r7?: number; r8?: number; r9?: number; r10?: number; r11?: number;\n /** Per-anchor weight (0..3). The spline is constructed to pass through every anchor exactly;\n * the weight biases how strongly that anchor influences the rest of the curve. Implementation\n * detail: blends the C² interpolant with a polynomial fit weighted by w. Default 1 = pure\n * C² interpolation; <1 lets the curve sweep past the anchor (anchor still passed through);\n * >1 makes the curve hug the anchor more tightly (sharper local bend). */\n w0?: number; w1?: number; w2?: number; w3?: number; w4?: number; w5?: number;\n w6?: number; w7?: number; w8?: number; w9?: number; w10?: number; w11?: number;\n rotation?: number;\n samples?: number;\n}\n\nexport const OCTANT_SPLINE_MAX_ANCHORS = 12;\n\nconst DEFAULTS: Required<OctantSplineParams> = {\n mode: 'octant',\n count: 5,\n s0: 0, s1: 0.25, s2: 0.5, s3: 0.75, s4: 1, s5: 1,\n s6: 1, s7: 1, s8: 1, s9: 1, s10: 1, s11: 1,\n r0: 48, r1: 30, r2: 32, r3: 38, r4: 46, r5: 42,\n r6: 36, r7: 32, r8: 30, r9: 30, r10: 30, r11: 30,\n w0: 1, w1: 1, w2: 1, w3: 1, w4: 1, w5: 1,\n w6: 1, w7: 1, w8: 1, w9: 1, w10: 1, w11: 1,\n rotation: 0,\n samples: 192,\n};\n\ninterface Anchor { s: number; r: number; w: number }\n\nexport function extractAnchorPairs(params: OctantSplineParams = {}): Anchor[] {\n const cfg = { ...DEFAULTS, ...params };\n const count = Math.max(3, Math.min(Math.floor(cfg.count), OCTANT_SPLINE_MAX_ANCHORS));\n const sKeys: (keyof Required<OctantSplineParams>)[] = ['s0','s1','s2','s3','s4','s5','s6','s7','s8','s9','s10','s11'];\n const rKeys: (keyof Required<OctantSplineParams>)[] = ['r0','r1','r2','r3','r4','r5','r6','r7','r8','r9','r10','r11'];\n const wKeys: (keyof Required<OctantSplineParams>)[] = ['w0','w1','w2','w3','w4','w5','w6','w7','w8','w9','w10','w11'];\n const pairs: Anchor[] = [];\n for (let i = 0; i < count; i++) {\n pairs.push({\n s: Math.max(0, Math.min(1, Number(cfg[sKeys[i]]))),\n r: Math.max(0, Number(cfg[rKeys[i]])),\n w: Math.max(0, Number(cfg[wKeys[i]] ?? 1)),\n });\n }\n pairs.sort((a, b) => a.s - b.s);\n pairs[0].s = 0;\n pairs[count - 1].s = 1;\n if (cfg.mode === 'quadrant') {\n pairs[count - 1].r = pairs[0].r;\n pairs[count - 1].w = pairs[0].w;\n }\n return pairs;\n}\n\n/**\n * Solve the clamped natural cubic spline with zero end-slopes. Returns the second-derivative\n * vector M[0..n] which feeds the standard cubic-spline evaluation formula. Solves a\n * tridiagonal system in O(n).\n */\nfunction solveCubicSpline(anchors: Anchor[]): number[] {\n const n = anchors.length - 1;\n const h: number[] = new Array(n);\n for (let i = 0; i < n; i++) h[i] = Math.max(1e-9, anchors[i + 1].s - anchors[i].s);\n // Build tridiagonal system for M[0..n] with clamped zero-slope BCs.\n // row 0: (h0/3) M0 + (h0/6) M1 = (r1-r0)/h0\n // row i (1..n-1): (h_{i-1}/6) M_{i-1} + ((h_{i-1}+h_i)/3) M_i + (h_i/6) M_{i+1}\n // = (r_{i+1}-r_i)/h_i - (r_i-r_{i-1})/h_{i-1}\n // row n: (h_{n-1}/6) M_{n-1} + (h_{n-1}/3) M_n = -(r_n-r_{n-1})/h_{n-1}\n const a: number[] = new Array(n + 1); // subdiagonal\n const b: number[] = new Array(n + 1); // diagonal\n const c: number[] = new Array(n + 1); // superdiagonal\n const d: number[] = new Array(n + 1); // rhs\n a[0] = 0;\n b[0] = h[0] / 3;\n c[0] = h[0] / 6;\n d[0] = (anchors[1].r - anchors[0].r) / h[0];\n for (let i = 1; i < n; i++) {\n a[i] = h[i - 1] / 6;\n b[i] = (h[i - 1] + h[i]) / 3;\n c[i] = h[i] / 6;\n d[i] = (anchors[i + 1].r - anchors[i].r) / h[i] - (anchors[i].r - anchors[i - 1].r) / h[i - 1];\n }\n a[n] = h[n - 1] / 6;\n b[n] = h[n - 1] / 3;\n c[n] = 0;\n d[n] = -(anchors[n].r - anchors[n - 1].r) / h[n - 1];\n // Thomas algorithm: forward sweep, then back-substitution.\n for (let i = 1; i <= n; i++) {\n const w = a[i] / b[i - 1];\n b[i] -= w * c[i - 1];\n d[i] -= w * d[i - 1];\n }\n const M: number[] = new Array(n + 1);\n M[n] = d[n] / b[n];\n for (let i = n - 1; i >= 0; i--) M[i] = (d[i] - c[i] * M[i + 1]) / b[i];\n return M;\n}\n\ninterface CompiledSpline {\n anchors: Anchor[];\n M: number[];\n}\n\nexport function compileSpline(anchors: Anchor[]): CompiledSpline {\n return { anchors, M: solveCubicSpline(anchors) };\n}\n\nexport function evalCompiled(s: number, spline: CompiledSpline): number {\n const { anchors, M } = spline;\n const N = anchors.length;\n if (N === 0) return 0;\n if (N === 1) return anchors[0].r;\n if (s <= anchors[0].s) return anchors[0].r;\n if (s >= anchors[N - 1].s) return anchors[N - 1].r;\n let i = 0;\n while (i < N - 1 && anchors[i + 1].s <= s) i++;\n const p0 = anchors[i];\n const p1 = anchors[i + 1];\n const h = p1.s - p0.s;\n if (h <= 0) return p0.r;\n const A = (p1.s - s) / h;\n const B = (s - p0.s) / h;\n // Apply per-anchor weight as a local sharpening factor on the C² interpolant. With both\n // weights = 1 this is pure natural cubic spline. Weights > 1 add a centered \"lift\" toward\n // the anchor (sharpens), < 1 subtracts (smooths past). The lift kernel is the standard\n // cubic-spline second-derivative term, scaled per-side by (w - 1).\n const liftA = ((A * A * A - A) * h * h) / 6;\n const liftB = ((B * B * B - B) * h * h) / 6;\n const baseLine = A * p0.r + B * p1.r;\n const curvatureTerm = liftA * M[i] * p0.w + liftB * M[i + 1] * p1.w;\n return baseLine + curvatureTerm;\n}\n\nconst OctantSpline: BaseModule<OctantSplineParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const anchors = extractAnchorPairs(cfg);\n const spline = compileSpline(anchors);\n const rot = (cfg.rotation * Math.PI) / 180;\n const N = Math.max(48, Math.floor(cfg.samples));\n const cx = 50, cy = 50;\n const verts: [number, number][] = [];\n const HALF_PI = Math.PI / 2;\n for (let i = 0; i < N; i++) {\n const θ = (i / N) * 2 * Math.PI;\n const θRel = θ - rot;\n let s: number;\n if (cfg.mode === 'quadrant') {\n const θQ = ((θRel % HALF_PI) + HALF_PI) % HALF_PI;\n s = θQ / HALF_PI;\n } else {\n s = Math.abs(Math.sin(2 * θRel));\n }\n const r = evalCompiled(s, spline);\n verts.push([cx + r * Math.cos(θ), cy + r * Math.sin(θ)]);\n }\n return polygonSampler(verts, boxW, boxH);\n },\n defaults: DEFAULTS,\n insets: { top: 10, right: 14, bottom: 10, left: 14 },\n};\n\nexport default OctantSpline;\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\n/**\n * Symmetric polar NURBS base. Same anchor concept as `octant-spline` but the curve is an\n * **approximating** cubic NURBS — the control points pull the curve without sitting on it.\n * Each anchor's weight increases the local pull toward that control point.\n *\n * Endpoint behaviour: the curve uses mirror-phantom control points just outside [0, 1]\n * derived from the second-from-end anchors, which enforces zero slope at s=0 and s=1 so\n * the reflected/rotated full silhouette closes cleanly across the symmetry axes.\n */\nexport interface OctantBSplineParams {\n mode?: 'octant' | 'quadrant';\n count?: number;\n s0?: number; s1?: number; s2?: number; s3?: number; s4?: number; s5?: number;\n s6?: number; s7?: number; s8?: number; s9?: number; s10?: number; s11?: number;\n r0?: number; r1?: number; r2?: number; r3?: number; r4?: number; r5?: number;\n r6?: number; r7?: number; r8?: number; r9?: number; r10?: number; r11?: number;\n w0?: number; w1?: number; w2?: number; w3?: number; w4?: number; w5?: number;\n w6?: number; w7?: number; w8?: number; w9?: number; w10?: number; w11?: number;\n rotation?: number;\n samples?: number;\n}\n\nexport const OCTANT_BSPLINE_MAX_ANCHORS = 12;\n\nconst DEFAULTS: Required<OctantBSplineParams> = {\n mode: 'octant',\n count: 5,\n s0: 0, s1: 0.25, s2: 0.5, s3: 0.75, s4: 1, s5: 1,\n s6: 1, s7: 1, s8: 1, s9: 1, s10: 1, s11: 1,\n r0: 48, r1: 30, r2: 32, r3: 38, r4: 46, r5: 42,\n r6: 36, r7: 32, r8: 30, r9: 30, r10: 30, r11: 30,\n w0: 1, w1: 1, w2: 1, w3: 1, w4: 1, w5: 1,\n w6: 1, w7: 1, w8: 1, w9: 1, w10: 1, w11: 1,\n rotation: 0,\n samples: 192,\n};\n\ninterface Anchor { s: number; r: number; w: number }\n\nexport function extractAnchorPairs(params: OctantBSplineParams = {}): Anchor[] {\n const cfg = { ...DEFAULTS, ...params };\n const count = Math.max(3, Math.min(Math.floor(cfg.count), OCTANT_BSPLINE_MAX_ANCHORS));\n const sKeys: (keyof Required<OctantBSplineParams>)[] = ['s0','s1','s2','s3','s4','s5','s6','s7','s8','s9','s10','s11'];\n const rKeys: (keyof Required<OctantBSplineParams>)[] = ['r0','r1','r2','r3','r4','r5','r6','r7','r8','r9','r10','r11'];\n const wKeys: (keyof Required<OctantBSplineParams>)[] = ['w0','w1','w2','w3','w4','w5','w6','w7','w8','w9','w10','w11'];\n const pairs: Anchor[] = [];\n for (let i = 0; i < count; i++) {\n pairs.push({\n s: Math.max(0, Math.min(1, Number(cfg[sKeys[i]]))),\n r: Math.max(0, Number(cfg[rKeys[i]])),\n w: Math.max(0.01, Number(cfg[wKeys[i]] ?? 1)),\n });\n }\n pairs.sort((a, b) => a.s - b.s);\n pairs[0].s = 0;\n pairs[count - 1].s = 1;\n if (cfg.mode === 'quadrant') {\n pairs[count - 1].r = pairs[0].r;\n pairs[count - 1].w = pairs[0].w;\n }\n return pairs;\n}\n\n/**\n * Cubic NURBS evaluation. Returns r at parameter u ∈ [0, 1].\n *\n * Implementation uses (s_i, r_i, w_i) as control points and treats `u` as the underlying\n * curve parameter, with the knot vector clamped at both ends. Because the control points'\n * `s` coordinates are themselves part of the curve, we need a parametric formulation:\n * S(u) = Σ w_i N_i(u) s_i / Σ w_i N_i(u)\n * R(u) = Σ w_i N_i(u) r_i / Σ w_i N_i(u)\n * Then we invert S(u) = s to get u and read out R(u).\n *\n * Two phantom control points are inserted at each end (mirror reflections of the second-\n * from-end anchors across the cardinal/diagonal axes), forcing zero slope at the endpoints\n * for clean symmetric closure.\n */\nfunction buildExtendedControls(anchors: Anchor[]): Anchor[] {\n const N = anchors.length;\n // Phantom controls outside [0, 1]. They are mirrored versions of the second-from-end\n // visible anchors. Symmetric reflection gives zero slope at the cardinal/diagonal endpoints.\n const phantomLeft1: Anchor = { s: -anchors[1].s, r: anchors[1].r, w: anchors[1].w };\n const phantomLeft2: Anchor = { s: -anchors[Math.min(2, N - 1)].s, r: anchors[Math.min(2, N - 1)].r, w: anchors[Math.min(2, N - 1)].w };\n const phantomRight1: Anchor = { s: 2 - anchors[N - 2].s, r: anchors[N - 2].r, w: anchors[N - 2].w };\n const phantomRight2: Anchor = { s: 2 - anchors[Math.max(N - 3, 0)].s, r: anchors[Math.max(N - 3, 0)].r, w: anchors[Math.max(N - 3, 0)].w };\n return [phantomLeft2, phantomLeft1, ...anchors, phantomRight1, phantomRight2];\n}\n\nfunction buildKnots(numCtrl: number, degree: number): number[] {\n // Clamped uniform knot vector of length numCtrl + degree + 1.\n const m = numCtrl + degree + 1;\n const knots: number[] = new Array(m);\n for (let i = 0; i <= degree; i++) knots[i] = 0;\n const interior = numCtrl - degree - 1;\n for (let i = 1; i <= interior; i++) knots[degree + i] = i / (interior + 1);\n for (let i = m - degree - 1; i < m; i++) knots[i] = 1;\n return knots;\n}\n\nfunction findSpan(u: number, knots: number[], degree: number, numCtrl: number): number {\n if (u >= knots[numCtrl]) return numCtrl - 1;\n if (u <= knots[degree]) return degree;\n let low = degree;\n let high = numCtrl;\n let mid = (low + high) >>> 1;\n while (u < knots[mid] || u >= knots[mid + 1]) {\n if (u < knots[mid]) high = mid;\n else low = mid;\n mid = (low + high) >>> 1;\n }\n return mid;\n}\n\nfunction basisFns(span: number, u: number, knots: number[], degree: number): number[] {\n const N: number[] = new Array(degree + 1).fill(0);\n const left: number[] = new Array(degree + 1);\n const right: number[] = new Array(degree + 1);\n N[0] = 1;\n for (let j = 1; j <= degree; j++) {\n left[j] = u - knots[span + 1 - j];\n right[j] = knots[span + j] - u;\n let saved = 0;\n for (let r = 0; r < j; r++) {\n const denom = right[r + 1] + left[j - r];\n const temp = denom === 0 ? 0 : N[r] / denom;\n N[r] = saved + right[r + 1] * temp;\n saved = left[j - r] * temp;\n }\n N[j] = saved;\n }\n return N;\n}\n\ninterface CompiledNurbs {\n extended: Anchor[];\n knots: number[];\n degree: number;\n}\n\nexport function compileNurbs(anchors: Anchor[]): CompiledNurbs {\n const extended = buildExtendedControls(anchors);\n const degree = 3;\n const knots = buildKnots(extended.length, degree);\n return { extended, knots, degree };\n}\n\nfunction evalNurbsAtU(u: number, nurbs: CompiledNurbs): { s: number; r: number } {\n const { extended, knots, degree } = nurbs;\n const numCtrl = extended.length;\n const uClamped = Math.max(0, Math.min(1, u));\n const span = findSpan(uClamped, knots, degree, numCtrl);\n const N = basisFns(span, uClamped, knots, degree);\n let sNum = 0;\n let rNum = 0;\n let wSum = 0;\n for (let i = 0; i <= degree; i++) {\n const ctrl = extended[span - degree + i];\n const wn = ctrl.w * N[i];\n sNum += wn * ctrl.s;\n rNum += wn * ctrl.r;\n wSum += wn;\n }\n return wSum > 0 ? { s: sNum / wSum, r: rNum / wSum } : { s: 0, r: 0 };\n}\n\n/** Invert S(u) = s by bisection. The NURBS is monotonic in s because the underlying knot\n * vector and control sequence are monotonic, so bisection converges quickly. */\nexport function evalNurbsAtS(s: number, nurbs: CompiledNurbs): number {\n if (s <= 0) return evalNurbsAtU(0, nurbs).r;\n if (s >= 1) return evalNurbsAtU(1, nurbs).r;\n let lo = 0, hi = 1;\n for (let iter = 0; iter < 30; iter++) {\n const mid = (lo + hi) * 0.5;\n const { s: sMid } = evalNurbsAtU(mid, nurbs);\n if (sMid < s) lo = mid; else hi = mid;\n if (hi - lo < 1e-5) break;\n }\n return evalNurbsAtU((lo + hi) * 0.5, nurbs).r;\n}\n\nconst OctantBSpline: BaseModule<OctantBSplineParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const anchors = extractAnchorPairs(cfg);\n const nurbs = compileNurbs(anchors);\n const rot = (cfg.rotation * Math.PI) / 180;\n const N = Math.max(48, Math.floor(cfg.samples));\n const cx = 50, cy = 50;\n const verts: [number, number][] = [];\n const HALF_PI = Math.PI / 2;\n for (let i = 0; i < N; i++) {\n const θ = (i / N) * 2 * Math.PI;\n const θRel = θ - rot;\n let s: number;\n if (cfg.mode === 'quadrant') {\n const θQ = ((θRel % HALF_PI) + HALF_PI) % HALF_PI;\n s = θQ / HALF_PI;\n } else {\n s = Math.abs(Math.sin(2 * θRel));\n }\n const r = evalNurbsAtS(s, nurbs);\n verts.push([cx + r * Math.cos(θ), cy + r * Math.sin(θ)]);\n }\n return polygonSampler(verts, boxW, boxH);\n },\n defaults: DEFAULTS,\n insets: { top: 10, right: 14, bottom: 10, left: 14 },\n};\n\nexport default OctantBSpline;\n","import type { BaseModule } from './types';\nimport { polygonSampler } from './polygonSampler';\n\nexport type RibbonEnd = 'inward' | 'outward' | 'flat';\n\nexport interface RibbonParams {\n left?: RibbonEnd;\n right?: RibbonEnd;\n /** Taper depth in CSS px. Stays fixed regardless of badge width — viewBox\n * vertices are computed at build time using `boxW`. */\n taperWidth?: number;\n}\n\nconst DEFAULTS: Required<RibbonParams> = { left: 'inward', right: 'outward', taperWidth: 8 };\n\ninterface SidePoints {\n top: [number, number];\n mid: [number, number] | null;\n bottom: [number, number];\n}\n\nfunction sidePoints(mode: RibbonEnd, xBaseVb: number, signVb: number, taperVb: number): SidePoints {\n switch (mode) {\n case 'flat':\n return { top: [xBaseVb, 0], mid: null, bottom: [xBaseVb, 100] };\n case 'outward':\n return {\n top: [xBaseVb + signVb * taperVb, 0],\n mid: [xBaseVb, 50],\n bottom: [xBaseVb + signVb * taperVb, 100],\n };\n case 'inward':\n return {\n top: [xBaseVb, 0],\n mid: [xBaseVb + signVb * taperVb, 50],\n bottom: [xBaseVb, 100],\n };\n }\n}\n\nfunction sideInsetCss(mode: RibbonEnd, taperCss: number): number {\n const t = Math.max(0, taperCss);\n switch (mode) {\n case 'flat': return 4;\n case 'outward': return Math.round(t * 0.7);\n case 'inward': return Math.round(t * 0.8);\n }\n}\n\nconst Ribbon: BaseModule<RibbonParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const taperCss = Math.max(0, cfg.taperWidth);\n // Convert CSS px taper into viewBox-x units so the rendered pointer\n // is the same CSS-px depth regardless of badge width.\n const taperVb = boxW > 0 ? (taperCss / boxW) * 100 : 0;\n const l = sidePoints(cfg.left, 0, 1, taperVb);\n const r = sidePoints(cfg.right, 100, -1, taperVb);\n const verts: [number, number][] = [l.top];\n verts.push(r.top);\n if (r.mid) verts.push(r.mid);\n verts.push(r.bottom);\n verts.push(l.bottom);\n if (l.mid) verts.push(l.mid);\n return polygonSampler(verts, boxW, boxH);\n },\n insets: (params) => {\n const cfg = { ...DEFAULTS, ...params };\n return {\n top: 0,\n right: sideInsetCss(cfg.right, cfg.taperWidth),\n bottom: 0,\n left: sideInsetCss(cfg.left, cfg.taperWidth),\n };\n },\n defaults: DEFAULTS,\n};\n\nexport default Ribbon;\n","export type EdgeProfile = (t: number, depth: number) => number;\n\nexport type BuiltInEdgeName =\n | 'flat'\n | 'chevron'\n | 'slant'\n | 'slant-up'\n | 'round'\n | 'scallop'\n | 'concave-chevron';\n\nexport type EdgeCap = BuiltInEdgeName | EdgeProfile;\n\nexport const EDGE_PROFILES: Record<BuiltInEdgeName, EdgeProfile> = {\n flat: (_t, _d) => 0,\n chevron: (t, d) => (1 - Math.abs(t - 0.5) * 2) * d,\n slant: (t, d) => t * d,\n 'slant-up': (t, d) => (1 - t) * d,\n round: (t, d) => Math.sin(t * Math.PI) * d,\n scallop: (t, d) => Math.sin(t * Math.PI * 3) * 0.4 * d,\n 'concave-chevron': (t, d) => -(1 - Math.abs(t - 0.5) * 2) * d,\n};\n\nexport function resolveEdge(cap: EdgeCap): EdgeProfile {\n if (typeof cap === 'function') return cap;\n return EDGE_PROFILES[cap] ?? EDGE_PROFILES.flat;\n}\n","import { resolveEdge, type EdgeCap } from './edgeProfiles';\nimport type { BaseModule, BaseSampler, PerimeterPoint } from './types';\n\nexport interface PowerlineParams {\n /** Profile for the left edge (the cap segment N inherits from segment N-1). */\n leftEdge?: EdgeCap;\n /** Profile for the right edge (this segment's own end cap). */\n rightEdge?: EdgeCap;\n /** Protrusion depth in CSS px (positive values stick out beyond the rect). */\n depth?: number;\n}\n\nconst DEFAULTS: Required<PowerlineParams> = {\n leftEdge: 'flat',\n rightEdge: 'flat',\n depth: 6,\n};\n\n// Samples per vertical edge. 64 is smooth enough for chevron/round caps and\n// cheap to evaluate; the perimeter is sampled once per `build` call.\nconst EDGE_SAMPLES = 64;\n\nconst Powerline: BaseModule<PowerlineParams> = {\n build: (params, boxW, boxH) => {\n const cfg = { ...DEFAULTS, ...params };\n const left = resolveEdge(cfg.leftEdge);\n const right = resolveEdge(cfg.rightEdge);\n const depth = cfg.depth;\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n\n const pts: { x: number; y: number; nx: number; ny: number }[] = [];\n\n // Top corners follow the same edge profiles as the rest of the verticals,\n // so a profile that protrudes/cuts at t=0 (e.g. slant-up) doesn't introduce\n // a corner kink between the flat top and the first vertical sample.\n pts.push({ x: left(0, depth) * sx, y: 0, nx: 0, ny: -1 });\n pts.push({ x: (boxW + right(0, depth)) * sx, y: 0, nx: 0, ny: -1 });\n\n for (let i = 1; i < EDGE_SAMPLES; i++) {\n const t = i / EDGE_SAMPLES;\n const xCss = boxW + right(t, depth);\n pts.push({ x: xCss * sx, y: t * 100, nx: 1, ny: 0 });\n }\n\n pts.push({ x: (boxW + right(1, depth)) * sx, y: 100, nx: 0, ny: 1 });\n pts.push({ x: (0 + left(1, depth)) * sx, y: 100, nx: 0, ny: 1 });\n\n for (let i = EDGE_SAMPLES - 1; i >= 1; i--) {\n const t = i / EDGE_SAMPLES;\n const xCss = 0 + left(t, depth);\n pts.push({ x: xCss * sx, y: t * 100, nx: -1, ny: 0 });\n }\n\n const cum: number[] = [0];\n for (let i = 1; i < pts.length; i++) {\n const a = pts[i - 1];\n const b = pts[i];\n const dxCss = (b.x - a.x) / sx;\n const dyCss = (b.y - a.y) / sy;\n cum.push(cum[i - 1] + Math.hypot(dxCss, dyCss));\n }\n const last = pts[pts.length - 1];\n const first = pts[0];\n const closeLen = Math.hypot((first.x - last.x) / sx, (first.y - last.y) / sy);\n const totalCss = cum[cum.length - 1] + closeLen;\n\n const perimeterAt = (s: number): PerimeterPoint => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n for (let i = 1; i < pts.length; i++) {\n if (sm <= cum[i]) {\n const segLen = cum[i] - cum[i - 1];\n const t = segLen > 0 ? (sm - cum[i - 1]) / segLen : 0;\n const a = pts[i - 1];\n const b = pts[i];\n return {\n x: a.x + (b.x - a.x) * t,\n y: a.y + (b.y - a.y) * t,\n nx: b.nx,\n ny: b.ny,\n };\n }\n }\n const lastIdx = pts.length - 1;\n const segLen = closeLen;\n const t = segLen > 0 ? (sm - cum[lastIdx]) / segLen : 0;\n return {\n x: pts[lastIdx].x + (first.x - pts[lastIdx].x) * t,\n y: pts[lastIdx].y + (first.y - pts[lastIdx].y) * t,\n nx: 0,\n ny: 1,\n };\n };\n\n const bodyPath = pts.reduce(\n (acc, p, i) =>\n acc + (i === 0\n ? `M ${p.x.toFixed(3)} ${p.y.toFixed(3)}`\n : ` L ${p.x.toFixed(3)} ${p.y.toFixed(3)}`),\n ''\n ) + ' Z';\n\n const sampler: BaseSampler = { bodyPath, perimeterAt, totalCss };\n return sampler;\n },\n defaults: DEFAULTS,\n insets: (params) => {\n const depth = params?.depth ?? DEFAULTS.depth;\n const leftCap = params?.leftEdge ?? DEFAULTS.leftEdge;\n const rightCap = params?.rightEdge ?? DEFAULTS.rightEdge;\n const left = resolveEdge(leftCap);\n const right = resolveEdge(rightCap);\n // Sample the profiles to compute (a) each side's average offset, used to\n // shift padding so text reads centered in the visible silhouette (not the\n // bounding rect), and (b) each side's deepest inward cut, the floor below\n // which padding mustn't drop or text would crash into the cap.\n // Trapezoid integration over [0, 1] — exact for piecewise-linear profiles\n // (chevron, slant, slant-up) and accurate enough for the curved ones.\n const N = 32;\n let avgLeft = 0;\n let avgRight = 0;\n let maxLeftInward = 0;\n let maxRightInward = 0;\n for (let i = 0; i <= N; i++) {\n const t = i / N;\n const l = left(t, depth);\n const r = right(t, depth);\n const w = i === 0 || i === N ? 0.5 : 1;\n avgLeft += (w * l) / N;\n avgRight += (w * r) / N;\n if (l > maxLeftInward) maxLeftInward = l;\n if (-r > maxRightInward) maxRightInward = -r;\n }\n // Desired asymmetry: padLeft - padRight = avgLeft + avgRight (so the text\n // centroid sits at the silhouette's centroid). Hold padLeft + padRight = 2 * depth.\n const shift = (avgLeft + avgRight) / 2;\n const leftPad = Math.max(maxLeftInward, depth + shift);\n const rightPad = Math.max(maxRightInward, depth - shift);\n return { top: 0, right: rightPad, bottom: 0, left: leftPad };\n },\n};\n\nexport default Powerline;\n","import type { BaseModule } from './types';\nimport ChamferedRect, { type ChamferedRectParams } from './ChamferedRect';\nimport RoundedRect, { type RoundedRectParams } from './RoundedRect';\nimport Polygon, { type PolygonParams } from './Polygon';\nimport Puzzle, { type PuzzleParams } from './Puzzle';\nimport Quatrefoil, { type QuatrefoilParams } from './Quatrefoil';\nimport OctantSpline, { type OctantSplineParams } from './OctantSpline';\nimport OctantBSpline, { type OctantBSplineParams } from './OctantBSpline';\nimport Ribbon, { type RibbonParams } from './Ribbon';\nimport Powerline, { type PowerlineParams } from './Powerline';\n\nexport type BadgeBase =\n | 'chamfered-rect'\n | 'rounded-rect'\n | 'polygon'\n | 'puzzle'\n | 'quatrefoil'\n | 'octant-spline'\n | 'octant-bspline'\n | 'ribbon'\n | 'powerline';\n\nexport interface BadgeBaseParams {\n 'chamfered-rect': ChamferedRectParams;\n 'rounded-rect': RoundedRectParams;\n 'polygon': PolygonParams;\n 'puzzle': PuzzleParams;\n 'quatrefoil': QuatrefoilParams;\n 'octant-spline': OctantSplineParams;\n 'octant-bspline': OctantBSplineParams;\n 'ribbon': RibbonParams;\n 'powerline': PowerlineParams;\n}\n\nexport const BASES: Record<BadgeBase, BaseModule<any>> = {\n 'chamfered-rect': ChamferedRect,\n 'rounded-rect': RoundedRect,\n 'polygon': Polygon,\n 'puzzle': Puzzle,\n 'quatrefoil': Quatrefoil,\n 'octant-spline': OctantSpline,\n 'octant-bspline': OctantBSpline,\n 'ribbon': Ribbon,\n 'powerline': Powerline,\n};\n","/**\n * Common range filter used by offsetAt-style effects. `range` is `[start, end]` as\n * fractions of `totalCss` in `[0, 1]`, where `end > start` includes a single contiguous\n * segment and `end < start` wraps around the closing point of the perimeter. Returns\n * the multiplier 1 inside the range and 0 outside (no feather yet — kept simple).\n */\nexport function rangeMask(s: number, totalCss: number, range?: [number, number]): number {\n if (!range) return 1;\n const [a, b] = range;\n if (a === b) return 0;\n const u = (((s % totalCss) + totalCss) % totalCss) / totalCss;\n if (a < b) return u >= a && u <= b ? 1 : 0;\n // Wrapping range like [0.9, 0.1].\n return u >= a || u <= b ? 1 : 0;\n}\n\nexport interface RangeMaskParams {\n /** Optional `[start, end]` as fractions of totalCss (0..1). Restricts the effect to a\n * contiguous slice of the perimeter; `end < start` wraps around. */\n range?: [number, number];\n}\n","import type { EffectModule } from '../bases/types';\nimport { rangeMask, type RangeMaskParams } from './rangeMask';\n\nexport interface SpikesEffectParams extends RangeMaskParams {\n count?: number;\n length?: number;\n baseWidth?: number;\n vertScale?: number;\n horzScale?: number;\n diagonalScale?: number;\n irregularity?: number;\n /**\n * 0..1 strength of curvature-based shortening on corners. At 1 we fully cancel the tip-arc\n * expansion `(1 + κL)` so neighbouring spike tips stay roughly evenly spaced even on tight\n * corner arcs; at 0 spikes are constant length and visibly fan outward around corners.\n */\n cornerCompensation?: number;\n}\n\nconst DEFAULTS: Required<Omit<SpikesEffectParams, 'range'>> = {\n count: 44,\n length: 8,\n baseWidth: 3,\n vertScale: 1.4,\n horzScale: 1,\n diagonalScale: 0.5,\n irregularity: 0,\n cornerCompensation: 1,\n};\n\nconst Spikes: EffectModule<SpikesEffectParams> = {\n offsetAt: (s, { params, phase, totalCss, perimeterAt }) => {\n const cfg = { ...DEFAULTS, ...params };\n const mask = rangeMask(s, totalCss, cfg.range);\n if (mask === 0) return { dx: 0, dy: 0 };\n const N = Math.max(3, Math.floor(cfg.count));\n const step = totalCss / N;\n const halfBase = Math.max(0.1, Math.min(step / 2 - 0.05, cfg.baseWidth / 2));\n const phaseOffset = phase * step;\n // Find the nearest spike center on the unwrapped axis, then wrap.\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const i = Math.round((sm - phaseOffset) / step);\n const sc = ((i * step + phaseOffset) % totalCss + totalCss) % totalCss;\n // Use shortest-distance metric on a closed perimeter.\n let ds = sm - sc;\n if (ds > totalCss / 2) ds -= totalCss;\n if (ds < -totalCss / 2) ds += totalCss;\n if (Math.abs(ds) > halfBase) return { dx: 0, dy: 0 };\n // Triangular: peak at ds=0, zero at the base edges.\n const t = 1 - Math.abs(ds) / halfBase;\n const pCenter = perimeterAt(sc);\n // Use the actual perimeter normal — no 45° quantization, so spike angles\n // sweep smoothly through corner arcs.\n const dirX = pCenter.nx;\n const dirY = pCenter.ny;\n // Smoothly blend axis (vert/horz) and diagonal scales by how diagonal the\n // normal points. d = |sin(2θ)| ∈ [0,1]: 0 on the cardinal axes, 1 at 45°.\n const nxAbs = Math.abs(pCenter.nx);\n const nyAbs = Math.abs(pCenter.ny);\n const d = Math.min(1, 2 * nxAbs * nyAbs);\n const axisScale = nyAbs > nxAbs ? cfg.vertScale : cfg.horzScale;\n const scale = axisScale * (1 - d) + cfg.diagonalScale * d;\n const irrMult = 1 + cfg.irregularity * 0.5 * Math.sin(i * 1.73 + 0.7);\n // Numerical curvature κ ≈ |dn/ds| in CSS units. We average over a window roughly the\n // size of a spike footprint so the corner's influence smoothly bleeds onto adjacent\n // flat-edge samples instead of switching off at the arc boundary.\n const eps = Math.max(step * 0.5, halfBase);\n const SAMPLES = 5;\n let kappa = 0;\n for (let k = 0; k < SAMPLES; k++) {\n const u = (k + 0.5) / SAMPLES; // 0..1 across the window\n const sA = sc - eps + u * 2 * eps - eps / SAMPLES;\n const sB = sc - eps + u * 2 * eps + eps / SAMPLES;\n const pA = perimeterAt(sA);\n const pB = perimeterAt(sB);\n kappa += Math.hypot(pB.nx - pA.nx, pB.ny - pA.ny) / (sB - sA);\n }\n kappa /= SAMPLES;\n const baseLen = cfg.length * scale * irrMult * t;\n const comp = Math.max(0, Math.min(cfg.cornerCompensation, 1));\n const lenCss = Math.max(0, baseLen / (1 + comp * kappa * baseLen)) * mask;\n return { dx: dirX * lenCss, dy: dirY * lenCss };\n },\n defaults: DEFAULTS,\n};\n\nexport default Spikes;\n","import type { EffectModule } from '../bases/types';\nimport { rangeMask, type RangeMaskParams } from './rangeMask';\n\nexport interface PuffsEffectParams extends RangeMaskParams {\n bumpWidth?: number;\n puffiness?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<Omit<PuffsEffectParams, 'range'>> = {\n bumpWidth: 18,\n puffiness: 10,\n irregularity: 0,\n};\n\nconst Puffs: EffectModule<PuffsEffectParams> = {\n offsetAt: (s, { params, phase, totalCss, perimeterAt }) => {\n const cfg = { ...DEFAULTS, ...params };\n const mask = rangeMask(s, totalCss, cfg.range);\n if (mask === 0) return { dx: 0, dy: 0 };\n const N = Math.max(2, Math.round(totalCss / Math.max(6, cfg.bumpWidth)));\n const step = totalCss / N;\n const phaseOffset = phase * step;\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const i = Math.floor((sm - phaseOffset) / step);\n const puffStart = i * step + phaseOffset;\n let t = (sm - puffStart) / step;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n const irr = Math.max(0, Math.min(cfg.irregularity, 1));\n const localPy = Math.max(0.5, cfg.puffiness) * (1 + irr * 0.55 * Math.sin(i * 1.73 + 0.7));\n const disp = localPy * Math.sin(Math.PI * t) * mask;\n const pt = perimeterAt(s);\n return { dx: pt.nx * disp, dy: pt.ny * disp };\n },\n defaults: DEFAULTS,\n};\n\nexport default Puffs;\n","import type { EffectModule } from '../bases/types';\nimport { rangeMask, type RangeMaskParams } from './rangeMask';\n\nexport interface BitesEffectParams extends RangeMaskParams {\n biteRadius?: number;\n biteSpacing?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<Omit<BitesEffectParams, 'range'>> = {\n biteRadius: 3,\n biteSpacing: 8,\n irregularity: 0,\n};\n\nconst Bites: EffectModule<BitesEffectParams> = {\n offsetAt: (s, { params, phase, totalCss, perimeterAt }) => {\n const cfg = { ...DEFAULTS, ...params };\n const mask = rangeMask(s, totalCss, cfg.range);\n if (mask === 0) return { dx: 0, dy: 0 };\n const br = Math.max(0.5, cfg.biteRadius);\n const bs = Math.max(2 * br + 0.5, cfg.biteSpacing);\n const N = Math.max(2, Math.floor(totalCss / bs));\n const step = totalCss / N;\n const phaseOffset = phase * step;\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const i = Math.round((sm - phaseOffset) / step);\n const sc = ((i * step + phaseOffset) % totalCss + totalCss) % totalCss;\n let ds = sm - sc;\n if (ds > totalCss / 2) ds -= totalCss;\n if (ds < -totalCss / 2) ds += totalCss;\n const irr = Math.max(0, Math.min(cfg.irregularity, 1));\n const localR = br * (1 + irr * 0.55 * Math.sin(i * 1.73 + 0.7));\n if (Math.abs(ds) > localR) return { dx: 0, dy: 0 };\n // Triangular inward dent: deepest at ds=0 (peak −localR), zero at ds=±localR.\n const t = 1 - Math.abs(ds) / localR;\n const inward = -localR * t;\n const pt = perimeterAt(s);\n return { dx: pt.nx * inward * mask, dy: pt.ny * inward * mask };\n },\n defaults: DEFAULTS,\n};\n\nexport default Bites;\n","import type { EffectModule } from '../bases/types';\nimport { rangeMask, type RangeMaskParams } from './rangeMask';\n\nexport interface ScallopsEffectParams extends RangeMaskParams {\n scallopRadius?: number;\n scallopSpacing?: number;\n irregularity?: number;\n}\n\nconst DEFAULTS: Required<Omit<ScallopsEffectParams, 'range'>> = {\n scallopRadius: 4,\n scallopSpacing: 10,\n irregularity: 0,\n};\n\nconst Scallops: EffectModule<ScallopsEffectParams> = {\n offsetAt: (s, { params, phase, totalCss, perimeterAt }) => {\n const cfg = { ...DEFAULTS, ...params };\n const mask = rangeMask(s, totalCss, cfg.range);\n if (mask === 0) return { dx: 0, dy: 0 };\n const sr = Math.max(0.5, cfg.scallopRadius);\n const ss = Math.max(2 * sr + 0.5, cfg.scallopSpacing);\n const N = Math.max(2, Math.floor(totalCss / ss));\n const step = totalCss / N;\n const phaseOffset = phase * step;\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const i = Math.round((sm - phaseOffset) / step);\n const sc = ((i * step + phaseOffset) % totalCss + totalCss) % totalCss;\n let ds = sm - sc;\n if (ds > totalCss / 2) ds -= totalCss;\n if (ds < -totalCss / 2) ds += totalCss;\n const irr = Math.max(0, Math.min(cfg.irregularity, 1));\n const localR = sr * (1 + irr * 0.55 * Math.sin(i * 1.73 + 0.7));\n if (Math.abs(ds) > localR) return { dx: 0, dy: 0 };\n // Half-circle outward: peak at ds=0 = localR; zero at ±localR.\n const t = (ds + localR) / (2 * localR);\n const disp = localR * Math.sin(Math.PI * t) * mask;\n const pt = perimeterAt(s);\n return { dx: pt.nx * disp, dy: pt.ny * disp };\n },\n defaults: DEFAULTS,\n};\n\nexport default Scallops;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\nexport type Corner = 'tl' | 'tr' | 'bl' | 'br';\n\nexport interface BevelEffectParams {\n /** Bevel band width in CSS px. */\n bevelWidth?: number;\n /** Which corner the light originates from (drives the highlight/shadow distribution across edges). */\n lightFrom?: Corner;\n}\n\nconst DEFAULTS: Required<BevelEffectParams> = { bevelWidth: 6, lightFrom: 'tl' };\n\ntype Side = 'top' | 'right' | 'bottom' | 'left';\n\nfunction sideForNormal(nx: number, ny: number): Side {\n return Math.abs(ny) > Math.abs(nx)\n ? (ny < 0 ? 'top' : 'bottom')\n : (nx < 0 ? 'left' : 'right');\n}\n\nfunction bevelClasses(lightFrom: Corner): Record<Side, string> {\n const isTop = lightFrom[0] === 't';\n const isLeft = lightFrom[1] === 'l';\n return {\n top: isTop ? 'badge-bevel-light' : 'badge-bevel-dark',\n bottom: isTop ? 'badge-bevel-dark' : 'badge-bevel-light',\n left: isLeft ? 'badge-bevel-medium-light' : 'badge-bevel-medium-dark',\n right: isLeft ? 'badge-bevel-medium-dark' : 'badge-bevel-medium-light',\n };\n}\n\nconst SAMPLES = 240;\n\nconst Bevel: EffectModule<BevelEffectParams> = {\n Component: ({ sampler, boxW, boxH, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle') return null;\n const cfg = { ...DEFAULTS, ...params };\n const clipId = useId();\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const cls = bevelClasses(cfg.lightFrom);\n const total = sampler.totalCss;\n\n // Sample outer + inset rings; tag each sample with the side it belongs to.\n const outer: { x: number; y: number; side: Side }[] = [];\n const inner: { x: number; y: number }[] = [];\n for (let i = 0; i < SAMPLES; i++) {\n const pt = sampler.perimeterAt((i / SAMPLES) * total);\n outer.push({ x: pt.x, y: pt.y, side: sideForNormal(pt.nx, pt.ny) });\n inner.push({\n x: pt.x - pt.nx * cfg.bevelWidth * sx,\n y: pt.y - pt.ny * cfg.bevelWidth * sy,\n });\n }\n\n // Group consecutive samples sharing a side into runs (wrap-aware).\n interface Run { side: Side; idxs: number[] }\n const runs: Run[] = [];\n let cur: Run | null = null;\n for (let i = 0; i < SAMPLES; i++) {\n const side = outer[i].side;\n if (!cur || cur.side !== side) {\n cur = { side, idxs: [i] };\n runs.push(cur);\n } else {\n cur.idxs.push(i);\n }\n }\n // Merge first and last runs if they wrap and share a side.\n if (runs.length > 1 && runs[0].side === runs[runs.length - 1].side) {\n runs[runs.length - 1].idxs = runs[runs.length - 1].idxs.concat(runs[0].idxs);\n runs.shift();\n }\n\n const pathFor = (run: Run): string => {\n const outerPts = run.idxs.map((i) => outer[i]);\n const innerPts = run.idxs.map((i) => inner[i]).reverse();\n const pts = [...outerPts, ...innerPts];\n if (pts.length === 0) return '';\n let d = `M ${pts[0].x.toFixed(3)} ${pts[0].y.toFixed(3)}`;\n for (let i = 1; i < pts.length; i++) {\n d += ` L ${pts[i].x.toFixed(3)} ${pts[i].y.toFixed(3)}`;\n }\n return d + ' Z';\n };\n\n return (\n <>\n <defs>\n <clipPath id={clipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n </defs>\n <g clipPath={`url(#${clipId})`}>\n {runs.map((run, i) => (\n <path key={i} className={cls[run.side]} d={pathFor(run)} />\n ))}\n </g>\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Bevel;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\nexport type Corner = 'tl' | 'tr' | 'bl' | 'br';\n\nexport interface SheenEffectParams {\n lightFrom?: Corner;\n /** Peak gradient opacity (0..1). */\n intensity?: number;\n}\n\nconst DEFAULTS: Required<SheenEffectParams> = { lightFrom: 'tl', intensity: 0.22 };\n\n// Gradient runs from the shadow corner (0%) to the lit corner (100%).\nconst FACE_COORDS: Record<Corner, { x1: string; y1: string; x2: string; y2: string }> = {\n tl: { x1: '100%', y1: '100%', x2: '0%', y2: '0%' },\n tr: { x1: '0%', y1: '100%', x2: '100%', y2: '0%' },\n bl: { x1: '100%', y1: '0%', x2: '0%', y2: '100%' },\n br: { x1: '0%', y1: '0%', x2: '100%', y2: '100%' },\n};\n\nconst Sheen: EffectModule<SheenEffectParams> = {\n Component: ({ sampler, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle') return null;\n const cfg = { ...DEFAULTS, ...params };\n const gradId = useId();\n const clipId = useId();\n const peak = Math.max(0, Math.min(cfg.intensity, 1));\n return (\n <>\n <defs>\n <clipPath id={clipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n <linearGradient id={gradId} {...FACE_COORDS[cfg.lightFrom]}>\n <stop offset=\"0%\" stopColor=\"black\" stopOpacity={peak} />\n <stop offset=\"45%\" stopColor=\"black\" stopOpacity=\"0.04\" />\n <stop offset=\"58%\" stopColor=\"white\" stopOpacity=\"0.04\" />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={peak} />\n </linearGradient>\n </defs>\n <rect clipPath={`url(#${clipId})`} x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill={`url(#${gradId})`} style={{ pointerEvents: 'none' }} />\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Sheen;\n","import type { EffectModule } from '../bases/types';\n\nexport type Corner = 'tl' | 'tr' | 'bl' | 'br';\n\nexport interface RivetsEffectParams {\n /** Rivet radius in CSS px. */\n radius?: number;\n /** Inset from each corner in CSS px. */\n inset?: number;\n /** Light origin (drives which side of each rivet gets the highlight). */\n lightFrom?: Corner;\n}\n\nconst DEFAULTS: Required<RivetsEffectParams> = { radius: 2.4, inset: 7, lightFrom: 'tl' };\n\nconst Rivets: EffectModule<RivetsEffectParams> = {\n Component: ({ boxW, boxH, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle') return null;\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW, sy = 100 / boxH;\n const rx = cfg.radius * sx;\n const ry = cfg.radius * sy;\n const ix = cfg.inset * sx;\n const iy = cfg.inset * sy;\n const litDx = cfg.lightFrom[1] === 'l' ? -cfg.radius * 0.32 : cfg.radius * 0.32;\n const litDy = cfg.lightFrom[0] === 't' ? -cfg.radius * 0.32 : cfg.radius * 0.32;\n const positions: [number, number][] = [\n [ix, iy],\n [100 - ix, iy],\n [ix, 100 - iy],\n [100 - ix, 100 - iy],\n ];\n return (\n <>\n {positions.map(([cx, cy], i) => (\n <g key={i}>\n <ellipse className=\"badge-bevel-dark\" cx={cx} cy={cy} rx={rx} ry={ry} />\n <ellipse className=\"badge-bevel-medium-dark\" cx={cx - litDx * 0.6 * sx} cy={cy - litDy * 0.6 * sy} rx={rx * 0.75} ry={ry * 0.75} />\n <ellipse className=\"badge-bevel-light\" cx={cx + litDx * sx} cy={cy + litDy * sy} rx={rx * 0.45} ry={ry * 0.45} />\n </g>\n ))}\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Rivets;\n","import type { EffectModule } from '../bases/types';\n\nexport interface ShadowEffectParams {\n /** Offset in CSS px. */\n dx?: number;\n dy?: number;\n /** Alpha 0..1. */\n opacity?: number;\n}\n\nconst DEFAULTS: Required<ShadowEffectParams> = { dx: 1, dy: 2, opacity: 0.28 };\n\nconst Shadow: EffectModule<ShadowEffectParams> = {\n Component: ({ sampler, boxW, boxH, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW, sy = 100 / boxH;\n const dxVb = cfg.dx * sx;\n const dyVb = cfg.dy * sy;\n return (\n <path\n d={sampler.bodyPath}\n transform={`translate(${dxVb.toFixed(3)} ${dyVb.toFixed(3)})`}\n fill={`rgba(0, 0, 0, ${Math.max(0, Math.min(cfg.opacity, 1))})`}\n stroke=\"none\"\n style={{ pointerEvents: 'none' }}\n />\n );\n },\n zone: 'background',\n defaults: DEFAULTS,\n};\n\nexport default Shadow;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\nexport interface WoodgrainEffectParams {\n /** Number of grain curves. */\n lines?: number;\n /** Number of knot circles. */\n knots?: number;\n /** Overall grain opacity (0..1). */\n intensity?: number;\n}\n\nconst DEFAULTS: Required<WoodgrainEffectParams> = { lines: 4, knots: 2, intensity: 0.55 };\n\n// Deterministic per-line/knot wobble.\nfunction osc(seed: number) {\n return Math.sin(seed * 1.73 + 0.5);\n}\n\nconst Woodgrain: EffectModule<WoodgrainEffectParams> = {\n Component: ({ sampler, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle') return null;\n const cfg = { ...DEFAULTS, ...params };\n const clipId = useId();\n const lines: string[] = [];\n for (let i = 0; i < cfg.lines; i++) {\n const y = ((i + 1) / (cfg.lines + 1)) * 100;\n // Two control points, slight vertical wobble.\n const dy1 = osc(i * 2 + 1) * 4;\n const dy2 = osc(i * 2 + 2) * 4;\n lines.push(`M -5 ${y.toFixed(2)} Q 35 ${(y + dy1).toFixed(2)} 60 ${y.toFixed(2)} T 105 ${(y + dy2).toFixed(2)}`);\n }\n const knotPositions: [number, number][] = [];\n for (let i = 0; i < cfg.knots; i++) {\n const cx = 30 + osc(i * 3 + 0.7) * 30 + 20;\n const cy = 50 + osc(i * 3 + 1.3) * 30;\n knotPositions.push([cx, cy]);\n }\n return (\n <>\n <defs>\n <clipPath id={clipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n </defs>\n <g clipPath={`url(#${clipId})`} opacity={Math.max(0, Math.min(cfg.intensity, 1))} style={{ pointerEvents: 'none' }}>\n {lines.map((d, i) => (\n <path key={`l${i}`} className=\"badge-stroke\" d={d} fill=\"none\" />\n ))}\n {knotPositions.map(([cx, cy], i) => (\n <g key={`k${i}`}>\n <ellipse className=\"badge-stroke\" cx={cx} cy={cy} rx={3} ry={2.4} fill=\"none\" />\n <ellipse className=\"badge-stroke\" cx={cx} cy={cy} rx={1.2} ry={1} fill=\"none\" />\n </g>\n ))}\n </g>\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Woodgrain;\n","import type { EffectModule } from '../bases/types';\nimport { rangeMask, type RangeMaskParams } from './rangeMask';\n\nexport interface PerforationsEffectParams extends RangeMaskParams {\n /** Hole radius in CSS px. */\n holeRadius?: number;\n /** Spacing between hole centers along the perimeter, in CSS px. */\n holeSpacing?: number;\n}\n\nconst DEFAULTS: Required<Omit<PerforationsEffectParams, 'range'>> = {\n holeRadius: 3,\n holeSpacing: 11,\n};\n\nconst Perforations: EffectModule<PerforationsEffectParams> = {\n Component: ({ sampler, boxW, boxH, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const total = sampler.totalCss;\n const N = Math.max(2, Math.round(total / Math.max(2 * cfg.holeRadius, cfg.holeSpacing)));\n const step = total / N;\n const holes: { cx: number; cy: number }[] = [];\n for (let i = 0; i < N; i++) {\n const sCss = (i + 0.5) * step;\n if (rangeMask(sCss, total, params?.range) === 0) continue;\n const pt = sampler.perimeterAt(sCss);\n holes.push({ cx: pt.x, cy: pt.y });\n }\n const rx = cfg.holeRadius * sx;\n const ry = cfg.holeRadius * sy;\n return (\n <>\n {holes.map((h, i) => (\n <ellipse key={i} cx={h.cx} cy={h.cy} rx={rx} ry={ry} fill=\"black\" />\n ))}\n </>\n );\n },\n zone: 'mask',\n defaults: DEFAULTS as PerforationsEffectParams,\n};\n\nexport default Perforations;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\nexport interface Bevel2EffectParams {\n /** Bevel band width in CSS px. */\n bevelWidth?: number;\n /** Compass angle the light originates from, in degrees. 0° = top, 90° =\n * right, 180° = bottom, 270° = left (CSS `linear-gradient` convention). */\n lightFrom?: number;\n}\n\nconst DEFAULTS: Required<Bevel2EffectParams> = { bevelWidth: 6, lightFrom: 315 };\n\nconst SAMPLES = 240;\n\n// Six shade buckets from brightest to darkest. Each maps to a CSS class.\nconst SHADE_CLASSES = [\n 'badge-bevel-light', // brightest (normal points straight at light)\n 'badge-bevel-medium-light',\n 'badge-bevel-medium-light',\n 'badge-bevel-medium-dark',\n 'badge-bevel-medium-dark',\n 'badge-bevel-dark', // darkest (normal points away from light)\n];\n\nfunction lightDirFor(angleDeg: number): { lx: number; ly: number } {\n // Compass convention (0° = up, clockwise). Returns the unit vector pointing\n // outward from the badge toward the light source.\n const rad = (angleDeg * Math.PI) / 180;\n return { lx: Math.sin(rad), ly: -Math.cos(rad) };\n}\n\nconst Bevel2: EffectModule<Bevel2EffectParams> = {\n Component: ({ sampler, boxW, boxH, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle') return null;\n const cfg = { ...DEFAULTS, ...params };\n const clipId = useId();\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const total = sampler.totalCss;\n const { lx, ly } = lightDirFor(cfg.lightFrom);\n\n const outer: { x: number; y: number; bucket: number }[] = [];\n const inner: { x: number; y: number }[] = [];\n for (let i = 0; i < SAMPLES; i++) {\n const pt = sampler.perimeterAt((i / SAMPLES) * total);\n // dot(n, lightDir) where light points FROM the corner OUTWARD: surfaces whose\n // outward normal aligns with -light (facing the light source) are brightest.\n const d = -(pt.nx * lx + pt.ny * ly);\n // d ∈ [-1, 1]. Map to [0, SHADE_CLASSES.length).\n const t = Math.max(0, Math.min((d + 1) / 2, 0.9999));\n const bucket = Math.floor(t * SHADE_CLASSES.length);\n outer.push({ x: pt.x, y: pt.y, bucket });\n inner.push({\n x: pt.x - pt.nx * cfg.bevelWidth * sx,\n y: pt.y - pt.ny * cfg.bevelWidth * sy,\n });\n }\n\n interface Run { bucket: number; idxs: number[] }\n const runs: Run[] = [];\n let cur: Run | null = null;\n for (let i = 0; i < SAMPLES; i++) {\n const bucket = outer[i].bucket;\n if (!cur || cur.bucket !== bucket) {\n cur = { bucket, idxs: [i] };\n runs.push(cur);\n } else {\n cur.idxs.push(i);\n }\n }\n if (runs.length > 1 && runs[0].bucket === runs[runs.length - 1].bucket) {\n runs[runs.length - 1].idxs = runs[runs.length - 1].idxs.concat(runs[0].idxs);\n runs.shift();\n }\n\n const pathFor = (run: Run): string => {\n // Each band overlaps its neighbours by one sample on each side so the seams between\n // shade buckets render without gaps.\n const first = run.idxs[0];\n const last = run.idxs[run.idxs.length - 1];\n const prev = (first - 1 + SAMPLES) % SAMPLES;\n const next = (last + 1) % SAMPLES;\n const expandedIdxs = [prev, ...run.idxs, next];\n const outerPts = expandedIdxs.map((i) => outer[i]);\n const innerPts = expandedIdxs.map((i) => inner[i]).reverse();\n const pts = [...outerPts, ...innerPts];\n let d = `M ${pts[0].x.toFixed(3)} ${pts[0].y.toFixed(3)}`;\n for (let i = 1; i < pts.length; i++) {\n d += ` L ${pts[i].x.toFixed(3)} ${pts[i].y.toFixed(3)}`;\n }\n return d + ' Z';\n };\n\n return (\n <>\n <defs>\n <clipPath id={clipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n </defs>\n <g clipPath={`url(#${clipId})`}>\n {runs.map((run, i) => (\n <path key={i} className={SHADE_CLASSES[run.bucket]} d={pathFor(run)} />\n ))}\n </g>\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Bevel2;\n","import type { EffectModule } from '../bases/types';\n\nexport interface OutlineEffectParams {\n /** Stroke width in CSS px. */\n width?: number;\n /** Stroke color. */\n color?: string;\n /** Optional SVG dasharray (e.g. \"4 2\"). */\n dash?: string;\n /** CSS mix-blend-mode: 'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten',\n * 'difference', etc. Useful when the outline color should react to whatever's behind it. */\n blendMode?: string;\n /** 0..1 stroke opacity. */\n opacity?: number;\n}\n\nconst DEFAULTS: Required<OutlineEffectParams> = {\n width: 1,\n color: 'var(--badge-edge)',\n dash: '',\n blendMode: 'normal',\n opacity: 1,\n};\n\nconst Outline: EffectModule<OutlineEffectParams> = {\n Component: ({ sampler, boxW, boxH, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const widthVb = cfg.width * Math.max(sx, sy);\n return (\n <path\n d={sampler.bodyPath}\n fill=\"none\"\n stroke={cfg.color}\n strokeWidth={widthVb}\n strokeDasharray={cfg.dash || undefined}\n strokeOpacity={cfg.opacity}\n vectorEffect=\"non-scaling-stroke\"\n style={{ mixBlendMode: cfg.blendMode as never }}\n />\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Outline;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\nexport interface SunbeamsEffectParams {\n /** Number of beams (parallelograms) cast across the body. */\n count?: number;\n /** Beam width in CSS px (measured horizontally before the skew). */\n width?: number;\n /** Gap between adjacent beams in CSS px. */\n gap?: number;\n /** Skew angle in degrees. 0 = vertical bars; positive = leaning right. */\n angle?: number;\n /** 0..1 lightness opacity. */\n opacity?: number;\n /** Beam color. Defaults to white. */\n color?: string;\n /** Drift the beam pattern left/right by N CSS px (lets you slide the \"window\" over the body). */\n offset?: number;\n /** 0..1 perturbs each beam's width, opacity, and angle slightly with a deterministic\n * per-beam noise; 0 = perfectly regular. */\n irregularity?: number;\n /** Gradient mask angle in degrees. 0 = left→right, 90 = top→bottom. */\n gradientAngle?: number;\n /** Position along the gradient axis (0..1) where the mask is fully opaque (beams visible). */\n gradientStart?: number;\n /** Position along the gradient axis (0..1) where the mask is fully transparent (beams faded out). */\n gradientEnd?: number;\n}\n\nconst DEFAULTS: Required<SunbeamsEffectParams> = {\n count: 3,\n width: 18,\n gap: 8,\n angle: 28,\n opacity: 0.18,\n color: '#ffffff',\n offset: 0,\n irregularity: 0,\n gradientAngle: 90,\n gradientStart: 0,\n gradientEnd: 1,\n};\n\nconst Sunbeams: EffectModule<SunbeamsEffectParams> = {\n Component: ({ sampler, boxW, boxH, params }) => {\n const cfg = { ...DEFAULTS, ...params };\n const clipId = useId();\n const maskId = useId();\n const gradId = useId();\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const irr = Math.max(0, Math.min(cfg.irregularity, 1));\n\n // Per-beam pseudo-random multipliers (deterministic by index).\n const widthMult = (i: number) => 1 + irr * 0.45 * Math.sin(i * 1.73 + 0.7);\n const opacityMult = (i: number) => 1 + irr * 0.5 * Math.sin(i * 2.31 + 1.3);\n const angleJitter = (i: number) => irr * 8 * Math.sin(i * 3.07 + 0.4); // degrees\n\n // Total horizontal span (centered on x=50). We compute using nominal widths so the\n // pattern's centering is stable as irregularity moves individual beam widths.\n const nominalWidthVb = cfg.width * sx;\n const gapVb = cfg.gap * sx;\n const offsetVb = cfg.offset * sx;\n const totalWidth = cfg.count * nominalWidthVb + (cfg.count - 1) * gapVb;\n let cursorX = 50 - totalWidth / 2 + offsetVb;\n const yTop = -50;\n const yBot = 150;\n\n const beams: { points: string; opacity: number }[] = [];\n for (let i = 0; i < cfg.count; i++) {\n const beamWidthVb = nominalWidthVb * widthMult(i);\n const x1 = cursorX;\n const x2 = cursorX + beamWidthVb;\n const tan = Math.tan(((cfg.angle + angleJitter(i)) * Math.PI) / 180);\n const horizPerVb = tan * (sx / sy);\n const halfShear = horizPerVb * (yBot - yTop) / 2;\n const pts = [\n [x1 + halfShear, yTop],\n [x2 + halfShear, yTop],\n [x2 - halfShear, yBot],\n [x1 - halfShear, yBot],\n ];\n beams.push({\n points: pts.map(([px, py]) => `${px.toFixed(3)},${py.toFixed(3)}`).join(' '),\n opacity: Math.max(0, Math.min(cfg.opacity * opacityMult(i), 1)),\n });\n cursorX += nominalWidthVb + gapVb;\n }\n\n // Gradient mask geometry: define a linear gradient from one edge of the viewBox to the\n // other along `gradientAngle`. Position the start/end stops along that 0..1 axis.\n const ga = (cfg.gradientAngle * Math.PI) / 180;\n const cosA = Math.cos(ga), sinA = Math.sin(ga);\n // Vector from centre to edge along the axis. Pick a long-enough span so 0..1 covers\n // the badge fully.\n const span = 100; // viewBox units along the axis from (50-50cos, 50-50sin) to (50+50cos, 50+50sin)\n const x1g = 50 - cosA * span / 2;\n const y1g = 50 - sinA * span / 2;\n const x2g = 50 + cosA * span / 2;\n const y2g = 50 + sinA * span / 2;\n\n const gs = Math.max(0, Math.min(cfg.gradientStart, 1));\n const ge = Math.max(0, Math.min(cfg.gradientEnd, 1));\n // Build stops so the gradient is white (opaque) at `gs` and black (transparent) at `ge`,\n // working whether gs < ge or vice versa.\n const stops = gs <= ge\n ? [\n { offset: 0, color: '#fff' },\n { offset: gs, color: '#fff' },\n { offset: ge, color: '#000' },\n { offset: 1, color: '#000' },\n ]\n : [\n { offset: 0, color: '#000' },\n { offset: ge, color: '#000' },\n { offset: gs, color: '#fff' },\n { offset: 1, color: '#fff' },\n ];\n\n return (\n <>\n <defs>\n <clipPath id={clipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n <linearGradient id={gradId} x1={x1g} y1={y1g} x2={x2g} y2={y2g} gradientUnits=\"userSpaceOnUse\">\n {stops.map((s, i) => <stop key={i} offset={s.offset} stopColor={s.color} />)}\n </linearGradient>\n <mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"100\" height=\"100\">\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill={`url(#${gradId})`} />\n </mask>\n </defs>\n <g clipPath={`url(#${clipId})`} mask={`url(#${maskId})`}>\n {beams.map((b, i) => (\n <polygon key={i} points={b.points} fill={cfg.color} opacity={b.opacity} />\n ))}\n </g>\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Sunbeams;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\n/**\n * Aqua-glass treatment — composes onto any badge silhouette by walking the\n * sampler's perimeter and painting four layered sub-effects in one pass:\n *\n * 1. Body gradient — vertical tint that runs translucent-top through a\n * bright equator band into a dark base.\n * 2. Specular gloss — upper-hemisphere white-fade clipped to the body.\n * 3. Bezel highlight — bright stroke along perimeter segments whose\n * outward normal points up (`ny < 0`). On a pill that's\n * the upper half; on a hex it's the three top edges;\n * on a starburst it's the upward tips. Normal-aware,\n * not bbox-aligned, which is what makes it work on\n * arbitrary silhouettes.\n * 4. Rim outline — faint dark stroke along the full perimeter.\n *\n * For the *truly* translucent look (with backdrop-filter blur reading the\n * surface behind the badge), use this with `variant=\"outline\"` so the badge's\n * own flat fill doesn't paint behind the gradient, and set\n * `backdrop-filter: blur(...)` on the host element via CSS.\n */\nexport interface AquaEffectParams {\n /** Body tint. Defaults to `var(--badge-edge)` so the badge's tone drives it. */\n accent?: string;\n /** Stop opacities along the body gradient (0..1). */\n topAlpha?: number;\n upperAlpha?: number;\n /** Equator Y position in viewBox units (0..100). */\n equator?: number;\n /** Half-width of the transition band around the equator (viewBox units). */\n equatorSpread?: number;\n /** Mix ratios for the bright equator and dark base stops (0..100, % accent). */\n equatorTint?: number;\n baseTint?: number;\n /** Specular gloss params. */\n glossTopAlpha?: number;\n glossMidAlpha?: number;\n /** Y extent the gloss covers, in viewBox units. 50 = upper hemisphere. */\n glossExtent?: number;\n /** Normal-aware bezel highlight. */\n bezelAlpha?: number;\n bezelWidth?: number; // CSS px\n /** Full-perimeter rim. */\n rimAlpha?: number;\n rimWidth?: number; // CSS px\n}\n\nconst DEFAULTS: Required<AquaEffectParams> = {\n accent: 'var(--badge-edge)',\n topAlpha: 0.45,\n upperAlpha: 0.7,\n equator: 52,\n equatorSpread: 12,\n equatorTint: 95,\n baseTint: 70,\n glossTopAlpha: 0.7,\n glossMidAlpha: 0.18,\n glossExtent: 50,\n bezelAlpha: 0.7,\n bezelWidth: 1,\n rimAlpha: 0.22,\n rimWidth: 1,\n};\n\nconst BEZEL_SAMPLES = 240;\n\nconst Aqua: EffectModule<AquaEffectParams> = {\n Component: ({ sampler, boxW, boxH, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle' && variant !== 'outline') return null;\n const cfg = { ...DEFAULTS, ...params };\n const bodyGradId = useId();\n const glossGradId = useId();\n const glossClipId = useId();\n\n // Walk the perimeter and collect contiguous runs where the outward normal\n // points up (ny < 0) — those segments will get the bezel highlight.\n const total = sampler.totalCss;\n type Pt = { x: number; y: number };\n const runs: Pt[][] = [];\n let cur: Pt[] | null = null;\n for (let i = 0; i < BEZEL_SAMPLES; i++) {\n const s = (i / BEZEL_SAMPLES) * total;\n const pt = sampler.perimeterAt(s);\n if (pt.ny < 0) {\n if (!cur) {\n cur = [];\n runs.push(cur);\n }\n cur.push({ x: pt.x, y: pt.y });\n } else {\n cur = null;\n }\n }\n // Wraparound: if first sample and last sample are both \"up\", merge the\n // tail into the head so the bezel renders as one stroke across s=0.\n if (runs.length > 1) {\n const firstSample = sampler.perimeterAt(0);\n const lastSample = sampler.perimeterAt(((BEZEL_SAMPLES - 1) / BEZEL_SAMPLES) * total);\n if (firstSample.ny < 0 && lastSample.ny < 0) {\n const head = runs.shift()!;\n runs[runs.length - 1].push(...head);\n }\n }\n const bezelPaths: string[] = [];\n for (const run of runs) {\n if (run.length < 2) continue;\n let d = `M ${run[0].x.toFixed(3)} ${run[0].y.toFixed(3)}`;\n for (let i = 1; i < run.length; i++) {\n d += ` L ${run[i].x.toFixed(3)} ${run[i].y.toFixed(3)}`;\n }\n bezelPaths.push(d);\n }\n\n // Stroke widths in CSS px → viewBox units. The badge SVG is 100×100 with\n // preserveAspectRatio=\"none\", so use the larger inverse-scale to keep\n // the stroke from getting too thin in either axis.\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const widthScale = Math.max(sx, sy);\n const bezelWidthVb = cfg.bezelWidth * widthScale;\n const rimWidthVb = cfg.rimWidth * widthScale;\n\n const equatorLo = Math.max(0, cfg.equator - cfg.equatorSpread);\n const equatorHi = Math.min(100, cfg.equator + cfg.equatorSpread * 1.6);\n const equatorBrightColor = `color-mix(in srgb, ${cfg.accent} ${cfg.equatorTint}%, white)`;\n const baseColor = `color-mix(in srgb, ${cfg.accent} ${cfg.baseTint}%, black)`;\n\n return (\n <>\n <defs>\n <linearGradient id={bodyGradId} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" style={{ stopColor: cfg.accent, stopOpacity: cfg.topAlpha }} />\n <stop offset={`${equatorLo}%`} style={{ stopColor: cfg.accent, stopOpacity: cfg.upperAlpha }} />\n <stop offset={`${cfg.equator}%`} style={{ stopColor: equatorBrightColor, stopOpacity: 1 }} />\n <stop offset={`${equatorHi}%`} style={{ stopColor: cfg.accent, stopOpacity: 1 }} />\n <stop offset=\"100%\" style={{ stopColor: baseColor, stopOpacity: 1 }} />\n </linearGradient>\n <linearGradient id={glossGradId} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2={`${cfg.glossExtent}%`}>\n <stop offset=\"0%\" style={{ stopColor: 'white', stopOpacity: cfg.glossTopAlpha }} />\n <stop offset=\"60%\" style={{ stopColor: 'white', stopOpacity: cfg.glossMidAlpha }} />\n <stop offset=\"100%\" style={{ stopColor: 'white', stopOpacity: 0 }} />\n </linearGradient>\n <clipPath id={glossClipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n </defs>\n\n {/* 1. Body — vertical gradient over the silhouette */}\n <path d={sampler.bodyPath} fill={`url(#${bodyGradId})`} style={{ pointerEvents: 'none' }} />\n\n {/* 2. Gloss — upper region, clipped to silhouette */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100\"\n height={cfg.glossExtent}\n fill={`url(#${glossGradId})`}\n clipPath={`url(#${glossClipId})`}\n style={{ pointerEvents: 'none' }}\n />\n\n {/* 3. Bezel — stroke segments where normal points up */}\n {bezelPaths.map((d, i) => (\n <path\n key={`bz-${i}`}\n d={d}\n fill=\"none\"\n stroke=\"white\"\n strokeOpacity={cfg.bezelAlpha}\n strokeWidth={bezelWidthVb}\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n style={{ pointerEvents: 'none' }}\n />\n ))}\n\n {/* 4. Rim — full perimeter at low opacity */}\n <path\n d={sampler.bodyPath}\n fill=\"none\"\n stroke=\"black\"\n strokeOpacity={cfg.rimAlpha}\n strokeWidth={rimWidthVb}\n vectorEffect=\"non-scaling-stroke\"\n style={{ pointerEvents: 'none' }}\n />\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Aqua;\n","import { useId } from 'react';\nimport type { EffectModule } from '../bases/types';\n\n/**\n * Metal — opaque cousin of the Aqua treatment. Same four sub-passes (body\n * gradient, specular gloss, normal-aware bezel, perimeter rim), but tuned\n * for an opaque metallic surface with a single tunable `specularity`\n * parameter that drives how sharp / contrasty the highlights read.\n *\n * Low specularity → matte aluminum / brushed pewter feel: muted contrast,\n * soft gloss, faint bezel.\n * High specularity → chrome / polished steel: sharp specular peak at the\n * equator, bright bezel and rim, hard transitions in the body gradient.\n *\n * The same `specularity` knob multiplies the equator brightness, gloss\n * alpha, bezel alpha, and rim alpha — so one slider moves the whole\n * surface along a coherent matte-to-mirror axis.\n */\nexport interface MetalEffectParams {\n /** Base metal color. Defaults to a neutral steel; pass e.g. `'#c8a657'` for brass. */\n accent?: string;\n /** 0 = matte, 1 = mirror. Multiplies the brightness of the equator, gloss,\n * bezel, and rim simultaneously. */\n specularity?: number;\n /** Equator Y position (viewBox units, 0..100). */\n equator?: number;\n /** Half-width of the bright equator band. Smaller = sharper specular. */\n equatorSpread?: number;\n /** How dark the upper and lower extremes are (% accent vs black, 0..100). */\n topDarkness?: number;\n baseDarkness?: number;\n /** Gloss params. */\n glossExtent?: number;\n /** Per-zone alpha *baselines* — scaled by `specularity`. */\n glossAlphaTop?: number;\n bezelAlpha?: number;\n bezelWidth?: number; // CSS px\n rimAlpha?: number;\n rimWidth?: number; // CSS px\n}\n\nconst DEFAULTS: Required<MetalEffectParams> = {\n accent: '#aab3bd', // neutral steel\n specularity: 0.6,\n equator: 50,\n equatorSpread: 8,\n topDarkness: 55,\n baseDarkness: 35,\n glossExtent: 50,\n glossAlphaTop: 0.55,\n bezelAlpha: 0.85,\n bezelWidth: 1,\n rimAlpha: 0.35,\n rimWidth: 1,\n};\n\nconst BEZEL_SAMPLES = 240;\n\nconst Metal: EffectModule<MetalEffectParams> = {\n Component: ({ sampler, boxW, boxH, variant, params }) => {\n if (variant !== 'solid' && variant !== 'subtle' && variant !== 'outline') return null;\n const cfg = { ...DEFAULTS, ...params };\n const spec = Math.max(0, Math.min(cfg.specularity, 1));\n const bodyGradId = useId();\n const glossGradId = useId();\n const glossClipId = useId();\n\n // --- Bezel sample walk (same as Aqua: runs where ny < 0). ---\n const total = sampler.totalCss;\n type Pt = { x: number; y: number };\n const runs: Pt[][] = [];\n let cur: Pt[] | null = null;\n for (let i = 0; i < BEZEL_SAMPLES; i++) {\n const s = (i / BEZEL_SAMPLES) * total;\n const pt = sampler.perimeterAt(s);\n if (pt.ny < 0) {\n if (!cur) {\n cur = [];\n runs.push(cur);\n }\n cur.push({ x: pt.x, y: pt.y });\n } else {\n cur = null;\n }\n }\n if (runs.length > 1) {\n const firstSample = sampler.perimeterAt(0);\n const lastSample = sampler.perimeterAt(((BEZEL_SAMPLES - 1) / BEZEL_SAMPLES) * total);\n if (firstSample.ny < 0 && lastSample.ny < 0) {\n const head = runs.shift()!;\n runs[runs.length - 1].push(...head);\n }\n }\n const bezelPaths: string[] = [];\n for (const run of runs) {\n if (run.length < 2) continue;\n let d = `M ${run[0].x.toFixed(3)} ${run[0].y.toFixed(3)}`;\n for (let i = 1; i < run.length; i++) {\n d += ` L ${run[i].x.toFixed(3)} ${run[i].y.toFixed(3)}`;\n }\n bezelPaths.push(d);\n }\n\n const sx = 100 / boxW;\n const sy = 100 / boxH;\n const widthScale = Math.max(sx, sy);\n const bezelWidthVb = cfg.bezelWidth * widthScale;\n const rimWidthVb = cfg.rimWidth * widthScale;\n\n // Gradient construction. Specularity sharpens by:\n // 1. Driving the equator peak from neutral accent toward pure white.\n // 2. Boosting gloss/bezel/rim alpha (applied below).\n // 3. Increasing the contrast between dark stops and the equator stop.\n const equatorLo = Math.max(0, cfg.equator - cfg.equatorSpread);\n const equatorHi = Math.min(100, cfg.equator + cfg.equatorSpread);\n // At spec=0 the equator is just the accent; at spec=1 it's almost white.\n const equatorWhiteMix = 100 - Math.round(spec * 85);\n const equatorColor = `color-mix(in srgb, ${cfg.accent} ${equatorWhiteMix}%, white)`;\n const topDarkColor = `color-mix(in srgb, ${cfg.accent} ${cfg.topDarkness}%, black)`;\n const baseDarkColor = `color-mix(in srgb, ${cfg.accent} ${cfg.baseDarkness}%, black)`;\n // Bright stops on either side of the peak collapse toward the peak as\n // specularity rises, sharpening the highlight.\n const upperBrightMix = 100 - Math.round(spec * 50);\n const lowerBrightMix = 100 - Math.round(spec * 30);\n const upperBrightColor = `color-mix(in srgb, ${cfg.accent} ${upperBrightMix}%, white)`;\n const lowerBrightColor = `color-mix(in srgb, ${cfg.accent} ${lowerBrightMix}%, white)`;\n\n const glossAlpha = cfg.glossAlphaTop * spec;\n const bezelAlpha = cfg.bezelAlpha * (0.4 + 0.6 * spec);\n const rimAlpha = cfg.rimAlpha * (0.6 + 0.4 * spec);\n\n return (\n <>\n <defs>\n <linearGradient id={bodyGradId} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" style={{ stopColor: topDarkColor }} />\n <stop offset={`${equatorLo}%`} style={{ stopColor: upperBrightColor }} />\n <stop offset={`${cfg.equator}%`} style={{ stopColor: equatorColor }} />\n <stop offset={`${equatorHi}%`} style={{ stopColor: lowerBrightColor }} />\n <stop offset=\"100%\" style={{ stopColor: baseDarkColor }} />\n </linearGradient>\n <linearGradient id={glossGradId} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2={`${cfg.glossExtent}%`}>\n <stop offset=\"0%\" style={{ stopColor: 'white', stopOpacity: glossAlpha }} />\n <stop offset=\"100%\" style={{ stopColor: 'white', stopOpacity: 0 }} />\n </linearGradient>\n <clipPath id={glossClipId}>\n <path d={sampler.bodyPath} />\n </clipPath>\n </defs>\n\n <path d={sampler.bodyPath} fill={`url(#${bodyGradId})`} style={{ pointerEvents: 'none' }} />\n\n {glossAlpha > 0 && (\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100\"\n height={cfg.glossExtent}\n fill={`url(#${glossGradId})`}\n clipPath={`url(#${glossClipId})`}\n style={{ pointerEvents: 'none' }}\n />\n )}\n\n {bezelPaths.map((d, i) => (\n <path\n key={`bz-${i}`}\n d={d}\n fill=\"none\"\n stroke=\"white\"\n strokeOpacity={bezelAlpha}\n strokeWidth={bezelWidthVb}\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n style={{ pointerEvents: 'none' }}\n />\n ))}\n\n <path\n d={sampler.bodyPath}\n fill=\"none\"\n stroke=\"black\"\n strokeOpacity={rimAlpha}\n strokeWidth={rimWidthVb}\n vectorEffect=\"non-scaling-stroke\"\n style={{ pointerEvents: 'none' }}\n />\n </>\n );\n },\n zone: 'foreground',\n defaults: DEFAULTS,\n};\n\nexport default Metal;\n","import type { EffectModule } from '../bases/types';\nimport Spikes, { type SpikesEffectParams } from './Spikes';\nimport Puffs, { type PuffsEffectParams } from './Puffs';\nimport Bites, { type BitesEffectParams } from './Bites';\nimport Scallops, { type ScallopsEffectParams } from './Scallops';\nimport Bevel, { type BevelEffectParams } from './Bevel';\nimport Sheen, { type SheenEffectParams } from './Sheen';\nimport Rivets, { type RivetsEffectParams } from './Rivets';\nimport Shadow, { type ShadowEffectParams } from './Shadow';\nimport Woodgrain, { type WoodgrainEffectParams } from './Woodgrain';\nimport Perforations, { type PerforationsEffectParams } from './Perforations';\nimport Bevel2, { type Bevel2EffectParams } from './Bevel2';\nimport Outline, { type OutlineEffectParams } from './Outline';\nimport Sunbeams, { type SunbeamsEffectParams } from './Sunbeams';\nimport Aqua, { type AquaEffectParams } from './Aqua';\nimport Metal, { type MetalEffectParams } from './Metal';\n\nexport type BadgeEffect =\n | 'spikes' | 'puffs' | 'bites' | 'scallops'\n | 'bevel' | 'bevel2' | 'sheen' | 'sunbeams' | 'rivets' | 'shadow' | 'woodgrain' | 'perforations' | 'outline'\n | 'aqua' | 'metal';\n\nexport interface BadgeEffectParams {\n spikes: SpikesEffectParams;\n puffs: PuffsEffectParams;\n bites: BitesEffectParams;\n scallops: ScallopsEffectParams;\n bevel: BevelEffectParams;\n bevel2: Bevel2EffectParams;\n sheen: SheenEffectParams;\n rivets: RivetsEffectParams;\n shadow: ShadowEffectParams;\n woodgrain: WoodgrainEffectParams;\n perforations: PerforationsEffectParams;\n outline: OutlineEffectParams;\n sunbeams: SunbeamsEffectParams;\n aqua: AquaEffectParams;\n metal: MetalEffectParams;\n}\n\nexport const EFFECTS: Record<BadgeEffect, EffectModule<any>> = {\n spikes: Spikes,\n puffs: Puffs,\n bites: Bites,\n scallops: Scallops,\n bevel: Bevel,\n bevel2: Bevel2,\n sheen: Sheen,\n rivets: Rivets,\n shadow: Shadow,\n woodgrain: Woodgrain,\n perforations: Perforations,\n outline: Outline,\n sunbeams: Sunbeams,\n aqua: Aqua,\n metal: Metal,\n};\n\nexport interface EffectSpec<E extends BadgeEffect = BadgeEffect> {\n type: E;\n params?: BadgeEffectParams[E];\n}\n","import { useEffect, useId, useLayoutEffect, useRef, useState, type ReactNode, type CSSProperties } from 'react';\nimport s from './Badge.module.css';\nimport { SHAPES, type BadgeShapeParams } from './shapes';\nimport { BASES, type BadgeBase, type BadgeBaseParams } from './bases';\nimport { EFFECTS, type EffectSpec, type BadgeEffect } from './effects';\nimport type { BadgeShape, BadgeTone, BadgeVariant, BadgeSize } from './types';\n\ninterface BadgeBaseProps {\n tone?: BadgeTone;\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** \"Edge bloat\": offset every base perimeter sample outward by N CSS px along the normal\n * before any compose effects run. Negative values shrink the silhouette. Photoshop-style\n * expand-selection on the body. */\n bloat?: number;\n padding?: number | string;\n /**\n * For CSS-rendered shapes (pill, plain) that fragment across line wraps, controls how the\n * background/border behaves at each break.\n * - `'slice'` (default): decoration is severed at the break (looks like one continuous badge cut by the line).\n * - `'clone'`: each fragment paints its own complete decoration (looks like two separate badges).\n */\n breakStyle?: 'slice' | 'clone';\n /** When set, perimeter-pattern shapes (beavis, cloud, postage, scalloped) continuously shift their pattern. */\n crawl?: boolean | number;\n /** Compose-mode: base shape underneath the badge content. When set, overrides the `shape` prop. */\n base?: BadgeBase;\n baseParams?: BadgeBaseParams[BadgeBase];\n /** Compose-mode: layered effects applied around / over the base. */\n effects?: EffectSpec[];\n onClick?: () => void;\n onRemove?: () => void;\n removeLabel?: string;\n href?: string;\n as?: 'span' | 'button' | 'a';\n children: ReactNode;\n className?: string;\n /** Optional style overrides merged with the badge's own style. Useful for setting CSS\n * custom properties (e.g. `--badge-edge` to inject a custom tone color). */\n style?: CSSProperties;\n 'aria-label'?: string;\n}\n\ntype BadgePropsByShape = {\n [S in BadgeShape]: BadgeBaseProps & { shape?: S; shapeParams?: BadgeShapeParams[S] };\n}[BadgeShape];\n\nexport type BadgeProps = BadgePropsByShape;\n\nfunction chooseElement(props: BadgeProps): 'span' | 'button' | 'a' {\n if (props.as) return props.as;\n if (props.href) return 'a';\n if (props.onClick) return 'button';\n return 'span';\n}\n\nexport function Badge(props: BadgeProps) {\n const {\n shape = 'pill',\n tone = 'neutral',\n variant = 'outline',\n size = 'sm',\n onClick,\n onRemove,\n removeLabel,\n href,\n children,\n className,\n shapeParams,\n bloat,\n padding,\n style: styleOverride,\n breakStyle,\n crawl,\n base,\n baseParams,\n effects,\n } = props;\n const ariaLabel = props['aria-label'];\n const element = chooseElement(props);\n const [focused, setFocused] = useState(false);\n const [phase, setPhase] = useState(0);\n const shapeModule = SHAPES[shape] ?? SHAPES.pill;\n const resolvedShape = SHAPES[shape] ? shape : 'pill';\n const ShapeBody = shapeModule.Component;\n const params = { ...(shapeModule.defaults ?? {}), ...(shapeParams ?? {}) };\n\n useEffect(() => {\n if (!crawl) { setPhase(0); return; }\n const speed = typeof crawl === 'number' ? crawl : 0.2;\n let raf = 0;\n let last = performance.now();\n const tick = (now: number) => {\n const dt = (now - last) / 1000;\n last = now;\n setPhase((p) => (p + speed * dt) % 1);\n raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [crawl]);\n const cls = [s.badge, className].filter(Boolean).join(' ');\n\n // Compose-mode: explicit `base` prop wins; otherwise the shape may declare its own\n // `compose()` spec to migrate legacy shapes through the new pipeline.\n const shapeComposeSpec = !base && shapeModule.compose ? shapeModule.compose(params) : null;\n const resolvedBaseKey = base ?? (shapeComposeSpec?.base as BadgeBase | undefined);\n const composeBase = resolvedBaseKey ? BASES[resolvedBaseKey] : null;\n const resolvedBaseParams = base\n ? baseParams\n : (shapeComposeSpec?.baseParams as BadgeBaseParams[BadgeBase] | undefined);\n const resolvedEffects: EffectSpec[] | undefined = base\n ? effects\n : (shapeComposeSpec?.effects as EffectSpec[] | undefined) ?? effects;\n const composeBaseParams = composeBase ? { ...(composeBase.defaults ?? {}), ...(resolvedBaseParams ?? {}) } : null;\n const decoRef = useRef<SVGSVGElement>(null);\n const [box, setBox] = useState({ w: 100, h: 100 });\n useLayoutEffect(() => {\n if (!composeBase) return;\n const svg = decoRef.current;\n if (!svg) return;\n const update = () => {\n const r = svg.getBoundingClientRect();\n if (r.width > 0 && r.height > 0) setBox({ w: r.width, h: r.height });\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(update);\n ro.observe(svg);\n return () => ro.disconnect();\n }, [composeBase]);\n\n const sampler = composeBase ? composeBase.build(composeBaseParams, box.w, box.h) : null;\n\n const insetsSource = composeBase\n ? (typeof composeBase.insets === 'function' ? composeBase.insets(composeBaseParams) : composeBase.insets) ?? { top: 0, right: 0, bottom: 0, left: 0 }\n : (typeof shapeModule.insets === 'function' ? shapeModule.insets(params) : shapeModule.insets);\n const insets = insetsSource;\n const style: CSSProperties = {\n ['--badge-inset-top' as never]: `${insets.top}px`,\n ['--badge-inset-right' as never]: `${insets.right}px`,\n ['--badge-inset-bottom' as never]: `${insets.bottom}px`,\n ['--badge-inset-left' as never]: `${insets.left}px`,\n ...(padding !== undefined && { padding: typeof padding === 'number' ? `${padding}px` : padding }),\n ...(breakStyle !== undefined && {\n boxDecorationBreak: breakStyle,\n WebkitBoxDecorationBreak: breakStyle,\n }),\n ...styleOverride,\n };\n\n const commonProps = {\n className: cls,\n style,\n 'data-shape': composeBase ? 'compose' : resolvedShape,\n 'data-tone': tone,\n 'data-variant': variant,\n 'data-size': size,\n 'data-focused': focused ? 'true' : undefined,\n onFocus: () => setFocused(true),\n onBlur: () => setFocused(false),\n 'aria-label': ariaLabel,\n };\n\n // Honest chaining: sample the base perimeter at COMPOSE_SAMPLES points and sum every\n // offset-style effect's contribution at each sample. Stacked transforms therefore compose\n // additively — `[bites, spikes]` produces a bitten outline with spikes radiating from\n // wherever bites haven't dented inward.\n const COMPOSE_SAMPLES = 600;\n const composedSampler = (() => {\n if (!composeBase || !sampler) return null;\n const offsetMods = (resolvedEffects ?? [])\n .map((eff) => {\n const mod = EFFECTS[eff.type as keyof typeof EFFECTS];\n if (!mod?.offsetAt) return null;\n const effParams = { ...(mod.defaults ?? {}), ...(eff.params ?? {}) };\n return { offsetAt: mod.offsetAt, params: effParams };\n })\n .filter(Boolean) as { offsetAt: NonNullable<typeof EFFECTS[BadgeEffect]['offsetAt']>; params: Record<string, unknown> }[];\n const bloatCss = bloat ?? 0;\n if (offsetMods.length === 0 && bloatCss === 0) return sampler;\n const sx = 100 / box.w;\n const sy = 100 / box.h;\n const totalCss = sampler.totalCss;\n // Compute the warped sample point at any CSS arc length s — base perimeter sample\n // bloated outward by a constant CSS distance plus the sum of every offset effect's\n // contribution at that sample.\n const warpedXY = (sCss: number) => {\n const sm = ((sCss % totalCss) + totalCss) % totalCss;\n const pt = sampler.perimeterAt(sm);\n let dx = pt.nx * bloatCss;\n let dy = pt.ny * bloatCss;\n for (const m of offsetMods) {\n const o = m.offsetAt(sm, {\n params: m.params as never,\n phase,\n totalCss,\n perimeterAt: sampler.perimeterAt,\n });\n dx += o.dx;\n dy += o.dy;\n }\n return { x: pt.x + dx * sx, y: pt.y + dy * sy };\n };\n let d = '';\n for (let i = 0; i < COMPOSE_SAMPLES; i++) {\n const sCss = (i / COMPOSE_SAMPLES) * totalCss;\n const w = warpedXY(sCss);\n d += (i === 0 ? `M ${w.x.toFixed(3)} ${w.y.toFixed(3)}` : ` L ${w.x.toFixed(3)} ${w.y.toFixed(3)}`);\n }\n d += ' Z';\n // Replace perimeterAt with a warped version: warped point + normal recomputed from\n // the warped tangent (clockwise rotation of unit tangent). This is what decorations\n // like Bevel and Perforations need to follow the actual bumpy outline.\n const warpedPerimeterAt = (s: number) => {\n const sm = ((s % totalCss) + totalCss) % totalCss;\n const pt = warpedXY(sm);\n const eps = totalCss / (COMPOSE_SAMPLES * 2);\n const wA = warpedXY(sm - eps);\n const wB = warpedXY(sm + eps);\n // Convert finite-difference tangent back to \"CSS px\" by un-scaling per-axis.\n const tx = (wB.x - wA.x) / sx;\n const ty = (wB.y - wA.y) / sy;\n const tl = Math.hypot(tx, ty) || 1;\n // Outward normal: clockwise rotation of tangent (in CSS space), then renormalize\n // for unit length in viewBox terms when returned.\n const nxC = ty / tl;\n const nyC = -tx / tl;\n // Convert that CSS-space normal back to a viewBox-space unit-ish normal: the\n // existing PerimeterPoint contract has nx/ny used multiplicatively with sx/sy in\n // call sites, matching the convention base perimeters use.\n return { x: pt.x, y: pt.y, nx: nxC, ny: nyC };\n };\n return { bodyPath: d, perimeterAt: warpedPerimeterAt, totalCss };\n })();\n\n const decoEffects = (resolvedEffects ?? []).filter((eff) => EFFECTS[eff.type as keyof typeof EFFECTS]?.Component);\n const backgroundDecorations = decoEffects.filter((eff) => (EFFECTS[eff.type as keyof typeof EFFECTS].zone ?? 'foreground') === 'background');\n const foregroundDecorations = decoEffects.filter((eff) => (EFFECTS[eff.type as keyof typeof EFFECTS].zone ?? 'foreground') === 'foreground');\n const maskDecorations = decoEffects.filter((eff) => EFFECTS[eff.type as keyof typeof EFFECTS].zone === 'mask');\n const bodyMaskId = `badge-mask-${useId().replace(/:/g, '')}`;\n\n const renderDecoration = (eff: EffectSpec, i: number) => {\n const mod = EFFECTS[eff.type as keyof typeof EFFECTS];\n const EffComponent = mod?.Component;\n if (!EffComponent || !composedSampler) return null;\n const effParams = { ...(mod.defaults ?? {}), ...(eff.params ?? {}) };\n return <EffComponent key={`${eff.type as string}-${i}`} sampler={composedSampler} boxW={box.w} boxH={box.h} variant={variant} params={effParams} phase={phase} />;\n };\n\n const decoSvg = composeBase && composedSampler ? (\n <svg ref={decoRef} className={s.deco} viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n {maskDecorations.length > 0 && (\n <defs>\n <mask id={bodyMaskId} maskUnits=\"userSpaceOnUse\" x=\"-10\" y=\"-10\" width=\"120\" height=\"120\">\n <rect x=\"-10\" y=\"-10\" width=\"120\" height=\"120\" fill=\"white\" />\n {maskDecorations.map(renderDecoration)}\n </mask>\n </defs>\n )}\n {backgroundDecorations.map(renderDecoration)}\n <g {...(maskDecorations.length > 0 ? { mask: `url(#${bodyMaskId})` } : {})}>\n {(variant === 'solid' || variant === 'subtle') && <path className=\"badge-fill\" d={composedSampler.bodyPath} />}\n {(variant === 'outline' || variant === 'solid') && <path className=\"badge-stroke\" d={composedSampler.bodyPath} />}\n </g>\n {foregroundDecorations.map(renderDecoration)}\n </svg>\n ) : shapeModule.renderMode !== 'css' && ShapeBody ? (\n <svg\n className={s.deco}\n viewBox=\"0 0 100 100\"\n preserveAspectRatio={shapeModule.stretches === false ? 'xMidYMid meet' : 'none'}\n aria-hidden=\"true\"\n >\n <ShapeBody variant={variant} focused={focused} params={params} phase={phase} />\n </svg>\n ) : null;\n\n const inner = (\n <>\n {decoSvg}\n <span className={s.content}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className={s.remove}\n aria-label={removeLabel ?? 'Remove'}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n >\n <svg viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M 2 2 L 8 8 M 8 2 L 2 8\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" fill=\"none\" />\n </svg>\n </button>\n )}\n </span>\n </>\n );\n\n if (element === 'button') {\n return (\n <button type=\"button\" {...commonProps} onClick={onClick}>\n {inner}\n </button>\n );\n }\n if (element === 'a') {\n return (\n <a href={href} {...commonProps} onClick={onClick}>\n {inner}\n </a>\n );\n }\n return <span {...commonProps}>{inner}</span>;\n}\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport s from './Button.module.css';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost';\nexport type ButtonSize = 'sm' | 'md';\n\ntype ButtonBase = {\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n fullWidth?: boolean;\n type?: 'button' | 'submit' | 'reset';\n className?: string;\n style?: ButtonHTMLAttributes<HTMLButtonElement>['style'];\n children?: ReactNode;\n onClick?: ButtonHTMLAttributes<HTMLButtonElement>['onClick'];\n};\n\ntype ButtonRegular = ButtonBase & {\n iconOnly?: false;\n ariaLabel?: string;\n};\n\ntype ButtonIconOnly = ButtonBase & {\n iconOnly: true;\n ariaLabel: string;\n};\n\nexport type ButtonProps = ButtonRegular | ButtonIconOnly;\n\nfunction Spinner(): ReactNode {\n return (\n <span className={s.spinner} aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\">\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeOpacity=\"0.25\"\n />\n <path\n d=\"M 8 2 A 6 6 0 0 1 14 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n );\n}\n\nexport const Button = forwardRef(function Button(\n props: ButtonProps,\n ref: Ref<HTMLButtonElement>,\n) {\n const {\n variant = 'secondary',\n size = 'md',\n disabled,\n loading,\n leadingIcon,\n trailingIcon,\n fullWidth,\n iconOnly,\n ariaLabel,\n type = 'button',\n className,\n style,\n children,\n onClick,\n } = props;\n\n const cls = [\n s.button,\n s[`variant_${variant}`],\n s[`size_${size}`],\n fullWidth && s.fullWidth,\n iconOnly && s.iconOnly,\n loading && s.loading,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const showLeading = !iconOnly && (loading || leadingIcon);\n\n return (\n <button\n ref={ref}\n type={type}\n className={cls}\n style={style}\n disabled={disabled}\n aria-busy={loading ? true : undefined}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {showLeading && (\n <span className={s.iconSlot}>{loading ? <Spinner /> : leadingIcon}</span>\n )}\n {iconOnly ? (\n loading ? <Spinner /> : <span className={s.iconSlot}>{children}</span>\n ) : (\n children !== undefined && <span className={s.label}>{children}</span>\n )}\n {!iconOnly && trailingIcon && (\n <span className={s.iconSlot}>{trailingIcon}</span>\n )}\n </button>\n );\n});\n","import { useCallback, useRef, useState } from 'react';\nimport type { ReactNode, PointerEvent as ReactPointerEvent, RefCallback } from 'react';\n\nexport interface LayerListItem {\n id: string;\n label: ReactNode;\n /** Locked rows cannot be dragged, cannot be crossed by drops, and\n * never combine with other rows in a multi-selection. */\n locked?: boolean;\n /** Optional color swatch rendered before the label. Any CSS color string. */\n swatch?: string;\n}\n\nexport interface UseReorderDragListOptions {\n items: LayerListItem[];\n selectedIds: string[];\n onReorder(ids: string[], targetIndex: number): void;\n /** Pointer-move distance (px) before pending drag engages. Default 4. */\n threshold?: number;\n}\n\nexport interface ReorderDragState {\n draggedIds: string[] | null;\n targetIndex: number | null;\n}\n\nexport interface ReorderDragHandlers {\n rowProps(id: string, index: number): { onPointerDown(e: ReactPointerEvent): void };\n containerProps: {\n ref: RefCallback<HTMLElement>;\n onPointerMove(e: ReactPointerEvent): void;\n onPointerUp(e: ReactPointerEvent): void;\n onPointerCancel(e: ReactPointerEvent): void;\n };\n state: ReorderDragState;\n}\n\ninterface PendingState {\n id: string;\n sourceIndex: number;\n startX: number;\n startY: number;\n pointerId: number;\n}\n\ninterface ActiveState extends PendingState {\n draggedIds: string[];\n targetIndex: number;\n}\n\nexport function useReorderDragList(opts: UseReorderDragListOptions): ReorderDragHandlers {\n const { threshold = 4 } = opts;\n const optsRef = useRef(opts);\n optsRef.current = opts;\n const containerRef = useRef<HTMLElement | null>(null);\n const pendingRef = useRef<PendingState | null>(null);\n const activeRef = useRef<ActiveState | null>(null);\n const [state, setState] = useState<ReorderDragState>({ draggedIds: null, targetIndex: null });\n\n const computeTargetIndex = useCallback((clientY: number): number => {\n const items = optsRef.current.items;\n // Locked rows act as walls — drops cannot cross them. Cap at the\n // first locked row's index (or items.length if none are locked).\n const firstLocked = items.findIndex((it) => it.locked);\n const cap = firstLocked === -1 ? items.length : firstLocked;\n const c = containerRef.current;\n if (!c) return 0;\n const rows = Array.from(c.children) as HTMLElement[];\n let raw = rows.length;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (!row) continue;\n const r = row.getBoundingClientRect();\n if (clientY < r.bottom) { raw = i; break; }\n }\n return Math.min(raw, cap);\n }, []);\n\n const refCb = useCallback<RefCallback<HTMLElement>>((el) => {\n containerRef.current = el;\n }, []);\n\n const onPointerDownRow = useCallback((id: string, index: number, e: ReactPointerEvent) => {\n // Locked items cannot be dragged — skip recording the pending state so\n // pointer-move cannot engage. Plain click still works because LayerList\n // tracks click intent in its own ref, separate from drag candidacy.\n const item = optsRef.current.items[index];\n if (item?.locked) return;\n // Capture the pointer to the row so subsequent move/up events keep firing\n // (on the row, bubbling to the container) even when the user drags\n // outside the list's bounding box. Without capture, releasing outside\n // the container leaves the drag state stuck because pointerup fires on\n // the document, not the list.\n try { (e.currentTarget as Element).setPointerCapture?.(e.pointerId); } catch { /* unsupported / already captured */ }\n pendingRef.current = {\n id,\n sourceIndex: index,\n startX: e.clientX,\n startY: e.clientY,\n pointerId: e.pointerId,\n };\n }, []);\n\n const reset = useCallback(() => {\n pendingRef.current = null;\n activeRef.current = null;\n setState({ draggedIds: null, targetIndex: null });\n }, []);\n\n const onPointerMove = useCallback((e: ReactPointerEvent) => {\n const active = activeRef.current;\n if (active) {\n const targetIndex = computeTargetIndex(e.clientY);\n if (targetIndex !== active.targetIndex) {\n active.targetIndex = targetIndex;\n setState({ draggedIds: active.draggedIds, targetIndex });\n }\n return;\n }\n const pending = pendingRef.current;\n if (!pending) return;\n const dx = e.clientX - pending.startX;\n const dy = e.clientY - pending.startY;\n if (Math.hypot(dx, dy) < threshold) return;\n // Engage.\n const selected = optsRef.current.selectedIds;\n const inSelection = selected.includes(pending.id);\n const draggedIds = inSelection ? [...selected] : [pending.id];\n const targetIndex = computeTargetIndex(e.clientY);\n activeRef.current = { ...pending, draggedIds, targetIndex };\n setState({ draggedIds, targetIndex });\n }, [computeTargetIndex, threshold]);\n\n const onPointerUp = useCallback((e: ReactPointerEvent) => {\n const active = activeRef.current;\n if (!active) {\n reset();\n return;\n }\n const targetIndex = computeTargetIndex(e.clientY);\n // Skip no-op: target lands inside the dragged-ids contiguous block.\n const items = optsRef.current.items;\n const indices = active.draggedIds\n .map((id) => items.findIndex((it) => it.id === id))\n .filter((i) => i >= 0)\n .sort((a, b) => a - b);\n const isContiguous =\n indices.length > 0 &&\n indices.every((v, i) => {\n if (i === 0) return true;\n const prev = indices[i - 1];\n return prev !== undefined && v === prev + 1;\n });\n const first = indices[0];\n const last = indices[indices.length - 1];\n const wouldBeNoop =\n isContiguous &&\n first !== undefined &&\n last !== undefined &&\n targetIndex >= first &&\n targetIndex <= last + 1;\n if (!wouldBeNoop) {\n optsRef.current.onReorder(active.draggedIds, targetIndex);\n }\n reset();\n }, [computeTargetIndex, reset]);\n\n const onPointerCancel = useCallback(() => {\n reset();\n }, [reset]);\n\n return {\n rowProps: (id, index) => ({\n onPointerDown: (e) => onPointerDownRow(id, index, e),\n }),\n containerProps: {\n ref: refCb,\n onPointerMove,\n onPointerUp,\n onPointerCancel,\n },\n state,\n };\n}\n","/**\n * Lightweight sortable data grid. Use for inspector tables — action\n * registries, route maps, telemetry rows. Intentionally narrow:\n *\n * - Sortable columns (click header to cycle asc → desc → none)\n * - Custom cell render via per-column `render`\n * - Optional drag handles for row reordering (when `onReorder` is set)\n *\n * Not: virtual scrolling, column resizing, multi-column sort, filtering,\n * inline editing. Reach for a real grid library when you need those.\n */\nimport { Fragment, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useReorderDragList } from '../../useReorderDragList';\nimport s from './DataGrid.module.css';\n\nexport interface DataGridColumn<Row> {\n id: string;\n header: ReactNode;\n /** Pull a sortable value from the row. Defaults to `(row as any)[column.id]`. */\n accessor?: (row: Row) => string | number | null | undefined;\n /** Render the cell. Defaults to `String(accessor(row) ?? '')`. */\n render?: (row: Row) => ReactNode;\n /** Default true. Set false to suppress the sort affordance on this column. */\n sortable?: boolean;\n /** Optional CSS class on every <td> in this column. */\n className?: string;\n}\n\nexport interface DataGridProps<Row extends { id: string }> {\n rows: readonly Row[];\n columns: readonly DataGridColumn<Row>[];\n /** Initial sort. Omit for unsorted (rows render in input order). */\n defaultSort?: { columnId: string; direction: 'asc' | 'desc' };\n /** Enable drag handles in a leading column. Receives the reorder spec\n * (the existing `useReorderDragList` semantics — see weasel-ui). */\n onReorder?: (ids: string[], targetIndex: number) => void;\n /** Empty-state row text. Default `'—'`. */\n empty?: ReactNode;\n className?: string;\n}\n\ntype SortState = { columnId: string; direction: 'asc' | 'desc' } | null;\n\nexport function DataGrid<Row extends { id: string }>(props: DataGridProps<Row>) {\n const { rows, columns, defaultSort, onReorder, empty = '—', className } = props;\n const [sort, setSort] = useState<SortState>(defaultSort ?? null);\n\n const sortedRows = useMemo(() => {\n if (!sort) return [...rows];\n const col = columns.find((c) => c.id === sort.columnId);\n if (!col) return [...rows];\n const get = col.accessor ?? ((row: Row) => (row as unknown as Record<string, unknown>)[col.id] as string | number | null | undefined);\n const dir = sort.direction === 'asc' ? 1 : -1;\n return [...rows].sort((a, b) => {\n const av = get(a);\n const bv = get(b);\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (av < bv) return -1 * dir;\n if (av > bv) return 1 * dir;\n return 0;\n });\n }, [rows, columns, sort]);\n\n const cycleSort = (columnId: string) => {\n setSort((cur) => {\n if (!cur || cur.columnId !== columnId) return { columnId, direction: 'asc' };\n if (cur.direction === 'asc') return { columnId, direction: 'desc' };\n return null;\n });\n };\n\n // Drag handles via useReorderDragList. Adapter: the hook expects\n // `{ id, label }`-shaped items; we map our rows to that shape (label\n // unused — the hook only uses id and locked).\n const drag = useReorderDragList({\n items: sortedRows.map((r) => ({ id: r.id, label: '' })),\n selectedIds: [],\n onReorder: onReorder ?? (() => {}),\n });\n const dragEnabled = !!onReorder;\n\n const cls = [s.grid, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={cls}\n ref={dragEnabled ? (drag.containerProps.ref as React.RefCallback<HTMLDivElement>) : undefined}\n onPointerMove={dragEnabled ? drag.containerProps.onPointerMove : undefined}\n onPointerUp={dragEnabled ? drag.containerProps.onPointerUp : undefined}\n onPointerCancel={dragEnabled ? drag.containerProps.onPointerCancel : undefined}\n >\n <table className={s.table}>\n <thead>\n <tr>\n {dragEnabled && <th className={s.handleCol} aria-label=\"drag\" />}\n {columns.map((col) => {\n const sortable = col.sortable !== false;\n const active = sort?.columnId === col.id;\n const indicator = active ? (sort.direction === 'asc' ? ' ↑' : ' ↓') : '';\n return (\n <th\n key={col.id}\n className={[col.className, sortable ? s.sortable : '', active ? s.sortActive : '']\n .filter(Boolean).join(' ')}\n onClick={sortable ? () => cycleSort(col.id) : undefined}\n >\n {col.header}{indicator}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {sortedRows.length === 0 && (\n <tr>\n <td colSpan={columns.length + (dragEnabled ? 1 : 0)} className={s.empty}>\n {empty}\n </td>\n </tr>\n )}\n {sortedRows.map((row, i) => {\n const isDragging = drag.state.draggedIds?.includes(row.id) ?? false;\n return (\n <Fragment key={row.id}>\n <tr className={isDragging ? s.dragging : undefined}>\n {dragEnabled && (\n <td\n className={s.handleCell}\n onPointerDown={(e) => drag.rowProps(row.id, i).onPointerDown(e)}\n >\n <span aria-hidden=\"true\">⋮⋮</span>\n </td>\n )}\n {columns.map((col) => {\n const get = col.accessor ?? ((r: Row) => (r as unknown as Record<string, unknown>)[col.id] as string | number | null | undefined);\n const content = col.render ? col.render(row) : String(get(row) ?? '');\n return (\n <td key={col.id} className={col.className}>\n {content}\n </td>\n );\n })}\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n {dragEnabled && drag.state.targetIndex !== null && (\n <div\n className={s.dropIndicator}\n style={{ top: `${drag.state.targetIndex * 28}px` }}\n />\n )}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\nimport s from './Keycaps.module.css';\n\nconst MODIFIER_GLYPHS = new Set(['⌘', '⇪', '⌥', '⌃', '⇧']);\nconst WIDE_GLYPHS = new Set(['⇥', '↵', '␣']);\n\nexport type KeycapKind = 'modifier' | 'wide' | 'square';\n\nexport function inferKeycapKind(label: string): KeycapKind {\n if (MODIFIER_GLYPHS.has(label)) return 'modifier';\n if (WIDE_GLYPHS.has(label)) return 'wide';\n if (label.length > 1) return 'wide';\n return 'square';\n}\n\nexport type KeyCapVariant = 'default' | 'minimal';\n\nexport interface KeyCapProps {\n /** Glyph rendered in the chip (modifier or key). */\n label: string;\n /** Marks the chip as not required to trigger the action. In the default\n * variant the chip face inverts (dark face / light glyph) for\n * emphasis. In the `'minimal'` variant the chip's border becomes\n * dotted to read as \"may be held, but isn't required.\" */\n inverted?: boolean;\n /** Visual style. `'default'` (default) renders a filled chip; `'minimal'`\n * renders an unfilled chip whose border and legend are `currentColor`\n * — useful inline in colored prose / next to colored badges where the\n * chip should take the surrounding text color. */\n variant?: KeyCapVariant;\n className?: string;\n /** Optional inline style. Useful for one-off width overrides (e.g.\n * building a keyboard-layout where the space bar spans several\n * standard-key widths). The component sets no inline styles of its\n * own — everything else comes from the CSS module. */\n style?: CSSProperties;\n /** Override the chip's font-family. Accepts any CSS font-family\n * string. When omitted, the chip inherits from the design-system\n * UI font token (`--wzl-font-ui`). Useful for one-off cases where\n * a different face is desired — though the canonical move is to\n * override the CSS variable at the consumer's scope, not the prop. */\n font?: string;\n}\n\n/** Single bordered keycap chip for one glyph (modifier or key). Use\n * `KeySequence` to render a full shortcut. */\nexport function KeyCap({ label, inverted = false, variant = 'default', className, style, font }: KeyCapProps) {\n const resolvedStyle = font ? { ...style, fontFamily: font } : style;\n return (\n <kbd\n className={[s.key, className].filter(Boolean).join(' ')}\n data-kind={inferKeycapKind(label)}\n data-variant={variant === 'default' ? undefined : variant}\n data-inverted={inverted || undefined}\n style={resolvedStyle}\n >\n {label}\n </kbd>\n );\n}\n","import { Fragment } from 'react';\nimport s from './Keycaps.module.css';\nimport { KeyCap, inferKeycapKind, type KeyCapVariant } from './Keycap';\n\nexport interface KeySpec {\n /** Glyph rendered in the chip (modifier or key). */\n label: string;\n /** When true, the chip renders inverted to mark it as not required to\n * trigger the action (e.g. an optional modifier). Defaults to false. */\n optional?: boolean;\n}\n\nexport interface KeySequenceProps {\n /** Keys to render. `undefined` or empty renders a muted em-dash.\n * Modifiers are always rendered first regardless of input order; relative\n * order within each group is preserved. */\n keys: readonly KeySpec[] | undefined;\n /** Character inserted between the trailing modifier chip and the first\n * non-modifier chip (e.g. `'+'` renders `⌘ + K`). `null` or `''`\n * suppresses it. Defaults to `'+'`. */\n separator?: string | null;\n /** Forwarded to every `KeyCap` in the sequence. `'minimal'` renders\n * unfilled chips whose border + legend are `currentColor`. */\n variant?: KeyCapVariant;\n /** Forwarded to every `KeyCap` in the sequence. Overrides the design-\n * system UI font for that chip only. */\n font?: string;\n className?: string;\n}\n\n/** Renders a shortcut as a row of `KeyCap` chips, one per key. Optional\n * keys render inverted to distinguish them from required ones. */\nexport function KeySequence({ keys, separator = '+', variant = 'default', font, className }: KeySequenceProps) {\n if (!keys || keys.length === 0) {\n return <span className={[s.keysEmpty, className].filter(Boolean).join(' ')}>—</span>;\n }\n const ordered = keys\n .map((k, i) => ({ k, i }))\n .sort((a, b) => {\n const am = inferKeycapKind(a.k.label) === 'modifier' ? 0 : 1;\n const bm = inferKeycapKind(b.k.label) === 'modifier' ? 0 : 1;\n return am - bm || a.i - b.i;\n })\n .map(({ k }) => k);\n const sepIdx = ordered.findIndex((k) => inferKeycapKind(k.label) !== 'modifier');\n const showSep = !!separator && sepIdx > 0 && sepIdx < ordered.length;\n return (\n <span className={[s.keys, className].filter(Boolean).join(' ')}>\n {ordered.map((k, i) => (\n <Fragment key={i}>\n {showSep && i === sepIdx ? <span className={s.sep}>{separator}</span> : null}\n <KeyCap label={k.label} inverted={k.optional ?? false} variant={variant} font={font} />\n </Fragment>\n ))}\n </span>\n );\n}\n","import type { KeySpec } from './Keycaps';\n\n/** Logical modifier name. Matches the kit's `ModifierKey` in shape — kept as a\n * local type so `weasel-ui` stays independent of `@weasel-js/core`. */\nexport type LogicalMod = 'mod' | 'shift' | 'alt' | 'ctrl' | 'meta';\n\n/** Detected (or overridden) platform. `'mod'` resolves to ⌘ on macOS,\n * Ctrl on Windows / Linux. */\nexport type Platform = 'macos' | 'windows' | 'linux';\n\n/** Visual form of a modifier or named-key label.\n *\n * - `'auto'` (default): the per-entry, per-platform default — whatever\n * label is actually printed on the physical key. macOS keys show the\n * Apple glyphs (⌘ ⌥ ⌃ ⇧ ⎋ ↵ ⇥). Windows keys mostly show text\n * (Ctrl, Alt, Shift) BUT the Win key shows its logo (⊞) and the\n * context-menu key shows ▤. Linux mirrors Windows with Super (⊞).\n * - `'symbol'` forces the Apple-style glyph everywhere a symbolic form\n * exists. Entries without a widely-recognized symbol still fall\n * back to text.\n * - `'text'` always spells the label out (Cmd / Option / Esc / Enter). */\nexport type LegendStyle = 'auto' | 'symbol' | 'text';\n\nexport interface LogicalModSpec {\n name: LogicalMod;\n /** Marks this modifier as optional (may be held but isn't required).\n * Forwarded as the resulting `KeySpec.optional`. */\n optional?: boolean;\n}\n\nexport interface KeySpecsFromModsOptions {\n /** Override OS detection. Defaults to the detected platform, or\n * `'macos'` when detection is unavailable (e.g. in tests, or when\n * `navigator` is missing). */\n platform?: Platform;\n /** Defaults to `'auto'` (symbol on macOS, text everywhere else). Pass\n * `'symbol'` or `'text'` to force a specific style regardless of\n * platform. */\n legend?: LegendStyle;\n}\n\nconst MOD_BY_PLATFORM: Record<LogicalMod, Record<Platform, Record<LegendStyle, string>>> = {\n mod: {\n macos: { auto: '⌘', symbol: '⌘', text: 'Cmd' },\n windows: { auto: 'Ctrl', symbol: 'Ctrl', text: 'Ctrl' },\n linux: { auto: 'Ctrl', symbol: 'Ctrl', text: 'Ctrl' },\n },\n shift: {\n macos: { auto: '⇧', symbol: '⇧', text: 'Shift' },\n windows: { auto: '⇧', symbol: '⇧', text: 'Shift' },\n linux: { auto: '⇧', symbol: '⇧', text: 'Shift' },\n },\n alt: {\n macos: { auto: '⌥', symbol: '⌥', text: 'Option' },\n windows: { auto: 'Alt', symbol: 'Alt', text: 'Alt' },\n linux: { auto: 'Alt', symbol: 'Alt', text: 'Alt' },\n },\n ctrl: {\n macos: { auto: '⌃', symbol: '⌃', text: 'Control' },\n windows: { auto: 'Ctrl', symbol: 'Ctrl', text: 'Ctrl' },\n linux: { auto: 'Ctrl', symbol: 'Ctrl', text: 'Ctrl' },\n },\n // Windows/Linux Meta has a recognized symbol on the physical key (⊞ Win\n // logo / Super logo), so `auto` shows it. Use `text` for Win / Super.\n meta: {\n macos: { auto: '⌘', symbol: '⌘', text: 'Cmd' },\n windows: { auto: '⊞', symbol: '⊞', text: 'Win' },\n linux: { auto: '⊞', symbol: '⊞', text: 'Super' },\n },\n};\n\n/** Detect the user's OS from the browser environment. UA sniffing — not\n * 100% reliable, but adequate for picking a modifier-glyph convention.\n * Falls back to `'macos'` (matches the kit's docs convention) when\n * `navigator` is unavailable. */\nexport function detectPlatform(): Platform {\n if (typeof navigator === 'undefined') return 'macos';\n // Prefer the modern userAgentData when available (Chromium-only today).\n const uaData = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData;\n const raw = (uaData?.platform ?? navigator.userAgent ?? '').toLowerCase();\n if (raw.includes('mac') || raw.includes('darwin') || raw.includes('iphone') || raw.includes('ipad')) return 'macos';\n if (raw.includes('win')) return 'windows';\n if (raw.includes('linux') || raw.includes('x11')) return 'linux';\n return 'macos';\n}\n\n/**\n * Map a list of **logical** modifiers (`'mod'`, `'shift'`, …) to **visual**\n * `KeySpec`s appropriate for the current platform.\n *\n * The kit-side gesture grammar uses logical names so the same route reads\n * correctly on every OS — `'mod'` means \"Cmd on Mac, Ctrl on Win/Linux\".\n * `KeySequence` is purely visual and renders the labels you give it; this\n * helper is the bridge.\n *\n * ```ts\n * <KeySequence\n * keys={keySpecsFromMods([{ name: 'mod' }, { name: 'shift', optional: true }])}\n * />\n * ```\n *\n * On a Mac: renders `⌘ ⇧`. On Windows: renders `Ctrl Shift`. Pass an\n * explicit `platform` to override detection (e.g. for docs that always\n * show the macOS form). Pass `legend: 'text'` to force \"Cmd\" over \"⌘\"\n * even on macOS.\n */\nexport function keySpecsFromMods(\n mods: readonly LogicalModSpec[],\n opts: KeySpecsFromModsOptions = {},\n): readonly KeySpec[] {\n const platform = opts.platform ?? detectPlatform();\n const legend = opts.legend ?? 'auto';\n return mods.map((m) => {\n const label = MOD_BY_PLATFORM[m.name][platform][legend];\n return m.optional ? { label, optional: true } : { label };\n });\n}\n\n/** Per-platform × per-legend table for named, non-modifier keys. `auto`\n * is whatever's printed on the physical key for that platform. Arrows\n * are universal symbols on every platform. */\nconst NAMED_KEY: Record<string, Record<Platform, Record<LegendStyle, string>>> = {\n Escape: { macos: { auto: '⎋', symbol: '⎋', text: 'Esc' }, windows: { auto: 'Esc', symbol: 'Esc', text: 'Esc' }, linux: { auto: 'Esc', symbol: 'Esc', text: 'Esc' } },\n Enter: { macos: { auto: '↵', symbol: '↵', text: 'Return' }, windows: { auto: 'Enter', symbol: 'Enter', text: 'Enter' }, linux: { auto: 'Enter', symbol: 'Enter', text: 'Enter' } },\n Return: { macos: { auto: '↵', symbol: '↵', text: 'Return' }, windows: { auto: 'Enter', symbol: 'Enter', text: 'Enter' }, linux: { auto: 'Enter', symbol: 'Enter', text: 'Enter' } },\n Tab: { macos: { auto: '⇥', symbol: '⇥', text: 'Tab' }, windows: { auto: 'Tab', symbol: 'Tab', text: 'Tab' }, linux: { auto: 'Tab', symbol: 'Tab', text: 'Tab' } },\n Space: { macos: { auto: '␣', symbol: '␣', text: 'Space' }, windows: { auto: 'Space', symbol: 'Space', text: 'Space' }, linux: { auto: 'Space', symbol: 'Space', text: 'Space' } },\n ' ': { macos: { auto: '␣', symbol: '␣', text: 'Space' }, windows: { auto: 'Space', symbol: 'Space', text: 'Space' }, linux: { auto: 'Space', symbol: 'Space', text: 'Space' } },\n Backspace: { macos: { auto: '⌫', symbol: '⌫', text: 'Backspace' }, windows: { auto: 'Backspace', symbol: 'Backspace', text: 'Backspace' }, linux: { auto: 'Backspace', symbol: 'Backspace', text: 'Backspace' } },\n Delete: { macos: { auto: '⌦', symbol: '⌦', text: 'Delete' }, windows: { auto: 'Delete', symbol: 'Delete', text: 'Delete' }, linux: { auto: 'Delete', symbol: 'Delete', text: 'Delete' } },\n // Context-menu key (the right-Ctrl-area key on Windows / Linux keyboards\n // with a ▤ icon). Mac has no equivalent; falls back to text 'Menu'.\n ContextMenu: { macos: { auto: 'Menu', symbol: 'Menu', text: 'Menu' }, windows: { auto: '▤', symbol: '▤', text: 'Menu' }, linux: { auto: '▤', symbol: '▤', text: 'Menu' } },\n ArrowUp: { macos: { auto: '↑', symbol: '↑', text: '↑' }, windows: { auto: '↑', symbol: '↑', text: '↑' }, linux: { auto: '↑', symbol: '↑', text: '↑' } },\n ArrowDown: { macos: { auto: '↓', symbol: '↓', text: '↓' }, windows: { auto: '↓', symbol: '↓', text: '↓' }, linux: { auto: '↓', symbol: '↓', text: '↓' } },\n ArrowLeft: { macos: { auto: '←', symbol: '←', text: '←' }, windows: { auto: '←', symbol: '←', text: '←' }, linux: { auto: '←', symbol: '←', text: '←' } },\n ArrowRight: { macos: { auto: '→', symbol: '→', text: '→' }, windows: { auto: '→', symbol: '→', text: '→' }, linux: { auto: '→', symbol: '→', text: '→' } },\n};\n\n/**\n * Render a raw `KeyboardEvent.key` value as a platform-appropriate\n * `KeySpec`. Named non-modifier keys (Esc, Enter, Tab, Space, Backspace,\n * Delete, arrows) get the platform's conventional form. Letter / digit /\n * other keys pass through upper-cased.\n *\n * ```ts\n * keySpecFromKey('Escape', { platform: 'macos' }) // { label: '⎋' }\n * keySpecFromKey('Escape', { platform: 'windows' }) // { label: 'Esc' }\n * keySpecFromKey('p') // { label: 'P' }\n * ```\n *\n * Symbol mode is only meaningful on macOS — Windows / Linux keyboards\n * print the text form on the physical key, so symbol mode there falls\n * back to text.\n */\nexport function keySpecFromKey(\n raw: string,\n opts: KeySpecsFromModsOptions & { optional?: boolean } = {},\n): KeySpec {\n const platform = opts.platform ?? detectPlatform();\n const legend = opts.legend ?? 'auto';\n const entry = NAMED_KEY[raw];\n const label = entry ? entry[platform][legend] : raw.length === 1 ? raw.toUpperCase() : raw;\n return opts.optional ? { label, optional: true } : { label };\n}\n","/** Apple-style glyph for a DOM `KeyboardEvent.key` value. Covers escape,\n * delete/backspace, arrows, enter/return, tab, space. Unknown keys are\n * upper-cased (so `'a'` reads as `A` on a keycap) and returned unchanged\n * otherwise — making this safe to apply uniformly without a `has-glyph`\n * check at the call site. */\nexport function keyGlyph(rawKey: string): string {\n switch (rawKey) {\n case 'Escape': return '⎋';\n case 'Backspace': return '⌫';\n case 'Delete': return '⌦';\n case 'ArrowUp': return '↑';\n case 'ArrowDown': return '↓';\n case 'ArrowLeft': return '←';\n case 'ArrowRight': return '→';\n case 'Enter':\n case 'Return': return '↵';\n case 'Tab': return '⇥';\n case ' ':\n case 'Space': return '␣';\n default: return rawKey.toUpperCase();\n }\n}\n","/**\n * Display-formatter for numbers. Use this anywhere a number is shown to\n * a user. The whole point: negative values get prefixed with the real\n * MINUS SIGN (U+2212) instead of the ASCII HYPHEN-MINUS (U+002D) that\n * `toLocaleString` and template literals produce by default.\n *\n * U+2212 is the same visual width as `+` and reads as a sign rather\n * than a hyphen — columns of signed numbers align cleanly and the\n * glyph doesn't get confused with a bullet or list dash.\n */\nexport const MINUS_SIGN = '−';\n\nexport function formatNumber(value: number, options?: Intl.NumberFormatOptions): string {\n const formatted = Number.isFinite(value)\n ? value.toLocaleString(undefined, options)\n : String(value);\n return formatted.replace(/^-/, MINUS_SIGN);\n}\n","import { useCallback, useRef, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type MouseEvent as ReactMouseEvent, type PointerEvent as ReactPointerEvent, type ReactElement, type ReactNode } from 'react';\nimport s from './Slider.module.css';\nimport { formatNumber } from '../../format/number';\n\nexport type ThumbRenderCtx = {\n width: number;\n height: number;\n isActive: boolean;\n};\n\nexport type ThumbShape =\n | 'round'\n | 'notched'\n | { render: (ctx: ThumbRenderCtx) => ReactNode };\n\nexport type Thumb = {\n value: number;\n label?: string;\n shape?: ThumbShape;\n bounds?: [number, number] | ((ctx: BoundsCtx) => [number, number]);\n};\n\nexport type BoundsCtx = {\n thumbs: readonly Thumb[];\n index: number;\n};\n\nexport type TrackCtx = {\n trackWidth: number;\n valueToFraction: (v: number) => number;\n};\n\nexport type SliderProps<T extends Thumb = Thumb> = {\n thumbs: readonly T[];\n onChange: (next: T[]) => void;\n onCommit?: (next: T[]) => void;\n min: number;\n max: number;\n step?: number;\n constraint?: 'free' | 'ordered';\n onAddThumb?: (atValue: number) => T | null;\n onRemoveThumb?: (index: number) => boolean;\n allowShiftAll?: boolean;\n renderTrack?: (ctx: TrackCtx) => ReactNode;\n trackHeight?: number;\n renderReadout?: (thumb: T, index: number) => ReactNode;\n readoutPlacement?: 'none' | 'inline-after' | 'below-thumb';\n ariaLabel?: string;\n className?: string;\n};\n\nfunction snap(v: number, step: number | undefined, min: number): number {\n if (step === undefined || step <= 0) return v;\n return Math.round((v - min) / step) * step + min;\n}\n\nfunction clamp(v: number, lo: number, hi: number): number {\n return Math.max(lo, Math.min(hi, v));\n}\n\nfunction defaultStep(step: number | undefined, min: number, max: number): number {\n if (step !== undefined && step > 0) return step;\n return (max - min) / 100;\n}\n\nfunction resolveBounds(thumb: Thumb, ctx: BoundsCtx, fallbackMin: number, fallbackMax: number): [number, number] {\n if (!thumb.bounds) return [fallbackMin, fallbackMax];\n const tuple = typeof thumb.bounds === 'function' ? thumb.bounds(ctx) : thumb.bounds;\n return [tuple[0], tuple[1]];\n}\n\nfunction defaultReadout(thumb: Thumb): string {\n return formatNumber(thumb.value, { minimumFractionDigits: 3, maximumFractionDigits: 3 });\n}\n\nexport function Slider<T extends Thumb = Thumb>(props: SliderProps<T>): ReactElement {\n const { thumbs, onChange, onCommit, min, max, step, constraint, trackHeight, ariaLabel, className } = props;\n\n const trackRef = useRef<HTMLDivElement | null>(null);\n // In-flight thumb buffer during a drag; null when not dragging.\n const dragBufferRef = useRef<T[] | null>(null);\n\n const valueToFraction = useCallback(\n (v: number): number => (max === min ? 0 : clamp((v - min) / (max - min), 0, 1)),\n [min, max],\n );\n\n const fractionToValue = useCallback(\n (f: number): number => min + clamp(f, 0, 1) * (max - min),\n [min, max],\n );\n\n const beginThumbDrag = useCallback(\n (index: number) => {\n const buf: T[] = thumbs.map(t => ({ ...t }));\n dragBufferRef.current = buf;\n let droppedOff = false;\n\n const onMove = (ev: PointerEvent) => {\n const track = trackRef.current;\n const buffer = dragBufferRef.current;\n if (!track || !buffer) return;\n const rect = track.getBoundingClientRect();\n const f = clamp((ev.clientX - rect.left) / rect.width, 0, 1);\n let v = fractionToValue(f);\n v = snap(v, step, min);\n v = clamp(v, min, max);\n\n const [bLo, bHi] = resolveBounds(buffer[index], { thumbs: buffer, index }, min, max);\n v = clamp(v, bLo, bHi);\n\n if (constraint === 'ordered') {\n const gap = step !== undefined && step > 0 ? step : (max - min) / 1000;\n const lower = index > 0 ? buffer[index - 1].value + gap : min;\n const upper = index < buffer.length - 1 ? buffer[index + 1].value - gap : max;\n v = clamp(v, lower, upper);\n }\n\n // Drop-off detection: pointer exits the track vertically by more than trackHeight.\n const bandHeight = rect.height;\n if (props.onRemoveThumb) {\n if (ev.clientY < rect.top - bandHeight || ev.clientY > rect.bottom + bandHeight) {\n droppedOff = true;\n } else {\n droppedOff = false;\n }\n }\n\n buffer[index] = { ...buffer[index], value: v };\n onChange(buffer.map(t => ({ ...t })));\n };\n\n const onUp = () => {\n document.removeEventListener('pointermove', onMove);\n document.removeEventListener('pointerup', onUp);\n const buffer = dragBufferRef.current;\n dragBufferRef.current = null;\n if (!buffer) return;\n\n if (droppedOff && props.onRemoveThumb) {\n const accepted = props.onRemoveThumb(index);\n if (accepted) {\n const next = buffer.filter((_, i) => i !== index).map(t => ({ ...t })) as T[];\n onChange(next);\n onCommit?.(next);\n return;\n }\n }\n\n if (onCommit) onCommit(buffer.map(t => ({ ...t })));\n };\n\n document.addEventListener('pointermove', onMove);\n document.addEventListener('pointerup', onUp);\n },\n [thumbs, onChange, onCommit, fractionToValue, min, max, step, constraint, props],\n );\n\n const beginShiftAllDrag = useCallback(\n (anchorX: number) => {\n const buf: T[] = thumbs.map(t => ({ ...t }));\n const startValues = buf.map(t => t.value);\n dragBufferRef.current = buf;\n\n const onMove = (ev: PointerEvent) => {\n const track = trackRef.current;\n const buffer = dragBufferRef.current;\n if (!track || !buffer) return;\n const rect = track.getBoundingClientRect();\n const dxFraction = (ev.clientX - anchorX) / rect.width;\n let dValue = dxFraction * (max - min);\n dValue = snap(dValue, step, 0);\n\n // Clamp delta so no thumb leaves [min, max] (per-thumb bounds intentionally\n // not enforced — matches the experiment's hue-band shift-translate semantics).\n let allowedNeg = -Infinity;\n let allowedPos = Infinity;\n for (let i = 0; i < startValues.length; i++) {\n allowedNeg = Math.max(allowedNeg, min - startValues[i]);\n allowedPos = Math.min(allowedPos, max - startValues[i]);\n }\n dValue = clamp(dValue, allowedNeg, allowedPos);\n\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] = { ...buffer[i], value: clamp(startValues[i] + dValue, min, max) };\n }\n onChange(buffer.map(t => ({ ...t })));\n };\n\n const onUp = () => {\n document.removeEventListener('pointermove', onMove);\n document.removeEventListener('pointerup', onUp);\n const buffer = dragBufferRef.current;\n dragBufferRef.current = null;\n if (buffer && onCommit) onCommit(buffer.map(t => ({ ...t })));\n };\n\n document.addEventListener('pointermove', onMove);\n document.addEventListener('pointerup', onUp);\n },\n [thumbs, onChange, onCommit, min, max, step],\n );\n\n const onThumbPointerDown = (index: number) => (e: ReactPointerEvent) => {\n // Only bail on explicit non-primary buttons (button > 0). jsdom's PointerEvent\n // leaves `button` undefined; treat that as primary so tests can drive drags.\n if (typeof e.button === 'number' && e.button > 0) return;\n e.preventDefault();\n e.stopPropagation();\n if (e.shiftKey && props.allowShiftAll) {\n beginShiftAllDrag(e.clientX);\n } else {\n beginThumbDrag(index);\n }\n };\n\n const onThumbContextMenu = (index: number) => (e: ReactMouseEvent) => {\n if (!props.onRemoveThumb) return;\n e.preventDefault();\n const accepted = props.onRemoveThumb(index);\n if (!accepted) return;\n const next = thumbs.filter((_, i) => i !== index).map(t => ({ ...t })) as T[];\n onChange(next);\n onCommit?.(next);\n };\n\n const onTrackPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (typeof e.button === 'number' && e.button > 0) return;\n if (!props.onAddThumb) return;\n // If the event originated on a thumb, the thumb's own handler ran first; this is a track click.\n if ((e.target as HTMLElement).closest(`.${s.thumb}`)) return;\n e.preventDefault();\n const track = trackRef.current;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const f = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n let v = fractionToValue(f);\n v = snap(v, step, min);\n v = clamp(v, min, max);\n const created = props.onAddThumb(v);\n if (!created) return;\n const next = [...thumbs.map(t => ({ ...t })), created] as T[];\n onChange(next);\n onCommit?.(next);\n };\n\n const onThumbKeyDown = (index: number) => (e: ReactKeyboardEvent) => {\n const stepSize = defaultStep(step, min, max);\n let delta = 0;\n let snapTo: 'home' | 'end' | null = null;\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n delta = e.shiftKey ? stepSize * 10 : stepSize;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n delta = e.shiftKey ? -stepSize * 10 : -stepSize;\n break;\n case 'PageUp':\n delta = stepSize * 10;\n break;\n case 'PageDown':\n delta = -stepSize * 10;\n break;\n case 'Home':\n snapTo = 'home';\n break;\n case 'End':\n snapTo = 'end';\n break;\n default:\n return;\n }\n\n e.preventDefault();\n const next = thumbs.map(t => ({ ...t }));\n const [bLo, bHi] = resolveBounds(next[index], { thumbs: next, index }, min, max);\n const lo = Math.max(min, bLo);\n const hi = Math.min(max, bHi);\n let v: number;\n if (snapTo === 'home') v = lo;\n else if (snapTo === 'end') v = hi;\n else v = next[index].value + delta;\n v = snap(v, step, min);\n v = clamp(v, lo, hi);\n next[index] = { ...next[index], value: v };\n onChange(next);\n onCommit?.(next);\n };\n\n const placement = props.readoutPlacement ?? 'none';\n const renderReadout = props.renderReadout;\n\n return (\n <div\n className={className ? `${s.root} ${className}` : s.root}\n style={trackHeight !== undefined ? ({ ['--rp-track-height' as string]: `${trackHeight}px` } as CSSProperties) : undefined}\n >\n <div className={s.row}>\n <div className={s.track} ref={trackRef} onPointerDown={onTrackPointerDown}>\n {props.renderTrack && (\n <div className={s.trackInner}>\n {props.renderTrack({\n trackWidth: trackRef.current?.getBoundingClientRect().width ?? 0,\n valueToFraction,\n })}\n </div>\n )}\n {thumbs.map((thumb, i) => {\n const isNotched = thumb.shape === 'notched';\n const customRender = typeof thumb.shape === 'object' && thumb.shape !== null ? thumb.shape.render : null;\n const cls = `${s.thumb}${isNotched ? ` ${s.notched}` : ''}`;\n return (\n <div\n key={i}\n role=\"slider\"\n tabIndex={0}\n aria-orientation=\"horizontal\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={thumb.value}\n aria-label={[ariaLabel, thumb.label].filter(Boolean).join(' ') || undefined}\n className={cls}\n style={{ left: `${valueToFraction(thumb.value) * 100}%` }}\n onPointerDown={onThumbPointerDown(i)}\n onKeyDown={onThumbKeyDown(i)}\n onContextMenu={onThumbContextMenu(i)}\n >\n {customRender ? customRender({ width: 14, height: 24, isActive: false }) : (thumb.label ?? '')}\n </div>\n );\n })}\n </div>\n {placement === 'inline-after' && (\n <span data-readout=\"inline\" className={s.readoutInline}>\n {thumbs.map((t, i) => (\n <span key={i}>{i > 0 ? ' / ' : ''}{renderReadout ? renderReadout(t, i) : defaultReadout(t)}</span>\n ))}\n </span>\n )}\n </div>\n {placement === 'below-thumb' && (\n <div className={s.readoutsBelow}>\n {thumbs.map((t, i) => (\n <span\n key={i}\n data-readout=\"below\"\n className={s.readoutBelow}\n style={{ left: `${valueToFraction(t.value) * 100}%` }}\n >\n {renderReadout ? renderReadout(t, i) : defaultReadout(t)}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { useRef, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type ReactElement, type ReactNode } from 'react';\nimport s from './ToggleBar.module.css';\n\nexport type ToggleBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n};\n\nexport type ToggleBarSize = 'sm' | 'md';\nexport type ToggleBarVariant = 'default' | 'minimal';\n\ntype CommonProps = {\n ariaLabel?: string;\n className?: string;\n height?: number;\n /** Size variant. `sm` is ~60% of the default height with reduced padding\n * and font size — sized for dense surfaces like lab control panels. */\n size?: ToggleBarSize;\n /** Visual variant. `minimal` strips the pill track and glass treatment;\n * selection becomes a flat accent. For dense diagnostic surfaces. */\n variant?: ToggleBarVariant;\n};\n\nexport type ToggleBarProps<V extends string | number = string> =\n | (CommonProps & {\n mode?: 'single';\n items: readonly ToggleBarItem<V>[];\n value: V | null;\n onChange: (next: V | null) => void;\n allowDeselect?: boolean;\n })\n | (CommonProps & {\n mode: 'multiple';\n items: readonly ToggleBarItem<V>[];\n value: readonly V[];\n /**\n * Values that are neither on nor off — the sources this bar\n * aggregates disagree (a text range that is bold in part of it, a\n * multi-selection whose nodes differ). Rendered `aria-pressed=\"mixed\"`,\n * the ARIA tri-state a toggle button actually has, rather than\n * `SelectionPanel`'s reduced-opacity-plus-`title` workaround for\n * `Switch`, which has no indeterminate state to render.\n *\n * `value` wins where the two lists overlap, so a caller that can't\n * cheaply keep them disjoint doesn't get an ambiguous segment.\n *\n * Clicking a mixed segment turns it fully **on**, matching the\n * everywhere-else convention (and `toggleFlagInRange`'s rule for a\n * partially-styled text range) that a mixed toggle resolves toward\n * the affirmative rather than clearing.\n */\n mixedValues?: readonly V[];\n onChange: (next: V[]) => void;\n });\n\nfunction firstEnabledIndex(items: readonly ToggleBarItem<string | number>[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly ToggleBarItem<string | number>[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly ToggleBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly ToggleBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nexport function ToggleBar<V extends string | number = string>(props: ToggleBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n const mode = props.mode ?? 'single';\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const isSelected = (value: V): boolean => {\n if (mode === 'multiple') return (props.value as readonly V[]).includes(value);\n return (props.value as V | null) === value;\n };\n\n /** Mixed only in multiple mode, and only where `value` doesn't already\n * claim the segment. Single mode has nothing to be mixed about — its\n * aggregate is one value or none. */\n const isMixed = (value: V): boolean => {\n if (mode !== 'multiple') return false;\n const mixed = (props as { mixedValues?: readonly V[] }).mixedValues;\n return mixed !== undefined && mixed.includes(value) && !isSelected(value);\n };\n\n let tabStopIndex = -1;\n if (mode === 'single') {\n const sel = items.findIndex(it => it.value === (props.value as V | null));\n tabStopIndex = sel >= 0 && !items[sel].disabled ? sel : firstEnabledIndex(items);\n } else {\n tabStopIndex = firstEnabledIndex(items);\n }\n\n const handleClick = (index: number) => () => {\n const item = items[index];\n if (item.disabled) return;\n if (mode === 'multiple') {\n const current = props.value as readonly V[];\n const next = current.includes(item.value)\n ? current.filter(v => v !== item.value)\n : [...current, item.value];\n (props.onChange as (n: V[]) => void)(next);\n } else {\n const current = props.value as V | null;\n if (current === item.value) {\n if ((props as { allowDeselect?: boolean }).allowDeselect) {\n (props.onChange as (n: V | null) => void)(null);\n }\n return;\n }\n (props.onChange as (n: V | null) => void)(item.value);\n }\n };\n\n const focusSegment = (index: number) => {\n const root = rootRef.current;\n if (!root) return;\n const buttons = root.querySelectorAll<HTMLButtonElement>(`.${s.segment}`);\n buttons[index]?.focus();\n };\n\n const handleKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n if (mode === 'multiple') {\n e.preventDefault();\n handleClick(index)();\n }\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n if (mode === 'single') {\n const item = items[nextIndex];\n (props.onChange as (n: V | null) => void)(item.value);\n }\n focusSegment(nextIndex);\n };\n\n const style: CSSProperties | undefined = height !== undefined\n ? ({ ['--wzl-tb-height' as string]: `${height}px` } as CSSProperties)\n : undefined;\n\n const rootCls = [\n s.root,\n size && s[`size_${size}`],\n variant && s[`variant_${variant}`],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={rootRef}\n className={rootCls}\n role={mode === 'multiple' ? 'group' : 'radiogroup'}\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => {\n const selected = isSelected(item.value);\n const mixed = isMixed(item.value);\n const cls = [s.segment, selected && s.segmentSelected, mixed && s.segmentMixed]\n .filter(Boolean)\n .join(' ');\n return (\n <button\n key={item.value}\n type=\"button\"\n role={mode === 'multiple' ? undefined : 'radio'}\n aria-checked={mode === 'multiple' ? undefined : selected}\n aria-pressed={mode === 'multiple' ? (mixed ? 'mixed' : selected) : undefined}\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={i === tabStopIndex ? 0 : -1}\n className={cls}\n onClick={handleClick(i)}\n onKeyDown={handleKeyDown(i)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useRef, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type ReactElement, type ReactNode } from 'react';\nimport s from './OptionsBar.module.css';\n\nexport type OptionsBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n selected: boolean;\n onChange: (next: boolean) => void;\n};\n\nexport type OptionsBarSize = 'sm' | 'md';\nexport type OptionsBarVariant = 'default' | 'minimal';\n\nexport type OptionsBarProps<V extends string | number = string> = {\n items: readonly OptionsBarItem<V>[];\n ariaLabel?: string;\n className?: string;\n height?: number;\n /** Size variant. `sm` is ~60% of the default height with reduced padding\n * and font size — sized for dense surfaces like lab control panels. */\n size?: OptionsBarSize;\n /** Visual variant. `minimal` strips the pill track and glass treatment;\n * selection becomes a flat accent. For dense diagnostic surfaces. */\n variant?: OptionsBarVariant;\n};\n\nfunction firstEnabledIndex(items: readonly OptionsBarItem<string | number>[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly OptionsBarItem<string | number>[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly OptionsBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly OptionsBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nexport function OptionsBar<V extends string | number = string>(props: OptionsBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const tabStopIndex = firstEnabledIndex(items);\n\n const toggle = (index: number) => {\n const item = items[index];\n if (item.disabled) return;\n item.onChange(!item.selected);\n };\n\n const focusSegment = (index: number) => {\n const root = rootRef.current;\n if (!root) return;\n const buttons = root.querySelectorAll<HTMLButtonElement>(`.${s.segment}`);\n buttons[index]?.focus();\n };\n\n const handleKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n e.preventDefault();\n toggle(index);\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n focusSegment(nextIndex);\n };\n\n const style: CSSProperties | undefined = height !== undefined\n ? ({ ['--wzl-tb-height' as string]: `${height}px` } as CSSProperties)\n : undefined;\n\n const rootCls = [\n s.root,\n size && s[`size_${size}`],\n variant && s[`variant_${variant}`],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={rootRef}\n className={rootCls}\n role=\"group\"\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => {\n const cls = `${s.segment}${item.selected ? ` ${s.segmentSelected}` : ''}`;\n return (\n <button\n key={item.value}\n type=\"button\"\n aria-pressed={item.selected}\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={i === tabStopIndex ? 0 : -1}\n className={cls}\n onClick={() => toggle(i)}\n onKeyDown={handleKeyDown(i)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useRef, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type ReactElement, type ReactNode } from 'react';\nimport s from './ActionsBar.module.css';\n\nexport type ActionsBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n onAction: () => void;\n};\n\nexport type ActionsBarSize = 'sm' | 'md';\nexport type ActionsBarVariant = 'default' | 'minimal';\n\nexport type ActionsBarProps<V extends string | number = string> = {\n items: readonly ActionsBarItem<V>[];\n ariaLabel?: string;\n className?: string;\n height?: number;\n size?: ActionsBarSize;\n variant?: ActionsBarVariant;\n};\n\nfunction firstEnabledIndex(items: readonly ActionsBarItem<string | number>[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly ActionsBarItem<string | number>[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly ActionsBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly ActionsBarItem<string | number>[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nexport function ActionsBar<V extends string | number = string>(props: ActionsBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const tabStopIndex = firstEnabledIndex(items);\n\n const fire = (index: number) => {\n const item = items[index];\n if (item.disabled) return;\n item.onAction();\n };\n\n const focusSegment = (index: number) => {\n const root = rootRef.current;\n if (!root) return;\n const buttons = root.querySelectorAll<HTMLButtonElement>(`.${s.segment}`);\n buttons[index]?.focus();\n };\n\n const handleKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n e.preventDefault();\n fire(index);\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n focusSegment(nextIndex);\n };\n\n const style: CSSProperties | undefined = height !== undefined\n ? ({ ['--wzl-tb-height' as string]: `${height}px` } as CSSProperties)\n : undefined;\n\n const rootCls = [\n s.root,\n size && s[`size_${size}`],\n variant && s[`variant_${variant}`],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={rootRef}\n className={rootCls}\n role=\"toolbar\"\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => (\n <button\n key={item.value}\n type=\"button\"\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={i === tabStopIndex ? 0 : -1}\n className={s.segment}\n onClick={() => fire(i)}\n onKeyDown={handleKeyDown(i)}\n >\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Badge } from '../Badge/Badge';\nimport type { BadgeSize, BadgeTone, BadgeVariant } from '../Badge/types';\nimport type { EdgeCap } from '../Badge/bases/edgeProfiles';\nimport s from './Powerline.module.css';\n\nexport interface PowerlineSegment {\n text: ReactNode;\n /** Cap on this segment's right edge. Next segment's left edge adopts the same profile. */\n endCap?: EdgeCap;\n tone?: BadgeTone;\n variant?: BadgeVariant;\n size?: BadgeSize;\n onClick?: () => void;\n href?: string;\n 'aria-label'?: string;\n}\n\nexport interface PowerlineProps {\n segments: PowerlineSegment[];\n /** Left edge of the first segment. Defaults to 'flat'. */\n startCap?: EdgeCap;\n /** Default size for every segment (per-segment `size` wins). */\n size?: BadgeSize;\n /** Default variant for every segment (per-segment `variant` wins). */\n variant?: BadgeVariant;\n /** Protrusion depth in CSS px, passed through to every segment's base. */\n depth?: number;\n /** Visible gap between adjacent segments. Number → px; string → literal CSS length.\n * Default: `0.2em` (scales with the row's font size). Pass `0` for flush. */\n gap?: number | string;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function Powerline({\n segments,\n startCap = 'flat',\n size,\n variant,\n depth,\n gap,\n className,\n ...rest\n}: PowerlineProps) {\n const cls = [s.row, className].filter(Boolean).join(' ');\n const style: CSSProperties | undefined = gap !== undefined\n ? { ['--powerline-gap' as never]: typeof gap === 'number' ? `${gap}px` : gap }\n : undefined;\n return (\n <span className={cls} style={style} aria-label={rest['aria-label']}>\n {segments.map((seg, i) => {\n const leftEdge: EdgeCap = i === 0 ? startCap : (segments[i - 1].endCap ?? 'flat');\n const rightEdge: EdgeCap = seg.endCap ?? 'flat';\n return (\n <Badge\n key={i}\n base=\"powerline\"\n baseParams={{ leftEdge, rightEdge, ...(depth !== undefined && { depth }) }}\n tone={seg.tone}\n variant={seg.variant ?? variant}\n size={seg.size ?? size}\n onClick={seg.onClick}\n href={seg.href}\n aria-label={seg['aria-label']}\n className={s.segment}\n >\n {seg.text}\n </Badge>\n );\n })}\n </span>\n );\n}\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n Checkbox as RACCheckbox,\n type CheckboxProps as RACCheckboxProps,\n} from 'react-aria-components';\nimport s from './Checkbox.module.css';\n\nexport type CheckboxProps = Omit<RACCheckboxProps, 'children' | 'className'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Single checkbox wrapping React Aria's Checkbox. Supports indeterminate\n * via `isIndeterminate`. The label is supplied as children.\n */\nexport const Checkbox = forwardRef(function Checkbox(\n props: CheckboxProps,\n ref: Ref<HTMLLabelElement>,\n) {\n const { children, className, ...rest } = props;\n return (\n <RACCheckbox\n {...rest}\n ref={ref}\n className={[s.checkbox, className].filter(Boolean).join(' ')}\n >\n {({ isIndeterminate }) => (\n <>\n <span className={s.box}>\n <svg className={s.checkmark} viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n {isIndeterminate ? (\n <line x1=\"3\" y1=\"7\" x2=\"11\" y2=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n ) : (\n <polyline\n points=\"3,7.5 6,10.5 11,4.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n </span>\n {children !== undefined && <span className={s.label}>{children}</span>}\n </>\n )}\n </RACCheckbox>\n );\n});\n","import type { ReactNode } from 'react';\nimport s from './Field.module.css';\n\nexport type FieldOrientation = 'stacked' | 'row';\n\nexport type FieldProps = {\n orientation?: FieldOrientation;\n className?: string;\n children?: ReactNode;\n};\n\n/**\n * Layout primitive that arranges a label, control, hint, and error in the\n * canonical weasel-ui form-row shape. The control itself owns its semantics\n * (RAC `TextField`, `Checkbox`, etc.); this just paints the layout.\n *\n * Most users will instead reach for `Input` / `Checkbox` / `Switch`, which\n * compose Field internally. Use Field directly when you need a custom\n * control to sit in the same visual rhythm.\n */\nexport function Field({ orientation = 'stacked', className, children }: FieldProps) {\n const cls = [s.field, orientation === 'row' && s.row, className].filter(Boolean).join(' ');\n return <div className={cls}>{children}</div>;\n}\n\nexport const fieldClasses = {\n root: s.field,\n row: s.row,\n label: s.label,\n hint: s.hint,\n error: s.error,\n};\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n TextField,\n Label,\n Input as RACInput,\n Text,\n FieldError,\n type TextFieldProps as RACTextFieldProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './Input.module.css';\n\nexport type InputProps = Omit<RACTextFieldProps, 'children' | 'className'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n placeholder?: string;\n leadingAdornment?: ReactNode;\n trailingAdornment?: ReactNode;\n className?: string;\n};\n\n/**\n * Single-line text input wrapping React Aria's TextField. Supplies a\n * default skin against the `--wzl-*` token system, and exposes the\n * familiar label / description / errorMessage / adornment slot shape.\n *\n * `ref` forwards to the underlying `<input>`.\n */\nexport const Input = forwardRef(function Input(\n props: InputProps,\n ref: Ref<HTMLInputElement>,\n) {\n const {\n label,\n description,\n errorMessage,\n placeholder,\n leadingAdornment,\n trailingAdornment,\n className,\n ...textFieldProps\n } = props;\n\n return (\n <TextField {...textFieldProps} className={[s.field, fieldClasses.root, className].filter(Boolean).join(' ')}>\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <div className={s.frame}>\n {leadingAdornment !== undefined && <span className={s.adornment}>{leadingAdornment}</span>}\n <RACInput ref={ref} placeholder={placeholder} />\n {trailingAdornment !== undefined && <span className={s.adornment}>{trailingAdornment}</span>}\n </div>\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n </TextField>\n );\n});\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n NumberField as RACNumberField,\n Label,\n Input as RACInput,\n Group,\n Button as RACButton,\n Text,\n FieldError,\n type NumberFieldProps as RACNumberFieldProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './NumberField.module.css';\n\nexport type NumberFieldProps = Omit<RACNumberFieldProps, 'children' | 'className'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n /** Hide the up/down stepper buttons. Defaults to false. */\n hideSteppers?: boolean;\n /** Native input placeholder — e.g. `'Mixed'` for a multi-selection\n * editor with no shared value. */\n placeholder?: string;\n className?: string;\n};\n\nexport const NumberField = forwardRef(function NumberField(\n props: NumberFieldProps,\n ref: Ref<HTMLInputElement>,\n) {\n const { label, description, errorMessage, hideSteppers, placeholder, className, ...rest } = props;\n return (\n <RACNumberField\n {...rest}\n className={[s.field, fieldClasses.root, className].filter(Boolean).join(' ')}\n >\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <Group className={s.frame}>\n <RACInput ref={ref} placeholder={placeholder} />\n {!hideSteppers && (\n <div className={s.steppers}>\n <RACButton slot=\"increment\" className={s.stepper} aria-label=\"Increment\">▲</RACButton>\n <RACButton slot=\"decrement\" className={s.stepper} aria-label=\"Decrement\">▼</RACButton>\n </div>\n )}\n </Group>\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n </RACNumberField>\n );\n});\n","import type { ReactNode } from 'react';\nimport {\n RadioGroup as RACRadioGroup,\n Radio as RACRadio,\n Label,\n Text,\n FieldError,\n type RadioGroupProps as RACRadioGroupProps,\n type RadioProps as RACRadioProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './RadioGroup.module.css';\n\nexport type RadioGroupProps = Omit<RACRadioGroupProps, 'children' | 'className'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n children?: ReactNode;\n className?: string;\n};\n\nexport function RadioGroup(props: RadioGroupProps) {\n const { label, description, errorMessage, children, className, ...rest } = props;\n return (\n <RACRadioGroup\n {...rest}\n className={[s.group, fieldClasses.root, className].filter(Boolean).join(' ')}\n >\n {label !== undefined && <Label className={s.legend}>{label}</Label>}\n {children}\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n </RACRadioGroup>\n );\n}\n\nexport type RadioProps = Omit<RACRadioProps, 'className' | 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\nexport function Radio({ children, className, ...rest }: RadioProps) {\n return (\n <RACRadio {...rest} className={[s.radio, className].filter(Boolean).join(' ')}>\n <span className={s.dot} />\n {children !== undefined && <span>{children}</span>}\n </RACRadio>\n );\n}\n","import type { ReactNode } from 'react';\nimport {\n Slider as RACSlider,\n SliderOutput,\n SliderTrack,\n SliderThumb,\n Label,\n type SliderProps as RACSliderProps,\n} from 'react-aria-components';\nimport s from './RangeSlider.module.css';\n\nexport type RangeSliderProps = Omit<RACSliderProps, 'children' | 'className'> & {\n label?: ReactNode;\n /** Show the current value next to the label. Defaults to true when a\n * label is supplied. */\n showOutput?: boolean;\n /** Format the rendered value(s). Useful for units (`v => `${v}%``). */\n formatOutput?: (v: number | number[]) => ReactNode;\n className?: string;\n};\n\n/**\n * Linear range slider on React Aria. Single-value by default; pass an array\n * to `value` / `defaultValue` for multi-thumb. Distinct from the kit's\n * canvas-scrub `Slider`, which is shaped for tool-canvas interactions.\n */\nexport function RangeSlider(props: RangeSliderProps) {\n const { label, showOutput, formatOutput, className, ...rest } = props;\n const wantOutput = showOutput ?? label !== undefined;\n return (\n <RACSlider {...rest} className={[s.slider, className].filter(Boolean).join(' ')}>\n {(label !== undefined || wantOutput) && (\n <div className={s.head}>\n {label !== undefined && <Label className={s.label}>{label}</Label>}\n {wantOutput && (\n <SliderOutput className={s.output}>\n {({ state }) => {\n const v = state.values.length === 1 ? state.values[0] : state.values;\n return formatOutput ? formatOutput(v) : Array.isArray(v) ? v.join(' – ') : String(v);\n }}\n </SliderOutput>\n )}\n </div>\n )}\n <SliderTrack className={s.track}>\n {({ state }) => {\n // Single-thumb: fill from start to thumb. Multi-thumb: fill\n // between adjacent thumbs (simplest = between first and last).\n const fillStart = state.values.length > 1 ? state.getThumbPercent(0) * 100 : 0;\n const fillEnd = state.getThumbPercent(state.values.length - 1) * 100;\n return (\n <>\n <div\n className={s.fill}\n style={{ left: `${fillStart}%`, right: `${100 - fillEnd}%` }}\n />\n {state.values.map((_, i) => (\n <SliderThumb key={i} index={i} className={s.thumb} />\n ))}\n </>\n );\n }}\n </SliderTrack>\n </RACSlider>\n );\n}\n","import type { ReactNode } from 'react';\nimport {\n Select as RACSelect,\n Label,\n Button as RACButton,\n SelectValue,\n Popover as RACPopover,\n ListBox as RACListBox,\n ListBoxItem as RACListBoxItem,\n Text,\n FieldError,\n type SelectProps as RACSelectProps,\n type ListBoxItemProps as RACListBoxItemProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './Select.module.css';\n\nexport type SelectOption = {\n value: string;\n label: ReactNode;\n isDisabled?: boolean;\n /**\n * Plain-text form of `label`, for type-to-select and screen readers.\n * Only needed when `label` isn't a bare string — a label built from\n * elements has no text React Aria can read off it. A string label\n * supplies this itself.\n */\n textValue?: string;\n};\n\ntype Key = string | number;\n\nexport type SelectProps<T extends Key = string> = Omit<RACSelectProps<object>, 'children' | 'className' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n placeholder?: string;\n /** Either pass `options` for a quick render, or `children` for full control. */\n options?: ReadonlyArray<SelectOption & { value: T }>;\n children?: ReactNode;\n selectedKey?: T | null;\n defaultSelectedKey?: T;\n onSelectionChange?: (key: T) => void;\n className?: string;\n};\n\n/**\n * Form select wrapping React Aria's Select. Pass either `options` for a\n * quick declarative render or `children` of `<SelectItem>` for control over\n * each row.\n *\n * The selection key type is parameterized so consumers with a string-literal\n * union for `value` (e.g. `'r' | 'g' | 'b'`) get a typed `onSelectionChange`.\n */\nexport function Select<T extends Key = string>(props: SelectProps<T>) {\n const {\n label,\n description,\n errorMessage,\n placeholder,\n options,\n children,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n className,\n ...rest\n } = props;\n\n return (\n <RACSelect\n {...rest}\n selectedKey={selectedKey ?? undefined}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange ? (k) => onSelectionChange(k as T) : undefined}\n className={[s.field, fieldClasses.root, className].filter(Boolean).join(' ')}\n >\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <RACButton className={s.trigger}>\n <SelectValue className={s.value}>\n {({ defaultChildren, isPlaceholder }) =>\n isPlaceholder ? (placeholder ?? defaultChildren) : defaultChildren\n }\n </SelectValue>\n <svg className={s.chevron} viewBox=\"0 0 10 10\" aria-hidden=\"true\">\n <path d=\"M2 4 L5 7 L8 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </RACButton>\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n {/* `data-weasel-overlay` marks DOM that belongs to this control but\n renders in a portal, outside the subtree the trigger sits in. Any\n consumer reasoning about \"did focus leave my component?\" via\n `closest()` gets the wrong answer without it — a text editor whose\n font menu lives here would end its session the moment the menu is\n clicked. */}\n <RACPopover className={s.popover} data-weasel-overlay=\"\">\n <RACListBox className={s.listbox}>\n {options !== undefined\n ? options.map((o) => (\n <SelectItem\n key={String(o.value)}\n id={o.value}\n isDisabled={o.isDisabled}\n textValue={o.textValue}\n >\n {o.label}\n </SelectItem>\n ))\n : children}\n </RACListBox>\n </RACPopover>\n </RACSelect>\n );\n}\n\nexport type SelectItemProps = Omit<RACListBoxItemProps, 'className' | 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Every row renders a check mark beside its label, so from React Aria's\n * side the children are never plain text and it can't derive the string\n * type-to-select and screen readers need — it warns once per row. A string\n * label already *is* that string, so derive it rather than making every\n * call site restate it; anything richer has to say what it reads as.\n */\nfunction textValueOf(children: ReactNode, explicit: string | undefined): string | undefined {\n if (explicit !== undefined) return explicit;\n return typeof children === 'string' || typeof children === 'number'\n ? String(children)\n : undefined;\n}\n\nexport function SelectItem({ children, className, textValue, ...rest }: SelectItemProps) {\n return (\n <RACListBoxItem\n {...rest}\n textValue={textValueOf(children, textValue)}\n className={[s.option, className].filter(Boolean).join(' ')}\n >\n <svg className={s.check} viewBox=\"0 0 10 10\" aria-hidden=\"true\">\n <polyline points=\"1.5,5 4,7.5 8.5,3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {children}\n </RACListBoxItem>\n );\n}\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n Switch as RACSwitch,\n type SwitchProps as RACSwitchProps,\n} from 'react-aria-components';\nimport s from './Switch.module.css';\n\nexport type SwitchProps = Omit<RACSwitchProps, 'children' | 'className'> & {\n children?: ReactNode;\n className?: string;\n};\n\nexport const Switch = forwardRef(function Switch(\n props: SwitchProps,\n ref: Ref<HTMLLabelElement>,\n) {\n const { children, className, ...rest } = props;\n return (\n <RACSwitch\n {...rest}\n ref={ref}\n className={[s.switch, className].filter(Boolean).join(' ')}\n >\n <span className={s.track}>\n <span className={s.thumb} />\n </span>\n {children !== undefined && <span className={s.label}>{children}</span>}\n </RACSwitch>\n );\n});\n","import type { ReactNode } from 'react';\nimport {\n Modal as RACModal,\n ModalOverlay,\n Dialog as RACDialog,\n Heading,\n type ModalOverlayProps,\n type DialogProps as RACDialogProps,\n} from 'react-aria-components';\nimport s from './Dialog.module.css';\n\nexport type DialogProps = Omit<ModalOverlayProps, 'children' | 'className'> & {\n /** Heading rendered in the dialog's default header. Omit when supplying\n * a custom `header` slot via children. */\n title?: ReactNode;\n /** Show the built-in close button. Defaults to true when `onOpenChange`\n * is wired so the user has an escape hatch. */\n showCloseButton?: boolean;\n /** Body content. */\n children?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /** ARIA role. Defaults to `dialog`. Use `alertdialog` for confirms. */\n role?: RACDialogProps['role'];\n /** Class applied to the modal box (inside the overlay). */\n className?: string;\n};\n\n/**\n * Modal dialog wrapping React Aria. Supplies a default header (title +\n * close), scrollable body, and footer slot. Pass `isOpen` + `onOpenChange`\n * for controlled visibility, or omit both and use a `<DialogTrigger>` from\n * `react-aria-components` upstream of this component.\n *\n * Escape, click-outside, focus trap, and scroll lock all come from the\n * underlying primitives.\n */\nexport function Dialog(props: DialogProps) {\n const {\n title,\n showCloseButton,\n children,\n footer,\n role = 'dialog',\n className,\n isOpen,\n onOpenChange,\n ...rest\n } = props;\n\n const showClose = showCloseButton ?? Boolean(onOpenChange);\n\n return (\n <ModalOverlay {...rest} isOpen={isOpen} onOpenChange={onOpenChange} className={s.overlay}>\n <RACModal className={[s.modal, className].filter(Boolean).join(' ')}>\n <RACDialog role={role} className={s.dialog}>\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading slot=\"title\" className={s.title}>{title}</Heading>\n )}\n {showClose && (\n <button\n type=\"button\"\n className={s.close}\n onClick={close}\n aria-label=\"Close dialog\"\n >\n ×\n </button>\n )}\n </header>\n )}\n <div className={s.body}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACModal>\n </ModalOverlay>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport s from './Sidebar.module.css';\n\nexport interface SidebarProps {\n /**\n * Edge the sidebar docks to. Adds a class hook (`s.left` / `s.right`)\n * so consumers can target either edge for borders, shadows, etc.\n * Purely cosmetic — layout is the parent's job.\n */\n side?: 'left' | 'right';\n /**\n * Accessible label — rendered onto the `<aside>`. Without it, screen\n * readers fall back to \"complementary landmark,\" which is fine for\n * apps with a single sidebar but ambiguous when there's both a left\n * and a right.\n */\n ariaLabel?: string;\n children?: ReactNode;\n className?: string;\n /** Inline style — useful for width-as-custom-property handles or any\n * other one-off CSS property the consumer wants to set dynamically. */\n style?: CSSProperties;\n}\n\n/**\n * Generic sidebar shell — `<aside>` with column layout and token-driven\n * surface treatment. Width, sticky positioning, and resize handles stay\n * the consumer's concern (every app has its own layout grid); the kit\n * just provides the chrome.\n *\n * Pair with `<SidebarPanel>` for collapsible sections.\n */\nexport function Sidebar(props: SidebarProps) {\n const { side, ariaLabel, children, className, style } = props;\n const cls = [s.sidebar, side === 'left' && s.left, side === 'right' && s.right, className]\n .filter(Boolean).join(' ');\n return (\n <aside className={cls} aria-label={ariaLabel} style={style}>\n {children}\n </aside>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Focusable } from 'react-aria-components';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport s from './SidebarPanel.module.css';\n\nexport interface SidebarPanelProps {\n /** Title rendered in the panel's header row. */\n title?: ReactNode;\n /**\n * Collapsed state — when true, only the header paints; the body is\n * omitted. Caller owns the state (typically via prefs) and flips it\n * back via `onToggleCollapse`.\n */\n collapsed?: boolean;\n /**\n * Click handler for the title row. When provided, the header renders\n * as a button (chevron + label) and acts as the collapse toggle.\n * When omitted, the title is static text and the panel can't collapse.\n */\n onToggleCollapse?(): void;\n /**\n * Optional close handler — when provided, the header gains a `×`\n * button on the trailing edge. Caller flips its \"hidden\" state and\n * conditionally unmounts the panel from the parent.\n */\n onHide?(): void;\n children?: ReactNode;\n className?: string;\n}\n\n/**\n * Generic collapsible panel section for sidebars. Pure presentation —\n * caller manages `collapsed`/`hidden` state externally (the pattern is\n * to drive it from app prefs so the Preferences modal and inline\n * chevrons toggle the same map).\n *\n * Pair with `<Sidebar>` for the docked column layout.\n */\nexport function SidebarPanel(props: SidebarPanelProps) {\n const { title, collapsed, onToggleCollapse, onHide, children, className } = props;\n const cls = [s.panel, collapsed && s.collapsed, className].filter(Boolean).join(' ');\n const headerInteractive = onToggleCollapse !== undefined;\n return (\n <div className={cls}>\n {title !== undefined && (\n <div className={s.titleRow}>\n {headerInteractive ? (\n <button\n type=\"button\"\n className={s.titleButton}\n onClick={onToggleCollapse}\n aria-expanded={!collapsed}\n >\n <span className={[s.chevron, collapsed && s.chevronCollapsed].filter(Boolean).join(' ')} aria-hidden=\"true\">▾</span>\n <span className={s.title}>{title}</span>\n </button>\n ) : (\n <span className={s.title}>{title}</span>\n )}\n {onHide !== undefined && (\n <TooltipTrigger>\n <Focusable>\n <button\n type=\"button\"\n className={s.hideButton}\n onClick={onHide}\n aria-label=\"Hide panel\"\n >\n ×\n </button>\n </Focusable>\n <Tooltip>Hide panel</Tooltip>\n </TooltipTrigger>\n )}\n </div>\n )}\n {!collapsed && <div className={s.body}>{children}</div>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Focusable } from 'react-aria-components';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport s from './ToolButton.module.css';\n\nexport interface ToolButtonProps {\n /** Icon node (typically an SVG component). */\n icon: ReactNode;\n /** Human-readable label shown under the icon. */\n label: string;\n /** Optional shortcut hint (e.g. \"V\" or \"⌘Z\"). */\n shortcut?: string;\n /** Selected/active state — toggles the active visual treatment. */\n active?: boolean;\n /** Disabled state — passes through to the underlying button. */\n disabled?: boolean;\n /**\n * When true, sets `aria-disabled=\"true\"` on the button without using the\n * native `disabled` attribute. This keeps the button focusable and reachable\n * by keyboard (roving-tabindex still applies) while marking it as ineligible\n * to screen readers. The caller is responsible for making `onClick` a no-op.\n */\n ariaDisabled?: boolean;\n /**\n * Whether this button is the currently tabbable member of its toolbar.\n * Toolbars use roving tabindex: exactly one button has `tabIndex=0` at\n * a time; the rest are `-1`. Caller manages which.\n */\n tabbable?: boolean;\n /** Click handler. */\n onClick(): void;\n /**\n * Tooltip content. Defaults to `label` (plus `shortcut` if provided).\n */\n title?: string;\n /** Additional class for the root button. */\n className?: string;\n}\n\n/**\n * Generic icon-+-label toolbar button — building block for `ToolPalette`\n * and similar surfaces. Headless about layout direction (parent group\n * supplies flex direction via `ToolGroup`). Theme via `--wzl-*` tokens.\n */\nexport function ToolButton(props: ToolButtonProps) {\n const { icon, label, shortcut, active, disabled, ariaDisabled, tabbable, onClick, title, className } = props;\n const resolvedTitle = title ?? (shortcut ? `${label} (${shortcut})` : label);\n const cls = [s.button, active && s.active, className].filter(Boolean).join(' ');\n return (\n <TooltipTrigger isDisabled={disabled}>\n <Focusable isDisabled={disabled}>\n <button\n type=\"button\"\n tabIndex={tabbable ? 0 : -1}\n className={cls}\n aria-current={active ? 'true' : undefined}\n aria-disabled={ariaDisabled ? 'true' : undefined}\n disabled={disabled}\n onClick={onClick}\n >\n <span className={s.icon} aria-hidden=\"true\">{icon}</span>\n <span className={s.label}>{label}</span>\n {shortcut && <span className={s.shortcut}>{shortcut}</span>}\n </button>\n </Focusable>\n <Tooltip>{resolvedTitle}</Tooltip>\n </TooltipTrigger>\n );\n}\n","import type { ReactNode } from 'react';\nimport s from './ToolGroup.module.css';\n\nexport interface ToolGroupProps {\n children: ReactNode;\n /**\n * Lays children along an axis. `'vertical'` (default) stacks them in\n * a column; `'horizontal'` lays them in a row. Independent of the\n * parent toolbar's own orientation.\n */\n orientation?: 'vertical' | 'horizontal';\n /**\n * Optional `data-group` attribute — useful for parents that want to\n * select the group from CSS or tests by name.\n */\n groupKey?: string;\n /** Accessible name for the group (rendered as `aria-label`). */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * Generic toolbar group — a `role=\"group\"` flex container that arranges\n * `<ToolButton>`s (or any children) along a chosen axis. No visual chrome\n * beyond layout; theming lives on the buttons.\n */\nexport function ToolGroup(props: ToolGroupProps) {\n const { children, orientation = 'vertical', groupKey, ariaLabel, className } = props;\n const cls = [s.group, orientation === 'horizontal' && s.horizontal, className]\n .filter(Boolean).join(' ');\n return (\n <div className={cls} role=\"group\" data-group={groupKey} aria-label={ariaLabel}>\n {children}\n </div>\n );\n}\n","import { keyGlyph } from '../Keycaps/keyGlyph';\n\nexport interface ShortcutInput {\n key: string | readonly string[];\n mod?: boolean;\n alt?: boolean;\n shift?: boolean | 'optional';\n}\n\n/** Format a shortcut as an array of display chips, one per key — modifier\n * icons (⌘, ↑, ⌥) followed by the key glyph. UIs that want a boxed\n * per-key look render each chip in its own element. `shift: 'optional'` is\n * treated as falsy. */\nexport function formatShortcutParts(b: ShortcutInput | undefined): readonly string[] | undefined {\n if (!b) return undefined;\n const rawKey = Array.isArray(b.key) ? b.key[0] : (b.key as string);\n const parts: string[] = [];\n if (b.mod) parts.push('⌘');\n if (b.shift === true) parts.push('⇧');\n if (b.alt) parts.push('⌥');\n parts.push(keyGlyph(rawKey));\n return parts;\n}\n\n/** Format a shortcut as a single display string. Order: mod, shift, alt,\n * key. Returns `undefined` for `undefined` input so callers can `??` a\n * fallback. When `key` is an array, the first element is used. `shift: 'optional'`\n * is treated as falsy. */\nexport function formatShortcut(b: ShortcutInput | undefined): string | undefined {\n const parts = formatShortcutParts(b);\n return parts ? parts.join('') : undefined;\n}\n","import { Fragment, useRef, type ReactNode } from 'react';\nimport { UnknownIcon } from '@weasel-js/core';\nimport type { AnyTool, ToolsApi } from '@weasel-js/core';\nimport { eligibleContribution, type ModeRegistry } from '@weasel-js/modes';\nimport { ToolButton } from '../ToolButton';\nimport { ToolGroup } from '../ToolGroup';\nimport s from './ToolPalette.module.css';\nimport { formatShortcut, type ShortcutInput } from './formatShortcut';\n\nconst DEFAULT_GROUP_ORDER = ['select', 'shape', 'draw', 'type', 'view'] as const;\nconst MISC = 'misc';\n\nfunction partitionByGroup(list: AnyTool[]): Map<string, AnyTool[]> {\n const groups = new Map<string, AnyTool[]>();\n for (const tool of list) {\n const g = tool.presentation?.group ?? MISC;\n const bucket = groups.get(g) ?? [];\n bucket.push(tool);\n groups.set(g, bucket);\n }\n return groups;\n}\n\nfunction orderedGroupKeys(\n groups: Map<string, AnyTool[]>,\n groupOrder: readonly string[],\n): string[] {\n const seen = new Set(groups.keys());\n const ordered: string[] = [];\n for (const known of groupOrder) {\n if (seen.has(known)) {\n ordered.push(known);\n seen.delete(known);\n }\n }\n // Unknown groups in insertion order (Map preserves it), misc last.\n for (const key of groups.keys()) {\n if (seen.has(key) && key !== MISC) {\n ordered.push(key);\n seen.delete(key);\n }\n }\n if (seen.has(MISC)) ordered.push(MISC);\n return ordered;\n}\n\nfunction resolveIcon(tool: AnyTool): ReactNode {\n const rawIcon = tool.presentation?.icon;\n if (rawIcon == null) return <UnknownIcon />;\n if (typeof rawIcon === 'function') return rawIcon(undefined);\n return rawIcon;\n}\n\nexport interface ToolPaletteProps {\n tools: ToolsApi;\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n /** Derive the keyboard shortcut for a tool button from the action registry.\n * Called with the tool's id; return `undefined` to suppress a chip. When\n * omitted, falls back to `tool.keybinding` (legacy path). */\n lookupShortcut?: (toolId: string) => ShortcutInput | undefined;\n /**\n * Optional mode registry. When provided, tools whose `capabilities` do not\n * match the current mode are rendered greyed-out, aria-disabled, and their\n * onClick is suppressed. When omitted, all tools are treated as eligible\n * (preserves existing behaviour in consumers that haven't wired a registry).\n */\n modeRegistry?: ModeRegistry;\n /**\n * Presentation-group display order. Groups not listed keep their registry\n * insertion order after the listed ones; `misc` always renders last.\n * Defaults to `['select', 'shape', 'draw', 'type', 'view']`.\n */\n groupOrder?: readonly string[];\n}\n\nexport function ToolPalette(props: ToolPaletteProps) {\n const {\n tools, orientation = 'vertical', className, lookupShortcut, modeRegistry,\n groupOrder = DEFAULT_GROUP_ORDER,\n } = props;\n const list = Object.values(tools.registry);\n const groups = partitionByGroup(list);\n const groupKeys = orderedGroupKeys(groups, groupOrder);\n const cls = [s.palette, orientation === 'horizontal' && s.horizontal, className]\n .filter(Boolean).join(' ');\n\n const orderedIds = groupKeys.flatMap((k) => groups.get(k)!.map((t) => t.id));\n const tabbableId = tools.active && orderedIds.includes(tools.active)\n ? tools.active\n : orderedIds[0];\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n function onKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n const target = e.target as HTMLElement;\n if (target.tagName !== 'BUTTON') return;\n const root = rootRef.current;\n if (!root) return;\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('button'));\n const i = buttons.indexOf(target as HTMLButtonElement);\n if (i < 0) return;\n\n let next = -1;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n next = (i + 1) % buttons.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n next = (i - 1 + buttons.length) % buttons.length;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = buttons.length - 1;\n break;\n }\n if (next >= 0) {\n e.preventDefault();\n buttons[next].focus();\n }\n }\n\n return (\n <div\n ref={rootRef}\n className={cls}\n role=\"toolbar\"\n aria-label=\"Tools\"\n onKeyDown={onKeyDown}\n >\n {groupKeys.map((key, i) => (\n <Fragment key={key}>\n {i > 0 && (\n <div\n className={s.separator}\n role=\"separator\"\n aria-orientation={orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n />\n )}\n <ToolGroup orientation={orientation} groupKey={key}>\n {groups.get(key)!.map((tool) => {\n const label = tool.presentation?.label ?? tool.id;\n const shortcut = tool.presentation?.shortcut\n ?? formatShortcut(lookupShortcut ? lookupShortcut(tool.id) : tool.keybinding);\n const enabled = modeRegistry ? eligibleContribution(modeRegistry, tool) : true;\n const modeName = modeRegistry ? modeRegistry.current().id : undefined;\n const resolvedTitle = !enabled && modeName\n ? `${label}${shortcut ? ` (${shortcut})` : ''} — disabled in ${modeName} mode`\n : undefined;\n return (\n <ToolButton\n key={tool.id}\n icon={resolveIcon(tool)}\n label={label}\n shortcut={shortcut}\n active={tools.active === tool.id}\n tabbable={tool.id === tabbableId}\n ariaDisabled={!enabled}\n className={!enabled ? s.ineligibleBtn : undefined}\n title={resolvedTitle}\n onClick={enabled ? () => tools.setActive(tool.id) : () => {}}\n />\n );\n })}\n </ToolGroup>\n </Fragment>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport {\n Tabs as RACTabs,\n TabList as RACTabList,\n Tab as RACTab,\n TabPanel as RACTabPanel,\n type TabsProps as RACTabsProps,\n type TabListProps as RACTabListProps,\n type TabProps as RACTabProps,\n type TabPanelProps as RACTabPanelProps,\n} from 'react-aria-components';\nimport s from './Tabs.module.css';\n\nexport type TabsProps = Omit<RACTabsProps, 'className' | 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\nexport function Tabs({ children, className, ...rest }: TabsProps) {\n return (\n <RACTabs {...rest} className={[s.tabs, className].filter(Boolean).join(' ')}>\n {children}\n </RACTabs>\n );\n}\n\nexport type TabListProps<T extends object> = Omit<RACTabListProps<T>, 'className'> & {\n className?: string;\n};\n\nexport function TabList<T extends object>({ className, ...rest }: TabListProps<T>) {\n return <RACTabList<T> {...rest} className={[s.list, className].filter(Boolean).join(' ')} />;\n}\n\nexport type TabProps = Omit<RACTabProps, 'className' | 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\nexport function Tab({ children, className, ...rest }: TabProps) {\n return (\n <RACTab {...rest} className={[s.tab, className].filter(Boolean).join(' ')}>\n {children}\n </RACTab>\n );\n}\n\nexport type TabPanelProps = Omit<RACTabPanelProps, 'className' | 'children'> & {\n children?: ReactNode;\n className?: string;\n};\n\nexport function TabPanel({ children, className, ...rest }: TabPanelProps) {\n return (\n <RACTabPanel {...rest} className={[s.panel, className].filter(Boolean).join(' ')}>\n {children}\n </RACTabPanel>\n );\n}\n","import type { ReactNode } from 'react';\nimport {\n ComboBox as RACComboBox,\n Label,\n Input as RACInput,\n Button as RACButton,\n Popover as RACPopover,\n ListBox as RACListBox,\n ListBoxItem as RACListBoxItem,\n Text,\n FieldError,\n type ComboBoxProps as RACComboBoxProps,\n type ListBoxItemProps as RACListBoxItemProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses } from '../Field/Field';\nimport s from './ComboBox.module.css';\n\nexport type ComboBoxOption = {\n value: string;\n label: ReactNode;\n textValue?: string;\n isDisabled?: boolean;\n};\n\ntype Key = string | number;\n\nexport type ComboBoxProps<T extends Key = string> = Omit<RACComboBoxProps<object>, 'children' | 'className' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange'> & {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n placeholder?: string;\n options?: ReadonlyArray<ComboBoxOption & { value: T }>;\n children?: ReactNode;\n selectedKey?: T | null;\n defaultSelectedKey?: T;\n onSelectionChange?: (key: T | null) => void;\n emptyLabel?: ReactNode;\n className?: string;\n};\n\n/**\n * Filterable single-select wrapping React Aria's ComboBox. The user can\n * type to filter; selection commits to `onSelectionChange`. When no value\n * is in the input, selection clears (key becomes null).\n */\nexport function ComboBox<T extends Key = string>(props: ComboBoxProps<T>) {\n const {\n label,\n description,\n errorMessage,\n placeholder,\n options,\n children,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n emptyLabel = 'No matches',\n className,\n ...rest\n } = props;\n\n return (\n <RACComboBox\n {...rest}\n selectedKey={selectedKey ?? undefined}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange ? (k) => onSelectionChange(k as T | null) : undefined}\n className={[s.field, fieldClasses.root, className].filter(Boolean).join(' ')}\n >\n {label !== undefined && <Label className={fieldClasses.label}>{label}</Label>}\n <div className={s.frame}>\n <RACInput placeholder={placeholder} />\n <RACButton className={s.openButton} aria-label=\"Show options\">\n <svg viewBox=\"0 0 10 10\" aria-hidden=\"true\">\n <path d=\"M2 4 L5 7 L8 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </RACButton>\n </div>\n {description !== undefined && (\n <Text slot=\"description\" className={fieldClasses.hint}>\n {description}\n </Text>\n )}\n <FieldError className={fieldClasses.error}>{errorMessage}</FieldError>\n <RACPopover className={s.popover}>\n <RACListBox className={s.listbox} renderEmptyState={() => <div className={s.empty}>{emptyLabel}</div>}>\n {options !== undefined\n ? options.map((o) => (\n <ComboBoxItem key={String(o.value)} id={o.value} textValue={o.textValue} isDisabled={o.isDisabled}>\n {o.label}\n </ComboBoxItem>\n ))\n : children}\n </RACListBox>\n </RACPopover>\n </RACComboBox>\n );\n}\n\nexport type ComboBoxItemProps = Omit<RACListBoxItemProps, 'className'> & {\n className?: string;\n};\n\nexport function ComboBoxItem({ className, ...rest }: ComboBoxItemProps) {\n return <RACListBoxItem {...rest} className={[s.option, className].filter(Boolean).join(' ')} />;\n}\n","/**\n * Catmull-Rom spline sampling, parameterized by α.\n *\n * α = 0 → uniform parameterization (original Catmull-Rom). Fast, can\n * produce cusps and self-intersections at sharp 2D angles.\n * α = 0.5 → centripetal (Yuksel/Schneider 2011). No cusps, no\n * self-intersection. The \"safe default\" for 2D.\n * α = 1 → chordal. Smoother than uniform, different artifacts.\n *\n * `sampleCurve(...)` is the convenience alias for centripetal (α=0.5).\n */\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nfunction knot(a: Point, b: Point, alpha: number): number {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.pow(Math.sqrt(dx * dx + dy * dy), alpha);\n}\n\n/**\n * Sample the Catmull-Rom segment between p1 and p2 at parameter\n * t ∈ [0, 1]. p0 and p3 are the surrounding control points (use phantom\n * reflection at endpoints — see sampleCatmullRom below).\n *\n * Returns p1 at t=0 and p2 at t=1. `alpha` controls parameterization.\n */\nexport function segmentSampleAt(\n p0: Point, p1: Point, p2: Point, p3: Point, t: number,\n alpha: number = 0.5,\n): Point {\n const t0 = 0;\n const t1 = t0 + knot(p0, p1, alpha);\n const t2 = t1 + knot(p1, p2, alpha);\n const t3 = t2 + knot(p2, p3, alpha);\n\n // Degenerate: coincident p1/p2 → linear interpolation fallback.\n if (t2 - t1 === 0) {\n return { x: p1.x + (p2.x - p1.x) * t, y: p1.y + (p2.y - p1.y) * t };\n }\n\n const u = t1 + t * (t2 - t1);\n\n const a1x = ((t1 - u) * p0.x + (u - t0) * p1.x) / (t1 - t0);\n const a1y = ((t1 - u) * p0.y + (u - t0) * p1.y) / (t1 - t0);\n const a2x = ((t2 - u) * p1.x + (u - t1) * p2.x) / (t2 - t1);\n const a2y = ((t2 - u) * p1.y + (u - t1) * p2.y) / (t2 - t1);\n const a3x = ((t3 - u) * p2.x + (u - t2) * p3.x) / (t3 - t2);\n const a3y = ((t3 - u) * p2.y + (u - t2) * p3.y) / (t3 - t2);\n\n const b1x = ((t2 - u) * a1x + (u - t0) * a2x) / (t2 - t0);\n const b1y = ((t2 - u) * a1y + (u - t0) * a2y) / (t2 - t0);\n const b2x = ((t3 - u) * a2x + (u - t1) * a3x) / (t3 - t1);\n const b2y = ((t3 - u) * a2y + (u - t1) * a3y) / (t3 - t1);\n\n const cx = ((t2 - u) * b1x + (u - t1) * b2x) / (t2 - t1);\n const cy = ((t2 - u) * b1y + (u - t1) * b2y) / (t2 - t1);\n return { x: cx, y: cy };\n}\n\n/**\n * Sample the whole curve through `anchors` using Catmull-Rom with the\n * given α. Returns `(n-1) * samplesPerSegment + 1` points. Phantom\n * endpoints by reflection so the first/last segments are tangent to\n * the chord into/out of the endpoints. Returns `[]` for fewer than 2\n * anchors.\n */\nexport function sampleCatmullRom(\n anchors: readonly Point[],\n samplesPerSegment: number,\n alpha: number = 0.5,\n): Point[] {\n if (anchors.length < 2) return [];\n if (samplesPerSegment < 1) samplesPerSegment = 1;\n\n const n = anchors.length;\n const out: Point[] = [];\n\n const reflectStart: Point = {\n x: 2 * anchors[0].x - anchors[1].x,\n y: 2 * anchors[0].y - anchors[1].y,\n };\n const reflectEnd: Point = {\n x: 2 * anchors[n - 1].x - anchors[n - 2].x,\n y: 2 * anchors[n - 1].y - anchors[n - 2].y,\n };\n\n for (let i = 0; i < n - 1; i++) {\n const p0 = i === 0 ? reflectStart : anchors[i - 1];\n const p1 = anchors[i];\n const p2 = anchors[i + 1];\n const p3 = i + 2 < n ? anchors[i + 2] : reflectEnd;\n const tStart = i === 0 ? 0 : 1;\n for (let s = tStart; s <= samplesPerSegment; s++) {\n if (s === 0) {\n out.push(p1);\n continue;\n }\n if (s === samplesPerSegment) {\n out.push(p2);\n continue;\n }\n const t = s / samplesPerSegment;\n out.push(segmentSampleAt(p0, p1, p2, p3, t, alpha));\n }\n }\n return out;\n}\n\n/** Convenience alias for centripetal Catmull-Rom (α=0.5). The most\n * common choice; safe default for 2D paths. */\nexport function sampleCurve(\n anchors: readonly Point[],\n samplesPerSegment: number,\n): Point[] {\n return sampleCatmullRom(anchors, samplesPerSegment, 0.5);\n}\n","/**\n * Monotone cubic interpolation (Fritsch-Carlson / Steffen variant).\n *\n * Passes through every anchor and guarantees the curve never\n * overshoots `min(neighbors)` / `max(neighbors)` along either axis.\n * The right choice for animation timing curves (no anticipation) or\n * audio envelopes (no out-of-range values).\n *\n * Parameterized by index — works for both 1D (function-shaped) and\n * 2D (parametric) anchor sequences. The x and y coordinates are\n * interpolated independently as functions of the anchor index.\n *\n * Reference: Fritsch & Carlson 1980, \"Monotone piecewise cubic\n * interpolation.\" Steffen's 1990 refinement is conceptually the same;\n * we use a min-clamp variant that's monotonicity-preserving by\n * construction.\n */\n\nimport type { Point } from './catmullRom';\n\n/** Per-axis tangent computation for a 1D series of y-values sampled at\n * unit intervals (index-parameterized). Returns one tangent per\n * anchor. */\nfunction tangents(ys: readonly number[]): number[] {\n const n = ys.length;\n if (n === 0) return [];\n if (n === 1) return [0];\n\n // Secant slopes (dx = 1 in index parameterization).\n const m: number[] = new Array(n - 1);\n for (let i = 0; i < n - 1; i++) m[i] = ys[i + 1] - ys[i];\n\n const t: number[] = new Array(n);\n t[0] = m[0];\n t[n - 1] = m[n - 2];\n\n for (let i = 1; i < n - 1; i++) {\n if (m[i - 1] * m[i] <= 0) {\n // Sign change or flat → local extremum; tangent is zero (forces\n // the curve to settle without overshoot).\n t[i] = 0;\n } else {\n // Weighted average of adjacent secants (with dx_i = dx_{i-1} = 1,\n // this is just the arithmetic mean). Clamped by Steffen's rule\n // so the cubic stays monotone within each segment.\n const avg = (m[i - 1] + m[i]) / 2;\n const mag = Math.min(Math.abs(m[i - 1]), Math.abs(m[i]), Math.abs(avg));\n t[i] = Math.sign(avg) * mag;\n }\n }\n return t;\n}\n\n/** Cubic Hermite basis at parameter t ∈ [0, 1] given endpoint values\n * p0, p1 and endpoint tangents m0, m1. */\nfunction hermite(\n p0: number, p1: number, m0: number, m1: number, t: number,\n): number {\n const t2 = t * t;\n const t3 = t2 * t;\n return (\n (2 * t3 - 3 * t2 + 1) * p0 +\n (t3 - 2 * t2 + t) * m0 +\n (-2 * t3 + 3 * t2) * p1 +\n (t3 - t2) * m1\n );\n}\n\n/**\n * Sample the monotone-cubic curve through `anchors`. Returns\n * `(n-1) * samplesPerSegment + 1` points (same shape as\n * `sampleCatmullRom`). `[]` for fewer than 2 anchors.\n */\nexport function sampleMonotone(\n anchors: readonly Point[],\n samplesPerSegment: number,\n): Point[] {\n if (anchors.length < 2) return [];\n if (samplesPerSegment < 1) samplesPerSegment = 1;\n\n const n = anchors.length;\n const xs = anchors.map((a) => a.x);\n const ys = anchors.map((a) => a.y);\n const tx = tangents(xs);\n const ty = tangents(ys);\n\n const out: Point[] = [];\n for (let i = 0; i < n - 1; i++) {\n const startStep = i === 0 ? 0 : 1; // skip duplicate boundary\n for (let s = startStep; s <= samplesPerSegment; s++) {\n if (s === 0) { out.push(anchors[i]); continue; }\n if (s === samplesPerSegment) { out.push(anchors[i + 1]); continue; }\n const t = s / samplesPerSegment;\n out.push({\n x: hermite(xs[i], xs[i + 1], tx[i], tx[i + 1], t),\n y: hermite(ys[i], ys[i + 1], ty[i], ty[i + 1], t),\n });\n }\n }\n return out;\n}\n","/**\n * Interpolation mode dispatcher for CurveEditor. The vocabulary of\n * supported algorithms and the unified `sample(...)` entry point that\n * picks the right one. All algorithms produce\n * `(n-1) * samplesPerSegment + 1` points and pass through every\n * anchor — CurveEditor is strictly interpolating, never approximating.\n */\n\nimport { sampleCatmullRom, type Point } from './catmullRom';\nimport { sampleMonotone } from './monotone';\n\n/** Supported interpolation modes. All are interpolating (pass through\n * every anchor); the differences are in tangent computation and\n * parameterization. */\nexport type InterpolationMode =\n | 'linear'\n | 'catmull-rom' // centripetal (α=0.5) — safe default\n | 'catmull-rom-uniform' // α=0; can cusp on sharp 2D angles\n | 'catmull-rom-chordal' // α=1; smoother than uniform\n | 'monotone'; // Fritsch-Carlson / Steffen; no overshoot\n\n/** Sample anchors as a polyline. Produces the same sample count shape\n * as the Catmull-Rom variants so downstream segment-slicing logic\n * (hit testing, fill path construction) works uniformly. */\nfunction sampleLinear(\n anchors: readonly Point[],\n samplesPerSegment: number,\n): Point[] {\n if (anchors.length < 2) return [];\n if (samplesPerSegment < 1) samplesPerSegment = 1;\n\n const out: Point[] = [];\n for (let i = 0; i < anchors.length - 1; i++) {\n const a = anchors[i];\n const b = anchors[i + 1];\n const startStep = i === 0 ? 0 : 1;\n for (let s = startStep; s <= samplesPerSegment; s++) {\n if (s === 0) { out.push(a); continue; }\n if (s === samplesPerSegment) { out.push(b); continue; }\n const t = s / samplesPerSegment;\n out.push({ x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t });\n }\n }\n return out;\n}\n\n/** Sample `anchors` using the chosen interpolation mode. */\nexport function sampleByInterpolation(\n anchors: readonly Point[],\n samplesPerSegment: number,\n mode: InterpolationMode,\n): Point[] {\n switch (mode) {\n case 'linear':\n return sampleLinear(anchors, samplesPerSegment);\n case 'catmull-rom-uniform':\n return sampleCatmullRom(anchors, samplesPerSegment, 0);\n case 'catmull-rom-chordal':\n return sampleCatmullRom(anchors, samplesPerSegment, 1);\n case 'monotone':\n return sampleMonotone(anchors, samplesPerSegment);\n case 'catmull-rom':\n default:\n return sampleCatmullRom(anchors, samplesPerSegment, 0.5);\n }\n}\n","/**\n * Curve-specific hit tests. Generic coord transforms live in\n * `../Plot2D/geometry`; what's here is curve-only (anchor / polyline\n * proximity).\n */\nimport type { Point } from '../Plot2D/geometry';\n\n/**\n * Nearest-anchor hit test. Anchors are already in plot/screen coords.\n * Returns the index of the nearest anchor whose squared distance to\n * the pointer is ≤ radius². Null if no anchor is within radius.\n */\nexport function hitTestAnchor(\n anchors: readonly Point[],\n pointer: Point,\n radius: number,\n): { index: number } | null {\n const r2 = radius * radius;\n let best: { index: number; d2: number } | null = null;\n for (let i = 0; i < anchors.length; i++) {\n const a = anchors[i];\n const dx = a.x - pointer.x;\n const dy = a.y - pointer.y;\n const d2 = dx * dx + dy * dy;\n if (d2 > r2) continue;\n if (best === null || d2 < best.d2) best = { index: i, d2 };\n }\n return best ? { index: best.index } : null;\n}\n\n/**\n * Hit test against a per-segment sampled polyline. Each entry in\n * `segments` is the sample list for one segment (inclusive of\n * endpoints). Returns segment index + t (∈ [0, 1]) of the closest\n * point on the polyline within radius. Null if nothing is in range.\n *\n * Distance is measured to the line-segment chords between adjacent\n * samples, not just to the samples themselves — so sparse sampling\n * still produces accurate hits along the chord.\n */\nexport function hitTestCurve(\n segments: readonly (readonly Point[])[],\n pointer: Point,\n radius: number,\n): { segIdx: number; t: number } | null {\n const r2 = radius * radius;\n let best: { segIdx: number; t: number; d2: number } | null = null;\n for (let segIdx = 0; segIdx < segments.length; segIdx++) {\n const samples = segments[segIdx];\n if (samples.length < 2) continue;\n const last = samples.length - 1;\n for (let i = 0; i < last; i++) {\n const a = samples[i];\n const b = samples[i + 1];\n const abx = b.x - a.x;\n const aby = b.y - a.y;\n const apx = pointer.x - a.x;\n const apy = pointer.y - a.y;\n const ab2 = abx * abx + aby * aby;\n let u = ab2 > 0 ? (apx * abx + apy * aby) / ab2 : 0;\n if (u < 0) u = 0;\n else if (u > 1) u = 1;\n const cx = a.x + u * abx;\n const cy = a.y + u * aby;\n const dx = cx - pointer.x;\n const dy = cy - pointer.y;\n const d2 = dx * dx + dy * dy;\n if (d2 > r2) continue;\n const t = (i + u) / last;\n if (best === null || d2 < best.d2) best = { segIdx, t, d2 };\n }\n }\n return best ? { segIdx: best.segIdx, t: best.t } : null;\n}\n","/**\n * Built-in function/curve layer for LayeredCurveEditor. Bundles the\n * curve-render + anchor-render + drag/insert/delete gestures that were\n * the entirety of the original `CurveEditor`. Multiple instances coexist\n * by id; consumers can compose several to plot e.g. a primary function\n * and a derived (read-only) curve on the same chart.\n */\nimport type { ReactNode } from 'react';\nimport { sampleByInterpolation, type InterpolationMode } from './interpolation';\nimport { hitTestAnchor, hitTestCurve } from './hitTest';\nimport { dlog } from '../../dlog';\nimport s from './CurveEditor.module.css';\nimport type {\n CurveLayer, LayerCtx, LayerGesture, LayerRenderCtx, ModelPoint, PlotPoint,\n EmptyDownArgs,\n} from './layerTypes';\n\n// ── Public types ─────────────────────────────────────────────────────\n\nexport interface ControlPoint {\n x: number;\n y: number;\n /** When true, this control point can't be moved or deleted by the\n * user. Render as a smaller diamond with locked styling. */\n locked?: boolean;\n}\n\nexport type CurveDomain = '1d' | '2d';\nexport type EndpointMode = 'free' | 'pinned-x' | 'pinned-both';\nexport type AddPointMode = 'click-curve' | 'click-empty' | 'never';\n\nexport interface AnchorRenderProps {\n point: ControlPoint;\n index: number;\n cx: number;\n cy: number;\n isActive: boolean;\n isLocked: boolean;\n isPinnedEndpoint: boolean;\n isEndpoint: boolean;\n}\n\nexport interface CurveSettings {\n // reserved for future per-instance overrides\n}\n\nexport interface FillSettings {\n side: 'below' | 'above';\n color?: string;\n}\n\nexport interface FunctionLayerConfig {\n /** Layer id; default `'function'`. Two instances on the same editor\n * must have distinct ids. */\n id?: string;\n domain?: CurveDomain;\n endpoints?: EndpointMode;\n interpolation?: InterpolationMode;\n constrain?: 'none' | 'function';\n addPointMode?: AddPointMode;\n minPoints?: number;\n maxPoints?: number;\n curve?: CurveSettings | false | null;\n fill?: FillSettings | false | null;\n hideNonInteractive?: boolean;\n renderAnchor?: (info: AnchorRenderProps) => ReactNode;\n /** When false, the layer renders the curve+fill but doesn't render\n * anchors and doesn't accept pointer input. For derived read-only\n * curves (e.g. plotting f'(x) alongside f(x)). Default true. */\n interactive?: boolean;\n /** Override x clamp range for drags and pinned endpoints. Defaults\n * to the editor's modelRange x. Use this to constrain a layer to a\n * sub-range of the plot (e.g. a bevel curve occupying x ∈ [0, b]\n * while the editor's xRange is [0, halfWidth]). */\n xClamp?: readonly [number, number];\n}\n\nexport interface FunctionLayerState {\n points: readonly ControlPoint[];\n /** Layer-internal: the index of the anchor currently being dragged.\n * Cleared between gestures. Consumers treat the whole state as\n * opaque and round-trip it via onLayerChange. */\n activeIndex: number | null;\n}\n\nconst SAMPLES_PER_SEGMENT = 16;\nconst ANCHOR_SNAP_PX = 12;\nconst CURVE_HIT_PX = 8;\n\n// ── Helpers ───────────────────────────────────────────────────────────\n\nfunction clampToModelRange(p: ModelPoint, ctx: LayerCtx): ModelPoint {\n const m = ctx.modelRange;\n const xLo = Math.min(m.xMin, m.xMax);\n const xHi = Math.max(m.xMin, m.xMax);\n const yLo = Math.min(m.yMin, m.yMax);\n const yHi = Math.max(m.yMin, m.yMax);\n return {\n x: Math.max(xLo, Math.min(xHi, p.x)),\n y: Math.max(yLo, Math.min(yHi, p.y)),\n };\n}\n\nfunction isPinnedEndpointAt(index: number, count: number, endpoints: EndpointMode): boolean {\n if (endpoints === 'free') return false;\n return index === 0 || index === count - 1;\n}\n\nfunction projectAnchors(points: readonly ControlPoint[], ctx: LayerCtx): PlotPoint[] {\n return points.map((p) => ctx.toPlot(p));\n}\n\nfunction segmentSamples(\n points: readonly ControlPoint[],\n interpolation: InterpolationMode,\n ctx: LayerCtx,\n): PlotPoint[][] {\n if (points.length < 2) return [];\n const all = sampleByInterpolation(points, SAMPLES_PER_SEGMENT, interpolation);\n const out: PlotPoint[][] = [];\n for (let i = 0; i < points.length - 1; i++) {\n const start = i * SAMPLES_PER_SEGMENT;\n const end = start + SAMPLES_PER_SEGMENT;\n const slice = all.slice(start, end + 1);\n out.push(slice.map((p) => ctx.toPlot(p)));\n }\n return out;\n}\n\nfunction resolveInterpolation(cfg: FunctionLayerConfig): InterpolationMode {\n return (cfg.constrain ?? 'none') === 'function'\n ? 'monotone'\n : (cfg.interpolation ?? 'catmull-rom');\n}\n\n// ── Factory ───────────────────────────────────────────────────────────\n\nexport function createFunctionLayer(cfg: FunctionLayerConfig = {}): CurveLayer<FunctionLayerState> {\n const id = cfg.id ?? 'function';\n const domain = cfg.domain ?? '2d';\n const endpoints = cfg.endpoints ?? 'free';\n const constrain = cfg.constrain ?? 'none';\n const addPointMode = cfg.addPointMode ?? 'click-curve';\n const interpolation = resolveInterpolation(cfg);\n const interactive = cfg.interactive !== false;\n const curveVisible = cfg.curve !== false && cfg.curve !== null;\n\n // ── render ──────────────────────────────────────────────────────────\n function render(state: FunctionLayerState, ctx: LayerRenderCtx): ReactNode {\n const { points, activeIndex } = state;\n const plotAnchors = projectAnchors(points, ctx);\n\n let pathD = '';\n let fillD: string | null = null;\n if (points.length >= 2) {\n const samples = sampleByInterpolation(points, SAMPLES_PER_SEGMENT, interpolation)\n .map((p) => ctx.toPlot(p));\n const parts: string[] = [`M${samples[0].x.toFixed(2)},${samples[0].y.toFixed(2)}`];\n for (let i = 1; i < samples.length; i++) {\n parts.push(`L${samples[i].x.toFixed(2)},${samples[i].y.toFixed(2)}`);\n }\n pathD = parts.join('');\n\n if (cfg.fill) {\n const closingY = cfg.fill.side === 'below' ? ctx.plotSize.height : 0;\n const first = samples[0];\n const last = samples[samples.length - 1];\n const fillParts = [...parts];\n fillParts.push(`L${last.x.toFixed(2)},${closingY.toFixed(2)}`);\n fillParts.push(`L${first.x.toFixed(2)},${closingY.toFixed(2)}`);\n fillParts.push('Z');\n fillD = fillParts.join('');\n }\n }\n\n return (\n <>\n {fillD && (\n <path\n data-curve-element=\"fill\"\n className={s.fill}\n d={fillD}\n fill={cfg.fill ? cfg.fill.color : undefined}\n />\n )}\n {pathD && curveVisible && (\n <path\n className={s.curve}\n d={pathD}\n fill=\"none\"\n />\n )}\n {interactive && plotAnchors.map((a, i) => {\n const pinned = isPinnedEndpointAt(i, points.length, endpoints);\n const locked = points[i]?.locked === true;\n if ((locked || pinned) && cfg.hideNonInteractive) return null;\n const active = activeIndex === i;\n const isEndpoint = curveVisible && (i === 0 || i === points.length - 1);\n if (cfg.renderAnchor) {\n const node = cfg.renderAnchor({\n point: points[i], index: i,\n cx: a.x, cy: a.y,\n isActive: active, isLocked: locked,\n isPinnedEndpoint: pinned, isEndpoint,\n });\n if (node !== null && node !== undefined) {\n return <g key={i} data-anchor-index={i}>{node}</g>;\n }\n }\n const anchorCls = [\n s.anchor,\n isEndpoint && s.endpoint,\n (pinned || locked) && s.pinned,\n locked && s.locked,\n active && s.active,\n ].filter(Boolean).join(' ');\n const renderAsDiamond = isEndpoint || locked;\n if (renderAsDiamond) {\n const half = locked ? 3.55 : 5;\n return (\n <rect\n key={i}\n className={anchorCls}\n x={a.x - half}\n y={a.y - half}\n width={half * 2}\n height={half * 2}\n transform={`rotate(45 ${a.x} ${a.y})`}\n data-anchor-index={i}\n />\n );\n }\n return (\n <circle\n key={i}\n className={anchorCls}\n cx={a.x}\n cy={a.y}\n r={4}\n data-anchor-index={i}\n />\n );\n })}\n </>\n );\n }\n\n // ── hit test ────────────────────────────────────────────────────────\n function hitTest(state: FunctionLayerState, plot: PlotPoint, ctx: LayerCtx) {\n if (!interactive) return null;\n const plotAnchors = projectAnchors(state.points, ctx);\n const a = hitTestAnchor(plotAnchors, plot, ANCHOR_SNAP_PX);\n if (a) return { kind: 'anchor' as const, payload: { index: a.index } };\n if (addPointMode === 'click-curve' && curveVisible) {\n const segs = segmentSamples(state.points, interpolation, ctx);\n const c = hitTestCurve(segs, plot, CURVE_HIT_PX);\n if (c) return { kind: 'curve' as const, payload: { segIdx: c.segIdx, t: c.t } };\n }\n return null;\n }\n\n // ── drag gesture ────────────────────────────────────────────────────\n function makeDragGesture(index: number): LayerGesture<FunctionLayerState> {\n return {\n onMove(state, model, _e, ctx) {\n const points = state.points;\n if (index < 0 || index >= points.length) return state;\n const mr = ctx.modelRange;\n const xMin = cfg.xClamp ? cfg.xClamp[0] : mr.xMin;\n const xMax = cfg.xClamp ? cfg.xClamp[1] : mr.xMax;\n let nx = model.x;\n let ny = model.y;\n const isEndpoint = index === 0 || index === points.length - 1;\n\n if (endpoints === 'pinned-both' && isEndpoint) {\n nx = index === 0 ? xMin : xMax;\n ny = index === 0 ? mr.yMin : mr.yMax;\n } else if (endpoints === 'pinned-x' && isEndpoint) {\n nx = index === 0 ? xMin : xMax;\n } else if (constrain === 'function' || domain === '1d') {\n const epsilon = constrain === 'function'\n ? (xMax - xMin) / 1000\n : 0;\n const left = index > 0 ? points[index - 1].x + epsilon : xMin;\n const right = index < points.length - 1 ? points[index + 1].x - epsilon : xMax;\n nx = Math.max(left, Math.min(right, nx));\n }\n\n // Always clamp x to the layer's own range (so free-mode\n // interior anchors of a sub-range layer can't escape it).\n // Normalize bounds for inverted ranges.\n {\n const lo = Math.min(xMin, xMax);\n const hi = Math.max(xMin, xMax);\n nx = Math.max(lo, Math.min(hi, nx));\n }\n const clamped = clampToModelRange({ x: nx, y: ny }, ctx);\n const next = points.slice();\n next[index] = { ...points[index], x: clamped.x, y: clamped.y };\n return { ...state, points: next, activeIndex: index };\n },\n onCommit(state) { return { ...state, activeIndex: null }; },\n onCancel(state) { return { ...state, activeIndex: null }; },\n };\n }\n\n // ── pointerdown on a positive hit ───────────────────────────────────\n function onPointerDown(\n state: FunctionLayerState,\n hit: { kind: string; payload?: unknown },\n e: PointerEvent,\n ctx: LayerCtx,\n extra: EmptyDownArgs<FunctionLayerState>,\n ): LayerGesture<FunctionLayerState> | void {\n if (hit.kind === 'anchor') {\n const { index } = hit.payload as { index: number };\n dlog('function-layer', 'anchor-down', { id, index, shift: ctx.modifiers.shift, button: e.button });\n if (state.points[index]?.locked) return;\n if (ctx.modifiers.shift) {\n if (isPinnedEndpointAt(index, state.points.length, endpoints)) return;\n if (cfg.minPoints !== undefined && state.points.length <= cfg.minPoints) return;\n extra.commit({\n ...state,\n points: state.points.filter((_, i) => i !== index),\n activeIndex: null,\n });\n return;\n }\n if (e.button === 2) return;\n extra.commit({ ...state, activeIndex: index });\n return makeDragGesture(index);\n }\n if (hit.kind === 'curve') {\n const { segIdx } = hit.payload as { segIdx: number; t: number };\n if (cfg.maxPoints !== undefined && state.points.length >= cfg.maxPoints) return;\n const insertIndex = segIdx + 1;\n const modelPt = clampToModelRange(extra.model, ctx);\n\n // function/1d: refuse insert that would be immediately clamped\n // against a neighbor (mouse jitter would otherwise drop a phantom\n // point directly above an existing anchor). Snap to dragging the\n // neighbor instead.\n if (constrain === 'function' || domain === '1d') {\n const epsilon = constrain === 'function'\n ? (ctx.modelRange.xMax - ctx.modelRange.xMin) / 1000\n : 0;\n const left = insertIndex > 0 ? state.points[insertIndex - 1] : null;\n const right = insertIndex < state.points.length ? state.points[insertIndex] : null;\n if (left && Math.abs(modelPt.x - left.x) < epsilon * 2) {\n extra.commit({ ...state, activeIndex: insertIndex - 1 });\n return makeDragGesture(insertIndex - 1);\n }\n if (right && Math.abs(modelPt.x - right.x) < epsilon * 2) {\n extra.commit({ ...state, activeIndex: insertIndex });\n return makeDragGesture(insertIndex);\n }\n }\n\n const nextPoints = [...state.points.slice(0, insertIndex), modelPt, ...state.points.slice(insertIndex)];\n extra.commit({ ...state, points: nextPoints, activeIndex: insertIndex });\n return makeDragGesture(insertIndex);\n }\n }\n\n // ── empty-space click ───────────────────────────────────────────────\n function onEmptyPointerDown(\n state: FunctionLayerState,\n model: ModelPoint,\n _e: PointerEvent,\n ctx: LayerCtx,\n extra: EmptyDownArgs<FunctionLayerState>,\n ): LayerGesture<FunctionLayerState> | void {\n if (!interactive) return;\n if (addPointMode !== 'click-empty') return;\n if (cfg.maxPoints !== undefined && state.points.length >= cfg.maxPoints) return;\n\n const clamped = clampToModelRange(model, ctx);\n let insertIndex = state.points.length;\n if (domain === '1d') {\n for (let i = 0; i < state.points.length; i++) {\n if (state.points[i].x > clamped.x) { insertIndex = i; break; }\n }\n }\n const nextPoints = [...state.points.slice(0, insertIndex), clamped, ...state.points.slice(insertIndex)];\n extra.commit({ ...state, points: nextPoints, activeIndex: null });\n return;\n }\n\n return {\n id,\n render,\n hitTest,\n onPointerDown,\n onEmptyPointerDown,\n };\n}\n\n/** Convenience: build a function-layer state from a points array. */\nexport function functionLayerState(points: readonly ControlPoint[]): FunctionLayerState {\n return { points, activeIndex: null };\n}\n","import {\n useCallback, useEffect, useMemo, useRef, useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n Plot2D,\n type Plot2DHandle,\n type GridSettings,\n type AxesSettings,\n} from '../Plot2D';\nimport {\n modelToPlot, plotToModel,\n type ModelRange,\n} from '../Plot2D/geometry';\nimport { dlog } from '../../dlog';\nimport s from './CurveEditor.module.css';\nimport type {\n CurveLayer, LayerCtx, LayerGesture, LayerModifiers, ModelPoint, PlotPoint,\n} from './layerTypes';\n\nexport interface LayerBinding<S = unknown> {\n layer: CurveLayer<S>;\n state: S;\n}\n\nexport interface LayeredCurveEditorProps {\n /** Bottom-to-top render order: `layers[0]` paints first, `layers[N-1]`\n * paints on top. Hit-testing runs in reverse (topmost claim wins). */\n layers: ReadonlyArray<LayerBinding<any>>;\n\n /** Fires every frame during a gesture with the live in-flight state\n * for the layer that owns the gesture. */\n onLayerChange(id: string, next: unknown): void;\n\n /** Fires once per discrete user action (drag-end, one-shot insert,\n * delete) for the layer that produced the change. `prev` is the\n * layer's state at gesture start. */\n onLayerCommit?(id: string, next: unknown, prev: unknown): void;\n\n width: number;\n height: number;\n /** Model-space x range. Default [0, 1]. */\n xRange?: readonly [number, number];\n /** Model-space y range. Default [0, 1]. */\n yRange?: readonly [number, number];\n grid?: GridSettings | false | null;\n axes?: AxesSettings | false | null;\n\n /** Built-in undo/redo via Cmd/Ctrl+Z (Shift+Z or Y for redo) on the\n * focused SVG. Snapshots every layer's state on each commit; undo\n * fires `onLayerChange(id, prevState)` for each layer whose state\n * changed. Default `true`. */\n history?: boolean;\n\n className?: string;\n style?: CSSProperties;\n\n /** Extra SVG content rendered behind all layers (under the lowest\n * layer but above grid/axes). Use this for static chrome that isn't\n * worth modeling as a layer. */\n children?: ReactNode;\n}\n\ninterface ActiveGesture {\n layerId: string;\n pointerId: number;\n gesture: LayerGesture<any>;\n startStates: Map<string, unknown>;\n startSelfState: unknown;\n}\n\nfunction readModifiers(e: PointerEvent | ReactPointerEvent<any> | KeyboardEvent | ReactKeyboardEvent<any>): LayerModifiers {\n return {\n shift: e.shiftKey,\n alt: e.altKey,\n meta: e.metaKey,\n ctrl: e.ctrlKey,\n };\n}\n\nexport function LayeredCurveEditor(props: LayeredCurveEditorProps) {\n const {\n layers, onLayerChange, onLayerCommit,\n width, height,\n xRange = [0, 1], yRange = [0, 1],\n grid, axes,\n className, style, children,\n } = props;\n\n const historyEnabled = props.history !== false;\n\n const modelRange: ModelRange = useMemo(\n () => ({ xMin: xRange[0], xMax: xRange[1], yMin: yRange[0], yMax: yRange[1] }),\n [xRange, yRange],\n );\n const plotSize = useMemo(() => ({ width, height }), [width, height]);\n\n // Refs that always hold the latest props — gesture handlers and\n // window listeners close over these refs, never over render-time\n // values, so mid-drag re-renders (including cross-layer state\n // updates) are visible to the next pointermove tick.\n const layersRef = useRef(layers);\n layersRef.current = layers;\n const modelRangeRef = useRef(modelRange);\n modelRangeRef.current = modelRange;\n const plotSizeRef = useRef(plotSize);\n plotSizeRef.current = plotSize;\n\n const plotRef = useRef<Plot2DHandle | null>(null);\n\n // ── Coord helpers ──────────────────────────────────────────────────\n const makeCtx = useCallback((modifiers: LayerModifiers): LayerCtx => {\n const mr = modelRangeRef.current;\n const ps = plotSizeRef.current;\n return {\n modelRange: mr,\n plotSize: ps,\n toPlot: (p) => modelToPlot(p, mr, ps),\n toModel: (p) => plotToModel(p, mr, ps),\n modifiers,\n };\n }, []);\n\n // ── Gesture routing ────────────────────────────────────────────────\n const activeRef = useRef(null as ActiveGesture | null);\n const [activeLayerId, setActiveLayerId] = useState<string | null>(null);\n\n // ── History (whole-state snapshots) ────────────────────────────────\n const pastRef = useRef<Map<string, unknown>[]>([]);\n const futureRef = useRef<Map<string, unknown>[]>([]);\n\n const snapshot = useCallback((): Map<string, unknown> => {\n const m = new Map<string, unknown>();\n for (const b of layersRef.current) m.set(b.layer.id, b.state);\n return m;\n }, []);\n\n const restore = useCallback((snap: Map<string, unknown>) => {\n const current = layersRef.current;\n for (const b of current) {\n const prev = snap.get(b.layer.id);\n if (prev !== undefined && prev !== b.state) {\n onLayerChange(b.layer.id, prev);\n }\n }\n }, [onLayerChange]);\n\n const undo = useCallback(() => {\n if (!historyEnabled) return;\n const past = pastRef.current;\n if (past.length === 0) return;\n const prev = past.pop()!;\n futureRef.current.push(snapshot());\n restore(prev);\n }, [historyEnabled, snapshot, restore]);\n\n const redo = useCallback(() => {\n if (!historyEnabled) return;\n const future = futureRef.current;\n if (future.length === 0) return;\n const next = future.pop()!;\n pastRef.current.push(snapshot());\n restore(next);\n }, [historyEnabled, snapshot, restore]);\n\n // ── Window-level pointer routing during an active gesture ──────────\n // Stable identity across renders so addEventListener / removeEventListener\n // see the same function. Delegate to refs that point at the latest\n // per-render impl.\n const onWindowMoveRef = useRef<(e: PointerEvent) => void>(() => {});\n const onWindowUpRef = useRef<(e: PointerEvent) => void>(() => {});\n const onWindowCancelRef = useRef<(e: PointerEvent) => void>(() => {});\n\n const stableMove = useRef((e: PointerEvent) => onWindowMoveRef.current(e)).current;\n const stableUp = useRef((e: PointerEvent) => onWindowUpRef.current(e)).current;\n const stableCancel = useRef((e: PointerEvent) => onWindowCancelRef.current(e)).current;\n\n const cleanupGesture = useCallback(() => {\n window.removeEventListener('pointermove', stableMove);\n window.removeEventListener('pointerup', stableUp);\n window.removeEventListener('pointercancel', stableCancel);\n activeRef.current = null;\n setActiveLayerId(null);\n }, [stableMove, stableUp, stableCancel]);\n\n const findLayerState = useCallback((id: string): unknown | undefined => {\n for (const b of layersRef.current) if (b.layer.id === id) return b.state;\n return undefined;\n }, []);\n\n onWindowMoveRef.current = (e: PointerEvent) => {\n const a = activeRef.current;\n if (!a || a.pointerId !== e.pointerId) return;\n const h = plotRef.current;\n if (!h) return;\n const model = h.clientToModel(e);\n const current = findLayerState(a.layerId);\n if (current === undefined) return;\n const ctx = makeCtx(readModifiers(e));\n const next = a.gesture.onMove(current, model, e, ctx);\n if (next !== current) onLayerChange(a.layerId, next);\n };\n\n onWindowUpRef.current = (e: PointerEvent) => {\n const a = activeRef.current;\n if (!a || a.pointerId !== e.pointerId) return;\n const current = findLayerState(a.layerId);\n if (current === undefined) { cleanupGesture(); return; }\n const ctx = makeCtx(readModifiers(e));\n const finalState = a.gesture.onCommit ? a.gesture.onCommit(current, ctx) : current;\n if (finalState !== current) onLayerChange(a.layerId, finalState);\n if (historyEnabled) {\n pastRef.current.push(a.startStates);\n futureRef.current = [];\n }\n if (onLayerCommit) onLayerCommit(a.layerId, finalState, a.startSelfState);\n cleanupGesture();\n };\n\n onWindowCancelRef.current = (e: PointerEvent) => {\n const a = activeRef.current;\n if (!a || a.pointerId !== e.pointerId) return;\n const current = findLayerState(a.layerId);\n if (current === undefined) { cleanupGesture(); return; }\n const ctx = makeCtx(readModifiers(e));\n const restored = a.gesture.onCancel ? a.gesture.onCancel(current, ctx) : a.startSelfState;\n if (restored !== current) onLayerChange(a.layerId, restored);\n cleanupGesture();\n };\n\n const installGesture = useCallback((layerId: string, pointerId: number, gesture: LayerGesture<any>) => {\n const startStates = snapshot();\n const startSelfState = startStates.get(layerId);\n activeRef.current = {\n layerId, pointerId, gesture,\n startStates,\n startSelfState,\n };\n setActiveLayerId(layerId);\n window.addEventListener('pointermove', stableMove);\n window.addEventListener('pointerup', stableUp);\n window.addEventListener('pointercancel', stableCancel);\n }, [snapshot, stableMove, stableUp, stableCancel]);\n\n // ── pointerdown dispatch ───────────────────────────────────────────\n const onSvgPointerDown = useCallback((\n e: ReactPointerEvent<SVGSVGElement>,\n coords: { plot: PlotPoint; model: ModelPoint },\n ) => {\n if (activeRef.current) return; // ignore secondary touches mid-gesture\n const modifiers = readModifiers(e);\n const ctx = makeCtx(modifiers);\n const ls = layersRef.current;\n const nativeEvent = e.nativeEvent;\n\n dlog('layered-curve-editor', 'pointerdown', { plot: coords.plot, model: coords.model, layers: ls.length });\n\n // Capture the pre-event snapshot once; reuse for history if any\n // path produces a commit (gesture-start commit or one-shot).\n const preEventSnapshot = snapshot();\n\n // Top-to-bottom hit test.\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n const hit = b.layer.hitTest?.(b.state, coords.plot, ctx);\n if (!hit) continue;\n // Found a claim. onPointerDown may start a gesture, absorb the\n // click, or commit a one-shot edit via extra.commit.\n const prevState = b.state;\n let committed: unknown = undefined;\n const gesture = b.layer.onPointerDown?.(\n prevState, hit, nativeEvent, ctx,\n {\n plot: coords.plot,\n model: coords.model,\n commit(next) { committed = next; onLayerChange(b.layer.id, next); },\n },\n );\n e.stopPropagation();\n if (gesture) {\n installGesture(b.layer.id, e.pointerId, gesture);\n return;\n }\n if (committed !== undefined) {\n if (historyEnabled) {\n pastRef.current.push(preEventSnapshot);\n futureRef.current = [];\n }\n onLayerCommit?.(b.layer.id, committed, prevState);\n }\n return;\n }\n\n // No hit — empty space dispatch, top-to-bottom.\n let pendingCommit: { id: string; next: unknown; prev: unknown } | null = null;\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n if (!b.layer.onEmptyPointerDown) continue;\n const prevState = b.state;\n let committed: unknown = undefined;\n const gesture = b.layer.onEmptyPointerDown(\n prevState, coords.model, nativeEvent, ctx,\n {\n plot: coords.plot,\n model: coords.model,\n commit(next) {\n committed = next;\n onLayerChange(b.layer.id, next);\n },\n },\n );\n if (gesture) {\n // If onEmptyPointerDown also published a commit (e.g. click-curve\n // insert publishes the new point then drags it), the gesture's\n // startStates already capture the post-insert state; the commit\n // for history is the *pre*-event snapshot, written when the\n // gesture eventually finishes via the gesture-commit path. We\n // override the gesture's startStates so undo restores correctly.\n installGesture(b.layer.id, e.pointerId, gesture);\n if (committed !== undefined && activeRef.current !== null) {\n (activeRef.current as ActiveGesture).startStates = preEventSnapshot;\n (activeRef.current as ActiveGesture).startSelfState = preEventSnapshot.get(b.layer.id);\n }\n return;\n }\n if (committed !== undefined) {\n pendingCommit = { id: b.layer.id, next: committed, prev: prevState };\n break;\n }\n }\n if (pendingCommit) {\n if (historyEnabled) {\n pastRef.current.push(preEventSnapshot);\n futureRef.current = [];\n }\n onLayerCommit?.(pendingCommit.id, pendingCommit.next, pendingCommit.prev);\n }\n }, [makeCtx, installGesture, onLayerChange, onLayerCommit, historyEnabled, snapshot]);\n\n // ── keyboard ───────────────────────────────────────────────────────\n const onSvgKeyDown = useCallback((e: ReactKeyboardEvent<SVGSVGElement>) => {\n const modifiers = readModifiers(e);\n const ctx = makeCtx(modifiers);\n const ls = layersRef.current;\n // History first.\n if (historyEnabled && (e.metaKey || e.ctrlKey)) {\n const k = e.key.toLowerCase();\n if (k === 'z') {\n if (e.shiftKey) redo();\n else undo();\n e.preventDefault();\n return;\n }\n if (k === 'y') { redo(); e.preventDefault(); return; }\n }\n // Then layers (top-to-bottom).\n for (let i = ls.length - 1; i >= 0; i--) {\n const b = ls[i];\n b.layer.onKeyDown?.(b.state, e.nativeEvent, ctx);\n if (e.isDefaultPrevented()) return;\n }\n }, [historyEnabled, undo, redo, makeCtx]);\n\n // Clean up listeners on unmount.\n useEffect(() => () => {\n window.removeEventListener('pointermove', stableMove);\n window.removeEventListener('pointerup', stableUp);\n window.removeEventListener('pointercancel', stableCancel);\n }, [stableMove, stableUp, stableCancel]);\n\n // ── render ─────────────────────────────────────────────────────────\n const renderCtxBase: Omit<LayerCtx, 'modifiers'> = useMemo(() => ({\n modelRange,\n plotSize,\n toPlot: (p) => modelToPlot(p, modelRange, plotSize),\n toModel: (p) => plotToModel(p, modelRange, plotSize),\n }), [modelRange, plotSize]);\n\n const cls = [s.root, className].filter(Boolean).join(' ');\n\n return (\n <Plot2D\n ref={plotRef}\n className={cls}\n style={style}\n width={width}\n height={height}\n xRange={xRange}\n yRange={yRange}\n grid={grid}\n axes={axes}\n tabIndex={historyEnabled ? 0 : undefined}\n onPointerDown={onSvgPointerDown}\n onKeyDown={onSvgKeyDown}\n >\n {children}\n {layers.map((b) => {\n const ctx = {\n ...renderCtxBase,\n modifiers: { shift: false, alt: false, meta: false, ctrl: false },\n isActive: activeLayerId === b.layer.id,\n };\n return (\n <g key={b.layer.id} data-layer-id={b.layer.id}>\n {b.layer.render(b.state, ctx)}\n </g>\n );\n })}\n </Plot2D>\n );\n}\n","/**\n * Back-compat wrapper around `LayeredCurveEditor` that preserves the\n * original single-curve API. New consumers wanting multi-layer\n * composition should reach for `LayeredCurveEditor` + `createFunctionLayer`\n * directly.\n */\nimport {\n useCallback, useEffect, useMemo, useRef, useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport {\n type GridSettings,\n type AxesSettings,\n} from '../Plot2D';\nimport type { InterpolationMode } from './interpolation';\nimport {\n createFunctionLayer,\n type ControlPoint,\n type CurveDomain,\n type EndpointMode,\n type AddPointMode,\n type CurveSettings,\n type FillSettings,\n type AnchorRenderProps,\n type FunctionLayerState,\n} from './createFunctionLayer';\nimport { LayeredCurveEditor } from './LayeredCurveEditor';\n\nexport type { GridSettings, AxesSettings };\nexport type {\n ControlPoint, CurveDomain, EndpointMode, AddPointMode,\n CurveSettings, FillSettings, AnchorRenderProps,\n};\n\nexport interface CurveEditorProps {\n value: readonly ControlPoint[];\n onChange: (next: ControlPoint[]) => void;\n onChangeCommit?: (next: ControlPoint[], prev: readonly ControlPoint[]) => void;\n domain?: CurveDomain;\n interpolation?: InterpolationMode;\n endpoints?: EndpointMode;\n xRange?: readonly [number, number];\n yRange?: readonly [number, number];\n width: number;\n height: number;\n grid?: GridSettings | false | null;\n axes?: AxesSettings | false | null;\n curve?: CurveSettings | false | null;\n fill?: FillSettings | false | null;\n hideNonInteractive?: boolean;\n constrain?: 'none' | 'function';\n history?: boolean;\n minPoints?: number;\n maxPoints?: number;\n addPointMode?: AddPointMode;\n renderAnchor?: (info: AnchorRenderProps) => ReactNode;\n /** Extra SVG content rendered behind the curve and anchors. */\n decorations?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function CurveEditor(props: CurveEditorProps) {\n const {\n value, onChange, onChangeCommit,\n domain, endpoints, interpolation, constrain, addPointMode,\n minPoints, maxPoints, curve, fill, hideNonInteractive, renderAnchor,\n width, height, xRange, yRange, grid, axes, history,\n className, style, decorations,\n } = props;\n\n // Layer is config-only; rebuild only when *config* changes.\n const layer = useMemo(() => createFunctionLayer({\n id: 'function',\n domain, endpoints, interpolation, constrain, addPointMode,\n minPoints, maxPoints, curve, fill, hideNonInteractive, renderAnchor,\n }), [\n domain, endpoints, interpolation, constrain, addPointMode,\n minPoints, maxPoints, curve, fill, hideNonInteractive, renderAnchor,\n ]);\n\n // Hybrid controlled-state: the wrapper holds the full FunctionLayerState\n // locally so that consumers using the original CurveEditor API don't\n // have to wire their `value` prop back through on every drag tick to\n // keep the in-flight gesture advancing. We adopt the consumer's\n // `value` prop when it changes externally (and no gesture is active).\n const [layerState, setLayerState] = useState<FunctionLayerState>(\n () => ({ points: value, activeIndex: null }),\n );\n // Ref mirror so the layerChange callback can compare against the\n // freshest state without re-binding on every render.\n const layerStateRef = useRef(layerState);\n layerStateRef.current = layerState;\n\n // Sync from controlled `value` when the consumer updates it externally\n // and we're idle. Skip the update during a gesture so drag-in-flight\n // points aren't clobbered by a stale `value`.\n useEffect(() => {\n if (layerStateRef.current.activeIndex !== null) return;\n if (layerStateRef.current.points === value) return;\n setLayerState({ points: value, activeIndex: null });\n }, [value]);\n\n const handleLayerChange = useCallback((_id: string, nextUnknown: unknown) => {\n const next = nextUnknown as FunctionLayerState;\n const prevPoints = layerStateRef.current.points;\n setLayerState(next);\n if (next.points !== prevPoints) {\n onChange(next.points as ControlPoint[]);\n }\n }, [onChange]);\n\n const handleLayerCommit = useCallback((_id: string, nextUnknown: unknown, prevUnknown: unknown) => {\n if (!onChangeCommit) return;\n const next = nextUnknown as FunctionLayerState;\n const prev = prevUnknown as FunctionLayerState;\n if (next.points !== prev.points) {\n onChangeCommit(next.points as ControlPoint[], prev.points);\n }\n }, [onChangeCommit]);\n\n // Right-click on an anchor → delete (preserves original CurveEditor\n // behavior). LayeredCurveEditor doesn't model contextmenu as a\n // gesture; we intercept at the wrapper level by walking the DOM\n // target for `data-anchor-index`.\n const onContextMenu = useCallback((e: ReactMouseEvent<HTMLDivElement>) => {\n const target = e.target as Element | null;\n const node = target?.closest?.('[data-anchor-index]') as Element | null;\n if (!node) return;\n e.preventDefault();\n e.stopPropagation();\n const idxAttr = node.getAttribute('data-anchor-index');\n if (idxAttr === null) return;\n const idx = Number(idxAttr);\n const points = layerStateRef.current.points;\n if (!Number.isInteger(idx) || idx < 0 || idx >= points.length) return;\n if (points[idx]?.locked) return;\n if (endpoints !== undefined && endpoints !== 'free' && (idx === 0 || idx === points.length - 1)) return;\n if (minPoints !== undefined && points.length <= minPoints) return;\n const next = points.filter((_, i) => i !== idx);\n setLayerState({ points: next, activeIndex: null });\n onChange(next as ControlPoint[]);\n onChangeCommit?.(next as ControlPoint[], points);\n }, [endpoints, minPoints, onChange, onChangeCommit]);\n\n const layers = useMemo(() => [{ layer, state: layerState }], [layer, layerState]);\n\n return (\n <div\n onContextMenu={onContextMenu}\n style={{ display: 'contents' }}\n >\n <LayeredCurveEditor\n layers={layers}\n onLayerChange={handleLayerChange}\n onLayerCommit={handleLayerCommit}\n width={width}\n height={height}\n xRange={xRange}\n yRange={yRange}\n grid={grid}\n axes={axes}\n history={history}\n className={className}\n style={style}\n >\n {decorations}\n </LayeredCurveEditor>\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport {\n CurveEditor,\n type AnchorRenderProps,\n type ControlPoint,\n type CurveEditorProps,\n} from '../CurveEditor';\nimport type { GridSettings, AxesSettings } from '../Plot2D';\n\nexport interface PointPlotterProps {\n /** Plotted points; caller-owned. */\n value: readonly ControlPoint[];\n /** Fires every frame during drag with the live in-flight value. */\n onChange: (next: ControlPoint[]) => void;\n /** Fires once per discrete user action (drag-end, add, delete) with\n * the new value and the value at gesture start. Wire history here. */\n onChangeCommit?: (next: ControlPoint[], prev: readonly ControlPoint[]) => void;\n /** Model-space x range. Default [0, 1]. */\n xRange?: readonly [number, number];\n /** Model-space y range. Default [0, 1]. */\n yRange?: readonly [number, number];\n width: number;\n height: number;\n grid?: GridSettings | false | null;\n axes?: AxesSettings | false | null;\n /** Minimum allowed point count. User-initiated deletion is refused\n * while `value.length <= minPoints`. */\n minPoints?: number;\n /** Maximum allowed point count. User-initiated insertion is refused\n * while `value.length >= maxPoints`. */\n maxPoints?: number;\n /** How new points are added. Default `'click-empty'`. Set to `'never'`\n * to disable insertion entirely. */\n addPointMode?: 'click-empty' | 'never';\n /** Built-in undo/redo via keyboard when the component has focus.\n * Default `true`. See `CurveEditor.history` for details. */\n history?: boolean;\n /** Custom per-anchor renderer. See `CurveEditor.renderAnchor`. */\n renderAnchor?: (info: AnchorRenderProps) => ReactNode;\n /** Extra SVG content beneath the anchors. See `CurveEditor.decorations`. */\n decorations?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * 2D point plotter — a CurveEditor with the curve hidden. Anchors,\n * drag, shift+click delete, right-click delete, and click-empty insert\n * are inherited from CurveEditor verbatim, so the two components share\n * gesture semantics and stay in sync as CurveEditor evolves.\n *\n * Differences from CurveEditor: no curve `<path>` drawn, no fill, no\n * endpoint pinning, no interpolation, default `addPointMode` is\n * `'click-empty'` (CurveEditor defaults to `'click-curve'`, which\n * doesn't make sense without a curve to hit-test against).\n */\nexport function PointPlotter(props: PointPlotterProps) {\n const curveProps: CurveEditorProps = {\n ...props,\n addPointMode: props.addPointMode ?? 'click-empty',\n curve: false,\n fill: false,\n endpoints: 'free',\n };\n return <CurveEditor {...curveProps} />;\n}\n","import type { ReactNode, CSSProperties } from 'react';\nimport type { TrackCtx } from './components/Slider';\n\nexport type GradientTrackOpts = {\n gradient: (t: number) => string;\n samples?: number;\n activeRange?: [number, number];\n hatch?: {\n angleDeg?: number;\n stripe?: number;\n gap?: number;\n dim?: number;\n };\n};\n\nconst DEFAULT_HATCH = { angleDeg: 135, stripe: 2, gap: 4, dim: 75 };\n\nexport function paintGradientTrack(opts: GradientTrackOpts): (ctx: TrackCtx) => ReactNode {\n const { gradient, samples = 16, activeRange, hatch } = opts;\n\n return (ctx: TrackCtx) => {\n const stops: string[] = [];\n for (let i = 0; i <= samples; i++) {\n const t = i / samples;\n stops.push(`${gradient(t)} ${(t * 100).toFixed(1)}%`);\n }\n const baseGradient = `linear-gradient(to right, ${stops.join(', ')})`;\n\n const layers: string[] = [];\n if (activeRange) {\n const lowPct = ctx.valueToFraction(activeRange[0]) * 100;\n const highPct = ctx.valueToFraction(activeRange[1]) * 100;\n const h = { ...DEFAULT_HATCH, ...hatch };\n const stripe = `repeating-linear-gradient(${h.angleDeg}deg, transparent 0 ${h.stripe}px, var(--wzl-surface) ${h.stripe}px ${h.stripe + h.gap}px)`;\n const dimColor = `color-mix(in srgb, var(--wzl-surface) ${h.dim}%, transparent)`;\n const dimOverlay = `linear-gradient(${dimColor}, ${dimColor})`;\n\n if (lowPct > 0) {\n layers.push(`${dimOverlay} left 0 / ${lowPct.toFixed(2)}% 100% no-repeat`);\n layers.push(`${stripe} left 0 / ${lowPct.toFixed(2)}% 100% no-repeat`);\n }\n if (highPct < 100) {\n const wR = (100 - highPct).toFixed(2);\n layers.push(`${dimOverlay} right 0 / ${wR}% 100% no-repeat`);\n layers.push(`${stripe} right 0 / ${wR}% 100% no-repeat`);\n }\n }\n layers.push(baseGradient);\n\n const style: CSSProperties = {\n position: 'absolute',\n inset: 0,\n background: layers.join(', '),\n };\n return <div style={style} />;\n };\n}\n","// OKLCH math from Björn Ottosson: https://bottosson.github.io/posts/oklab/\nimport { oklchToOklab, oklabToSrgbU8, rgbaToHex } from '@weasel-js/core';\n\nexport type ChromaCurve = {\n lRange: [number, number];\n midL: number;\n cBot: number;\n cPeak: number;\n cTop: number;\n};\n\nexport type ChromaCurvePoint = { L: number; C: number };\n\nexport function oklchToHex(L: number, C: number, Hdeg: number): string {\n // Delegate to the kit's OKLab pipeline (kit angle unit is radians) →\n // gamut-clipped u8 sRGB → `#rrggbb`.\n const [l, a, b] = oklchToOklab(L, C, (Hdeg * Math.PI) / 180);\n const [r, g, bl] = oklabToSrgbU8(l, a, b);\n return rgbaToHex([r / 255, g / 255, bl / 255]);\n}\n\nexport function chromaAt(L: number, curve: ChromaCurve): number {\n const [lo, hi] = curve.lRange;\n if (L <= lo) return curve.cBot;\n if (L >= hi) return curve.cTop;\n if (L <= curve.midL) return curve.cBot + (curve.cPeak - curve.cBot) * ((L - lo) / (curve.midL - lo));\n return curve.cPeak + (curve.cTop - curve.cPeak) * ((L - curve.midL) / (hi - curve.midL));\n}\n"]}
|