@glyphjs/components 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/callout/Callout.tsx","../src/callout/index.ts","../src/chart/render.ts","../src/chart/ChartAccessibleTable.tsx","../src/chart/Chart.tsx","../src/chart/index.ts","../src/steps/Steps.tsx","../src/steps/index.ts","../src/table/Table.tsx","../src/table/index.ts","../src/tabs/Tabs.tsx","../src/tabs/index.ts","../src/timeline/Timeline.tsx","../src/timeline/index.ts","../src/graph/layout.ts","../src/graph/Graph.tsx","../src/graph/index.ts","../src/relation/Relation.tsx","../src/relation/index.ts","../src/kpi/Kpi.tsx","../src/kpi/index.ts","../src/accordion/Accordion.tsx","../src/accordion/index.ts","../src/comparison/Comparison.tsx","../src/comparison/index.ts","../src/codediff/diff.ts","../src/codediff/CodeDiff.tsx","../src/codediff/index.ts","../src/flowchart/Flowchart.tsx","../src/flowchart/index.ts","../src/filetree/FileTree.tsx","../src/filetree/index.ts","../src/sequence/helpers.tsx","../src/sequence/Sequence.tsx","../src/sequence/index.ts","../src/architecture/layout.ts","../src/architecture/icons.ts","../src/architecture/render.ts","../src/architecture/Architecture.tsx","../src/architecture/index.ts","../src/mindmap/MindMap.tsx","../src/mindmap/index.ts","../src/equation/Equation.tsx","../src/equation/index.ts","../src/quiz/styles.ts","../src/quiz/Quiz.tsx","../src/quiz/index.ts","../src/card/Card.tsx","../src/card/index.ts","../src/infographic/Infographic.tsx","../src/infographic/index.ts"],"names":["containerStyle","bodyStyle","titleStyle","jsxs","jsx","calloutSchema","d3","color","line","area","d32","useRef","useState","useEffect","useCallback","useMemo","chartSchema","stepsSchema","tableSchema","tabsSchema","scaleTime","scaleOrdinal","connectorStyle","timelineSchema","dagre","d33","d34","graphSchema","NODE_SEP","RANK_SEP","EDGE_SEP","LAYOUT_PADDING","d35","SR_ONLY_STYLE","relationSchema","labelStyle","kpiSchema","contentStyle","accordionSchema","comparisonSchema","i","j","codediffSchema","getThemeVar","ARROW_MARKER_ID","d36","flowchartSchema","filetreeSchema","sequenceSchema","NODE_WIDTH","d37","architectureSchema","mindmapSchema","katex","equationSchema","quizSchema","cardSchema","itemStyle","max","infographicSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface CalloutData {\n type: 'info' | 'warning' | 'error' | 'tip';\n title?: string;\n content: string;\n}\n\ntype CalloutType = CalloutData['type'];\n\n// ─── Icon map ──────────────────────────────────────────────────\n\nconst CALLOUT_ICONS: Record<CalloutType, string> = {\n info: '\\u2139\\uFE0F',\n warning: '\\u26A0\\uFE0F',\n error: '\\u274C',\n tip: '\\uD83D\\uDCA1',\n};\n\n// ─── Label map (for aria-label) ────────────────────────────────\n\nconst CALLOUT_LABELS: Record<CalloutType, string> = {\n info: 'Information',\n warning: 'Warning',\n error: 'Error',\n tip: 'Tip',\n};\n\n// ─── Component ─────────────────────────────────────────────────\n\n/**\n * Renders a styled callout box with variant-specific icon, optional title,\n * and content text. Styling is driven by `--glyph-callout-{type}-bg` and\n * `--glyph-callout-{type}-border` CSS custom properties so consumers can\n * re-theme via the Glyph theme system.\n */\nexport function Callout({ data }: GlyphComponentProps<CalloutData>): ReactElement {\n const { type, title, content } = data;\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: `var(--glyph-callout-${type}-bg)`,\n borderLeft: `4px solid var(--glyph-callout-${type}-border)`,\n borderRadius: 'var(--glyph-radius-md, 0.1875rem)',\n padding: 'var(--glyph-spacing-md, 1rem)',\n margin: 'var(--glyph-spacing-sm, 0.5rem) 0',\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n display: 'flex',\n gap: 'var(--glyph-spacing-sm, 0.5rem)',\n alignItems: 'flex-start',\n };\n\n const iconStyle: React.CSSProperties = {\n flexShrink: 0,\n fontSize: '1.25em',\n lineHeight: 1,\n };\n\n const bodyStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n };\n\n const titleStyle: React.CSSProperties = {\n fontWeight: 700,\n marginBottom: 'var(--glyph-spacing-xs, 0.25rem)',\n };\n\n return (\n <div role=\"note\" aria-label={CALLOUT_LABELS[type]} style={containerStyle}>\n <span style={iconStyle} aria-hidden=\"true\">\n {CALLOUT_ICONS[type]}\n </span>\n <div style={bodyStyle}>\n {title && <div style={titleStyle}>{title}</div>}\n <div>{content}</div>\n </div>\n </div>\n );\n}\n","import { calloutSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Callout } from './Callout.js';\nimport type { CalloutData } from './Callout.js';\n\nexport const calloutDefinition: GlyphComponentDefinition<CalloutData> = {\n type: 'ui:callout',\n schema: calloutSchema,\n render: Callout,\n};\n\nexport { Callout };\nexport type { CalloutData };\n","import * as d3 from 'd3';\n\n// ─── Types ─────────────────────────────────────────────────────\n\n/** Matches z.infer<typeof chartSchema> without importing zod. */\nexport interface ChartData {\n type: 'line' | 'bar' | 'area' | 'ohlc';\n series: { name: string; data: DataRecord[] }[];\n xAxis?: { key: string; label?: string };\n yAxis?: { key: string; label?: string };\n legend?: boolean;\n}\n\nexport type DataRecord = Record<string, number | string>;\n\n// ─── Constants ─────────────────────────────────────────────────\n\nexport const DEFAULT_WIDTH = 600;\nexport const DEFAULT_HEIGHT = 400;\nexport const MARGIN = { top: 20, right: 30, bottom: 50, left: 60 };\n\nexport const COLOR_SCHEME = [\n '#00d4aa', // cyan-green\n '#b44dff', // purple\n '#22c55e', // green\n '#e040fb', // magenta\n '#00e5ff', // teal\n '#84cc16', // lime\n '#f472b6', // rose\n '#fb923c', // orange\n '#818cf8', // indigo\n '#38bdf8', // sky\n];\n\n// ─── Helpers ───────────────────────────────────────────────────\n\nexport function getNumericValue(d: DataRecord, key: string): number {\n const v = d[key];\n return typeof v === 'number' ? v : Number(v);\n}\n\nexport function getAllNumericValues(series: ChartData['series'], key: string): number[] {\n return series.flatMap((s: ChartData['series'][number]) =>\n s.data.map((d: DataRecord) => getNumericValue(d, key)),\n );\n}\n\n// ─── Tooltip callback type ────────────────────────────────────\n\nexport type ShowTooltipFn = (event: MouseEvent, text: string) => void;\nexport type HideTooltipFn = () => void;\n\n// ─── Render helpers ───────────────────────────────────────────\n\ntype GSelection = d3.Selection<SVGGElement, unknown, null, undefined>;\ntype SVGSelection = d3.Selection<SVGSVGElement, unknown, null, undefined>;\n\nexport function renderAxes(\n g: GSelection,\n xScale: d3.ScaleLinear<number, number> | d3.ScaleBand<string>,\n yScale: d3.ScaleLinear<number, number>,\n xAxisConfig: ChartData['xAxis'],\n yAxisConfig: ChartData['yAxis'],\n innerWidth: number,\n innerHeight: number,\n): void {\n const xAxisG = g\n .append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(0,${String(innerHeight)})`);\n\n if ('bandwidth' in xScale) {\n xAxisG.call(\n d3.axisBottom(xScale as d3.ScaleBand<string>) as unknown as (\n sel: d3.Selection<SVGGElement, unknown, null, undefined>,\n ) => void,\n );\n } else {\n xAxisG.call(\n d3.axisBottom(xScale as d3.ScaleLinear<number, number>) as unknown as (\n sel: d3.Selection<SVGGElement, unknown, null, undefined>,\n ) => void,\n );\n }\n\n xAxisG\n .selectAll('text, line, path')\n .attr('fill', 'var(--glyph-text, #1a2035)')\n .attr('stroke', 'var(--glyph-grid, #1a2035)');\n\n if (xAxisConfig?.label) {\n g.append('text')\n .attr('class', 'x-label')\n .attr('x', innerWidth / 2)\n .attr('y', innerHeight + MARGIN.bottom - 6)\n .attr('text-anchor', 'middle')\n .attr('fill', 'var(--glyph-text, #1a2035)')\n .attr('font-size', '12px')\n .text(xAxisConfig.label);\n }\n\n const yAxisG = g.append('g').attr('class', 'y-axis');\n yAxisG.call(\n d3.axisLeft(yScale) as unknown as (\n sel: d3.Selection<SVGGElement, unknown, null, undefined>,\n ) => void,\n );\n\n yAxisG\n .selectAll('text, line, path')\n .attr('fill', 'var(--glyph-text, #1a2035)')\n .attr('stroke', 'var(--glyph-grid, #1a2035)');\n\n if (yAxisConfig?.label) {\n g.append('text')\n .attr('class', 'y-label')\n .attr('transform', 'rotate(-90)')\n .attr('x', -innerHeight / 2)\n .attr('y', -MARGIN.left + 14)\n .attr('text-anchor', 'middle')\n .attr('fill', 'var(--glyph-text, #1a2035)')\n .attr('font-size', '12px')\n .text(yAxisConfig.label);\n }\n}\n\nexport function renderGridLines(\n g: GSelection,\n yScale: d3.ScaleLinear<number, number>,\n innerWidth: number,\n): void {\n g.append('g')\n .attr('class', 'grid')\n .selectAll<SVGLineElement, number>('line')\n .data(yScale.ticks())\n .join('line')\n .attr('x1', 0)\n .attr('x2', innerWidth)\n .attr('y1', (d: number) => yScale(d))\n .attr('y2', (d: number) => yScale(d))\n .attr('stroke', 'var(--glyph-grid, #1a2035)')\n .attr('stroke-opacity', 0.5)\n .attr('stroke-dasharray', '2,2');\n}\n\nexport function renderLineSeries(\n g: GSelection,\n seriesData: DataRecord[],\n xScalePoint: (d: DataRecord) => number,\n yScale: d3.ScaleLinear<number, number>,\n yKey: string,\n xKey: string,\n color: string,\n index: number,\n seriesName: string,\n showTooltip: ShowTooltipFn,\n hideTooltip: HideTooltipFn,\n): void {\n const line = d3\n .line<DataRecord>()\n .x((d: DataRecord) => xScalePoint(d))\n .y((d: DataRecord) => yScale(getNumericValue(d, yKey)));\n\n g.append('path')\n .datum(seriesData)\n .attr('fill', 'none')\n .attr('stroke', color)\n .attr('stroke-width', 2)\n .attr('d', line);\n\n // Data points with tooltip\n g.selectAll<SVGCircleElement, DataRecord>(`.dot-${String(index)}`)\n .data(seriesData)\n .join('circle')\n .attr('class', `dot-${String(index)}`)\n .attr('cx', (d: DataRecord) => xScalePoint(d))\n .attr('cy', (d: DataRecord) => yScale(getNumericValue(d, yKey)))\n .attr('r', 3.5)\n .attr('fill', color)\n .attr('cursor', 'pointer')\n .on('mouseenter', function (this: SVGCircleElement, event: MouseEvent, d: DataRecord) {\n showTooltip(event, `${seriesName}: ${String(d[xKey] ?? '')}, ${String(d[yKey] ?? '')}`);\n })\n .on('mouseleave', () => hideTooltip());\n}\n\nexport function renderAreaSeries(\n g: GSelection,\n seriesData: DataRecord[],\n xScalePoint: (d: DataRecord) => number,\n yScale: d3.ScaleLinear<number, number>,\n yKey: string,\n xKey: string,\n innerHeight: number,\n color: string,\n index: number,\n seriesName: string,\n showTooltip: ShowTooltipFn,\n hideTooltip: HideTooltipFn,\n): void {\n const area = d3\n .area<DataRecord>()\n .x((d: DataRecord) => xScalePoint(d))\n .y0(innerHeight)\n .y1((d: DataRecord) => yScale(getNumericValue(d, yKey)));\n\n g.append('path')\n .datum(seriesData)\n .attr('fill', color)\n .attr('fill-opacity', 0.3)\n .attr('stroke', color)\n .attr('stroke-width', 1.5)\n .attr('d', area);\n\n g.selectAll<SVGCircleElement, DataRecord>(`.dot-${String(index)}`)\n .data(seriesData)\n .join('circle')\n .attr('class', `dot-${String(index)}`)\n .attr('cx', (d: DataRecord) => xScalePoint(d))\n .attr('cy', (d: DataRecord) => yScale(getNumericValue(d, yKey)))\n .attr('r', 3)\n .attr('fill', color)\n .attr('cursor', 'pointer')\n .on('mouseenter', function (this: SVGCircleElement, event: MouseEvent, d: DataRecord) {\n showTooltip(event, `${seriesName}: ${String(d[xKey] ?? '')}, ${String(d[yKey] ?? '')}`);\n })\n .on('mouseleave', () => hideTooltip());\n}\n\nexport function renderBarSeries(\n g: GSelection,\n seriesData: DataRecord[],\n xScale: d3.ScaleLinear<number, number> | d3.ScaleBand<string>,\n yScale: d3.ScaleLinear<number, number>,\n yKey: string,\n xKey: string,\n color: string,\n index: number,\n seriesCount: number,\n innerHeight: number,\n seriesName: string,\n showTooltip: ShowTooltipFn,\n hideTooltip: HideTooltipFn,\n): void {\n if (!('bandwidth' in xScale)) return;\n const band = xScale as d3.ScaleBand<string>;\n const barWidth = band.bandwidth() / seriesCount;\n\n g.selectAll<SVGRectElement, DataRecord>(`.bar-${String(index)}`)\n .data(seriesData)\n .join('rect')\n .attr('class', `bar-${String(index)}`)\n .attr('x', (d: DataRecord) => (band(String(d[xKey] ?? '')) ?? 0) + barWidth * index)\n .attr('y', (d: DataRecord) => yScale(getNumericValue(d, yKey)))\n .attr('width', barWidth - 1)\n .attr('height', (d: DataRecord) => innerHeight - yScale(getNumericValue(d, yKey)))\n .attr('fill', color)\n .attr('cursor', 'pointer')\n .on('mouseenter', function (this: SVGRectElement, event: MouseEvent, d: DataRecord) {\n showTooltip(event, `${seriesName}: ${String(d[xKey] ?? '')}, ${String(d[yKey] ?? '')}`);\n })\n .on('mouseleave', () => hideTooltip());\n}\n\nexport function renderOHLCSeries(\n g: GSelection,\n seriesData: DataRecord[],\n xScale: d3.ScaleLinear<number, number> | d3.ScaleBand<string>,\n xScalePoint: (d: DataRecord) => number,\n yScale: d3.ScaleLinear<number, number>,\n innerWidth: number,\n seriesName: string,\n showTooltip: ShowTooltipFn,\n hideTooltip: HideTooltipFn,\n): void {\n // Candlestick chart: expects open, high, low, close keys\n const candleWidth =\n 'bandwidth' in xScale\n ? (xScale as d3.ScaleBand<string>).bandwidth() * 0.6\n : Math.max(4, innerWidth / (seriesData.length * 2));\n\n seriesData.forEach((d: DataRecord) => {\n const open = getNumericValue(d, 'open');\n const close = getNumericValue(d, 'close');\n const high = getNumericValue(d, 'high');\n const low = getNumericValue(d, 'low');\n const cx = xScalePoint(d);\n const isBullish = close >= open;\n const candleColor = isBullish\n ? 'var(--glyph-chart-bullish, #22c55e)'\n : 'var(--glyph-chart-bearish, #f87171)';\n\n // High-low wick\n g.append('line')\n .attr('x1', cx)\n .attr('x2', cx)\n .attr('y1', yScale(high))\n .attr('y2', yScale(low))\n .attr('stroke', candleColor)\n .attr('stroke-width', 1);\n\n // Open-close body\n const bodyTop = yScale(Math.max(open, close));\n const bodyBottom = yScale(Math.min(open, close));\n const bodyHeight = Math.max(1, bodyBottom - bodyTop);\n\n g.append('rect')\n .attr('x', cx - candleWidth / 2)\n .attr('y', bodyTop)\n .attr('width', candleWidth)\n .attr('height', bodyHeight)\n .attr('fill', candleColor)\n .attr('stroke', candleColor)\n .attr('cursor', 'pointer')\n .on('mouseenter', (event: MouseEvent) => {\n showTooltip(\n event,\n `${seriesName}: O=${String(open)} H=${String(high)} L=${String(low)} C=${String(close)}`,\n );\n })\n .on('mouseleave', () => hideTooltip());\n });\n}\n\nexport function renderLegend(\n sel: SVGSelection,\n series: ChartData['series'],\n marginLeft: number,\n marginTop: number,\n fontSize = '12px',\n): void {\n const legendG = sel\n .append('g')\n .attr('transform', `translate(${String(marginLeft + 8)},${String(marginTop)})`);\n\n series.forEach((s: ChartData['series'][number], i: number) => {\n const color = COLOR_SCHEME[i % COLOR_SCHEME.length] ?? 'var(--glyph-text, #1a2035)';\n const row = legendG.append('g').attr('transform', `translate(0,${String(i * 20)})`);\n\n row.append('rect').attr('width', 14).attr('height', 14).attr('fill', color).attr('rx', 2);\n\n row\n .append('text')\n .attr('x', 20)\n .attr('y', 11)\n .attr('fill', 'var(--glyph-text, #1a2035)')\n .attr('font-size', fontSize)\n .text(s.name);\n });\n}\n","import type { ReactElement } from 'react';\nimport type { ChartData, DataRecord } from './render.js';\n\ninterface ChartAccessibleTableProps {\n type: ChartData['type'];\n series: ChartData['series'];\n xKey: string;\n yKey: string;\n xLabel?: string;\n yLabel?: string;\n}\n\nexport function ChartAccessibleTable({\n type,\n series,\n xKey,\n yKey,\n xLabel,\n yLabel,\n}: ChartAccessibleTableProps): ReactElement {\n return (\n <table\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n >\n <caption>{type} chart data</caption>\n {series.map((s: ChartData['series'][number], si: number) => (\n <tbody key={si}>\n <tr>\n <th colSpan={2}>{s.name}</th>\n </tr>\n <tr>\n <th>{xLabel ?? xKey}</th>\n <th>{yLabel ?? yKey}</th>\n </tr>\n {s.data.map((d: DataRecord, di: number) => (\n <tr key={di}>\n <td>{String(d[xKey] ?? '')}</td>\n <td>\n {type === 'ohlc'\n ? `O=${String(d['open'] ?? '')} H=${String(d['high'] ?? '')} L=${String(d['low'] ?? '')} C=${String(d['close'] ?? '')}`\n : String(d[yKey] ?? '')}\n </td>\n </tr>\n ))}\n </tbody>\n ))}\n </table>\n );\n}\n","import { useRef, useEffect, useState, useCallback, useMemo } from 'react';\nimport type { ReactElement } from 'react';\nimport * as d3 from 'd3';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n MARGIN,\n COLOR_SCHEME,\n getNumericValue,\n getAllNumericValues,\n renderAxes,\n renderGridLines,\n renderLineSeries,\n renderAreaSeries,\n renderBarSeries,\n renderOHLCSeries,\n renderLegend,\n} from './render.js';\nimport type { ChartData, DataRecord } from './render.js';\nimport { ChartAccessibleTable } from './ChartAccessibleTable.js';\n\nexport type { ChartData } from './render.js';\n\n// ─── Chart computation helpers ──────────────────────────────────\n\ninterface ChartScales {\n xScale: d3.ScaleLinear<number, number> | d3.ScaleBand<string>;\n xScalePoint: (d: DataRecord) => number;\n yScale: d3.ScaleLinear<number, number>;\n innerWidth: number;\n innerHeight: number;\n}\n\nfunction computeScales(\n width: number,\n height: number,\n type: ChartData['type'],\n series: ChartData['series'],\n xKey: string,\n yKey: string,\n margin: { top: number; right: number; bottom: number; left: number },\n): ChartScales {\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const firstRecord = series[0]?.data[0];\n const xIsNumeric = firstRecord != null && typeof firstRecord[xKey] === 'number';\n let xScale: d3.ScaleLinear<number, number> | d3.ScaleBand<string>;\n let xScalePoint: (d: DataRecord) => number;\n\n if (type === 'bar' || !xIsNumeric) {\n const allLabels: string[] = series.flatMap((s: ChartData['series'][number]) =>\n s.data.map((d: DataRecord) => String(d[xKey] ?? '')),\n );\n const uniqueLabels = [...new Set<string>(allLabels)];\n const band = d3.scaleBand<string>().domain(uniqueLabels).range([0, innerWidth]).padding(0.2);\n xScale = band;\n xScalePoint = (d: DataRecord) => (band(String(d[xKey] ?? '')) ?? 0) + band.bandwidth() / 2;\n } else {\n const allX = getAllNumericValues(series, xKey);\n const linear = d3\n .scaleLinear()\n .domain(d3.extent(allX) as [number, number])\n .nice()\n .range([0, innerWidth]);\n xScale = linear;\n xScalePoint = (d: DataRecord) => linear(getNumericValue(d, xKey));\n }\n\n let yMin: number;\n let yMax: number;\n if (type === 'ohlc') {\n const lows = getAllNumericValues(series, 'low');\n const highs = getAllNumericValues(series, 'high');\n yMin = d3.min(lows) ?? 0;\n yMax = d3.max(highs) ?? 0;\n } else {\n const allY = getAllNumericValues(series, yKey);\n yMin = d3.min(allY) ?? 0;\n yMax = d3.max(allY) ?? 0;\n }\n\n const yScale = d3.scaleLinear().domain([yMin, yMax]).nice().range([innerHeight, 0]);\n\n return { xScale, xScalePoint, yScale, innerWidth, innerHeight };\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\n/**\n * Renders a D3-powered chart supporting line, bar, area, and OHLC types.\n * Uses CSS variables for theming and includes accessibility features.\n */\nexport function Chart({\n data,\n container: containerCtx,\n}: GlyphComponentProps<ChartData>): ReactElement {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(DEFAULT_WIDTH);\n\n const { type, series, xAxis, yAxis, legend } = data;\n const xKey = xAxis?.key ?? 'x';\n const yKey = yAxis?.key ?? 'y';\n const height = DEFAULT_HEIGHT;\n const isCompact = containerCtx.tier === 'compact';\n const margin = isCompact\n ? {\n top: Math.round(MARGIN.top * 0.7),\n right: Math.round(MARGIN.right * 0.7),\n bottom: Math.round(MARGIN.bottom * 0.7),\n left: Math.round(MARGIN.left * 0.7),\n }\n : MARGIN;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const cr = entry.contentRect;\n if (cr.width > 0) {\n setWidth(cr.width);\n }\n }\n });\n\n observer.observe(container);\n return () => observer.disconnect();\n }, []);\n\n const showTooltip = useCallback((event: MouseEvent, text: string) => {\n const tip = tooltipRef.current;\n if (!tip) return;\n tip.textContent = text;\n tip.style.display = 'block';\n tip.style.left = `${String(event.offsetX + 12)}px`;\n tip.style.top = `${String(event.offsetY - 12)}px`;\n }, []);\n\n const hideTooltip = useCallback(() => {\n const tip = tooltipRef.current;\n if (!tip) return;\n tip.style.display = 'none';\n }, []);\n\n const scales = useMemo(\n () => computeScales(width, height, type, series, xKey, yKey, margin),\n [width, height, type, series, xKey, yKey, margin],\n );\n\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg || series.length === 0) return;\n\n const sel = d3.select(svg);\n sel.selectAll('*').remove();\n\n const { xScale, xScalePoint, yScale, innerWidth, innerHeight } = scales;\n\n const g = sel\n .append('g')\n .attr('transform', `translate(${String(margin.left)},${String(margin.top)})`);\n\n renderAxes(g, xScale, yScale, xAxis, yAxis, innerWidth, innerHeight);\n renderGridLines(g, yScale, innerWidth);\n series.forEach((s: ChartData['series'][number], i: number) => {\n const color = COLOR_SCHEME[i % COLOR_SCHEME.length] ?? '#333';\n switch (type) {\n case 'line':\n renderLineSeries(\n g,\n s.data,\n xScalePoint,\n yScale,\n yKey,\n xKey,\n color,\n i,\n s.name,\n showTooltip,\n hideTooltip,\n );\n break;\n case 'area':\n renderAreaSeries(\n g,\n s.data,\n xScalePoint,\n yScale,\n yKey,\n xKey,\n innerHeight,\n color,\n i,\n s.name,\n showTooltip,\n hideTooltip,\n );\n break;\n case 'bar':\n renderBarSeries(\n g,\n s.data,\n xScale,\n yScale,\n yKey,\n xKey,\n color,\n i,\n series.length,\n innerHeight,\n s.name,\n showTooltip,\n hideTooltip,\n );\n break;\n case 'ohlc':\n renderOHLCSeries(\n g,\n s.data,\n xScale,\n xScalePoint,\n yScale,\n innerWidth,\n s.name,\n showTooltip,\n hideTooltip,\n );\n break;\n }\n });\n\n if (legend) {\n renderLegend(sel, series, margin.left, margin.top, isCompact ? '10px' : undefined);\n }\n }, [\n scales,\n type,\n series,\n xKey,\n yKey,\n xAxis,\n yAxis,\n legend,\n margin,\n isCompact,\n showTooltip,\n hideTooltip,\n ]);\n\n const ariaLabel = `${type} chart with ${String(series.length)} series: ${series.map((s: ChartData['series'][number]) => s.name).join(', ')}`;\n\n return (\n <div\n ref={containerRef}\n style={{\n position: 'relative',\n width: '100%',\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n }}\n >\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n width={width}\n height={height}\n viewBox={`0 0 ${String(width)} ${String(height)}`}\n style={{ display: 'block', maxWidth: '100%', height: 'auto' }}\n />\n <div\n ref={tooltipRef}\n role=\"tooltip\"\n aria-live=\"polite\"\n style={{\n display: 'none',\n position: 'absolute',\n pointerEvents: 'none',\n backgroundColor: 'var(--glyph-tooltip-bg, rgba(0,0,0,0.8))',\n color: 'var(--glyph-tooltip-text, #d4dae3)',\n padding: '4px 8px',\n borderRadius: '3px',\n fontSize: '12px',\n whiteSpace: 'nowrap',\n zIndex: 10,\n }}\n />\n <ChartAccessibleTable\n type={type}\n series={series}\n xKey={xKey}\n yKey={yKey}\n xLabel={xAxis?.label}\n yLabel={yAxis?.label}\n />\n </div>\n );\n}\n","import type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { chartSchema } from '@glyphjs/schemas';\nimport { Chart } from './Chart.js';\n\nexport const chartDefinition: GlyphComponentDefinition = {\n type: 'ui:chart',\n schema: chartSchema,\n render: Chart as GlyphComponentDefinition['render'],\n};\n\nexport { Chart };\nexport type { ChartData } from './Chart.js';\n","import type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface StepItem {\n title: string;\n status?: 'pending' | 'active' | 'completed';\n content: string;\n}\n\nexport interface StepsData {\n steps: StepItem[];\n}\n\ntype StepStatus = NonNullable<StepItem['status']>;\n\n// ─── Status labels (for aria-label) ───────────────────────────\n\nconst STATUS_LABELS: Record<StepStatus, string> = {\n pending: 'Pending',\n active: 'Active',\n completed: 'Completed',\n};\n\n// ─── Component ────────────────────────────────────────────────\n\n/**\n * Renders a vertical list of steps with status indicators.\n * Each step displays a circle (pending), highlighted circle (active),\n * or a checkmark (completed).\n *\n * Theming is driven by CSS custom properties:\n * - `--glyph-steps-pending-color`\n * - `--glyph-steps-active-color`\n * - `--glyph-steps-completed-color`\n * - `--glyph-steps-connector-color`\n */\nexport function Steps({ data }: GlyphComponentProps<StepsData>): ReactElement {\n const { steps } = data;\n\n const listStyle: React.CSSProperties = {\n listStyle: 'none',\n padding: 0,\n margin: 'var(--glyph-spacing-sm, 0.5rem) 0',\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n };\n\n return (\n <ol role=\"list\" style={listStyle}>\n {steps.map((step, index) => {\n const status: StepStatus = step.status ?? 'pending';\n const isLast = index === steps.length - 1;\n\n return (\n <li\n key={index}\n aria-label={`Step ${String(index + 1)}: ${step.title} — ${STATUS_LABELS[status]}`}\n {...(status === 'active' ? { 'aria-current': 'step' as const } : {})}\n style={itemStyle(isLast)}\n >\n {/* Connector line (drawn behind the indicator) */}\n {!isLast && <span aria-hidden=\"true\" style={connectorStyle(status)} />}\n\n {/* Status indicator circle / checkmark */}\n <span aria-hidden=\"true\" style={indicatorStyle(status)}>\n {status === 'completed' ? '\\u2713' : ''}\n </span>\n\n {/* Text body */}\n <div style={bodyStyle}>\n <div style={titleStyle(status)}>{step.title}</div>\n <div style={contentStyle(status)}>{step.content}</div>\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n\n// ─── Style helpers ───────────────────────────────────────────\n\nconst INDICATOR_SIZE = '1.5rem';\nconst CONNECTOR_WIDTH = '2px';\n\nfunction colorForStatus(status: StepStatus): string {\n switch (status) {\n case 'pending':\n return 'var(--glyph-steps-pending-color, #7a8599)';\n case 'active':\n return 'var(--glyph-steps-active-color, #00d4aa)';\n case 'completed':\n return 'var(--glyph-steps-completed-color, #22c55e)';\n }\n}\n\nfunction itemStyle(isLast: boolean): React.CSSProperties {\n return {\n position: 'relative',\n display: 'flex',\n gap: 'var(--glyph-spacing-sm, 0.75rem)',\n alignItems: 'flex-start',\n paddingBottom: isLast ? 0 : 'var(--glyph-spacing-md, 1.25rem)',\n };\n}\n\nfunction connectorStyle(status: StepStatus): React.CSSProperties {\n return {\n position: 'absolute',\n left: `calc(${INDICATOR_SIZE} / 2 - ${CONNECTOR_WIDTH} / 2)`,\n top: INDICATOR_SIZE,\n bottom: 0,\n width: CONNECTOR_WIDTH,\n backgroundColor:\n status === 'completed'\n ? 'var(--glyph-steps-completed-color, #22c55e)'\n : 'var(--glyph-steps-connector-color, #d0d8e4)',\n };\n}\n\nfunction indicatorStyle(status: StepStatus): React.CSSProperties {\n const color = colorForStatus(status);\n\n return {\n flexShrink: 0,\n width: INDICATOR_SIZE,\n height: INDICATOR_SIZE,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.85rem',\n fontWeight: 700,\n lineHeight: 1,\n color: status === 'completed' ? '#fff' : color,\n backgroundColor: status === 'completed' ? color : 'transparent',\n border: status === 'completed' ? 'none' : `${CONNECTOR_WIDTH} solid ${color}`,\n boxSizing: 'border-box',\n };\n}\n\nconst bodyStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n paddingTop: '0.1rem',\n};\n\nfunction titleStyle(status: StepStatus): React.CSSProperties {\n return {\n fontWeight: 600,\n color:\n status === 'pending'\n ? 'var(--glyph-steps-pending-color, #7a8599)'\n : 'var(--glyph-text, #1a2035)',\n };\n}\n\nfunction contentStyle(status: StepStatus): React.CSSProperties {\n return {\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n fontSize: '0.9em',\n color:\n status === 'pending'\n ? 'var(--glyph-steps-pending-color, #7a8599)'\n : 'var(--glyph-text-muted, #7a8599)',\n };\n}\n","import { stepsSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Steps } from './Steps.js';\nimport type { StepsData } from './Steps.js';\n\nexport const stepsDefinition: GlyphComponentDefinition<StepsData> = {\n type: 'ui:steps',\n schema: stepsSchema,\n render: Steps,\n};\n\nexport { Steps };\nexport type { StepsData };\n","import type { ReactElement } from 'react';\nimport { useMemo, useState } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface TableColumn {\n key: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n type?: 'string' | 'number' | 'date' | 'boolean';\n}\n\nexport interface TableAggregation {\n column: string;\n function: 'sum' | 'avg' | 'count' | 'min' | 'max';\n}\n\nexport interface TableData {\n columns: TableColumn[];\n rows: Record<string, unknown>[];\n aggregation?: TableAggregation[];\n}\n\n// ─── Helpers ───────────────────────────────────────────────────\n\ntype SortDirection = 'ascending' | 'descending' | 'none';\n\ninterface SortState {\n column: string;\n direction: SortDirection;\n}\n\nfunction nextDirection(current: SortDirection): SortDirection {\n if (current === 'none') return 'ascending';\n if (current === 'ascending') return 'descending';\n return 'none';\n}\n\nfunction computeAggregation(\n rows: Record<string, unknown>[],\n column: string,\n fn: 'sum' | 'avg' | 'count' | 'min' | 'max',\n): string {\n if (fn === 'count') {\n return String(rows.length);\n }\n\n const values = rows\n .map((r) => r[column])\n .filter((v): v is number => typeof v === 'number' && !Number.isNaN(v));\n\n if (values.length === 0) return '';\n\n switch (fn) {\n case 'sum':\n return String(values.reduce((a, b) => a + b, 0));\n case 'avg':\n return String(values.reduce((a, b) => a + b, 0) / values.length);\n case 'min':\n return String(Math.min(...values));\n case 'max':\n return String(Math.max(...values));\n }\n}\n\nfunction sortIndicator(direction: SortDirection): string {\n if (direction === 'ascending') return ' \\u25B2';\n if (direction === 'descending') return ' \\u25BC';\n return '';\n}\n\n// ─── Sub-components ─────────────────────────────────────────────\n\nfunction TableAggregationFooter({\n columns,\n aggMap,\n rows,\n}: {\n columns: TableColumn[];\n aggMap: Map<string, { fn: 'sum' | 'avg' | 'count' | 'min' | 'max' }>;\n rows: Record<string, unknown>[];\n}): ReactElement {\n return (\n <tfoot>\n <tr>\n {columns.map((col) => {\n const agg = aggMap.get(col.key);\n return (\n <td\n key={col.key}\n style={{\n padding: 'var(--glyph-table-cell-padding, 8px 12px)',\n borderTop: '2px solid var(--glyph-table-border, #d0d8e4)',\n fontWeight: 'bold',\n background: 'var(--glyph-table-footer-bg, #e8ecf3)',\n color: 'var(--glyph-table-footer-color, inherit)',\n }}\n >\n {agg ? computeAggregation(rows, col.key, agg.fn) : ''}\n </td>\n );\n })}\n </tr>\n </tfoot>\n );\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\n/**\n * Renders an interactive data table with optional sorting, filtering,\n * and aggregation. Styling is driven by `--glyph-table-*` CSS custom\n * properties so consumers can re-theme via the Glyph theme system.\n */\nexport function Table({ data, container }: GlyphComponentProps<TableData>): ReactElement {\n const { columns, rows, aggregation } = data;\n\n const [sort, setSort] = useState<SortState>({ column: '', direction: 'none' });\n const [filters, setFilters] = useState<Record<string, string>>({});\n\n const filteredRows = useMemo(() => {\n return rows.filter((row) => {\n return columns.every((col) => {\n if (!col.filterable) return true;\n const filterValue = filters[col.key];\n if (!filterValue) return true;\n const cellValue = String(row[col.key] ?? '').toLowerCase();\n return cellValue.includes(filterValue.toLowerCase());\n });\n });\n }, [rows, columns, filters]);\n\n const sortedRows = useMemo(() => {\n if (sort.direction === 'none' || !sort.column) return filteredRows;\n\n return [...filteredRows].sort((a, b) => {\n const aVal = a[sort.column];\n const bVal = b[sort.column];\n\n // Handle nullish values -- push them to the end\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n let cmp = 0;\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n cmp = aVal - bVal;\n } else {\n cmp = String(aVal).localeCompare(String(bVal));\n }\n\n return sort.direction === 'ascending' ? cmp : -cmp;\n });\n }, [filteredRows, sort]);\n\n const handleSort = (columnKey: string) => {\n setSort((prev) => {\n if (prev.column === columnKey) {\n return { column: columnKey, direction: nextDirection(prev.direction) };\n }\n return { column: columnKey, direction: 'ascending' };\n });\n };\n\n const handleHeaderKeyDown = (e: React.KeyboardEvent, columnKey: string) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleSort(columnKey);\n }\n };\n\n const handleFilterChange = (columnKey: string, value: string) => {\n setFilters((prev) => ({ ...prev, [columnKey]: value }));\n };\n\n const hasFilters = columns.some((c) => c.filterable);\n const aggMap = useMemo(() => {\n if (!aggregation) return null;\n const map = new Map<string, { fn: 'sum' | 'avg' | 'count' | 'min' | 'max' }>();\n for (const agg of aggregation) {\n map.set(agg.column, { fn: agg.function });\n }\n return map;\n }, [aggregation]);\n\n const isCompact = container.tier === 'compact';\n\n const tableEl = (\n <table\n role=\"grid\"\n style={{\n width: '100%',\n borderCollapse: 'collapse',\n border: '1px solid var(--glyph-table-border, #d0d8e4)',\n fontFamily: 'var(--glyph-font-body, inherit)',\n fontSize: isCompact ? '0.8125rem' : 'var(--glyph-table-font-size, 0.9rem)',\n }}\n >\n <thead>\n <tr>\n {columns.map((col) => {\n const isSorted = sort.column === col.key;\n const direction = isSorted ? sort.direction : 'none';\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={col.sortable ? direction : undefined}\n tabIndex={col.sortable ? 0 : undefined}\n role={col.sortable ? 'columnheader' : undefined}\n onClick={col.sortable ? () => handleSort(col.key) : undefined}\n onKeyDown={col.sortable ? (e) => handleHeaderKeyDown(e, col.key) : undefined}\n style={{\n padding: 'var(--glyph-table-cell-padding, 8px 12px)',\n textAlign: 'left',\n borderBottom: '2px solid var(--glyph-table-border, #d0d8e4)',\n background: 'var(--glyph-table-header-bg, #e8ecf3)',\n color: 'var(--glyph-table-header-color, inherit)',\n cursor: col.sortable ? 'pointer' : 'default',\n userSelect: col.sortable ? 'none' : undefined,\n whiteSpace: 'nowrap',\n }}\n >\n {col.label}\n {col.sortable ? sortIndicator(direction) : ''}\n </th>\n );\n })}\n </tr>\n {hasFilters && (\n <tr>\n {columns.map((col) => (\n <th\n key={`filter-${col.key}`}\n scope=\"col\"\n style={{ padding: '4px 8px', fontWeight: 'normal' }}\n >\n {col.filterable ? (\n <input\n type=\"text\"\n aria-label={`Filter ${col.label}`}\n placeholder={`Filter ${col.label}...`}\n value={filters[col.key] ?? ''}\n onChange={(e) => handleFilterChange(col.key, e.target.value)}\n style={{\n width: '100%',\n padding: '4px 6px',\n border: '1px solid var(--glyph-table-border, #d0d8e4)',\n borderRadius: '3px',\n fontSize: 'inherit',\n boxSizing: 'border-box',\n background: 'var(--glyph-surface, #e8ecf3)',\n color: 'var(--glyph-text, inherit)',\n }}\n />\n ) : (\n <span\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n }}\n >\n {`No filter for ${col.label}`}\n </span>\n )}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {sortedRows.map((row, rowIdx) => (\n <tr\n key={rowIdx}\n style={{\n background:\n rowIdx % 2 === 0\n ? 'var(--glyph-table-row-bg, transparent)'\n : 'var(--glyph-table-row-alt-bg, #f4f6fa)',\n }}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n style={{\n padding: 'var(--glyph-table-cell-padding, 8px 12px)',\n borderBottom: '1px solid var(--glyph-table-border, #d0d8e4)',\n color: 'var(--glyph-table-cell-color, inherit)',\n }}\n >\n {String(row[col.key] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n {aggMap && aggMap.size > 0 && (\n <TableAggregationFooter columns={columns} aggMap={aggMap} rows={sortedRows} />\n )}\n </table>\n );\n\n // Container-adaptive: wrap in scroll container at compact tier (RFC-015)\n if (isCompact) {\n return <div style={{ overflowX: 'auto' }}>{tableEl}</div>;\n }\n\n return tableEl;\n}\n","import { tableSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Table } from './Table.js';\nimport type { TableData } from './Table.js';\n\nexport const tableDefinition: GlyphComponentDefinition<TableData> = {\n type: 'ui:table',\n schema: tableSchema,\n render: Table,\n};\n\nexport { Table };\nexport type { TableData };\n","import { useState, useRef, useCallback } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n/** Shape of the validated `data` for a `ui:tabs` block. */\nexport interface TabsData {\n tabs: { label: string; content: string }[];\n}\n\n/**\n * `ui:tabs` component.\n *\n * Renders a tabbed interface following the WAI-ARIA Tabs pattern.\n * - Tab navigation via click.\n * - Keyboard: ArrowLeft / ArrowRight to cycle tabs, Home / End for first / last.\n * - ARIA roles: tablist, tab, tabpanel with proper aria-selected, aria-controls,\n * and aria-labelledby attributes.\n */\nexport function Tabs({ data, block }: GlyphComponentProps<TabsData>) {\n const [activeIndex, setActiveIndex] = useState(0);\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const tabs = data.tabs;\n const baseId = `glyph-tabs-${block.id}`;\n\n const focusTab = useCallback(\n (index: number) => {\n const clampedIndex = Math.max(0, Math.min(index, tabs.length - 1));\n setActiveIndex(clampedIndex);\n tabRefs.current[clampedIndex]?.focus();\n },\n [tabs.length],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.key) {\n case 'ArrowRight': {\n e.preventDefault();\n const next = (activeIndex + 1) % tabs.length;\n focusTab(next);\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n const prev = (activeIndex - 1 + tabs.length) % tabs.length;\n focusTab(prev);\n break;\n }\n case 'Home': {\n e.preventDefault();\n focusTab(0);\n break;\n }\n case 'End': {\n e.preventDefault();\n focusTab(tabs.length - 1);\n break;\n }\n }\n },\n [activeIndex, focusTab, tabs.length],\n );\n\n return (\n <div\n style={{\n fontFamily: 'var(--glyph-font-body, \"Inter\", system-ui, sans-serif)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-lg, 0.25rem)',\n overflow: 'hidden',\n }}\n >\n {/* Tab list */}\n <div\n role=\"tablist\"\n aria-label=\"Tabs\"\n style={{\n display: 'flex',\n borderBottom: '1px solid var(--glyph-border, #d0d8e4)',\n backgroundColor: 'var(--glyph-surface, #e8ecf3)',\n margin: 0,\n padding: 0,\n }}\n >\n {tabs.map((tab, index) => {\n const isActive = index === activeIndex;\n const tabId = `${baseId}-tab-${String(index)}`;\n const panelId = `${baseId}-panel-${String(index)}`;\n\n return (\n <button\n key={tabId}\n id={tabId}\n ref={(el) => {\n tabRefs.current[index] = el;\n }}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n onClick={() => setActiveIndex(index)}\n onKeyDown={handleKeyDown}\n style={{\n padding: '10px 18px',\n border: 'none',\n borderBottom: isActive\n ? '2px solid var(--glyph-accent, #00d4aa)'\n : '2px solid transparent',\n background: isActive ? 'var(--glyph-surface-raised, #f4f6fa)' : 'transparent',\n color: isActive\n ? 'var(--glyph-heading, #0a0e1a)'\n : 'var(--glyph-text-muted, #7a8599)',\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.9rem',\n fontWeight: isActive ? 600 : 400,\n transition: 'color 0.15s, border-color 0.15s, background 0.15s',\n outline: 'revert',\n outlineOffset: '2px',\n }}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n\n {/* Tab panels */}\n {tabs.map((tab, index) => {\n const isActive = index === activeIndex;\n const tabId = `${baseId}-tab-${String(index)}`;\n const panelId = `${baseId}-panel-${String(index)}`;\n\n return (\n <div\n key={panelId}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n aria-live=\"polite\"\n hidden={!isActive}\n tabIndex={0}\n style={{\n padding: '16px',\n backgroundColor: 'var(--glyph-surface-raised, #f4f6fa)',\n color: 'var(--glyph-heading, #0a0e1a)',\n lineHeight: 1.6,\n }}\n >\n {tab.content}\n </div>\n );\n })}\n </div>\n );\n}\n","import { tabsSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Tabs } from './Tabs.js';\nimport type { TabsData } from './Tabs.js';\n\nexport const tabsDefinition: GlyphComponentDefinition<TabsData> = {\n type: 'ui:tabs',\n schema: tabsSchema,\n render: Tabs,\n};\n\nexport { Tabs };\nexport type { TabsData };\n","import { useRef } from 'react';\nimport type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport { scaleTime, scaleOrdinal } from 'd3';\n\n// ─── Types ─────────────────────────────────────────────────────\n\ninterface TimelineEvent {\n date: string;\n title: string;\n description?: string;\n type?: string;\n}\n\nexport interface TimelineData {\n events: TimelineEvent[];\n orientation?: 'vertical' | 'horizontal';\n}\n\ninterface PositionedEvent {\n event: TimelineEvent;\n parsed: Date;\n position: number;\n side: 'left' | 'right' | 'top' | 'bottom';\n}\n\n// ─── Constants ─────────────────────────────────────────────────\n\nconst MARKER_RADIUS = 8;\nconst LINE_THICKNESS = 2;\nconst EVENT_SPACING_MIN = 80;\n\n/**\n * Default color palette for event types. The D3 ordinal scale will cycle\n * through these when assigning colors based on the event `type` field.\n */\nconst TYPE_PALETTE = [\n 'var(--glyph-timeline-color-1, #00d4aa)',\n 'var(--glyph-timeline-color-2, #b44dff)',\n 'var(--glyph-timeline-color-3, #22c55e)',\n 'var(--glyph-timeline-color-4, #e040fb)',\n 'var(--glyph-timeline-color-5, #00e5ff)',\n 'var(--glyph-timeline-color-6, #84cc16)',\n 'var(--glyph-timeline-color-7, #f472b6)',\n 'var(--glyph-timeline-color-8, #fb923c)',\n];\n\n// ─── Helpers ───────────────────────────────────────────────────\n\nfunction parseDate(raw: string): Date {\n // Try native ISO / common formats first\n const d = new Date(raw);\n if (!isNaN(d.getTime())) return d;\n\n // YYYY-MM (e.g. \"2026-01\")\n const ym = raw.match(/^(\\d{4})-(\\d{1,2})$/);\n if (ym && ym[1] && ym[2]) return new Date(+ym[1], +ym[2] - 1, 1);\n\n // Q1 YYYY or YYYY-Q1 (quarter formats)\n const q1 = raw.match(/^Q([1-4])\\s+(\\d{4})$/i);\n if (q1 && q1[1] && q1[2]) return new Date(+q1[2], (+q1[1] - 1) * 3, 1);\n\n const q2 = raw.match(/^(\\d{4})-Q([1-4])$/i);\n if (q2 && q2[1] && q2[2]) return new Date(+q2[1], (+q2[2] - 1) * 3, 1);\n\n // Return epoch as fallback for truly unparseable dates\n return new Date(0);\n}\n\nfunction formatDate(raw: string): string {\n const d = parseDate(raw);\n // If the date resolved to epoch, the input was unparseable — show original\n if (d.getTime() === 0) return raw;\n return d.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n}\n\nfunction isoDate(raw: string): string {\n return parseDate(raw).toISOString().slice(0, 10);\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\n/**\n * Renders an interactive timeline visualization using D3 for positioning.\n *\n * Events are placed along a central axis using a D3 time scale derived\n * from parsed event dates. In vertical orientation events alternate\n * left / right; in horizontal orientation they flow left to right.\n *\n * Theming is controlled via CSS custom properties prefixed with\n * `--glyph-timeline-*`.\n */\nexport function Timeline({ data }: GlyphComponentProps<TimelineData>): ReactElement {\n const { events, orientation = 'vertical' } = data;\n const containerRef = useRef<HTMLDivElement>(null);\n const isVertical = orientation === 'vertical';\n\n // --- D3 scales (computed once per render) ---\n\n const sorted = [...events]\n .map((e) => ({ ...e, _parsed: parseDate(e.date) }))\n .sort((a, b) => a._parsed.getTime() - b._parsed.getTime());\n\n const dates = sorted.map((e) => e._parsed);\n const minDate = dates[0] ?? new Date();\n const maxDate = dates[dates.length - 1] ?? new Date();\n\n const totalLength = Math.max(sorted.length * EVENT_SPACING_MIN, 400);\n\n const timeScale = scaleTime()\n .domain([minDate, maxDate])\n .range([MARKER_RADIUS + 20, totalLength - MARKER_RADIUS - 20]);\n\n const typeValues = [...new Set(events.map((e) => e.type ?? '_default'))];\n const colorScale = scaleOrdinal<string, string>().domain(typeValues).range(TYPE_PALETTE);\n\n // --- Positioned events ---\n\n const positioned: PositionedEvent[] = sorted.map((e, i) => ({\n event: e,\n parsed: e._parsed,\n position: dates.length === 1 ? totalLength / 2 : (timeScale(e._parsed) as number),\n side: isVertical ? (i % 2 === 0 ? 'left' : 'right') : i % 2 === 0 ? 'top' : 'bottom',\n }));\n\n // --- Styles ---\n\n const containerStyle: React.CSSProperties = {\n position: 'relative',\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n ...(isVertical\n ? { width: '100%', minHeight: totalLength }\n : { minHeight: 300, minWidth: totalLength }),\n };\n\n const lineStyle: React.CSSProperties = isVertical\n ? {\n position: 'absolute',\n left: '50%',\n top: 0,\n bottom: 0,\n width: LINE_THICKNESS,\n backgroundColor: 'var(--glyph-timeline-line, #d0d8e4)',\n transform: 'translateX(-50%)',\n }\n : {\n position: 'absolute',\n top: '50%',\n left: 0,\n right: 0,\n height: LINE_THICKNESS,\n backgroundColor: 'var(--glyph-timeline-line, #d0d8e4)',\n transform: 'translateY(-50%)',\n };\n\n // --- Render ---\n\n const inner = (\n <div\n ref={containerRef}\n style={containerStyle}\n role=\"img\"\n aria-label={`Timeline with ${events.length} events`}\n >\n {/* Central axis line */}\n <div style={lineStyle} aria-hidden=\"true\" />\n\n {/* Event markers and labels */}\n {positioned.map((pe, idx) => {\n const color = colorScale(pe.event.type ?? '_default');\n return (\n <div key={idx} style={eventContainerStyle(pe, isVertical)} aria-hidden=\"true\">\n {/* Connector arm from axis to marker */}\n <div style={connectorStyle(pe, isVertical)} aria-hidden=\"true\" />\n\n {/* Marker dot */}\n <div\n style={{\n width: MARKER_RADIUS * 2,\n height: MARKER_RADIUS * 2,\n borderRadius: '50%',\n backgroundColor: color,\n border: '2px solid var(--glyph-timeline-marker-border, var(--glyph-bg, #f4f6fa))',\n boxShadow: '0 0 0 2px var(--glyph-border, #d0d8e4)',\n flexShrink: 0,\n zIndex: 1,\n }}\n />\n\n {/* Label */}\n <div style={labelStyle(pe, isVertical)}>\n <div\n style={{\n fontSize: 'var(--glyph-timeline-date-size, 0.75rem)',\n color: 'var(--glyph-timeline-date-color, #7a8599)',\n fontWeight: 600,\n }}\n >\n {formatDate(pe.event.date)}\n </div>\n <div\n style={{\n fontSize: 'var(--glyph-timeline-title-size, 0.9rem)',\n fontWeight: 700,\n marginTop: 2,\n }}\n >\n {pe.event.title}\n </div>\n {pe.event.description && (\n <div\n style={{\n fontSize: 'var(--glyph-timeline-desc-size, 0.8rem)',\n color: 'var(--glyph-timeline-desc-color, #7a8599)',\n marginTop: 2,\n }}\n >\n {pe.event.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n {/* ─── Screen-reader accessible fallback ────────────────── */}\n <ol\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n }}\n >\n {sorted.map((e, idx) => (\n <li key={idx}>\n <time dateTime={isoDate(e.date)}>{formatDate(e.date)}</time>\n {' \\u2014 '}\n <strong>{e.title}</strong>\n {e.description ? `: ${e.description}` : ''}\n </li>\n ))}\n </ol>\n </div>\n );\n\n // Horizontal timelines use minWidth which can exceed the viewport.\n // Wrap in a scrollable parent so the content is accessible on narrow screens.\n if (!isVertical) {\n return <div style={{ overflowX: 'auto', width: '100%' }}>{inner}</div>;\n }\n\n return inner;\n}\n\n// ─── Style helpers ─────────────────────────────────────────────\n\nfunction eventContainerStyle(pe: PositionedEvent, isVertical: boolean): React.CSSProperties {\n if (isVertical) {\n const isLeft = pe.side === 'left';\n return {\n position: 'absolute',\n top: pe.position,\n left: isLeft ? 0 : '50%',\n right: isLeft ? '50%' : 0,\n display: 'flex',\n flexDirection: isLeft ? 'row-reverse' : 'row',\n alignItems: 'center',\n gap: 8,\n transform: 'translateY(-50%)',\n };\n }\n\n // Horizontal\n const isTop = pe.side === 'top';\n return {\n position: 'absolute',\n left: pe.position,\n top: isTop ? 0 : '50%',\n bottom: isTop ? '50%' : 0,\n display: 'flex',\n flexDirection: isTop ? 'column-reverse' : 'column',\n alignItems: 'center',\n gap: 8,\n transform: 'translateX(-50%)',\n };\n}\n\nfunction connectorStyle(_pe: PositionedEvent, isVertical: boolean): React.CSSProperties {\n if (isVertical) {\n return {\n flex: '0 0 20px',\n height: LINE_THICKNESS,\n backgroundColor: 'var(--glyph-timeline-line, #d0d8e4)',\n };\n }\n return {\n flex: '0 0 20px',\n width: LINE_THICKNESS,\n backgroundColor: 'var(--glyph-timeline-line, #d0d8e4)',\n };\n}\n\nfunction labelStyle(pe: PositionedEvent, isVertical: boolean): React.CSSProperties {\n if (isVertical) {\n return {\n textAlign: pe.side === 'left' ? 'right' : 'left',\n maxWidth: 200,\n };\n }\n return {\n textAlign: 'center',\n maxWidth: 160,\n };\n}\n","import { timelineSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Timeline } from './Timeline.js';\nimport type { TimelineData } from './Timeline.js';\n\nexport const timelineDefinition: GlyphComponentDefinition<TimelineData> = {\n type: 'ui:timeline',\n schema: timelineSchema,\n render: Timeline,\n};\n\nexport { Timeline };\nexport type { TimelineData };\n","import type { GraphNode, GraphEdge } from '@glyphjs/types';\nimport dagre from 'dagre';\nimport * as d3 from 'd3';\n\n// ─── Positioned Node / Edge ──────────────────────────────────\n\nexport interface PositionedNode extends GraphNode {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface PositionedEdge extends GraphEdge {\n points: { x: number; y: number }[];\n}\n\nexport interface LayoutResult {\n nodes: PositionedNode[];\n edges: PositionedEdge[];\n width: number;\n height: number;\n}\n\n// ─── Direction mapping ───────────────────────────────────────\n\ntype LayoutDirection = 'top-down' | 'left-right' | 'bottom-up' | 'radial' | 'force';\n\nconst RANKDIR_MAP: Record<string, string> = {\n 'top-down': 'TB',\n 'left-right': 'LR',\n 'bottom-up': 'BT',\n radial: 'TB',\n};\n\n// ─── Constants ───────────────────────────────────────────────\n\nconst DEFAULT_NODE_WIDTH = 160;\nconst DEFAULT_NODE_HEIGHT = 40;\nconst NODE_SEP = 50;\nconst RANK_SEP = 70;\nconst EDGE_SEP = 10;\nconst LAYOUT_PADDING = 40;\n\n// ─── Dagre Layout ────────────────────────────────────────────\n\n/**\n * Uses dagre to compute hierarchical layout positions for nodes and edges.\n * Supports top-down, left-right, bottom-up, and radial directions.\n * The radial direction uses top-down dagre as a base.\n */\nexport function computeDagreLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n direction: LayoutDirection = 'top-down',\n): LayoutResult {\n const g = new dagre.graphlib.Graph();\n g.setGraph({\n rankdir: RANKDIR_MAP[direction] ?? 'TB',\n nodesep: NODE_SEP,\n ranksep: RANK_SEP,\n edgesep: EDGE_SEP,\n });\n g.setDefaultEdgeLabel(() => ({}));\n\n for (const node of nodes) {\n g.setNode(node.id, {\n label: node.label,\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n });\n }\n\n for (const edge of edges) {\n g.setEdge(edge.from, edge.to);\n }\n\n dagre.layout(g);\n\n const positionedNodes: PositionedNode[] = nodes.map((node) => {\n const dagreNode = g.node(node.id) as dagre.Node;\n return {\n ...node,\n x: dagreNode.x,\n y: dagreNode.y,\n width: dagreNode.width,\n height: dagreNode.height,\n };\n });\n\n const positionedEdges: PositionedEdge[] = edges.map((edge) => {\n const dagreEdge = g.edge(edge.from, edge.to) as dagre.GraphEdge;\n return {\n ...edge,\n points: dagreEdge.points,\n };\n });\n\n // Compute bounding box\n let maxX = 0;\n let maxY = 0;\n for (const n of positionedNodes) {\n const right = n.x + n.width / 2;\n const bottom = n.y + n.height / 2;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n\n return {\n nodes: positionedNodes,\n edges: positionedEdges,\n width: maxX + LAYOUT_PADDING,\n height: maxY + LAYOUT_PADDING,\n };\n}\n\n// ─── Force Layout ────────────────────────────────────────────\n\ninterface SimNode extends d3.SimulationNodeDatum {\n id: string;\n label: string;\n type?: string;\n style?: Record<string, string>;\n group?: string;\n}\n\n/**\n * Uses D3 force simulation to compute physics-based layout positions.\n * Runs the simulation synchronously for a fixed number of ticks.\n */\nexport function computeForceLayout(\n nodes: GraphNode[],\n edges: GraphEdge[],\n): LayoutResult {\n const simNodes: SimNode[] = nodes.map((n) => ({\n ...n,\n x: undefined,\n y: undefined,\n }));\n\n const simLinks = edges.map((e) => ({\n source: e.from,\n target: e.to,\n }));\n\n const simulation = d3\n .forceSimulation(simNodes)\n .force(\n 'link',\n d3\n .forceLink(simLinks)\n .id((d) => (d as SimNode).id)\n .distance(120),\n )\n .force('charge', d3.forceManyBody().strength(-300))\n .force('center', d3.forceCenter(400, 300))\n .force('collision', d3.forceCollide().radius(DEFAULT_NODE_WIDTH / 2 + 10))\n .stop();\n\n // Run simulation synchronously\n const tickCount = 300;\n for (let i = 0; i < tickCount; i++) {\n simulation.tick();\n }\n\n // Shift positions so all are positive\n let minX = Infinity;\n let minY = Infinity;\n for (const sn of simNodes) {\n if ((sn.x ?? 0) < minX) minX = sn.x ?? 0;\n if ((sn.y ?? 0) < minY) minY = sn.y ?? 0;\n }\n const offsetX = -minX + LAYOUT_PADDING + DEFAULT_NODE_WIDTH / 2;\n const offsetY = -minY + LAYOUT_PADDING + DEFAULT_NODE_HEIGHT / 2;\n\n const nodeMap = new Map<string, PositionedNode>();\n const positionedNodes: PositionedNode[] = simNodes.map((sn) => {\n const pn: PositionedNode = {\n id: sn.id,\n label: sn.label,\n type: sn.type,\n style: sn.style,\n group: sn.group,\n x: (sn.x ?? 0) + offsetX,\n y: (sn.y ?? 0) + offsetY,\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n };\n nodeMap.set(sn.id, pn);\n return pn;\n });\n\n const positionedEdges: PositionedEdge[] = edges.map((edge) => {\n const source = nodeMap.get(edge.from);\n const target = nodeMap.get(edge.to);\n return {\n ...edge,\n points: [\n { x: source?.x ?? 0, y: source?.y ?? 0 },\n { x: target?.x ?? 0, y: target?.y ?? 0 },\n ],\n };\n });\n\n // Compute bounding box\n let maxX = 0;\n let maxY = 0;\n for (const n of positionedNodes) {\n const right = n.x + n.width / 2;\n const bottom = n.y + n.height / 2;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n\n return {\n nodes: positionedNodes,\n edges: positionedEdges,\n width: maxX + LAYOUT_PADDING,\n height: maxY + LAYOUT_PADDING,\n };\n}\n","import type { CSSProperties, ReactElement } from 'react';\nimport { useEffect, useRef, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport type { GlyphComponentProps, Reference } from '@glyphjs/types';\nimport { computeDagreLayout, computeForceLayout } from './layout.js';\nimport type { LayoutResult } from './layout.js';\n\n// ─── Types ───────────────────────────────────────────────────\n\ninterface GraphNodeData {\n id: string;\n label: string;\n type?: string;\n style?: Record<string, string>;\n group?: string;\n}\n\ninterface GraphEdgeData {\n from: string;\n to: string;\n label?: string;\n type?: string;\n style?: Record<string, string>;\n}\n\nexport interface GraphData {\n type: 'dag' | 'flowchart' | 'mindmap' | 'force';\n nodes: GraphNodeData[];\n edges: GraphEdgeData[];\n layout?: 'top-down' | 'left-right' | 'bottom-up' | 'radial' | 'force';\n}\n\ntype LayoutDirection = 'top-down' | 'left-right' | 'bottom-up' | 'radial' | 'force';\n\n// ─── Group Color Palette ─────────────────────────────────────\n\nconst GROUP_PALETTE = [\n '#00d4aa', // cyan-green\n '#b44dff', // purple\n '#22c55e', // green\n '#e040fb', // magenta\n '#00e5ff', // teal\n '#84cc16', // lime\n '#f472b6', // rose\n '#fb923c', // orange\n '#818cf8', // indigo\n '#38bdf8', // sky\n];\n\nconst DEFAULT_NODE_COLOR = '#00d4aa';\n\nfunction getGroupColor(group: string | undefined, groupIndex: Map<string, number>): string {\n if (!group) return GROUP_PALETTE[0] ?? DEFAULT_NODE_COLOR;\n let idx = groupIndex.get(group);\n if (idx === undefined) {\n idx = groupIndex.size;\n groupIndex.set(group, idx);\n }\n return GROUP_PALETTE[idx % GROUP_PALETTE.length] ?? DEFAULT_NODE_COLOR;\n}\n\n// ─── Layout Resolution ──────────────────────────────────────\n\nconst TYPE_LAYOUT_DEFAULTS: Record<string, LayoutDirection> = {\n dag: 'top-down',\n flowchart: 'top-down',\n mindmap: 'left-right',\n force: 'force',\n};\n\nfunction resolveLayout(data: GraphData): LayoutDirection {\n if (data.layout) return data.layout;\n return TYPE_LAYOUT_DEFAULTS[data.type] ?? 'top-down';\n}\n\n// ─── Theme Variable Helper ───────────────────────────────────\n\nfunction getThemeVar(container: Element, varName: string, fallback: string): string {\n return getComputedStyle(container).getPropertyValue(varName).trim() || fallback;\n}\n\n// ─── SVG Rendering ──────────────────────────────────────────\n\nconst ARROW_MARKER_ID = 'glyph-graph-arrowhead';\n\nfunction renderGraph(\n svgElement: SVGSVGElement,\n layout: LayoutResult,\n groupIndex: Map<string, number>,\n outgoingRefs: Reference[],\n onNavigate: (ref: Reference) => void,\n): void {\n const svg = d3.select(svgElement);\n svg.selectAll('*').remove();\n\n const width = Math.max(layout.width, 200);\n const height = Math.max(layout.height, 200);\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n // Defs: arrow marker\n const defs = svg.append('defs');\n defs\n .append('marker')\n .attr('id', ARROW_MARKER_ID)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 10)\n .attr('refY', 5)\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 Z')\n .attr('fill', 'var(--glyph-edge-color, #6b7a94)');\n\n // Read theme variables from the SVG's parent container for attrs that\n // don't support CSS var() (rx, ry, opacity).\n const container = svgElement.parentElement ?? svgElement;\n const nodeRadius = getThemeVar(container, '--glyph-node-radius', '3');\n const nodeStrokeWidth = getThemeVar(container, '--glyph-node-stroke-width', '1.5');\n const nodeFillOpacity = getThemeVar(container, '--glyph-node-fill-opacity', '0.85');\n\n // Root group for zoom/pan\n const root = svg.append('g').attr('class', 'glyph-graph-root');\n\n // Zoom behavior\n const zoomBehavior = d3\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n root.attr('transform', event.transform.toString());\n });\n\n svg.call(zoomBehavior);\n\n // Build a set of node IDs that have outgoing refs for navigation\n const navigableNodes = new Set<string>();\n const refByAnchor = new Map<string, Reference>();\n for (const ref of outgoingRefs) {\n if (ref.sourceAnchor) {\n navigableNodes.add(ref.sourceAnchor);\n refByAnchor.set(ref.sourceAnchor, ref);\n }\n }\n\n // ─── Edges ─────────────────────────────────────────────────\n\n const lineGen = d3\n .line<{ x: number; y: number }>()\n .x((d) => d.x)\n .y((d) => d.y)\n .curve(d3.curveBasis);\n\n const edgeGroup = root.append('g').attr('class', 'glyph-graph-edges');\n\n for (const edge of layout.edges) {\n const edgeG = edgeGroup.append('g').attr('class', 'glyph-graph-edge');\n\n edgeG\n .append('path')\n .attr('d', lineGen(edge.points) ?? '')\n .attr('fill', 'none')\n .attr('stroke', edge.style?.['stroke'] ?? 'var(--glyph-edge-color, #6b7a94)')\n .attr('stroke-width', edge.style?.['stroke-width'] ?? nodeStrokeWidth)\n .attr('marker-end', `url(#${ARROW_MARKER_ID})`)\n .attr('stroke-dasharray', edge.type === 'dashed' ? '5,5' : null);\n\n if (edge.label) {\n const mid = edge.points[Math.floor(edge.points.length / 2)];\n if (mid) {\n edgeG\n .append('text')\n .attr('x', mid.x)\n .attr('y', mid.y - 8)\n .attr('text-anchor', 'middle')\n .attr('font-size', '11px')\n .attr('fill', 'var(--glyph-edge-color, #6b7a94)')\n .text(edge.label);\n }\n }\n }\n\n // ─── Nodes ─────────────────────────────────────────────────\n\n const nodeGroup = root.append('g').attr('class', 'glyph-graph-nodes');\n\n for (const node of layout.nodes) {\n const nodeG = nodeGroup.append('g').attr('class', 'glyph-graph-node');\n const color = getGroupColor(node.group, groupIndex);\n const isNavigable = navigableNodes.has(node.id);\n const nodeX = node.x - node.width / 2;\n const nodeY = node.y - node.height / 2;\n\n // Shape: circle for 'entity' type, rounded rect otherwise\n const defaultStroke =\n d3.color(color)?.darker(0.5)?.toString() ?? 'var(--glyph-edge-color, #6b7a94)';\n\n if (node.type === 'circle') {\n nodeG\n .append('circle')\n .attr('cx', node.x)\n .attr('cy', node.y)\n .attr('r', Math.min(node.width, node.height) / 2)\n .attr('fill', node.style?.['fill'] ?? color)\n .attr('stroke', node.style?.['stroke'] ?? defaultStroke)\n .attr('stroke-width', node.style?.['stroke-width'] ?? nodeStrokeWidth)\n .attr('opacity', nodeFillOpacity);\n } else {\n nodeG\n .append('rect')\n .attr('x', nodeX)\n .attr('y', nodeY)\n .attr('width', node.width)\n .attr('height', node.height)\n .attr('rx', nodeRadius)\n .attr('ry', nodeRadius)\n .attr('fill', node.style?.['fill'] ?? color)\n .attr('stroke', node.style?.['stroke'] ?? defaultStroke)\n .attr('stroke-width', node.style?.['stroke-width'] ?? nodeStrokeWidth)\n .attr('opacity', nodeFillOpacity);\n }\n\n // Label\n nodeG\n .append('text')\n .attr('x', node.x)\n .attr('y', node.y)\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .attr('font-size', '13px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-node-label-color, #fff)')\n .attr('pointer-events', 'none')\n .text(node.label);\n\n // Navigation cursor + click handler\n if (isNavigable) {\n nodeG.attr('cursor', 'pointer');\n nodeG.on('click', () => {\n const ref = refByAnchor.get(node.id);\n if (ref) onNavigate(ref);\n });\n }\n }\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Graph({\n data,\n outgoingRefs,\n onNavigate,\n container,\n}: GlyphComponentProps<GraphData>): ReactElement {\n const svgRef = useRef<SVGSVGElement>(null);\n const groupIndex = useRef(new Map<string, number>());\n\n const layoutResult = useMemo<LayoutResult>(() => {\n const direction = resolveLayout(data);\n if (direction === 'force') {\n return computeForceLayout(data.nodes, data.edges);\n }\n return computeDagreLayout(data.nodes, data.edges, direction);\n }, [data]);\n\n useEffect(() => {\n if (!svgRef.current) return;\n renderGraph(svgRef.current, layoutResult, groupIndex.current, outgoingRefs, onNavigate);\n }, [layoutResult, outgoingRefs, onNavigate]);\n\n // Build an accessible description\n const ariaLabel = `${data.type} graph with ${data.nodes.length} nodes and ${data.edges.length} edges`;\n\n return (\n <div className=\"glyph-graph-container\">\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n width=\"100%\"\n height=\"100%\"\n style={{\n minHeight: container.tier === 'compact' ? 200 : 300,\n maxHeight: container.tier === 'compact' ? 500 : 700,\n display: 'block',\n }}\n />\n {/* Hidden data table fallback for screen readers */}\n <table className=\"sr-only\" aria-label=\"Graph data\" style={SR_ONLY_STYLE}>\n <caption>Graph nodes and connections</caption>\n <thead>\n <tr>\n <th scope=\"col\">Node</th>\n <th scope=\"col\">Group</th>\n <th scope=\"col\">Connections</th>\n </tr>\n </thead>\n <tbody>\n {data.nodes.map((node) => {\n const connections = data.edges\n .filter((e) => e.from === node.id || e.to === node.id)\n .map((e) => {\n const target = e.from === node.id ? e.to : e.from;\n const dir = e.from === node.id ? '->' : '<-';\n return `${dir} ${target}${e.label ? ` (${e.label})` : ''}`;\n })\n .join(', ');\n return (\n <tr key={node.id}>\n <td>{node.label}</td>\n <td>{node.group ?? ''}</td>\n <td>{connections}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n/** CSS properties to visually hide content while keeping it accessible to screen readers. */\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { graphSchema } from '@glyphjs/schemas';\nimport { Graph } from './Graph.js';\nimport type { GraphData } from './Graph.js';\n\nexport const graphDefinition: GlyphComponentDefinition<GraphData> = {\n type: 'ui:graph',\n schema: graphSchema,\n render: Graph,\n};\n\nexport { Graph };\nexport type { GraphData };\nexport { computeDagreLayout, computeForceLayout } from './layout.js';\nexport type { PositionedNode, PositionedEdge, LayoutResult } from './layout.js';\n","import type { CSSProperties, ReactElement } from 'react';\nimport { useEffect, useRef, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport dagre from 'dagre';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ───────────────────────────────────────────────────\n\ninterface Attribute {\n name: string;\n type: string;\n primaryKey?: boolean;\n}\n\ninterface Entity {\n id: string;\n label: string;\n attributes?: Attribute[];\n}\n\ninterface Relationship {\n from: string;\n to: string;\n label?: string;\n cardinality: '1:1' | '1:N' | 'N:1' | 'N:M';\n}\n\nexport interface RelationData {\n entities: Entity[];\n relationships: Relationship[];\n layout?: 'top-down' | 'left-right';\n}\n\n// ─── Layout Constants ────────────────────────────────────────\n\nconst ENTITY_MIN_WIDTH = 180;\nconst ENTITY_HEADER_HEIGHT = 32;\nconst ENTITY_ATTR_HEIGHT = 22;\nconst ENTITY_PADDING = 12;\nconst NODE_SEP = 60;\nconst RANK_SEP = 80;\nconst EDGE_SEP = 10;\nconst LAYOUT_PADDING = 40;\nconst CHAR_WIDTH = 7.5;\n\n// ─── Entity sizing ───────────────────────────────────────────\n\nfunction computeEntitySize(entity: Entity): { width: number; height: number } {\n const attrs = entity.attributes ?? [];\n const height = ENTITY_HEADER_HEIGHT + attrs.length * ENTITY_ATTR_HEIGHT + ENTITY_PADDING;\n\n // Width is determined by the longest text line\n let maxTextWidth = entity.label.length * (CHAR_WIDTH + 1);\n for (const attr of attrs) {\n const attrText = `${attr.name}: ${attr.type}`;\n maxTextWidth = Math.max(maxTextWidth, attrText.length * CHAR_WIDTH);\n }\n const width = Math.max(ENTITY_MIN_WIDTH, maxTextWidth + ENTITY_PADDING * 2 + 16);\n\n return { width, height };\n}\n\n// ─── Positioned Types ────────────────────────────────────────\n\ninterface PositionedEntity extends Entity {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface PositionedRelationship extends Relationship {\n points: { x: number; y: number }[];\n}\n\ninterface RelationLayout {\n entities: PositionedEntity[];\n relationships: PositionedRelationship[];\n width: number;\n height: number;\n}\n\n// ─── Dagre Layout ────────────────────────────────────────────\n\nfunction computeRelationLayout(data: RelationData): RelationLayout {\n const direction = data.layout ?? 'top-down';\n const rankdir = direction === 'left-right' ? 'LR' : 'TB';\n\n const g = new dagre.graphlib.Graph();\n g.setGraph({\n rankdir,\n nodesep: NODE_SEP,\n ranksep: RANK_SEP,\n edgesep: EDGE_SEP,\n });\n g.setDefaultEdgeLabel(() => ({}));\n\n const sizeMap = new Map<string, { width: number; height: number }>();\n for (const entity of data.entities) {\n const size = computeEntitySize(entity);\n sizeMap.set(entity.id, size);\n g.setNode(entity.id, {\n label: entity.label,\n width: size.width,\n height: size.height,\n });\n }\n\n for (const rel of data.relationships) {\n g.setEdge(rel.from, rel.to);\n }\n\n dagre.layout(g);\n\n const positionedEntities: PositionedEntity[] = data.entities.map((entity) => {\n const dagreNode = g.node(entity.id) as dagre.Node;\n const size = sizeMap.get(entity.id) ?? {\n width: ENTITY_MIN_WIDTH,\n height: ENTITY_HEADER_HEIGHT,\n };\n return {\n ...entity,\n x: dagreNode.x,\n y: dagreNode.y,\n width: size.width,\n height: size.height,\n };\n });\n\n const positionedRelationships: PositionedRelationship[] = data.relationships.map((rel) => {\n const dagreEdge = g.edge(rel.from, rel.to) as dagre.GraphEdge;\n return {\n ...rel,\n points: dagreEdge.points,\n };\n });\n\n // Compute bounding box\n let maxX = 0;\n let maxY = 0;\n for (const e of positionedEntities) {\n const right = e.x + e.width / 2;\n const bottom = e.y + e.height / 2;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n\n return {\n entities: positionedEntities,\n relationships: positionedRelationships,\n width: maxX + LAYOUT_PADDING,\n height: maxY + LAYOUT_PADDING,\n };\n}\n\n// ─── Crow's Foot Drawing ─────────────────────────────────────\n\n/**\n * Returns the cardinality symbol at each end.\n * For \"1:N\", the \"from\" end is \"1\" and the \"to\" end is \"N\".\n */\nfunction parseCardinality(cardinality: string): { fromSymbol: string; toSymbol: string } {\n const parts = cardinality.split(':');\n return { fromSymbol: parts[0] ?? '1', toSymbol: parts[1] ?? '1' };\n}\n\n/**\n * Draws a crow's foot symbol at a given point on an edge.\n * @param g - The D3 selection group to draw into\n * @param x - X position of the endpoint\n * @param y - Y position of the endpoint\n * @param angle - Angle in radians pointing away from the entity\n * @param symbol - \"1\" or \"N\"\n */\nfunction drawCrowsFoot(\n g: d3.Selection<SVGGElement, unknown, null, undefined>,\n x: number,\n y: number,\n angle: number,\n symbol: string,\n): void {\n const len = 12;\n const spread = Math.PI / 6; // 30 degrees\n\n if (symbol === 'N' || symbol === 'M') {\n // Crow's foot: three lines spreading out\n const cx = x + Math.cos(angle) * len;\n const cy = y + Math.sin(angle) * len;\n\n // Center line\n g.append('line')\n .attr('x1', x)\n .attr('y1', y)\n .attr('x2', cx)\n .attr('y2', cy)\n .attr('stroke', 'var(--glyph-relation-line, #6b7a94)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n\n // Left fork\n const lx = x + Math.cos(angle + spread) * len;\n const ly = y + Math.sin(angle + spread) * len;\n g.append('line')\n .attr('x1', x)\n .attr('y1', y)\n .attr('x2', lx)\n .attr('y2', ly)\n .attr('stroke', 'var(--glyph-relation-line, #6b7a94)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n\n // Right fork\n const rx = x + Math.cos(angle - spread) * len;\n const ry = y + Math.sin(angle - spread) * len;\n g.append('line')\n .attr('x1', x)\n .attr('y1', y)\n .attr('x2', rx)\n .attr('y2', ry)\n .attr('stroke', 'var(--glyph-relation-line, #6b7a94)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n } else {\n // Single line perpendicular to the edge for \"1\"\n const perpAngle = angle + Math.PI / 2;\n const halfLen = 8;\n const tx = x + Math.cos(angle) * 6;\n const ty = y + Math.sin(angle) * 6;\n g.append('line')\n .attr('x1', tx - Math.cos(perpAngle) * halfLen)\n .attr('y1', ty - Math.sin(perpAngle) * halfLen)\n .attr('x2', tx + Math.cos(perpAngle) * halfLen)\n .attr('y2', ty + Math.sin(perpAngle) * halfLen)\n .attr('stroke', 'var(--glyph-relation-line, #6b7a94)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n }\n}\n\n// ─── SVG Rendering ───────────────────────────────────────────\n\nfunction renderRelation(svgElement: SVGSVGElement, layout: RelationLayout): void {\n const svg = d3.select(svgElement);\n svg.selectAll('*').remove();\n\n const width = Math.max(layout.width, 200);\n const height = Math.max(layout.height, 200);\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n // Root group for zoom/pan\n const root = svg.append('g').attr('class', 'glyph-relation-root');\n\n // Zoom behavior\n const zoomBehavior = d3\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n root.attr('transform', event.transform.toString());\n });\n\n svg.call(zoomBehavior);\n\n // Build an entity position lookup for edge endpoint computation\n const entityMap = new Map<string, PositionedEntity>();\n for (const entity of layout.entities) {\n entityMap.set(entity.id, entity);\n }\n\n // ─── Relationship lines ─────────────────────────────────────\n\n const lineGen = d3\n .line<{ x: number; y: number }>()\n .x((d) => d.x)\n .y((d) => d.y)\n .curve(d3.curveBasis);\n\n const edgeGroup = root.append('g').attr('class', 'glyph-relation-edges');\n\n for (const rel of layout.relationships) {\n const edgeG = edgeGroup.append('g').attr('class', 'glyph-relation-edge');\n\n edgeG\n .append('path')\n .attr('d', lineGen(rel.points) ?? '')\n .attr('fill', 'none')\n .attr('stroke', 'var(--glyph-relation-line, #6b7a94)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n\n // Cardinality notation\n const { fromSymbol, toSymbol } = parseCardinality(rel.cardinality);\n\n // Crow's foot at the \"from\" end (first point)\n const p0 = rel.points[0];\n const p1 = rel.points[1];\n if (p0 && p1) {\n const angleFrom = Math.atan2(p1.y - p0.y, p1.x - p0.x);\n drawCrowsFoot(edgeG, p0.x, p0.y, angleFrom, fromSymbol);\n }\n\n // Crow's foot at the \"to\" end (last point)\n const pLast = rel.points[rel.points.length - 1];\n const pPrev = rel.points[rel.points.length - 2];\n if (pLast && pPrev) {\n const angleTo = Math.atan2(pPrev.y - pLast.y, pPrev.x - pLast.x);\n drawCrowsFoot(edgeG, pLast.x, pLast.y, angleTo, toSymbol);\n }\n\n // Relationship label at midpoint\n if (rel.label) {\n const mid = rel.points[Math.floor(rel.points.length / 2)];\n if (mid) {\n edgeG\n .append('text')\n .attr('x', mid.x)\n .attr('y', mid.y - 10)\n .attr('text-anchor', 'middle')\n .attr('font-size', '11px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-relation-label, #6b7a94)')\n .text(rel.label);\n }\n }\n\n // Cardinality labels near endpoints\n const pFirst = rel.points[0];\n const pSecond = rel.points[1];\n if (pFirst && pSecond) {\n const fromLabelX = pFirst.x + (pSecond.x - pFirst.x) * 0.15;\n const fromLabelY = pFirst.y + (pSecond.y - pFirst.y) * 0.15 - 10;\n edgeG\n .append('text')\n .attr('x', fromLabelX)\n .attr('y', fromLabelY)\n .attr('text-anchor', 'middle')\n .attr('font-size', '10px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-relation-cardinality, #6b7a94)')\n .text(fromSymbol);\n }\n\n const pEnd = rel.points[rel.points.length - 1];\n const pBeforeEnd = rel.points[rel.points.length - 2];\n if (pEnd && pBeforeEnd) {\n const toLabelX = pEnd.x + (pBeforeEnd.x - pEnd.x) * 0.15;\n const toLabelY = pEnd.y + (pBeforeEnd.y - pEnd.y) * 0.15 - 10;\n edgeG\n .append('text')\n .attr('x', toLabelX)\n .attr('y', toLabelY)\n .attr('text-anchor', 'middle')\n .attr('font-size', '10px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-relation-cardinality, #6b7a94)')\n .text(toSymbol);\n }\n }\n\n // ─── Entities ───────────────────────────────────────────────\n\n const entityGroup = root.append('g').attr('class', 'glyph-relation-entities');\n\n for (const entity of layout.entities) {\n const entityG = entityGroup.append('g').attr('class', 'glyph-relation-entity');\n const x = entity.x - entity.width / 2;\n const y = entity.y - entity.height / 2;\n const attrs = entity.attributes ?? [];\n\n // Entity box\n entityG\n .append('rect')\n .attr('x', x)\n .attr('y', y)\n .attr('width', entity.width)\n .attr('height', entity.height)\n .attr('rx', 4)\n .attr('ry', 4)\n .attr('fill', 'var(--glyph-relation-entity-bg, #f4f6fa)')\n .attr('stroke', 'var(--glyph-relation-entity-border, #a8b5c8)')\n .attr('stroke-width', 'var(--glyph-node-stroke-width, 1.5)');\n\n // Header background\n const headerHeight = ENTITY_HEADER_HEIGHT;\n entityG\n .append('rect')\n .attr('x', x)\n .attr('y', y)\n .attr('width', entity.width)\n .attr('height', headerHeight)\n .attr('rx', 4)\n .attr('ry', 4)\n .attr('fill', 'var(--glyph-relation-header-bg, #00d4aa)');\n\n // Clip the bottom corners of the header rectangle so it's flat at the bottom\n entityG\n .append('rect')\n .attr('x', x)\n .attr('y', y + headerHeight - 4)\n .attr('width', entity.width)\n .attr('height', 4)\n .attr('fill', 'var(--glyph-relation-header-bg, #00d4aa)');\n\n // Header label\n entityG\n .append('text')\n .attr('x', entity.x)\n .attr('y', y + headerHeight / 2)\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .attr('font-size', '13px')\n .attr('font-weight', 'bold')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-relation-header-text, #fff)')\n .text(entity.label);\n\n // Separator line below header\n if (attrs.length > 0) {\n entityG\n .append('line')\n .attr('x1', x)\n .attr('y1', y + headerHeight)\n .attr('x2', x + entity.width)\n .attr('y2', y + headerHeight)\n .attr('stroke', 'var(--glyph-relation-entity-border, #a8b5c8)')\n .attr('stroke-width', 1);\n }\n\n // Attributes\n for (let i = 0; i < attrs.length; i++) {\n const attr = attrs[i];\n if (!attr) continue;\n const attrY = y + headerHeight + i * ENTITY_ATTR_HEIGHT + ENTITY_ATTR_HEIGHT / 2 + 4;\n\n const textEl = entityG\n .append('text')\n .attr('x', x + ENTITY_PADDING)\n .attr('y', attrY)\n .attr('dy', '0.35em')\n .attr('font-size', '12px')\n .attr('font-family', 'system-ui, -apple-system, monospace')\n .attr('fill', 'var(--glyph-relation-attr-text, #1a2035)');\n\n // Attribute name (bold + underline if primary key)\n const nameSpan = textEl.append('tspan').text(attr.name);\n if (attr.primaryKey) {\n nameSpan.attr('font-weight', 'bold').attr('text-decoration', 'underline');\n }\n\n // Attribute type\n textEl\n .append('tspan')\n .attr('fill', 'var(--glyph-relation-attr-type, #6b7a94)')\n .text(`: ${attr.type}`);\n }\n }\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Relation({ data }: GlyphComponentProps<RelationData>): ReactElement {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const layoutResult = useMemo<RelationLayout>(() => {\n return computeRelationLayout(data);\n }, [data]);\n\n useEffect(() => {\n if (!svgRef.current) return;\n renderRelation(svgRef.current, layoutResult);\n }, [layoutResult]);\n\n // Build accessible description\n const ariaLabel = `Entity-relationship diagram with ${data.entities.length} entities and ${data.relationships.length} relationships`;\n\n return (\n <div className=\"glyph-relation-container\">\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n width=\"100%\"\n height=\"100%\"\n style={{ minHeight: 300, maxHeight: 700, display: 'block' }}\n />\n {/* Hidden table fallback for screen readers */}\n <table className=\"sr-only\" aria-label=\"Entity-relationship data\" style={SR_ONLY_STYLE}>\n <caption>Entities and relationships</caption>\n <thead>\n <tr>\n <th scope=\"col\">Entity</th>\n <th scope=\"col\">Attributes</th>\n <th scope=\"col\">Relationships</th>\n </tr>\n </thead>\n <tbody>\n {data.entities.map((entity) => {\n const attrs = (entity.attributes ?? [])\n .map((a) => `${a.name}: ${a.type}${a.primaryKey ? ' (PK)' : ''}`)\n .join(', ');\n const rels = data.relationships\n .filter((r) => r.from === entity.id || r.to === entity.id)\n .map((r) => {\n const target = r.from === entity.id ? r.to : r.from;\n const dir = r.from === entity.id ? '->' : '<-';\n return `${dir} ${target} [${r.cardinality}]${r.label ? ` (${r.label})` : ''}`;\n })\n .join(', ');\n return (\n <tr key={entity.id}>\n <td>{entity.label}</td>\n <td>{attrs}</td>\n <td>{rels}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n/** CSS properties to visually hide content while keeping it accessible to screen readers. */\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { relationSchema } from '@glyphjs/schemas';\nimport { Relation } from './Relation.js';\nimport type { RelationData } from './Relation.js';\n\nexport const relationDefinition: GlyphComponentDefinition<RelationData> = {\n type: 'ui:relation',\n schema: relationSchema,\n render: Relation,\n};\n\nexport { Relation };\nexport type { RelationData };\n","import type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface KpiMetric {\n label: string;\n value: string;\n delta?: string;\n trend?: 'up' | 'down' | 'flat';\n sentiment?: 'positive' | 'negative' | 'neutral';\n unit?: string;\n}\n\nexport interface KpiData {\n title?: string;\n metrics: KpiMetric[];\n columns?: number;\n}\n\n// ─── Trend symbols ─────────────────────────────────────────────\n\nconst TREND_SYMBOLS: Record<string, string> = {\n up: '\\u25B2',\n down: '\\u25BC',\n flat: '\\u2014',\n};\n\n// ─── Helpers ───────────────────────────────────────────────────\n\nfunction resolveSentiment(metric: KpiMetric): 'positive' | 'negative' | 'neutral' {\n if (metric.sentiment) return metric.sentiment;\n if (metric.trend === 'up') return 'positive';\n if (metric.trend === 'down') return 'negative';\n return 'neutral';\n}\n\nfunction buildAriaLabel(metric: KpiMetric): string {\n let label = `${metric.label}: ${metric.value}`;\n if (metric.unit) label += ` ${metric.unit}`;\n if (metric.delta && metric.trend) {\n label += `, ${metric.trend} ${metric.delta}`;\n } else if (metric.delta) {\n label += `, ${metric.delta}`;\n }\n return label;\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Kpi({ data, block, container }: GlyphComponentProps<KpiData>): ReactElement {\n const { title, metrics, columns } = data;\n const baseId = `glyph-kpi-${block.id}`;\n const authorCols = columns ?? Math.min(metrics.length, 4);\n\n // Container-adaptive column clamping (RFC-015)\n let colCount: number;\n switch (container.tier) {\n case 'compact':\n colCount = Math.min(metrics.length, 2);\n break;\n case 'standard':\n colCount = Math.min(authorCols, 3);\n break;\n default:\n colCount = authorCols;\n }\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n };\n\n // CSS-level defensive auto-wrap: repeat(auto-fill, minmax(max(MIN, exact-fraction), 1fr))\n // ensures at most colCount columns at wide widths, fewer on narrow viewports.\n const gapCount = colCount - 1;\n const gridStyle: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fill, minmax(max(120px, calc((100% - ${String(gapCount)}rem) / ${String(colCount)})), 1fr))`,\n gap: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const cardStyle: React.CSSProperties = {\n background: 'var(--glyph-surface-raised, #f4f6fa)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n padding: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: '0.8125rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n marginBottom: 'var(--glyph-spacing-xs, 0.25rem)',\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: '1.75rem',\n fontWeight: 700,\n color: 'var(--glyph-heading, #0a0e1a)',\n lineHeight: 1.2,\n };\n\n return (\n <div id={baseId} role=\"region\" aria-label={title ?? 'Key metrics'} style={containerStyle}>\n {title && (\n <div\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n marginBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n color: 'var(--glyph-heading, #0a0e1a)',\n }}\n >\n {title}\n </div>\n )}\n <div style={gridStyle}>\n {metrics.map((metric, i) => {\n const sentiment = resolveSentiment(metric);\n\n const deltaStyle: React.CSSProperties = {\n fontSize: '0.875rem',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n color: `var(--glyph-kpi-${sentiment}, inherit)`,\n };\n\n return (\n <div key={i} role=\"group\" aria-label={buildAriaLabel(metric)} style={cardStyle}>\n <div style={labelStyle}>{metric.label}</div>\n <div style={valueStyle}>\n {metric.value}\n {metric.unit && (\n <span style={{ fontSize: '0.875rem', fontWeight: 400, marginLeft: '0.25rem' }}>\n {metric.unit}\n </span>\n )}\n </div>\n {(metric.delta || metric.trend) && (\n <div style={deltaStyle}>\n {metric.trend && (\n <span aria-hidden=\"true\" style={{ marginRight: '0.25rem' }}>\n {TREND_SYMBOLS[metric.trend]}\n </span>\n )}\n {metric.delta}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { kpiSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Kpi } from './Kpi.js';\nimport type { KpiData } from './Kpi.js';\n\nexport const kpiDefinition: GlyphComponentDefinition<KpiData> = {\n type: 'ui:kpi',\n schema: kpiSchema,\n render: Kpi,\n};\n\nexport { Kpi };\nexport type { KpiData, KpiMetric } from './Kpi.js';\n","import { useCallback, useRef, type ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface AccordionSection {\n title: string;\n content: string;\n}\n\nexport interface AccordionData {\n title?: string;\n sections: AccordionSection[];\n defaultOpen?: number[];\n multiple?: boolean;\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Accordion({ data, block }: GlyphComponentProps<AccordionData>): ReactElement {\n const { title, sections, defaultOpen = [], multiple = true } = data;\n const baseId = `glyph-accordion-${block.id}`;\n const containerRef = useRef<HTMLDivElement>(null);\n\n const handleToggle = useCallback(\n (e: React.SyntheticEvent<HTMLDetailsElement>) => {\n if (multiple) return;\n const target = e.currentTarget;\n if (!target.open || !containerRef.current) return;\n\n // Exclusive mode: close all other open details\n const allDetails = containerRef.current.querySelectorAll('details');\n for (const details of allDetails) {\n if (details !== target && details.open) {\n details.open = false;\n }\n }\n },\n [multiple],\n );\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n overflow: 'hidden',\n };\n\n const sectionStyle = (isLast: boolean): React.CSSProperties => ({\n borderBottom: isLast ? 'none' : '1px solid var(--glyph-border, #d0d8e4)',\n });\n\n const summaryStyle: React.CSSProperties = {\n padding: 'var(--glyph-spacing-md, 1rem)',\n cursor: 'pointer',\n fontWeight: 600,\n fontSize: '0.9375rem',\n background: 'var(--glyph-surface, #e8ecf3)',\n listStyle: 'none',\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n userSelect: 'none',\n };\n\n const contentStyle: React.CSSProperties = {\n padding: 'var(--glyph-spacing-md, 1rem)',\n fontSize: '0.875rem',\n lineHeight: 1.6,\n };\n\n return (\n <div\n id={baseId}\n ref={containerRef}\n role=\"region\"\n aria-label={title ?? 'Accordion'}\n style={containerStyle}\n >\n {title && (\n <div\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n padding: 'var(--glyph-spacing-md, 1rem)',\n borderBottom: '1px solid var(--glyph-border, #d0d8e4)',\n color: 'var(--glyph-heading, #0a0e1a)',\n }}\n >\n {title}\n </div>\n )}\n {sections.map((section, i) => (\n <details\n key={i}\n open={defaultOpen.includes(i)}\n onToggle={handleToggle}\n style={sectionStyle(i === sections.length - 1)}\n >\n <summary style={summaryStyle}>\n <span aria-hidden=\"true\" style={{ fontSize: '0.75rem', width: '1rem', flexShrink: 0 }}>\n ▸\n </span>\n {section.title}\n </summary>\n <div style={contentStyle}>{section.content}</div>\n </details>\n ))}\n </div>\n );\n}\n","import { accordionSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Accordion } from './Accordion.js';\nimport type { AccordionData } from './Accordion.js';\n\nexport const accordionDefinition: GlyphComponentDefinition<AccordionData> = {\n type: 'ui:accordion',\n schema: accordionSchema,\n render: Accordion,\n};\n\nexport { Accordion };\nexport type { AccordionData, AccordionSection } from './Accordion.js';\n","import type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface ComparisonOption {\n name: string;\n description?: string;\n}\n\nexport interface ComparisonFeature {\n name: string;\n values: string[];\n}\n\nexport interface ComparisonData {\n title?: string;\n options: ComparisonOption[];\n features: ComparisonFeature[];\n}\n\n// ─── Value rendering ───────────────────────────────────────────\n\ntype ValueKind = 'yes' | 'no' | 'partial' | 'text';\n\nconst YES_VALUES = new Set(['yes', 'true', 'full']);\nconst NO_VALUES = new Set(['no', 'false', 'none']);\n\nfunction classifyValue(value: string): ValueKind {\n const lower = value.toLowerCase().trim();\n if (YES_VALUES.has(lower)) return 'yes';\n if (NO_VALUES.has(lower)) return 'no';\n if (lower === 'partial') return 'partial';\n return 'text';\n}\n\nfunction renderValue(value: string): ReactElement {\n const kind = classifyValue(value);\n\n switch (kind) {\n case 'yes':\n return (\n <span\n aria-label=\"Supported\"\n style={{ color: 'var(--glyph-comparison-yes, #16a34a)', fontSize: '1.25rem' }}\n >\n ✓\n </span>\n );\n case 'no':\n return (\n <span\n aria-label=\"Not supported\"\n style={{ color: 'var(--glyph-comparison-no, #dc2626)', fontSize: '1.25rem' }}\n >\n ✗\n </span>\n );\n case 'partial':\n return (\n <span\n aria-label=\"Partially supported\"\n style={{ color: 'var(--glyph-comparison-partial, #d97706)', fontSize: '1.25rem' }}\n >\n ◐\n </span>\n );\n default:\n return <span>{value}</span>;\n }\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Comparison({\n data,\n block,\n container,\n}: GlyphComponentProps<ComparisonData>): ReactElement {\n const { title, options, features } = data;\n const baseId = `glyph-comparison-${block.id}`;\n const isCompact = container.tier === 'compact';\n\n // Container-adaptive padding/font (RFC-015)\n const cellPadding = isCompact\n ? 'var(--glyph-spacing-xs, 0.25rem) var(--glyph-spacing-sm, 0.5rem)'\n : 'var(--glyph-spacing-sm, 0.5rem) var(--glyph-spacing-md, 1rem)';\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n };\n\n const tableStyle: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'collapse',\n border: '1px solid var(--glyph-table-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n overflow: 'hidden',\n fontSize: isCompact ? '0.8125rem' : '0.875rem',\n };\n\n const thStyle: React.CSSProperties = {\n padding: cellPadding,\n textAlign: 'center',\n fontWeight: 600,\n background: 'var(--glyph-table-header-bg, #e8ecf3)',\n borderBottom: '2px solid var(--glyph-table-border, #d0d8e4)',\n color: 'var(--glyph-heading, #0a0e1a)',\n };\n\n const featureThStyle: React.CSSProperties = {\n ...thStyle,\n textAlign: 'left',\n };\n\n const rowThStyle: React.CSSProperties = {\n padding: cellPadding,\n textAlign: 'left',\n fontWeight: 600,\n borderBottom: '1px solid var(--glyph-table-border, #d0d8e4)',\n fontSize: '0.8125rem',\n };\n\n const cellStyle = (rowIndex: number): React.CSSProperties => ({\n padding: cellPadding,\n textAlign: 'center',\n borderBottom: '1px solid var(--glyph-table-border, #d0d8e4)',\n background: rowIndex % 2 === 1 ? 'var(--glyph-table-row-alt-bg, transparent)' : 'transparent',\n });\n\n return (\n <div id={baseId} role=\"region\" aria-label={title ?? 'Comparison'} style={containerStyle}>\n {title && (\n <div\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n marginBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n color: 'var(--glyph-heading, #0a0e1a)',\n }}\n >\n {title}\n </div>\n )}\n <div style={{ overflowX: 'auto' }}>\n <table role=\"grid\" style={tableStyle}>\n <thead>\n <tr>\n <th style={featureThStyle} scope=\"col\">\n Feature\n </th>\n {options.map((option, i) => (\n <th key={i} style={thStyle} scope=\"col\">\n <div>{option.name}</div>\n {option.description && (\n <div\n style={{\n fontWeight: 400,\n fontSize: '0.75rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n }}\n >\n {option.description}\n </div>\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature, rowIndex) => (\n <tr key={rowIndex}>\n <th\n scope=\"row\"\n style={{\n ...rowThStyle,\n background:\n rowIndex % 2 === 1\n ? 'var(--glyph-table-row-alt-bg, transparent)'\n : 'transparent',\n }}\n >\n {feature.name}\n </th>\n {options.map((_, colIndex) => {\n const value = feature.values[colIndex] ?? '';\n return (\n <td key={colIndex} style={cellStyle(rowIndex)}>\n {value ? renderValue(value) : null}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","import { comparisonSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Comparison } from './Comparison.js';\nimport type { ComparisonData } from './Comparison.js';\n\nexport const comparisonDefinition: GlyphComponentDefinition<ComparisonData> = {\n type: 'ui:comparison',\n schema: comparisonSchema,\n render: Comparison,\n};\n\nexport { Comparison };\nexport type { ComparisonData, ComparisonOption, ComparisonFeature } from './Comparison.js';\n","// ─── Line-based diff algorithm (LCS-based) ─────────────────────\n\nexport type DiffLineKind = 'add' | 'del' | 'eq';\n\nexport interface DiffLine {\n kind: DiffLineKind;\n text: string;\n oldLineNo?: number;\n newLineNo?: number;\n}\n\n/** Safe accessor for the 2D DP table. */\nfunction dpGet(dp: number[][], i: number, j: number): number {\n const row = dp[i];\n if (!row) return 0;\n return row[j] ?? 0;\n}\n\n/** Safe accessor for a string array. */\nfunction lineAt(arr: string[], i: number): string {\n return arr[i] ?? '';\n}\n\n/**\n * Computes a line-based diff between two strings.\n * Uses a longest common subsequence (LCS) approach via dynamic programming.\n * Returns a minimal edit script as an array of DiffLine entries.\n */\nexport function computeDiff(before: string, after: string): DiffLine[] {\n const a = before.split('\\n');\n const b = after.split('\\n');\n const n = a.length;\n const m = b.length;\n\n // Build LCS table\n const dp: number[][] = Array.from({ length: n + 1 }, () => new Array<number>(m + 1).fill(0));\n\n for (let i = 1; i <= n; i++) {\n for (let j = 1; j <= m; j++) {\n const row = dp[i];\n if (!row) continue;\n if (lineAt(a, i - 1) === lineAt(b, j - 1)) {\n row[j] = dpGet(dp, i - 1, j - 1) + 1;\n } else {\n row[j] = Math.max(dpGet(dp, i - 1, j), dpGet(dp, i, j - 1));\n }\n }\n }\n\n // Backtrack to build diff\n const edits: DiffLine[] = [];\n let i = n;\n let j = m;\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && lineAt(a, i - 1) === lineAt(b, j - 1)) {\n edits.unshift({ kind: 'eq', text: lineAt(a, i - 1), oldLineNo: i, newLineNo: j });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dpGet(dp, i, j - 1) >= dpGet(dp, i - 1, j))) {\n edits.unshift({ kind: 'add', text: lineAt(b, j - 1), newLineNo: j });\n j--;\n } else {\n edits.unshift({ kind: 'del', text: lineAt(a, i - 1), oldLineNo: i });\n i--;\n }\n }\n\n return edits;\n}\n","import { useMemo, type ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport { computeDiff } from './diff.js';\nimport type { DiffLine } from './diff.js';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface CodeDiffData {\n language?: string;\n before: string;\n after: string;\n beforeLabel?: string;\n afterLabel?: string;\n}\n\n// ─── Helpers ───────────────────────────────────────────────────\n\nfunction summarizeDiff(lines: DiffLine[]): string {\n const added = lines.filter((l) => l.kind === 'add').length;\n const removed = lines.filter((l) => l.kind === 'del').length;\n return `Code diff: ${String(added)} line${added !== 1 ? 's' : ''} added, ${String(removed)} line${removed !== 1 ? 's' : ''} removed`;\n}\n\nconst GUTTER_MARKERS: Record<string, string> = {\n add: '+',\n del: '-',\n eq: ' ',\n};\n\nconst ARIA_LABELS: Record<string, string> = {\n add: 'added',\n del: 'removed',\n eq: 'unchanged',\n};\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function CodeDiff({ data, block }: GlyphComponentProps<CodeDiffData>): ReactElement {\n const { before, after, beforeLabel, afterLabel } = data;\n const baseId = `glyph-codediff-${block.id}`;\n\n const diffLines = useMemo(() => computeDiff(before, after), [before, after]);\n const summary = useMemo(() => summarizeDiff(diffLines), [diffLines]);\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-mono, ui-monospace, \"Cascadia Code\", \"Fira Code\", monospace)',\n fontSize: '0.8125rem',\n lineHeight: 1.5,\n color: 'var(--glyph-text, #1a2035)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n overflow: 'hidden',\n };\n\n const labelBarStyle: React.CSSProperties = {\n display: 'flex',\n gap: '1rem',\n padding: 'var(--glyph-spacing-xs, 0.25rem) var(--glyph-spacing-md, 1rem)',\n background: 'var(--glyph-codediff-gutter-bg, var(--glyph-surface, #e8ecf3))',\n borderBottom: '1px solid var(--glyph-border, #d0d8e4)',\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--glyph-text-muted, #6b7a94)',\n };\n\n const tableStyle: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'collapse',\n tableLayout: 'fixed',\n };\n\n const gutterStyle: React.CSSProperties = {\n width: '1.5rem',\n textAlign: 'center',\n userSelect: 'none',\n color: 'var(--glyph-text-muted, #6b7a94)',\n background: 'var(--glyph-codediff-gutter-bg, var(--glyph-surface, #e8ecf3))',\n borderRight: '1px solid var(--glyph-border, #d0d8e4)',\n verticalAlign: 'top',\n padding: '0 0.25rem',\n };\n\n const lineNoStyle: React.CSSProperties = {\n width: '2.5rem',\n textAlign: 'right',\n userSelect: 'none',\n color: 'var(--glyph-text-muted, #6b7a94)',\n paddingRight: '0.5rem',\n verticalAlign: 'top',\n };\n\n const codeStyle: React.CSSProperties = {\n paddingLeft: '0.5rem',\n whiteSpace: 'pre',\n overflowX: 'auto',\n verticalAlign: 'top',\n };\n\n function rowBg(kind: string): string | undefined {\n if (kind === 'add') return 'var(--glyph-codediff-add-bg, rgba(22, 163, 106, 0.1))';\n if (kind === 'del') return 'var(--glyph-codediff-del-bg, rgba(220, 38, 38, 0.1))';\n return undefined;\n }\n\n function rowColor(kind: string): string | undefined {\n if (kind === 'add') return 'var(--glyph-codediff-add-color, inherit)';\n if (kind === 'del') return 'var(--glyph-codediff-del-color, inherit)';\n return undefined;\n }\n\n return (\n <div id={baseId} role=\"region\" aria-label={summary} style={containerStyle}>\n {(beforeLabel || afterLabel) && (\n <div style={labelBarStyle}>\n {beforeLabel && <span>{beforeLabel}</span>}\n {beforeLabel && afterLabel && <span>→</span>}\n {afterLabel && <span>{afterLabel}</span>}\n </div>\n )}\n <div style={{ overflowX: 'auto' }}>\n <table role=\"grid\" style={tableStyle}>\n <tbody>\n {diffLines.map((line, i) => (\n <tr\n key={i}\n aria-label={ARIA_LABELS[line.kind]}\n style={{ background: rowBg(line.kind), color: rowColor(line.kind) }}\n >\n <td style={gutterStyle}>{GUTTER_MARKERS[line.kind]}</td>\n <td style={lineNoStyle}>{line.oldLineNo ?? ''}</td>\n <td style={lineNoStyle}>{line.newLineNo ?? ''}</td>\n <td style={codeStyle}>{line.text}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","import { codediffSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { CodeDiff } from './CodeDiff.js';\nimport type { CodeDiffData } from './CodeDiff.js';\n\nexport const codeDiffDefinition: GlyphComponentDefinition<CodeDiffData> = {\n type: 'ui:codediff',\n schema: codediffSchema,\n render: CodeDiff,\n};\n\nexport { CodeDiff };\nexport type { CodeDiffData } from './CodeDiff.js';\nexport { computeDiff } from './diff.js';\nexport type { DiffLine, DiffLineKind } from './diff.js';\n","import type { CSSProperties, ReactElement } from 'react';\nimport { useEffect, useRef, useMemo } from 'react';\nimport * as d3 from 'd3';\nimport dagre from 'dagre';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ───────────────────────────────────────────────────\n\ntype FlowchartNodeType = 'start' | 'end' | 'process' | 'decision';\n\ninterface FlowchartNodeData {\n id: string;\n type: FlowchartNodeType;\n label: string;\n}\n\ninterface FlowchartEdgeData {\n from: string;\n to: string;\n label?: string;\n}\n\nexport interface FlowchartData {\n title?: string;\n nodes: FlowchartNodeData[];\n edges: FlowchartEdgeData[];\n direction: 'top-down' | 'left-right';\n}\n\ninterface PositionedNode extends FlowchartNodeData {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface PositionedEdge extends FlowchartEdgeData {\n points: { x: number; y: number }[];\n}\n\n// ─── Layout ──────────────────────────────────────────────────\n\nconst NODE_WIDTH = 160;\nconst NODE_HEIGHT = 40;\nconst DECISION_WIDTH = 170;\nconst DECISION_HEIGHT = 70;\nconst NODE_SEP = 50;\nconst RANK_SEP = 70;\nconst LAYOUT_PADDING = 40;\n\nfunction computeLayout(\n nodes: FlowchartNodeData[],\n edges: FlowchartEdgeData[],\n direction: 'top-down' | 'left-right',\n): { nodes: PositionedNode[]; edges: PositionedEdge[]; width: number; height: number } {\n const g = new dagre.graphlib.Graph();\n g.setGraph({\n rankdir: direction === 'left-right' ? 'LR' : 'TB',\n nodesep: NODE_SEP,\n ranksep: RANK_SEP,\n edgesep: 10,\n });\n g.setDefaultEdgeLabel(() => ({}));\n\n for (const node of nodes) {\n const isDecision = node.type === 'decision';\n g.setNode(node.id, {\n label: node.label,\n width: isDecision ? DECISION_WIDTH : NODE_WIDTH,\n height: isDecision ? DECISION_HEIGHT : NODE_HEIGHT,\n });\n }\n\n for (const edge of edges) {\n g.setEdge(edge.from, edge.to);\n }\n\n dagre.layout(g);\n\n const positionedNodes: PositionedNode[] = nodes.map((node) => {\n const d = g.node(node.id) as dagre.Node;\n return { ...node, x: d.x, y: d.y, width: d.width, height: d.height };\n });\n\n const positionedEdges: PositionedEdge[] = edges.map((edge) => {\n const d = g.edge(edge.from, edge.to) as dagre.GraphEdge;\n return { ...edge, points: d.points };\n });\n\n let maxX = 0;\n let maxY = 0;\n for (const n of positionedNodes) {\n maxX = Math.max(maxX, n.x + n.width / 2);\n maxY = Math.max(maxY, n.y + n.height / 2);\n }\n\n return {\n nodes: positionedNodes,\n edges: positionedEdges,\n width: maxX + LAYOUT_PADDING,\n height: maxY + LAYOUT_PADDING,\n };\n}\n\n// ─── Theme Helpers ───────────────────────────────────────────\n\nfunction getThemeVar(container: Element, varName: string, fallback: string): string {\n return getComputedStyle(container).getPropertyValue(varName).trim() || fallback;\n}\n\n// ─── Node Shape Renderers ────────────────────────────────────\n\nconst ARROW_MARKER_ID = 'glyph-flowchart-arrowhead';\n\nfunction renderNodeShape(\n nodeG: d3.Selection<SVGGElement, unknown, null, undefined>,\n node: PositionedNode,\n fillOpacity: string,\n strokeWidth: string,\n): void {\n const cx = node.x;\n const cy = node.y;\n const w = node.width;\n const h = node.height;\n\n switch (node.type) {\n case 'start':\n case 'end': {\n // Stadium shape — rounded rectangle with large rx\n nodeG\n .append('rect')\n .attr('x', cx - w / 2)\n .attr('y', cy - h / 2)\n .attr('width', w)\n .attr('height', h)\n .attr('rx', h / 2)\n .attr('ry', h / 2)\n .attr('fill', 'var(--glyph-accent, #00d4aa)')\n .attr('stroke', 'var(--glyph-accent-hover, #33e0be)')\n .attr('stroke-width', strokeWidth)\n .attr('opacity', fillOpacity);\n break;\n }\n case 'decision': {\n // Diamond shape\n const top = `${cx},${cy - h / 2}`;\n const right = `${cx + w / 2},${cy}`;\n const bottom = `${cx},${cy + h / 2}`;\n const left = `${cx - w / 2},${cy}`;\n nodeG\n .append('polygon')\n .attr('points', `${top} ${right} ${bottom} ${left}`)\n .attr('fill', 'var(--glyph-surface-raised, #162038)')\n .attr('stroke', 'var(--glyph-accent, #00d4aa)')\n .attr('stroke-width', strokeWidth)\n .attr('opacity', fillOpacity);\n break;\n }\n case 'process':\n default: {\n // Regular rectangle\n nodeG\n .append('rect')\n .attr('x', cx - w / 2)\n .attr('y', cy - h / 2)\n .attr('width', w)\n .attr('height', h)\n .attr('rx', 3)\n .attr('ry', 3)\n .attr('fill', 'var(--glyph-surface-raised, #162038)')\n .attr('stroke', 'var(--glyph-border-strong, #2a3550)')\n .attr('stroke-width', strokeWidth)\n .attr('opacity', fillOpacity);\n break;\n }\n }\n}\n\n// ─── SVG Rendering ──────────────────────────────────────────\n\nfunction renderFlowchart(\n svgElement: SVGSVGElement,\n layout: { nodes: PositionedNode[]; edges: PositionedEdge[]; width: number; height: number },\n): void {\n const svg = d3.select(svgElement);\n svg.selectAll('*').remove();\n\n const width = Math.max(layout.width, 200);\n const height = Math.max(layout.height, 200);\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n // Arrow marker\n const defs = svg.append('defs');\n defs\n .append('marker')\n .attr('id', ARROW_MARKER_ID)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 10)\n .attr('refY', 5)\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 Z')\n .attr('fill', 'var(--glyph-edge-color, #6b7a94)');\n\n const container = svgElement.parentElement ?? svgElement;\n const nodeStrokeWidth = getThemeVar(container, '--glyph-node-stroke-width', '1.5');\n const nodeFillOpacity = getThemeVar(container, '--glyph-node-fill-opacity', '0.85');\n\n const root = svg.append('g').attr('class', 'glyph-flowchart-root');\n\n // Zoom behavior\n const zoomBehavior = d3\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n root.attr('transform', event.transform.toString());\n });\n\n svg.call(zoomBehavior);\n\n // ─── Edges ─────────────────────────────────────────────────\n\n const lineGen = d3\n .line<{ x: number; y: number }>()\n .x((d) => d.x)\n .y((d) => d.y)\n .curve(d3.curveBasis);\n\n const edgeGroup = root.append('g').attr('class', 'glyph-flowchart-edges');\n\n for (const edge of layout.edges) {\n const edgeG = edgeGroup.append('g').attr('class', 'glyph-flowchart-edge');\n\n edgeG\n .append('path')\n .attr('d', lineGen(edge.points) ?? '')\n .attr('fill', 'none')\n .attr('stroke', 'var(--glyph-edge-color, #6b7a94)')\n .attr('stroke-width', nodeStrokeWidth)\n .attr('marker-end', `url(#${ARROW_MARKER_ID})`);\n\n if (edge.label) {\n const mid = edge.points[Math.floor(edge.points.length / 2)];\n if (mid) {\n edgeG\n .append('text')\n .attr('x', mid.x)\n .attr('y', mid.y - 8)\n .attr('text-anchor', 'middle')\n .attr('font-size', '11px')\n .attr('fill', 'var(--glyph-text-muted, #6b7a94)')\n .text(edge.label);\n }\n }\n }\n\n // ─── Nodes ─────────────────────────────────────────────────\n\n const nodeGroup = root.append('g').attr('class', 'glyph-flowchart-nodes');\n\n for (const node of layout.nodes) {\n const nodeG = nodeGroup.append('g').attr('class', 'glyph-flowchart-node');\n\n renderNodeShape(nodeG, node, nodeFillOpacity, nodeStrokeWidth);\n\n // Label\n nodeG\n .append('text')\n .attr('x', node.x)\n .attr('y', node.y)\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .attr('font-size', '13px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-node-label-color, #fff)')\n .attr('pointer-events', 'none')\n .text(node.label);\n }\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Flowchart({ data, container }: GlyphComponentProps<FlowchartData>): ReactElement {\n const svgRef = useRef<SVGSVGElement>(null);\n\n const layoutResult = useMemo(() => computeLayout(data.nodes, data.edges, data.direction), [data]);\n\n useEffect(() => {\n if (!svgRef.current) return;\n renderFlowchart(svgRef.current, layoutResult);\n }, [layoutResult]);\n\n const nodeCount = data.nodes.length;\n const edgeCount = data.edges.length;\n const ariaLabel = data.title\n ? `${data.title}: flowchart with ${nodeCount} nodes and ${edgeCount} edges`\n : `Flowchart with ${nodeCount} nodes and ${edgeCount} edges`;\n\n return (\n <div className=\"glyph-flowchart-container\">\n {data.title && (\n <div\n style={{\n fontFamily: 'var(--glyph-font-heading, Inter, system-ui, sans-serif)',\n fontWeight: 600,\n fontSize: '1rem',\n color: 'var(--glyph-heading, #edf0f5)',\n marginBottom: '0.5rem',\n }}\n >\n {data.title}\n </div>\n )}\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n width=\"100%\"\n height=\"100%\"\n style={{\n minHeight: container.tier === 'compact' ? 200 : 300,\n maxHeight: container.tier === 'compact' ? 500 : 700,\n display: 'block',\n }}\n />\n {/* Hidden data table for screen readers */}\n <table className=\"sr-only\" aria-label=\"Flowchart data\" style={SR_ONLY_STYLE}>\n <caption>Flowchart nodes and connections</caption>\n <thead>\n <tr>\n <th scope=\"col\">Node</th>\n <th scope=\"col\">Type</th>\n <th scope=\"col\">Connections</th>\n </tr>\n </thead>\n <tbody>\n {data.nodes.map((node) => {\n const connections = data.edges\n .filter((e) => e.from === node.id || e.to === node.id)\n .map((e) => {\n const target = e.from === node.id ? e.to : e.from;\n const dir = e.from === node.id ? '->' : '<-';\n return `${dir} ${target}${e.label ? ` (${e.label})` : ''}`;\n })\n .join(', ');\n return (\n <tr key={node.id}>\n <td>{node.label}</td>\n <td>{node.type}</td>\n <td>{connections}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n/** CSS properties to visually hide content while keeping it accessible to screen readers. */\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import { flowchartSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Flowchart } from './Flowchart.js';\nimport type { FlowchartData } from './Flowchart.js';\n\nexport const flowchartDefinition: GlyphComponentDefinition<FlowchartData> = {\n type: 'ui:flowchart',\n schema: flowchartSchema,\n render: Flowchart,\n};\n\nexport { Flowchart } from './Flowchart.js';\nexport type { FlowchartData } from './Flowchart.js';\n","import type { ReactElement, KeyboardEvent } from 'react';\nimport { useState, useRef, useCallback } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ───────────────────────────────────────────────────\n\ninterface FileNode {\n name: string;\n annotation?: string;\n children?: FileNode[];\n}\n\nexport interface FileTreeData {\n root?: string;\n tree: FileNode[];\n defaultExpanded: boolean;\n}\n\n// ─── Icons (Unicode) ─────────────────────────────────────────\n\nfunction getFileIcon(name: string): string {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n switch (ext) {\n case 'ts':\n case 'tsx':\n return '\\u{1F1F9}'; // 🇹 — TS indicator\n case 'js':\n case 'jsx':\n return '\\u{1F1EF}'; // 🇯 — JS indicator\n case 'json':\n return '\\u{1F4CB}'; // 📋\n case 'md':\n case 'mdx':\n return '\\u{1F4DD}'; // 📝\n case 'css':\n case 'scss':\n case 'less':\n return '\\u{1F3A8}'; // 🎨\n case 'html':\n return '\\u{1F310}'; // 🌐\n case 'svg':\n case 'png':\n case 'jpg':\n case 'jpeg':\n case 'gif':\n return '\\u{1F5BC}'; // 🖼\n case 'yml':\n case 'yaml':\n return '\\u{2699}'; // ⚙\n default:\n return '\\u{1F4C4}'; // 📄\n }\n}\n\n// ─── Tree Item Component ─────────────────────────────────────\n\ninterface TreeItemProps {\n node: FileNode;\n level: number;\n defaultExpanded: boolean;\n flatIndex: number;\n focusedIndex: number;\n setSize: number;\n posInSet: number;\n onFocusChange: (index: number) => void;\n flatItems: FlatItem[];\n}\n\ninterface FlatItem {\n node: FileNode;\n level: number;\n isDir: boolean;\n}\n\nfunction TreeItem({\n node,\n level,\n defaultExpanded,\n flatIndex,\n focusedIndex,\n setSize,\n posInSet,\n onFocusChange,\n flatItems,\n}: TreeItemProps): ReactElement {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const itemRef = useRef<HTMLLIElement>(null);\n const isDir = Array.isArray(node.children) && node.children.length > 0;\n const isFocused = flatIndex === focusedIndex;\n\n const handleToggle = useCallback(() => {\n if (isDir) setExpanded((prev) => !prev);\n }, [isDir]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLLIElement>) => {\n let handled = true;\n\n switch (e.key) {\n case 'ArrowDown': {\n const next = flatIndex + 1;\n if (next < flatItems.length) onFocusChange(next);\n break;\n }\n case 'ArrowUp': {\n const prev = flatIndex - 1;\n if (prev >= 0) onFocusChange(prev);\n break;\n }\n case 'ArrowRight':\n if (isDir && !expanded) {\n setExpanded(true);\n } else if (isDir && expanded) {\n const next = flatIndex + 1;\n if (next < flatItems.length) onFocusChange(next);\n }\n break;\n case 'ArrowLeft':\n if (isDir && expanded) {\n setExpanded(false);\n } else if (level > 0) {\n // Move to parent\n for (let idx = flatIndex - 1; idx >= 0; idx--) {\n const item = flatItems[idx];\n if (item && item.level < level && item.isDir) {\n onFocusChange(idx);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n handleToggle();\n break;\n case 'Home':\n onFocusChange(0);\n break;\n case 'End':\n onFocusChange(flatItems.length - 1);\n break;\n default:\n handled = false;\n }\n\n if (handled) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n [flatIndex, flatItems, isDir, expanded, level, onFocusChange, handleToggle],\n );\n\n const icon = isDir ? (expanded ? '\\u{1F4C2}' : '\\u{1F4C1}') : getFileIcon(node.name);\n const ariaLabel = node.annotation ? `${node.name}, ${node.annotation}` : node.name;\n\n return (\n <li\n ref={itemRef}\n role=\"treeitem\"\n aria-expanded={isDir ? expanded : undefined}\n aria-label={ariaLabel}\n aria-level={level + 1}\n aria-setsize={setSize}\n aria-posinset={posInSet}\n tabIndex={isFocused ? 0 : -1}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n e.stopPropagation();\n onFocusChange(flatIndex);\n handleToggle();\n }}\n style={{\n listStyle: 'none',\n cursor: isDir ? 'pointer' : 'default',\n padding: '2px 0',\n outline: 'none',\n borderRadius: 'var(--glyph-radius-sm, 0.375rem)',\n background: isFocused ? 'var(--glyph-accent-subtle, rgba(0,212,170,0.1))' : 'transparent',\n }}\n data-flat-index={flatIndex}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.25rem',\n paddingLeft: `${level * 1.25}rem`,\n fontFamily: 'var(--glyph-font-mono, monospace)',\n fontSize: '0.875rem',\n lineHeight: '1.6',\n color: 'var(--glyph-text, #d4dae3)',\n userSelect: 'none',\n }}\n >\n <span style={{ width: '1.25rem', textAlign: 'center', flexShrink: 0 }}>{icon}</span>\n <span style={{ fontWeight: isDir ? 600 : 400 }}>{node.name}</span>\n {node.annotation && (\n <span\n style={{\n fontSize: '0.75rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n background: 'var(--glyph-surface, #0f1526)',\n padding: '0 0.375rem',\n borderRadius: 'var(--glyph-radius-sm, 0.375rem)',\n marginLeft: '0.25rem',\n }}\n >\n {node.annotation}\n </span>\n )}\n </div>\n {isDir && expanded && node.children && (\n <ul role=\"group\" style={{ margin: 0, padding: 0 }}>\n {node.children.map((child, childIdx) => {\n const childFlatIndex = getChildFlatIndex(flatItems, flatIndex, childIdx, node.children);\n return (\n <TreeItem\n key={child.name}\n node={child}\n level={level + 1}\n defaultExpanded={defaultExpanded}\n flatIndex={childFlatIndex}\n focusedIndex={focusedIndex}\n setSize={node.children?.length ?? 0}\n posInSet={childIdx + 1}\n onFocusChange={onFocusChange}\n flatItems={flatItems}\n />\n );\n })}\n </ul>\n )}\n </li>\n );\n}\n\n// ─── Flat Index Helpers ──────────────────────────────────────\n\nfunction flattenTree(nodes: FileNode[], level: number): FlatItem[] {\n const result: FlatItem[] = [];\n for (const node of nodes) {\n const isDir = Array.isArray(node.children) && node.children.length > 0;\n result.push({ node, level, isDir });\n if (isDir && node.children) {\n result.push(...flattenTree(node.children, level + 1));\n }\n }\n return result;\n}\n\nfunction getChildFlatIndex(\n flatItems: FlatItem[],\n parentFlatIndex: number,\n childIdx: number,\n children: FileNode[] | undefined,\n): number {\n if (!children) return parentFlatIndex + 1;\n // Find the flat index of the nth child after parentFlatIndex\n let count = 0;\n for (let i = parentFlatIndex + 1; i < flatItems.length; i++) {\n const item = flatItems[i];\n if (!item) continue;\n // Check if this item is a direct child (one of the parent's children)\n if (item.node === children[count]) {\n if (count === childIdx) return i;\n count++;\n }\n }\n return parentFlatIndex + childIdx + 1;\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function FileTree({ data }: GlyphComponentProps<FileTreeData>): ReactElement {\n const [focusedIndex, setFocusedIndex] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const flatItems = flattenTree(data.tree, data.root ? 1 : 0);\n\n const handleFocusChange = useCallback((index: number) => {\n setFocusedIndex(index);\n // Focus the corresponding element\n const container = containerRef.current;\n if (!container) return;\n const el = container.querySelector<HTMLElement>(`[data-flat-index=\"${String(index)}\"]`);\n el?.focus();\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"glyph-filetree-container\"\n style={{\n border: '1px solid var(--glyph-border, #1a2035)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n padding: '0.75rem',\n background: 'var(--glyph-surface, #0f1526)',\n }}\n >\n <ul role=\"tree\" aria-label={data.root ?? 'File tree'} style={{ margin: 0, padding: 0 }}>\n {data.root && (\n <li\n role=\"treeitem\"\n aria-expanded={true}\n aria-level={1}\n aria-setsize={1}\n aria-posinset={1}\n style={{\n listStyle: 'none',\n padding: '2px 0',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.25rem',\n fontFamily: 'var(--glyph-font-mono, monospace)',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: 'var(--glyph-heading, #edf0f5)',\n }}\n >\n <span style={{ width: '1.25rem', textAlign: 'center' }}>{'\\u{1F4C2}'}</span>\n {data.root}\n </div>\n <ul role=\"group\" style={{ margin: 0, padding: 0 }}>\n {data.tree.map((node, idx) => {\n const flatIndex = getFlatIndexForTopLevel(flatItems, idx, data.tree);\n return (\n <TreeItem\n key={node.name}\n node={node}\n level={1}\n defaultExpanded={data.defaultExpanded}\n flatIndex={flatIndex}\n focusedIndex={focusedIndex}\n setSize={data.tree.length}\n posInSet={idx + 1}\n onFocusChange={handleFocusChange}\n flatItems={flatItems}\n />\n );\n })}\n </ul>\n </li>\n )}\n {!data.root &&\n data.tree.map((node, idx) => {\n const flatIndex = getFlatIndexForTopLevel(flatItems, idx, data.tree);\n return (\n <TreeItem\n key={node.name}\n node={node}\n level={0}\n defaultExpanded={data.defaultExpanded}\n flatIndex={flatIndex}\n focusedIndex={focusedIndex}\n setSize={data.tree.length}\n posInSet={idx + 1}\n onFocusChange={handleFocusChange}\n flatItems={flatItems}\n />\n );\n })}\n </ul>\n </div>\n );\n}\n\nfunction getFlatIndexForTopLevel(flatItems: FlatItem[], idx: number, tree: FileNode[]): number {\n let count = 0;\n for (let i = 0; i < flatItems.length; i++) {\n const item = flatItems[i];\n if (item && item.node === tree[count]) {\n if (count === idx) return i;\n count++;\n }\n }\n return idx;\n}\n","import { filetreeSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { FileTree } from './FileTree.js';\nimport type { FileTreeData } from './FileTree.js';\n\nexport const fileTreeDefinition: GlyphComponentDefinition<FileTreeData> = {\n type: 'ui:filetree',\n schema: filetreeSchema as unknown as GlyphComponentDefinition<FileTreeData>['schema'],\n render: FileTree,\n};\n\nexport { FileTree } from './FileTree.js';\nexport type { FileTreeData } from './FileTree.js';\n","import type { ReactElement } from 'react';\n\n// ─── Layout Constants ────────────────────────────────────────\n\nexport const ACTOR_WIDTH = 120;\nexport const ACTOR_HEIGHT = 40;\nexport const ACTOR_GAP = 160;\nexport const TOP_MARGIN = 20;\nexport const MSG_SPACING = 50;\nexport const SELF_ARC_WIDTH = 30;\nexport const SELF_ARC_HEIGHT = 30;\nexport const BOTTOM_PADDING = 40;\nexport const SIDE_PADDING = 40;\nexport const ARROW_SIZE = 8;\n\n// ─── Render helpers ──────────────────────────────────────────\n\ninterface Actor {\n id: string;\n label: string;\n}\n\nexport function renderActorBox(\n actor: Actor,\n cx: number,\n y: number,\n keyPrefix: string,\n width = ACTOR_WIDTH,\n height = ACTOR_HEIGHT,\n fontSize = '13px',\n): ReactElement {\n return (\n <g key={`${keyPrefix}-${actor.id}`}>\n <rect\n x={cx - width / 2}\n y={y}\n width={width}\n height={height}\n rx={4}\n ry={4}\n fill=\"var(--glyph-surface-raised, #162038)\"\n stroke=\"var(--glyph-border-strong, #2a3550)\"\n strokeWidth={1.5}\n />\n <text\n x={cx}\n y={y + height / 2}\n dy=\"0.35em\"\n textAnchor=\"middle\"\n fontSize={fontSize}\n fontFamily=\"Inter, system-ui, sans-serif\"\n fontWeight={600}\n fill=\"var(--glyph-text, #d4dae3)\"\n >\n {actor.label}\n </text>\n </g>\n );\n}\n\nexport function renderSelfMessage(\n x: number,\n y: number,\n label: string,\n idx: number,\n fontSize = '12px',\n): ReactElement {\n return (\n <g key={`msg-${idx}`}>\n <path\n d={`M ${x} ${y} L ${x + SELF_ARC_WIDTH} ${y} L ${x + SELF_ARC_WIDTH} ${y + SELF_ARC_HEIGHT} L ${x} ${y + SELF_ARC_HEIGHT}`}\n fill=\"none\"\n stroke=\"var(--glyph-text, #d4dae3)\"\n strokeWidth={1.5}\n markerEnd=\"url(#seq-arrow-solid)\"\n />\n <text\n x={x + SELF_ARC_WIDTH + 6}\n y={y + SELF_ARC_HEIGHT / 2}\n dy=\"0.35em\"\n fontSize={fontSize}\n fontFamily=\"Inter, system-ui, sans-serif\"\n fill=\"var(--glyph-text, #d4dae3)\"\n >\n {label}\n </text>\n </g>\n );\n}\n\nexport function renderStandardMessage(\n fromX: number,\n toX: number,\n y: number,\n label: string,\n isDashed: boolean,\n idx: number,\n fontSize = '12px',\n): ReactElement {\n const markerId = isDashed ? 'seq-arrow-dashed' : 'seq-arrow-solid';\n const midX = (fromX + toX) / 2;\n\n return (\n <g key={`msg-${idx}`}>\n <line\n x1={fromX}\n y1={y}\n x2={toX}\n y2={y}\n stroke={isDashed ? 'var(--glyph-text-muted, #6b7a94)' : 'var(--glyph-text, #d4dae3)'}\n strokeWidth={1.5}\n strokeDasharray={isDashed ? '6,4' : undefined}\n markerEnd={`url(#${markerId})`}\n />\n <text\n x={midX}\n y={y - 8}\n textAnchor=\"middle\"\n fontSize={fontSize}\n fontFamily=\"Inter, system-ui, sans-serif\"\n fill=\"var(--glyph-text, #d4dae3)\"\n >\n {label}\n </text>\n </g>\n );\n}\n","import type { CSSProperties, ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport {\n ACTOR_WIDTH,\n ACTOR_HEIGHT,\n ACTOR_GAP,\n TOP_MARGIN,\n MSG_SPACING,\n BOTTOM_PADDING,\n SIDE_PADDING,\n ARROW_SIZE,\n renderActorBox,\n renderSelfMessage,\n renderStandardMessage,\n} from './helpers.js';\n\n// ─── Types ───────────────────────────────────────────────────\n\ntype MessageType = 'message' | 'reply' | 'self';\n\ninterface Actor {\n id: string;\n label: string;\n}\n\ninterface Message {\n from: string;\n to: string;\n label: string;\n type: MessageType;\n}\n\nexport interface SequenceData {\n title?: string;\n actors: Actor[];\n messages: Message[];\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Sequence({ data, container }: GlyphComponentProps<SequenceData>): ReactElement {\n const actorCount = data.actors.length;\n const messageCount = data.messages.length;\n const isCompact = container.tier === 'compact';\n\n // Adjust layout constants for compact containers\n const effectiveActorGap = isCompact ? Math.round(ACTOR_GAP * 0.6) : ACTOR_GAP;\n const effectiveActorWidth = isCompact ? Math.round(ACTOR_WIDTH * 0.7) : ACTOR_WIDTH;\n const effectiveActorHeight = isCompact ? Math.round(ACTOR_HEIGHT * 0.85) : ACTOR_HEIGHT;\n const actorFontSize = isCompact ? '11px' : '13px';\n const msgFontSize = isCompact ? '10px' : '12px';\n\n // Build actor x-positions\n const actorX = new Map<string, number>();\n for (let i = 0; i < actorCount; i++) {\n const actor = data.actors[i];\n if (actor) {\n actorX.set(actor.id, SIDE_PADDING + i * effectiveActorGap + effectiveActorWidth / 2);\n }\n }\n\n const svgWidth = SIDE_PADDING * 2 + (actorCount - 1) * effectiveActorGap + effectiveActorWidth;\n const actorBoxY = TOP_MARGIN;\n const lifelineStartY = actorBoxY + effectiveActorHeight;\n const firstMsgY = lifelineStartY + MSG_SPACING;\n const lastMsgY = firstMsgY + (messageCount - 1) * MSG_SPACING;\n const svgHeight = lastMsgY + BOTTOM_PADDING + effectiveActorHeight;\n\n const ariaLabel = data.title\n ? `${data.title}: sequence diagram with ${actorCount} actors and ${messageCount} messages`\n : `Sequence diagram with ${actorCount} actors and ${messageCount} messages`;\n\n return (\n <div className=\"glyph-sequence-container\">\n {data.title && (\n <div\n style={{\n fontFamily: 'var(--glyph-font-heading, Inter, system-ui, sans-serif)',\n fontWeight: 600,\n fontSize: '1rem',\n color: 'var(--glyph-heading, #edf0f5)',\n marginBottom: '0.5rem',\n }}\n >\n {data.title}\n </div>\n )}\n <svg\n role=\"img\"\n aria-label={ariaLabel}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n width=\"100%\"\n style={{ minHeight: 200, maxHeight: 800, display: 'block' }}\n >\n {/* Arrow markers */}\n <defs>\n <marker\n id=\"seq-arrow-solid\"\n viewBox=\"0 0 10 10\"\n refX={10}\n refY={5}\n markerWidth={ARROW_SIZE}\n markerHeight={ARROW_SIZE}\n orient=\"auto-start-reverse\"\n >\n <path d=\"M 0 0 L 10 5 L 0 10 Z\" fill=\"var(--glyph-text, #d4dae3)\" />\n </marker>\n <marker\n id=\"seq-arrow-dashed\"\n viewBox=\"0 0 10 10\"\n refX={10}\n refY={5}\n markerWidth={ARROW_SIZE}\n markerHeight={ARROW_SIZE}\n orient=\"auto-start-reverse\"\n >\n <path d=\"M 0 0 L 10 5 L 0 10 Z\" fill=\"var(--glyph-text-muted, #6b7a94)\" />\n </marker>\n </defs>\n\n {/* Actor boxes (top) */}\n {data.actors.map((actor) => {\n const cx = actorX.get(actor.id) ?? 0;\n return renderActorBox(\n actor,\n cx,\n actorBoxY,\n 'actor-top',\n effectiveActorWidth,\n effectiveActorHeight,\n actorFontSize,\n );\n })}\n\n {/* Lifelines */}\n {data.actors.map((actor) => {\n const cx = actorX.get(actor.id) ?? 0;\n return (\n <line\n key={`lifeline-${actor.id}`}\n x1={cx}\n y1={lifelineStartY}\n x2={cx}\n y2={lastMsgY + BOTTOM_PADDING / 2}\n stroke=\"var(--glyph-border, #1a2035)\"\n strokeWidth={1}\n strokeDasharray=\"6,4\"\n />\n );\n })}\n\n {/* Actor boxes (bottom) */}\n {data.actors.map((actor) => {\n const cx = actorX.get(actor.id) ?? 0;\n const bottomY = lastMsgY + BOTTOM_PADDING / 2;\n return renderActorBox(\n actor,\n cx,\n bottomY,\n 'actor-bottom',\n effectiveActorWidth,\n effectiveActorHeight,\n actorFontSize,\n );\n })}\n\n {/* Messages */}\n {data.messages.map((msg, idx) => {\n const y = firstMsgY + idx * MSG_SPACING;\n const fromX = actorX.get(msg.from) ?? 0;\n const toX = actorX.get(msg.to) ?? 0;\n\n if (msg.type === 'self') {\n return renderSelfMessage(fromX, y, msg.label, idx, msgFontSize);\n }\n\n return renderStandardMessage(\n fromX,\n toX,\n y,\n msg.label,\n msg.type === 'reply',\n idx,\n msgFontSize,\n );\n })}\n </svg>\n\n {/* Hidden accessible table for screen readers */}\n <table className=\"sr-only\" aria-label=\"Sequence data\" style={SR_ONLY_STYLE}>\n <caption>Sequence messages in order</caption>\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">From</th>\n <th scope=\"col\">To</th>\n <th scope=\"col\">Message</th>\n <th scope=\"col\">Type</th>\n </tr>\n </thead>\n <tbody>\n {data.messages.map((msg, idx) => {\n const fromActor = data.actors.find((a) => a.id === msg.from);\n const toActor = data.actors.find((a) => a.id === msg.to);\n return (\n <tr key={idx}>\n <td>{idx + 1}</td>\n <td>{fromActor?.label ?? msg.from}</td>\n <td>{toActor?.label ?? msg.to}</td>\n <td>{msg.label}</td>\n <td>{msg.type}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import { sequenceSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Sequence } from './Sequence.js';\nimport type { SequenceData } from './Sequence.js';\n\nexport const sequenceDefinition: GlyphComponentDefinition<SequenceData> = {\n type: 'ui:sequence',\n schema: sequenceSchema,\n render: Sequence,\n};\n\nexport { Sequence } from './Sequence.js';\nexport type { SequenceData } from './Sequence.js';\n","// ─── Architecture Layout (ELK.js) ───────────────────────────\n\nexport interface ArchitectureNode {\n id: string;\n label: string;\n icon?: string;\n type?: 'zone';\n children?: ArchitectureNode[];\n style?: Record<string, string>;\n}\n\nexport interface ArchitectureEdge {\n from: string;\n to: string;\n label?: string;\n type?: 'sync' | 'async' | 'data';\n style?: Record<string, string>;\n}\n\nexport interface ArchitectureData {\n title?: string;\n children: ArchitectureNode[];\n edges: ArchitectureEdge[];\n layout?: 'top-down' | 'left-right' | 'bottom-up';\n}\n\n// ─── Positioned Types ───────────────────────────────────────\n\nexport interface PositionedArchNode {\n id: string;\n label: string;\n icon?: string;\n x: number;\n y: number;\n width: number;\n height: number;\n zoneId?: string;\n}\n\nexport interface PositionedZone {\n id: string;\n label: string;\n x: number;\n y: number;\n width: number;\n height: number;\n depth: number;\n}\n\nexport interface PositionedArchEdge {\n from: string;\n to: string;\n label?: string;\n type?: 'sync' | 'async' | 'data';\n style?: Record<string, string>;\n points: { x: number; y: number }[];\n}\n\nexport interface ArchitectureLayout {\n nodes: PositionedArchNode[];\n zones: PositionedZone[];\n edges: PositionedArchEdge[];\n width: number;\n height: number;\n}\n\n// ─── Constants ──────────────────────────────────────────────\n\nconst NODE_WIDTH = 120;\nconst NODE_HEIGHT_WITH_ICON = 60;\nconst NODE_HEIGHT_NO_ICON = 40;\nconst ZONE_PADDING_TOP = 30;\nconst ZONE_PADDING_SIDES = 15;\nconst ZONE_PADDING_BOTTOM = 15;\nconst LAYOUT_PADDING = 20;\n\n// ─── Direction Mapping ──────────────────────────────────────\n\nconst DIRECTION_MAP: Record<string, string> = {\n 'top-down': 'DOWN',\n 'left-right': 'RIGHT',\n 'bottom-up': 'UP',\n};\n\n// ─── ELK Types ──────────────────────────────────────────────\n\ninterface ElkNode {\n id: string;\n width?: number;\n height?: number;\n children?: ElkNode[];\n labels?: { text: string }[];\n layoutOptions?: Record<string, string>;\n}\n\ninterface ElkEdge {\n id: string;\n sources: string[];\n targets: string[];\n labels?: { text: string }[];\n}\n\ninterface ElkRoot {\n id: string;\n children: ElkNode[];\n edges: ElkEdge[];\n layoutOptions: Record<string, string>;\n}\n\ninterface ElkPositionedNode {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n children?: ElkPositionedNode[];\n labels?: { text: string }[];\n}\n\ninterface ElkPositionedEdge {\n id: string;\n sections?: {\n startPoint: { x: number; y: number };\n endPoint: { x: number; y: number };\n bendPoints?: { x: number; y: number }[];\n }[];\n}\n\ninterface ElkPositionedRoot {\n width?: number;\n height?: number;\n children?: ElkPositionedNode[];\n edges?: ElkPositionedEdge[];\n}\n\n// ─── Build ELK Graph ────────────────────────────────────────\n\nfunction buildElkNode(node: ArchitectureNode): ElkNode {\n if (node.type === 'zone' && node.children?.length) {\n return {\n id: node.id,\n labels: [{ text: node.label }],\n children: node.children.map(buildElkNode),\n layoutOptions: {\n 'elk.padding': `[top=${ZONE_PADDING_TOP},left=${ZONE_PADDING_SIDES},bottom=${ZONE_PADDING_BOTTOM},right=${ZONE_PADDING_SIDES}]`,\n },\n };\n }\n return {\n id: node.id,\n width: NODE_WIDTH,\n height: node.icon ? NODE_HEIGHT_WITH_ICON : NODE_HEIGHT_NO_ICON,\n labels: [{ text: node.label }],\n };\n}\n\nfunction buildElkGraph(data: ArchitectureData): ElkRoot {\n const direction = DIRECTION_MAP[data.layout ?? 'top-down'] ?? 'DOWN';\n return {\n id: 'root',\n children: data.children.map(buildElkNode),\n edges: data.edges.map((e, i) => ({\n id: `e${i}`,\n sources: [e.from],\n targets: [e.to],\n labels: e.label ? [{ text: e.label }] : [],\n })),\n layoutOptions: {\n 'elk.algorithm': 'layered',\n 'elk.hierarchyHandling': 'INCLUDE_CHILDREN',\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.direction': direction,\n 'elk.spacing.nodeNode': '20',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '30',\n 'elk.spacing.edgeNode': '10',\n 'elk.spacing.edgeEdge': '8',\n },\n };\n}\n\n// ─── Extract Positioned Results ─────────────────────────────\n\nfunction collectNodes(\n elkNode: ElkPositionedNode,\n nodeMap: Map<string, ArchitectureNode>,\n offsetX: number,\n offsetY: number,\n nodes: PositionedArchNode[],\n zones: PositionedZone[],\n depth: number,\n zoneId?: string,\n): void {\n const absX = offsetX + (elkNode.x ?? 0);\n const absY = offsetY + (elkNode.y ?? 0);\n const original = nodeMap.get(elkNode.id);\n\n if (original?.type === 'zone' && elkNode.children?.length) {\n zones.push({\n id: elkNode.id,\n label: original.label,\n x: absX,\n y: absY,\n width: elkNode.width,\n height: elkNode.height,\n depth,\n });\n\n for (const child of elkNode.children) {\n collectNodes(child, nodeMap, absX, absY, nodes, zones, depth + 1, elkNode.id);\n }\n } else {\n nodes.push({\n id: elkNode.id,\n label: original?.label ?? elkNode.id,\n icon: original?.icon,\n x: absX,\n y: absY,\n width: elkNode.width,\n height: elkNode.height,\n zoneId,\n });\n }\n}\n\nfunction flattenNodeMap(children: ArchitectureNode[], map: Map<string, ArchitectureNode>): void {\n for (const node of children) {\n map.set(node.id, node);\n if (node.children) {\n flattenNodeMap(node.children, map);\n }\n }\n}\n\n// ─── Ancestor Path Utilities ────────────────────────────────\n\n/** Build a map from each node ID to its chain of ancestor zone IDs (root-first). */\nfunction buildAncestorMap(\n children: ArchitectureNode[],\n ancestors: string[],\n map: Map<string, string[]>,\n): void {\n for (const node of children) {\n map.set(node.id, [...ancestors]);\n if (node.type === 'zone' && node.children) {\n buildAncestorMap(node.children, [...ancestors, node.id], map);\n }\n }\n}\n\n/** Find the lowest common ancestor zone ID of two nodes. Returns undefined for root. */\nfunction findLCA(ancestorsA: string[], ancestorsB: string[]): string | undefined {\n let lca: string | undefined;\n const len = Math.min(ancestorsA.length, ancestorsB.length);\n for (let i = 0; i < len; i++) {\n if (ancestorsA[i] === ancestorsB[i]) {\n lca = ancestorsA[i];\n } else {\n break;\n }\n }\n return lca;\n}\n\nfunction extractEdges(\n elkEdges: ElkPositionedEdge[] | undefined,\n dataEdges: ArchitectureEdge[],\n ancestorMap: Map<string, string[]>,\n zoneAbsOffsets: Map<string, { x: number; y: number }>,\n): PositionedArchEdge[] {\n if (!elkEdges) return [];\n return elkEdges.map((elkEdge, i) => {\n const dataEdge = dataEdges[i];\n if (!dataEdge) {\n return { from: '', to: '', points: [] };\n }\n\n // Determine the coordinate offset for this edge.\n // ELK computes edge section coordinates relative to the LCA of source/target.\n const srcAncestors = ancestorMap.get(dataEdge.from) ?? [];\n const tgtAncestors = ancestorMap.get(dataEdge.to) ?? [];\n const lca = findLCA(srcAncestors, tgtAncestors);\n const offset = lca ? (zoneAbsOffsets.get(lca) ?? { x: 0, y: 0 }) : { x: 0, y: 0 };\n\n const points: { x: number; y: number }[] = [];\n if (elkEdge.sections) {\n for (const section of elkEdge.sections) {\n points.push({ x: section.startPoint.x + offset.x, y: section.startPoint.y + offset.y });\n if (section.bendPoints) {\n for (const bp of section.bendPoints) {\n points.push({ x: bp.x + offset.x, y: bp.y + offset.y });\n }\n }\n points.push({ x: section.endPoint.x + offset.x, y: section.endPoint.y + offset.y });\n }\n }\n return {\n from: dataEdge.from,\n to: dataEdge.to,\n label: dataEdge.label,\n type: dataEdge.type,\n style: dataEdge.style,\n points,\n };\n });\n}\n\n// ─── Public API ─────────────────────────────────────────────\n\nexport async function computeArchitectureLayout(\n data: ArchitectureData,\n): Promise<ArchitectureLayout> {\n const ELK = await import('elkjs/lib/elk.bundled.js');\n const elk = new ELK.default();\n\n const elkGraph = buildElkGraph(data);\n const result = (await elk.layout(\n elkGraph as unknown as Parameters<typeof elk.layout>[0],\n )) as unknown as ElkPositionedRoot;\n\n const nodeMap = new Map<string, ArchitectureNode>();\n flattenNodeMap(data.children, nodeMap);\n\n const nodes: PositionedArchNode[] = [];\n const zones: PositionedZone[] = [];\n\n if (result.children) {\n for (const child of result.children) {\n collectNodes(child, nodeMap, 0, 0, nodes, zones, 0);\n }\n }\n\n // Build zone absolute offset map (needed for edge coordinate correction)\n const zoneAbsOffsets = new Map<string, { x: number; y: number }>();\n for (const z of zones) {\n zoneAbsOffsets.set(z.id, { x: z.x, y: z.y });\n }\n\n // Build ancestor map for LCA computation\n const ancestorMap = new Map<string, string[]>();\n buildAncestorMap(data.children, [], ancestorMap);\n\n const edges = extractEdges(result.edges, data.edges, ancestorMap, zoneAbsOffsets);\n\n // Compute bounding box\n let maxX = 0;\n let maxY = 0;\n for (const n of nodes) {\n const right = n.x + n.width;\n const bottom = n.y + n.height;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n for (const z of zones) {\n const right = z.x + z.width;\n const bottom = z.y + z.height;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n }\n for (const e of edges) {\n for (const p of e.points) {\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n }\n\n return {\n nodes,\n zones,\n edges,\n width: maxX + LAYOUT_PADDING,\n height: maxY + LAYOUT_PADDING,\n };\n}\n","import type * as d3 from 'd3';\n\n// ─── SVG Icon Paths (24x24 viewBox) ────────────────────────\n\nexport const ICON_PATHS: Record<string, string> = {\n // Rack server\n server: 'M4 4h16v4H4zm0 6h16v4H4zm0 6h16v4H4zM6 6h1v0.5H6zm0 6h1v0.5H6zm0 6h1v0.5H6z',\n // Cylinder\n database:\n 'M12 2C7.58 2 4 3.34 4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5c0-1.66-3.58-3-8-3zm0 2c3.87 0 6 1.12 6 1s-2.13 1-6 1-6-0.12-6-1 2.13-1 6-1zM6 7.26C7.53 7.83 9.64 8 12 8s4.47-0.17 6-0.74V10c0 0.88-2.13 2-6 2s-6-1.12-6-2V7.26zm0 5C7.53 12.83 9.64 13 12 13s4.47-0.17 6-0.74V15c0 0.88-2.13 2-6 2s-6-1.12-6-2v-2.74zM12 20c-3.87 0-6-1.12-6-2v-2.74C7.53 15.83 9.64 16 12 16s4.47-0.17 6-0.74V18c0 0.88-2.13 2-6 2z',\n // Horizontal arrows/bars\n queue: 'M2 7h14l-4-3.5M2 12h18l-4-3.5M2 17h14l-4-3.5',\n // Lightning bolt\n cache: 'M13 2L3 14h7l-2 8 10-12h-7z',\n // Branching arrows\n loadbalancer: 'M12 2v6m0 0l-6 6m6-6l6 6m-6-6v0M6 14v4h4m4 0h4v-4M12 8a2 2 0 100-4 2 2 0 000 4z',\n // Lambda symbol\n function: 'M7 4l5 16M12 4l5 16M5 10h14M5 14h14',\n // Disk/bucket\n storage: 'M4 6a8 3 0 0116 0v12a8 3 0 01-16 0V6zm0 0a8 3 0 0016 0',\n // Gateway arch\n gateway: 'M3 21V8a9 9 0 0118 0v13M7 21v-8a5 5 0 0110 0v8M11 3v2m-4 1l1 1m8-1l-1 1',\n // Person silhouette\n user: 'M12 4a4 4 0 110 8 4 4 0 010-8zm0 10c-4.42 0-8 1.79-8 4v2h16v-2c0-2.21-3.58-4-8-4z',\n // Cloud shape\n cloud:\n 'M19.35 10.04A7.49 7.49 0 0012 4C9.11 4 6.6 5.64 5.35 8.04A5.994 5.994 0 000 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z',\n // Box with lid\n container: 'M2 8l10-5 10 5v10l-10 5-10-5V8zm10-5v20M2 8l10 5 10-5',\n // Connected nodes\n network:\n 'M12 2a2 2 0 110 4 2 2 0 010-4zM4 10a2 2 0 110 4 2 2 0 010-4zM20 10a2 2 0 110 4 2 2 0 010-4zM12 18a2 2 0 110 4 2 2 0 010-4zM12 6v12M4 12h16M6 11l5-5M18 11l-5-5M6 13l5 5M18 13l-5 5',\n};\n\n// ─── Render Helper ──────────────────────────────────────────\n\nexport function renderIcon(\n g: d3.Selection<SVGGElement, unknown, null, undefined>,\n iconName: string,\n x: number,\n y: number,\n size = 20,\n): void {\n const d = ICON_PATHS[iconName];\n if (!d) return;\n\n const iconG = g\n .append('g')\n .attr('transform', `translate(${x - size / 2}, ${y - size / 2}) scale(${size / 24})`);\n\n iconG\n .append('path')\n .attr('d', d)\n .attr('fill', 'none')\n .attr('stroke', 'var(--glyph-icon-stroke, #fff)')\n .attr('stroke-width', 'var(--glyph-icon-stroke-width, 1.5)')\n .attr('stroke-linecap', 'round')\n .attr('stroke-linejoin', 'round');\n}\n","import * as d3 from 'd3';\nimport type { ArchitectureLayout } from './layout.js';\nimport { renderIcon } from './icons.js';\n\n// ─── Node Color Palette (Oblivion) ─────────────────────────\n\nconst NODE_PALETTE = [\n '#00d4aa',\n '#b44dff',\n '#22c55e',\n '#e040fb',\n '#00e5ff',\n '#84cc16',\n '#f472b6',\n '#fb923c',\n '#818cf8',\n '#38bdf8',\n];\n\n// ─── Zone Depth Colors ──────────────────────────────────────\n\nfunction zoneBackground(depth: number): string {\n const alphas = [0.06, 0.1, 0.14, 0.18];\n const alpha = alphas[Math.min(depth, alphas.length - 1)] ?? 0.18;\n return `rgba(0,212,170,${alpha})`;\n}\n\n// ─── Theme Variable Helper ──────────────────────────────────\n\nfunction getThemeVar(container: Element, varName: string, fallback: string): string {\n return getComputedStyle(container).getPropertyValue(varName).trim() || fallback;\n}\n\n// ─── Arrow Marker ID ────────────────────────────────────────\n\nconst ARROW_MARKER_ID = 'glyph-arch-arrowhead';\n\n// ─── Render Function ────────────────────────────────────────\n\nexport function renderArchitecture(svgElement: SVGSVGElement, layout: ArchitectureLayout): void {\n const svg = d3.select(svgElement);\n svg.selectAll('*').remove();\n\n const width = Math.max(layout.width, 200);\n const height = Math.max(layout.height, 200);\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n // Defs: arrow marker\n const defs = svg.append('defs');\n defs\n .append('marker')\n .attr('id', ARROW_MARKER_ID)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 10)\n .attr('refY', 5)\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 Z')\n .attr('fill', 'var(--glyph-edge-color, #6b7a94)');\n\n // Read theme variables from the SVG's parent container for attrs that\n // don't support CSS var() (rx, ry, opacity).\n const container = svgElement.parentElement ?? svgElement;\n const nodeRadius = getThemeVar(container, '--glyph-node-radius', '3');\n const nodeStrokeWidth = getThemeVar(container, '--glyph-node-stroke-width', '1.5');\n const nodeFillOpacity = getThemeVar(container, '--glyph-node-fill-opacity', '0.85');\n\n // Root group for zoom/pan\n const root = svg.append('g').attr('class', 'glyph-architecture-root');\n\n // Zoom behavior\n const zoomBehavior = d3\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n root.attr('transform', event.transform.toString());\n });\n\n svg.call(zoomBehavior);\n\n // ─── Zones (back to front, outermost first) ─────────────\n\n const sortedZones = [...layout.zones].sort((a, b) => a.depth - b.depth);\n const zoneGroup = root.append('g').attr('class', 'glyph-architecture-zones');\n\n for (const zone of sortedZones) {\n const zoneG = zoneGroup.append('g').attr('class', 'glyph-architecture-zone');\n\n zoneG\n .append('rect')\n .attr('x', zone.x)\n .attr('y', zone.y)\n .attr('width', zone.width)\n .attr('height', zone.height)\n .attr('rx', nodeRadius)\n .attr('ry', nodeRadius)\n .attr('fill', zoneBackground(zone.depth))\n .attr('stroke', 'var(--glyph-accent-muted, #1a4a3a)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '6,3');\n\n zoneG\n .append('text')\n .attr('x', zone.x + 10)\n .attr('y', zone.y + 18)\n .attr('font-size', '12px')\n .attr('font-weight', 'bold')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-text-muted, #7a8599)')\n .text(zone.label);\n }\n\n // ─── Edges (orthogonal polylines) ─────────────────────────\n\n const edgeGroup = root.append('g').attr('class', 'glyph-architecture-edges');\n\n for (const edge of layout.edges) {\n if (edge.points.length === 0) continue;\n\n const edgeG = edgeGroup.append('g').attr('class', 'glyph-architecture-edge');\n\n const lineGen = d3\n .line<{ x: number; y: number }>()\n .x((d) => d.x)\n .y((d) => d.y);\n\n const strokeWidth = edge.type === 'data' ? 2.5 : 1.5;\n const dashArray = edge.type === 'async' ? '5,5' : null;\n\n edgeG\n .append('path')\n .attr('d', lineGen(edge.points) ?? '')\n .attr('fill', 'none')\n .attr('stroke', edge.style?.['stroke'] ?? 'var(--glyph-edge-color, #6b7a94)')\n .attr('stroke-width', edge.style?.['stroke-width'] ?? String(strokeWidth))\n .attr('marker-end', `url(#${ARROW_MARKER_ID})`)\n .attr('stroke-dasharray', dashArray);\n\n if (edge.label && edge.points.length > 1) {\n // Compute geometric midpoint along the polyline path\n let totalLen = 0;\n const segments: number[] = [];\n for (let i = 1; i < edge.points.length; i++) {\n const prev = edge.points[i - 1];\n const curr = edge.points[i];\n if (prev && curr) {\n const dx = curr.x - prev.x;\n const dy = curr.y - prev.y;\n const len = Math.sqrt(dx * dx + dy * dy);\n segments.push(len);\n totalLen += len;\n }\n }\n let remaining = totalLen / 2;\n let labelX = edge.points[0]?.x ?? 0;\n let labelY = edge.points[0]?.y ?? 0;\n for (let i = 0; i < segments.length; i++) {\n const segLen = segments[i] ?? 0;\n const prev = edge.points[i];\n const curr = edge.points[i + 1];\n if (prev && curr) {\n if (remaining <= segLen && segLen > 0) {\n const t = remaining / segLen;\n labelX = prev.x + t * (curr.x - prev.x);\n labelY = prev.y + t * (curr.y - prev.y);\n break;\n }\n remaining -= segLen;\n }\n }\n edgeG\n .append('text')\n .attr('x', labelX)\n .attr('y', labelY - 8)\n .attr('text-anchor', 'middle')\n .attr('font-size', '11px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-text-muted, #7a8599)')\n .text(edge.label);\n }\n }\n\n // ─── Nodes ────────────────────────────────────────────────\n\n const nodeGroup = root.append('g').attr('class', 'glyph-architecture-nodes');\n\n for (let nodeIdx = 0; nodeIdx < layout.nodes.length; nodeIdx++) {\n const node = layout.nodes[nodeIdx];\n if (!node) continue;\n const nodeG = nodeGroup.append('g').attr('class', 'glyph-architecture-node');\n\n // Pick color by node index for visual variety\n const color = NODE_PALETTE[nodeIdx % NODE_PALETTE.length] ?? '#00d4aa';\n\n // Node rect\n const defaultStroke =\n d3.color(color)?.darker(0.5)?.toString() ?? 'var(--glyph-edge-color, #6b7a94)';\n\n nodeG\n .append('rect')\n .attr('x', node.x)\n .attr('y', node.y)\n .attr('width', node.width)\n .attr('height', node.height)\n .attr('rx', nodeRadius)\n .attr('ry', nodeRadius)\n .attr('fill', color)\n .attr('stroke', defaultStroke)\n .attr('stroke-width', nodeStrokeWidth)\n .attr('opacity', nodeFillOpacity);\n\n if (node.icon) {\n // Icon in upper portion\n renderIcon(nodeG, node.icon, node.x + node.width / 2, node.y + 20, 18);\n // Label below icon\n nodeG\n .append('text')\n .attr('x', node.x + node.width / 2)\n .attr('y', node.y + node.height - 10)\n .attr('text-anchor', 'middle')\n .attr('font-size', '11px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-node-label-color, #fff)')\n .attr('pointer-events', 'none')\n .text(node.label);\n } else {\n // Label centered\n nodeG\n .append('text')\n .attr('x', node.x + node.width / 2)\n .attr('y', node.y + node.height / 2)\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .attr('font-size', '13px')\n .attr('font-family', 'Inter, system-ui, sans-serif')\n .attr('fill', 'var(--glyph-node-label-color, #fff)')\n .attr('pointer-events', 'none')\n .text(node.label);\n }\n }\n}\n","import type { CSSProperties, ReactElement } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport { computeArchitectureLayout } from './layout.js';\nimport type { ArchitectureData, ArchitectureLayout as ArchLayoutResult } from './layout.js';\nimport { renderArchitecture } from './render.js';\n\nexport type { ArchitectureData };\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Architecture({\n data,\n container,\n}: GlyphComponentProps<ArchitectureData>): ReactElement {\n const svgRef = useRef<SVGSVGElement>(null);\n const [layout, setLayout] = useState<ArchLayoutResult | null>(null);\n\n // Async ELK layout\n useEffect(() => {\n let cancelled = false;\n computeArchitectureLayout(data).then((result) => {\n if (!cancelled) setLayout(result);\n });\n return () => {\n cancelled = true;\n };\n }, [data]);\n\n // D3 rendering after layout\n useEffect(() => {\n if (!svgRef.current || !layout) return;\n renderArchitecture(svgRef.current, layout);\n }, [layout]);\n\n // Count leaf nodes for aria label\n const nodeCount = countLeafNodes(data.children);\n const edgeCount = data.edges.length;\n const ariaLabel = data.title\n ? `${data.title}: architecture diagram with ${nodeCount} nodes and ${edgeCount} connections`\n : `Architecture diagram with ${nodeCount} nodes and ${edgeCount} connections`;\n\n // Build zone membership for SR table\n const flatNodes = flattenNodes(data.children);\n\n return (\n <div className=\"glyph-architecture-container\">\n {!layout && (\n <div\n style={{\n padding: '2rem',\n textAlign: 'center',\n color: 'var(--glyph-text-muted, #7a8599)',\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: '13px',\n }}\n >\n Computing layout...\n </div>\n )}\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n width=\"100%\"\n height=\"100%\"\n style={{\n minHeight: container.tier === 'compact' ? 200 : 300,\n maxHeight: container.tier === 'compact' ? 500 : 700,\n display: layout ? 'block' : 'none',\n }}\n />\n {/* SR-only fallback table */}\n <table className=\"sr-only\" aria-label=\"Architecture data\" style={SR_ONLY_STYLE}>\n <caption>Architecture nodes and connections</caption>\n <thead>\n <tr>\n <th scope=\"col\">Node</th>\n <th scope=\"col\">Zone</th>\n <th scope=\"col\">Connections</th>\n </tr>\n </thead>\n <tbody>\n {flatNodes.map((node) => {\n const connections = data.edges\n .filter((e) => e.from === node.id || e.to === node.id)\n .map((e) => {\n const target = e.from === node.id ? e.to : e.from;\n const dir = e.from === node.id ? '->' : '<-';\n return `${dir} ${target}${e.label ? ` (${e.label})` : ''}`;\n })\n .join(', ');\n return (\n <tr key={node.id}>\n <td>{node.label}</td>\n <td>{node.zone ?? ''}</td>\n <td>{connections}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n// ─── Helpers ────────────────────────────────────────────────\n\ninterface FlatNode {\n id: string;\n label: string;\n zone?: string;\n}\n\nfunction flattenNodes(children: ArchitectureData['children'], zone?: string): FlatNode[] {\n const result: FlatNode[] = [];\n for (const child of children) {\n if (child.type === 'zone' && child.children) {\n result.push(...flattenNodes(child.children, child.label));\n } else {\n result.push({ id: child.id, label: child.label, zone });\n }\n }\n return result;\n}\n\nfunction countLeafNodes(children: ArchitectureData['children']): number {\n let count = 0;\n for (const child of children) {\n if (child.type === 'zone' && child.children) {\n count += countLeafNodes(child.children);\n } else {\n count++;\n }\n }\n return count;\n}\n\n/** CSS properties to visually hide content while keeping it accessible to screen readers. */\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { architectureSchema } from '@glyphjs/schemas';\nimport { Architecture } from './Architecture.js';\nimport type { ArchitectureData } from './Architecture.js';\n\nexport const architectureDefinition: GlyphComponentDefinition<ArchitectureData> = {\n type: 'ui:architecture',\n schema: architectureSchema,\n render: Architecture,\n};\n\nexport { Architecture };\nexport type { ArchitectureData };\nexport { computeArchitectureLayout } from './layout.js';\nexport type {\n ArchitectureLayout,\n PositionedArchNode,\n PositionedZone,\n PositionedArchEdge,\n} from './layout.js';\n","import type { CSSProperties, ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport interface MindMapNode {\n label: string;\n children?: MindMapNode[];\n}\n\nexport interface MindMapData {\n root: string;\n children: MindMapNode[];\n layout: 'radial' | 'tree';\n}\n\n// ─── Layout Constants ────────────────────────────────────────\n\nconst MAX_VISIBLE_DEPTH = 4;\nconst NODE_RADIUS = 28;\nconst ROOT_RADIUS = 34;\nconst RADIAL_LEVEL_RADIUS = 130;\nconst TREE_LEVEL_HEIGHT = 90;\nconst TREE_NODE_HGAP = 140;\nconst SVG_PADDING = 60;\nconst FONT_SIZE = 12;\nconst FONT_FAMILY = 'Inter, system-ui, sans-serif';\nconst BADGE_FONT_SIZE = 10;\n\n// ─── Positioned Node ─────────────────────────────────────────\n\ninterface PositionedNode {\n label: string;\n x: number;\n y: number;\n depth: number;\n parentX?: number;\n parentY?: number;\n hiddenCount: number;\n}\n\n// ─── Layout Functions ────────────────────────────────────────\n\nfunction countHiddenDescendants(node: MindMapNode, currentDepth: number): number {\n if (currentDepth >= MAX_VISIBLE_DEPTH) {\n return countAllDescendants(node);\n }\n let count = 0;\n for (const child of node.children ?? []) {\n count += countHiddenDescendants(child, currentDepth + 1);\n }\n return count;\n}\n\nfunction countAllDescendants(node: MindMapNode): number {\n let count = 1;\n for (const child of node.children ?? []) {\n count += countAllDescendants(child);\n }\n return count;\n}\n\nfunction layoutRadial(data: MindMapData): {\n nodes: PositionedNode[];\n width: number;\n height: number;\n} {\n const nodes: PositionedNode[] = [];\n const cx = 0;\n const cy = 0;\n\n // Root node\n nodes.push({\n label: data.root,\n x: cx,\n y: cy,\n depth: 0,\n hiddenCount: 0,\n });\n\n function placeChildren(\n children: MindMapNode[],\n parentX: number,\n parentY: number,\n depth: number,\n startAngle: number,\n endAngle: number,\n ): void {\n if (depth > MAX_VISIBLE_DEPTH) return;\n const count = children.length;\n if (count === 0) return;\n\n const radius = RADIAL_LEVEL_RADIUS * depth;\n\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (!child) continue;\n\n const angle =\n count === 1\n ? (startAngle + endAngle) / 2\n : startAngle + ((endAngle - startAngle) * i) / (count - 1);\n\n const x = cx + radius * Math.cos(angle);\n const y = cy + radius * Math.sin(angle);\n const hidden = countHiddenDescendants(child, depth);\n\n nodes.push({\n label: child.label,\n x,\n y,\n depth,\n parentX,\n parentY,\n hiddenCount: hidden,\n });\n\n const childChildren = child.children ?? [];\n if (childChildren.length > 0 && depth < MAX_VISIBLE_DEPTH) {\n const spreadAngle = Math.PI / Math.max(count, 2);\n placeChildren(\n childChildren,\n x,\n y,\n depth + 1,\n angle - spreadAngle / 2,\n angle + spreadAngle / 2,\n );\n }\n }\n }\n\n const topChildren = data.children;\n placeChildren(topChildren, cx, cy, 1, 0, 2 * Math.PI * (1 - 1 / Math.max(topChildren.length, 2)));\n\n // Compute bounding box\n let minX = 0;\n let maxX = 0;\n let minY = 0;\n let maxY = 0;\n for (const n of nodes) {\n if (n.x - ROOT_RADIUS < minX) minX = n.x - ROOT_RADIUS;\n if (n.x + ROOT_RADIUS > maxX) maxX = n.x + ROOT_RADIUS;\n if (n.y - ROOT_RADIUS < minY) minY = n.y - ROOT_RADIUS;\n if (n.y + ROOT_RADIUS > maxY) maxY = n.y + ROOT_RADIUS;\n }\n\n // Offset so all coords are positive\n const offsetX = -minX + SVG_PADDING;\n const offsetY = -minY + SVG_PADDING;\n for (const n of nodes) {\n n.x += offsetX;\n n.y += offsetY;\n if (n.parentX !== undefined) n.parentX += offsetX;\n if (n.parentY !== undefined) n.parentY += offsetY;\n }\n\n return {\n nodes,\n width: maxX - minX + SVG_PADDING * 2,\n height: maxY - minY + SVG_PADDING * 2,\n };\n}\n\nfunction layoutTree(data: MindMapData): {\n nodes: PositionedNode[];\n width: number;\n height: number;\n} {\n const nodes: PositionedNode[] = [];\n\n // Count total leaf nodes to determine width\n function countLeaves(children: MindMapNode[], depth: number): number {\n if (depth >= MAX_VISIBLE_DEPTH) return 1;\n let total = 0;\n for (const child of children) {\n const childChildren = child.children ?? [];\n if (childChildren.length === 0 || depth + 1 >= MAX_VISIBLE_DEPTH) {\n total += 1;\n } else {\n total += countLeaves(childChildren, depth + 1);\n }\n }\n return Math.max(total, 1);\n }\n\n const totalLeaves = Math.max(countLeaves(data.children, 1), 1);\n const totalWidth = totalLeaves * TREE_NODE_HGAP;\n const rootX = totalWidth / 2 + SVG_PADDING;\n const rootY = SVG_PADDING;\n\n nodes.push({\n label: data.root,\n x: rootX,\n y: rootY,\n depth: 0,\n hiddenCount: 0,\n });\n\n function placeTreeChildren(\n children: MindMapNode[],\n parentX: number,\n parentY: number,\n depth: number,\n leftBound: number,\n rightBound: number,\n ): void {\n if (depth > MAX_VISIBLE_DEPTH) return;\n const count = children.length;\n if (count === 0) return;\n\n const y = parentY + TREE_LEVEL_HEIGHT;\n const slotWidth = (rightBound - leftBound) / count;\n\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (!child) continue;\n\n const x = leftBound + slotWidth * (i + 0.5);\n const hidden = countHiddenDescendants(child, depth);\n\n nodes.push({\n label: child.label,\n x,\n y,\n depth,\n parentX,\n parentY,\n hiddenCount: hidden,\n });\n\n const childChildren = child.children ?? [];\n if (childChildren.length > 0 && depth < MAX_VISIBLE_DEPTH) {\n placeTreeChildren(\n childChildren,\n x,\n y,\n depth + 1,\n leftBound + slotWidth * i,\n leftBound + slotWidth * (i + 1),\n );\n }\n }\n }\n\n placeTreeChildren(data.children, rootX, rootY, 1, SVG_PADDING, totalWidth + SVG_PADDING);\n\n // Compute dimensions\n let maxY = rootY;\n for (const n of nodes) {\n if (n.y > maxY) maxY = n.y;\n }\n\n return {\n nodes,\n width: totalWidth + SVG_PADDING * 2,\n height: maxY + SVG_PADDING + NODE_RADIUS,\n };\n}\n\n// ─── Accessible List ─────────────────────────────────────────\n\nfunction renderAccessibleList(root: string, children: MindMapNode[]): ReactElement {\n return (\n <ul style={SR_ONLY_STYLE} role=\"list\" aria-label=\"Mind map structure\">\n <li>\n {root}\n {children.length > 0 && renderAccessibleChildren(children)}\n </li>\n </ul>\n );\n}\n\nfunction renderAccessibleChildren(children: MindMapNode[]): ReactElement {\n return (\n <ul>\n {children.map((child, i) => (\n <li key={i}>\n {child.label}\n {(child.children ?? []).length > 0 && renderAccessibleChildren(child.children ?? [])}\n </li>\n ))}\n </ul>\n );\n}\n\n// ─── Node Color ──────────────────────────────────────────────\n\nfunction nodeColor(depth: number): string {\n if (depth === 0) return 'var(--glyph-accent, #6c8aff)';\n if (depth === 1) return 'var(--glyph-surface-raised, #162038)';\n return 'var(--glyph-surface, #0f1526)';\n}\n\nfunction nodeStroke(depth: number): string {\n if (depth === 0) return 'var(--glyph-accent, #6c8aff)';\n return 'var(--glyph-border-strong, #2a3550)';\n}\n\n// ─── Count all nodes ─────────────────────────────────────────\n\nfunction countAllNodes(children: MindMapNode[]): number {\n let count = 0;\n for (const child of children) {\n count += 1;\n count += countAllNodes(child.children ?? []);\n }\n return count;\n}\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function MindMap({ data, container }: GlyphComponentProps<MindMapData>): ReactElement {\n const isTree = data.layout === 'tree';\n const { nodes, width, height } = isTree ? layoutTree(data) : layoutRadial(data);\n\n const totalNodes = 1 + countAllNodes(data.children);\n const ariaLabel = `Mind map: ${data.root} with ${String(totalNodes)} nodes`;\n\n return (\n <div className=\"glyph-mindmap-container\">\n <svg\n role=\"img\"\n aria-label={ariaLabel}\n viewBox={`0 0 ${width} ${height}`}\n width=\"100%\"\n style={{\n minHeight: container.tier === 'compact' ? 150 : 200,\n maxHeight: container.tier === 'compact' ? 500 : 800,\n display: 'block',\n }}\n >\n {/* Edge lines */}\n {nodes.map((node, idx) => {\n if (node.parentX === undefined || node.parentY === undefined) return null;\n return (\n <line\n key={`edge-${idx}`}\n x1={node.parentX}\n y1={node.parentY}\n x2={node.x}\n y2={node.y}\n stroke=\"var(--glyph-border, #1a2035)\"\n strokeWidth={1.5}\n />\n );\n })}\n\n {/* Nodes */}\n {nodes.map((node, idx) => {\n const r = node.depth === 0 ? ROOT_RADIUS : NODE_RADIUS;\n const isRoot = node.depth === 0;\n\n return (\n <g key={`node-${idx}`}>\n {/* Node circle */}\n <circle\n cx={node.x}\n cy={node.y}\n r={r}\n fill={nodeColor(node.depth)}\n stroke={nodeStroke(node.depth)}\n strokeWidth={isRoot ? 2 : 1.5}\n />\n\n {/* Label */}\n <text\n x={node.x}\n y={node.y}\n dy=\"0.35em\"\n textAnchor=\"middle\"\n fontSize={isRoot ? FONT_SIZE + 1 : FONT_SIZE}\n fontFamily={FONT_FAMILY}\n fontWeight={isRoot ? 700 : 500}\n fill={\n isRoot ? 'var(--glyph-text-on-accent, #ffffff)' : 'var(--glyph-text, #d4dae3)'\n }\n >\n {node.label.length > 12 ? `${node.label.slice(0, 11)}...` : node.label}\n </text>\n\n {/* Hidden count badge */}\n {node.hiddenCount > 0 && (\n <g>\n <circle\n cx={node.x + r * 0.7}\n cy={node.y - r * 0.7}\n r={10}\n fill=\"var(--glyph-accent, #6c8aff)\"\n />\n <text\n x={node.x + r * 0.7}\n y={node.y - r * 0.7}\n dy=\"0.35em\"\n textAnchor=\"middle\"\n fontSize={BADGE_FONT_SIZE}\n fontFamily={FONT_FAMILY}\n fontWeight={600}\n fill=\"var(--glyph-text-on-accent, #ffffff)\"\n >\n +{node.hiddenCount}\n </text>\n </g>\n )}\n </g>\n );\n })}\n </svg>\n\n {/* Screen-reader accessible nested list */}\n {renderAccessibleList(data.root, data.children)}\n </div>\n );\n}\n\n// ─── SR Only Style ──────────────────────────────────────────\n\nconst SR_ONLY_STYLE: CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n","import { mindmapSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { MindMap } from './MindMap.js';\nimport type { MindMapData } from './MindMap.js';\n\nexport const mindMapDefinition: GlyphComponentDefinition<MindMapData> = {\n type: 'ui:mindmap',\n schema: mindmapSchema as unknown as GlyphComponentDefinition<MindMapData>['schema'],\n render: MindMap,\n};\n\nexport { MindMap } from './MindMap.js';\nexport type { MindMapData } from './MindMap.js';\n","import type { CSSProperties, ReactElement } from 'react';\nimport katex from 'katex';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport interface EquationStep {\n expression: string;\n annotation?: string;\n}\n\nexport interface EquationData {\n expression?: string;\n label?: string;\n steps?: EquationStep[];\n}\n\n// ─── LaTeX Rendering ─────────────────────────────────────────\n\nfunction renderLatex(expression: string): { html: string; error: boolean } {\n try {\n const html = katex.renderToString(expression, {\n throwOnError: false,\n displayMode: true,\n });\n return { html, error: false };\n } catch {\n return { html: '', error: true };\n }\n}\n\n// ─── Styles ──────────────────────────────────────────────────\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '1rem',\n fontFamily: 'Inter, system-ui, sans-serif',\n};\n\nconst labelStyle: CSSProperties = {\n fontSize: '0.875rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n marginTop: '0.25rem',\n};\n\nconst stepsContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n width: '100%',\n};\n\nconst stepRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '1.5rem',\n};\n\nconst annotationStyle: CSSProperties = {\n fontSize: '0.875rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n fontStyle: 'italic',\n minWidth: '120px',\n};\n\nconst fallbackStyle: CSSProperties = {\n fontFamily: '\"Fira Code\", \"Cascadia Code\", Consolas, monospace',\n fontSize: '0.875rem',\n padding: '0.5rem 1rem',\n borderRadius: '4px',\n background: 'var(--glyph-surface-raised, #162038)',\n color: 'var(--glyph-text, #d4dae3)',\n border: '1px solid var(--glyph-border, #1a2035)',\n};\n\n// ─── Component ──────────────────────────────────────────────\n\nexport function Equation({ data }: GlyphComponentProps<EquationData>): ReactElement {\n // Single expression mode\n if (data.expression !== undefined) {\n const { html, error } = renderLatex(data.expression);\n const ariaLabel = `Equation: ${data.expression}`;\n\n return (\n <div style={containerStyle} role=\"math\" aria-label={ariaLabel}>\n {error || html === '' ? (\n <code style={fallbackStyle}>{data.expression}</code>\n ) : (\n <span dangerouslySetInnerHTML={{ __html: html }} />\n )}\n {data.label !== undefined && <div style={labelStyle}>{data.label}</div>}\n </div>\n );\n }\n\n // Steps mode\n if (data.steps !== undefined && data.steps.length > 0) {\n const allExpressions = data.steps.map((s) => s.expression).join('; ');\n const ariaLabel = `Equation steps: ${allExpressions}`;\n\n return (\n <div style={containerStyle} role=\"math\" aria-label={ariaLabel}>\n <div style={stepsContainerStyle}>\n {data.steps.map((step, idx) => {\n const { html, error } = renderLatex(step.expression);\n\n return (\n <div key={idx} style={stepRowStyle}>\n {error || html === '' ? (\n <code style={fallbackStyle}>{step.expression}</code>\n ) : (\n <span dangerouslySetInnerHTML={{ __html: html }} />\n )}\n {step.annotation !== undefined && (\n <span style={annotationStyle}>{step.annotation}</span>\n )}\n </div>\n );\n })}\n </div>\n {data.label !== undefined && <div style={labelStyle}>{data.label}</div>}\n </div>\n );\n }\n\n // Fallback (shouldn't happen with valid data)\n return (\n <div style={containerStyle} role=\"math\" aria-label=\"Empty equation\">\n <span style={{ color: 'var(--glyph-text-muted, #6b7a94)' }}>No equation provided</span>\n </div>\n );\n}\n","import { equationSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Equation } from './Equation.js';\nimport type { EquationData } from './Equation.js';\n\nexport const equationDefinition: GlyphComponentDefinition<EquationData> = {\n type: 'ui:equation',\n schema: equationSchema,\n render: Equation,\n};\n\nexport { Equation };\nexport type { EquationData, EquationStep } from './Equation.js';\n","import type { CSSProperties } from 'react';\n\nexport const containerStyle: CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n overflow: 'hidden',\n};\n\nexport const headerStyle: CSSProperties = {\n fontWeight: 700,\n fontSize: '1.125rem',\n padding: 'var(--glyph-spacing-md, 1rem)',\n borderBottom: '1px solid var(--glyph-border, #d0d8e4)',\n color: 'var(--glyph-heading, #0a0e1a)',\n};\n\nexport function questionGroupStyle(isLast: boolean): CSSProperties {\n return {\n padding: 'var(--glyph-spacing-md, 1rem)',\n borderBottom: isLast ? 'none' : '1px solid var(--glyph-border, #d0d8e4)',\n };\n}\n\nexport const questionTextStyle: CSSProperties = {\n fontWeight: 600,\n fontSize: '0.9375rem',\n marginBottom: '0.75rem',\n};\n\nexport function optionLabelStyle(\n isSelected: boolean,\n submitted: boolean,\n isCorrectOption: boolean,\n isIncorrectSelection: boolean,\n): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 0.75rem',\n marginBottom: '0.375rem',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n cursor: submitted ? 'default' : 'pointer',\n background: submitted\n ? isCorrectOption\n ? 'var(--glyph-quiz-correct-bg, #dcfce7)'\n : isIncorrectSelection\n ? 'var(--glyph-quiz-incorrect-bg, #fee2e2)'\n : 'transparent'\n : isSelected\n ? 'var(--glyph-surface, #e8ecf3)'\n : 'transparent',\n border: '1px solid',\n borderColor: submitted\n ? isCorrectOption\n ? 'var(--glyph-quiz-correct, #16a34a)'\n : isIncorrectSelection\n ? 'var(--glyph-quiz-incorrect, #dc2626)'\n : 'var(--glyph-border, #d0d8e4)'\n : isSelected\n ? 'var(--glyph-border, #d0d8e4)'\n : 'transparent',\n fontSize: '0.875rem',\n lineHeight: 1.6,\n };\n}\n\nexport function buttonStyle(disabled: boolean): CSSProperties {\n return {\n marginTop: '0.75rem',\n padding: '0.5rem 1.25rem',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n background: disabled ? 'var(--glyph-surface, #e8ecf3)' : 'var(--glyph-surface, #e8ecf3)',\n color: disabled ? 'var(--glyph-border, #d0d8e4)' : 'var(--glyph-text, #1a2035)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontWeight: 600,\n fontSize: '0.875rem',\n };\n}\n\nexport function feedbackStyle(correct: boolean): CSSProperties {\n return {\n marginTop: '0.75rem',\n padding: '0.5rem 0.75rem',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n background: correct\n ? 'var(--glyph-quiz-correct-bg, #dcfce7)'\n : 'var(--glyph-quiz-incorrect-bg, #fee2e2)',\n color: correct ? 'var(--glyph-quiz-correct, #16a34a)' : 'var(--glyph-quiz-incorrect, #dc2626)',\n fontWeight: 600,\n fontSize: '0.875rem',\n };\n}\n\nexport const explanationStyle: CSSProperties = {\n marginTop: '0.5rem',\n padding: '0.5rem 0.75rem',\n fontSize: '0.8125rem',\n lineHeight: 1.6,\n color: 'var(--glyph-text, #1a2035)',\n background: 'var(--glyph-surface, #e8ecf3)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n};\n\nexport const scoreStyle: CSSProperties = {\n padding: 'var(--glyph-spacing-md, 1rem)',\n borderTop: '1px solid var(--glyph-border, #d0d8e4)',\n fontWeight: 700,\n fontSize: '1rem',\n color: 'var(--glyph-heading, #0a0e1a)',\n};\n","import { useState, type ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\nimport {\n containerStyle,\n headerStyle,\n questionGroupStyle,\n questionTextStyle,\n optionLabelStyle,\n buttonStyle,\n feedbackStyle,\n explanationStyle,\n scoreStyle,\n} from './styles.js';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface QuizMultipleChoice {\n type: 'multiple-choice';\n question: string;\n options: string[];\n answer: number;\n explanation?: string;\n}\n\nexport interface QuizTrueFalse {\n type: 'true-false';\n question: string;\n answer: boolean;\n explanation?: string;\n}\n\nexport interface QuizMultiSelect {\n type: 'multi-select';\n question: string;\n options: string[];\n answer: number[];\n explanation?: string;\n}\n\nexport type QuizQuestion = QuizMultipleChoice | QuizTrueFalse | QuizMultiSelect;\n\nexport interface QuizData {\n questions: QuizQuestion[];\n showScore?: boolean;\n title?: string;\n}\n\n// ─── Per-question state ────────────────────────────────────────\n\ninterface QuestionState {\n selected: number | number[] | boolean | null;\n submitted: boolean;\n}\n\n// ─── Helpers ───────────────────────────────────────────────────\n\nfunction isCorrect(question: QuizQuestion, selected: number | number[] | boolean | null): boolean {\n if (selected === null) return false;\n\n switch (question.type) {\n case 'multiple-choice':\n return selected === question.answer;\n case 'true-false':\n return selected === question.answer;\n case 'multi-select': {\n if (!Array.isArray(selected)) return false;\n const sorted = [...selected].sort();\n const expected = [...question.answer].sort();\n return sorted.length === expected.length && sorted.every((v, i) => v === expected[i]);\n }\n }\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Quiz({ data, block }: GlyphComponentProps<QuizData>): ReactElement {\n const { questions, showScore = true, title } = data;\n const baseId = `glyph-quiz-${block.id}`;\n\n const [states, setStates] = useState<QuestionState[]>(() =>\n questions.map((q) => ({\n selected: q.type === 'multi-select' ? [] : null,\n submitted: false,\n })),\n );\n\n const updateState = (index: number, patch: Partial<QuestionState>): void => {\n setStates((prev) => prev.map((s, i) => (i === index ? { ...s, ...patch } : s)));\n };\n\n const score = states.reduce((acc, s, i) => {\n const q = questions[i];\n if (!q || !s.submitted) return acc;\n return acc + (isCorrect(q, s.selected) ? 1 : 0);\n }, 0);\n const submittedCount = states.filter((s) => s.submitted).length;\n\n // ─── Render helpers ────────────────────────────────────────\n\n function renderMultipleChoice(\n question: QuizMultipleChoice,\n qIndex: number,\n state: QuestionState,\n ): ReactElement {\n const selected = typeof state.selected === 'number' ? state.selected : null;\n\n return (\n <div role=\"radiogroup\" aria-label={question.question}>\n {question.options.map((option, oIndex) => {\n const isSelected = selected === oIndex;\n const isCorrectOption = state.submitted && oIndex === question.answer;\n const isIncorrectSelection = state.submitted && isSelected && oIndex !== question.answer;\n\n return (\n <label\n key={oIndex}\n style={optionLabelStyle(\n isSelected,\n state.submitted,\n isCorrectOption,\n isIncorrectSelection,\n )}\n >\n <input\n type=\"radio\"\n role=\"radio\"\n name={`${baseId}-q${String(qIndex)}`}\n checked={isSelected}\n disabled={state.submitted}\n onChange={() => updateState(qIndex, { selected: oIndex })}\n aria-checked={isSelected}\n />\n {option}\n </label>\n );\n })}\n </div>\n );\n }\n\n function renderTrueFalse(\n question: QuizTrueFalse,\n qIndex: number,\n state: QuestionState,\n ): ReactElement {\n const selected = typeof state.selected === 'boolean' ? state.selected : null;\n\n return (\n <div role=\"radiogroup\" aria-label={question.question}>\n {[true, false].map((value) => {\n const isSelected = selected === value;\n const isCorrectOption = state.submitted && value === question.answer;\n const isIncorrectSelection = state.submitted && isSelected && value !== question.answer;\n\n return (\n <label\n key={String(value)}\n style={optionLabelStyle(\n isSelected,\n state.submitted,\n isCorrectOption,\n isIncorrectSelection,\n )}\n >\n <input\n type=\"radio\"\n role=\"radio\"\n name={`${baseId}-q${String(qIndex)}`}\n checked={isSelected}\n disabled={state.submitted}\n onChange={() => updateState(qIndex, { selected: value })}\n aria-checked={isSelected}\n />\n {value ? 'True' : 'False'}\n </label>\n );\n })}\n </div>\n );\n }\n\n function renderMultiSelect(\n question: QuizMultiSelect,\n qIndex: number,\n state: QuestionState,\n ): ReactElement {\n const selected = Array.isArray(state.selected) ? state.selected : [];\n\n const toggleOption = (oIndex: number): void => {\n const next = selected.includes(oIndex)\n ? selected.filter((v) => v !== oIndex)\n : [...selected, oIndex];\n updateState(qIndex, { selected: next });\n };\n\n return (\n <div>\n {question.options.map((option, oIndex) => {\n const isSelected = selected.includes(oIndex);\n const isCorrectOption = state.submitted && question.answer.includes(oIndex);\n const isIncorrectSelection =\n state.submitted && isSelected && !question.answer.includes(oIndex);\n\n return (\n <label\n key={oIndex}\n style={optionLabelStyle(\n isSelected,\n state.submitted,\n isCorrectOption,\n isIncorrectSelection,\n )}\n >\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n checked={isSelected}\n disabled={state.submitted}\n onChange={() => toggleOption(oIndex)}\n aria-checked={isSelected}\n />\n {option}\n </label>\n );\n })}\n </div>\n );\n }\n\n function renderQuestion(question: QuizQuestion, qIndex: number): ReactElement {\n const state: QuestionState = states[qIndex] ?? { selected: null, submitted: false };\n const isLast = qIndex === questions.length - 1;\n\n const hasSelection =\n question.type === 'multi-select'\n ? Array.isArray(state.selected) && state.selected.length > 0\n : state.selected !== null;\n\n const correct = state.submitted ? isCorrect(question, state.selected) : false;\n\n return (\n <div\n key={qIndex}\n role=\"group\"\n aria-label={`Question ${String(qIndex + 1)}`}\n style={questionGroupStyle(isLast && !(showScore && submittedCount > 0))}\n >\n <div style={questionTextStyle}>\n {questions.length > 1 ? `${String(qIndex + 1)}. ` : ''}\n {question.question}\n </div>\n\n {question.type === 'multiple-choice' && renderMultipleChoice(question, qIndex, state)}\n {question.type === 'true-false' && renderTrueFalse(question, qIndex, state)}\n {question.type === 'multi-select' && renderMultiSelect(question, qIndex, state)}\n\n {!state.submitted && (\n <button\n type=\"button\"\n disabled={!hasSelection}\n style={buttonStyle(!hasSelection)}\n onClick={() => updateState(qIndex, { submitted: true })}\n >\n Submit\n </button>\n )}\n\n <div aria-live=\"polite\">\n {state.submitted && (\n <div style={feedbackStyle(correct)}>{correct ? 'Correct!' : 'Incorrect'}</div>\n )}\n {state.submitted && question.explanation && (\n <div style={explanationStyle}>{question.explanation}</div>\n )}\n </div>\n </div>\n );\n }\n\n // ─── Main render ───────────────────────────────────────────\n\n return (\n <div id={baseId} role=\"region\" aria-label={title ?? 'Quiz'} style={containerStyle}>\n {title && <div style={headerStyle}>{title}</div>}\n\n {questions.map((q, i) => renderQuestion(q, i))}\n\n {showScore && submittedCount > 0 && (\n <div style={scoreStyle}>\n Score: {String(score)} / {String(questions.length)}\n </div>\n )}\n </div>\n );\n}\n","import { quizSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Quiz } from './Quiz.js';\nimport type { QuizData } from './Quiz.js';\n\nexport const quizDefinition: GlyphComponentDefinition<QuizData> = {\n type: 'ui:quiz',\n schema: quizSchema,\n render: Quiz,\n};\n\nexport { Quiz };\nexport type {\n QuizData,\n QuizQuestion,\n QuizMultipleChoice,\n QuizTrueFalse,\n QuizMultiSelect,\n} from './Quiz.js';\n","import type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface CardAction {\n label: string;\n url: string;\n}\n\nexport interface CardItem {\n title: string;\n subtitle?: string;\n image?: string;\n icon?: string;\n body?: string;\n actions?: CardAction[];\n}\n\nexport interface CardData {\n title?: string;\n cards: CardItem[];\n variant?: 'default' | 'outlined' | 'elevated';\n columns?: number;\n}\n\n// ─── Variant styles ─────────────────────────────────────────────\n\nfunction getVariantStyle(variant: 'default' | 'outlined' | 'elevated'): React.CSSProperties {\n switch (variant) {\n case 'outlined':\n return {\n border: '2px solid var(--glyph-accent, #0a9d7c)',\n };\n case 'elevated':\n return {\n border: '1px solid var(--glyph-border, #d0d8e4)',\n boxShadow: 'var(--glyph-shadow-md, 0 4px 12px rgba(0,0,0,0.15))',\n };\n default:\n return {\n border: '1px solid var(--glyph-border, #d0d8e4)',\n };\n }\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Card({ data, block, container }: GlyphComponentProps<CardData>): ReactElement {\n const { title, cards, variant = 'default', columns } = data;\n const baseId = `glyph-card-${block.id}`;\n const authorCols = columns ?? Math.min(cards.length, 3);\n\n // Container-adaptive column clamping (RFC-015)\n let colCount: number;\n switch (container.tier) {\n case 'compact':\n colCount = 1;\n break;\n case 'standard':\n colCount = Math.min(authorCols, 2);\n break;\n default:\n colCount = authorCols;\n }\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n };\n\n // CSS-level defensive auto-wrap: repeat(auto-fill, minmax(max(MIN, exact-fraction), 1fr))\n // ensures at most colCount columns at wide widths, fewer on narrow viewports.\n const gapCount = colCount - 1;\n const gridStyle: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fill, minmax(max(200px, calc((100% - ${String(gapCount)}rem) / ${String(colCount)})), 1fr))`,\n gap: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const cardBaseStyle: React.CSSProperties = {\n ...getVariantStyle(variant),\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n overflow: 'hidden',\n background: 'var(--glyph-surface, #e8ecf3)',\n display: 'flex',\n flexDirection: 'column',\n };\n\n const cardBodyStyle: React.CSSProperties = {\n padding: 'var(--glyph-spacing-md, 1rem)',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n };\n\n const imageStyle: React.CSSProperties = {\n width: '100%',\n aspectRatio: '16 / 9',\n objectFit: 'cover',\n display: 'block',\n };\n\n const iconStyle: React.CSSProperties = {\n fontSize: '1.5rem',\n marginBottom: 'var(--glyph-spacing-xs, 0.25rem)',\n };\n\n const titleStyle: React.CSSProperties = {\n fontWeight: 700,\n fontSize: '1rem',\n color: 'var(--glyph-heading, #0a0e1a)',\n margin: 0,\n };\n\n const subtitleStyle: React.CSSProperties = {\n fontSize: '0.8125rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n };\n\n const bodyStyle: React.CSSProperties = {\n fontSize: '0.875rem',\n lineHeight: 1.6,\n marginTop: 'var(--glyph-spacing-sm, 0.5rem)',\n flex: 1,\n };\n\n const actionsStyle: React.CSSProperties = {\n display: 'flex',\n gap: 'var(--glyph-spacing-sm, 0.5rem)',\n marginTop: 'var(--glyph-spacing-sm, 0.5rem)',\n flexWrap: 'wrap',\n };\n\n const linkStyle: React.CSSProperties = {\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: 'var(--glyph-link, #0a9d7c)',\n textDecoration: 'none',\n };\n\n return (\n <div id={baseId} role=\"region\" aria-label={title ?? 'Cards'} style={containerStyle}>\n {title && (\n <div\n style={{\n fontWeight: 700,\n fontSize: '1.125rem',\n marginBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n color: 'var(--glyph-heading, #0a0e1a)',\n }}\n >\n {title}\n </div>\n )}\n <div role=\"list\" style={gridStyle}>\n {cards.map((card, i) => (\n <article key={i} role=\"listitem\" style={cardBaseStyle}>\n {card.image && (\n <img src={card.image} alt={card.title} loading=\"lazy\" style={imageStyle} />\n )}\n <div style={cardBodyStyle}>\n {card.icon && <div style={iconStyle}>{card.icon}</div>}\n <h3 style={titleStyle}>{card.title}</h3>\n {card.subtitle && <div style={subtitleStyle}>{card.subtitle}</div>}\n {card.body && <div style={bodyStyle}>{card.body}</div>}\n {card.actions && card.actions.length > 0 && (\n <div style={actionsStyle}>\n {card.actions.map((action, j) => (\n <a\n key={j}\n href={action.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={linkStyle}\n >\n {action.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </article>\n ))}\n </div>\n </div>\n );\n}\n","import { cardSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Card } from './Card.js';\nimport type { CardData } from './Card.js';\n\nexport const cardDefinition: GlyphComponentDefinition<CardData> = {\n type: 'ui:card',\n schema: cardSchema,\n render: Card,\n};\n\nexport { Card };\nexport type { CardData, CardItem, CardAction } from './Card.js';\n","import { useMemo } from 'react';\nimport type { ReactElement } from 'react';\nimport type { GlyphComponentProps } from '@glyphjs/types';\n\n// ─── Types ─────────────────────────────────────────────────────\n\nexport interface StatItem {\n type: 'stat';\n label: string;\n value: string;\n description?: string;\n}\n\nexport interface FactItem {\n type: 'fact';\n icon?: string;\n text: string;\n}\n\nexport interface ProgressItem {\n type: 'progress';\n label: string;\n value: number;\n color?: string;\n}\n\nexport interface TextItem {\n type: 'text';\n content: string;\n}\n\nexport interface PieSlice {\n label: string;\n value: number;\n color?: string;\n}\n\nexport interface PieItem {\n type: 'pie';\n label?: string;\n slices: PieSlice[];\n donut?: boolean;\n size?: number;\n}\n\nexport interface DividerItem {\n type: 'divider';\n style?: 'solid' | 'dashed' | 'dotted';\n}\n\nexport interface RatingItem {\n type: 'rating';\n label: string;\n value: number;\n max?: number;\n description?: string;\n}\n\nexport type InfographicItem =\n | StatItem\n | FactItem\n | ProgressItem\n | TextItem\n | PieItem\n | DividerItem\n | RatingItem;\n\nexport interface InfographicSection {\n heading?: string;\n items: InfographicItem[];\n}\n\nexport interface InfographicData {\n title?: string;\n sections: InfographicSection[];\n}\n\n// ─── Helpers ───────────────────────────────────────────────────\n\ninterface ItemGroup {\n type: string;\n items: InfographicItem[];\n}\n\nfunction groupConsecutiveItems(items: InfographicItem[]): ItemGroup[] {\n const groups: ItemGroup[] = [];\n for (const item of items) {\n const last = groups.length > 0 ? groups[groups.length - 1] : undefined;\n if (last && last.type === item.type) {\n last.items.push(item);\n } else {\n groups.push({ type: item.type, items: [item] });\n }\n }\n return groups;\n}\n\nexport function classifySectionWidth(section: InfographicSection): 'narrow' | 'wide' {\n let textCount = 0;\n let progressCount = 0;\n let pieCount = 0;\n let statCount = 0;\n\n for (const item of section.items) {\n switch (item.type) {\n case 'text':\n textCount++;\n break;\n case 'progress':\n progressCount++;\n break;\n case 'pie':\n pieCount++;\n break;\n case 'stat':\n statCount++;\n break;\n }\n }\n\n if (textCount > 0) return 'wide';\n if (progressCount >= 4) return 'wide';\n if (pieCount >= 3) return 'wide';\n if (statCount >= 4) return 'wide';\n\n return 'narrow';\n}\n\nfunction computeSectionLayout(sections: InfographicSection[]): (string | undefined)[] {\n return sections.map((section) => {\n const width = classifySectionWidth(section);\n return width === 'wide' ? '1 / -1' : undefined;\n });\n}\n\nconst PROGRESS_COLORS = [\n 'var(--glyph-infographic-color-1, #3b82f6)',\n 'var(--glyph-infographic-color-2, #22c55e)',\n 'var(--glyph-infographic-color-3, #f59e0b)',\n 'var(--glyph-infographic-color-4, #ef4444)',\n];\n\n// ─── Sub-renderers ─────────────────────────────────────────────\n\nfunction renderStatGroup(items: StatItem[], keyPrefix: string): ReactElement {\n const rowStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const statStyle: React.CSSProperties = {\n flex: '1 1 120px',\n minWidth: 0,\n };\n\n const valueStyle: React.CSSProperties = {\n fontSize: '1.75rem',\n fontWeight: 700,\n color: 'var(--glyph-infographic-value-color, #1d4ed8)',\n lineHeight: 1.2,\n };\n\n const labelStyle: React.CSSProperties = {\n fontSize: '0.8125rem',\n color: 'var(--glyph-infographic-label-color, #475569)',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n fontWeight: 600,\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: '0.75rem',\n color: 'var(--glyph-infographic-desc-color, #64748b)',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n fontStyle: 'italic',\n };\n\n return (\n <div style={rowStyle} data-group=\"stat\" key={keyPrefix}>\n {items.map((item, i) => (\n <div key={`${keyPrefix}-${String(i)}`} style={statStyle}>\n <div style={valueStyle}>{item.value}</div>\n <div style={labelStyle}>{item.label}</div>\n {item.description && <div style={descStyle}>{item.description}</div>}\n </div>\n ))}\n </div>\n );\n}\n\nfunction renderProgressGroup(\n items: ProgressItem[],\n keyPrefix: string,\n colorOffset: number,\n): ReactElement {\n const trackStyle: React.CSSProperties = {\n height: '0.5rem',\n borderRadius: 'var(--glyph-radius-sm, 0.375rem)',\n background: 'var(--glyph-infographic-track, #e0e4ea)',\n overflow: 'hidden',\n };\n\n return (\n <div data-group=\"progress\" key={keyPrefix}>\n {items.map((item, i) => {\n const colorIndex = (colorOffset + i) % PROGRESS_COLORS.length;\n const fillColor = item.color ?? PROGRESS_COLORS[colorIndex];\n\n const fillStyle: React.CSSProperties = {\n height: '100%',\n width: `${String(item.value)}%`,\n borderRadius: 'var(--glyph-radius-sm, 0.375rem)',\n background: fillColor,\n transition: 'width 0.3s ease',\n };\n\n return (\n <div\n key={`${keyPrefix}-${String(i)}`}\n style={{ marginBottom: 'var(--glyph-spacing-sm, 0.5rem)' }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: 'var(--glyph-spacing-xs, 0.25rem)',\n fontSize: '0.875rem',\n }}\n >\n <span style={{ color: 'var(--glyph-text, #1a2035)', fontWeight: 600 }}>\n {item.label}\n </span>\n <span\n style={{\n color: 'var(--glyph-infographic-value-color, #1d4ed8)',\n fontWeight: 700,\n }}\n >\n {String(item.value)}%\n </span>\n </div>\n <div style={trackStyle}>\n <div\n role=\"progressbar\"\n aria-valuenow={item.value}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${item.label}: ${String(item.value)}%`}\n style={fillStyle}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction renderFactGroup(items: FactItem[], keyPrefix: string): ReactElement {\n const listStyle: React.CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n };\n\n const itemStyle: React.CSSProperties = {\n padding: 'var(--glyph-spacing-xs, 0.25rem) 0',\n fontSize: '0.875rem',\n color: 'var(--glyph-text, #1a2035)',\n fontWeight: 500,\n };\n\n return (\n <ul style={listStyle} data-group=\"fact\" key={keyPrefix}>\n {items.map((item, i) => (\n <li key={`${keyPrefix}-${String(i)}`} style={itemStyle}>\n {item.icon && (\n <span\n style={{\n marginRight: 'var(--glyph-spacing-xs, 0.25rem)',\n color: 'var(--glyph-infographic-accent, #3b82f6)',\n }}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n )}\n {item.text}\n </li>\n ))}\n </ul>\n );\n}\n\nfunction renderTextGroup(items: TextItem[], keyPrefix: string): ReactElement {\n const pStyle: React.CSSProperties = {\n margin: '0 0 var(--glyph-spacing-sm, 0.5rem) 0',\n fontSize: '0.875rem',\n lineHeight: 1.6,\n color: 'var(--glyph-text, #1a2035)',\n borderLeft: '3px solid var(--glyph-infographic-accent, #3b82f6)',\n paddingLeft: 'var(--glyph-spacing-sm, 0.5rem)',\n };\n\n return (\n <div data-group=\"text\" key={keyPrefix}>\n {items.map((item, i) => (\n <p key={`${keyPrefix}-${String(i)}`} style={pStyle}>\n {item.content}\n </p>\n ))}\n </div>\n );\n}\n\nfunction renderPieGroup(items: PieItem[], keyPrefix: string, colorOffset: number): ReactElement {\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 'var(--glyph-spacing-md, 1rem)',\n };\n\n return (\n <div style={wrapperStyle} data-group=\"pie\" key={keyPrefix}>\n {items.map((item, i) => {\n const size = item.size ?? 160;\n const outerRadius = size / 2;\n const innerRadius = (item.donut ?? true) ? outerRadius * 0.55 : 0;\n const cx = outerRadius;\n const cy = outerRadius;\n const total = item.slices.reduce((sum, s) => sum + s.value, 0);\n\n let cumAngle = -Math.PI / 2;\n const paths: ReactElement[] = [];\n\n for (let si = 0; si < item.slices.length; si++) {\n const slice = item.slices[si];\n if (!slice) continue;\n const sliceAngle = (slice.value / total) * 2 * Math.PI;\n const startAngle = cumAngle;\n const endAngle = cumAngle + sliceAngle;\n cumAngle = endAngle;\n\n const sliceColorIndex = (colorOffset + si) % PROGRESS_COLORS.length;\n const fillColor = slice.color ?? PROGRESS_COLORS[sliceColorIndex];\n\n const x1 = cx + outerRadius * Math.cos(startAngle);\n const y1 = cy + outerRadius * Math.sin(startAngle);\n const x2 = cx + outerRadius * Math.cos(endAngle);\n const y2 = cy + outerRadius * Math.sin(endAngle);\n const largeArc = sliceAngle > Math.PI ? 1 : 0;\n\n let d: string;\n if (innerRadius > 0) {\n const ix1 = cx + innerRadius * Math.cos(endAngle);\n const iy1 = cy + innerRadius * Math.sin(endAngle);\n const ix2 = cx + innerRadius * Math.cos(startAngle);\n const iy2 = cy + innerRadius * Math.sin(startAngle);\n d = [\n `M ${String(x1)} ${String(y1)}`,\n `A ${String(outerRadius)} ${String(outerRadius)} 0 ${String(largeArc)} 1 ${String(x2)} ${String(y2)}`,\n `L ${String(ix1)} ${String(iy1)}`,\n `A ${String(innerRadius)} ${String(innerRadius)} 0 ${String(largeArc)} 0 ${String(ix2)} ${String(iy2)}`,\n 'Z',\n ].join(' ');\n } else {\n d = [\n `M ${String(cx)} ${String(cy)}`,\n `L ${String(x1)} ${String(y1)}`,\n `A ${String(outerRadius)} ${String(outerRadius)} 0 ${String(largeArc)} 1 ${String(x2)} ${String(y2)}`,\n 'Z',\n ].join(' ');\n }\n\n paths.push(<path key={si} d={d} fill={fillColor} />);\n }\n\n const ariaLabel = item.label\n ? `${item.label}: ${item.slices.map((s) => `${s.label} ${String(s.value)}`).join(', ')}`\n : `Pie chart: ${item.slices.map((s) => `${s.label} ${String(s.value)}`).join(', ')}`;\n\n const legendStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 'var(--glyph-spacing-sm, 0.5rem)',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n fontSize: '0.75rem',\n color: 'var(--glyph-text-muted, #6b7a94)',\n };\n\n return (\n <div key={`${keyPrefix}-${String(i)}`} style={{ textAlign: 'center' }}>\n {item.label && (\n <div\n style={{\n fontSize: '0.875rem',\n fontWeight: 600,\n color: 'var(--glyph-infographic-heading-color, #1e293b)',\n marginBottom: 'var(--glyph-spacing-xs, 0.25rem)',\n }}\n >\n {item.label}\n </div>\n )}\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${String(size)} ${String(size)}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {paths}\n </svg>\n <div style={legendStyle}>\n {item.slices.map((slice, si) => {\n const sliceColorIndex = (colorOffset + si) % PROGRESS_COLORS.length;\n const legendColor = slice.color ?? PROGRESS_COLORS[sliceColorIndex];\n return (\n <span\n key={si}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\n fontWeight: 500,\n }}\n >\n <span\n style={{\n display: 'inline-block',\n width: '0.625rem',\n height: '0.625rem',\n borderRadius: '2px',\n background: legendColor,\n }}\n aria-hidden=\"true\"\n />\n {slice.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction renderDividerGroup(items: DividerItem[], keyPrefix: string): ReactElement {\n return (\n <div data-group=\"divider\" key={keyPrefix}>\n {items.map((item, i) => (\n <hr\n key={`${keyPrefix}-${String(i)}`}\n role=\"separator\"\n style={{\n border: 'none',\n borderTop: `1px ${item.style ?? 'solid'} var(--glyph-infographic-section-divider, #d0d8e4)`,\n margin: 'var(--glyph-spacing-sm, 0.5rem) 0',\n }}\n />\n ))}\n </div>\n );\n}\n\nfunction renderRatingGroup(items: RatingItem[], keyPrefix: string): ReactElement {\n const starColor = 'var(--glyph-infographic-star, #f59e0b)';\n const emptyColor = 'var(--glyph-text-muted, #6b7a94)';\n\n return (\n <div data-group=\"rating\" key={keyPrefix}>\n {items.map((item, i) => {\n const max = item.max ?? 5;\n const fullStars = Math.floor(item.value);\n const hasHalf = item.value - fullStars >= 0.5;\n\n const stars: ReactElement[] = [];\n for (let s = 0; s < max; s++) {\n if (s < fullStars) {\n stars.push(\n <span key={s} style={{ color: starColor }} aria-hidden=\"true\">\n {'\\u2605'}\n </span>,\n );\n } else if (s === fullStars && hasHalf) {\n stars.push(\n <span\n key={s}\n style={{ position: 'relative', display: 'inline-block' }}\n aria-hidden=\"true\"\n >\n <span style={{ color: emptyColor }}>{'\\u2605'}</span>\n <span\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n overflow: 'hidden',\n width: '50%',\n color: starColor,\n }}\n >\n {'\\u2605'}\n </span>\n </span>,\n );\n } else {\n stars.push(\n <span key={s} style={{ color: emptyColor }} aria-hidden=\"true\">\n {'\\u2605'}\n </span>,\n );\n }\n }\n\n return (\n <div\n key={`${keyPrefix}-${String(i)}`}\n style={{\n display: 'flex',\n alignItems: 'baseline',\n gap: 'var(--glyph-spacing-sm, 0.5rem)',\n marginBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 700,\n color: 'var(--glyph-heading, #0a0e1a)',\n lineHeight: 1,\n }}\n >\n {String(item.value)}\n </span>\n <div>\n <div\n style={{\n fontSize: '0.875rem',\n color: 'var(--glyph-text, #1a2035)',\n fontWeight: 600,\n }}\n >\n {item.label}\n </div>\n <div\n style={{ fontSize: '1.125rem', letterSpacing: '0.05em' }}\n aria-label={`${String(item.value)} out of ${String(max)} stars`}\n >\n {stars}\n </div>\n {item.description && (\n <div\n style={{\n fontSize: '0.75rem',\n color: 'var(--glyph-infographic-desc-color, #64748b)',\n marginTop: 'var(--glyph-spacing-xs, 0.25rem)',\n fontStyle: 'italic',\n }}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ─── Component ─────────────────────────────────────────────────\n\nexport function Infographic({\n data,\n block,\n container,\n}: GlyphComponentProps<InfographicData>): ReactElement {\n const { title, sections } = data;\n const baseId = `glyph-infographic-${block.id}`;\n\n // Container-adaptive: disable grid at compact tier (RFC-015)\n const useGrid = sections.length >= 2 && container.tier !== 'compact';\n const sectionLayouts = useMemo(() => computeSectionLayout(sections), [sections]);\n\n const containerStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-body, system-ui, sans-serif)',\n color: 'var(--glyph-text, #1a2035)',\n background: 'var(--glyph-surface, #e8ecf3)',\n border: '1px solid var(--glyph-border, #d0d8e4)',\n borderRadius: 'var(--glyph-radius-md, 0.5rem)',\n padding: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const titleStyle: React.CSSProperties = {\n fontFamily: 'var(--glyph-font-heading, system-ui, sans-serif)',\n fontWeight: 700,\n fontSize: '1.25rem',\n color: 'var(--glyph-heading, #0a0e1a)',\n margin: 0,\n paddingBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n marginBottom: 'var(--glyph-spacing-md, 1rem)',\n borderBottom: '2px solid var(--glyph-infographic-accent, #3b82f6)',\n ...(useGrid ? { gridColumn: '1 / -1' } : {}),\n };\n\n const sectionDividerStyle: React.CSSProperties = {\n borderTop: '1px solid var(--glyph-infographic-section-divider, #d0d8e4)',\n paddingTop: 'var(--glyph-spacing-md, 1rem)',\n marginTop: 'var(--glyph-spacing-md, 1rem)',\n };\n\n const sectionsGridStyle: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: 'var(--glyph-spacing-md, 1rem)',\n alignItems: 'start',\n };\n\n const sectionCardStyle: React.CSSProperties = {\n background: 'var(--glyph-infographic-section-bg, rgba(255, 255, 255, 0.5))',\n borderRadius: 'var(--glyph-radius-sm, 0.375rem)',\n padding: 'var(--glyph-spacing-sm, 0.5rem)',\n };\n\n const headingStyle: React.CSSProperties = {\n fontWeight: 700,\n fontSize: '1rem',\n color: 'var(--glyph-infographic-heading-color, #1e293b)',\n marginBottom: 'var(--glyph-spacing-sm, 0.5rem)',\n borderLeft: '3px solid var(--glyph-infographic-accent, #3b82f6)',\n paddingLeft: 'var(--glyph-spacing-sm, 0.5rem)',\n };\n\n const printCss = useGrid\n ? `@media print { #${CSS.escape(baseId)} [data-layout=\"grid\"] { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; gap: 0.5rem !important; } #${CSS.escape(baseId)} [data-layout=\"grid\"] > div { break-inside: avoid; } }`\n : '';\n\n let progressColorOffset = 0;\n\n return (\n <div id={baseId} role=\"region\" aria-label={title ?? 'Infographic'} style={containerStyle}>\n {printCss && <style>{printCss}</style>}\n <div data-layout={useGrid ? 'grid' : 'stack'} style={useGrid ? sectionsGridStyle : undefined}>\n {title && <div style={titleStyle}>{title}</div>}\n {sections.map((section, si) => {\n const groups = groupConsecutiveItems(section.items);\n const gridColumn = sectionLayouts[si];\n\n const sectionStyle: React.CSSProperties = {\n ...(useGrid ? sectionCardStyle : {}),\n ...(gridColumn ? { gridColumn } : {}),\n ...(!useGrid && si > 0 ? sectionDividerStyle : {}),\n };\n\n return (\n <div key={si} style={Object.keys(sectionStyle).length > 0 ? sectionStyle : undefined}>\n {section.heading && <div style={headingStyle}>{section.heading}</div>}\n {groups.map((group, gi) => {\n const key = `s${String(si)}-g${String(gi)}`;\n switch (group.type) {\n case 'stat':\n return renderStatGroup(group.items as StatItem[], key);\n case 'progress': {\n const el = renderProgressGroup(\n group.items as ProgressItem[],\n key,\n progressColorOffset,\n );\n progressColorOffset += group.items.length;\n return el;\n }\n case 'fact':\n return renderFactGroup(group.items as FactItem[], key);\n case 'text':\n return renderTextGroup(group.items as TextItem[], key);\n case 'pie': {\n const el = renderPieGroup(group.items as PieItem[], key, progressColorOffset);\n progressColorOffset += (group.items as PieItem[]).reduce(\n (sum, item) => sum + item.slices.length,\n 0,\n );\n return el;\n }\n case 'divider':\n return renderDividerGroup(group.items as DividerItem[], key);\n case 'rating':\n return renderRatingGroup(group.items as RatingItem[], key);\n default:\n return null;\n }\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { infographicSchema } from '@glyphjs/schemas';\nimport type { GlyphComponentDefinition } from '@glyphjs/types';\nimport { Infographic } from './Infographic.js';\nimport type { InfographicData } from './Infographic.js';\n\nexport const infographicDefinition: GlyphComponentDefinition<InfographicData> = {\n type: 'ui:infographic',\n schema: infographicSchema,\n render: Infographic,\n};\n\nexport { Infographic, classifySectionWidth } from './Infographic.js';\nexport type {\n InfographicData,\n InfographicSection,\n InfographicItem,\n PieItem,\n PieSlice,\n DividerItem,\n RatingItem,\n} from './Infographic.js';\n"]}